Java 常用面试题
2015-12-05 14:26
330 查看
1、tomcat 支持最大的线程数是多少?
tomcat 默认的事1000 ,可配置为最高2000,配置路径为:apache-tomcat-6.0.43\conf\server.xml中 <Connector port="8080" URIEncoding="UTF-8" redirectPort="8443" connectionTimeout="20000" protocol="HTTP/1.1"/>
2、ngnix 支持的最大的线城市为:3000,配置也在apache-ngnix\conf\ngnix.xml 下
3、JAVA反射的原理
Java的反射机制的实现要借助于4个类:class,Constructor,Field,Method;其中class代表的时类对 象,Constructor-类的构造器对象,Field-类的属性对象,Method-类的方法对象。通过这四个对象我们可以粗略的看到一个类的各个组成部分。
Class:程序运行时,java运行时系统会对所有的对象进行运行时类型的处理。这项信息记录了每个对象所属的类,虚拟机通常使用运行时类型信息选择正 确的方法来执行(摘自:白皮书)。但是这些信息我们怎么得到啊,就要借助于class类对象了啊。在Object类中定义了getClass()方法。我 们可以通过这个方法获得指定对象的类对象。然后我们通过分析这个对象就可以得到我们要的信息了。
比如:ArrayList arrayList;
Class clazz = arrayList.getClass();
然后我来处理这个对象clazz。
当然了Class类具有很多的方法,这里重点将和Constructor,Field,Method类有关系的方法。
Reflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性。Java 的这一能力在实际应用中也许用得不是很多,但是个人认为要想对java有个更加深入的了解还是应该掌握的。
4、数据结构
链表与数组的使用
5、Springmvc 运行的过程
在加载时首先加载SpringDispacherSevlet的Url-pattern 去找SpringMvc中的映射,如果没有择取找mvc:default-servler-hanlder 如果找不到的话则跑出异常,如果择由HandlerMapping 获取HandlerExecutionChain 对象,再去获取PreHandler 方法,再去ModeViewHandle 方法对象,在去查找拦截器,如果存异常,如果存在异常则跑出异常,否则渲染视图,详细见图
6、集合的详解
6.1 Arraylist 的底层实现是数组,可以动态增长,查找元素较高,但是在增加删除是效率较低,线程非安全
6.2 Vector 底层的实现也是数组,由于是线程安全的,效率较低,不建议使用
6.3 HashSet 是以哈希表的形式保存的,插入速度较快,线程不安全
6.4 HashTable 底层是哈希表,或者叫做散列表,函数都是同步的,线程是安全的,在储存时key与value不可以出现空值,其中key是唯一的,value可以重复
详解请见:
http://blog.csdn.net/kingzone_2008/article/details/8179701 http://doc.okbase.net/DavidIsOK/archive/94766.html http://www.php100.com/html/it/focus/2014/1121/7863.html
7、为什么要引入连接池?
大家知道数据库的资源是有限的,如果频繁的链接数据库关闭数据库会消耗数据库的资源,同时也会是数据库的性能降低,如果操作不慎就会使数据泄露,引入了链接池后就会大大的降低了与数据库的链接次数,大大提高了性能,如果用一句话概述链接池那便是:负责分配、管理和释放数据库连接。
工作流程:当程序第一次调用数据路链接时会先去数据库中查询,在数据库连接池会有一定数量的链接,当下次再次链接是会从连接池中取,这样避免了没次都从数据库中查询,避免了链接的次数。
C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。(主页:http://sourceforge.net/projects/c3p0/)
BoneCP 是一个开源的快速的 JDBC 连接池。BoneCP很小,只有四十几K(运行时需要log4j和Google
Collections的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。另外个人觉得 BoneCP 有个缺点是,JDBC驱动的加载是在连接池之外的,这样在一些应用服务器的配置上就不够灵活。当然,体积小并不是 BoneCP 优秀的原因,BoneCP 到底有什么突出的地方呢,请看看性能测试报告。(主页:http://jolbox.com/)
DBCP(Database Connection Pool)是一个依赖Jakarta
commons-pool对象池机制的数据库连接池,Tomcat的数据源使用的就是DBCP。目前 DBCP 有两个版本分别是 1.3 和 1.4。1.3 版本对应的是 JDK
1.4-1.5 和 JDBC 3,而1.4 版本对应 JDK
1.6 和 JDBC 4。因此在选择版本的时候要看看你用的是什么 JDK 版本了,功能上倒是没有什么区别。(主页:http://commons.apache.org/dbcp/)
Proxool是一个Java SQL Driver驱动程序,提供了对你选择的其它类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中。完全可配置。快速,成熟,健壮。可以透明地为你现存的JDBC驱动程序增加连接池功能。(主页:http://proxool.sourceforge.net/)
数据库连接池的详解:
http://blog.csdn.net/liyisong2008/article/details/8020973
数据库连接池的官网:
C3P0 : http://sourceforge.net/projects/c3p0/
BoneCP: http://jolbox.com/
DBCP : http://commons.apache.org/dbcp/
官网已不建议使用,有数据泄露的问题
Proxool
: http://proxool.sourceforge.net/
咋数据库中是最快的,大概比C3P0与[b]BoneCP 快25倍 之多[/b]
8、session在何时被创建
一 个常见的误解是以为session在有客户端访问时就被创建,然而事实是直到某server端程序调用 HttpServletRequest.getSession(true)这样的语句时才被创建,注意如果JSP没有显示的使用 <% @page session=”false”%> 关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句
HttpSession session = HttpServletRequest.getSession(true);这也是JSP中隐含的 session对象的来历。
由于session会消耗内存资源,因此,如果不打算使用session,应该在所有的JSP中关闭它。
9、JAVA的设计模式,JAVA中有23中设计模式,其中最常用的有,懒加载模式、工厂模式、单例模式
例子:
单例模式
public class Singleton {
/* 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载 */
private static Singleton instance = null;
/* 私有构造方法,防止被实例化 */
private Singleton() {
}
/* 静态工程方法,创建实例 */
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
/* 如果该对象被用于序列化,可以保证对象在序列化前后保持一致 */
public Object readResolve() {
return instance;
}
}
[b]工厂模式:[/b]
public class SendFactory {
public static Sender produceMail(){
return new MailSender();
}
public static Sender produceSms(){
return new SmsSender();
}
}
[b]懒加载模式:
[/b]
public
class
Manager
{
private
Manager()
{
}
public
static
Manager getInstance()
{
return
ManagerHolder.instance;
}
private
static
class
ManagerHolder
{
private
static
final
Manager instance
=
new
Manager();
}
}
[b]
详解 :[/b]
[b] http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html[/b]
tomcat 默认的事1000 ,可配置为最高2000,配置路径为:apache-tomcat-6.0.43\conf\server.xml中 <Connector port="8080" URIEncoding="UTF-8" redirectPort="8443" connectionTimeout="20000" protocol="HTTP/1.1"/>
2、ngnix 支持的最大的线城市为:3000,配置也在apache-ngnix\conf\ngnix.xml 下
3、JAVA反射的原理
Java的反射机制的实现要借助于4个类:class,Constructor,Field,Method;其中class代表的时类对 象,Constructor-类的构造器对象,Field-类的属性对象,Method-类的方法对象。通过这四个对象我们可以粗略的看到一个类的各个组成部分。
Class:程序运行时,java运行时系统会对所有的对象进行运行时类型的处理。这项信息记录了每个对象所属的类,虚拟机通常使用运行时类型信息选择正 确的方法来执行(摘自:白皮书)。但是这些信息我们怎么得到啊,就要借助于class类对象了啊。在Object类中定义了getClass()方法。我 们可以通过这个方法获得指定对象的类对象。然后我们通过分析这个对象就可以得到我们要的信息了。
比如:ArrayList arrayList;
Class clazz = arrayList.getClass();
然后我来处理这个对象clazz。
当然了Class类具有很多的方法,这里重点将和Constructor,Field,Method类有关系的方法。
Reflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性。Java 的这一能力在实际应用中也许用得不是很多,但是个人认为要想对java有个更加深入的了解还是应该掌握的。
4、数据结构
链表与数组的使用
5、Springmvc 运行的过程
在加载时首先加载SpringDispacherSevlet的Url-pattern 去找SpringMvc中的映射,如果没有择取找mvc:default-servler-hanlder 如果找不到的话则跑出异常,如果择由HandlerMapping 获取HandlerExecutionChain 对象,再去获取PreHandler 方法,再去ModeViewHandle 方法对象,在去查找拦截器,如果存异常,如果存在异常则跑出异常,否则渲染视图,详细见图
6、集合的详解
6.1 Arraylist 的底层实现是数组,可以动态增长,查找元素较高,但是在增加删除是效率较低,线程非安全
6.2 Vector 底层的实现也是数组,由于是线程安全的,效率较低,不建议使用
6.3 HashSet 是以哈希表的形式保存的,插入速度较快,线程不安全
6.4 HashTable 底层是哈希表,或者叫做散列表,函数都是同步的,线程是安全的,在储存时key与value不可以出现空值,其中key是唯一的,value可以重复
详解请见:
http://blog.csdn.net/kingzone_2008/article/details/8179701 http://doc.okbase.net/DavidIsOK/archive/94766.html http://www.php100.com/html/it/focus/2014/1121/7863.html
7、为什么要引入连接池?
大家知道数据库的资源是有限的,如果频繁的链接数据库关闭数据库会消耗数据库的资源,同时也会是数据库的性能降低,如果操作不慎就会使数据泄露,引入了链接池后就会大大的降低了与数据库的链接次数,大大提高了性能,如果用一句话概述链接池那便是:负责分配、管理和释放数据库连接。
工作流程:当程序第一次调用数据路链接时会先去数据库中查询,在数据库连接池会有一定数量的链接,当下次再次链接是会从连接池中取,这样避免了没次都从数据库中查询,避免了链接的次数。
四个流行的Java连接池:
C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。(主页:http://sourceforge.net/projects/c3p0/)BoneCP 是一个开源的快速的 JDBC 连接池。BoneCP很小,只有四十几K(运行时需要log4j和Google
Collections的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。另外个人觉得 BoneCP 有个缺点是,JDBC驱动的加载是在连接池之外的,这样在一些应用服务器的配置上就不够灵活。当然,体积小并不是 BoneCP 优秀的原因,BoneCP 到底有什么突出的地方呢,请看看性能测试报告。(主页:http://jolbox.com/)
DBCP(Database Connection Pool)是一个依赖Jakarta
commons-pool对象池机制的数据库连接池,Tomcat的数据源使用的就是DBCP。目前 DBCP 有两个版本分别是 1.3 和 1.4。1.3 版本对应的是 JDK
1.4-1.5 和 JDBC 3,而1.4 版本对应 JDK
1.6 和 JDBC 4。因此在选择版本的时候要看看你用的是什么 JDK 版本了,功能上倒是没有什么区别。(主页:http://commons.apache.org/dbcp/)
Proxool是一个Java SQL Driver驱动程序,提供了对你选择的其它类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中。完全可配置。快速,成熟,健壮。可以透明地为你现存的JDBC驱动程序增加连接池功能。(主页:http://proxool.sourceforge.net/)
数据库连接池的详解:
http://blog.csdn.net/liyisong2008/article/details/8020973
数据库连接池的官网:
C3P0 : http://sourceforge.net/projects/c3p0/
BoneCP: http://jolbox.com/
DBCP : http://commons.apache.org/dbcp/
官网已不建议使用,有数据泄露的问题
Proxool
: http://proxool.sourceforge.net/
咋数据库中是最快的,大概比C3P0与[b]BoneCP 快25倍 之多[/b]
8、session在何时被创建
一 个常见的误解是以为session在有客户端访问时就被创建,然而事实是直到某server端程序调用 HttpServletRequest.getSession(true)这样的语句时才被创建,注意如果JSP没有显示的使用 <% @page session=”false”%> 关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句
HttpSession session = HttpServletRequest.getSession(true);这也是JSP中隐含的 session对象的来历。
由于session会消耗内存资源,因此,如果不打算使用session,应该在所有的JSP中关闭它。
9、JAVA的设计模式,JAVA中有23中设计模式,其中最常用的有,懒加载模式、工厂模式、单例模式
例子:
单例模式
public class Singleton {
/* 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载 */
private static Singleton instance = null;
/* 私有构造方法,防止被实例化 */
private Singleton() {
}
/* 静态工程方法,创建实例 */
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
/* 如果该对象被用于序列化,可以保证对象在序列化前后保持一致 */
public Object readResolve() {
return instance;
}
}
[b]工厂模式:[/b]
public class SendFactory {
public static Sender produceMail(){
return new MailSender();
}
public static Sender produceSms(){
return new SmsSender();
}
}
[b]懒加载模式:
[/b]
public
class
Manager
{
private
Manager()
{
}
public
static
Manager getInstance()
{
return
ManagerHolder.instance;
}
private
static
class
ManagerHolder
{
private
static
final
Manager instance
=
new
Manager();
}
}
[b]
详解 :[/b]
[b] http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html[/b]
相关文章推荐
- 黑马程序员——Java重点基础之集合框架(二)
- 黑马程序员---IO4(IO其他类、编码表)
- 黑马程序员——Foundation框架——常用结构体
- 黑马程序员---IO3(File类、递归、IO其他类)
- 优秀程序员的七大特征,你具备几条?
- 黑马程序员——Foundation框架——NSMutableDictionary常用方法
- 优秀程序员的七大特征,你具备几条?
- 优秀程序员的七大特征,你具备几条?
- 黑马程序员——Foundation框架——NSDictionary常用方法
- 黑马程序员——数据类型、printf函数与scanf函数
- 黑马程序员——Foundation框架——NSMutableArray常用方法
- Java程序员的现代RPC指南
- Java程序员的现代RPC指南
- 黑马程序员-Java中基本类型对应的类(装箱与拆箱)
- 黑马程序员——Foundation框架——NSArray常用方法
- 黑马程序员---IO2(缓冲区、装饰设计模式、转换流)
- 黑马程序员——C基础---数组
- 黑马程序员——Foundation框架——NSMutableString常用方法
- 黑马程序员——Java重点基础之集合框架(一)
- 黑马程序员------set和TreeSet的使用和原理