Java 常用面试题

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一起发布,包括了实现jdbc3jdbc2扩展规范说明的Connection Statement 池的DataSources 对象。(主页:http://sourceforge.net/projects/c3p0/

BoneCP 是一个开源的快速的 JDBC 连接池。BoneCP很小,只有四十几K(运行时需要log4jGoogle Collections的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。另外个人觉得 BoneCP 有个缺点是,JDBC驱动的加载是在连接池之外的,这样在一些应用服务器的配置上就不够灵活。当然,体积小并不是 BoneCP 优秀的原因,BoneCP 到底有什么突出的地方呢,请看看性能测试报告。(主页:http://jolbox.com/

DBCPDatabase Connection Pool)是一个依赖Jakarta commons-pool对象池机制的数据库连接池,Tomcat的数据源使用的就是DBCP。目前 DBCP 有两个版本分别是 1.3  1.41.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中设计模式,其中最常用的有,懒加载模式、工厂模式、单例模式

     例子:

     单例模式  

           

  1. public class Singleton {  
  2.   
  3.     /* 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载 */  
  4.     private static Singleton instance = null;  
  5.   
  6.     /* 私有构造方法,防止被实例化 */  
  7.     private Singleton() {  
  8.     }  
  9.   
  10.     /* 静态工程方法,创建实例 */  
  11.     public static Singleton getInstance() {  
  12.         if (instance == null) {  
  13.             instance = new Singleton();  
  14.         }  
  15.         return instance;  
  16.     }  
  17.   
  18.     /* 如果该对象被用于序列化,可以保证对象在序列化前后保持一致 */  
  19.     public Object readResolve() {  
  20.         return instance;  
  21.     }  
  22. }  

   

    工厂模式:

         

  1. public class SendFactory {  
  2.       
  3.     public static Sender produceMail(){  
  4.         return new MailSender();  
  5.     }  
  6.       
  7.     public static Sender produceSms(){  
  8.         return new SmsSender();  
  9.     }  


懒加载模式:

       

  1. publicclassManager{  
  2.  
  3.     privateManager(){  
  4.          
  5.     }  
  6.      
  7.     publicstaticManager getInstance(){  
  8.         returnManagerHolder.instance;  
  9.     }  
  10.      
  11.     privatestaticclassManagerHolder{  
  12.         privatestaticfinalManager instance=newManager();  
  13.     }  
  14. }


    详解  :

           http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html


  

     




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盒马coding

你的支持是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值