前言
说说时间线,7.22一面,7.28二面,8.4三面,8.11四面,8.16意向书。其中,一面和二面完之后,第二天就发邮件预约下一次面试;三面完之后过了两天预约下一次面试;四面结束后隔了5天发意向书,期间发了字节跳动面试体验问卷调查(还以为凉凉了)。
一面(约50min)
由于一面的时候忘了录音,只能根据记忆想起一些问题,其实一面问的偏向于基础,背熟常见的八股文就行了,主要是Java、Android、计算机网络和操作系统等问题。 1、HashMap原理 2、HTTP1.0和HTTP2.0的区别 3、讲一讲HTTP的状态码 4、进程和线程 5、翻转链表的时间复杂度是多少? 6、算法题:LeetCode 21.合并两个有序链表
二面(49min)
1、问项目相关的问题 2、有了解过埋点吗?如果让你实现一个埋点SDK,服务端和客户端应该如何实现? 3、Activity A启动另一个Activity B,生命周期变化?如果B是Dialog呢? 4、View的事件分发机制?( dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent) 5、View的ACTION_CANCEL事件是什么?(手指从当前View的范围滑到了另一个View范围内,会触发CANCEL事件) 6、Java的final关键字 7、Thread A启动Thread B,如果A退出了,B会怎样 8、HTTPS的工作流程 9、浏览器输入URL后发生了什么(DNS解析、TCP握手、HTTP请求) 10、算法题:LeetCode 3.无重复字符的最长子串 11、反问阶段
三面(1h7min)
1、问项目相关的问题 2、Android数据持久化,如sharedpreference、sqlite等用过吗?有什么区别?sharedpreference的commit和apply的区别? 3、Handler工作原理分析(MessageQueue、Looper和Handler各自的原理、Java层和Native层消息循环、Linux的epoll,高频考点) 4、Looper.loop()为什么不会卡死?(会阻塞到native的epoll调用,但有UI刷新事件可以及时解除阻塞,表现为不会卡死) 5、对于在Native层的的消息循环中,epoll()监控的mWakeEventFd的了解?(3、4、5实际上是一个连贯的考点,需深入源码细节理解) 6、一个Java对象占用多少内存?(markwork、klass pointer和实例变量) 7、Handler的postDelay()是怎么实现的? 8、简单说说Retrofit2的工作原理?(动态代理设计模式、底层用okhttp、ServiceMethod、Converter等) 9、说说okHttp的线程池? 10、说说内存泄漏该如何定位? 11、Java对象的finalized()方法什么时候调用?(GC最后阶段,可达性分析算法没有被标记) 12、软引用和虚引用? 13、将资源回收放在finalized()方法里面可以吗? 14、什么情况下finalized()方法没有被调用? 15、有了解过JNI吗? 16、说说对于域名劫持的了解? 17、算法题:LeetCode 93.复原IP地址(楼主当时没想出来怎么做,只能用迭代的方法去暴力破解,写得磕磕碰碰,实际上应用用回溯算法) 18、反问阶段
四面(51min)
1、主要是问项目相关的问题(深挖项目细节,不局限于Andorid的问题,用到了什么技术如后端、深度学习等的话都会展开来问,聊了约30分钟) 2、说说对于域名劫持的了解?HTTPS能防止域名劫持吗? 3、聊了聊能否去实习、以及在校期间的绩点之类的。 4、算法题:LeetCode 240.搜索二维矩阵2的变种,要求找出数字在数组中第一次出现的位置(数字可重复) 5、反问阶段
技能储备冲击大厂
,我是这样准备的,Android学习是一条漫长的道路,我们要学习的东西不仅仅只有表面的 技术,还要深入底层,弄明白下面的 原理,只有这样,我们才能够提高自己的竞争力,在当今这个竞争激烈的世界里立足。
如果你觉得自己学习效率低,缺乏正确的指导,可以参考下下面分享我多年工作以来收集整理的学习路线,给大家做个参考
知识点
接下来分享的系统学习资源以详解各大互联网公司的 Android 常见面试题为主线,从面试的角度带你介绍必备知识点,以及该知识点在项目中的实际应用。
帮你在现在的基础上,重新梳理和建立 Android 开发的知识体系。无论是你短期内想提升 Android 内功实力,突破自己工作中的能力瓶颈,还是准备参加 Android 面试,都会在这份资料中有所一些收获。。
1.2020大厂面试高频知识点
- 图片
- 网络和安全机制
- 数据库
- 插件化、模块化、组件化、热修复、增量更新、Gradle
- 架构设计和设计模式
- 性能优化
- Android Framework
- Android优秀三方库源码
2.Jetpack架构组件从入门到精通
- Android Jetpack - Navigation
- Android Jetpack - Data Binding
- Android Jetpack - ViewModel & LiveData
- Android Jetpack - Room
- Android Jetpack - Paging
- Android Jetpack - WorkManger
- Android Jetpack架构组件之Lifecycle
- Android Jetpack Compose 最全上手指南
3.Framework精编内核解析
主要内容包含:
- 深入解析Binder
- 深入解析Handler
- Dalvik VM 进程系统
- 深入解析 WMS
- PackagerManagerService
4.Kotlin强化实战(附Demo)
- 第一章 Kotlin入门教程
- 第二章 Kotlin 实战避坑指南
- 第三章 项目实战《Kotlin Jetpack 实战》
- 从一个膜拜大神的 Demo 开始
Kotlin 写 Gradle 脚本是一种什么体验? Kotlin 编程的三重境界 Kotlin 高阶函数 Kotlin 泛型 Kotlin 扩展 Kotlin 委托 协程“不为人知”的调试技巧 图解协程:suspend
5.Android设计思想解读开源框架
- 热修复
- 插件化
-组件化框架设计 - 图片加载框架
- 网络请求框架
- RXJava 响应式编程框架设计
- IOC 架构设计
- Android架构组件Jetpack
6.NDK模块开发
- NDK 模块开发
- JNI 模块
- Native 开发工具
- Linux 编程
- 底层图片处理
- 音视频开发
- 机器学习
7.Android源码解析
“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。
主要内含微信 MMKV 源码、AsyncTask 源码、Volley 源码、Retrofit源码、OkHttp 源码等等。
以上这些内容均免费分享给大家,需要完整版的朋友,赶紧扫描下方二维码领取吧
|