Android 程序员架构之路该如何继续学习,华为架构师深入讲解 Android 开发
【一面】
Android 四大组件是什么?你最熟悉哪个?
Activity 的生命周期?
旋转屏幕的时候会发生什么?
Java 的常量池?不同 String 赋值方法,引用是否相等?
HashMap 的实现?树化阈值?负载因子?增长系数?
手写代码:O(1)的单链表元素删除(×:倒霉孩子没见过这套路…经过提示也没想出来,可见做题的重要性)
手写代码:获得单链表的最后 N 个元素
【二面】
写过 C++是吧?
知道 STL 容器的 allocator 吗?
手写代码:实现无锁同步 (×:我写成了 CAS 操作,被打断,说特定的 ARM 处理器没有这个同步原语,不能依赖相关指令。包括信号量等也不行。)
手写代码:自定场景,实现一个满足需求的内存池 (×:晕乎乎写出了几个 bug,面试官眼尖…而且自我感觉回收算法不够好,感谢放过)
手写代码:从长序列中找出前 K 大的数字,堆排序
JVM 的垃圾回收算法了解吗?
对象可达性分析,哪些是 GC root?
TCP 和 UDP 的根本区别?
什么场景下使用 UDP?为什么?
提问简历,关于 FFmpeg
我的提问:
面试官是哪个组的?
字节跳动今年是否真的缺人?招聘策略是什么?(答:是。项目和实习经验吃亏没关系,今年招聘重视基础,换去年我肯定不给你过。)
【三面】
介绍项目,高三暑假做的 App
画某个功能的模块图,写出相关接口
这样设计有什么问题?如何改进?
QQ 视频聊天使用什么协议?
视频聊天为何会卡顿?
TCP 流量控制算法的细节? (×:包速率增长的函数关系说不清楚,感谢面试官放过)
假设有节点自带 p 的丢包率,如何判断丢包是因为带宽不够还是随机丢包导致?
如果视频聊天出现卡顿,如何在应用层面缓解?
手写代码:大整数加法,要求代码可读性(×:又写出搞笑 bug 系列,被二面搞傻了)
Android 应用中的卡顿是什么导致的?
Service 和 Thread 有什么区别?Service 的代码是在哪个线程运行的?
AsyncTask?Executor?
AsyncTask 有哪些缺点?
用过 IntentService 吗? (×:没用过,感觉就是个适合处理单次计算任务的方便设施)
我的提问:
面试官是做什么的?
面试官对非科班学生有什么看法?
面试官认为我存在哪些不足?
如何做好面试突击,规划学习方向?
面试题集可以帮助你查漏补缺,有方向有针对性的学习,为之后进大厂做准备。但是如果你仅仅是看一遍,而不去学习和深究。那么这份面试题对你的帮助会很有限。最终还是要靠资深技术水平说话。
网上学习 Android 的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。建议先制定学习计划,根据学习计划把知识点关联起来,形成一个系统化的知识体系。
学习方向很容易规划,但是如果只通过碎片化的学习,对自己的提升是很慢的。
同时我还搜集整理 2020 年字节跳动,以及腾讯,阿里,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android 架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。
在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多。
网上学习 Android 的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
评论