3月30
写本文的缘由:
由于近期本人团队内一个90后员工提出离职,引发本人对员工离职原因及90后员工培养方式的深入思考。
(注:可能分析有些片面,有些就事论事的意思,而且员工年轻化是一个趋势,这里提出90后只是便于就此事展开问题分析)
问题分析思路:
- 优先对85前及90后员工的普遍性格特性进行归纳、分析和对比。
- 针对不同的性格特征,阐述不同的培养方式。
- 依据上述结论,结合本次员工离职分析工作中的得失。
性格分析对比:这里不提及性格优势是为了引出后面的培养方式,不是否认90后的性格优势。
| 85前员工性格特点 | 90后员工性格特点 | 形成原因 |
| 思想独立 | 依赖他人 | 家长过分的溺爱,让孩子缺乏自己决策、思考的机会 |
| 行为有目标 | 行为无目标 | 从家庭到教育都是随波逐流,造成无意识的盲从,急于看中眼前成效 |
| 内心强大 | 内心脆弱 | 家长过分的溺爱,顺境的生长环境,让孩子没有机会犯错与承担 |
| 成就感来自内在 | 成就感来自外在 | 思想独立决定了85前的成就感源自内心的成长,90后更渴望来自他人的承认与赞美 |
| 团队意识弱 | 更强的团队意识 | 90后员工之间私下交流沟通比较多,工作中可以进行更有效的合作,帮助。 |
3月30
最近又用到XML,发现也有必要聊聊XML的几种方式。
1、如果只是简单生成或者解析,自己写一个帮助类就行,下面这个是我前段时间用递归写的,优势方便可以扩展
import java.util.ArrayList;
import java.util.List;
/**
*
*
*
* TODO manage node and value.and format the node to xml file
*
*/
public class XMLSimpleNode implements SimpleNode {
private String nodeName;
private String value;
List<SimpleNode> childs;
private String header;
public XMLSimpleNode(String nodeName) {
this.nodeName = nodeName;
childs = new ArrayList<SimpleNode>(2);
}
public String getNodeName() {
return nodeName;
}
1、如果只是简单生成或者解析,自己写一个帮助类就行,下面这个是我前段时间用递归写的,优势方便可以扩展
import java.util.ArrayList;
import java.util.List;
/**
*
*
*
* TODO manage node and value.and format the node to xml file
*
*/
public class XMLSimpleNode implements SimpleNode {
private String nodeName;
private String value;
List<SimpleNode> childs;
private String header;
public XMLSimpleNode(String nodeName) {
this.nodeName = nodeName;
childs = new ArrayList<SimpleNode>(2);
}
public String getNodeName() {
return nodeName;
}
3月30
为什么项目会变得紧急?
其实在我们的现实项目中有很多时候,项目会被要求在一个看上去似乎不现实的条件下完成,因素很多,总结一下:
1、为了争夺或抢占市场。
2、为了向客户或领导演示汇报。
3、向重要的客户承诺在较短的时间进行交付。
如何处理紧急项目?
1. 明确目标
用户需求:项目总要有产出,在着手列计划开始工作之前,请先与客户沟通,明确客户想要的是什么?
1、系统功能完整,质量良好,并投入使用。
2、完成核心功能的开发,并投入使用。
3、了解项目进度,系统界面和功能设计,或向上级领导汇报。
我想我们更多的情况是后两者。
3月30
3月30
如果是内存调优,请看我以前一篇博文 http://www.hecks.tk/post/427/
调优演示
1. 先写一个死锁小程序,如下
复制代码
package tk.hecks.jin.bin;
/**
*
*
* 线程死锁演示调优
*
*/
public class Test4DeadLock extends Thread {
public static Object obj1 = new Object();
public static Object obj2 = new Object();
public static void main(String[] args) {
new Thread(new Runnable() {
public void run() {
synchronized (obj1) {
System.out.println("have in obj1 lock");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("wait for obj2 lock");
synchronized (obj2) {
System.out.println("lock2 have been done");
}
}
}
}).start();
调优演示
1. 先写一个死锁小程序,如下
复制代码
package tk.hecks.jin.bin;
/**
*
*
* 线程死锁演示调优
*
*/
public class Test4DeadLock extends Thread {
public static Object obj1 = new Object();
public static Object obj2 = new Object();
public static void main(String[] args) {
new Thread(new Runnable() {
public void run() {
synchronized (obj1) {
System.out.println("have in obj1 lock");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("wait for obj2 lock");
synchronized (obj2) {
System.out.println("lock2 have been done");
}
}
}
}).start();
3月30
ServletContextListener的用法:这个事件类作为Web应用服务的一部分,处理Web应用的 servlet上下文(context)的变化的通知。这可以解释为,好像有个人在服务器旁不断地通知我们服务器在发生什么事件。那当然需要监听者了。
因此,在通知上下文(context)初始化和销毁的时候,ServletContextListner非常有用。
因此,在通知上下文(context)初始化和销毁的时候,ServletContextListner非常有用。
3月30
已经离职有段时间了, 突然记起来还一个小功能没做, 想想也挺简单,留下代码和思路给同事做个参考。
换工作心里挺忐忑, 对未来也充满了憧憬与担忧。(虽然已是老人, 换了N次工作了,但每次心里都和忐忑)。
写写代码反而心里平静了很多。入正题,上思路,其实很简单
一、场景
用户u1只能在A电脑登录,当在B电脑登录时,A电脑登录状态被取消
二、思路
1.创建一个session监听器去监听session属性的创建
2,用个map储存(如果用户量大可以用KV数据库,如redis之类),K 为用户名, V为session的
3. 当检测到session的属性 userName添加时,把对应的session中userName属性清空
换工作心里挺忐忑, 对未来也充满了憧憬与担忧。(虽然已是老人, 换了N次工作了,但每次心里都和忐忑)。
写写代码反而心里平静了很多。入正题,上思路,其实很简单
一、场景
用户u1只能在A电脑登录,当在B电脑登录时,A电脑登录状态被取消
二、思路
1.创建一个session监听器去监听session属性的创建
2,用个map储存(如果用户量大可以用KV数据库,如redis之类),K 为用户名, V为session的
3. 当检测到session的属性 userName添加时,把对应的session中userName属性清空
3月30
HttpSessionListener有2个接口需要实现
sessionCreated //新建一个会话时候触发也可以说是客户端第一次和服务器交互时候触发
sessionDestroyed //销毁会话的时候 一般来说只有某个按钮触发进行销毁 或者配置定时销毁 ( 很多文献中提到说浏览器关闭时候会销毁 但是楼主通过各种现行主流浏览器测试效果不尽如人意)
HttpSessionAttributeListener有3个接口需要实现
attributeAdded //在session中添加对象时触发此操作 笼统的说就是调用setAttribute这个方法时候会触发的
attributeRemoved //修改、删除session中添加对象时触发此操作 笼统的说就是调用 removeAttribute这个方法时候会触发的
attributeReplaced //在Session属性被重新设置时
以下是一个统计在线会话数的功能,并且让超时的自动销毁。
sessionCreated //新建一个会话时候触发也可以说是客户端第一次和服务器交互时候触发
sessionDestroyed //销毁会话的时候 一般来说只有某个按钮触发进行销毁 或者配置定时销毁 ( 很多文献中提到说浏览器关闭时候会销毁 但是楼主通过各种现行主流浏览器测试效果不尽如人意)
HttpSessionAttributeListener有3个接口需要实现
attributeAdded //在session中添加对象时触发此操作 笼统的说就是调用setAttribute这个方法时候会触发的
attributeRemoved //修改、删除session中添加对象时触发此操作 笼统的说就是调用 removeAttribute这个方法时候会触发的
attributeReplaced //在Session属性被重新设置时
以下是一个统计在线会话数的功能,并且让超时的自动销毁。
3月30
JAVA 代理实现
代理的实现分动态代理和静态代理,静态代理的实现是对已经生成了的JAVA类进行封装。
动态代理则是在运行时生成了相关代理类,在JAVA中生成动态代理一般有两种方式。
JDK自带实现方法
JDK实现代理生成,是用类 java.lang.reflect.Proxy, 实现方式如下
Eg:
代理的实现分动态代理和静态代理,静态代理的实现是对已经生成了的JAVA类进行封装。
动态代理则是在运行时生成了相关代理类,在JAVA中生成动态代理一般有两种方式。
JDK自带实现方法
JDK实现代理生成,是用类 java.lang.reflect.Proxy, 实现方式如下
Eg:
3月28
Spring中autowire属性
default-autowire="x"
x有5个选择:byName,byType,constructor和autodetect,no
一、spring 自动装配 default-autowire="byName"
Service.java
public class Service
{
Source source;
public void setSource(Source source)
{
this.source = source;
}
}
default-autowire="x"
x有5个选择:byName,byType,constructor和autodetect,no
一、spring 自动装配 default-autowire="byName"
Service.java
public class Service
{
Source source;
public void setSource(Source source)
{
this.source = source;
}
}







