就在前几天6月28日,询问 hr 后,字节三面没有通过,我的找实习之路也结束了,从3月1日开始投递简历到6月28日,算算日子正好 120 天,我也终于结束这被焦虑的支配的时光,这一路走下来,我也就剩下这篇面试面经了,记录着我的心酸泪啊...
面试这个四个月,真的是担惊受怕、坐立不安、上蹿下跳的,睡睡觉突然就醒了,想到面试官当时想问的是啥了,然后就开始辗转反侧、彻夜难眠...
三月一号,最开始在 BOSS 上投简历,发消息,已读,没人回复,开始修改话术,发链接,有几两家开始收我的简历,过了五六天然后收到了一个电话面吧,当时内心好的难受,开始自我质疑,我是那不行那,这不行,这也不行,那好像也不行,哪哪都不行。面试机会都没有,因为这个事,我室友找我出去吃烧烤,我主动喝了七瓶啤酒,回去哇哇吐,虽然我是东北人,但我真的不爱喝酒,出去都躲酒的那种。过了几天收到第一个视频面试腾讯会议,半个多小时吧,问点问题写写代码,3月25日收到了自己第一个 offer,心情稍微高涨一点。
四月一号,做了携程的笔试,然后面试,二面结束,越复盘越心痛,这一段蓝桥杯和PTA备赛,本来就头疼,面试又挂了,直接裂开,因为很多大公司校招都开启了,我都投了,大多初筛都没过,就携程一个到面试环节,结果我还完犊子的给挂了,又崩了,我室友叫我吃饭又喝,这啥酒啊,一瓶喝的我直迷糊,喝完酒睡一觉,精神也好一点了,继续备赛吧,过了一段时间逛逛牛客,有同学和我差不多时间面试状态变到 hr 了,我也不死心去查查,我也变成 hr 面试中了,突然好开心,结果人家过几天 OC 了,我被扔进人才池了。
到五一了,比赛结束了,不行我还得找工作啊,五一那五天假不知道投了多少份简历,假期一结束一堆面试邀约,竟然还有几个做岗前培训的,啥嘛,好未来在实习僧上投递也通过了,我在官网内推好几次都没过,奇安信BOSS投的也过了,结果奇安信招的应届生,好未来问我学历问题,我说要专生本,面试反馈三年后正式录用有风险不建议录用,当然计算机基础有待加强。我当时人都傻,一天两家都没了,CVTE 笔试也过了,开始约面试,这公司流程好慢,滴滴(实习僧)和图森未来(脉脉),图森算法没答对,技术栈不匹配,一面都没通过,滴滴是我第一个知名互联网offer吧也是唯一一个,过了几天好未来另一个部门约面试,hr和我说面试通过了,等 offer 吧,然后就没信了,CVTE hr面也凉了
六月了,在牛客网看到百度招聘就直接发的邮箱,回复他们部门招满了,把我推给别的部门,晚上 hr 约面试,我参加蓝桥杯就是为了这个企业绿色就业通道里面有百度,想要面试机会,这国赛还没比机会就来了,好开心,结果面试结束了,戏剧性的一幕又来了,面试刚结束没几分钟,面试官问我愿不愿意以另一种方式加入他们,这正式就变外包了,我简历不仅没藏学历,还单独列个教育经历还写在简历最上方,就怕出现这种事,结果还是出现了,第二天字节这边内推通过了,BOSS 上投递的简历,牛客网上看到内推人的微信,加了询问进度,挂了,内推人打电话简单询问简历情况,又捞了我一下,才有这个面试机会,感觉字节面试的压力和难度确实要比别的公司大很多,没想到三面能通过,毕竟那个异步调度器写那么久还没写对,学历问题 offer 批不下来,不过 hr 说在群里推荐了一下,我就又被别的部门捞起,这个部门一二面都一个多小时,面完心都哇凉哇凉的,根本没想到能过,到三面,感觉没问我什么,挂掉了,我水平太差了,面试官对我不感兴趣吧,这次挂掉,说实话不心痛,反而很释怀,面试吗毕竟还是一个双向选择的过程。
虽然这一路挺艰辛,也不知道自己下一步是迈向哪里,但是在心态和技术上让我成长了很多,回头看来我还算是挺幸运的吧。
有些问题忘记了,记忆中就只有这些内容
DialogFragment
内存泄漏的定位过程Leakcanary
的原理
Handler
介绍一下Handler
内存泄漏说一下
- 首页下拉刷新是怎么做的?(说了滑动冲突的处理)
view
事件分发机制怎样- 事件好几层,怎么知道是由哪个控件处理(说了根据触摸的位置啥的,不太了解对不对)
- 提到了责任链,内部链怎么分发的
- 怎么判断哪个
view
处理(根据return true/ false
)- 我们的事件有
action_move,action_down,action_cancel
,所有的事件都是一层一层往下分发吗(说了不一定,down
被拦截了,后续就收不到其他的事件了,然后提到了action_cancel
的机制)- 我听到你首页用了
recyclerView
,那他一般怎么用?- 提到了
adapter
adapter
用来干嘛?adapter
中有哪些是主要方法(说了bindView
,这块不太记得了,说项目中用到的是BRVAH
)- 提到了
ListView
- 为什么用
Rv
不用Lv
(说了1.强制实现viewHolder
(避免findViewById
) 2.缓存机制)Lv
二级缓存怎么判断这个View
是他要的?(答了postion,id
)- 然后问
id
指的是?(这里说忘记了)- 四级缓存是怎么找到
view
他要的?(说了itemType
)- 如果有相同的
itemType
怎么处理?(说了直接使用任意一个)- 如果四级缓存中找不到呢?(说了手动加载)
- 手动加载是哪里来的?(说了从布局
xml
中定义的itemtype
中拿的)xml
怎么关联到Rv
(加载代码inflate
的,不太了解)
tcp
三次握手说一下equals
和 ==
区别hashmap
实现原理(说了基本结构,put
)get
是怎样实现的智力题:
算法:[82. 删除排序链表中的重复元素 II](javascript:void(0);)
自我介绍
架构设计主要是什么
说一下你提到的依赖倒置
除了依赖倒置还有什么重要的原则(刚说完单一职责就被打断)
MVP注意事项(说了内存泄漏的处理)
内存泄漏的原理
怎么判断内存不能被释放
如何检测内存泄漏(说了线下用 LeakCanary
,线上用 Memory profiler
,然后自己扯到 DialogFragment
内存泄漏)
打断,问 final
作用(说了修饰类,方法,变量,作用)
非静态内部类引用外部类对象,需要 final
关键字吗?(说了应该用 static
,转为静态内部类,防止内存泄漏)
多线程使用过吗
说一下线程池的使用(刚说了构造方法实现)
核心线程数什么作用(说了线程池的运行流程)
核心线程数和最大线程数的设置(IO
密集型和 CPU
密集型,最大线程数的话,看系统支持的并发量)
一个进程有多少个线程?(说了空间允许的范围内可以一直开辟)
实际上是多少?(说了 2g
分配的空间)
为什么是2g(说了之前看过,具体原理不太清楚)
一个异步任务都开一个线程,还是多个任务开一个线程,你怎么决定开不开?(说了耗时的话就开,不太耗时不开,因为线程切换调度的话,存在一定的开销)
线程安全怎么保证?
syncronized
内部原理是什么(说了修饰静态方法和非静态方法,代码块)
修饰静态方法和非静态方法,能够并发执行吗?(可以,因为他们锁的对象不一样,说到了死锁)
死锁的原理是什么?
出现死锁怎么排查(这个不太会,说了用 jvm
中的 jstack
)
追问怎么用?(说没用过,只是知道)
问我他的原理是什么?(不太知道,说看 traces.txt
,看堆栈)
怎么安全停止一个线程(说了用 volatile
修饰变量,通过 while
(变量),手动设置 true false
)
volatile
原理是什么?(说了 java
内存模型啥的,修饰特性啥的)
网络了解吗
tcp
优点(可靠性,面向连接)
面向连接是什么?(说了计算机通信前建立连接)
面向连接和非面向连接的本质区别是什么?(乱答,不知道)
拥塞控制原理
http
与 udp
区别(说了层数)
http
请求流程
下面开始聊天了
我说周二就给我反馈了
通过整个面经就会知道,现在互联网校园招聘技术岗位面试所考察的内容是非常的标准化的!
面试流程主要分为三个部分:
要想掌握正确的学习准备方法,最关键的就是要知道面试问的是什么!所有的考试面试其实都有重点可寻的,最忌讳盲目的瞎学准备!
同时这里还要额外说一下,推荐大家去多看面经,并不是让大家只看面经,死记硬背面经,投机取巧。这种只简单被面经的同学面试也是无法通过的。还是要踏踏实实的去多认真学习技术,多看优质的官方技术文档、书籍、博客。
知己知彼,百战百胜。
Android方向
关于Android的发展方向这里我归类了如下几类:
1、应用层开发,不限于各种产品,主要还是Android原生开发,主要是各种性能优化。
2、嵌入式开发,不限于各种开发板子,物联网,智能家居,车联网/车载
3、安全开发,不限于各种反逆向,反汇编,寻找安全漏洞
4、音视频开发,不限于直播、点播、音视频通话、音视频会议,短视频等
5、插件化、组件化、热修复开发,不限于自研和使用开源框架集成开发
6、系统开发(Android),不限于Rom维护和FrameWork层定制需求
7、图形图像开发,不限于OpenGL ES,EGL,GLSurfaceView,滤镜,美颜
8、小程序 / 快应用
目标明确,字节岗位职责:
如果你想去一家不错的公司,但是目前的硬实力又不到,我觉得还是有必要去努力一下的,技术能力的高低能决定你走多远,平台的高低,能决定你的高度。
如果你通过努力成功进入到了心仪的公司,一定不要懈怠放松,职场成长和新技术学习一样,不进则退。
首先,对于没有学习方向,知识不体系的人,我把我工作几年整理的学习路线分享给大家,做一个借鉴作用,还不知道怎么学习的人可以直接照着我这个学习路线一个个的去学习,知识不体系的人可以参考下我整理路线的方式,总之希望能够帮到你们!
模块化学习资源
接下来是每个模块我整理出来的文档学习资料,帮助大家更细致化的学习。
《Android汇总复习资料—Java》
《Android汇总复习资料—Android》
《Android汇总复习资料—Android扩展》
《Android汇总复习资料—Kotlin》
《Android汇总复习资料—Flutter》
《Android汇总复习资料—算法》
除了上面的学习路线,还可以额外的配合以下方式学习,效果翻倍~
①看视频进行系统学习
前几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。
另外,我自己也珍藏了好几套视频,有需要的我也可以分享给你。
②读源码,看实战笔记,学习大神思路
“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。
主要内含微信 MMKV 源码、AsyncTask 源码、Volley 源码、Retrofit源码、OkHttp 源码等等。
③面试前夕,刷题冲刺
面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。
关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:
④2020大厂面试高频知识点