2017年BAT,京东,美团,滴滴等公司面试经验总结

1、心态
   心态很重要!
   心态很重要!
   心态很重要!
   重要的事情说三遍,这一点我以为是必须放到前面来说。
   找工做以前,有一点你必须清楚,就是找工做是一件看缘分的事情,不是你很牛,你就必定能进你想进的公司,都是有一个几率在那。若是你基础好,项目经验足,同时准备充分,那么你拿到offer的几率就会比较高;相反,若是你准备不充分,基础也很差,那么你拿到offer的几率就会比较低,可是你能够多投几家公司,这样拿到offer的概率就要大一点,由于你总有运气好的时候。因此,不要害怕面试,刚开始失败了没什么的,多投多尝试,面多了你就天然能成面霸了。得失心也不要过重,最后每一个人都会有offer的。
   还有就是对待校招的态度,校招的目的并不只仅是为了找工做,并且也是为了锻炼本身,提高本身;对于每一个大学生来讲,真正的校招只有一次,所以必定要珍惜;通过了校招的磨练后,本身的能力将获得很大的提高;这也是人生一个重要的经历;


2、基础
基础这东西,各个公司都很看重,尤为是BAT这种大公司,他们看中人的潜力,他们舍得花精力去培养,因此基础是重中之重。以前不少人问我,项目经历少怎么办,那就去打牢基础,当你的基础好的发指的时候,你的其余东西都不重要了。基础无外乎几部分:语言(C/C++或java),操做系统,TCP/IP,数据结构与算法,再加上你所熟悉的领域。这里面其实有不少东西,各大面试宝典都有列举。在这只列举了java后台工程师所须要的和个人学生面试中所遇到的知识点,尽可能作到全面,若是你掌握了如下知识点,去面java后台工程师应该驾轻就熟。


J2SE基础
1. 八种基本数据类型的大小,以及他们的封装类。
2. 若是两个Integer的值相等,使用==进行判断的结果是否相等(常量池问题)?
3. 你重写过hashcode和equals么,要注意什么
4. Object有哪些公用方法?
5. Java的四种引用,强弱软虚,用到的场景。
6. equals与==的区别。
7. try catch finally,try里有return,finally还执行么?
8. Excption与Error包结构。OOM你遇到过哪些状况,SOF你遇到过哪些状况。
9. Java面向对象的三个特征与含义。
10. Override和Overload的含义与区别。
11. Interface与abstract类的区别。
12. Static class 与non static class的区别。
13. String、StringBuffer与StringBuilder的区别。
14. ArrayList、LinkedList、Vector的区别。
15. Hashmap的原理
16. Map、Set、List、Queue、Stack的特色与用法。
17. HashMap和HashTable的区别。
18. HashMap和ConcurrentHashMap的区别,HashMap的底层源码。
19. TreeMap、HashMap、LindedHashMap的区别。
20. Collection包结构,与Collections的区别。
21. Hashmap的大小为何指定为2的幂次
22. Arraylist的原理
23. Hashmap中jdk1.8以后作了哪些优化
24. 多线程条件变量为何要在while体里
25. Concurrent包里的其余东西:ArrayBlockingQueue、CountDownLatch等等。
26. 实现多线程的三种方法:Thread,Runable,Callable.
27. 线程同步的方法:sychronized、lock、reentrantLock等。
28. 写一个单例模式,如何解决线程安全的问题;
29. 问了为何用Volatile,synchronize移到方法最外面会怎么样?
30. 锁的等级:方法锁、对象锁、类锁。
31. 写出生产者消费者模式。
32. Synchronize关键字为何jdk1.5后效率提升了
33. 讲一下countDownLatch
34. ThreadLocal的设计理念与做用。
35. ThreadPool用法与优点。
36. wait()和sleep()的区别。
37. 说一个你最熟悉的设计模式
38.讲一下你项目中用到了哪些设计模式
39 讲一下线程状态转移图
40. Java IO与NIO。
41.Nio的原理
42.Channel和buffer
43.directBuffer和buffer的区别
44.nio和aio的区别
45.I++操做怎么保证线程安全
46.如何解决并发访问的错误
47.死锁是什么呢
48.怎么解决死锁
49. 反射的做用于原理。
50. 泛型经常使用特色,List<String>可否转为List<Object>。
51. 解析XML的几种方式的原理与特色:DOM、SAX、PULL。
52. Java与C++对比。
53. Java1.7与1.8新特性。
54. 设计模式:单例、工厂、适配器、责任链、观察者等等。
55.单例模式在你项目里哪些应用?

Java里有不少很杂的东西,有时候须要你阅读源码,大多数可能书里面讲的不是太清楚,须要你在网上寻找答案。
推荐书籍:《java核心技术卷I》《Thinking in java》《java并发编程实战》《effictive java》《大话设计模式》
 
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.分派:静态分派与动态分派。
10.Java的full gc
11.Full gc会致使什么问题
12.垃圾回收算法的过程
13.你了解的垃圾收集器? Cms收集器的过程
14.怎样进入老年代?

JVM过去过来就问了这么些问题,没怎么变,内存模型和GC算法这块问得比较多,能够在网上多找几篇博客来看看。
推荐书籍:《深刻理解java虚拟机》
 


操做系统

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. 路由器与交换机区别。
18. http请求流程
网络其实大致分为两块,一个TCP协议,一个HTTP协议,只要把这两块以及相关协议搞清楚,通常问题不大。
推荐书籍:《TCP/IP协议族》
 


数据结构与算法

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个数.........等等
17. 加密解密了解么?几种算法,讲一下你了解的
18.写一个两个有序链表合并成一个有序链表
19.堆排序的原理
20.介绍一下红黑树
21.对算法有什么了解?答主先回答了动态规划,解释了一下dp的思想
22.快排的思想讲一下
23.讲一下稳定的排序算法和不稳定的排序算法
24.手撕算法:一棵二叉排序树,给定一个数,找到与给定数差值最小的数
25.场景题:设计一个系统,解决抢购时所须要的大量的短连接的功能,如何保证高并发,如何设计短连接
26.手撕算法:两个排序的数组A和B分别含有m和n个数,找到两个排序数组的中位数,答主用的二分,时间复杂度为O(log (m+n))。结果面试官不满意,
让用归并的思想作,时间复杂度其实更高了
27.手撕算法:假设你是一个专业的窃贼,准备沿着一条街打劫房屋。每一个房子都存放着特定金额的钱。你面临的惟一约束条件是:相邻的房子装着相互
联系的防盗系统,且 当相邻的两个房子同一天被打劫时,该系统会自动报警。给定一个非负整数列表,表示每一个房子中存放的钱, 算一算,若是今晚去
打劫,你最多能够获得多少钱 在不触动报警装置的状况下。
28.算法题:给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。
29.手撕算法:最小公倍数和最大公约数
30.手撕算法:反转单链表
31.手撕算法:实现相似微博子结构的数据结构,输入一系列父子关系,输出一个相似微博评论的父子结构图
32.手撕一个单例模式
33.智力题:时针分针何时重合

算法的话实际上是个重点,由于最后都是要你写代码,因此算法仍是须要花很多时间准备,这里有太多算法题,写不全,个人建议是没事多在OJ上刷刷题(牛客网、leetcode等),剑指offer上的算法要能理解并本身写出来,编程之美也推荐看一看。
推荐书籍:《大话数据结构》《剑指offer》《编程之美》《编程珠玑》
 
javaEE:


1.servlet工做流程,如何解决配置文件过于繁琐的问题
2.JSP和Servlet有什么区别?为何要搞出两个来。
3.forward 和 redirect区别
4.servlet的几个方法 doget dopost区别
5.在多个服务器之间session是怎么共享的。
6.servlet工做流程,如何解决配置文件过于繁琐的问题
7.session的机制;session和cookie区别
8.servlet和filter的区别。filter你在哪些地方用到过。
9.怎么解决session一致性缓存的问题


框架:

1.Hibernate的延迟加载是怎么实现的
2.Hibernate持久化的状态。
3.Hibernate的生成策略
4.Hibernate的batch有数量限制么
5.hiberate与mybatis区别
6.Mybatis高级映射
7.Spring IOC和AOP的理解,它们的原理是什么,若是让你本身搞个IOC,AOP的话,怎么搞。
8.Struts2和SpringMVC的区别。
9.spring实现事务的方式有哪些。
10.spring中$与#。
11.spring的事务有几种方式?谈谈spring事务的隔离级别和传播行为。
12.spring中用到了哪些设计模式,线程池;
13.Spring中autowire和resourse关键字的区别
14.讲讲你对spring的理解,不要把ioc和aop背给我听
15.介绍spring中的熟悉的注解
16.让你实现autowire注解的功能你会如何实现
17.Spring的aop怎么实现

18.Spring的aop有哪些实现方式java

19.动态代理的实现方式和区别mysql

框架里有不少很杂的东西,有时候须要你阅读源码,大多数可能书里面讲的不是太清楚,须要你在网上寻找答案,也同时须要看一下官方的文档

面试


数据库
1.讲一下数据的acid
2.什么是一致性
3.什么是隔离性
4.Mysql的隔离级别
5.每一个隔离级别是如何解决
6.数据库的索引原理
7.非聚簇索引和聚簇索引
8.索引的使用注意事项
9.项目用到什么数据库?隔离级别?每一个隔离级别各作了什么
10.数据库的索引?mysql不一样引擎索引的区别
11.数据库的索引原理
12.索引使用的注意事项
13.Mysql的数据库引擎,区别特色
14.一千万用户并发抢购,怎么设计
15.何时用读锁
16.何时用写锁
17.Cas的原理,使用场景
18.数据库的瓶颈
19.缓存还没更新到主存,服务器挂了怎么办
20.数据库挂了怎么办
21.锁的实现原理
22.怎么解决缓存和主存的一致性问题
23.数据库挂了怎么怎么办
24.怎么保证一致性
25.分布式事务知道么
26.介绍分布式事务
27.为何负载均衡
28.怎么实现负载均衡
29.数据库挂了怎么办?除了热备份还有什么方法
30.数据库的索引
31.数据库的隔离级别
32.Mysql的容灾备份
33.Redis和memcache 的区别
34.为何选择redis
35.mysql数据库的引擎和区别
36.看你最近博客写的是redis,介绍redis和mysql的区别
37.Redis的应用场景
38.设计题,一个图书馆管理系统,数据库怎么设计,需求本身定
39.Redis的特色
40.分布式事务了解么
41.Mongodb和关系型数据库之间的区别,还了解其余的非关系型数据库没
42.Redis如何解决key冲突
43.有深刻了解过redis吗?
44.Redis的优点和特色
45.Redis和mysql的区别
46.Redis的持久化有哪些方式,具体原理
47.若是成功的用户有10万,redis存不下怎么处理
48.了解redis源码么
49.了解redis集群么
50.Redis的持久化?有哪些方式,原理是什么?
51.Mysql对联合索引有优化么?会自动调整顺序么?哪一个版本开始优化?
52.Redis的应用
53.Redis的持久化的方式和原理


新技术
1.若是你够牛,mq,dubbo,zookeeper都会问到
2.对高负载有了解么
3.对高并发有了解么?
4.消息队列了解么
5.分布式了解么
6.本身写一个tomcat服务器,你会怎么写
7.分布式服务器会出现哪些问题    
8.反爬虫的机制,有哪些方式


场景
1.场景题:设计一个下单系统,下单成功后能够给用户发优惠券
2.接上面场景题:服务器挂了,优惠券还没发怎么办
3.场景题:千万用户抢购,如何处理高并发,而且有一个连接,指向前一天抢购成功的用户,如何设计这个系统和数据库
4.若是后台处理抢购请求的服务器,每次最多承受200的负载,系统该怎么设计


hr
你的职业规划
有哪些offer
为何还来咱们这
自我介绍


3、 项目
关于项目,这部分每一个人的所作的项目不一样,因此不能具体的讲。项目再也不与好与很差,在于你会不会包装,有时候一个很low的项目也能包装成比较高大上的项目,多用一些专业名词,突出关键字,能使面试官能比较容易抓住重点。在聊项目的过程当中,其实你的整个介绍应该是有一个大致的逻辑,这个时候是在考验你的表达与叙述能力,因此好好准备很重要。、


面试官喜欢问的问题无非就几个点:
1. XXX(某个比较重要的点)是怎么实现的?
2. 你在项目中遇到的最大的困难是什么,怎么解决的?
3. 项目某个部分考虑的不够全面,若是XXXX,你怎么优化?
4. XXX(一个新功能)须要实现,你有什么思路?
5. XXX项目的亮点有哪些?
6. 若是数据量很大,并发数不少怎么处理?
7. 项目介绍,最复杂的表
8. 项目介绍
9. 项目架构
10.项目难点
11.项目里一个完整请求的流程
12.项目的优化

其实你应该可以预料到面试官要问的地方,请提早准备好,若是被问到没有准备到的地方,也没关系张,必定要说出本身的想法,对不对都不是关键,主
要是有本身的想法,另外,你应该对你的项目总体框架和你作的部分足够熟悉。


4、 其余

你应该问的问题

面试里,最后面完以后通常面试官都会问你,你有没有什么要问他的。其实这个问题是有考究的,问好了实际上是有加分的,通常不要问薪资,主要应该是:关于公司的、技术和自身成长的。redis


如下是我常问的几个问题,若是须要能够参考:
1. 贵公司一贯以XXX著称,能不能说明一下公司这方面的特色?
2. 贵公司XXX业务发展很好,这是公司发展的重点么?
3. 对技术和业务怎么看?
4. 贵公司通常的团队是多大,几我的负责一个产品或者业务?
5. 贵公司的开发中是否会使用到一些最新技术?
6. 对新人有没有什么培训,会不会安排导师?
7. 对Full Stack怎么看?
8. 你以为我有哪些须要提升的地方?
 
知识面
除了基础外,你还应该对其余领域的知识有多少有所涉猎。对于你所熟悉的领域,你须要多了解一点新技术与科技前沿,你才能和面试官谈笑风生。
软实力
什么是软实力,就是你的人际交往、灵活应变能力,在面试过程当中,良好的礼节、流畅的表达、积极的交流其实都是很是重要的。不少公司可能不光看你的技术水平怎么样,而更看重的是你这我的怎么样的。因此在面试过程当中,请保持诚信、积极、乐观、幽默,这样更容易获得公司青睐。不少时候咱们都会遇到一个状况,就是面试官的问题我不会,这时候大多数状况下不要立刻说我不会,要懂得牵引,例如面试官问我C++的多态原理,我不懂,但我知道java的,哪我能够向面试官解释说我知道java的,相似的这种能够往相关的地方迁移(可是须要注意的是必定不要不懂装懂,被拆穿了是很尴尬的),意思就是你要尽量的展现本身,表现出你的主动性,向面试官推销本身。还有就是遇到智力题的时候,不要什么都不说,面试官其实不是在看你的答案,而是在看你的逻辑思惟,你只要说出你本身的看法,有必定的思考过程就行。
 

5、面试技巧 1.技术面试时,会的问题以回答,不会的问题怎么回答; 2.HR面时,注意本身的礼貌; 3.听懂面试官的问题