原来面试讲究方法!终于从【小公司一面就挂 (1),实战 android 应用开发百度下载
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、有什么心得
主要结合自己项目回答。切记不要自己给自己挖坑,比如没有做过这方面优化,你为了表现自己,说做过,结果面试官往下问回答不出来,这关乎诚信问题,你们懂的~
面试总结:
我一直觉得技术面试不是考试,考前背背题,发给你一张考卷,答完交卷等通知。
首先,技术面试是一个?认识自己?的过程,知道自己和外面世界的差距。
更重要的是,技术面试是一个双向了解的过程,要让对方发现你的闪光点,同时也要 试图去找到对方的闪光点,因为他以后可能就是你的同事或者领导,所以,面试官问你有什么问题的时候,不要说没有了,要去试图了解他的工作内容、了解这个团队的氛围。
找工作无非就是看三点:和什么人、做什么事、给多少钱,要给这三者在自己的心里划分一个比例。
面试技巧
然后出了上面的面试题,我还有些其他东西希望能够分享给大家,不仅仅是简单的面经,包括:
锁定目标
关于简历
邀约渠道
面试方法论
挑选 Offer
面试挂掉如何调整心态
锁定目标
一个最重要的问题:
你想找一家什么样的公司?
你需要知道你的目标是什么,是 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 个最具有代表性的项目来简单介绍,并留好伏笔
下面是开场自我介绍中,介绍项目的一个大纲:
评论