Mar 30
《大型网站技术架构》读书笔记:

网站架构模式
关于什么是模式,这个来自建筑学的词汇是这样定义的:“每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复工作”。模式的关键在于模式的可重复性,问题与场景的可重复性带来解决方案的可重复使用。
点击在新窗口中浏览此图片
Mar 30
写本文的缘由:

由于近期本人团队内一个90后员工提出离职,引发本人对员工离职原因及90后员工培养方式的深入思考。

(注:可能分析有些片面,有些就事论事的意思,而且员工年轻化是一个趋势,这里提出90后只是便于就此事展开问题分析)

问题分析思路:

  1. 优先对85前及90后员工的普遍性格特性进行归纳、分析和对比。
  2. 针对不同的性格特征,阐述不同的培养方式。
  3. 依据上述结论,结合本次员工离职分析工作中的得失。

性格分析对比:这里不提及性格优势是为了引出后面的培养方式,不是否认90后的性格优势。




85前员工性格特点90后员工性格特点形成原因
思想独立依赖他人家长过分的溺爱,让孩子缺乏自己决策、思考的机会
行为有目标行为无目标从家庭到教育都是随波逐流,造成无意识的盲从,急于看中眼前成效
内心强大内心脆弱家长过分的溺爱,顺境的生长环境,让孩子没有机会犯错与承担
成就感来自内在成就感来自外在思想独立决定了85前的成就感源自内心的成长,90后更渴望来自他人的承认与赞美
团队意识弱更强的团队意识90后员工之间私下交流沟通比较多,工作中可以进行更有效的合作,帮助。
Mar 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;
    }
Tags: ,
Mar 30

为什么项目会变得紧急?


其实在我们的现实项目中有很多时候,项目会被要求在一个看上去似乎不现实的条件下完成,因素很多,总结一下:



1、为了争夺或抢占市场。
2、为了向客户或领导演示汇报。
3、向重要的客户承诺在较短的时间进行交付。

如何处理紧急项目?


1. 明确目标



用户需求:项目总要有产出,在着手列计划开始工作之前,请先与客户沟通,明确客户想要的是什么?




1、系统功能完整,质量良好,并投入使用。
2、完成核心功能的开发,并投入使用。
3、了解项目进度,系统界面和功能设计,或向上级领导汇报。

我想我们更多的情况是后两者。

Mar 30
一、JVM内存模型概括

点击在新窗口中浏览此图片
还有一个寄存器,线程运行于其上面

1.程序计数器
记录线程的执行位置,线程私有内存,唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域
2.线程栈(VM stack)
点击在新窗口中浏览此图片
栈的默认大小是1M

-Xss2m 这样设置成2M

异常 :Fatal: Stack size too small

异常的引起一般是线程数目太多
Tags: , , ,
Mar 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();
Mar 30
ServletContextListener的用法:这个事件类作为Web应用服务的一部分,处理Web应用的 servlet上下文(context)的变化的通知。这可以解释为,好像有个人在服务器旁不断地通知我们服务器在发生什么事件。那当然需要监听者了。
因此,在通知上下文(context)初始化和销毁的时候,ServletContextListner非常有用。


Mar 30
已经离职有段时间了, 突然记起来还一个小功能没做, 想想也挺简单,留下代码和思路给同事做个参考。

换工作心里挺忐忑, 对未来也充满了憧憬与担忧。(虽然已是老人, 换了N次工作了,但每次心里都和忐忑)。

写写代码反而心里平静了很多。入正题,上思路,其实很简单

一、场景

用户u1只能在A电脑登录,当在B电脑登录时,A电脑登录状态被取消

二、思路

1.创建一个session监听器去监听session属性的创建

2,用个map储存(如果用户量大可以用KV数据库,如redis之类),K 为用户名, V为session的

3. 当检测到session的属性 userName添加时,把对应的session中userName属性清空
Mar 30
HttpSessionListener有2个接口需要实现

sessionCreated //新建一个会话时候触发也可以说是客户端第一次和服务器交互时候触发

sessionDestroyed //销毁会话的时候  一般来说只有某个按钮触发进行销毁 或者配置定时销毁 ( 很多文献中提到说浏览器关闭时候会销毁 但是楼主通过各种现行主流浏览器测试效果不尽如人意)
HttpSessionAttributeListener有3个接口需要实现

attributeAdded //在session中添加对象时触发此操作 笼统的说就是调用setAttribute这个方法时候会触发的
attributeRemoved //修改、删除session中添加对象时触发此操作  笼统的说就是调用 removeAttribute这个方法时候会触发的
attributeReplaced //在Session属性被重新设置时
以下是一个统计在线会话数的功能,并且让超时的自动销毁。
Mar 30
JAVA 代理实现
代理的实现分动态代理和静态代理,静态代理的实现是对已经生成了的JAVA类进行封装。
动态代理则是在运行时生成了相关代理类,在JAVA中生成动态代理一般有两种方式。

JDK自带实现方法
JDK实现代理生成,是用类 java.lang.reflect.Proxy, 实现方式如下

Eg:

分页: 5/47 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]