当时高中毕业后执意要学电脑,不远千里来到帝都某鸟培训,那时候身边的朋友包装学历,包装经验,甚至老师说去面试的时候不要说你在培训机构待过
很多的时候,我是一个一直认为英雄不问出处的人,但是我忽略了当今社会的大背景,我认为只要有技术,好学,没有学历一样可以,但是我还是忽略了社会的大背景
很多时候,我一直都在考虑我和大学生的差距,然后闲的时候就去学习一些数据结构和算法,只是为了尽量弥补差距,我是一个有信仰的人,所以到现在还是真实的身份面试(虽然机会很少很少),且行且珍惜吧,没有什么可抱怨的,不都是自己的选择吗
面试分享 腾讯互娱 一面:-
kotlin语法,函数为何设计为一等公民,协程
-
泛型,为何要擦除?好处是什么?坏处呢?kotlin的泛型呢?泛型如何不擦除?
-
jvm、dalvik、art介绍下,解决了什么问题?
-
UI优化,UI渲染原理。哪些是CPU做的,哪些是GPU做的?
-
为何掉帧?原理,怎么解决
-
卡顿,原理,如何解决。
-
如何量化UI优化的数据?
-
TCP/UDP。三次握手、四次挥手的必要性。
-
https的安全性如何保证的。
-
jetpack
-
项目
-
IM如何实现:长链接如何实现?乱序问题,丢失问题如何解决?
-
项目
-
说一个你遇到的最难的问题
-
算法题:无重复字符的最长子串
-
项目
-
性能优化,举例
-
架构,好的架构如何设计
-
kotlin
-
sdk如何设计
-
引入sdk时有哪些指标要考量?
-
包体积优化
-
算法题:101. 对称二叉树
-
对话框治理方案
-
网络:http演进过程:1.0 --> 1.1 --> 2.0。https:加密过程
-
锁:常见使用,分类,死锁
-
线程池核心参数
-
binder:内存copy几次。mmap几次映射
-
activity中,new Handler(),如果内存泄漏了,分析它的GCRoots引用链。
-
事件分发:从手接触开始,一个完整的流程。
-
SharedPreference存在哪些问题?
-
Glide:如何管理生命周期?Cache?如果一张下载一张大图,有两个尺寸不同的View去加载,在内存中几份缓存?
-
View#onClickListener中,sleep(100s),会不会anr?
-
三个线程依次打印,有哪些方式?
-
用两个栈实现队列。
-
你的Kotlin能力如何?
-
你的架构设计能力如何?
-
设计模式:装饰者和适配器模式的异同
-
平时看哪些架构设计方面的书?
-
Intent你如何理解?
-
跨进程传递数据,为何要序列化?
-
启动一个Activity,为何要设计成跨进程的方式?app自己做不行么?
-
下载一个几百M的大文件,如何校验文件正确性?如何修复?
-
HashMap的数据结构,如何保证快速查找,容量为何要设计为2的n次方这样?对扩容有没有影响?
-
ArrayMap 和 SparseArray
-
ConcurrentHashMap
-
HashTable,为何废弃
-
多线程存在哪些问题?
-
synchorized实现
-
juc包下的lock如何实现的?有了synchronized,为何还要有这个?
cas的原理
-
AtomicInteger如何保证原子操作
-
CAS如何保证原子操作
-
volatile的特性。拿一个特性举例说明
-
Java为何设计出可见性这个问题
-
View#request之后,流程是怎样的
-
事件分发:View设置了一个onClickListener,那么它的onTouchEvent中,DOWN的时间,返回的是true还是false?为何?
如果一个View没有消费DOWN事件,那么MOVE和UP事件还会不会给它?
CANCEL事件是如何触发的?
-
滑动冲突解决过么?举例说明
-
getMeasuredWidth和getWidth有什么区别?什么时候会有不同?如何让getWidth的值跟getMeasuredWidth不同?
-
activity#onResume中,View展示出来了?原理
-
通过view#post获取view宽高,可以获取到么?原理
-
如何把消息交给子线程的Handler执行?
-
new一个Thread,在run方法里面写三行代码:
Loop.prepare;
Loop.loop;
输出一行log。
问,这行log会不会执行。
- RecyclerView:
Adapter#notifyDataChanged和Adapter#notifyDataRange方法有何区别?加载下一页数据时,我调用哪个合适?在onBindViewHolder方法中,view#getParent有值么?ViewHolder#recycler方法,何时会被调用?stableId了解过么?如果设置了它,页面内的ViewHolder会走onCreateViewHolder和onBindViewHolder方法么?此时这些ViewHolder是放在哪个缓存里的?
饿了么 一面:-
项目经验
-
图片压缩。RGB565,为何不是556呢?
-
python脚本。
-
dumpsys脚本
-
包体积优化:python脚本。
-
枚举类替换是否有必要?
-
性能优化:布局性能优化。首页刷新优化。
-
Activity启动流程。
-
谁根据Intent中的信息去查找对应的进程呢?去查找对应的Activity呢?PKMS。
-
PKMS和AMS都是SystemServer启动起来的,它两在同一个进程里面。
app的最近打开过的应用,知道谁做的么?关机开机后依旧保存,如何保存到磁盘的?谁做的?
- 算法题:143.重排链表
-
地理位置相关的,你了解多少?
-
对比前两家公司,地图特殊的方面,你做过什么
-
你在上家公司,成长阶段分为几部分?里程碑的节点有哪些?
-
最近看了哪些书
-
算法题:
数组中的第K个最大元素
字节跳动 一面:-
合规排查,sdk如果调用了HttpURLConnection这种方式,你如何排查?
-
假设三天之内完成,但是sdk三天改不完,你如何sdk处理?
-
SDK如果直接调用系统API呢?
-
如何具备经济擦屁股的能力?
-
ASM能hook第三方sdk里面的类么?第三方的jar包呢?
-
python扫描文件,跟IDE里面全局搜索,有区别么?
-
如何解决还没有暴露的合规问题?比如某天规则增加了?线上如何做?如何减少调整?你有没有比较好的解决方案?
-
webview:WebView里面,js调用native方法,它底层的原理是什么?为什么js能调用到Java的方法?webkit提供了这个功能,那它是怎么实现的?js调用native的方法时,是同步的还是异步的?java方法return一个值,js那边能立即拿到么?通过js调用一个java方法,这个java方法都是@onJavaInterface注解过的,这个方法是运行在哪个线程?
-
AB实验:分组,有没有需要注意的,或者关键点?怎么做到尽可能随机?
如果N个实验在并行,实验跟实验之间,怎么去防止相互干扰?行为之间会有相互影响。样本隔离开的话就会有问题,多个实验都想要大量数据,如何设计?如何统计实验的指标?如何确认两个指标的关联关系?SQL层面如何实现?
-
网络请求:https请求如何保证安全性?Charles能抓https请求么?能抓的话那安全性在哪?app如何防止代理抓包?
-
UI性能优化,加载绘制等,有哪些方面可以做的?
-
Java中静态方法,能不能被子类重写?编译会报错么?
-
匿名内部类能不能访问外部类的私有方法?匿名内部类编译后也是独立的外部类,它为何能访问外部类的私有方法?如果能访问,是不是破坏了java的语义?怎么做到的?
-
算法题,多线程顺序打印ABC。
-
图片压缩
-
自定义路由方案
-
注解处理器
-
运行时注解和编译期注解的例子
-
项目的产品指标
-
View绘制
-
ChoreoGrapher中Callback的类型
-
同步消息、异步消息、消息屏障
-
RenderThread了解么
-
包体积优化:access优化、R文件、arsc文件优化
-
埋点方案设计
-
jetpack用过么
-
GCRoots分析
-
如何监控页面卡顿?ChoreoGrapher方案呢?
-
mvi了解么?
-
kotlin了解么
-
算法:反转链表,用递归
本文中面试的相关问题 , 发现确实很多知识点都是只知其然不知所以然 , 只停留在会用的层面 , 虽然在短期内停留在’会用’不影响实现业务功能 ,但从长期来看 ,是不利于发展的 ,尤其是现在IT行业总体趋势 竞争是比较大的
要怎么样去系统的补落下的基础 , 如果只是去补你现在所提到的面试题从而去扩展 , 感觉有点亡羊补牢 , 不是特别的全面(虽然现在也一直是根据你提到面试题 , 去补基础和根据自己的理解去总结知识点)
所以我向大家自荐一套 《完整的Android学习资料,以及一些视频课讲解》
现在私信发送 “面试” 或 “进阶” 即可 免费获取
最后我想说:
对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们
技术是无止境的,你需要对自己提交的每一行代码、使用的每一个工具负责,不断挖掘其底层原理,才能使自己的技术升华到更高的层面
Android 架构师之路还很漫长,与君共勉