前言
我在上一家公司工作了3年多,因为受公司平台技术选型的限度,本人的技术能力始终也没有失去实质性地成长,心想本人才25岁还比拟年老,不想把技术能力局限在这里,就想找一个更大的平台去开辟本人的视线,加上我始终对腾讯十分的向往,于是就有了7面腾讯。
去年一共面试了五次腾讯,不过都挂了,往年面了第六次第七次后,终于上岸了。头三次面试腾讯,口试做过后全副杳无音信。所幸也总结出了失败的教训,第四次胜利挺进二面挂(太不容易了),积淀了半年后,第五次跟第六次略微现实一点,不过也还是挂了。终于在我的坚定不移下第七次上岸了。上面我就含泪跟大家分享一下我的心酸面经过程。(不要问我为什么还记得这么分明,习惯面完复盘,勿杠!!!)
面试经验
第四次
一面
1.http三次握手
2.java内存机制
3.java的垃圾回收机制(没答好)
4.string的底层逻辑
5.后端接管前端信息怎么解决?(始终没明确啥意思,没答复到点上)
6.java线程的了解
7.java线程平安呈现的起因
8.java的动态存储原理
9.数组和链表的存储形式
10.算法题,快排(我原本会写,后果写完始终报错数组溢出,最初间接完结了)
11.栈的存储形式
12.栈和堆的使用场景
二面
1.自我介绍
2.10万个数如何找中位数
3.介绍一下各种搜寻树以及查找时间复杂度(AVL树,B/B+树,红黑树,二叉搜寻树,在没有进化为链表的状况下,都是O(logn)
4.TCP/UDP发一个大包有什么区别?
5.均衡二叉树旋转的办法
6.找一棵二叉树中两个节点的公共先人
第五次
一面
1.mmap + native 日志优化?
2.播送和 EventBus 的区别?
3.罕用设计模式你理解哪些?
4.跨过程通信有哪些?
5.简略讲讲 binder 驱动吧?
6.跨过程传递大内存数据如何做?
7.说说 ConcurrentHashMap 的实现原理说下,初始化大小是多少?
8.启动优化怎么优化?
9.你写的 rxpay 和 rxlogin 具体怎么实现的?
10.kotlin + fullter 方面的
二面
1.单例设计模式都写写,动态外部类是怎么保障线程平安的?
2.synchronized 底层实现原理,ReentrantLock 偏心锁与非偏心锁。
3.主线程期待所有线程执行结束,再执行某个特定工作怎么实现?原理和源码看过没?
4.自定义 view 的个别流程,要留神些什么如何优化,点击事件和长按工夫别离是怎么实现的?
5.四种启动模式,在源码剖析中的原理是怎么的?
6.讲讲 bindService 的过程,你当初是怎么优化后盾服务过程的?
7.开发中你都用到了哪些设计模式?说说过后具体的场景。为什么你要用办法工厂,另外两种呢?
三面
1.讲讲 handler 的底层实现原理?
2.说说你做的日志记录优化?
3.你看过 binder 驱动的源码,说说他的内存映射过程,说说客户端期待服务端解决返回的流程,如果要跨过程传递大内存数据你具体会怎么做?简略写一写吧。
4.在公司做过哪些优化?
5.过程中遇到的一些最难解决的问题?
6.提到了动静修复替换加载 so ,那你晓得怎么修复 class 吗?怎么修复资源呢?
7.还有什么要问的?
(过后心田嫉妒忐忑,每天抱着手机,记不得是什么时候发现的状态灰了…)
第六次
一面
1.自我介绍
2.自我介绍时说过本人看过EventBus源码,而后让我谈谈事件总线的了解。
3.EventBus会有什么问题吗?
4.EventBus、接口回调、观察者模式的应用场景说一下。
5.我的项目什么中央用到数据的长久化,说一下。
6.Activity的生命周期,弹出dialog和一个activity的dialog生命周期有什么区别?
7.Activity的启动模式,利用场景,而后举了很多微信的场景,让我去抉择用那种启动模式,说下理由。
8.Activity过程的优先级。
9.如何避免微信不被零碎杀死?
10.service两种启动模式,区别
11.两种启动模式,如果我在退出Activity的时候没有退出service会怎么样。
12.设计一个图片浏览框架,(线程池,lru缓存,brabra的说了一堆)。
13.有一个很大很大的图片加载到内存上,不能升高清晰度和压缩图片你怎么解决?(提醒我部分显示?我没懂)
14.如何适配不同厂商的手机,而后设计模式,brara又说了一大堆,最初还说到jetkins主动部署下面去了
15.AsyncTask源码剖析,每个办法在哪个线程执行的?
(面试官说我不错,叫我今天筹备二面,电话一挂,我就欢快地去吃饭了。)
二面(二面总监/面委,因为散会,等了半个小时)
1.上来大数相乘,我做的眼泪都快流进去了。
2.put和post的区别,利用场景。
3.看了我的flutter我的项目,我改了一个框架,问我这个框架。
4.让你设计一个跨平台的框架,你怎么设计(这里我谈了flutter的架构)。
5.https的流程。
6.fragment的懒加载。
7.一个商场里有一个电影院,你会把厕所建设在哪里,说一下你的理由?
三面HR面(又等了20分钟)
1.自我介绍
2.为什么抉择腾讯?
3.对咱们理解吗?
4.愿不愿意来
5.家里的状况
6.什么时候能够入职。
第七次(这次过了!!!记的也是最分明的)
一面【66min】
1.自我介绍
2.我看你这简历上的技能咋都写的是Java的货色呢?安卓的我的项目做过,SSM的也做过,那你后盾开发和Android偏向于哪一个?
3.说说我的项目,我看你下面有个我的项目做App的,有筹备Android方面的吗?
4.有些SQL比较慢,你咋办?为什么有的SQL这么慢,说说你感觉导致SQL很慢的起因。
5.内存透露?OOM?什么状况会OOM?
6.用过多线程没?说说咋用的。线程池晓得不?说说线程池的原理?
7对ArrayList一个读操作,一个写操作,你用多线程咋实现。死锁你晓得不?你怎么解决?
8.volatile晓得吗?volatile的原子性?
9.Java中的锁晓得哪些?
10.线程之间通信的形式?
11.JVM调优,说说你能从哪些方面着手?
12.JVM和GC简略聊聊,联合JVM内存说说GC。
13.HashMap和HastTable,HashMap平安?不平安用什么?hash()?HashTable是怎么实现平安的?
14.我对你的Java根底有了一个理解了,上面咱们问问网络相干的常识,计算机网络应该学过吧,那说说TCP三次握手?第三次握手能不能去掉?UDP和TCP的区别?
15.你晓得长连贯吗,说说?为啥用长连贯?
16.HTTP1.0和HTTP2.0的区别?说说NIO?
17.HTTPS晓得吗?说说SSL?
18.好了,网络聊到这里吧,咱们说说算法之类的吧。跳台阶晓得吧,怎么做啊。
19.一个链表,让你找最两头的节点,你怎么找?
20.两个大文件,一个比拟大,一个比拟小,让你求交加,你怎么做?
21.那么,咱们再问两个智力题吧,没有固定答案,不要限度本人的思路,想到啥说啥,一个粗细不一样的绳子,残缺的烧完1个小时,你怎么让他烧15分钟(不肯定烧完)。
22.一副全新的扑克牌,按程序的,AAAA,2222,3333,这种,你怎么洗牌能洗散开?
23.C++和C理解吗?
24.面试官问我啥时候有空,约下一面?
26.闲聊,你有啥要问我的啊?问了好几个问题,问完了当前,面试官问我还有啥想问的,不想问问学习资源什么的吗??我就又问了好几个,而后跟我说了说面试的状况。就欢快的say GoodBye了。
问的问题(遗记程序了):
1)我问:还有下一面吗?面试官给我说了说前面啥状况,如果下一面过了,那么三面不会再写算法题了预计。
2)面试官问我:目前有没有Offer?Java后盾和Android你选一个,你做哪个?
3)我问:新人造就打算是啥?以及你们次要负责哪一块的业务?
4)面试官长期想到问我的:有人说Android端走下坡路,你怎么看啊?
5)给我说了说口试是啥状况。
PS:因为我算法太烂了,我就问口试对于是否进下一轮面试的作用大吗?他说,会占一部分,然而也不会全看算法。然而毕竟编程,代码程度不能够特地差吧,还是要有肯定代码功底的。
总体感觉:
面试的问题不是很难,如果不会,面试官会疏导你,他感觉我说的挺有意思的时候,还笑笑,这就让我更不缓和了。还有就是语速慢点,我可能太紧张了,叭叭的多还叭叭的快。
问问题的话,感觉还是尽量的去理解他们这个部门干啥,本人去了干啥比拟重要,毕竟如果面的好,能拿offer,比拟offer的话,好比拟的。顺便也能看看本人对这个部门感兴趣吗。面试是个双向选择的过程,肯定要理解对方做啥,本人是不是有趣味等等方面。
以及答复问题的时候,尽量发散思维,结合实际的例子去说,这样会让面试官感觉你很棒,晓得的很多,也有本人的积攒和思考,如果答复一个问题照着网上看到的材料背下来,可能会让对方感觉是机械记忆,可能我答复问题的时候,尽可能把很多学习到的常识都串联起来讲进去了,所以面试官对我评估不错。一面没完结就间接约下一面,也是挺意外的。
二面【30+min】
我走进了面试的房间,等着面试官进来。过了一会面试官也进来了,问我设施调试好了吗。我说,好了,而后他让我点击哪儿哪儿的,开始共享屏幕,而后我靠,我点了之后,发现我chrome版本太低了,不行!我说,我浏览器版本有点低,道歉,之前了解错您(调试)的意思了,我认为须要用摄像头和话筒,我没留神浏览器版本也有要求。而后我说,等我换个火狐浏览器。
3s换了浏览器我就开始筹备写了,面试官说,用你最相熟的语言写哈~一上来那个界面,main(),测试用例啥的得我本人写….
题目大略和leetcode 59题相似。大略如下,从右上角开始顺时针。剑指offer上也有相似的,反正就是刷题,刷题,刷题啊!!!
<pre class=”ql-syntax” from-niu=”default”>输出: 3 输入: [ [ 7, 8, 1 ], [ 6, 9, 2 ], [ 5, 4, 3 ] ]
</pre>
几个while循环解决的,也没和我探讨看看有没有啥思路,写好了,我就喊他,我问他,须要我说说下咋做的吗,他说不必,run下,给我看看就行。然鹅我一开始写的时候就把main给删掉了…而后我就捣鼓了一下,run,边界溢出了,贼难堪。我就调试,调试了一会,他说,给你放松下要求,去IDE里调试吧。我没搭理他,持续找问题,怎么可能这么容易屈服于IDE呢。
嘿嘿,终于,发现好几个变量写错了中央。改了改,run,胜利AC,他说,你这个输入格局和我想的有点差距啊,我说好的呢,我再改改。AC。那边终于给我竖起了大拇指,而后面试官就说这个题还有变种的。。。。。
这里不得不说,我在温习算法的时候,次要看了b站yxc大佬的视频,对我帮忙很大,还有怎么疾速排错,他本人开办的AcWing也挺好用的。还有就是一面过了之后,马上跟我的内推人沟通了下,他也给了点倡议,让我多刷leetcode medium,而后我就大略过了LeetCode 100题外面的常见的题目大略50多道,还有剑指offer里的60道左右(有些太难的,我感觉不会出就没看,之前也有刷过剑指offer,所以温习编程题还好)。口试之前,把剑指offer上的题思路都顺了一遍,保障本人见到就有思路,能先和面试官交换下本人的思路。
口试完了,跟内推人说了一声。过了一会,他跟我说,面试官对我评估不错,具体怎么样不能走漏,反正就是很好,让我好好筹备总监面吧。看到进复试了真的开心。
(遗记讲了第七次我是内推动的)
三面(60min)
大略是早晨快七点的时候,深圳那边给我打电话,确认身份,说感觉我前几面体现还不错,想约下一面,而后定了周三,跟我说下一面是技术面昂。不得不说,效率好快。
- 面试官上来又是一通确认身份。
- 说说JVM的内存吧,他们都是干啥的?对象怎么创立?
- 每个区域都会产生怎么的异样啊,谁会产生OOM?
- 说说你对GC的意识吧。
- 晓得援用计数法吗?援用计数法有啥长处吗?毛病呢?
- 可达性剖析?
- 垃圾回收的几种算法?比拟一下。
- 你感觉垃圾回收有什么毛病?
- 说说垃圾收集器?有没有想过你说的这些垃圾收集器为啥会有这些毛病呢?
(关机垃圾回收和JVM问的很具体很具体,有的问题记不太清了…) - 我看你还会这个MySQL,那咱们来问问MySQL中的锁。你晓得有哪些锁吗?
- 行锁有啥用啊,绝对于表锁?
- 晓得MySQL次要的两种引擎吗,MySIAM和InnoDB的区别,应用场景?谁有表锁?
- 看你理解InnoDB,那你具体说说InnoDB吧。
- 面试官:我还问你点啥呢?我:那我说说我的哪个我的项目?开始叭叭我的我的项目。没叭叭完,让我停下了。问我这些优化思路是你本人想进去的吗,我说咱们组两个人,思路是我想的。
- CPU爆满了,你感觉操作系统会干点啥事件?
(蒙蔽…答的不对,面试官给我纠正了下…而后就下个题目了) - 那咱们再说说链表和数组?比拟一下它们有啥区别吧,而后再说说数组外面删除一个元素会怎么样,插入一个元素会怎么样,批改一个元素会怎么样,会产生什么事件?(这个中央说的不是很好…)
- 平时用啥IDE?晓得我的项目run之前干什么吗?
(说了个编译和查看谬误,然而面试官仿佛还想让我说点货色,常识盲区…..起初跟同学交换了一下,应该是预编译、编译、汇编、链接。) - 编译期和运行期的区别?
- 指针理解吗?
- 十亿个数,一个数4字节,而后你怎么找最大的十个数?十亿个数,占多少内存?
- 操作系统中有哪些内存晓得吗?平时用什么Windows还是Linux?
- 说说寄存器?
- 理解编译原理吗?晓得计算机组成原理吗?平时都学什么课?
- 一个人给另一个人发微信音讯,说说可能会产生哪些事件?
- 长连贯短连贯说说区别,你晓得的哪些是长连贯,哪些是短连贯?TCP是短连贯还是长连贯吗?
- http是基于什么实现的?1.0和1.1什么区别?
- MTU晓得吗?以太网帧晓得不?MTU大小你晓得不?MTU的组成你晓得不?
- TCP和UDP是否牢靠,为什么不牢靠or为什么牢靠?
- 如果客户端长时间不发消息,那服务器端咋办?【差不多这个意思…】
- 有GitHub吗?写博客吗?有本人搭建博客吗叭叭叭的【就是问你对技术酷爱吗….】
(他问我为什么这些货色不写简历上,我说太菜了不值一提…面试官说,那你也得写啊,阐明你对技术酷爱啊,面试官笑笑。) - 除了开发,你有没有思考过别的就任动向?比方什么…..
- 你当初还在做我的项目吗?你们那个我的项目会去给他们做装置运维啥的吗?
- 你有啥要问的吗?
如何实现质的飞跃?
1.技术积淀(学习+积攒)
我集体有本人的一套学习形式和习惯,平时喜爱利用碎片工夫来看点什么货色,比方一些技术性的书籍或文档,还有一些视频解说等,常常会让我有一种豁然开朗的感觉,对我的工作和前面几面腾讯也起到了很大的帮忙。
其实自己超容易缓和,所以面试的时候始终磕磕巴巴谈话说不出来,明明能想到总是缓和的说不出话。
好在面试官自己挺好的,很有急躁,并且始终在我焦急的时候疏导我说答案,无奈我太慌了😭心理素质怎么这么差,还好最终后果是好的。
面试总结
讲一下大厂面试一些必备的技能
1. 个别状况下第一轮都是根底面试,须要扎实的根底
- 最罕用的Android 基础知识
- Java 基础知识
- 理解一些 罕用货色的原理,例如:handler, thread 等
- 我的项目中的技术点
2. 第二轮的时候须要理解更深层次的货色
- Android 事件散发机制原理
- Android 绘图机制原理
- WindowManager 的相干常识
- 过程间传输方式
- Java 内存管理机制
3. 能进入第三轮根本没什么问题,然而要留神以下问题
- 该轮个别是 老大或者部门负责人,问的问题个别都看 深度与广度
- 当问及薪水的时候,要说一个适合的,小公司随便,大公司肯定要谨慎,当心里没底的时候,能够通知对方,让对方给一个正当的薪资。个别都是在原工资根底之上增长,听猎头说个别涨幅都在15%-30%,超 NB 的能够要30%及以上,如果感觉本人还不错的,挺厉害的,倡议最高20%,个别人就定在15% 左右最靠谱。公司外部个别有一套机制,依据公司状况而定。
- 咱们的面试准则就是拿到正当薪资,失去 offer
- 集体倒退状况,这个问题很难答复,如果和公司方向不合乎,极有可能和公司无缘。倡议多试探性的问问公司短少什么,你是否给予公司对应的货色。当然对于有自我谋求的人,那能够放心大胆的提。我的方向就是开发,哈哈哈,挺极其的,别学我哦。我感觉抉择都是双向的,因而我晓得本人须要的是什么。
- 你最善于什么UI 还是其余什么?这个问题更不好答复。你要说你善于 UI,是不是意味着你其余能力就不行?尽管我不晓得面试官的用意,然而我能感觉到,这个问题不是那么好答复,我会答复说本人都行,来什么业务接什么需要。可能答复不太好,总之和公司的职位吻合就行,这样总不至于出错吧。
最初
其实客户端开发的知识点就那么多,面试问来问去还是那么点货色。所以面试没有其余的窍门,只看你对这些知识点筹备的充沛水平。so,进来面试时先看看本人温习到了哪个阶段就好。
对于常识梳理,这里再分享一下我面试这段时间的温习路线:(以下体系的复习资料是我从各路大佬收集整理好的)
常识梳理完之后,就须要进行查漏补缺,所以针对这些知识点,我手头上也筹备了不少的电子书和笔记,这些笔记将各个知识点进行了完满的总结。
最初为了帮忙大家深刻理解Android相干知识点的原理以及面试相干常识,这里放上相干的我搜集整理的24套腾讯、字节跳动、阿里、百度2020-2021BAT 面试真题解析,我把大厂面试中常被问到的技术点整顿成了视频和PDF(实际上比预期多花了不少精力),包常识脉络 + 诸多细节。
还有 高级架构技术进阶脑图 帮忙大家学习晋升进阶,也节俭大家在网上搜寻材料的工夫来学习,也能够分享给身边好友一起学习。
以上内容均放在了开源我的项目:【github】 中已收录,外面蕴含不同方向的自学Android路线、面试题汇合/面经、及系列技术文章等,资源继续更新中…
3.我的项目复盘
实际上,面试的一二轮所问到的技术问题,很多都是围绕着你的我的项目开展,因而在面试前最初要做好的一件事件就是我的项目复盘。对于我的项目复盘,我集体的思路如下,可供参考:
- 你在这个我的项目中承当了什么样的角色?
- 这个我的项目的背景是什么,如果是技术我的项目,为什么要做?
- 有哪些技术难点,是怎么解决的,是否还有更好的计划?
- 你认为我的项目中是否有能够改良的点?
- 这个我的项目解决了什么问题,最好用数据谈话,这个数据又是怎么得进去的?
提前把思路捋一捋,下面这些问题好好思考或筹备一下,做到心中有谱当前,天然可能面试官聊得融洽,放弃一个好的心态,通过的几率就会更大一些。