您的位置:首页 > 职场人生

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、为什么要引入连接池?

大家知道数据库的资源是有限的,如果频繁的链接数据库关闭数据库会消耗数据库的资源,同时也会是数据库的性能降低,如果操作不慎就会使数据泄露,引入了链接池后就会大大的降低了与数据库的链接次数,大大提高了性能,如果用一句话概述链接池那便是:负责分配、管理和释放数据库连接。

工作流程:当程序第一次调用数据路链接时会先去数据库中查询,在数据库连接池会有一定数量的链接,当下次再次链接是会从连接池中取,这样避免了没次都从数据库中查询,避免了链接的次数。


四个流行的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/

DBCPDatabase 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]






内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: