Interview

1.如何处理高并发

①尽量使用缓存,包括用户缓存,信息缓存等,多花点内存来做缓存,可以大量减少与数据库的交互,提高性能。

②用jprofiler等工具找出搜索性能瓶颈,减少额外的开销。

③优化数据库查询语句,减少直接使用hibernate等工具的直接生成语句(仅耗时较长的查询做优化)。

④优化数据库结构,多做索引,提高查询效率。

⑤能使用静态页面的地方尽量使用,减少容器的解析

 

2.JVM垃圾回收机制

 

3.垃圾回收有哪几种算法

 

3.JVM体系结构

①程序计数器:由于Java虚拟机的多线程时通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器都只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,

我们称这类内存区域为“线程私有”的内存。

如果线程正在执行的时一个Java方法,这个计数器记录的时正在执行的虚拟机字节码指令的地址;如果正在执行的是Native方法,这个计数器值则为空。此内存区域时唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。

②Java虚拟机栈:与程序计数器一样,Java虚拟机栈也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表,操作数栈,动态链表,方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程

③本地方法栈:本地方法栈与虚拟机栈所发挥的作用时非常相似的,它们之间的区别不过是虚拟机栈为虚拟机执行Java方法服务,而本地方法栈则为虚拟机使用到的Native方法服务。

④Java堆:对于大多数应用来说,Java堆时Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动是创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配,但是随着JIT编译器的发展与逃逸分析技术逐渐成熟,栈上分配,标量替换优化技术将会导致一些微妙的变化发生,所有的对象都分配在堆上也渐渐变得不是那么“绝对”了

⑤方法区:方法区与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做非堆,目的应该是与Java堆区分开来。

⑥运行时常量池:运行时常量池是方法区的一部分。Class文件中除了有类的版本,字段,方法,接口等描述信息外,还有一项信息是常量池,用于存放编译器生成的各种字面量和符号的引用,这部分内容将在类加载后进入方法区的运行时常量池中存放

 

 

 

4.线程的几个状态

新建状态

就绪状态

运行状态

阻塞状态

死亡状态

 

5.JVM在类初始化阶段(即在Class被加载后,且被线程使用前),会执行类初始化。在执行类初始化期间,JVM会获取一个锁。这个锁可以同步同步多个线程对同一个类的初始化

 

6.数据库索引的实现原理

索引的代价:http://blog.csdn.net/kennyrose/article/details/7532032

索引的好处:

 

7.Error与Exception都是派生自Throwable

①派生自Error的类代表不是由程序错误引起的非正常情况,表示程序执行期间通常不会发生的事情,如JVM耗尽内存等。一般而言,应用程序不能从Error恢复,因此不必处理它们。

②派生自Exception的类

 

8.String, StringBuilder,StringBuffer

①StringBuilder类具有与旧的StringBuffer类完全相同的b方法,但是String,Builder更快,因为它的方不是同步的

②在java中,字符串内的每个字符都时一个16位的Unicode字符。由于Unicode字符时16位的(不是ASCII码提供的7位或8位),所以用Unicode能够轻松地表示丰富的国际化字符集

③一旦创建了一个String对象,就永远不能再更改

④关于String和内存的重要事实:

对程序而言,全部String字面值中往往有大量的冗余。为了使Java更高效地使用内存,JVM留出一块特殊的内存区域,称为“String常量池”。当编译器遇到String字面值时,它检查该池内是否已经存在相同的String字面值。如果找到,则将心的字面值的引用指向现有的String,而不创建任何心的String字面值对象(现有的String只是具有一个额外的引用)

 

8.Spring并发处理

http://blog.csdn.net/java_fancy/article/details/7439657

http://blog.csdn.net/cs408/article/details/47809271

 

 

 

9.ArrayList是不是线程安全的

 

10.Struts2,hibernate,Spring框架中使用了哪些设模式

 

11.ThreadLocal

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值