题目来自http://www.codeceo.com/article/201-java-interview-qa.html,答案本身网上找的,若有疏漏,欢迎斧正。一块儿学习,共同进步。css
1. String类为何是final的。html
2. HashMap的源码,实现原理,底层结构。java
3. 说说你知道的几个Java集合类:list、set、queue、map实现类咯。程序员
4. 描述一下ArrayList和LinkedList各自实现和区别。web
5. Java中的队列都有哪些,有什么区别。算法
6. 反射中,Class.forName和classloader的区别。spring
7. Java七、Java8的新特性(baidu问的,好BT)。sql
8. Java数组和链表两种结构的操做效率,在哪些状况下(从开头开始,从结尾开始,从中间开始),哪些操做(插入,查找,删除)的效率高。数据库
9. Java内存泄露的问题调查定位:jmap,jstack的使用等等。apache
10. string、stringbuilder、stringbuffer区别。
11. hashtable和hashmap的区别。
13.异常的结构,运行时异常和非运行时异常,各举个例子。
14.String a= “abc” String b = “abc” String c = new String(“abc”) String d = “ab” + “c” .他们之间用 == 比较的结果。
15. String 类的经常使用方法。
16. Java 的引用类型有哪几种。
17. 抽象类和接口的区别?
接口(interface)能够说成是抽象类的一种特例,接口中的全部方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。另外,接口和抽象类在方法上有区别:
(1) 抽象类能够有构造方法,接口中不能有构造方法。
(2) 抽象类中能够包含非抽象的普通方法,接口中的全部方法必须都是抽象的,不能有非抽象的普通方法。Java 8里的接口能够有default方法。
(3) 抽象类中能够有普通成员变量,接口中没有普通成员变量。
(4) 抽象类中的抽象方法的访问类型能够是public,protected和默认类型。
(5) 抽象类中能够包含静态方法,接口中不能包含静态方法。
(6) 抽象类和接口中均可以包含静态成员变量,抽象类中的静态成员变量的访问类型能够任意,但接口中定义的变量只能是public static final类型,而且默认即为public static final类型。
(7) 一个类能够实现多个接口,但只能继承一个抽象类。两者在应用方面也有必定的区别:接口更多的是在系统架构设计方法发挥做用,主要用于定义模块之间的通讯契约。而抽象类在代码实现方面发挥做用,能够实现代码的重用,例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的全部Servlet类都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就能够定义一个抽象的基类,让全部的Servlet都继承这个抽象基类,在抽象基类的service方法中完成权限判断、记录访问日志和处理异常的代码,在各个子类中只是完成各自的业务逻辑代码。
18. java的基础类型和字节大小。
Java基本类型共有八种,基本类型能够分为三类,字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。数值类型又能够分为整数类型byte、short、int、long和浮点数类型float、double。JAVA中的数值类型不存在无符号的,它们的取值范围是固定的,不会随着机器硬件环境或者操做系统的改变而改变。实际上,JAVA中还存在另一种基本类型void,它也有对应的包装类 java.lang.Void,不过咱们没法直接对它们进行操做。8 中类型表示范围以下:
byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间。
short:16位,最大数据存储量是65536,数据范围是-32768~32767之间。
int:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。
long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。
float:32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。
double:64位,数据范围在4.9e-324~1.8e308,赋值时能够加d或D也能够不加。
boolean:只有true和false两个取值。
char:16位,存储Unicode码,用单引号赋值。
Java决定了每种简单类型的大小。这些大小并不随着机器结构的变化而变化。这种大小的不可更改正是Java程序具备很强移植能力的缘由之一。下表列出了Java中定义的简单类型、占用二进制位数及对应的封装器类。
19. Hashtable,HashMap,ConcurrentHashMap底层实现原理与线程安全问题?
可参考的文章:Hashmap实现原理浅析:http://www.cnblogs.com/lzrabbit/p/3721067.html
ConcurrentHashMap原理分析:http://www.cnblogs.com/ITtangtang/p/3948786.html
20.若是不让你用Java Jdk提供的工具,你本身实现一个Map,你怎么作。说了很久,说了HashMap源代码,若是我作,就会借鉴HashMap的原理,说了一通HashMap实现。
21.Hash冲突怎么办?哪些解决散列冲突的方法?
22.HashMap冲突很厉害,最差性能,你会怎么解决? 从O(n)提高到log(n),用二叉排序树的思路说了一通。
23.rehash。
24.hashCode() 与 equals() 生成算法、方法怎么重写。
1.讲讲IO里面的常见类,字节流、字符流、接口、实现类、方法阻塞。
2.讲讲NIO。
3.String 编码UTF-8 和GBK的区别?
4.何时使用字节流、何时使用字符流?
5.递归读取文件夹下的文件,代码怎么实现。
1.session和cookie的区别和联系,session的生命周期,多个服务部署时session管理。
2.servlet的一些相关问题。
3.webservice相关问题。
4.jdbc链接,forName方式的步骤,怎么声明使用一个事务。举例并具体代码。
参考文章:http://www.cnblogs.com/hongten/archive/2011/03/29/1998311.html
5.无框架下配置web.xml的主要配置内容。
web.xml配置详解1: http://www.javashuo.com/article/p-apwqyjsj-bn.html
web.xml配置详解2: http://www.cnblogs.com/chinafine/archive/2010/09/02/1815980.html
6.jsp和servlet的区别。
(1) jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码, Web容器将JSP的代码编译成JVM可以识别的java类)
(2) jsp更擅长表现于页面显示, servlet更擅长于逻辑控制.
(3) Servlet中没有内置对象,Jsp中的内置对象都是必须经过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象获得.
Jsp是Servlet的一种简化,使用Jsp只须要完成程序员须要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。
1.Java的内存模型以及GC算法。
参考答案:http://blog.csdn.net/kingofworld/article/details/17718587
2.jvm性能调优都作了什么。
JVM性能调优: http://www.cnblogs.com/chen77716/archive/2010/06/26/2130807.html
深刻理解JVM性能调优: http://www.open-open.com/lib/view/open1334729637702.html
3.介绍JVM中7个区域,而后把每一个区域可能形成内存的溢出的状况说明。
深刻理解JVM以内存区域与内存溢出: http://www.codeceo.com/article/jvm-memory-overflow.html
4.介绍GC 和GC Root不正常引用。
没有找到很好的答案,只找到了关于GC Root的介绍:http://blog.csdn.net/fenglibing/article/details/8928927
5.本身从classload加载方式,加载机制说开去,从程序运行时数据区,讲到内存分配,讲到String常量池,讲到JVM垃圾回收机制,算法,hotspot。反正就是各类扩展。
6.jvm 如何分配直接内存, new 对象如何不分配在堆而是栈上,常量池解析.
(2) JAVA NEW关键字分配的对象只能在堆上。
7.数组多大放在 JVM 老年代。(不仅是设置 PretenureSizeThreshold ,问一般多大,没作过一问便知)
大对象直接进入老年代: http://book.51cto.com/art/201107/278927.htm
Java整型数组的最大长度到底有多长: http://blog.csdn.net/mayumin/article/details/5904974
8.老年代中数组的访问方式
JVM的内存分配及运行机制: http://www.cnblogs.com/200911/p/3922704.html
没有被GC回收,在不在老年代都经过数组引用访问.
9.GC算法,永久代对象如何GC,GC有环怎么处理。
1) Java的GC机制及算法: http://blog.chinaunix.net/uid-7374279-id-4489100.html
Java GC基本算法: http://www.blogjava.net/showsun/archive/2011/07/21/354745.html
2) Java内存区域和GC机制: http://www.cnblogs.com/hnrainll/archive/2013/11/06/3410042.html
永久代的回收有两种:常量池中的常量,无用的类信息,常量的回收很简单,没有引用了就能够被回收。对于无用的类进行回收,必须保证3点:
(1) 类的全部实例都已经被回收;
(2) 加载类的ClassLoader已经被回收;
(3) 类对象的Class对象没有被引用(即没有经过反射引用该类的地方).3) 基于引用对象遍历的垃圾回收器能够处理循环引用,只要是涉及到的对象不能从GC Roots强引用可到达,垃圾回收器都会进行清理来释放内存。
10.谁会被GC,何时 GC。
(1) 超出了做用域或引用计数为空的对象;从gc root开始搜索找不到的对象,并且通过一次标记、清理,仍然没有复活的对象。
(2) 程序员不能具体控制时间,系统在不可预测的时间调用System.gc()函数的时候;固然能够经过调优,用NewRatio控制newObject和oldObject的比例,用MaxTenuringThreshold 控制进入oldObject的次数,使得oldObject 存储空间延迟达到full gc,从而使得计时器引起gc时间延迟OOM的时间延迟,以延长对象生存期。
11.若是想不被GC怎么办。
只要存在某对象的强引用,就不会被GC回收.
12.若是想在GC中生存1次怎么办。
想在对象生命周期中至少被GC一次后存活,最简单的方法是重写Object的finalize()。
1.Hibernate和ibatis的区别.
参考答案:http://www.cnblogs.com/mingyongcheng/p/3588100.html
2.讲讲mybatis的链接池。
《深刻理解mybatis原理》Mybatis数据源与链接池: http://blog.csdn.net/luanlouis/article/details/37671851
3.Spring框架中须要引用哪些jar包,以及这些jar包的用途.
Spring—jar包详解: http://www.cnblogs.com/yanjunwu/archive/2013/04/06/3001927.html
4.SpringMVC的原理.
(1) SpringMVC 的工做原理: http://www.cnblogs.com/zbf1214/p/5265117.html
(2) Spring框架和MVC原理: http://www.cnblogs.com/jingmoxukong/p/4506493.html
5.SpringMVC注解的意思.
SpringMVC经常使用的注解和含义: http://blog.csdn.net/dandandeshangni/article/details/47974461
6.Spring中beanFactory和ApplicationContext的联系和区别.
BeanFactory 和 ApplicationContext 的区别: http://www.cnblogs.com/lihuiyy/archive/2012/05/22/2512712.html
Spring中ApplicationContext和beanfactory区别: http://blog.csdn.net/hi_kevin/article/details/7325554
7.Spring注入的几种方式(循环注入).
Spring四种依赖注入方式: http://blessht.iteye.com/blog/1162131
(1)Set注入;
(2)构造器注入;
(3)静态工厂的方法注入;
(4)实例工厂的方法注入.
8.Spring如何实现事物管理的.
Spring事务管理: http://www.cnblogs.com/newsouls/p/3988216.html
9.SpringIOC.
谈谈对Spring IOC的理解: http://www.cnblogs.com/xdp-gacl/p/4249939.html
10.Spring AOP的原理.
(1) 代理类的生成与载入;
(2) 拦截链的理解与阐述.
Spring的AOP原理: https://my.oschina.net/elain/blog/382494
11.Hibernate中的1级和2级缓存的使用方式以及区别原理(Lazy-Load的理解).
Hibernate缓存:一级缓存和二级缓存: http://www.cnblogs.com/200911/archive/2012/10/09/2716873.html
1)延迟加载 : 当程序执行getter方法获取时,才发送sql语句加载数据.
延迟加载给程序带来好处,可是要避免session过早关闭问题.
(1)load()和get()两个方法区别:
load()采用延迟加载机制,返回的是一个proxy代理对象
get()没有采用延迟加载,返回的是一个对象实例
(2)Hibernate.initialize(user): 能够强制user对象实例化
(3)hbm映射描述文件中,<class>,<property>,<set>等元素, 均可以使用lazy属性,默认lazy="true",启用延迟加载.
2)缓存机制
Hibernate每次查询先去缓存中查找,没有才去数据库查询.
(1)一级缓存:
Session级别的缓存,缓存load,get出来的单个对象.默认开启.
使用同一个Session对象屡次查询同一个User对象,只会发送一次SQL取数据库获取.
(2)二级缓存
SessionFactory级别的缓存.默认状况是关闭.
①首先在hibernate.cfg.xml中指定EhCache缓存策略.
②在src下添加ehcache.xml配置文件.
③在User.hbm.xml中添加<cache/>定义.
<cache usage="read-only"/>,若是涉及更新,使用read-write.
12.Hibernate的原理体系架构,五大核心接口,Hibernate对象的三种状态转换,事务管理。
参考答案: http://blog.csdn.net/martinmateng/article/details/50879436
Hibernate的工做原理和体系结构: http://hong0104.iteye.com/blog/760813
Hibernate事务管理: http://xmllong.iteye.com/blog/1436769
1.Http是无状态通讯,http的请求方式有哪些,能够本身定义新的请求方式么。
2.Socket通讯,以及长链接,分包,链接异常断开的处理。
Socket通讯原理简介: http://www.jianshu.com/p/90348ef3f41e
Socket通讯原理探讨: http://www.cnblogs.com/fuchongjundream/p/3914696.html
3.Socket通讯模型的使用,AIO和NIO。
也谈BIO | NIO | AIO: https://my.oschina.net/bluesky0leon/blog/132361
4.Socket框架netty的使用,以及NIO的实现原理,为何是异步非阻塞。
Netty原理和使用: http://www.jdon.com/concurrent/netty.html
5.同步和异步,阻塞和非阻塞。
同步与异步的概念: http://blog.chinaunix.net/uid-21411227-id-1826898.html
Socket阻塞与非阻塞,同步与异步、I/O模型: http://blog.csdn.net/hguisu/article/details/7453390
6.OSI七层模型,包括TCP,IP的一些基本知识.
TCP IP基础知识的复习: http://www.cnblogs.com/rollenholt/archive/2012/04/25/2469592.html
7.Http中,get post的区别.
GET和POST有什么区别: http://www.cnblogs.com/nankezhishi/archive/2012/06/09/getandpost.html
8.说说http,tcp,udp之间关系和区别。
TCP、UDP和HTTP详解: http://blog.sina.com.cn/s/blog_bf9843bf0101j5w8.html
HTTP TCP UDP Socket关系的几个经典图: http://www.cnblogs.com/ghj1976/p/4295346.html
9.说说浏览器访问www.taobao.com,经历了怎样的过程。
首先是查找浏览器缓存,浏览器会保存一段时间你以前访问过的一些网址的DNS信息,不一样浏览器保存的时常不等。
若是没有找到对应的记录,这个时候浏览器会尝试调用系统缓存来继续查找这个网址的对应DNS信息。
若是仍是没找到对应的IP,那么接着会发送一个请求到路由器上,而后路由器在本身的路由器缓存上查找记录,路由器通常也存有DNS信息。
若是仍是没有,这个请求就会被发送到ISP(注:Internet Service Provider,互联网服务提供商,就是那些拉网线到你家里的运营商,中国电信中国移动什么的),ISP也会有相应的ISP DNS服务器,一听中国电信就知道这个DNS服务器的规模确定不会小,因此基本上都能在这里找获得。题外话:会跑到这里进行查询是由于你没有改动过"网络中心"的"ipv4"的DNS地址,万恶的电信联通能够改动了这个DNS服务器,换句话说他们可让你的浏览器跳转到他们设定的页面上,这也就是人尽皆知的DNS和HTTP劫持,ISP们还美名曰“免费推送服务”。强烈鄙视这种霸王行为。咱们也能够自行修改DNS服务器来防止DNS被ISP污染。
若是仍是没有的话, 你的ISP的DNS服务器会将请求发向根域名服务器进行搜索。根域名服务器就是面向全球的顶级DNS服务器,共有13台逻辑上的服务器,从A到M命名,真正的实体服务器则有几百台,分布于全球各大洲。因此这些服务器有真正完整的DNS数据库。若是到了这里仍是找不到域名的对应信息,那只能说明一个问题:这个域名原本就不存在,它没有在网上正式注册过。或者卖域名的把它回收掉了(一般是由于欠费)。
这也就是为何打开一个新页面会有点慢,由于本地没什么缓存,要这样递归地查询下去。
多说一句,例如"mp3.baidu.com",域名先是解析出这是个.com的域名,而后跑到管理.com域名的服务器上进行进一步查询,而后是.baidu,最后是mp3,
因此域名结构为:三级域名.二级域名.一级域名。
浏览器终于获得了IP之后,浏览器接着给这个IP的服务器发送了一个http请求,方式为get,例如访问nbut.cn
这个get请求包含了主机(host)、用户代理(User-Agent),用户代理就是本身的浏览器,它是你的"代理人",Connection(链接属性)中的keep-alive表示浏览器告诉对方服务器在传输完如今请求的内容后不要断开链接,不断开的话下次继续链接速度就很快了。其余的顾名思义就好了。还有一个重点是Cookies,Cookies保存了用户的登录信息,在每次向服务器发送请求的时候会重复发送给服务器。Corome上的F12与Firefox上的firebug(快捷键shift+F5)都可查看这些信息。
发送完请求接下来就是等待回应了,以下图:
固然了,服务器收到浏览器的请求之后(实际上是WEB服务器接收到了这个请求,WEB服务器有iis、apache等),它会解析这个请求(读请求头),而后生成一个响应头和具体响应内容。接着服务器会传回来一个响应头和一个响应,响应头告诉了浏览器一些必要的信息,例如重要的Status Code,2开头如200表示一切正常,3开头表示重定向,4开头,如404,呵呵。响应就是具体的页面编码,就是那个<html>......</html>,浏览器先读了关于这个响应的说明书(响应头),而后开始解析这个响应并在页面上显示出来。在下一次CF的时候(不是穿越火线,是http://codeforces.com/),因为常常难以承受几千人的同时访问,因此CF页面常常会出现崩溃页面,到时候能够点开火狐的firebug或是Chrome的F12看看状态,不过这时候通常都急着看题和提交代码,彷佛根本就没心情理会这个状态吧。
若是是个静态页面,那么基本上到这一步就没了,可是现在的网站几乎没有静态的了吧,基本全是动态的。因此这时候事情还没完,根据咱们的经验,浏览器打开一个网址的时候会慢慢加载这个页面,一部分一部分的显示,直到彻底显示,最后标签栏上的圈圈就不转了。
这是由于,主页(index)页面框架传送过来之后,浏览器还要继续向服务器发送请求,请求的内容是主页里面包含的一些资源,如图片,视频,css样式等等。这些"非静态"的东西要一点点地请求过来,因此标签栏转啊转,内容刷啊刷,最后所有请求并加载好了就终于好了。
须要说明的是,对于静态的页面内容,浏览器一般会进行缓存,而对于动态的内容,浏览器一般不会进行缓存。缓存的内容一般也不会保存好久,由于难保网站不会被改动。
10.HTTP协议、 HTTPS协议,SSL协议及完整交互过程.
HTTPS协议, SSL协议及完整交互过程: http://blog.csdn.net/dfsaggsd/article/details/50910999
HTTP协议详解: http://www.cnblogs.com/EricaMIN1987_IT/p/3837436.html
11.Tcp的拥塞,快回传,ip的报文丢弃.
TCP的拥塞控制: http://blog.csdn.net/sicofield/article/details/9708383
IP报文头详解以及定义: http://www.cnblogs.com/xsiedu/articles/1741584.html
12.Https处理的一个过程,对称加密和非对称加密.
对称加密与非对称加密: http://www.cnblogs.com/jfzhu/p/4020928.html
SSH加密原理、RSA非对称加密算法学习与理解: https://my.oschina.net/realfighter/blog/388486
13.Head各个特色和区别.