写点什么

[干货,阅后进 BAT 不是梦] 面试心得与总结 --- 阿里、小米、腾讯

用户头像
马小轩
关注
发布于: 2 小时前

之前实习的时候就想着写一篇面经,后来忙就给忘了,现在找完工作了,也是该静下心总结一下走过的路程了,我全盘托出,奉上这篇诚意之作,希望能给未来找工作的人一点指引和总结, 也希望能使大家少走点弯路 , 如果能耐心读完,相信对你会找到你需要的东西。

先说一下 LZ 的基本情况,LZ 是四川某 985 学校通信专业的研究生(非计算机),大学阶段也就学了 C 语言,根本没想过最后要成为码农。大四才开始学 java,研一下开始学 android,所以 LZ 觉得自己开始就是一个小白,慢慢成长起来的。

一、心态

心态很重要!

心态很重要!

心态很重要!

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

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

还有一个对待工作的心态,有些人可能觉得自己没有动力去找一个好工作。其实你需要明白一件事情,你读了十几二十年的书,为的是什么,最后不就是为了找到一个好工作么。现在到了关键时刻,你为何不努力一把呢,为什么不给自己一个好的未来呢,去一个自己不满意的公司工作,你甘心吗?

想清楚这一点,我相信大多数人都会有一股干劲了,因为 LZ 刚刚准备开始找实习的时候,BAT 这种公司想都不敢想,觉得能进个二线公司就很不错了,后来发现自己不逼自己一把,你真不知道自己有多大能耐,所以请对找工作保持积极与十二分的热情,也请认真对待每一次笔试面试。

二、基础

基础这东西,各个公司都很看重,尤其是 BAT 这种大公司,他们看中人的潜力,他们舍得花精力去培养,所以基础是重中之重。之前很多人问我,项目经历少怎么办,那就去打牢基础,当你的基础好的发指的时候,你的其他东西都不重要了。

基础无外乎几部分:语言(C/C++或 java),操作系统,TCP/IP,数据结构与算法,再加上你所熟悉的领域。这里面其实有很多东西,各大面试宝典都有列举。

在这只列举了 Android 客户端所需要的和我面试中所遇到的知识点,尽量做到全面,如果你掌握了以下知识点,去面 android 客户端应该得心应手。

后文有介绍个大 BAT 面经,面过的公司有:CVTE、腾讯、阿里、百度、网易、蘑菇街、小米,往下翻哦。

J2SE 基础

1. 九种基本数据类型的大小,以及他们的封装类。

2. Switch 能否用 string 做参数?

3. equals 与==的区别。

4. Object 有哪些公用方法?

5. Java 的四种引用,强弱软虚,用到的场景。

6. Hashcode 的作用。

7. ArrayList、LinkedList、Vector 的区别。

8. String、StringBuffer 与 StringBuilder 的区别。

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 的使用。

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. 分派:静态分派与动态分派。

JVM 过去过来就问了这么些问题,没怎么变,内存模型和 GC 算法这块问得比较多,可以在网上多找几篇博客来看看。

推荐书籍:《深入理解 java 虚拟机》

操作系统

1. 进程和线程的区别。

2. 死锁的必要条件,怎么处理死锁。

3. Window 内存管理方式:段存储,页存储,段页存储。

4. 进程的几种状态。

5. IPC 几种通信方式。

6. 什么是虚拟内存。

7. 虚拟地址、逻辑地址、线性地址、物理地址的区别。

因为是做 android 的这一块问得比较少一点,还有可能上我简历上没有写操作系统的原因。

推荐书籍:《深入理解现代操作系统》

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. 路由器与交换机区别。

网络其实大体分为两块,一个 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 个数.........等等

算法的话其实是个重点,因为最后都是要你写代码,所以算法还是需要花不少时间准备,这里有太多算法题,写不全,我的建议是没事多在 OJ 上刷刷题(牛客网、leetcode 等),剑指 offer 上的算法要能理解并自己写出来,编程之美也推荐看一看。

推荐书籍:《大话数据结构》《剑指 offer》《编程之美》

Android

1. Activity 与 Fragment 的生命周期。

2. Acitivty 的四中启动模式与特点。

3. Activity 缓存方法。

4. Service 的生命周期,两种启动方法,有什么区别。

5. 怎么保证 service 不被杀死。

6. 广播的两种注册方法,有什么区别。

7. Intent 的使用方法,可以传递哪些数据类型。

8. ContentProvider 使用方法。

9. Thread、AsycTask、IntentService 的使用场景与特点。

10. 五种布局: FrameLayout 、 LinearLayout 、 AbsoluteLayout 、 RelativeLayout 、TableLayout 各自特点及绘制效率对比。

11. Android 的数据存储形式。

12. Sqlite 的基本操作。

13. Android 中的 MVC 模式。

14. Merge、ViewStub 的作用。

15. Json 有什么优劣势。

16. 动画有哪两类,各有什么特点?

17. Handler、Loop 消息队列模型,各部分的作用。

18. 怎样退出终止 App。

19. Asset 目录与 res 目录的区别。

20. Android 怎么加速启动 Activity。

21. Android 内存优化方法:ListView 优化,及时关闭资源,图片缓存等等。

22. Android 中弱引用与软引用的应用场景。

23. Bitmap 的四中属性,与每种属性队形的大小。

24. View 与 View Group 分类。自定义 View 过程:onMeasure()、onLayout()、onDraw()。

25. Touch 事件分发机制。

26. Android 长连接,怎么处理心跳机制。

27. Zygote 的启动过程。

28. Android IPC:Binder 原理。

29. 你用过什么框架,是否看过源码,是否知道底层原理。

30. Android5.0、6.0 新特性。

Android 的话,多是一些项目中的实践,使用多了,自然就知道了,还有就是多逛逛一些名人的博客,书上能讲到的东西不多。另外 android 底层的东西,有时间的话可以多了解一下,加分项。

推荐书籍:《疯狂 android 讲义》《深入理解 android》其他综合性的书籍也需要阅读,推荐:《程序员面试笔试宝典》《程序员面试金典》。

月亮私藏了一些热门面试题,需要更多面试题的可私信【架构资料】领取!



点击并拖拽以移动


三、 项目

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

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

1. XXX(某个比较重要的点)是怎么实现的?2. 你在项目中遇到的最大的困难是什么,怎么解决的?3. 项目某个部分考虑的不够全面,如果 XXXX,你怎么优化?4. XXX(一个新功能)需要实现,你有什么思路?

其实你应该能够预料到面试官要问的地方,请提前准备好,如果被问到没有准备到的地方,也不要紧张,一定要说出自己的想法,对不对都不是关键,主要是有自己的想法,另外,你应该对你的项目整体框架和你做的部分足够熟悉。

四、 其他

你应该问的问题

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

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

1. 贵公司一向以 XXX 著称,能不能说明一下公司这方面的特点?2. 贵公司 XXX 业务发展很好,这是公司发展的重点么?3. 对技术和业务怎么看?4. 贵公司一般的团队是多大,几个人负责一个产品或者业务?5. 贵公司的开发中是否会使用到一些最新技术?6. 对新人有没有什么培训,会不会安排导师?7. 对 Full Stack 怎么看?8. 你觉得我有哪些需要提高的地方?

知识面

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

软实力

什么是软实力,就是你的人际交往、灵活应变能力,在面试过程中,良好的礼节、流畅的表达、积极的交流其实都是非常重要的。很多公司可能不光看你的技术水平怎么样,而更看重的是你这个人怎么样的。所以在面试过程中,请保持诚信、积极、乐观、幽默,这样更容易得到公司青睐。

很多时候我们都会遇到一个情况,就是面试官的问题我不会,这时候大多数情况下不要马上说我不会,要懂得牵引,例如面试官问我 C++的多态原理,我不懂,但我知道 java 的,哪我可以向面试官解释说我知道 java 的,类似的这种可以往相关的地方迁移(但是需要注意的是一定不要不懂装懂,被拆穿了是很尴尬的),意思就是你要尽可能的展示自己,表现出你的主动性,向面试官推销自己。

还有就是遇到智力题的时候,不要什么都不说,面试官其实不是在看你的答案,而是在看你的逻辑思维,你只要说出你自己的见解,有一定的思考过程就行。

五、 面经

LZ 应聘的职位都是 android 客户端开发。

面经其实说来话长,包括实习的话面过的公司有:CVTE、腾讯、阿里、百度、网易、蘑菇街、小米。最早得追溯到到今年 3 月份,那时候刚过完年,然后阿里的实习内推就开始了,我基本都没什么准备,就突如其来的接到了人生中第一个面试电话。



点击并拖拽以移动


阿里实习内推一面:

电话面试, 由于是第一次面试,所以非常紧张,项目都没怎么说清楚。然后面试官就开始问项目细节了,这里我关于一个项目细节和面试官有不同的看法,面试官说我这样做有问题,然后我说我们确实是这样做的,并没有出什么错,差点和面试官吵起来,最后我还是妥协了。然后问了我一个怎么对传输的数据加密,我答的很挫,然后面试官就开始鄙视我:你这个基础不好,那个基础不好,那你说说你还有其他什么优势没?Blabla 紧张的说了一些…………只面了 30 分钟不到,然后妥妥的就挂了。

经过这次面试突然感觉人生的艰辛,几天后我们教研室的其他同学陆续开始了面试,他们都很顺利,其中我的室友(单程车票)很顺利的拿到了 offer,他是个大神,然后我就压力无比的大。制定了整套复习计划,从早上 9 点看书看到晚上 10 点。

到了 3 月 15 号左右有 CVTE 面试,第一次面试是群面,比较坑,坐了一个小时的车过去群面了 5 分钟,没什么好说的。

CVTE 实习面 :

在自我介绍和项目后,面试官开始问一些 java 基础,object 有哪些方法?这个还能说了一些。问 hashmap 有多大,这个当时一脸茫然,还 sb 的答了一个 65535。然后面试官让我写三分钟内写一个二分查找,当时也是第一次手写代码,并且还计时,完全没经验,最后超时写了出来。中间又问了我一堆基础,都答得不是很完整。最后问我遇到过 OOM 的情况没有,什么情况下会 OOM。这个也没答出来,然后又妥妥的挂了。

这次经历告诉我,我是缺少面试经验,和现场写代码的能力,基础还需要多加强。所以我开始各种准备,在一个月的时间里看了四本面试书(程序员面试宝典、java 程序员面试宝典、程序员面试笔试宝典、剑指 offer),把所有关于数据结构和算法的东西用代码写了一遍。

然后到了四月初,腾讯来了,我最开始还是非常向往腾讯的,但就当时那个情况,我对自己不报太大希望,觉得能进 BAT 这样的顶级公司是个奢侈的梦想。

腾讯的面试是在一个 5 星级酒店里面,逼格高大上,感觉问的东西也比较多,感觉喜欢问智力题,但是我没遇到。



点击并拖拽以移动


腾讯实习:

1 面:50 分钟左右, 面试的时候还是有些紧张的,但是运气好,遇到了一个学校的师兄,他一直叫我不要紧张。几个比较关键的问题:死锁的必要条件,怎么解决,java 和 c++比有什么优势,java 同步方法,activity 生命周期,中间让我设计了个银行排队系统,我说了一堆。然后让我写了一个计算一个 int 里面二进制有几个 1,然后我用最高效的方法(n=n&n-1)写出来之后,面试官有点意外,还说没见过这么写的,让我跟他解释一下。后面就是拉拉家常,问我对工作地点怎么看,让我对比 qq 和微信,一面出来之后,面试官让我留意通知,心想是过了,其实发挥的不怎么好。

就在会学校的路上,都要到学校了,收到了腾讯二面的通知,下午 3 点。然后我又跑回去二面。

2 面: 二面是一个很严肃的人,看上去就比较资深那种,一直都不笑,后面才知道是手机管家 T4 的专家。一开始就问我项目里,心跳包是怎么设计的,我项目里并没有用心跳,然后只能跟他说没做,问我用 json 传输数据有什么不好(我只知道用哪想过有什么不好)。又问了 http 和 socket 的区别,两个协议哪个更高效一点,遇到过 java 内存泄露没有,用过哪些调试 java 内存工具,java 四种引用。多数都是项目上的东西,基础的东西没问太多,然后感觉自己答的不是很好,很多都不知道,而且还答错了。其实我感觉我应该是过不了的,但是最后我问问题的时候,我让他评价下我的表现,他说不好评价,我自己说了一堆,说在学校里确实见识到的东西比较少,很多东西没考虑全面,然后他表示赞同,和我探讨了一番,我觉得最后这个问题给我加了不少分。二面也面了 50 分钟左右。

回来后发现我的状态一直没变,而他们二面完了的都到了 HR 面了,我以为我已经挂定了,后来在一天晚上 12 点的时候,惊喜的收到了第二天 HR 面的短信,当晚上几乎高兴得一晚上没睡着觉。

3 面(HR): 就是 hr 面,也就面了十几分钟,聊聊天,问问哪的人,未来什么打算的等等,基本不怎么挂人就不详细写了。

就这样拿到了人生中第一个实习 offer。

后面找实习的心就放松了,没有复习了。然后到了 5 月 5 号,阿里来了。对阿里也只是想去面一面的心态了,因为已经有腾讯的 offer 了,就没想太多。

阿里

实习 1 面: 面过腾讯之后发现自己已经比较淡定了,面试得时候能够比较好的交谈了。这一面也遇到一个比较好的面试官,能很轻松的和他交流。主要的问题是 android 的:activity 的生命周期、activity 的四种启动模式(当时忘了一些没答全)、线性布局和相对布局、多线程请求,java GC 算法与 GC 方法,内存模型,有一个比较特别的问题是问我微信的朋友圈怎么设计,然后我把思路跟他说了,其他的就是问了项目相关的了。还问了我一个觉得技术深度重要还是技术宽度重要,一面感觉还是比较基础的。

实习 2 面: 这一面就比较虐心,碰到一个阿里云的 CTO,一上去项目看都不看,直接问我写过多少行代码,我说至少 3、4 万行,然后他让我写了两个题:一个找素数,一个递归求阶层,对我也算手下留情(他后来让我同学写 AVL 树的插入算法,想想也是醉了)。后面就各种基础了,java 的基础挨个问了一遍,比较关键多线程实现,锁的几种等级等,反射的用法,wait()和 sleep()(讨论这个的时候他把我说晕了),Java 还好,多数能应付,然后他就开始问 c++的了。虽然是基础,但是 lz 忘了差不多了,什么指针数组和数组指针,虚函数,多态实现(这个我扯到 java 上了)等等,问了很多,很多都没答上来,然后他说我基础不太好(我想说我简历上写的了解 C++,为什么要追着我问 TT)。

就这样出来了,本来以为挂了,后面被通知过了。同学都只有 2 面技术面,我居然多了一面,叫交叉面试,心想这下肯定完了。

实习 3 面: 这一面遇到了后面我去实习时候的部门 boss,人非常好,来的时候走的时候都要和我握手,非常的平易近人。这一面还是问项目上的一些东西居多,基础就问了个 java 多线程,各个排序的时间复杂度、思想。技术问了半个小时,后面半个小时就开始各种聊人生了(@_@),我家是哪的,父母干嘛的,中学怎么样,大学怎么样,等等,完全就不像是技术面嘛(后来才知道,我一个同学一开始来就和他聊人生,还聊过了。再次感叹找工作是看缘分呐)。

实习 4 面(HR) :阿里 hr 比腾讯 hr 面专业,面了一个小时,把我的生活经历趴了一遍,(问了类似你的优缺点,最让你高兴的一件事,最让你伤心的一件事,你的职业规划,你的理想等等,这种,现在想不起来了)也没什么特别好说的。

面完后第二天去圆桌签 offer,就这样又拿到了阿里的实习 offer。

LZ 后面衡量了杭州阿里 B2B 和广州腾讯 MIG,最后选择去了阿里,因为在总部,感觉大 boss 人比较好,发展前途可能不错,而且留下来的几率比较大,而腾讯是一个分部门,感觉可能不是很有前景(但是后来了解到其实广州腾讯 MIG 发展前景非常好,环境也非常和谐,我同学去实习的都留下来了。哎,只能感叹选择是个大问题)。在阿里实习的两个月时间也挺愉快的,学到了不少东西,也认识了很好的师兄和主管,只因最后被拥抱了变化没有拿到正式 offer。

实习面经就已经写完了,后面是正式找工作的经历,主要是内推比较多:腾讯、网易、蘑菇街、小米,校招就面了家百度。

在阿里实习的时候,面了网易和蘑菇街。



点击并拖拽以移动


网易

内推 1 面: 电话面,一天在里中午休息的时候面的。这一面我面得很烂,由于在阿里实习,面试官恰好也在阿里呆过,问了我在阿里学到了哪些东西,看过哪些框架,看过源码没有,我支支吾吾说了一些,面试官不太满意(我表示我都说不全啊,在阿里就来了不久,哪那么多时间看源码)。项目各种细节问一通之后,开始问基础,Http 报文结构,Handler、Looper 模型,ThreadLocal(这个 LZ 当时没答上来),怎么使 service 不被杀死,android 内存优化,自己实现线程队列模型,问我怎么设计(这个当时被前面的问题问蒙了,直接说不知道了),面了 20+分钟,感觉答得都不怎么好,然后面试官问我说还有没有什么比较擅长的他没有问道的,我就把 android Framework 里 zygote 的启动和 Binder 通信说了一遍(这里强行装了一次逼)。

面完之后本以为挂定了,然后师姐跟我说居然过了,也是够神奇,我觉得是我后面补充的内容救了我。

内推 2 面: 二面是现场面,就在阿里滨江区的隔壁。时间是一天中午,吃了饭就到了隔壁。面试官是个比较年轻人,可能大不了我几岁,也是非常好说话,开始也是聊项目,我把在阿里做的 app 和自己写的小框架拿出来,他就指着上面各种问,这里怎么实现,会有什么问题,你怎么解决,然后他描述了一个场景说,两个 activity,前面的是个 dialog activity,怎么在 dialog activity 存在的情况下改变后面的 activity(lz 答的用广播)。android 怎么解决缓存,要是内存超了怎么办?然后扯到了 JVM,GC 判定算法与方法,哪个区域用什么 GC 算法,怎么改进复制算法。然后是基础,也像一面一样问了一些,hashmap 和 concurrntHashmap 的区别、泛型能否强制转换。然后是算法,问了快排和归并的平均时间复杂度与最差时间复杂度,出了个算法题:怎么找到一个随机数组的前 50 大数、中间 50 大数,(这个用最小堆和 partition 函数),复杂度是多少。

面完之后其实感觉还不错,基本都打答上来了,顺利进入三面。

内推 3 面(HR): hr 面也是现场,也聊了很多,问我为什么要从阿里来网易,有什么打算,你看中网易的什么(主要是针对我是在阿里实习来问的,我就讲了一堆网易的优势),让来杭州工作愿不愿意。还跟我说了,这次内推是优中选优,有名额限制,如果没有通过,请继续关注网易校招。

后面让师姐查了下状态,状态显示是三面已通过。但是最后没有收到 offer,还是有点小失望。



点击并拖拽以移动


蘑菇街

内推 1 面: 电话面,也是在一个中午面的。18 分钟,问了一些项目,主要是问基础、问得非常基础:Arraylist 与 LinkedList 区别,String 与 StringBuffer 用法,HashMap 与 HashTable 区别,Synchronized 用法等等等等(非常基础),这不一一列举了,然后很顺利的就过了。2 面是在 20 天后了,也不知道蘑菇街出了什么岔子。

内推 2 面 :也是电话面,CTO 面试,就整体聊了项目,我在项目中学到了什么,遇到什么困难怎么解决的,在阿里实习学到了哪些东西,有看过源码么,我的优缺点,我为什么选择蘑菇街,我了解蘑菇街哪些东西。最后答完感觉自己答得还行但是也没有过,不知道为什么。



点击并拖拽以移动


小米

内推 1 面: 电话面,大概 40 分钟,面试的时候那边很吵,不过幸好面试官语速慢,而且我答完一个问题后,面试官会和我交流哪里没有答好。没有问项目,就问了基础,问题也不多:HashMap 删除元素的方法,for each 和正常 for 的用在不同数据结构(ArrayList、set、hashmap)上的效率区别(LZ 表示没有看过源码,不知道),static class 和 non-static class 的区别,一个大文件几个 GB,怎么实现复制(这个也没有答好)。然后问了两个算法:之前一个出现过,另一个是在 git 里面,如果有 n 个分支,m 次 commit 怎么找到任意两个节点共同的那个父节点(这个当时我想错了,想到二叉树上去了,没有答好)。然后让两个算法用代码实现,1 个小时内写好 email 给他。

小米面了以后也杳无音信,估计也是要求很高,毕竟解决北京户口。

其实在阿里实习的时候很早就开始投简历了,因为出去实习一段时间后,感觉还是很想留在成都(因为 lz 是四川人)。腾讯我没有参加校招面试,直接走的内推流程。

腾讯

1 面: 电话面,7 月 20+号,很水,就问了项目,聊了可能有十多分钟,然后面试官说,内推没有什么作用,还是要走校招面试(我觉得他可能是有其他事情,想节省时间),你在实习不能回来,还是要现场面一次才行,然后就留了个电话让我校招联系他,这样就完了。2 面是在我回学校后了。

2 面: 9 月 6 号我回学校之后,下午 3 点接到电话,让我晚上 7 点去腾讯现场面的(我在想为何是在晚上,lz 学校到腾讯要 2 个小时,还让不让人回来了),当时紧张得要死,因为刚从阿里回来不久,都没怎么好好准备基础,在地铁上看了两本基础书,亚历山大。面试是在腾讯里面,微信部门,面试官是个中年人(现在是 LZ 的主管),看起来还是比较沉稳的那种。也没问基础技术问题,就聊项目细节和一些可优化的地方,然后把 lz 的简历看了翻了一遍,问了一遍,然后就是问我在阿里学到了什么,为什么当时选择了阿里(这时候肯定要各种跪舔啊)。然后后来他说他是做 ios 的,我在想难怪不问我基础。

面完了说一周之内通知我结果,也没报太大希望,感觉并不太对口,因为搞不懂为什么是做 ios 的来面我。

两天之后,在阿里 HRG 电话通知我拥抱变化之后,几乎同一时间,腾讯电话通知我拿到了成都 offer,我只能感叹太巧了(大概这大半辈子的运气都花光了)。

后来校招开始后,只面了百度一家公司,百度确实比较重视基础与算法,看中技术。



点击并拖拽以移动


百度

1 面: 大概 1 个小时,又是个做 ios 的师兄面试我,自然就只能聊项目了,我给他展示了我做的 app 后,也问了些技术问题,缓存怎么做的,内存溢出怎么处理。然后两个算法题:把一个数组中奇数放前面,偶数放后面,这个要求写出来。另一个是 3 亿条 IP 中,怎么找到次数出现最多的 5000 条 IP。最后问了是否愿意去北京,对于技术的看法。

2 面: 50 分钟,写个 4 个程序题:反转链表、冒泡排序、生产者消费者,这三个都还好写,很快的写出来了,还有一个题是在一组排序数中,给定一个数,返回最接近且不大于这个数的位置,要求时间在 O(logn)(这个想了一会,用二分查找,然后特殊处理了一下),最后他看不懂,要我一步一步解释。花了好一整子,最后问了个 java 反射,就让我走了。百度果然是重视算法。

3 面: 这一面应该是个技术高层,笼统的问了我一下项目的问题,然后问了几个基础:java 反射机制;android 动画有哪些,什么特点?TCP/IP 层次架构,每层的作用与协议;TCP 拥塞控制;滑动窗口是怎么设计的,有什么好处;android 的布局都有哪些。问完这些之后,然后就是有点类似于 HR 的聊天了:如果这次面试过了你觉得是因为什么原因,没过呢?你觉得百度怎么样?你对技术路线什么打算?有些和前面重复的就不写了。然后他让我问他问题,我就连续问了 5、6 个问题,最后愉快的走了。

百度这两天给结果。

六、 写在最后

关于选择

LZ 当时实习的时候,杭州阿里和广州腾讯选择去了阿里,但是却因为拥抱变化没有留下来,相反这边在腾讯实习的同学却很顺利。但是也是因为没有去广州腾讯,最后我能留在成都腾讯。选择是一件非常重要的事情,它决定着你的未来,但是也有一点你得知道:塞翁失马焉知非福,现在看起来不太好的选择,不一定将来就好,未来有太多未知数。

心怀感恩

其实一路走来,我也是在成长,从最初的不自信,到了最后面试一切都比较冷静与沉着。我一直相信,机会是留给有准备的人,所以,请提早准备,越早越好。我很感激能有那么多人帮助我和肯定我,没有最初腾讯的肯定,我肯定不会走的这么顺利,所以我很感恩哪些让我通过的人,也感谢我们实验室的兄弟姐妹,给了我良好的学习成长环境,心怀感恩才能好运常在。

最后最后

针对于上面的面试题我总结出了互联网公司 java 程序员面试涉及到的绝大部分面试题及答案做成了文档和架构视频资料免费分享给大家(包括 Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术资料),希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习,也可以关注我一下以后会有更多干货分享。

资料领取方式:

关注我    点击这里   即可领取】



点击并拖拽以移动


找工作其实就像是一场战役,前面我们经历了高考或者考研,现在是找工作,你不在这个时候搏一搏,怎么对得起你之前的努力。

不要担心找不到好工作,你要相信:天道酬勤!

发布于: 2 小时前阅读数: 2
用户头像

马小轩

关注

还未添加个人签名 2021.06.25 加入

还未添加个人简介

评论

发布
暂无评论
[干货,阅后进BAT不是梦]面试心得与总结---阿里、小米、腾讯