原来面试讲究方法!终于从【小公司一面就挂】冲到【五面字节获 Offer】,从此大厂offer收割机

面试情况

我在 7 周内一共面试了42场,最终拿了腾讯、阿里、字节跳动、B站、搜狗的 5 个Offer。

将这几个公司的面经分类整理了一下,自己平常也有收集分类的习惯,所以一起发出来分享给大家 :

一、Java相关

1、Java中==和equals和hashCode的区别
2、int与integer的区别
3、谈谈对java多态的理解
4、String、StringBuffer、StringBuilder区别
5、抽象类和接口区别
6、Serializable 和Parcelable 的区别
7、string 转换成 integer的方式及原理
8、哪些情况下的对象会被垃圾回收机制处理掉?
9、什么是强引用、软引用、弱引用以及虚引用?
10、什么是依赖注入?能说几个依赖注入的库么?
11、静态代理和动态代理的区别,什么场景使用?
12、Java的异常体系
13、JVM的回收算法是怎样的
14、说一下泛型原理,并举例说明
15、能说说HashMap常用操作的底层实现原理吗?
16、垃圾回收机制和调用 System.gc()的区别?
17、说一下你所了解的设计模式有哪些
18、说下java中的线程创建方式,线程池的工作原理。
...

二、计算机网络

1、Http1.1和Http1.0及2.0的区别
2、Http长连接。
3、Http的请求方法。
4、Http的报文结构。
5、Https加密原理。
6、HTTPS 如何防范中间人攻击?
7、Tcp和Udp的区别?
8、TCP可靠传输原理实现(滑动窗口)。
9、为什么tcp要经过三次握手,四次挥手?
10、Cookie与Session的作用和原理。
11、浏览器输入地址到反馈结果发生了什么?
12、客户端如何校验 CA 证书?
13、网络请求缓存处理,okhttp如何处理网络缓存的
14、请解释安卓为啥要加签名机制?
15、权限管理系统(底层的权限是如何进行 grant 的)?
16、client如何确定自己发送的消息被server收到

三、Android基础

1、说下四大组件生命周期?
2、说下onSaveInstanceState()方法的作用 ? 何时会被调用?
3、说下 Activity的四种启动模式、应用场景 ?
4、谈谈Activity和Fragment的区别?
5、Service的两种启动方式?区别在哪?
6、如何保证Service不被杀死 ?
7、广播有几种形式 ? 都有什么特点 ?
8、广播发送和接收的原理了解吗 ?(Binder机制、AMS)
9、ContentProvider的权限管理?
10、描述一下Android数据持久存储方式?
11、SharedPreferences的应用场景?注意事项?
12、了解SQLite中的事务操作吗?是如何做的
13、Android中进程和线程的关系? 区别?
14、为何需要IPC?多进程通信可能会出现的问题?
15、讲下View的绘制流程?
16、描述一下View事件传递分发机制?

四、Android中高阶

1.要做一个尽可能流畅的 ListView ,你平时在工作中如何进行优化
2.对于 Android 的安全问题,你知道多少
3.如何缩减 APK 包大小?
4.Android 与服务器交互的方式中的对称加密和非对称加密是什么?
5.设备横竖屏切换的时候,接下来会发生什么?
6.Android 启动 Service 的两种方式是什么? 它们的适用情况是什么?
7.请介绍下 AsyncTask 的内部实现,适用的场景是?
8.ThreadLocal 原理
9.RxJava 的功能与原理实现
10.ANR 是什么?怎样避免和解决 ANR?
11进程间通信机制,binder原理
12.序列化的作用,以及 Android 两种序列化的区别。
13.Android 中进程内存的分配,能不能自己分配定额内存
14.Android5.0~10.0之间大的变化
15.使用过什么图片加载库?

五、Android第三方库源码

1、网络底层框架:OkHttp实现原理
2、OKhttp针对网络层有哪些优化?
3、网络请求缓存处理,okhttp如何处理网络缓存的?
4、从网络加载一个10M的图片,说下注意事项?
5、网络封装框架:Retrofit实现原理
6、响应式编程框架:RxJava实现原理
7、图片加载框架:Glide实现原理
8、Glide如何确定图片加载完毕?
9、Glide内存缓存如何控制大小?
10、加载bitmap过程(怎样保证不产生内存溢出)
11、Android中软引用与弱引用的应用场景。
12、LruCache原理
13、Fresco与Glide的对比:
14、Bitmap如何处理大图,如一张30M的大图,如何预防OOM?
15、事件总线框架EventBus实现原理
16、内存泄漏检测框架:LeakCanary实现原理
17、leakCannary中如何判断一个对象是否被回收?
18、依赖注入框架:ButterKnife实现原理
19、依赖全局管理框架:Dagger2实现原理
20、数据库框架:GreenDao实现原理

六、性能优化

这个主要结合你所做过的项目问,一般面试官会问你项目做过哪些方面的优化,常见的问法就是:

1、优化的思路是什么
2、用到了哪些技术
3、遇到了哪些困难(问题)
4、如何解决
5、有什么心得

主要结合自己项目回答。切记不要自己给自己挖坑,比如没有做过这方面优化,你为了表现自己,说做过,结果面试官往下问回答不出来,这关乎诚信问题,你们懂的~

面试总结:

我一直觉得技术面试不是考试,考前背背题,发给你一张考卷,答完交卷等通知。

首先,技术面试是一个 认识自己 的过程,知道自己和外面世界的差距。

更重要的是,技术面试是一个双向了解的过程,要让对方发现你的闪光点,同时也要 试图去找到对方的闪光点,因为他以后可能就是你的同事或者领导,所以,面试官问你有什么问题的时候,不要说没有了,要去试图了解他的工作内容、了解这个团队的氛围。

找工作无非就是看三点:和什么人、做什么事、给多少钱,要给这三者在自己的心里划分一个比例。

面试技巧

然后除了上面的面试题,我还有些其他东西希望能够分享给大家,不仅仅是简单的面经,包括:

  1. 锁定目标
  2. 关于简历
  3. 邀约渠道
  4. 面试方法论
  5. 挑选 Offer
  6. 面试挂掉如何调整心态

锁定目标

一个最重要的问题:

你想找一家什么样的公司?

你需要知道你的目标是什么,是 WLB(Work Life Balance),成长,还是赚钱?

类型名称 描述 该类型的公司
WLB 型 WLB = Work Life Balance,即工作生活平衡,955的这种公司 常见于外企,国内互联网公司也有一些,可参考 Github/955.WLB。部分互联网大厂的成熟事业部(比如百度的搜索事业部)也比较 WLB
跟随成长型 工作强度可能不轻松。但是可以跟随公司快速成长,在公司内能学到很多 互联网大厂基本都满足这个要求,阿里我觉得是做的最好的。某些技术驱动的小公司也可
钱多型 钱给的很多 多为业务爬升期的公司(拼多多、字节),或在风口创业公司(作业帮、跟谁学)

据我所见很少有哪家公司同时满足上边 3 个特点,大多企业满足 2 个就已经非常不错了

你需要知道上边 3 点哪个对你最重要,排个序,然后根据这些特点来初步锁定你的目标公司

其中我要单独说下外企和阿里:

  • 外企:外企对于英文是有硬性要求的,起码你得需要做个英文自我介绍,简单的口语要能说
  • 阿里:我面了10面阿里,阿里人给我感觉都很聪明,因此我觉得加入阿里就可以变成这种聪明人(或者是说不聪明的都被公司输出到社会了?)。所以在“跟随成长型”公司里面点名表扬了一下

关于简历

简历真有那么重要吗?

网上有太多太多关于简历的文章了,这里我不想赘述如何写简历。我反而想 diss 一下:

简历真有那么重要吗?

我发现其实好像没那么重要,因为面试官根本不怎么看你的简历。这是我观察到的一个非常有趣的小细节

为什么这么说呢?事情是这样的

我的简历里面第一页里有一个非常漂亮的时间轴,是我用 Short Night 画的。这是一个我的开源项目,它在简历里大概这样:

因此,我当然会在面试中的开场自我介绍里面提上一嘴,然后 70% 的面试官都会有如下反应:

我:blablabla…不知道您有没有看到我简历第一页里面的那个时间轴,这个是我一个叫做 Short Night 的开源项目画的,它有诸多优点blablabla… (面试官突然面无表情盯着屏幕) (过了30s,面试官缓缓看向左下角,我简历里时间轴的位置) (点点头)

这说明什么?说明面试官根本就没怎么看过我的简历!

简历的作用和注意事项

当然,diss 归 diss,简历还是很重要的。下面是简历的一些重要作用

直接通过面试

有些面试官会仔细阅读你的简历,然后在你面试前,你其实就已经凭借你优秀的简历面试通过了。或是免掉写题,免掉技术问题,直接简单聊一聊项目和做事风格,也都是有可能的

我曾经面的一家公司,整场下来没有写题,也几乎没有技术问题。所以在我最后一面的回问环节的时候,我问到:

我:为什么我整场下来都没有写代码?这种面试风格会不会导致面进来一些很会扯皮但是不会写代码的人来?面试官:哦是这样的,我们已经看了你的简历和开源项目,觉得没必要再面技术相关的了,因此就是简单和你聊聊天,看看你人怎么样

HR和猎头非常注重简历

HR和猎头(后面会单独讲这个角色)会非常看重简历。糟糕的简历可能会导致你连面的机会都没有

如果你本身是大厂员工,HR和猎头基本上不会拒绝你。但是如果你不是在一座明星大厂,那么还是好好写简历吧

注意!简历可能会成为你的题纲

基本上所有的面试官都会和候选人聊项目,而聊得项目来源无非有2个:

  • 从你开场的自我介绍中挑
  • 从你的简历里挑

不仅仅是项目,如果你在简历里面写一些技术关键字,那么面试官也会倾向于考察你这些知识点

比如简历里写个“Git”,那么遇到 Git 很熟的面试官看到了可能就会问“git rebase 和 merge 有啥区别”,要是答不上来就尴尬了。因此:

自己不熟或是不重要的东西最好别往简历上写!

面试方法论

一般来说面试无非包含下边几个内容:

  • 写题
  • 技术问答
  • 聊项目
  • 聊人生

面试的核心思想

我理解面试是挖掘候选人优点的过程。因此建议,如果自己某方面不行就大胆承认,然后引导面试官朝自己擅长的地方引导。

总之,术业有专攻,及时止损,想办法帮助面试官挖掘自己的闪光点才是最重要的。其中一个比较好的方法是——留伏笔,比如:

  • 这个项目曾经做了许多非常亮眼的性能优化,希望后边可以聊一聊
  • 我写了很多NDK相关的东西,对NDK非常熟

当然,面试官可能会不理你的伏笔,那么怎么办呢?

——多留几个

写题

这个其实是最简单的,没太多的额外发挥空间。不同公司要求的算法不太一样,按照 LeetCode 的标准大概可以分成:

级别 标准 外企大厂(微软谷歌等) 外企小厂 字节跳动 国内大厂或独角兽
T0 30分内做出Hard ✔️ ✔️ ✔️ ✔️
T1 20分内做出Medium ✔️ ✔️ ✔️
T2 10分内做出Easy ✔️

你可以登陆 leetcode.com 去做几道题,算好时间,看看自己的算法水平在什么程度

如果你打算面外企,最好去英文版的 Leetcode,并将理解题目的时间也算作总耗时中

这里有个小技巧。如果你是和我一样的那种“面试时特别特别紧张,写题完全调不通”的人,最好在写题前就和面试官说好,写完大致思路后不要浪费时间调代码。当然,这个显然是一个扣分项,如果你不紧张,最好还是调通比较好

技术问答

回答问题时,尽可能的多秀肌肉

比如问你四大组件,你一方面要精准的回答上来,另一方面要再掰扯掰扯时间循环的各个阶段,规范定义。

总之,如果正确答上来10个题,你可能得100分。但是如果你答上来并说透10个题,你可能就得了1000分。如果你的回答完全超出了面试官的储备边界,那么面试官基本上会迅速终止技术问答阶段,并给你个满分

聊项目

以阿里为代表的这种很虚的公司(非贬义,指更看重软实力)特别喜欢聊项目,我面了阿里10面,就做了一道题和三道技术问答

下面我详细介绍下如何聊项目

  • 从自我介绍中聊项目

聊项目从你开场的自我介绍就开始了。你要在自我介绍中,挑选出1-2个最具有代表性的项目来简单介绍,并留好伏笔

下面是开场自我介绍中,介绍项目的一个大纲:

  1. 一句话解释项目和你是干什么的

  2. 说几条你的职责,最好说个2-4条。

  • 为项目制定准入标注
  • 建立报警监控为稳定性负责
  • 带了多少人
  1. 留个伏笔,引导面试官追问,比如:
  • 这个项目曾经做了许多非常亮眼的性能优化,希望后边可以聊一聊

  • 这个项目关于第三方代码XXXXX是我制定的,还挺有意思,希望后边可以聊一聊

  • 预先对项目进行整理

你需要对于自己的项目预先整理一份脑图

这点非常重要。面试过程中光是组织言语就已经很废脑子了,如果还需要回忆几年前的项目并整理思路,那简直是噩梦。因此,预先整理你项目的大纲是一个非常重要的点。

这样可以大致保证,面试官问到任何有关上面项目的问题,我都可以迅速定位到某一个模块,然后有条不紊的解释。

其实这个精细程度还是不太够的。上图只是我的个人开源项目之一,并非是我的关键项目。我的关键项目整理的要更为复杂,内容更为多一些

聊人生

展现人格魅力的时候到了,这里你只需要将自己最好的一面展示给面试官即可

有一个需要提前准备的点,那么就是:

  • 你的职业规划是什么,此职业规划能否与公司协同更赢?

我不建议大家为了通过面试而说假话,这样对双方都不好。但是实在是有些面试官很极端,那么你也可以顺着对方说,拿下 Offer 作为你后续的谈资。比如:

  • WLB型公司:我喜欢技术,我希望有业余时间可以钻研写感兴趣的技术

  • 共同成长型公司:我自驱力没那么强,希望可以跟随公司一起成长

  • 钱多型:我希望努力一把实现财富自由

建议大家先说真话,这样可以找到适合自己的岗位,同时你认可的事情也可以被公司所认可。但是如果你说真话后,面试官反应强烈,那么可以尝试顺着面试官说,来想办法拿下 Offer。

挑选 Offer

如果已经拿到了很多 Offer,那么如何挑选它们呢?我认为除了各种待遇和物理条件,还有如下几点需要特别注意:

  • WLB 型、跟随成长型、钱多型,到底喜欢哪一个
  • Team Leader 人怎么样

我非常非常建议你拿到 Offer 后,和HR要求再和未来的【直接汇报人】聊一聊。请他介绍下现在业务情况、未来规划、用人和晋升评定原则等等。最好在实地碰一下,让他带你参观参观公司环境

毕竟接下来几年时间里,你的工作都需要向他汇报,现在是你们关系最轻松最容易了解彼此的时刻

如果面试挂掉如何调整心态

面试挂掉有这么几种可能:

  1. 对方发现你不适合他们:比如对方想招一个带团队的,而你是做技术。遇到这种情况不要沮丧,这不是你的问题。我因为这个拒面的占50%(包括对方拒绝我,和我拒面对方)

  2. Head Count 有限,他们选择了其他的人:遇到这种情况也不要沮丧,毕竟人外有人,而他们 Head Count 可能只有一个。如果你面试前能够和HR或工程师直接接触,也可以问问他们有多少 Head Count

  3. 真的是凭实力挂掉了:这个确实可以稍晚沮丧下,然后痛定思痛,反思反思自己是不是哪里需要查漏补缺,或是表达方法哪里有什么问题。这也是这篇文章诞生的契机

面试复习路线参考

目前我们要做的就是选好自己细分领域深入研究,对基础原理性内容深入理解,尽快向高级水平靠近并达到。当然也要了解新技术,拥有开放的心态去学习一些新技术,不要一开始出来一个新技术就转入学习,这样会导致啥都会一点啥都不会,当然新技术是有一个发展过程的,不会立马流行和大量应用等它稍微成熟点。

多余的话就不讲了,接下来将分享面试的一个复习路线,如果你也在准备面试但是不知道怎么高效复习,可以参考一下我的复习路线,有任何问题也欢迎一起互相交流,加油吧!

首先是超级详细得不能再详细的Android开发学习思维导图,因为图片实在是太大了,所以我就只把二级目录的内容放出来,更加详细的你们可以主页扫微信二维码获取

接下来就需要梳理知识,提升储备了!(Android移动架构师七大专题学习资源)

  • 架构师筑基必备技能:深入Java泛型+注解深入浅出+并发编程+数据传输与序列化+Java虚拟机原理+反射与类加载+动态代理+高效IO

  • Android高级UI与FrameWork源码:高级UI晋升+Framework内核解析+Android组件内核+数据持久化

  • 360°全方面性能调优:设计思想与代码质量优化+程序性能优化+开发效率优化

  • 解读开源框架设计思想:热修复设计+插件化框架解读+组件化框架设计+图片加载框架+网络访问框架设计+RXJava响应式编程框架设计+IOC架构设计+Android架构组件Jetpack

  • NDK模块开发:NDK基础知识体系+底层图片处理+音视频开发

  • 微信小程序:小程序介绍+UI开发+API操作+微信对接

  • Hybrid 开发与Flutter:Html5项目实战+Flutter进阶

知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结。

然后再是通过源码来系统性地学习

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。

真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。

刷大厂面试题备战,增加大厂通过率

历时半年,整理了这份市面上最全面的安卓面试题解析大全。

1.可以通过目录索引直接翻看需要的知识点,查漏补缺。
2.五角星数表示面试问到的频率,代表重要推荐指数

以上内容均免费分享给大家,需要完整版的朋友,点这里可以看到全部内容。或者关注主页扫描加 微信 获取。

最后还有耗时一年多整理的一系列Android学习资源:Android源码解析、Android第三方库源码笔记、Android进阶架构师七大专题学习、历年BAT面试题解析包、Android大佬学习笔记等等,这些内容均免费分享给大家,需要完整版的朋友,点这里可以看到全部内容

你会发现这篇文章并不是“在想方设法通过种种手段帮助你获得 Offer”,而是在“帮助你如何找到一份好工作”。我只是想分享如何选择、如何更好的展现真实的自己、以及碰到极端情况如何处理。

祝你能找到一份适合自己的好工作~!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章