我在两个月内一共面试了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收到
…
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事件传递分发机制?
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.使用过什么图片加载库?
…
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、有什么心得
主要结合自己项目回答。切记不要自己给自己挖坑,比如没有做过这方面优化,你为了表现自己,说做过,结果面试官往下问回答不出来,这关乎诚信问题,你们懂的~
面试总结:
我一直觉得技术面试不是考试,考前背背题,发给你一张考卷,答完交卷等通知。
首先,技术面试是一个 认识自己 的过程,知道自己和外面世界的差距。
更重要的是,技术面试是一个双向了解的过程,要让对方发现你的闪光点,同时也要 试图去找到对方的闪光点,因为他以后可能就是你的同事或者领导,所以,面试官问你有什么问题的时候,不要说没有了,要去试图了解他的工作内容、了解这个团队的氛围。
找工作无非就是看三点:和什么人、做什么事、给多少钱,要给这三者在自己的心里划分一个比例。
面试技巧然后出了上面的面试题,我还有些其他东西希望能够分享给大家,不仅仅是简单的面经,包括:
一个最重要的问题:
你想找一家什么样的公司?
你需要知道你的目标是什么,是 WLB(Work Life Balance),成长,还是赚钱?
类型名称 | 描述 | 该类型的公司 |
WLB 型 | WLB = Work Life Balance,即工作生活平衡,955的这种公司 | 常见于外企,国内互联网公司也有一些,可参考 Github/955.WLB。部分互联网大厂的成熟事业部(比如百度的搜索事业部)也比较 WLB |
跟随成长型 | 工作强度可能不轻松。但是可以跟随公司快速成长,在公司内能学到很多 | 互联网大厂基本都满足这个要求,阿里我觉得是做的最好的。某些技术驱动的小公司也可 |
钱多型 | 钱给的很多 | 多为业务爬升期的公司(拼多多、字节),或在风口创业公司(作业帮、跟谁学) |
据我所见很少有哪家公司同时满足上边 3 个特点,大多企业满足 2 个就已经非常不错了
你需要知道上边 3 点哪个对你最重要,排个序,然后根据这些特点来初步锁定你的目标公司
其中我要单独说下外企和阿里:
简历真有那么重要吗?
网上有太多太多关于简历的文章了,这里我不想赘述如何写简历。我反而想 diss 一下:
简历真有那么重要吗?
我发现其实好像没那么重要,因为面试官根本不怎么看你的简历。这是我观察到的一个非常有趣的小细节
为什么这么说呢?事情是这样的
我的简历里面第一页里有一个非常漂亮的时间轴,是我用 Short Night 画的。这是一个我的开源项目,它在简历里大概这样:
因此,我当然会在面试中的开场自我介绍里面提上一嘴,然后 70% 的面试官都会有如下反应:
我:blablabla…不知道您有没有看到我简历第一页里面的那个时间轴,这个是我一个叫做 Short Night 的开源项目画的,它有诸多优点blablabla… (面试官突然面无表情盯着屏幕) (过了30s,面试官缓缓看向左下角,我简历里时间轴的位置) (点点头)
这说明什么?说明面试官根本就没怎么看过我的简历!
简历的作用和注意事项当然,diss 归 diss,简历还是很重要的。下面是简历的一些重要作用
直接通过面试
有些面试官会仔细阅读你的简历,然后在你面试前,你其实就已经凭借你优秀的简历面试通过了。或是免掉写题,免掉技术问题,直接简单聊一聊项目和做事风格,也都是有可能的
我曾经面的一家公司,整场下来没有写题,也几乎没有技术问题。所以在我最后一面的回问环节的时候,我问到:
我:为什么我整场下来都没有写代码?这种面试风格会不会导致面进来一些很会扯皮但是不会写代码的人来?面试官:哦是这样的,我们已经看了你的简历和开源项目,觉得没必要再面技术相关的了,因此就是简单和你聊聊天,看看你人怎么样
HR和猎头非常注重简历
HR和猎头(后面会单独讲这个角色)会非常看重简历。糟糕的简历可能会导致你连面的机会都没有
如果你本身是大厂员工,HR和猎头基本上不会拒绝你。但是如果你不是在一座明星大厂,那么还是好好写简历吧
注意!简历可能会成为你的题纲
基本上所有的面试官都会和候选人聊项目,而聊得项目来源无非有2个:
不仅仅是项目,如果你在简历里面写一些技术关键字,那么面试官也会倾向于考察你这些知识点
比如简历里写个“Git”,那么遇到 Git 很熟的面试官看到了可能就会问“git rebase 和 merge 有啥区别”,要是答不上来就尴尬了。因此:
自己不熟或是不重要的东西最好别往简历上写!
面试方法论一般来说面试无非包含下边几个内容:
我理解面试是挖掘候选人优点的过程。因此建议,如果自己某方面不行就大胆承认,然后引导面试官朝自己擅长的地方引导。
总之,术业有专攻,及时止损,想办法帮助面试官挖掘自己的闪光点才是最重要的。其中一个比较好的方法是——留伏笔,比如:
当然,面试官可能会不理你的伏笔,那么怎么办呢?
——多留几个
写题这个其实是最简单的,没太多的额外发挥空间。不同公司要求的算法不太一样,按照 LeetCode 的标准大概可以分成:
级别 | 标准 | 外企大厂(微软谷歌等) | 外企小厂 | 字节跳动 | 国内大厂或独角兽 |
T0 | 30分内做出Hard | ✔️ | ✔️ | ✔️ | ✔️ |
T1 | 20分内做出Medium | ❌ | ✔️ | ✔️ | ✔️ |
T2 | 10分内做出Easy | ❌ | ❌ | ❌ | ✔️ |
你可以登陆 leetcode.com 去做几道题,算好时间,看看自己的算法水平在什么程度
如果你打算面外企,最好去英文版的 Leetcode,并将理解题目的时间也算作总耗时中
这里有个小技巧。如果你是和我一样的那种“面试时特别特别紧张,写题完全调不通”的人,最好在写题前就和面试官说好,写完大致思路后不要浪费时间调代码。当然,这个显然是一个扣分项,如果你不紧张,最好还是调通比较好
技术问答回答问题时,尽可能的多秀肌肉
比如问你四大组件,你一方面要精准的回答上来,另一方面要再掰扯掰扯时间循环的各个阶段,规范定义。
总之,如果正确答上来10个题,你可能得100分。但是如果你答上来并说透10个题,你可能就得了1000分。如果你的回答完全超出了面试官的储备边界,那么面试官基本上会迅速终止技术问答阶段,并给你个满分
聊项目以阿里为代表的这种很虚的公司(非贬义,指更看重软实力)特别喜欢聊项目,我面了阿里10面,就做了一道题和三道技术问答
下面我详细介绍下如何聊项目
聊项目从你开场的自我介绍就开始了。你要在自我介绍中,挑选出1-2个最具有代表性的项目来简单介绍,并留好伏笔
下面是开场自我介绍中,介绍项目的一个大纲:
你需要对于自己的项目预先整理一份脑图
这点非常重要。面试过程中光是组织言语就已经很废脑子了,如果还需要回忆几年前的项目并整理思路,那简直是噩梦。因此,预先整理你项目的大纲是一个非常重要的点。
这样可以大致保证,面试官问到任何有关上面项目的问题,我都可以迅速定位到某一个模块,然后有条不紊的解释。
其实这个精细程度还是不太够的。上图只是我的个人开源项目之一,并非是我的关键项目。我的关键项目整理的要更为复杂,内容更为多一些
聊人生展现人格魅力的时候到了,这里你只需要将自己最好的一面展示给面试官即可
有一个需要提前准备的点,那么就是:
我不建议大家为了通过面试而说假话,这样对双方都不好。但是实在是有些面试官很极端,那么你也可以顺着对方说,拿下 Offer 作为你后续的谈资。比如:
建议大家先说真话,这样可以找到适合自己的岗位,同时你认可的事情也可以被公司所认可。但是如果你说真话后,面试官反应强烈,那么可以尝试顺着面试官说,来想办法拿下 Offer。
挑选 Offer如果已经拿到了很多 Offer,那么如何挑选它们呢?我认为除了各种待遇和物理条件,还有如下几点需要特别注意:
我非常非常建议你拿到 Offer 后,和HR要求再和未来的【直接汇报人】聊一聊。请他介绍下现在业务情况、未来规划、用人和晋升评定原则等等。最好在实地碰一下,让他带你参观参观公司环境
毕竟接下来几年时间里,你的工作都需要向他汇报,现在是你们关系最轻松最容易了解彼此的时刻
如果面试挂掉如何调整心态面试挂掉有这么几种可能:
目前我们要做的就是选好自己细分领域深入研究,对基础原理性内容深入理解,尽快向高级水平靠近并达到。当然也要了解新技术,拥有开放的心态去学习一些新技术,不要一开始出来一个新技术就转入学习,这样会导致啥都会一点啥都不会,当然新技术是有一个发展过程的,不会立马流行和大量应用等它稍微成熟点。
多余的话就不讲了,接下来将分享面试的一个复习路线,如果你也在准备面试但是不知道怎么高效复习,可以参考一下我的复习路线,有任何问题也欢迎一起互相交流,加油吧!
首先是超级详细得不能再详细的Android开发学习思维导图,因为图片实在是太大了,所以我就只把二级目录的内容放出来,更加详细的你们可以主页扫微信二维码获取。
接下来就需要梳理知识,提升储备了!(Android移动架构师七大专题学习资源)
知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结。
然后再是通过源码来系统性地学习
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
《486页超全面Android开发相关源码精编解析》
刷大厂面试题备战,增加大厂通过率
历时半年,整理了这份市面上最全面的安卓面试题解析大全。
1.可以通过目录索引直接翻看需要的知识点,查漏补缺。
2.五角星数表示面试问到的频率,代表重要推荐指数
《379页Android开发面试宝典》
以上内容均免费分享给大家,需要完整版的朋友,直接转发 点赞 私信回复【资料】一键领取!!!
最后还有耗时一年多整理的一系列Android学习资源:Android源码解析、Android第三方库源码笔记、Android进阶架构师七大专题学习、历年BAT面试题解析包、Android大佬学习笔记等等,这些内容均免费分享给大家,需要完整版的朋友,点这里可以看到全部内容。
你会发现这篇文章并不是“在想方设法通过种种手段帮助你获得 Offer”,而是在“帮助你如何找到一份好工作”。我只是想分享如何选择、如何更好的展现真实的自己、以及碰到极端情况如何处理。
祝你能找到一份适合自己的好工作~!
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved