目前一共是三面结束,还没收到 hr 面试的邀请。
- 9.2得物一面 30分钟
1. http2.0的改进
2. 绘制view的流程
1. 几个方法
2. measureSpec的作用
3. scrollView、RecyclerView的measureSpec是什么样的
3. 设计模式
1. eventbus用的什么设计模式(寄,不知道)
4. https s是什么,是对称还是非对称
5. handler机制展开说说(这里要加强,要把整个流程说清楚)
6. handler内存泄漏的原因(给问烂了)
7. 如何验证handler是否持有外部类的引用?(面试官给了提示,看class文件)
编程题:
1. 消费者生产者模式,可以不用代码(我用了伪代码,但他好像不理解)
反问:
以为肯定挂了就没反问,回复说你待会儿还有面试吧,我就不问问题了。
- 9.9得物二面 20分钟
问答:10分钟
1. 为什么从实习公司离职?希望找一个什么样的公司或者团队?
2. git了解多少?(merge、rebase的区别,这里没答好,因为公司合并分支统一用merge所以不清楚rebase和merge的区别)
3. 悲观锁和乐观锁有什么区别?volatile关键字有什么作用?Synchronized跟它是什么关系?
4. 锁可以加在类、对象和方法上,不同的加锁方式都应用于哪些场景?
5. Handler了解过吗?主线程执行过程当中如果主线程消息队列数据量太多了这个时候可以采取什么措施去进行主线程的繁忙度监控?IdleHandler了解过吗?
6. MessageQueue了解过吗?MessageQueue的并发数会怎么样,如果消息堆积过多会怎么样?(这里我回答说messageQueue是链表结构,看源码的时候并没有注意到有对链表长度进行监测和控制的操作)
7. 了解过MessageQueue中的消息同步屏障吗?(主要用于Android对View的绘制的控制,日常开发没有想到什么好的应用场景)
编程:9分钟
1. 快速找到链表倒数第k个节点
2. 给定一个数组,数组里的元素是按照从小到大再从大到小,怎么快速找到最大元素的值(二分查找,判断是中间节点是在升序子串上还是在降序子串上)
反问:1分钟
因为得物的面试官都要连着面试好几个人,所以我反问都不会问超过30秒能回答的问题,让他们多休息会儿。
- 9.10得物三面 20分钟
对方是终端开发的总负责人,无算法环节。
问答:(20分钟)
1. 轮播图这个控件是怎么实现的,怎么实现自动轮播,怎么实现无限轮播,循环到最右边怎么又从最左边开始?(轮播图用viewpager承载,自动轮播递归调用view.post()让currentItem++;无限轮播把viewPager的大小设置成Integer.MAX_VALUE,从中间节点开始,每次currentItem++之后对真实的轮播图数据数量取模;循环到最右边又从最左边开始就是取模实现的;)
2. SDK接入解决冲突问题主要是哪些冲突?怎么解决的?(一般都是依赖版本冲突或者重复依赖,还有就是 Databinding 引发的 impl 类丢失问题)
3. 移动端的网络相对没有那么稳定,在处理弱网情况用你的计算机知识去思考,有哪些环节或者方向可以去做这方面的优化或策略?
1. 主要就是从WIFI切换到使用流量的时候保持同一个TCP连接而不是重新建立TCP连接【这个问题HTTP3.0的得到了解决,QUIC协议通过id而不是传统的四元组来确定一个连接,当网络切换的时候只要是同一个设备就不需要重新建立TCP\SSL连接】
4. 面试官问:还有吗,一般不太可能去更换协议,在移动端开发的时候可以怎么做?如说在弱网情况,手机会出现什么样的情况?
1. 这里一直从技术角度去回答,而不是从用户体验的角度,现在想想是不是说可以做一些动画来降低用户等待网络时的无聊?
5. 内存管理的问题:怎么保证应用使用过程中没有泄露,怎么检测?(用Profiler或者LeakCanary监测可能发生内存泄漏的地方,通过使用这些工具比如关闭了页面之后强制发起GC观察内存中还有哪些存在的对象)
6. 怎么定位这个泄露?
7. 内存的垃圾回收机制,用C或者C++的方式,逻辑是什么样子的,怎么做到垃圾回收或者对应回收?(不太懂,只能从GC垃圾回收的角度去想,比如可达性分析,但他好像想我说出引用计数?)
8. 在学校哪个时间段压力和挑战最大?
9. 对移动端的未来发展是怎么样的?为什么要选择移动端?
#面试##移动端 (iOS/Android)#