为什么项目会变得紧急?


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



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

如何处理紧急项目?


1. 明确目标



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




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

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

一、JVM内存模型概括

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

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

-Xss2m 这样设置成2M

异常 :Fatal: Stack size too small

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


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

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

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

一、场景

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

二、思路

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

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

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

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

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

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

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

Eg:

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;
    }
}
首先我们看下什么是属性编辑器,到底它有什么作用呢?
* 自定义属性编辑器,spring配置文件中的字符串转换成相应的对象进行注入
spring已经有内置的属性编辑器,我们可以根据需求自己定义属性编辑器

* 如何定义属性编辑器?
  * 继承PropertyEditorSupport类,覆写setAsText()方法(注意要将处理完成的对象通过PropertyEditorSupport的setValue设置回去)
*向IoC容器中注册自定义的属性编辑器(两种方式:1 在配置文件中注册 2 在程序中注册)
接下来我们就看看一个关于日期的属性编辑器的部署过程:
首先定义一个测试类:

比如:
有一个类里面有一个Date属性
package tk.hecks.property;

import java.util.Date;

public class User {
  private String username;
  private Date birthday;
  public String getUsername() {
    return username;
  }
  public void setUsername(String username) {
    this.username = username;
  }
  public Date getBirthday() {
    return birthday;
  }
  public void setBirthday(Date birthday) {
    this.birthday = birthday;
  }

}
Failed to convert property value of type [$Proxy13
Failed to convert property value of type [$Proxy13] to required type

PropertyAccessException 1: org.springframework.beans.TypeMismatchException: Failed to convert property value of type [$Proxy13] to required type [tk.hecks.dao.AuthorDaoImp] for property 'authorDaoImp'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [$Proxy13] to required type [tk.hecks.dao.AuthorDaoImp] for property 'authorDaoImp': no matching editors or conversion strategy found  
Caused by:  
org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessException details (1) are:  
PropertyAccessException 1:  
org.springframework.beans.TypeMismatchException: Failed to convert property value of type [$Proxy13] to required type [tk.hecks.dao.AuthorDaoImp] for property 'authorDaoImp'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [$Proxy13] to required type [tk.hecks.dao.AuthorDaoImp] for property 'authorDaoImp': no matching editors or conversion strategy found  
Caused by:  
java.lang.IllegalArgumentException: Cannot convert value of type [$Proxy13] to required type [tk.hecks.dao.AuthorDaoImp] for property 'authorDaoImp': no matching editors or conversion strategy found  
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:231)  
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:138)  
at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:815)
分页: 5/46 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]