??xml version="1.0" encoding="utf-8" standalone="yes"?>
又可l分为Eden区域、From区域与To区域?br /> Eden区域保存新创建的对象。当该区域中的对象满了后QJVMpȝ做可达性测试,主要d是检有哪些对象由根集合出发是不可到辄Q这些对象就可被JVM回收Q且所有的zd对象从Eden区域拷到To区域Q此时有一些对象将发生状态交换,有的对象׃To区域被{UdFrom区域Q此时From区域有了对象?br /> 该过E执行期_(d)JVM的性能非常低下Q会(x)严重影响到正在运行的应用的性能?br /> 老对象区域:(x)
在老对象区域中的对象仍有一个较长的生命周期。经q一D|间后Q被转入tb老对象区域的对象变成了垃圾对象Q此时它们被打上相应的标讎ͼJVM自动回收它们?br /> 不要频繁强制pȝ做垃圑֛Ӟ因ؓ(f)JVM?x)利用有限的pȝ资源Q优先完成垃圑֛收工作,致应用无法快速响应来自用L(fng)的请求,q样?x)媄响系l的整体性能?br /> 2. JVM中对象的生命周期
对象的整个生命周期大致分?个阶D:(x)创徏(creation)、应?using)、不可视(invisible)、不可到?unreachable)、可攉(collected)、终l?finalized)、释?free)?br /> 1) 创徏阶段
pȝ通过下面步骤Q完成对象的创徏Q?br /> a) 为对象分配存储空?br /> b) 开始构造对?br /> c) 递归调用其超cȝ构造方?br /> d) q行对象实例初始化与变量初始?br /> e) 执行构造方法体
在创建对象时的几个关键应用规则:(x)
避免在@环体中创建对象,即该对象占用内存空间不?br /> 量?qing)时使对象符合垃圑֛收标?br /> 不要采用q深的承层?br /> 讉K本地变量优于讉KcM的变?img src ="http://m.tkk7.com/tbwshc/aggbug/401055.html" width = "1" height = "1" />
]]>
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import org.apache.log4j.Logger;
/**
* 数据库操作管理类
*
* @author Harlyhood
*
*/
public class DBManager {
// --------------------------------------------------------- Instance
private static Logger logger = Logger.getLogger(DBManager.class);
// --------------------------------------------------------- Methods
// 数据库连接对?
private Connection con;
// SQL语句对象
private Statement stmt;
// 带参数的Sql语句对象
private PreparedStatement pstmt;
// 记录集对?
private ResultSet rs;
// 数据q接理Q连接池对象Q?
private DBConnectionManager dcm = null;
/** ***********************手动讄的连接参?******************************** */
@SuppressWarnings("unused")
private static String _DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
@SuppressWarnings("unused")
private static String _URL = "jdbc:sqlserver://localhost:1433;database=Hospital_AI_DB;characterEncoding=gb2312";
@SuppressWarnings("unused")
private static String _USER_NA = "sa";
@SuppressWarnings("unused")
private static String _PASSWORD = "";
/** ********************************************************************** */
// 默认构?
public DBManager() {
}
/** ****************************************************************************************** */
/**
* **************************************** 数据库连接初始化
* ***********************************
*/
/** ****************************************************************************************** */
/**
* 得到一个默认的数据库连接[?com.hospital.dao.tools.db.properties文g初始化]
*
* @throws Exception
*/
private void getConnection() {
logger.info("###############open:::::从默认的配置文g得到一个数据库q接");
// 获取一个连?a style="color: #000000" >tb池管理类的实?
dcm = DBConnectionManager.getInstance();
// 得到一个数据库q接
con = dcm.getConnection("mysql");
try {
con.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 从指定参数得C个连接对?
*
* @param driver
* @param url
* @param user_na
* @param password
* @throws Exception
*/
public void getConnection(String driver, String url, String user_na,
String password) throws Exception {
try {
logger.info("###############open:::::从指定配|中得到一个数据库q接");
Class.forName(driver);
con = DriverManager.getConnection(url, user_na, password);
} catch (ClassNotFoundException ex) {
logger
.info("###############Error[com.hospital.dao.tools.DBManager^^^Method:getConnection^^^Line:81]找不到类驱动c? "
+ driver);
throw ex;
} catch (SQLException ex) {
logger
.info("###############Error[com.hospital.dao.tools.DBManager^^^Method:getConnection^^^Line:81]加蝲c? "
+ driver + " 时出?SQLException 异常");
throw ex;
}
}
/** ****************************************************************************************** */
/**
* **************************************** 数据库操作方?
* ***********************************
*/
/** ****************************************************************************************** */
/**
* 执行SQL语句操作(更新数据 无参?
*
* @param strSql
* SQL语句
* @throws Exception
*/
public boolean executeUpdate(String strSql) throws SQLException {
getConnection();
// getConnection(_DRIVER,_URL,_USER_NA,_PASSWORD);
boolean flag = false;
stmt = con.createStatement();
logger.info("###############::执行SQL语句操作(更新数据 无参?:" + strSql);
try {
if (0 < stmt.executeUpdate(strSql)) {
close_DB_Object();
flag = true;
con.commit();
}
} catch (SQLException ex) {
logger
.info("###############Error DBManager Line126::执行SQL语句操作(更新数据 无参?:"
+ strSql + "p|!");
flag = false;
con.rollback();
throw ex;
}
return flag;
}
/**
* 执行SQL语句操作(更新数据 有参?
*
* @param strSql
* sql指o(h)
* @param prams
* 参数列表
* @return
* @throws SQLException
*/
public boolean executeUpdate(String strSql, HashMap<Integer, Object> prams)
throws SQLException, ClassNotFoundException {
getConnection();
// getConnection(_DRIVER,_URL,_USER_NA,_PASSWORD);
boolean flag = false;
try {
pstmt = con.prepareStatement(strSql);
setParamet(pstmt, prams);
logger.info("###############::执行SQL语句操作(更新数据 有参?:" + strSql);
if (0 < pstmt.executeUpdate()) {
close_DB_Object();
flag = true;
con.commit();
}
} catch (SQLException ex) {
logger
.info("###############Error DBManager Line121::执行SQL语句操作(更新数据 无参?:"
+ strSql + "p|!");
flag = false;
con.rollback();
throw ex;
} catch (ClassNotFoundException ex) {
logger
.info("###############Error DBManager Line152::执行SQL语句操作(更新数据 无参?:"
+ strSql + "p|! 参数讄cd错误!");
con.rollback();
throw ex;
}
return flag;
}
/**
* 执行SQL语句操作(查询数据 无参?
*
* @param strSql
* SQL语句
* @return 数组对象列表
* @throws Exception
*/
public ArrayList<HashMap<Object, Object>> executeSql(String strSql)
throws Exception {
getConnection();
// getConnection(_DRIVER,_URL,_USER_NA,_PASSWORD);
stmt = con.createStatement();
logger.info("###############::执行SQL语句操作(查询数据):" + strSql);
rs = stmt.executeQuery(strSql);
con.commit();
if (null != rs) {
return convertResultSetToArrayList(rs);
}
close_DB_Object();
return null;
}
/**
* 执行SQL语句操作(查询数据 有参?
*
* @param strSql
* SQL语句
* @param prams
* 参数列表
* @return 数组对象列表
* @throws Exception
*/
public ArrayList<HashMap<Object, Object>> executeSql(String strSql,
HashMap<Integer, Object> prams) throws Exception {
getConnection();
// getConnection(_DRIVER,_URL,_USER_NA,_PASSWORD);
pstmt = con.prepareStatement(strSql);
setParamet(pstmt, prams);
logger.info("###############::执行SQL语句操作(查询数据):" + strSql);
rs = pstmt.executeQuery();
con.commit();
if (null != rs) {
return convertResultSetToArrayList(rs);
}
return null;
}
/**
* 执行存储q程(查询数据 无参?
*
* @param procName
* 存储q程名称
* @return 数组列表对象
* @throws Exception
*/
public ArrayList<HashMap<Object, Object>> executeProcedureQuery(
String procName) throws Exception {
getConnection();// 获取q接
String callStr = "{call " + procName + "}";// 构造执行存储过E的sql指o(h)
CallableStatement cs = con.prepareCall(callStr);
logger.info("###############::执行存储q程(查询数据):" + procName);
rs = cs.executeQuery();
con.commit();
cs.close();
close_DB_Object();
return convertResultSetToArrayList(rs);
}
/**
* 执行存储q程(查询数据,带参?q回l果集合
*
* @param procName
* 存储q程名称
* @param parameters
* 参数对象数组
* @param al
* 数组列表对象
* @return 数组列表对象
* @throws Exception
*/
public ArrayList<HashMap<Object, Object>> executeProcedureQuery(
String procName, Object[] parameters) throws Exception {
int parameterPoint = 0;
// 获取存储q程信息列表集合
ArrayList<HashMap<Object, Object>> procedureInfo = getProcedureInfo(procName);
// 获取存储q程的完全名U?
String procedureCallName = getProcedureCallName(procName,parameters.length);
// 获取q接对象
getConnection();
// 初始?存储q程 执行对象
CallableStatement cs = con.prepareCall(procedureCallName);
// 参数下标变量
int index = 0;
// 获取 存储q程信息列表集合?q代?对象
Iterator<HashMap<Object, Object>> iter = procedureInfo.iterator();
// 遍历存储q程信息列表集合
while (iter.hasNext()) {
HashMap<Object, Object> hm = iter.next();
parameterPoint++;
// 如果参数是输入参?way = 0
if (hm.get("WAY").equals("0")) {
// 讄参数到cs
cs.setObject(parameterPoint, parameters[index]);
// 参数下标+1
index++;
}
}
// 释放q个对象,做ؓ(f)W二ơ?
procedureInfo = null;
logger.info("###############::执行存储q程(查询数据):::::" + procedureCallName);
rs = cs.executeQuery();
con.commit();
procedureInfo = convertResultSetToArrayList(rs);
cs.close();
close_DB_Object();
return procedureInfo;
}
/**
* 执行存储q程(更新Q查询数据[单查询、非U录集]Q返回输出参数[非纪录集])
*
* @param procName
* 存储q程名称
* @param parameters
* 参数对象数组
* @param os
* 输出参数对象数组
* @return 输出参数对象数组
* @throws Exception
*/
public Object[] executeProcedureUpdate(String procName, Object[] parameters)
throws Exception {
logger.info("------------------------------------------------------------------------------------------------------");
logger.info(" Run --> executeProcedureUpdate ############## 正在执行 存储q程: " + procName +" ##############");
CallableStatement cs = null;
Object []returnVal = null;
try {
// 获取 存储q程 调用全名
String fullPCallName = getProcedureCallName(procName,parameters.length);
logger.info(" Run --> executeProcedureUpdate # 存储q程命o(h): " + fullPCallName +" #");
//获取存储q程参数信息
ArrayList<HashMap<Object, Object>> p_Call_Info_List = getProcedureInfo(procName);
//获取q接
getConnection();
//创徏 存储q程 执行对象
cs = con.prepareCall(fullPCallName);
//数组下标
int index = 1;
//输出参数下标 U录
ArrayList<Integer> outPutIndexList = new ArrayList<Integer>();
logger.info(" Run --> executeProcedureUpdate # 参数个数? " + parameters.length +" #");
for(HashMap<Object,Object> tempHash:p_Call_Info_List)
{
if("0".equals(tempHash.get("WAY")))
{
//讄输入参数
cs.setObject(index, parameters[index-1]);
logger.info(" Run --> executeProcedureUpdate # 输入 Input: ~号:" + index +" ? "+parameters[index-1]+" cd: "+parameters[index-1].getClass()+" #");
}
else
{
//注册输出参数
cs.registerOutParameter(index, getDataType(tempHash.get("TYPENAME").toString()));
//U录输出参数的下?
outPutIndexList.add(index);
logger.info(" Run --> executeProcedureUpdate # 输出 OutPut: ~号:" + index +" ? "+parameters[index-1]+" cd: "+parameters[index-1].getClass()+" #");
}
index++;
}
logger.info(" Run --> executeProcedureUpdate # 参数讄完毕,正在执行?nbsp; : #");
//-------------------- 执行 -----------------
if(!cs.execute())
{
returnVal = new Object[outPutIndexList.size()];
logger.info(" Run --> executeProcedureUpdate # 执行成功! : #");
//取输 出参数的 q回?
for(int i = 0 ;i<outPutIndexList.size();i++)
{
returnVal[i] = cs.getObject(outPutIndexList.get(i));
logger.info(" Run --> executeProcedureUpdate # q回?"+(i+1)+" "+returnVal[i]+" #");
}
con.commit();//提交
}
} catch (Exception e) {
logger.info(" Run --> executeProcedureUpdate # 执行p|!事务回滚?: #");
con.rollback();
throw e;
}
logger.info("------------------------------------------------------------------------------------------------------");
return returnVal;
}
/** ****************************************************************************************** */
/**
* ********************************* 工?
* ************************************************
*/
/** ****************************************************************************************** */
/**
* 关闭数据对象
*/
public void close_DB_Object() {
logger.info("###############close:::::关闭q接对象Q语句对象,记录集对?);
if (null != rs) {
try {
rs.close();
} catch (SQLException ex) {
rs = null;
}
}
if (null != stmt) {
try {
stmt.close();
} catch (SQLException ex) {
stmt = null;
}
}
if (null != pstmt) {
try {
pstmt.close();
} catch (SQLException ex) {
pstmt = null;
}
}
if (con != null) {
dcm.freeConnection("mysql", con);
}
}
/**
* 讄Sql 指o(h)参数
*
* @param p_stmt
* PreparedStatement
* @param pramets
* HashMap
*/
private PreparedStatement setParamet(PreparedStatement p_stmt,
HashMap<Integer, Object> pramets) throws ClassNotFoundException,
SQLException {
// 如果参数为空
if (null != pramets) {
// 如果参数个数?
if (0 <= pramets.size()) {
for (int i = 1; i <= pramets.size(); i++) {
try {
// 字符cd String
if (pramets.get(i).getClass() == Class
.forName("java.lang.String")) {
p_stmt.setString(i, pramets.get(i).toString());
}
// 日期cd Date
if (pramets.get(i).getClass() == Class
.forName("java.sql.Date")) {
p_stmt.setDate(i, java.sql.Date.valueOf(pramets
.get(i).toString()));
}
// 布尔cd Boolean
if (pramets.get(i).getClass() == Class
.forName("java.lang.Boolean")) {
p_stmt.setBoolean(i, (Boolean) (pramets.get(i)));
}
// 整型 int
if (pramets.get(i).getClass() == Class
.forName("java.lang.Integer")) {
p_stmt.setInt(i, (Integer) pramets.get(i));
}
// 点 float
if (pramets.get(i).getClass() == Class
.forName("java.lang.Float")) {
p_stmt.setFloat(i, (Float) pramets.get(i));
}
// 双精度型 double
if (pramets.get(i).getClass() == Class
.forName("java.lang.Double")) {
p_stmt.setDouble(i, (Double) pramets.get(i));
}
} catch (ClassNotFoundException ex) {
throw ex;
} catch (SQLException ex) {
throw ex;
}
}
}
}
return p_stmt;
}
/**
* 转换记录集对象ؓ(f)数组列表对象
*
* @param rs
* U录集合对象
* @return 数组列表对象
* @throws Exception
*/
private ArrayList<HashMap<Object, Object>> convertResultSetToArrayList(
ResultSet rs) throws Exception {
logger.info("###############::转换记录集对象ؓ(f)数组列表对象");
// 获取rs 集合信息对象
ResultSetMetaData rsmd = rs.getMetaData();
// 创徏数组列表集合对象
ArrayList<HashMap<Object, Object>> tempList = new ArrayList<HashMap<Object, Object>>();
HashMap<Object, Object> tempHash = null;
// 填充数组列表集合
while (rs.next()) {
// 创徏键值对集合对象
tempHash = new HashMap<Object, Object>();
for (int i = 0; i < rsmd.getColumnCount(); i++) {
// 遍历每列数据Q以键值Ş式存在对象tempHash?
tempHash.put(rsmd.getColumnName(i + 1).toUpperCase(), rs
.getString(rsmd.getColumnName(i + 1)));
}
// W一个键值对Q存储在tempList列表集合对象?
tempList.add(tempHash);
}
close_DB_Object();// 关闭相关链接
return tempList;// q回填充完毕的数l列表集合对?
}
/**
* 从数据库得到tb存储q程信息
*
* @param procName
* 存储q程名称
* @return 数组列表对象
* @throws Exception
*/
private ArrayList<HashMap<Object, Object>> getProcedureInfo(String procName)
throws Exception {
return this.executeSql("select Syscolumns.isoutparam as Way,systypes.name as TypeName from sysobjects,syscolumns,systypes where systypes.xtype=syscolumns.xtype and syscolumns.id=sysobjects.id and sysobjects.name='"
+ procName + "' order by Syscolumns.isoutparam");
}
/**
* 从数据库得到存储q程参数个数
*
* @param procName
* 存储q程名称
* @return 数组列表对象
* @throws Exception
*/
@SuppressWarnings("unused")
private int getParametersCount(String procName) throws Exception {
int returnVal = 0;
for (HashMap<Object, Object> tempHas : this
.executeSql("select count(*) as RowsCount from sysobjects,syscolumns,systypes where systypes.xtype=syscolumns.xtype and syscolumns.id=sysobjects.id and sysobjects.name='"
+ procName + "'")) {
returnVal = Integer.parseInt(tempHas.get("ROWSCOUNT").toString());
}
return returnVal;
}
/**
* 得到调用存储q程的全?
*
* @param procName
* 存储q程名称
* @return 调用存储q程的全?
* @throws Exception
*/
private String getProcedureCallName(String procName, int prametCount)
throws Exception {
String procedureCallName = "{call " + procName;
for (int i = 0; i < prametCount; i++) {
if (0 == i) {
procedureCallName = procedureCallName + "(?";
}
if (0 != i) {
procedureCallName = procedureCallName + ",?";
}
}
procedureCallName = procedureCallName + ")}";
return procedureCallName;
}
/**
* 得到数据cd的整型?
*
* @param typeName
* cd名称
* @return 数据cd的整型?
*/
private int getDataType(String typeName) {
if (typeName.equals("varchar"))
return Types.VARCHAR;
if (typeName.equals("int"))
return Types.INTEGER;
if (typeName.equals("bit"))
return Types.BIT;
if (typeName.equals("float"))
return Types.FLOAT;
return 0;
}
// 讄驱动路径
@SuppressWarnings("static-access")
public void set_DRIVER(String _DRIVER) {
this._DRIVER = _DRIVER;
}
// 讄数据库密?
@SuppressWarnings("static-access")
public void set_PASSWORD(String _PASSWORD) {
this._PASSWORD = _PASSWORD;
}
// 讄数据库连接字W串
@SuppressWarnings("static-access")
public void set_URL(String _URL) {
this._URL = _URL;
}
// 讄数据库用户名
@SuppressWarnings("static-access")
public void set_USER_NA(String _USER_NA) {
this._USER_NA = _USER_NA;
}
}
送走的第一位好友,是某著名互联|公司女性频道的ȝQ突发脑溢血Q去世时q仅37岁。新q送走的是《健康与容》杂志的ȝ孟玲和,48岁,开?x)时H发脑溢血Q去世前几天曑ְ亮还曾与其彻夜长聊?/p>
从八宝山回来的\上,曑ְ亮一个h沿着长安街走了好久。这位酒出版h助理、情感职Z栏作家、L为别?#8220;心灵鸡汤”的hQ在那一刻,竟然抑制不住心生强烈的灭感?/p>
他忽焉觉得Q金钱、地位、名利都不再那么重要Q生命、健康与爱,q些我们人生中更h本源意义Q但是长久被忽视的东西,慢慢清晰地Q现出来?/p>
q是“压力山大”的一代h。严重透支w体Q恨不能每周7*24时地工作,在跻w上层、功成名q路上狂奔。他们的不安全感、焦虑感从某U程度上q远过了父辈?/p>
他们几乎完整地经历了中国C会(x)l济快速发展的三十q_(d)从物质胦富的极度匮乏到迅速富裕;同时也见证了恢复高考、计划生肌Ӏ打破大锅饭、企业改制、取消福利分ѝ中国加入WTO{种U既有秩序的被打破?/p>
当秩序被打破ӞM(x)有h为此付出代h(hun)。这一代hw上深深烙上了中国社?x)经发展代际变q的印记?/p>
35岁老了Q?/p>
提前来(f)的焦虑、无措、迷?/p>
U锐国际人力资源公司业务ȝ刘峰前一阵子刚刚接触了一家叫“豆瓣”的互联网公司。让他这个做了十几年人力资源工作的?#8220;猎头”有些意外的是Q豆瓣公司员工的q_q龄非常,大概?5岁左叟?/p>
大约三年前,刘峰和腾讯的HR有次聊天Q让他印象深ȝ是腾讯的“特色”之一“很年?#8221;?/p>
q十q里Q国内一些新晋大公司的出玎ͼ像百度、腾讯、阿里巴巴等互联|巨头的崛vQ带动了一个大产业Q很多q轻人年U轻d获得了意想不到的成功?/p>
而且Q互联网{新产业的勃_(d)正加速着C会(x)对h才的需求和优胜劣汰Q也正拉低着职场人群的^均年龄?/p>
互联|领域里“q轻?#8221;的公司正日益多v来。比如中国第一家女性团购网?#8220;聚美优品”Q三个联合创始h都是80后,一些中层管理者甚x1989q生人,今年29岁的CEO陈欧一直有个想法,在自?0岁以前把聚美优品做上市。他甚至坦言Q在事业快速发展的q几q_(d)他暂时不?x)因为结婚这c?#8220;家事”把自己限制住?/p>
35岁在某种E度上就意味着职场“生死U?#8221;Q对许多IT人来_(d)35岁甚x味着技术生涯的l束?/p>
现在Q对来多在职场和事业上打拼的80后来_(d)29岁就已经临近“q期”Q青春的有效?9岁截止,一?0岁,׃(x)被打?#8220;Timeout”(q期)的印记?/p>
对于那些最早一批进入外资企?#8220;吃螃?#8221;的h来说Q现在已qhCq_(d)更是处境?yu)尬?/p>
一斚w׃q龄的原因,不少外企白领在公司的发展遭遇瓉Q?#8220;在我q个q龄和职位,l箋待在外企的话后面的\已经很清楚,升职上遭遇玻璃天花板Q年龄上l不起高强度的工?#8221;?/p>
另一斚wQ不h׃产业大环境的变化Q?#8220;金饭?#8221;的含金量正在加速褪厅R?/p>
U锐国际早期的客h100%都是外资企业Q公司成立五六年Ӟ2000q左叻IU锐国际开始与包括华ؓ(f)、李宁等在内的本土企业有初步接触Q到2004q?005q时Q公司明将发展内资企业客户作ؓ(f)重点Q彼时内资企业所占科锐国际客h的比例还很低Q从2008q?009q以后,内资企业的业务能占到U锐国际M务的癑ֈ之二三十?#8220;在高U技、互联网q些行业Q外资客户与内资客户的比重甚x四六开?#8221;
刘峰认识很多外资企业的高层或者中层以上的l理Q在90q代末或?000q左叻I他们的职业很让h艳MQ?a >tb现在职业?#8220;含金?#8221;已经大不如以前?#8220;那时候的外企中高层,C套房子很正常Q但是你今天q到外企Q即使给你八千、一万块钱月薪,你什么时候才能买个房子呢Q同h薪水Q含义已l发生了深刻的变化?#8221;
C会(x)l济的快速发展也让职场危机提前而至Q在发达国家Q焦虑、无措、迷茫等中年职场危机的表现通常发生?5?5岁,但是在中国却提前了近10q?/p>
q是“压力山大”的一代h。严重透支w体Q恨不能每周7x24时地工作,在跻w上层、功成名q路上狂奔。他们的不安全感、焦虑感从某U程度上q远过了父辈?/p>
退休或重返职场Q?/p>
参数未知的将?/p>
“退?#8221;Q对当下q个人群来说Q几乎是一U奢望?/p>
李强是一家私企的老板Q早q做生意赚了几百万后觉得_来生活了,便结束了生意Q开始安享生zR可是不到十q_(d)他发现生zȝ发展完全q了他预设的轨道?#8220;十年前几百万_一个h安安E稳q完一辈子Q可是我没有惛_q几q房仗物价会(x)涨成q样Q现在几百万q算个啥?#8221;“安n”计划泡汤的李Z得不重整旗鼓Q再ơ创业?/p>
刘峰w边也有朋友有过和李强类?#8220;提前退?#8221;的经历。这位朋友ؓ(f)了移民加拿大Q在事业发展最风水的时候,提前l束在中国国内的工作Q在加拿大当地随便找了个工作。待到移民必ȝ居住旉期满后,q位朋友惛_回中国来发展Q却发现已经错失了事业发展的最好机?x)?/p>
对于臛_q有?#8220;家底?#8221;的李强等人来说未来虽然艰难,但还不至于毫无保障,对于更多的中q职场工作者而言未来生活的参C概未知,q种不确定性和不安全感更加重了q一体的焦虑。到底有多少资未来才可以安枕无忧?没h可以l出一个确切的{案?/p>
20多年前,大学每年的学费只?00元,现在有些专业已经冲上万元Q增长了U?0倍。中国青q报C会(x)调查中心曾有一?625人参与的调查l计Uͼ管78.8%的h认ؓ(f)和十q前相比收入增加了,但是85.3%的h感觉自己的生z负担比十年前更重了。有Z了q四十年来中国hl婚的成本:(x)70q代末是600元,80q代?000元,90q代?.3万,21世纪?6.6万,来贵的中国式婚姻。显而易见的是,中国C会(x)l济获得了前所未有的快速发展,但h们的收入增长速度却远没有跑过物h(hun)上涨的速度?/p>
“在过d十年的发展过E中Q一个不可回避的问题是国家对中层h,其实没有好的政策来扶植他们?#8221;刘峰感慨Q中层的赋税很高Q高到很吓h的程度,而另一斚wQ国家给予这一阶层的福利几乎是零?#8220;比如说我每月交那么多qE,H然有一天失业了Q却发现我什么都没有Q真的是什么都没有?#8221;
对于q一现状Q资׃业经学家白益民认ؓ(f)Q日本企业的员工对于未来的焦虑感要比中国低得多,“日本有约定俗成的ln雇䄦制以?qing)与其相配合的年功序列制、企业工?x)。这是日本的三大器?#8221;白益民介l,在日本的企业中,企业不会(x)L裁员Q年功序列制是指工资待遇按员工的资历慢慢增长Q所以一旦进入一个企业,你就可以知道自己未来在这家公司大概n有的工资待遇水准?/p>
长期以来Q对于中国是否应该采用终w雇佣制的争Z直存在,白益民的看法是一些特定的企业可以试q种制度Q这对于企业人才的积累、技术的传承以及(qing)员工对生zȝ安全感都会(x)有很大的帮助?/p>
异化的h?/p>
“被高?#8221;的一?/p>
曑ְ亮认为,整个C会(x)在追求经高速发展的时候,同时D了h性的异化。因Zh不可能变成一个经动物,人有内在的自、自我,有对q福感的q逐,l济q不能满h们更q快乐?#8220;很多人在有了基本的物质保证之后,׃(x)发现自己开始寻找新的幸之道?#8221;
“你会(x)发现Zq种心理状态的变化和经发展有一脉相承的地方Q特别是在经高速发展的时候?#8221;曑ְ亮注意到Q中q阶层的q种集体性焦虑和qQ曾l出现在国的上世纪七八十年代,中国台湾的九(ji)十年代?/p>
在中国,一斚w是高速发展的l济环境让管理h才的职业晋升速度过了心智成熟度的提升,另一斚w是中国长期以来的应试教育q分注重分数Q而忽视了心灵的成长,此外对经发展的q度q求Q也让这一体~Z对生zȝ整体观?/p>
“升迁官能?#8221;在中层h中q当普遍?#8220;或是没有做好准备Q或者是能力不够、提拔太快,被提拔上M后,?x)发现很多事情自己没有能力驾驭了?#8221;曑ְ亮认为,因ؓ(f)心智的成熟速度赶不上社?x)角色的提升速度Q很多中层h在职场角色擢升后就?x)出现各U问题?#8220;跟同事的关系、家庭的问题Q突然就?x)觉得自己扛不住了。我曄在专栏中提到q,在这个状态下要学?x)用一些方法去调试Q这涉?qing)到很多大的N了。我觉得q跟人才的储备也有关p,l济发展太快Qh才储备不够?#8221;
q种对周遭事物掌控能力的Ơ缺也极大地加剧了这一人群的焦虑感?/p>
一直以来,中国都推崇GDP增长的神话,认ؓ(f)面(f)的首要问题是快地发展生产力Q提高经水qI解除贫困状态,增强l合国力。在q种背景下,“GDP崇拜”成ؓ(f)一U普遍情l,唯效率主义或独尊l济指数的发展成Z要甚x一的取向。片面追求经增长也D了诸多不良的后果Q国民教肌Ӏ就业保障、社?x)福利、医疗卫生、文化徏讄与h民生z质量密切相关的C会(x)领域的发展就被不同程度的牺牲掉了Q当|nl济发展大潮的主阶层h士行至中q才发现自己忽略了n体,忽视了家庭,却ƈ没有从过快发展的l济中获得多幸感Q甚至于找不到自q未来?/p>
q年来,国、英国等发达国家来重?#8220;q福指数”q一软指标,国联邦政府和英国内阁甚x巨资成立专门的研I机构,聘请?dng)经学奖得M尔·卡内曼等专家坐镇Q设立衡量h们幸感的指标,使它与GDP一h量一个国家发展水q的标准?/p>
“q福l济”来成Zh们热议的话题。曾有h发问Q如果GDP的增长不能让Z更幸,政府Z么还要致力于GDP的增长呢Q当?#8220;茫一?#8221;既是推动中国C会(x)l济高速发展的蚂蚁雄兵Q也是被l济高速发?#8220;副作?#8221;所中伤的一代,他们是否q福、如何才能幸,是中国社?x)经代际变q的注脚?br />
中试工程?Q年薪在5-6万左叟뀂他们要能够~写试文案Q测试文档,与项目组一起制定测试阶D늚工作计划。能够在目中合理利用测试工h完成试d。能够独立编写自动测试脚本程序ƈ担Q试~程初期的领导工作,q一步拓展编E语a、操作系l、网l与数据库方面的技能;
高试工程?Q年?-10万左叟뀂他们不但需要掌握测试与开发技术,而且Ҏ(gu)试软g对口的行业非怺解,能够Ҏ(gu)试方案可能出现的问题q行分析和评估。帮助开发或l护试或编E标准与q程Q负责同U的评审Qƈ能够指导初的测试工E师Q?/p>
Team LeaderQ测试主) Q年?-15wQ一般至具?q的工作l验Q负责管理一个小团队。负责进度安排、工作规?成本估算、按q度表和预算目标交付产品Q负责开发项目的技术方法,能够为用h供支持和演示Q?/p>
试l理 Q年薪在12-20wQ能够担当测试领域内的整个开发生存周期业务,能够为用h供交互和大量演示Q负责项目成本、进度安排、计划和人员分工Q?/p>
计划l理Q或者说试ȝQ?Q年?0-30wQ具有多q纯熟的开发与支持Q测?质量保证Q活动方面的l验Q管理从事若q项目的人员以及(qing)整个开发生存周期,负责把握目方向和盈亏责仅R?/p>
----------------------------------------------------------------------------------
0U:(x)
不了解测试方法;
没有试计划和测试样例,漫无目的试Q靠q气找BUGQ?br />tb提交BUG的时候描q非怸清楚Q?br />
1U:(x)
了解一些测试方法;
有一定的逻辑思考能力;
知道试重点Q了解测试覆盖率Q会(x)设计试样例Q?br />提交BUG的时候描q非常清楚,有详l的BUG重现步骤Q?br />
2U:(x)
知道常用试Ҏ(gu)和测试技巧;
有较强逻辑思考能力;
?x)用一些自动化试工具Q?br />有明的试计划和测试重点,设计的测试样例覆盖率较高?br />提交BUG的时候描q非常清楚,有详l的重现步骤Q规律性以?qing)解决的?br />
3U:(x)
熟?zhn)常用试?gu)和测试技巧;
不定期学?fn)新的测试方法和试技巧;
有很强逻辑思考能力;
?x)用一些自动化试工具Q?br />l常上一些测试论坛和同行交流Q?br />?x)一U编E语aQ特别是shellQpython{脚本语aQ;
有明的试计划和测试重点,设计的测试样例覆盖率非常高?br />提交BUG的时候描q非常清楚,有详l的重现步骤Q规律性以?qing)解决的?/p>