如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html 谢谢.
上一篇发了一个找工做的面经, 找工做不宜, 但愿这一篇的内容可以帮助到你们.
对于此次跳槽找工做, 我准备了挺长的时间, 其中也收集了不少比较好的笔试面试题, 大都是一些经常使用的基础, 不少都是因为时间缘由没有来得及给出答案, 可是题目大都是比较经典实用的, 如今都放到这里, 但愿对正处于找工做的博友有必定的帮助.
第一部分: Java基础(此部分面试题题目来自:http://www.hollischuang.com/archives/10 答案是搜集与互联网)
(为了方便,我把他们分了类,有一些是必看的,我用!标注,有一些进阶型的我用%标注,有一些须要了解的,我用?标注。)html
一:继承、抽象类与接口区别、访问控制(private, public, protected,默认)、多态相关 !二、是否能够继承多个接口,是否能够继承多个抽象类 %三、Static Nested Class 和 Inner Class的不一样 !四、Overload和Override的区别。Overloaded的方法是否能够改变返回值的类型? !五、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized
!七、构造器Constructor是否可被override? !八、做用域public,protected,private,以及不写时的区别?
!二、List、Set、Map是否都继承自Collection接口? !三、HashMap和Hashtable的区别 1.HashTable的方法是同步的,在方法的前面都有synchronized来同步,HashMap未经同步,因此在多线程场合要手动同步 1 int hash = hash(k); 2 int i = indexFor(hash, table.length); 3 static int hash(Object x) { 4 h ^= (h >>> 20) ^ (h >>> 12); 5 return h ^ (h >>> 7) ^ (h >>> 4); 6 }
&&延展: public HashSet() { map = new HashMap<E,Object>(); }
private static final Object PRESENT = new Object(); public boolean add(E e) { return map.put(e, PRESENT)==null; } public boolean remove(Object o) { return map.remove(o)==PRESENT; }
B、HashMap 和 ConcurrentHashMap 的关系 %四、HashMap中是否任何对象均可以作为key,用户自定义对象作为key有没有什么要求? !五、Collection 和 Collections的区别 %六、其余的集合类:concurrenthashmap,treemap,treeset,linkedhashmap等。
!三、内存溢出和内存泄露 (a)对于内存的溢出可能发生的状况,大概有几种: (b)对于内存泄露可能发生的状况,大概有几种: 四:其余 2,是否多线程安全 !二、String s = “123”;这个语句有几个对象产生
1 public boolean equals(Object anObject) 2 { 3 //若是是同一个对象
4 if (this == anObject) 5 { 6 return true; 7 } 8 //若是传递进来的参数是String类的实例
9 if (anObject instanceof String) 10 { 11 String anotherString = (String)anObject; 12 int n = count;//字符串长度
13 if (n == anotherString.count) //若是长度相等就进行比较
14 { 15 char v1[] = value;//取每个位置的字符
16 char v2[] = anotherString.value; 17 int i = offset; 18 int j = anotherString.offset; 19 while (n-- != 0) //对于每一位置逐一比较
20 { 21 if (v1[i++] != v2[j++]) 22 return false; 23 } 24 return true; 25 } 26 } 27 return false; 28 }
%九、了解过哪些JDK8的新特性,举例描述下相应的特性? !十二、启动一个线程是用run()仍是start()?
!1五、多线程与死锁 %1六、Java的四种引用 五:JAVA开发工具、环境的使用 |
第二部分: Java高级
一:多线程 public class RunThread implements Runnable{} public static void main(String[] args){ RunThread thread = new RunThread(); new Thread(thread).start(); new Thread(thread).start(); }
%四、如何中止一个线程? !五、解释是一下什么是线程安全?举例说明一个线程不安全的例子。解释Synchronized关键字的做用。
!六、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 二:内存结构,GC %二、Java中的内存溢出是如何形成的 第一种OutOfMemoryError: PermGen space
%三、jvm gc如何判断对象是否须要回收,有哪几种方式? 2.不可达对象必定会被回收吗
三:CLASSLOADER
四:NIO 五:其余 |
第三部分: JavaEE
一:Servlet的掌握,包括新的异步Servlet %二、servlet中,如何定制session的过时时间? session.setMaxInactiveInterval(30*60); !三、Servlet中的session工做原理 (禁用cookie如何使用session)
服务器在执行jsp的时候,首先把jsp翻译成一个Servlet,因此咱们访问jsp时,其实不是在访问jsp,而是在访问jsp翻译事后的那个Servlet ?六、JSP的动态include和静态include
三:http相关(内部重定向,外部重定向),http返回码 !五、在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来判断) 一、equals方法用于比较对象的内容是否相等(覆盖之后) 二、hashcode方法只有在集合中用到 三、当覆盖了equals方法时,比较对象是否相等将经过覆盖后的equals方法进行比较(判断对象的内容是否相等)。 四、将对象放入到集合中时,首先判断要放入对象的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基础
一、 JAVA基础
1) 抽象类和接口的区别?
补充问题:JAVA8中为何要加入默认方法?
2) 静态内部类(static class)的做用?
3) 序列化和反序列化
4) 动态代理和静态代理的区别?
赠送问题:代理模式,什么是代理模式?如何实现?代理模式结构图是怎样的?代理模式应用在什么场景?
5) nio熟悉吗,nio和io的区别?
6) java8有哪些新特性?
二、 JAVA API
1) transient关键字的做用?
2) volatile关键字的做用?
3) abstract和final是否可同时使用?
4) ArrayList、LinkedList、vector的区别?
5) HashMap、LinkedHashMap,concurrentHashMap的区别,concurrentHashMap为何特别好用,你看过源码吗?
6) collection的继承结构,你是否看过源码?
三、 JVM调优(性能)
1) 有哪些调优工具
2) 如何快速定位有问题代码
3) 内存溢出如何处理,如何调优
4) 垃圾回收机制,有哪些垃圾回收算法,如何配置垃圾回收策略
5) 新生代和老年代
四、 Tomcat
tomcat能够稳定支持的最大并发用户数
Tomcat集群如何架设:Tomcat+Apache
集群时特别关注两个问题:
1:如何实现多应用服务器间的session共享:(一台服务器崩溃,另一台服务器能够继续支持)
2:如何分发请求到各个应用服务器实现压力分解:(这里的解决方案是用apache作 web服务器)
算法问题
一、 生产者和消费者问题?
二、 查找算法有几种,写出实现代码?
三、 排序算法有几种,写出实现代码?
四、 遍历二叉树,分别按照前序、中序、后续?
五、 红黑树
程序题
一、 写出一个字符串,打印出字符串中字符的全部排序
二、 无序的有重复数据的list变成有序的无重复数据的list
框架篇
一、 Spring核心:
分别说说aop和IOC
事务配置的几种方式?
spring有几种注入方式?
spring依赖注入的四种装配方式?
spring的几个重要注解@Component(不推荐使用)、@Repository、@Service、@Controller
二、 SpringMVC和Struts2:二者的区别
三、 Mybatis和Hibernate:二者的区别
mybatis如何实现多表关联查询
mybatis的resultMap
mybatis的#和$
四、 是否能够用maven搭建项目,maven如何构建web项目?
五、 git的使用
六、 当日志很是大时,如何查找须要的日志?
七、 SSH的局限有哪些
数据库篇
数据库基础
一、 MySQL和oracle的区别
二、 Oracle移植到mysql须要处理哪些
三、 存储过程
四、 mysql存储引擎innodb和myisam的区别
数据库优化
一、 sql优化
二、 索引
关于索引:联合索引A和B,当按照A、A和B、B查询时索引使用状况?
三、 数据库优化,使用过哪些优化工具:经常使用的SQLYOG、基准测试,expain、status等
具体问题:
如何找到并定位慢SQL?
如何肯定表和查询是不是最优的?
枚举类型如何使用,枚举类型的误用带来的损失?
有没有什么工具能够监控数据库,快速查看有问题的sql?若是存在大批量有问题的sql,如何排查?
如何诊断响应差的(太多线程),僵尸进程(无响应或长时间运行),或者诊断链接问题?
若是在某段时间内用户反映服务器变慢,如何知道服务器性能差?
假设已经检查了全部常规信息——内存、磁盘等,而全部这些信息都在正常范围内,没有出现错误和异常,这时,你怎么知道系统是否运行变慢?
数据库进阶
一、 当数据库存储数据出现瓶颈,如何处理?——数据库水平拆分、垂直拆分
二、 说说水平拆分和垂直拆分,何时水平拆分,何时垂直拆分,分别解决了哪些问题,分别存在哪些不能解决的问题,如何结合使用?
三、 当水平拆分时,到不一样的表和库中或不一样的分布式服务器上时:不一样的表能够联合查询(union)、不一样的库能够加上库名进行联合查询;若是须要查询的数据分布在不一样的服务器之间,如何查询?如何在存储数据时就将须要同时查询的数据放在同一服务器上(存储时取模或者按照时间分布数据,查询的时候取模或者按照时间查询)
四、 mysql读写分离
五、 数据库集群
升级篇
分布式
一、 有哪些分布式框架,对比其性能优劣?
同步调用:RSET(JAX-RS、Spring Boot)、RPC(Thrift、Dubbo、HSF)
异步调用:Kafka、Notify、MetaQ
同步和异步的区别,分别用于什么场景?
二、 dubbo + zookeeper
三、 nosql(redis、memcache、mongodb)
大并发的处理
一、 负载均衡
二、 分布式
三、 缓存
四、 数据库分库分表
五、 数据库集群
六、 图片服务器分离
七、 首页静态化
大数据问题:
假如天天产生5亿行日志文件,如何搜索到指定内容?
有一个100T大小的文件存放在磁盘中,不借助任何外部存储设备,如何统计指定字符串的个数?
同上,有一个文件,存放天天访问的URL,天天有100万条,如何统计URL的个数?
测试1000万条数据的查询
多线程
一、 有哪些多线程的应用场景
二、 你本身有写过多线程吗,在哪些场景
三、 线程池,java提供的线程池有哪几种?
四、 队列
五、 servlet是线程安全的吗,如何改进?
六、 实现同步的几种方式?
安全
关于安全方面作了哪些工做?
手机、支付如何保证信息安全?
sql注入问题
如何保证访问URL安全:如何不暴露真实的URL地址;如何防止篡改URL地址;如何防止在URL中SQL注入?
设计模式
一、 你熟悉哪些设计模式
二、 框架中用到哪些设计模式
JAVA IO:装饰器模式(Decorator)、适配器模式(Adapt)
Spring :访问者模式(Visitor)、代理模式(Proxy)、策略模式(Strategy)
SpringMVC:模版模式(TempleteMethod)
Mybatis: 简单工厂模式、工厂方法模式(FactoryMethod)、抽象工厂模式(Abstract Factory)
Tomcat:门面模式、观察者模式(Observer)、命令模式(Command)、责任链模式(chainof responsible)
Velocity :合成模式
三、 装饰模式和适配器模式的区别
四、 写一个单例模式
linux
一、会使用哪些命令
查看端口是否被占用
如何查看指定的日志
网络
一、 通讯协议是否有了解,TCP/UDP等、HTTP
二、 http反向代理
业务篇
一、 订单:大并发问题
二、 订单或产品数据量变大以后如何优化
三、 交易付款如何操做
四、 与物流接口
五、 画出你负责的项目的架构图
大概总结就这么多了, 文章内容有点多, 你们能够慢慢去看, 不少答案的话须要本身百度了, 学习是一个积累的过程, 这些东西只是一些浓缩的映射, 若是哪里有不太清楚就说明你尚未掌握透彻了.
但愿对真正找工做的朋友有些帮助, 加油吧.