转载:[Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)
原文:http://www.cnblogs.com/wang-meng/p/5898837.html
第一部分: Java基础(此部分面试题题目来自:http://www.hollischuang.com/archives/10 答案是搜集与互联网)
(为了方便,我把他们分了类,有一些是必看的,我用!标注,有一些进阶型的我用%标注,有一些需要了解的,我用?标注。)
一:继承、抽象类与接口区别、访问控制(private, public, protected,默认)、多态相关 !2、是否可以继承多个接口,是否可以继承多个抽象类 %3、Static Nested Class 和 Inner Class的不同 !4、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? !5、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized !6、是否可以继承String类 !7、构造器Constructor是否可被override? !8、作用域public,protected,private,以及不写时的区别? 二:collections相关的数据结构及API !2、List、Set、Map是否都继承自Collection接口? !3、HashMap和Hashtable的区别 1.HashTable的方法是同步的,在方法的前面都有synchronized来同步,HashMap未经同步,所以在多线程场合要手动同步 1 int hash = hash(k); &&延展: public HashSet() { 2、调用HashSet的add方法时,实际上是向HashMap中增加了一行(key-value对),该行的key就是向HashSet增加的那个对象,该行的value就是一个Object类型的常量。 private static final Object PRESENT = new Object(); B、HashMap 和 ConcurrentHashMap 的关系 %4、HashMap中是否任何对象都可以做为key,用户自定义对象做为key有没有什么要求? !5、Collection 和 Collections的区别 %6、其他的集合类:concurrenthashmap,treemap,treeset,linkedhashmap等。 三:异常体系 !2、Java中的异常处理机制的简单原理和应用 !3、内存溢出和内存泄露 (a)对于内存的溢出可能发生的情况,大概有几种: (b)对于内存泄露可能发生的情况,大概有几种: 2、修改hashset中对象的参数值,且参数是计算哈希值的字段。 3、机器的连接数和关闭时间设置。 解决方案: 四:其他 2,是否多线程安全 !2、String s = “123”;这个语句有几个对象产生 !3、reader和inputstream区别 !4、==和equals的区别 对于String复写Object的equals方法,只是比较字符串值是否相等: 1 public boolean equals(Object anObject) %5、hashCode的作用 %6、hashCode和equals方法的关系 ?7、Object类中有哪些方法,列举3个以上(可以引导) !8、char型变量中能不能存贮一个中文汉字?为什么? %9、了解过哪些JDK8的新特性,举例描述下相应的特性? !12、启动一个线程是用run()还是start()? %13、海量数据查询、存储 !15、多线程与死锁 %16、Java的四种引用 五:JAVA开发工具、环境的使用 |
第二部分: Java高级
一:多线程 public class RunThread implements Runnable{} c,Runnable接口和Thread之间的联系: %2、同步和并发是如何解决的 3、什么叫守护线程,用什么方法实现守护线程(Thread.setDeamon()的含义) %4、如何停止一个线程? !5、解释是一下什么是线程安全?举例说明一个线程不安全的例子。解释Synchronized关键字的作用。 !6、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 二:内存结构,GC %2、Java中的内存溢出是如何造成的 第一种OutOfMemoryError: PermGen space %3、jvm gc如何判断对象是否需要回收,有哪几种方式? 2.不可达对象一定会被回收吗 ?4、Java中的内存溢出和C++中的内存溢出,是一个概念吗? 三:CLASSLOADER 四:NIO 五:其他 |
第三部分: JavaEE
一:Servlet的掌握,包括新的异步Servlet %2、servlet中,如何定制session的过期时间? session.setMaxInactiveInterval(30*60); !3、Servlet中的session工作原理 (禁用cookie如何使用session) session和cookie的区别: !4、servlet中,filter的应用场景有哪些? !5、描述JSP和Servlet的区别、共同点(JSP的工作原理)。 服务器在执行jsp的时候,首先把jsp翻译成一个Servlet,所以我们访问jsp时,其实不是在访问jsp,而是在访问jsp翻译过后的那个Servlet ?6、JSP的动态include和静态include 二:WEB框架的掌握(挑其掌握的一种) 三:http相关(内部重定向,外部重定向),http返回码 !5、在web开发中,用redirect与forward做跳转有什么区别?web应用服务器对用户请求通常返回一些状态码,请描述下分别以4和5开头的状态码 四:spring,ibatis,hibernate相关 五:jboss,tomcat等容器相关 六:web安全,SQL注入,XSS, CSRF等 七:AJAX相关 八:Web Service 九:JMS 十:其他 |
第四部分: 数据库相关
一:关系模型理论: 二:事务相关 三:并发控制 四:ORACLE或MYSQL题目 五:其他 |
第五部分: 设计模式
一:高内聚,低耦合方面的理解 二:设计模式方面 三:其他 |
第六部分: 其他清单 只有题目
J2SE基础
1. 九种基本数据类型的大小,以及他们的封装类。
(2)byte——1 byte——Byte
(3)short——2 bytes——Short
(4)int——4 bytes——Integer
(5)long——8 bytes——Long
(6)float——4 bytes——Float
(7)double——8 bytes——Double
(8)char——2 bytes——Character
static Integer valueOf(int i) : 切记-127--+127范围, 使用cache 2. Switch能否用string做参数?
可以。在 Java 7之前,switch 只能支持 byte、short、char、int或者其对应的封装类以及 Enum 类型。
在 Java 7中,String支持被加上了。 3. equals与==的区别。
在java中的数据类型可以分为两类。
1,基本数据类型,他们之间的比较用==表示比较它们的值。
2,引用数据类型,当使用==进行比较时,比较的是它们内存中的存放地址是否相同。而equals内部也是直接引用的==。
但是equals是Object中的方法, 我们可以通过复写来改变equals的用法, 比如String中的equals只是比较两个变量的值是否相等:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
} 4. Object有哪些公用方法?
equals(), toString(), hashCode(), getClass(), notify(), notifyAll(), wait(), finalize(), clone() 5. Java的四种引用,强弱软虚,用到的场景。 6. Hashcode的作用。(这里来说明equals和hashCode的关联)
如果两个对象相等,那么他们一定有相同的哈希值(hash code)。
如果两个对象的哈希值相等,那么这两个对象有可能相等也有可能不相等。(需要再通过equals来判断)
1、equals方法用于比较对象的内容是否相等(覆盖以后)
2、hashcode方法只有在集合中用到
3、当覆盖了equals方法时,比较对象是否相等将通过覆盖后的equals方法进行比较(判断对象的内容是否相等)。
4、将对象放入到集合中时,首先判断要放入对象的hashcode值与集合中的任意一个元素的hashcode值是否相等,
如果不相等直接将该对象放入集合中。如果hashcode值相等,然后再通过equals方法判断要放入对象与集合中的任意一个对象是否相等,
如果equals判断不相等,直接将该元素放入到集合中,否则不放入。 7. ArrayList、LinkedList、Vector的区别。
ArrayList: 内部采用数组存储元素,支持高效随机访问,支持动态调整大小
增删慢,查询快。
LinkedList: 内部采用链表来存储元素,支持快速插入/删除元素,但不支持高效地随机访问.
增删快,查询慢。
Vector: 可以看作线程安全版的ArrayList 8. String、StringBuffer与StringBuilder的区别。
这里插入知识点:String的intern
直接使用双引号声明出来的String对象会直接存储在常量池中。
如果不是用双引号声明的String对象,可以使用String提供的intern方法。intern 方法会从字符串常量池中查询当前字符串是否存在,若不存在就会将当前字符串放入常量池中
1. String类型是Java内的对象,是个不可变的对象,当每次对String进行改变时都需要生成一个新的String对象,然后将指针指向一个新的对象,如果在一个循环里面,不断的改变一个对象,就要不断的生成新的对象,而且对象多了,Java的垃圾自动回收机制会开始工作,所以效率很低,建议在不断更改String对象的地方不要使用String类型
2. StringBuffer 是个可变的对象,就是每次操作都是对对象本身进行操作,而不用生成新的对象,这样效率肯定就会有有很大的提高,在大部分情况下StringBuffer的效率要比String类型要高
3. StringBuilder 与StringBuffer一样是个可变的字符序列,提供与StringBuffer兼容的API,但是不能保证同步,用在字符串缓冲区被当个线程使用的情况,在单机非多线程的情况下使用StringBuilder会有比较好的效率,因为StringBuilder没有处理同步(Synchronized)问题。StringBuffer则会处理同步问题,如果StringBuilder会在多线程下被操作,则要改用StringBuffer,让对象自行管理同步问题。 9. Map、Set、List、Queue、Stack的特点与用法。
10. HashMap和HashTable的区别。
11. HashMap和ConcurrentHashMap的区别,HashMap的底层源码。
12. TreeMap、HashMap、LindedHashMap的区别。
13. Collection包结构,与Collections的区别。
14. try catch finally,try里有return,finally还执行么?
15. Excption与Error包结构。OOM你遇到过哪些情况,SOF你遇到过哪些情况。
16. Java面向对象的三个特征与含义。
17. Override和Overload的含义去区别。
18. Interface与abstract类的区别。
19. Static class 与non static class的区别。
20. java多态的实现原理。
21. 实现多线程的两种方法:Thread与Runable。
22. 线程同步的方法:sychronized、lock、reentrantLock等。
23. 锁的等级:方法锁、对象锁、类锁。
24. 写出生产者消费者模式。
25. ThreadLocal的设计理念与作用。
26. ThreadPool用法与优势。
27. Concurrent包里的其他东西:ArrayBlockingQueue、CountDownLatch等等。
28. wait()和sleep()的区别。
29. foreach与正常for循环效率对比。
30. Java IO与NIO。
31. 反射的作用于原理。
32. 泛型常用特点,List<String>能否转为List<Object>。
33. 解析XML的几种方式的原理与特点:DOM、SAX、PULL。
34. Java与C++对比。
35. Java1.7与1.8新特性。
36. 设计模式:单例、工厂、适配器、责任链、观察者等等。
37. JNI的使用。 JVM
1. 内存模型以及分区,需要详细到每个区放什么。
2. 堆里面的分区:Eden,survival from to,老年代,各自的特点。
3. 对象创建方法,对象的内存分配,对象的访问定位。
4. GC的两种判定方法:引用计数与引用链。
5. GC的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用在什么地方,如果让你优化收集方法,有什么思路?
6. GC收集器有哪些?CMS收集器与G1收集器的特点。
7. Minor GC与Full GC分别在什么时候发生?
8. 几种常用的内存调试工具:jmap、jstack、jconsole。
9. 类加载的五个过程:加载、验证、准备、解析、初始化。
10. 双亲委派模型:Bootstrap ClassLoader、Extension ClassLoader、ApplicationClassLoader。
11. 分派:静态分派与动态分派。 操作系统
1. 进程和线程的区别。
2. 死锁的必要条件,怎么处理死锁。
3. Window内存管理方式:段存储,页存储,段页存储。
4. 进程的几种状态。
5. IPC几种通信方式。
6. 什么是虚拟内存。
7. 虚拟地址、逻辑地址、线性地址、物理地址的区别 TCP/IP
1. OSI与TCP/IP各层的结构与功能,都有哪些协议。
2. TCP与UDP的区别。
3. TCP报文结构。
4. TCP的三次握手与四次挥手过程,各个状态名称与含义,TIMEWAIT的作用。
5. TCP拥塞控制。
6. TCP滑动窗口与回退N针协议。
7. Http的报文结构。
8. Http的状态码含义。
9. Http request的几种类型。
10. Http1.1和Http1.0的区别
11. Http怎么处理长连接。
12. Cookie与Session的作用于原理。
13. 电脑*问一个网页,整个过程是怎么样的:DNS、HTTP、TCP、OSPF、IP、ARP。
14. Ping的整个过程。ICMP报文是什么。
15. C/S模式下使用socket通信,几个关键函数。
16. IP地址分类。
17. 路由器与交换机区别。 数据结构与算法
1. 链表与数组。
2. 队列和栈,出栈与入栈。
3. 链表的删除、插入、反向。
4. 字符串操作。
5. Hash表的hash函数,冲突解决方法有哪些。
6. 各种排序:冒泡、选择、插入、希尔、归并、快排、堆排、桶排、基数的原理、平均时间复杂度、最坏时间复杂度、空间复杂度、是否稳定。
7. 快排的partition函数与归并的Merge函数。
8. 对冒泡与快排的改进。
9. 二分查找,与变种二分查找。
10. 二叉树、B+树、AVL树、红黑树、哈夫曼树。
11. 二叉树的前中后续遍历:递归与非递归写法,层序遍历算法。
12. 图的BFS与DFS算法,最小生成树prim算法与最短路径Dijkstra算法。
13. KMP算法。
14. 排列组合问题。
15. 动态规划、贪心算法、分治算法。(一般不会问到)
16. 大数据处理:类似10亿条数据找出最大的1000个数.........等等
基础篇 JAVA基础 1、 JAVA基础 1) 抽象类和接口的区别? 补充问题:JAVA8中为什么要加入默认方法? 2) 静态内部类(static class)的作用? 3) 序列化和反序列化 4) 动态代理和静态代理的区别? 赠送问题:代理模式,什么是代理模式?如何实现?代理模式结构图是怎样的?代理模式应用在什么场景? 5) nio熟悉吗,nio和io的区别? 6) java8有哪些新特性? 2、 JAVA API 1) transient关键字的作用? 2) volatile关键字的作用? 3) abstract和final是否可同时使用? 4) ArrayList、LinkedList、vector的区别? 5) HashMap、LinkedHashMap,concurrentHashMap的区别,concurrentHashMap为什么特别好用,你看过源码吗? 6) collection的继承结构,你是否看过源码? 3、 JVM调优(性能) 1) 有哪些调优工具 2) 如何快速定位有问题代码 3) 内存溢出如何处理,如何调优 4) 垃圾回收机制,有哪些垃圾回收算法,如何配置垃圾回收策略 5) 新生代和老年代 4、 Tomcat tomcat可以稳定支持的最大并发用户数 Tomcat集群如何架设:Tomcat+Apache 集群时特别关注两个问题: 1:如何实现多应用服务器间的session共享:(一台服务器崩溃,另外一台服务器可以继续支持) 2:如何分发请求到各个应用服务器实现压力分解:(这里的解决方案是用apache做 web服务器) 算法问题 1、 生产者和消费者问题? 2、 查找算法有几种,写出实现代码? 3、 排序算法有几种,写出实现代码? 4、 遍历二叉树,分别按照前序、中序、后续? 5、 红黑树 程序题 1、 写出一个字符串,打印出字符串中字符的所有排序 2、 无序的有重复数据的list变成有序的无重复数据的list 框架篇 1、 Spring核心: 分别说说aop和IOC 事务配置的几种方式? spring有几种注入方式? spring依赖注入的四种装配方式? spring的几个重要注解@Component(不推荐使用)、@Repository、@Service、@Controller 2、 SpringMVC和Struts2:两者的区别 3、 Mybatis和Hibernate:两者的区别 mybatis如何实现多表关联查询 mybatis的resultMap mybatis的#和$ 4、 是否可以用maven搭建项目,maven如何构建web项目? 5、 git的使用 6、 当日志非常大时,如何查找需要的日志? 7、 SSH的局限有哪些 数据库篇 数据库基础 1、 MySQL和oracle的区别 2、 Oracle移植到mysql需要处理哪些 3、 存储过程 4、 mysql存储引擎innodb和myisam的区别 数据库优化 1、 sql优化 2、 索引 关于索引:联合索引A和B,当按照A、A和B、B查询时索引使用情况? 3、 数据库优化,使用过哪些优化工具:常用的SQLYOG、基准测试,expain、status等 具体问题: 如何找到并定位慢SQL? 如何确定表和查询是否是最优的? 枚举类型如何使用,枚举类型的误用带来的损失? 有没有什么工具可以监控数据库,快速查看有问题的sql?如果存在大批量有问题的sql,如何排查? 如何诊断响应差的(太多线程),僵尸进程(无响应或长时间运行),或者诊断连接问题? 如果在某段时间内用户反映服务器变慢,如何知道服务器性能差? 假设已经检查了所有常规信息——内存、磁盘等,而所有这些信息都在正常范围内,没有出现错误和异常,这时,你怎么知道系统是否运行变慢? 数据库进阶 1、 当数据库存储数据出现瓶颈,如何处理?——数据库水平拆分、垂直拆分 2、 说说水平拆分和垂直拆分,什么时候水平拆分,什么时候垂直拆分,分别解决了哪些问题,分别存在哪些不能解决的问题,如何结合使用? 3、 当水平拆分时,到不同的表和库中或不同的分布式服务器上时:不同的表可以联合查询(union)、不同的库可以加上库名进行联合查询;如果需要查询的数据分布在不同的服务器之间,如何查询?如何在存储数据时就将需要同时查询的数据放在同一服务器上(存储时取模或者按照时间分布数据,查询的时候取模或者按照时间查询) 4、 mysql读写分离 5、 数据库集群 升级篇 分布式 1、 有哪些分布式框架,对比其性能优劣? 同步调用:RSET(JAX-RS、Spring Boot)、RPC(Thrift、Dubbo、HSF) 异步调用:Kafka、Notify、MetaQ 同步和异步的区别,分别用于什么场景? 2、 dubbo + zookeeper 3、 nosql(redis、memcache、mongodb) 大并发的处理 1、 负载均衡 2、 分布式 3、 缓存 4、 数据库分库分表 5、 数据库集群 6、 图片服务器分离 7、 首页静态化 大数据问题: 假如每天产生5亿行日志文件,如何搜索到指定内容? 有一个100T大小的文件存放在磁盘中,不借助任何外部存储设备,如何统计指定字符串的个数? 同上,有一个文件,存放每天访问的URL,每天有100万条,如何统计URL的个数? 测试1000万条数据的查询 多线程 1、 有哪些多线程的应用场景 2、 你自己有写过多线程吗,在哪些场景 3、 线程池,java提供的线程池有哪几种? 4、 队列 5、 servlet是线程安全的吗,如何改进? 6、 实现同步的几种方式? 安全 关于安全方面做了哪些工作? 手机、支付如何保证信息安全? sql注入问题 如何保证访问URL安全:如何不暴露真实的URL地址;如何防止篡改URL地址;如何防止在URL中SQL注入? 设计模式 1、 你熟悉哪些设计模式 2、 框架中用到哪些设计模式 JAVA IO:装饰器模式(Decorator)、适配器模式(Adapt) Spring :访问者模式(Visitor)、代理模式(Proxy)、策略模式(Strategy) SpringMVC:模版模式(TempleteMethod) Mybatis: 简单工厂模式、工厂方法模式(FactoryMethod)、抽象工厂模式(Abstract Factory) Tomcat:门面模式、观察者模式(Observer)、命令模式(Command)、责任链模式(chainof responsible) Velocity :合成模式
3、 装饰模式和适配器模式的区别
4、 写一个单例模式 linux
1、会使用哪些命令
查看端口是否被占用
如何查看指定的日志 网络
1、 通信协议是否有了解,TCP/UDP等、HTTP
2、 http反向代理 业务篇
1、 订单:大并发问题 2、 订单或产品数据量变大之后如何优化 3、 交易付款如何操作 4、 与物流接口 5、 画出你负责的项目的架构图