写点什么

五千字长文,深度解密:那些 BAT 大厂的 Android 面试官到底在想些什么

用户头像
Android架构
关注
发布于: 2 小时前

1.网络框架对比和源码分析 2.自己去设计网络请求框架,怎么做?3.网络请求缓存处理,okhttp 如何处理网络缓存的 4.从网络加载一个 10M 的图片,说下注意事项 5.TCP 的 3 次握手和四次挥手 6.TCP 与 UDP 的区别 7.TCP 与 UDP 的应用 8.HTTP 协议 9.HTTP1.0 与 2.0 的区别 10.HTTP 报文结构 11.HTTP 与 HTTPS 的区别以及如何实现安全性 12.如何验证证书的合法性?13.https 中哪里用了对称加密,哪里用了非对称加密,对加密算法(如 RSA)等是否有了解?14.client 如何确定自己发送的消息被 server 收到?15.谈谈你对 WebSocket 的理解 16.WebSocket 与 socket 的区别 17.谈谈你对安卓签名的理解。18.请解释安卓为啥要加签名机制?19.视频加密传输 20.App 是如何沙箱化,为什么要这么做?21.权限管理系统(底层的权限是如何进行 grant 的)?


#####数据库


1.Sqlite 升级,增加字段的语句 2.数据库框架对比和源码分析 3.数据库的优化 4.数据库数据迁移问题


#####插件化、模块化、组件化、热修复、增量更新、Gradle


1.对热修复和插件化的理解 2.插件化原理分析 3.模块化实现(好处,原因)4.热修复、插件化 5.项目组件化的理解 6.描述清点击 Android Studio 的 build 按钮后发生了什么


#####架构设计和设计模式


1.谈谈你对 Android 设计模式的理解 2.MVC MVP MVVM 原理和区别 3.你所知道的设计模式有哪些?4.项目中常用的设计模式 5.手写生产者/消费者模式 6.写出观察者模式的代码 7.适配器模式,装饰者模式,外观模式的异同?8.用到的一些开源框架,介绍一个看过源码的,内部实现过程。9.谈谈对 RxJava 的理解 10.Rxjava 发送事件步骤 11.RxJava 的作用,与平时使用的异步操作来比的优缺点 12.说说 EventBus 作用,实现方式,代替 EventBus 的方式 13.从 0 设计一款 App 整体架构,如何去做?14.说一款你认为当前比较火的应用并设计(比如:直播 APP,P2P 金融,小视频等)15.谈谈对 java 状态机理解 16.Fragment 如果在 Adapter 中使用应该如何解耦?17.Binder 机制及底层实现 18.对于应用更新这块是如何做的?(解答:灰度,强制更新,分区域更新)?19.实现一个 Json 解析器(可以通过正则提高速度)20.统计启动时长,标准


#####性能优化


1.启动 app 黑白屏优化 2.稳定——内存优化 3.流畅——卡顿优化 4.节省——耗电优化 5.安装包——APK 瘦身 6.冷启动与热启动 7.内存泄漏的场景和解决办法 8. Bitmap 优化 9.LRU 的原理 10.webview 优化 11.如何避免 OOM?


#####Android Framework


1.Android 系统架构 2.View 的事件分发机制?滑动冲突怎么解决?3.View 的绘制流程?4.跨进程通信 5.Android 系统启动流程是什么?6.启动一个程序,可以主界面点击图标进入,也可 以从一个程序中 跳转过去,二者有什么区别?7.AMS 家族重要术语解释 8.用到的一些开源框架,介绍一个看过源码的,内部实现过程。


#####Android 优秀三方库源码


1.网络底层框架:OkHttp 实现原理 2.网络封装框架:Retrofifit 实现原理 3.响应式编程框架:RxJava 实现原理 4.图片加载框架:Glide 实现原理 5.事件总线框架:EventBus 实现原理 6.内存泄漏检测框架:LeakCanary 实现原理 7.依赖注入框架:ButterKnife 实现原理 8.依赖全局管理框架:Dagger2 实现原理 9.数据库框架:GreenDao 实现原理

**【解析部分实在放不下了,内容太多了,点击[这里](


)直接或者私信我“解析”,免费获取】**


3. IT 基础知识


其实就是计算机科班学生学校里学到的一些东西,在校招时这块是重点,社招会放宽,但一些基本的常识是要有的,比如不少人都不知道 http 的 get post 有啥区别,https 的那个 s 是什么意思,讲不清进程与线程的概念,不知道二分算法是个啥东西。这些简单问题的筛选,可以过滤一些所谓野路子的程序员,是不是科班出身不重要,搞这行就得对一些基本常识有概念,不然以后怎么愉快的交流呢?


4. 代码质量的认识


我们需要的是一个对代码味道有感觉的人,关于这点,看下《Clean Code》就够了,面试中这点其实不好考察,可以让他聊一聊对代码质量的认识,虽然不能排除对方夸夸其谈,至少想法不多,只能提到命名风格这一点的人是不符合要求的,也可以在写 Code 的环节中观察。


5. 技术视野


比如对 Android 开发新技术的了解与学习,对其它流行技术领域的了解,这其实与我刚才提到的技术广度的考察有关,就我面试过程中,发现很多非互联网行业的从业人员,因为公司各种操蛋规定与公司技术氛围的原因,技术视野相当狭窄。


我个人对这点深有体会,2011 年我还在传统行业从事软件研发,当时的公司因为担心技术信息泄露,不让上网,相当封闭,我个人虽然自认为已在那个行业内做到业内专家的级别,但总感觉哪里不对,有一天我很兴奋的打算跟身边同事聊一聊 Android 的时候,发现他们居然都不知 Android 为何物?


2011 年啊同志们,当时的震惊无法言表,深切感觉到需要作出改变了,毅然放弃多年行业积累,转战移动互联网,直到现在。时至今日,多年前的小伙伴也有很多混出了名党,开始走向人生巅峰,我也从来没有后悔当初做出的选择。


6. 技术想象力


一个优秀的技术人,如果知识的深度与广度足够,知识已成体系,那么他对于一些从未接触过的领域,也是可以做出足够合理的想象与判断,面试过程中如果问到一些领域候选人没有涉猎,这时候一般不用过多纠缠,但如果你想借这个问题考察下他的技术想象力,可以深入下去,比如问他:“你觉得这个东西应该是什么原理呢?”,“这个酷炫的控件,如果要你来做,你会怎么实现?”。在这方面表现出色的同学无疑是有深厚基础与足够广度的人。


7. 技术习惯


好的程序员都会有好的习惯,比如各种快捷键的熟练应用,各种命令行的掌握,一些提高开发效率的工具与习惯,碰到问题是 baidu 还是 google,有没有做一些小工具帮助减少重复工作,工作之余有没有继续学习?有没有看什么不错的书等等,这些小细节很大程度上决定了程序员的开发效率,这也是为什么很多人说一个优秀程序员抵得上 100 个普通程序员,这也是重要原因之一。


###大佬是怎么看待面试后的反馈的?


面试一般不止一轮,你需要给出你的反馈,多轮面试结果一起考量,减少误判的风险,反馈一般怎么写呢?以下是我的建议:


1. 面试纪录


面试过程中的完整纪录,尽量客观评价,让其它面试官知道你问了哪些问题,回答的怎么样,也避免了重复问题的尴尬。


2. 优点与缺点


你的主观评价,


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


亮点有哪些,你觉得哪些地方不够好?


3. 综合评价


你对候选人的综合评价,hire 或者 no hire 的根本原因,如果有些地方感觉没考察清楚,期望其它面试官继续加强考察,也可以写上。


4. 怎样才给通过?


通过标准因人而异,每个人都有自己心中的 bar, 但还是有些可直观考量的因素的:


一是岗位的要求,不同的岗位标准当然不一样,校招与设招肯定也不一样。


二是岗位的紧急程度,兄弟们天天加班忙死了,赶紧找人过来帮忙吧哈哈。


三是候选人的年龄,大龄程序员莫怪,一把年纪了还跟刚毕业一两年的同事一个水平,说明成长太慢,做技术的潜力有限,这个大家应该能理解。

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
五千字长文,深度解密:那些BAT大厂的Android面试官到底在想些什么