在这里特意恭喜我的一位朋友成功入职网易了,他由原来17*13的薪资涨薪了50%,我去问了他的当时面试的题目,分享给大家。
1.算法题: 123 -> 321超出Integer最大值范围,负数怎么处理
2.hashmap put0底层原理发生冲突时,如何去添加(顺着链表去遍历,挨个比较key值是否一致,如果一致,就覆盖替换,不致遍历结束后,插入该位置)3.Handler内存泄漏与Looper
4.Message为什么没有被回收
5.手写单例模式, volatile作用, 为什么要双重判空,作用是什么,一句话概括
6.为什么要泛型擦除,写-个泛型方法和一个泛型类
7.- -张图片加载到内存,如何计算图片占用内存的大小, ARG8888与ARGB565有什么区别
8.APK打包流程
9.四种引用方式,他们之间的区别,什么时候用到弱引用
总结:
1.算法题最主要的目的是得出结果,不要总是纠结于过去刷过题的思路,特别是当时的思路无法理清时,就应该立马变换一-种思路去解决,哪怕是时间复杂度和空间复杂度都比较高,而不是迟迟卡在那里。
2.将技术点总结成简单的话语, 提炼技术要点
1.线程池线程是如何保持线程不被回收的?在for循环里一直循环 ,循环体内会有take方法阻塞?
2.线程可以多次调用start吗?会出现什么问题?为什么不能多次调用start ?
3.RecyclerView是怎么优化的
4.MVP是如何实现的,他们之间的关系和职责
5.MVM是如何实现的? ViewModel的底层原理
6.热修复框架底层的原理, Tinker ,美团的
7.pid.与uid的区别
答: pid是进程ID , PID是进程的身份标志,系统给每个应用分配独一无二的PID(- 一个应用可能有多个进程,每个进程有唯一-的PID)
进程终止后PID会被系统回收,再次打开应用会重新分配一一个PID。
UID在linux中是用户的ID ,用于权限的管理。在android中 ,由于android是单用户系统,所以uid被用于实现数据共享。
8.你们的项目架构是怎样的?
9.线程I0密集型和CPU密集型区别及线程数的设置
答:CPU密集型任务:在一一个任务中,主要做计算, CPU持续在运行, CPU利用率高,具有该特点的任务称为CPU密集型任务。
I0密集型任务:在一一个任务中,大部分时间在进行I/O操作,由于I/O速度远远小于CPU ,所以任务的大部分时间都在等待IO , CPU利用率低。CPU密集型任务:线程数为CPU核数。几个线程可以并行执行,不存在线程切换开销,提高CPU利用率,减少线程切换性能损耗。
I0密集型任务: 线程数为CPU核数的2倍,在线程进行I/O操作时,其他线程可以继续使用CPU ,提高CPU的使用率。
1.简单自我介绍
2.项目结构,用到了哪些技术?
3.过往经历
4.为什么想换工作?
5.最近看的项目,用的什么技术?
6.北京市2个月摇- -次号, 摇中的概率是3000分之一,请问需要摇多久 ,概率能达到百分之50?
7.拋一枚硬币,正反面的概率各占50% ,请问,连续两次反面的概率是多少?正,正反,反正,反反, 出现的概率各占四分之一。
更多面试题以及答案可以点击文末的卡片,扫码免费领取哦。