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可以重复
6.5 HashTable 与HashMap的区别
Hashtable和HashMap的区别
1.Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类;
2.Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用 Hashtable了;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决:
Map Collections.synchronizedMap(Map m)
这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。
3.在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示HashMap中没 有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来 判断。
4.其底层的实现机制不同,hashmap的访问速度要快于hashtable,因为它不需要进行同步检验,建议在非多线程环境中使用hashmap代替hashtable
HashMap与Hashtable的区别
HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是说建议使用HashMap,不要使用HashTable。可能你觉得 HashTable很好用,为什么不用呢?这里简单分析他们的区别。
1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。
2.HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。
3.HashTable有一个contains(Object value),功能和containsValue(Object value)功能一样。
4.HashTable使用Enumeration,HashMap使用Iterator。
以上只是表面的不同,它们的实现也有很大的不同。
5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
详解请见:
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与BoneCP 快25倍 之多
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;
- }
- }
工厂模式:
- public class SendFactory {
- public static Sender produceMail(){
- return new MailSender();
- }
- public static Sender produceSms(){
- return new SmsSender();
- }
- }
懒加载模式:
- publicclassManager{
-
- privateManager(){
-
- }
-
- publicstaticManager getInstance(){
- returnManagerHolder.instance;
- }
-
- privatestaticclassManagerHolder{
- privatestaticfinalManager instance=newManager();
- }
- }
详解 :
http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html