DialogFragment
内存泄漏的定位过程
Leakcanary
的原理
-
Handler
介绍一下 -
Handler
内存泄漏说一下 -
说一下设计模式
-
手写单例
-
算法:[112. 路径总和](javascript:void(0)😉
技术面二面(时长48分钟)
-
自我介绍
-
介绍一下项目
-
软件大概样式是怎样
-
首页是怎样做的
- 首页下拉刷新是怎么做的?(说了滑动冲突的处理)
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
的,不太了解)
-
堆内存和栈内存区别
-
5层网络协议包括哪些?
-
tcp
三次握手说一下 -
equals
和==
区别 -
hashmap
实现原理(说了基本结构,put
) -
get
是怎样实现的
智力题:
- 5升桶,3升桶,水无限,你给我装出4升水
算法:[82. 删除排序链表中的重复元素 II](javascript:void(0)😉
技术面三面(时长37分钟)
-
自我介绍
-
架构设计主要是什么
-
说一下你提到的依赖倒置
-
除了依赖倒置还有什么重要的原则(刚说完单一职责就被打断)
-
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
请求流程
下面开始聊天了
- 反问
HR 面
-
你是周一面的三面,这几天关于面试你是怎么考虑的?
-
周一面试完,周四周五才给你反馈,有考虑过面试不通过吗
我说周二就给我反馈了
-
面试感受如何?
-
你对面试做了什么准备
-
客户端基础知识方面的话,你是怎么复习和准备的?
-
有做一些刷题吗?
-
字节算法这块,难度怎么样
-
距离毕业还有一年半,你怎么规划这段时间
-
你们是信息安全专业?应该不是计算机专业的同学吧
-
你是什么时候考虑转开发
-
你是大一就打算做开发?还是说进到工作室后,受到师兄的影响才转开发?
-
介绍一下工作室
-
配合方式是怎样的?
-
说一下影响比较深的项目
-
主要是客户端做?还是前端后台都有?
-
这个项目你们老师也是怎样评价的?
-
团队协作有没有遇到比较难推进的时候?
-
你会主动去配合团队吗
-
自己学习或者工作,怎么安排时间?
-
工作的时间占你一天多少时间?
-
任务你是怎么管理
-
你的方法论挺好的,你提到的日程管理软件是哪个?
-
旁边人用哪几个词语评价你
-
你的优点缺点分别是什么?
-
有遇到压力特别大的时候吗?
-
你在学校成绩怎样
-
你对自己的未来的规划
-
什么时候能来?能来多久
-
学校课程怎样
-
反问
面试字节
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
需要做好哪些准备
通过整个面经就会知道,现在互联网校园招聘技术岗位面试所考察的内容是非常的标准化的!
面试流程主要分为三个部分:
-
字节跳动是非常重视应试同学编程能力的考察的,每轮技术面试都会考察2-3道算法题目。
-
然后第一轮面试会着重考察候选者的Android基础知识,java基础,数据库,操作系统,计算机网络等。
-
然后后续面试面试官会围绕着候选者的项目进行提问。
要想掌握正确的学习准备方法,最关键的就是要知道面试问的是什么!所有的考试面试其实都有重点可寻的,最忌讳盲目的瞎学准备!
同时这里还要额外说一下,推荐大家去多看面经,并不是让大家只看面经,死记硬背面经,投机取巧。这种只简单被面经的同学面试也是无法通过的。还是要踏踏实实的去多认真学习技术,多看优质的官方技术文档、书籍、博客。
知己知彼,百战百胜。
Android市场需求短期内提升自己
Android方向
关于Android的发展方向这里我归类了如下几类:
1、应用层开发,不限于各种产品,主要还是Android原生开发,主要是各种性能优化。
2、嵌入式开发,不限于各种开发板子,物联网,智能家居,车联网/车载
3、安全开发,不限于各种反逆向,反汇编,寻找安全漏洞
4、音视频开发,不限于直播、点播、音视频通话、音视频会议,短视频等
5、插件化、组件化、热修复开发,不限于自研和使用开源框架集成开发
6、系统开发(Android),不限于Rom维护和FrameWork层定制需求
7、图形图像开发,不限于OpenGL ES,EGL,GLSurfaceView,滤镜,美颜
8、小程序 / 快应用
按照Android 标准面试问题学习
目标明确,字节岗位职责:
如果你想去一家不错的公司,但是目前的硬实力又不到,我觉得还是有必要去努力一下的,技术能力的高低能决定你走多远,平台的高低,能决定你的高度。
如果你通过努力成功进入到了心仪的公司,一定不要懈怠放松,职场成长和新技术学习一样,不进则退。
如何提升技能
首先,对于没有学习方向,知识不体系的人,我把我工作几年整理的学习路线分享给大家,做一个借鉴作用,还不知道怎么学习的人可以直接照着我这个学习路线一个个的去学习,知识不体系的人可以参考下我整理路线的方式,总之希望能够帮到你们!
模块化学习资源
接下来是每个模块我整理出来的文档学习资料,帮助大家更细致化的学习。
《Android汇总复习资料—Java》