一名三年Java工程师,面试百度、网易挂了,最终斩获蚂蚁offer
前言
我有一件事情一直在坚持,那就是做笔记和写博客。
做笔记,就是记录学习中大大小小的事情,可能是面试问题,可能是一周的学习计划,也可能是一个知识点,总归都是值得记录的东西,对我来说,就是一种积累。而对于博客,我从一开始只用于记录项目,到后来做转载,再到后来写原创,整理系列文章,则更像是一种沉淀。
但是在春招刚刚结束的这段时间,我发现一个问题,之前学过的东西忘记了很多,特别是那些理解的不够深的知识点,总是特别容易忘记。另外我发现,虽然我在笔记中记录了很多的知识点和面试题,但是往往我只看过一次,不会再去看第二次。
这也意味着,虽然记录的内容很多,但是真正消化吸收的内容很少,脑子里充斥着总是那些零碎的知识点和面试问题,对于完整的知识体系知之甚少。这些问题在春招期间也不断地暴露出来,让我思考了很久。
面对如此窘境,我想做出改变,趁着现在时间充裕,我想要为这些内容做一次减法,并且借此机会,推翻自己原有的知识体系,重建新的知识框架。简单说来,就是重新开始学习Java后端,这次我要用一种更高效的方式,避免走之前走的弯路,要用最高效,最合理的方式去复习。由于我之前已经有基础,所以我对完成这一目标有信心,相应地我也为此做出了明确且详细的学习计划。
在完成知识体系重建以后,我把重点转向了另外几件事,一是完善和熟悉我的简历,以便在面试中能够比较好地发挥,二是持续刷题,保持对算法题和笔试真题的手感和熟练度,三则是看面经查缺补漏,我一直认为看面经是很重要的一项复习内容。
下面分享一下这段时间总结的面经
蚂蚁面经(面了三次,两次一面,一次二面)
蚂蚁金服 中间件 一号机
一面:
自我介绍
1、Java中的多线程了解吗?线程池的增长策略和拒绝策略了解吗?说一下。
2、讲一下线程增加的过程和拒绝策略的执行。
3、讲了一下fixthreadpool的增长策略,还有几种拒绝策略。
4、高并发情况下,如何使用线程池?用哪个?一下线程结束要多久?是否在下一个线程结束前完成?
5、表示并发量比较大,所以我说可以考虑并发量是否大于队列长度加上最大线程数量和,如果不超过的话可以是用fixthreadpool。
6、并发juc了解么,有哪些线程安全的list,concurrenthashmap1.8的改动。
7、HTTP协议了解么,和tcp有什么区别。
8、http1.0和2.0的区别,其中哪个更新比较有意义,为什么。
9、Java的网络编程,比如NIO和Socket了解么,说下BIO和NIO的区别吧:
10、说一下NIO的类库或框架
11、倒排索引了解么。讲一下数据库吧,说下sql优化的方式
12、索引什么时候会失效变成全表扫描
13、分布式的paxos和raft算法了解么
14、中间件知道哪些。
15、平时看什么书,怎么学习的。
16、Spring和Springmvc讲一下。
蚂蚁金服 中间件 二号机
一面:
1、自我介绍
2、讲一下ArrayList和linkedlist的区别,ArrayList的扩容方式,扩容时机。
3、hashmap的实现。
4、NIO了解么,讲一下和BIO的区别,AIO呢。阻塞,非阻塞,异步。具体。
5、你说了解分布式服务,那么你怎么理解分布式服务。
6 、你说了解Tomcat的基本原理,了解的是哪一部分,基本架构,connector和container
7 你在项目中怎么用到并发的
8 docker和虚拟机讲一下。
9 有啥想问的
二面
1 项目
2 说一下Spring源码把,它的架构,流程。
3 Spring的bean如果要在实例化过程中修改其某一个成员变量,应该怎么做呢。不通过构造方法,并且AOP也并不能实现。
4 Tomcat的类加载器了解么,回答不了解只了解Java的类加载器。
5 自定义类加载器怎么实现,其中哪个方法走双亲委派模型,哪个不走,不走的话怎么加载类(实现findclass方法,一般用defineclass加载外部类),如何才能不走双亲委派。(重写loadclass方法)
6 布隆过滤器了解么,讲了ip地址过滤的布隆过滤器实现。
7 听说你项目用过docker,讲一下docker的实现原理,说了虚拟机一般要对内核进行虚拟化,docker则用cgroup和namespace分别进行硬件和命名空间的隔离。
8 项目中遇到的最大挑战。
9 项目中学到最多的东西。
10 有什么想问的。
网易面经
一面:
1、Java的集合类,hashmap如何处理冲突,除了使用红黑树和重写hashcode外还有哪些方法。
2、Java的多线程的使用方法,用过哪些。
3、Java的单例模式写一下,写了枚举类。
4、设计模式的几个原则说一下。
5、spring的单例模式是怎么实现的。
6、类加载机制说一下,除了双亲委派,再说一下更具体的过程,什么时候进行静态变量的初始化。
7、mysql的索引讲一下,一级和二级索引的区别,什么时候可以不用查一级索引。
8、MySQL的事务性质怎么实现的,其中的持久性和隔离性说一下。隔离级别有哪些,解决哪些问题,默认级别是哪个,通过什么实现的。
9、redis了解哪些数据结构,使用keys的话会有什么问题,如何解决这个问题。
10、什么时候会发生死锁,有哪些必要条件,有哪些解决办法。
11、http请求过程会发生什么。
12、算法题,云音乐的歌单列表,调整顺序后需要保存到数据库,如何让每次保存的数据量最小
二面:
1、说一下你擅长的东西,博客里写了什么东西。
2、Java的集合类,说一下hashmap都用到了啥。
3、Java的hashmap,头插法和尾插法有什么区别呢,会有什么问题。
4、1.7和1.8有哪些区别,chm呢。aqs呢
5、多线程了解哪些,说一下闭锁和屏障的用法和原理,写一个多人赛跑的线程实例,同时出发并且记录所用时间。
6、说一下springboot,说一下他有什么优点。并且他的注解是怎么使用的,有哪些注解
Java的反射讲一下,如何获取重载方法和私有方法。
7、springmvc中的内容讲一下,disp说下,怎么使用的,做了哪些事情,如何进行初始化的。
http协议有哪些内容,cookie是哪个字段,在文本中如何确定哪个是字段哪个是值。
8、web.xml怎么使用的?有哪些组件,怎么配置的。
9、servlet有哪些方法,init方法实在什么时候执行的。
10、有哪些自己觉得比较好的地方说一下
11、Linux命令了解哪些说一下。
hr面:
hr小姐姐有点好看的。点赞。
1、自我介绍
2、实习经历
3、实习收获
4、评价一下云音乐,和qq音乐比较一下。
5、有什么爱好
6、城市选择,公司选择啥的
百度 智能云 账号和消息部门
一面:
1、项目
2、讲一下AOP吧
3、动态代理和静态代理有什么区别
4、TCP和IP报文是否会分片,分别在什么情况下会分片,TCP分包之后是否还会进行ip分片
5、写一个斐波那契数列
6、讲一下Linux的内存结构,我说只会JVM的,他让我说一下。
二面:
1、项目讲一下
2、排序算法,复杂度,比较。快排的空间复杂度是logn。
3、讲一下OSI七层模型,每层的作用,wifi属于哪一层。
4、线程间的同步用什么方式,使用hashmap时重写哪两个方法,为什么要重写,什么场景下重写。
5、平时用过什么数据结构,list用哪些有啥区别。
6、Spring中的ioc和aop,ioc的注解有哪些,autowired和resource有什么区别,作用域有哪些,autowired如何配置两个类中的一个。
7、写一个单例模式。
8、Java会有内存泄漏吗,三个区分别什么情况下会产生内存泄漏。
三面:
1、主要了解哪些技术。
2、分布式系统怎么设计。
3、最终一致性是什么,举一下强一致性和最终一致性的例子。
4、分布式事务的消息id怎么确认顺序。
5、zk的性能瓶颈怎么克服。
6、跨机房的网络延迟怎么解决。
7、网络这块熟么,说一下socket编程吧。说了一下java的socket。
8、网络编程的NIO和BIO区别,阻塞指的是什么意思呢。
9、socket客户端和服务端的连接过程和通信过程说一下。
10、操作系统熟么,shell和命令熟么。
11、算法熟么。
12、系统怎么设计,设计模式怎么用
13、系统优化怎么做,cpu,IO,内存分别怎么排查问题和调优
14、家乡,女朋友。
根据上面的面试题,小编已经整理好了相关的问的文档,有感兴趣的可以帮助转发文章后,关注私信小编【学习】免费获取这些面试资料
面经答案