`
文章列表

性能调优

    博客分类:
  • JVM
       一般使用jprofile和jMap,有次服务器内存不足,前者导出的数据显示某某类实例太多,肯定哪里写了死循环之类的。后者直接查看运行状态,比如哪个时间段内存、CPU、请求等出现问题,另外像死锁也可以检测出来。   待完善。。。
关于在spring容器初始化bean和销毁前所做的操作定义方式有三种: 第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作 第二种是:通过 在xml中定义init-method 和  destory-method方法 第三种是: 通过bean实现InitializingBean和 DisposableBean接口   待研究。。。
1、继承Thread实现。 2、实现Runnable接口。 3、实现Callable接口,用FutureTask接收返回值。 总结:其实线程最核心的是Runnable,因为Thread和FutureTask都继承该接口来实现具体功能,即拓展实现。而Thread实现的start0()方法,其调用本地方法开启新线程。   看第三种: 1)其中FutureTask继承了Runnable接口,所以可以当做一个线程来处理,并得到返回值。 2)future.get()的方法实现由必要看一下,当线程未执行或未结束时,会阻塞当前线程,直到该线程执行完毕。 3)为什么可以获得返回值呢?看下fut ...

浅谈泛型

泛型的应用很广泛,其实最简单的,基本上所有集合类型都有使用,可以点击进入List、Map、Set等实现类中看看其运用: <? extends T>和<? super T>,以及<?>的区别: 上限:<? extends T> 只能使用T类型或者T类型的子类对象。 下限:<? super T> 只能使用T类型或者T的父类及接口实例对象。 全部:<?>可以是任意类型的实例对象。 列举个例子: 比如:   List<A> list1 =new ArrayList<A>(); List& ...
浅拷贝:拷贝时,直接复制对象区域,如果属性中有引用对象,则直接拷贝引用而不是对象本身,所以新对象和旧对象的引用属性,改变时会互相影响。 深拷贝:新对象与旧对象不互相影响,拷贝时需要对引用类型的属性特殊拷贝处理,比如针对引用对象本身再调用该对象的clone一次。   Object的clone()方法,该方法为浅拷贝,即对象中的属性如果为引用类型,也直接将引用赋值给新对象。另外,实现该方法时,需要继承Cloneable接口,否则运行报错。 Object的方法如下: protected  Object clone()           创建并返回此对象的一个副本。  boo ...
一、GBK的文字编码:是双字节来表示的,即不论中、英文字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1。 UTF-8编码:则是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。对于英文字符较多的网站则用UTF-8节省空间。 所以如果是UTF8编码,则在外国人的英文IE上也能显示中文,而无需他们下载IE的中文语言支持包。 所以,对于英文比较多的论坛 ,使用GBK则每个字符占用2个字节,而使用UTF-8英文却只占一个字节。 ISO-8859-1:中文只占一个字节   二、首先了解一下BOM,字节顺序标记(英语:byte-o ...
转自: 引言   JDK1.4中引入了NIO,即New IO,目的在于提高IO速度。特别注意JavaNIO不完全是非阻塞式IO(No-Blocking IO),因为其中部分通道(如FileChannel)只能运行在阻塞模式下,而其他的通道可以在阻塞式和非阻塞式之间进行选择。 ...

IO流的认识

流的详细介绍: 字符流和字节流:读取文件分为这两类,字符流read时是按每次两个字节(1字符按2字节,汉字也算一个字符)来读取的,而字节流读取时是按每次一个字节读取。通过相应的类,将字节流转化为字符流(InputStreamRead ...

c3p0连接池

配置信息便不写了,其中,配置中有ComboPooledDataSource这个类:   <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">  ComboPooledDataSource类继承自AbstractPoolBackedDataSource,该类继承PooledDataSource->DataSource接口,实现了getConnectio ...
三篇文章,第一个、第二个、第三个   cookie和session:因为http是无状态协议,所以cookie和Session对象分别是为了在客户端、服务端保存用户状态的方式。其中服务端多个session是通过客户端cookie保存的标示来和用户一一对应。当用户登录时,只需要将状态保存到服务端Session对象的Attribute属性中。 另外:Google Analytics(Google为网站提供的数据统计服务)设置了5个不同的cookie,_utma, _utmb, _utmc, _utmz和 _utmz。cookie格式统一使用_u-t-m开头。   一、http请求由三部 ...
1、适配器模式:是新旧接口不一致,导入没法使用新接口的对象。这时候增加一个适配器类(继承旧接口),程序依然调用旧接口,而在适配器类中调用新接口。至于新接口的对象在哪,可以让适配器类本身继承(常用),也可以作为一个成员变量,甚至作为参数传进去(比如spring的DispatcherServlet中的HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());)。 也就是说,被适配者的方法和适配器类的方法是不同的。 2、代理模式:首先代理提供的方法和被代理者是相同的。一般只是在被代理者方法执行前后做一些操作。
两种代理模式的区别: 1、jdk动态代理生成的代理类和委托类实现了相同的接口; 2、cglib动态代理中生成的字节码更加复杂,生成的代理类是委托类的子类,且不能处理被final关键字修饰的方法; 3、jdk采用反射机制调用委托类的方法,cglib采用类似索引的方式直接调用委托类方法; 代码有待测试。。。   在spring加载bean时的使用:其中通过判断是否有带lookup-method和replace-method,如果有就用cglib,比如lookup-method常用于一个单例beanA引用一个非单例的prototype beanB时。否则就使用jdk的反射机制生成。 ...
在第一次访问项目时,DispatcherServlet作为一个servlet,首先需要init();然后才能处理请求。   一、初始化:        由容器调用底层的servet接口的init()方法,DispatcherServlet->FrameworkServlet->HttpServletBean->HttpServlet,其init()方法最终调用了DispatcherServlet的protected void onRefresh(ApplicationContext context) {initStrategies(context);}(如下),该方法初 ...

反射、注解

反射模式在各种架构都有所使用。 有三种方式获得Class对象,假若有类A: 1、 Class class1 = A.class; 2、 A a = new A(); Class class1 = a.getClass();  3、 Class<?> class1= Class.forName("com.liu.A");  而Class对象,可以从中获取该类拥有的所有属性、方法、注解、构造器等。   注解(转): 元注解:   元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来 ...

mysql索引详解

数据结构分,有B-Tree索引(B+ Tree)、哈希索引、R-Tree索引等。按数据块的顺序和索引节点的逻辑顺序是否一致可以分为聚集索引和非聚集索引。聚集索引由于物理块连续,在范围扫描的时候可以减少磁头寻道时间,因而比非聚集索引高效。   几种索引类型的选择: primary:主键索引。 unique:唯一索引。不允许重复,可以为null。 normal:普通索引。 FULLTEXT:只能对CHAR, VARCHAR和TEXT列编制索引,并且只能在MyISAM表中编制。 SPATIAL:只能对空间列编制索引,并且只能在MyISAM表中编制。   个人总结:       ...
Global site tag (gtag.js) - Google Analytics