经历了去年的裁员风波,今年的金三银四略显冷淡,各家大厂对于初中级开发招聘缩减,岗位收缩,招聘需求明显减少,在用人方面更加谨慎。
近十几年来,随着以Android系统为代表的智能手机普及与发展,互联网行业早已进入“移动”的时代。但是现如今的“风口”已经从移动转向,整个移动互联网行业正处于增量下降、存量厮杀的阶段。面对技术更新迭代加速,前景不太明朗,很多开发者都感到了有些焦虑和迷茫。并且,在如此的大环境下,整个行业头部企业,越来越重视产品的体验与成本,对中高级的开发者的能力要求也越来越高。
1.需要复习哪些东西?
我个人认为首先是复习Java基础和Android基础,然后再根据简历上写的技能点和业务经历,复习相关的知识点。有时候,你做过的某个东西,可能叙述出来不是特别清晰,或者根本就想不起来具体是怎么做的了,这个时候就需要复习代码回顾一下。
下面是一些我认为需要复习的点:
2. 如何最高效复习?
一个技术点或者做过的业务,最好是先复习一下,然后用自己的话把它描述出来,最好是写成文字,记录到云笔记上,方便随时复习。当然,这只是一个点的复习方式。而简历上有很多很多个这样的点,我们需要设置一个dead line,设置一个复习总时长,到哪个日期截止,必须在那个日期结束前复习完成。
然后将需要复习的点详细安排到每一天,每天需要复习哪些东西,必须当天完成,禁止自己拖到第二天,最好是明天的任务内容今天就把它完成了,然后明天就去复习后天的任务内容。给自己留有余地,即使某天没时间复习,也不至于落后于计划。最好是开始复习计划之前就把每一个知识点需要看的东西全部给列出来,比如需要复习哪篇笔记、哪篇文章、哪部分代码等,到时在复习的时候就无需关心该复习哪里,直接照着之前安排好的计划开整就行了。
下面是一些我在复习时的部分计划,完成时打个勾:
算法部分
打遍天下二叉树 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Algorithm/打遍天下二叉树.md
labuladong的fucking-algorithm https://github.com/labuladong/fucking-algorithm
Java基础
Java集合源码复习一遍
ArrayList源码解析 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/集合/ArrayList源码解析.md
LinkedList源码解析 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/集合/LinkedList源码解析.md
CopyOnWriteArrayList源码解析 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/集合/CopyOnWriteArrayList源码解析.md
HashMap源码解析 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/集合/HashMap源码解析.md
ConcurrentHashMap源码解析 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/集合/ConcurrentHashMap源码解析.md
TreeMap 和 LinkedHashMap https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/集合/TreeMap和LinkedHashMap.md
HashSet 和 TreeSet https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/集合/HashSet和TreeSet.md
Android中的Bundle,SparseArray和ArrayMap https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/集合/Android中的Bundle,SparseArray和ArrayMap.md
从源码角度彻底搞懂String,StringBuffer,StringBuilder_20180420 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/基础/从源码角度彻底搞懂String,StringBuffer,StringBuilder_20180420.md
String https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/基础/String.md
泛型 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/基础/泛型.md
异常 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/基础/异常.md
反射 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/基础/反射.md
注解 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/基础/注解.md
反射性能开销原理及优化 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/基础/反射性能开销原理及优化.md
《深入理解Java虚拟机》
JVM内存数据区域 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/JVM/1.JVM内存数据区域.md
HotSpot虚拟机对象 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/JVM/2.HotSpot虚拟机对象.md
垃圾收集器与内存分配策略 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/JVM/3.垃圾收集器与内存分配策略.md
Java字节码(class文件)解读 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/JVM/4.Java字节码(class文件)解读.md
字节码指令简介 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/JVM/5.字节码指令简介.md
虚拟机类加载机制 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/JVM/6.虚拟机类加载机制.md
虚拟机字节码执行引擎 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/JVM/7.虚拟机字节码执行引擎.md
前端编译与优化 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/JVM/8.前端编译与优化.md
后端编译与优化 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/JVM/9.后端编译与优化.md
Java内存模型与线程 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/JVM/10.Java内存模型与线程.md
线程安全与锁优化 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/JVM/11.线程安全与锁优化.md
拉钩教育-《Android 工程师进阶34讲》
拉钩教育-《Java 并发编程 78 讲》
Android
《安卓开发艺术探索》
Android_View工作原理你需要知道的一切 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系统源码解析/死磕Android_View工作原理你需要知道的一切.md
Android_App_启动过程(含_Activity_启动过程) https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系统源码解析/死磕Android_App_启动过程(含_Activity_启动过程).md
Android_Service启动流程分析(一) https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系统源码解析/死磕Android_Service启动流程分析(一).md
Android_Service绑定流程分析(二) https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系统源码解析/死磕Android_Service绑定流程分析(二).md
Android_BroadcastReceiver_工作过程 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系统源码解析/死磕Android_BroadcastReceiver_工作过程.md
Lifecycle_原理解析 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系统源码解析/Lifecycle_原理解析.md
ViewModel_使用及原理解析 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系统源码解析/ViewModel_使用及原理解析.md
Jetpack全家桶 https://juejin.cn/post/7013640663824597005
学习Android Jetpack? 实战和教程这里全都有!https://juejin.cn/post/6844903889574051848
Lifecycle https://juejin.cn/post/6893870636733890574
LiveData https://juejin.cn/post/6903143273737814029
ViewModel https://juejin.cn/post/6915012483421831175
MVVM https://juejin.cn/post/6921321173661777933
DataBinding https://juejin.cn/post/6923859213403979789
Handler机制你需要知道的一切 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系统源码解析/Handler机制你需要知道的一切.md
Android_ContentProvider_启动 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系统源码解析/死磕Android_ContentProvider_启动.md
LiveData_使用及原理解析 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系统源码解析/LiveData_使用及原理解析.md
Window,Activity,View三者关系 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系统源码解析/Window,Activity,View三者关系.md
Handler同步屏障 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系统源码解析/Handler同步屏障.md
Choreographer原理及应用 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系统源码解析/Choreographer原理及应用.md
Handler相关知识点大全 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系统源码解析/Handler相关知识点大全.md
LeakCanary 原理探究 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/三方库原理/LeakCanary_原理探究.md
OkHttp3 原理探究 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/三方库原理/OkHttp3_原理探究.md
Retrofit 原理解析 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/三方库原理/Retrofit_原理解析.md
Glide主流程源码解析 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/三方库原理/Glide主流程源码解析.md
RxJava3原理解析 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/三方库原理/RxJava3原理解析.md
Android-skin-support 换肤原理详解 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/三方库原理/Android-skin-support换肤原理详解.md
屏幕适配 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/实战常见问题/屏幕适配.md
插件化 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/实战常见问题/插件化.md
热更新 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/实战常见问题/热更新.md
Gradle系列(一) Groovy 基础 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/Gradle/Gradle系列(一)_Groovy_基础.md
Gradle系列(二) Gradle执行顺序和task https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/Gradle/Gradle系列(二)_Gradle执行顺序和task.md
Gradle系列(三) Gradle配置构建和渠道包 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/Gradle/Gradle系列(三)_Gradle配置构建和渠道包.md
Gradle系列(四) Gradle插件 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/Gradle/Gradle系列(四)_Gradle插件.md
Gradle系列 插件练习-动态移除权限 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/Gradle/Gradle系列_插件练习-动态移除权限.md
手把手教大家用Transform API和ASM实现一个防快速点击案例 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/Gradle/手把手教大家用Transform_API和ASM实现一个防快速点击案例.md
Android进程间通信: 深入浅出AIDL https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/多进程/AIDL详解.md
Android进程间通信: Messenger详解 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/多进程/Messenger详解.md
Android进程间通信: Binder详解 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/多进程/Binder详解.md
硬核!Android 应用启动全流程深度剖析!(进程创建+消息机制+Activity组件管理+Application和Activity初始化+UI布局与绘制+RenderThread渲染+SurfaceFlinger合成) https://mp.weixin.qq.com/s/b6-leHKQZkuxkjll-1109A
Choreographer原理及应用 https://blog.csdn.net/xfhy_/article/details/115436765?spm=1001.2014.3001.5502
屏幕刷新 https://juejin.cn/post/6863756420380196877
View工作原理 https://juejin.cn/post/6854573212374663182
编译基础 https://juejin.cn/post/6844904106545414157
Android插件化原理(一)Activity插件化 https://juejin.cn/post/6844903613865672718
ClassLoader http://liuwangshu.cn/tags/ClassLoader/
hencoder全部Kotlin部分 https://rengwuxian.com/tag/kotlin/
hencoder全部自定义View部分 https://rengwuxian.com/tag/custom-view/
协程原理 https://juejin.cn/post/6862548590092140558
flow https://juejin.cn/post/6914802148614242312
Android SharedPreferences的设计与实现 https://juejin.cn/post/6884505736836022280
ActivityThread的理解 https://blog.csdn.net/hzwailll/article/details/85339714
了解AMS http://liuwangshu.cn/tags/ActivityManagerService/
Android Gradle 自定义Task 详解 https://blog.csdn.net/zhaoyanjun6/article/details/76408024
编译打包流程 https://juejin.cn/post/6844904106545414157
Android Gradle 看这一篇就够了 https://juejin.cn/post/6844903446814916621#comment
公司1:
公司2:
公司3:
公司4:
公司5:
公司6:
公司7:
公司8:
公司9:
HR面试真题
一般HR面就比较轻松了,不会涉及什么高难度的问题。一般就问问你为什么离职、住哪里、有对象吗、结婚了吗、有小孩吗、小孩多大了、买房了吗、哪里人,然后HR还会介绍公司的情况、产品、公司规划、福利之类的。下面这些是我在网络上搜集的一些比较重要的问题,需要详细向HR了解清楚。
大部分Android开发者一遇到这种面试题就直接懵逼了,不少人不是没有看过相关的解答,但也都只是浅尝辄止,没有深入掌握其中原理,面试的时候自然会被问个措手不及。最要命的是面试官还会根据你的回答来一步一步深入,直到你回答不上来为止!
很多求职者抱怨大厂“面试造火箭,工作拧螺丝”,但实际上,面试中的大多数问题都是在全方位地考察你对技术的理解深度,以及解决问题的能力。
那些看似无理甚至无用的问题:比如“Okhttp请求复用有没有了解”,其实是面试官想借此看看你对网络优化和Socket协议的理解情况和掌握程度,进而引伸到你对网络架构、设计模式的理解。在熟知Okhttp源码的前提下,你才能够答好这道面试题。
比如优化方面,多少人往往就是说一些自己编写的业务,一些去除页面多余嵌套、使用线程池、ViewStub 这些非常浅的方案。其实更多的,面试官还是希望能够听到,线上复杂环境,低端机/弱网等因素下,用户触发的一系列的体验问题。
像在进行启动优化的时候,例如你从线程角度做启动优化,你需要了解在 Linux 层线程的 nice 值,线程优先级对调度的影响等。在进行内存优化的时候,就必须要精通JVM!
作为过来人,我发现很多人对于 Android 知识的掌握还是多浮于表面,导致对一些核心底层技术点却只停留在**“使用过”甚至是“听说过”的阶段**,这其中甚至不乏一些工作 5 年以上的 Android 工程师。
诸如这些困扰,相信很多Android开发都有体会:
总之,一旦遇到问题,很少人能够由点及面逆向分析,最终找到瓶颈点和最优解决方案。
如今,国内移动互联网的红利期已经过去,Android 开发工程师也从最初的一人难求,到现在的一个岗位百人竞争,僧多粥少的情况直接导致整个行业对求职者的要求越来越高。可以说,初中级工程师基本已无立足之地,即使高级工程师也经常在面试中碰钉子。
如果你在金三银四想获得一份更好的Offer,如果你还没有完全掌握这些技术的底层原理,现在想要在最短的时间里突击学习,那么必须要有一份完备的思路指引!