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

一、心态

   心态很重要!

   心态很重要!

   心态很重要!

   重要的事情说三遍,这一点我觉得是必须放到前面来讲。

   找工作之前,有一点你必须清楚,就是找工作是一件看缘分的事情,不是你很牛,你就一定能进你想进的公司,都是有一个概率在那。如果你基础好,项目经验足,同时准备充分,那么你拿到offer的概率就会比较高;相反,如果你准备不充分,基础也不好,那么你拿到offer的概率就会比较低,但是你可以多投几家公司,这样拿到offer的几率就要大一点,因为你总有运气好的时候。所以,不要惧怕面试,刚开始失败了没什么的,多投多尝试,面多了你就自然能成面霸了。得失心也不要太重,最后每个人都会有offer的。

   还有就是对待校招的态度,校招的目的并不仅仅是为了找工作,而且也是为了锻炼自己,提升自己;对于每个大学生来说,真正的校招只有一次,因此一定要珍惜;经过了校招的磨练后,自己的能力将得到很大的提升;这也是人生一个重要的经历;

二、基础

基础这东西,各个公司都很看重,尤其是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能否转为List。

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有哪些实现方式

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

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

数据库

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

为什么还来我们这

自我介绍

三、 项目

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

面试官喜欢问的问题无非就几个点:

1. XXX(某个比较重要的点)是怎么实现的?

2. 你在项目中遇到的最大的困难是什么,怎么解决的?

3. 项目某个部分考虑的不够全面,如果XXXX,你怎么优化?

4. XXX(一个新功能)需要实现,你有什么思路?

5. XXX项目的亮点有哪些?

6. 如果数据量很大,并发数很多怎么处理?

7. 项目介绍,最复杂的表

8. 项目介绍

9. 项目架构

10.项目难点

11.项目里一个完整请求的流程

12.项目的优化

其实你应该能够预料到面试官要问的地方,请提前准备好,如果被问到没有准备到的地方,也不要紧张,一定要说出自己的想法,对不对都不是关键,主

要是有自己的想法,另外,你应该对你的项目整体框架和你做的部分足够熟悉。

四、 其他

你应该问的问题

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

以下是我常问的几个问题,如果需要可以参考:

1. 贵公司一向以XXX著称,能不能说明一下公司这方面的特点?

2. 贵公司XXX业务发展很好,这是公司发展的重点么?

3. 对技术和业务怎么看?

4. 贵公司一般的团队是多大,几个人负责一个产品或者业务?

5. 贵公司的开发中是否会使用到一些最新技术?

6. 对新人有没有什么培训,会不会安排导师?

7. 对Full Stack怎么看?

8. 你觉得我有哪些需要提高的地方?


知识面

除了基础外,你还应该对其他领域的知识有多少有所涉猎。对于你所熟悉的领域,你需要多了解一点新技术与科技前沿,你才能和面试官谈笑风生。

软实力

什么是软实力,就是你的人际交往、灵活应变能力,在面试过程中,良好的礼节、流畅的表达、积极的交流其实都是非常重要的。很多公司可能不光看你的技术水平怎么样,而更看重的是你这个人怎么样的。所以在面试过程中,请保持诚信、积极、乐观、幽默,这样更容易得到公司青睐。很多时候我们都会遇到一个情况,就是面试官的问题我不会,这时候大多数情况下不要马上说我不会,要懂得牵引,例如面试官问我C++的多态原理,我不懂,但我知道java的,哪我可以向面试官解释说我知道java的,类似的这种可以往相关的地方迁移(但是需要注意的是一定不要不懂装懂,被拆穿了是很尴尬的),意思就是你要尽可能的展示自己,表现出你的主动性,向面试官推销自己。还有就是遇到智力题的时候,不要什么都不说,面试官其实不是在看你的答案,而是在看你的逻辑思维,你只要说出你自己的见解,有一定的思考过程就行。


五、面试技巧

1.技术面试时,会的问题以回答,不会的问题怎么回答;

2.HR面时,注意自己的礼貌;

3.听懂面试官的问题

如果你想了解更多,可以加群:855355016,群内有Java高架构师、分布式架构、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战学习架构师视频免费获取

你可能感兴趣的:(2018年BAT,京东,美团,滴滴等公司面试经验总结)