虚拟机相关
-
JVM DVM ART的区别(360)
-
类加载过程
-
双亲委派模型
设计模式
-
说说常用的设计模式
-
手写观察者模式(多个公司要求手写)
其它
-
GC过程以及GC算法了解么
-
Java的引用类型以及区别
-
HashMap原理(京东)
-
HashMap1.7 和1.8的区别
-
ConcurrentHashMap原理
Android基础部分
Activity
-
Activity的启动模式,区别
-
Activity如何保存状态的
广播
-
广播的分类
-
广播的工作原理
-
可以再onReceive中开启线程么,会有什么问题
Service
- IntentService工作原理
ContentProvider
- 工作原理
AndroidVIew相关
自定义View的流程
-
View的测绘流程
-
在onResume中可以测量宽高么
View的事件分发机制(58 京东还有一些其他的 总体问的还是挺多的)
-
onTouchListener onTouchEvent onClick的执行顺序
-
怎么拦截事件 onTouchEvent如果返回false onClick还会执行么等等
-
onTouch返回true,onClick还会执行么
动画(车和家)
-
动画的分类以及区别
-
属性动画的原理
-
属性动画与普通的动画有什么区别
-
插值器 估值器的区别
集成框架部分
-
RxJava原理
-
多次操作subscribeOn和ObserveOn能否成功
-
Map Flatmap的区别等
-
会问一些操作符的使用
-
图片加载框架
-
Glide和Picasso的区别
-
Glide的工作原理 如何实现缓存的等等
Android相关组件原理
Handler(面试问的比较多,字节跳动、小米等)
-
Handler的基本原理
-
Handler如果没有消息处理是阻塞的还是非阻塞的
-
handler.post(Runnable) runnable是如何执行的
-
handler的Callback和handlemessage都存在,但callback返回true handleMessage还会执行么
-
Looper的原理
-
Looper如何在子线程中创建
-
Looper、handler、线程间的关系。例如一个线程可以有几个Looper可以对应几个Handler
-
Looper是死循环但为什么没有导致ANR
-
ThreadLocal的原理,以及在Looper是如何应用的
AsyncTask
-
AsyncTask的原理
-
AsyncTask中的任务是串行的还是并行的
-
HandlerThread的原理
Android优化相关
-
内存泄漏查找
-
ANR查找
-
CPU波动
-
内存抖动
-
会问当前项目中是如何进行性能优化分析的
Android其它
-
进程通信你用过哪些 原理是什么(小米,字节跳动)
-
Binder的原理(问的较多)
-
启动一个Activity的流程分析
-
Bitmap相关的、内存优化等(酷我音乐)
-
MVP MVVM MVC的区别 结合项目说说MVP的优缺点
-
冷启动 热启动的概念(酷我音乐)
网络
-
TCP的三次握手
-
Socket的使用
程序员之路——学习经验总结分享
程序员这个行业,日新月异,技术体系更新速度快,新技术新框架层出不穷,所有的技术都像是一个无底洞,当你学得越多就会发现不懂的越多,不懂的越多,需要学习的就更多。
因此,一旦选择了这个行业,就意味着你必须不断学习才能跟得上大家的脚步,而要想成为一名优秀的程序员,更是需要通过正确的方法,设定正确的目标来进行不断地学习。
下面是我工作几年以来总结的一些自己已经公司一些大佬的学习方法:
1.读官方文档
读文档,读文档,读文档,重要的事情说三遍!!!
如果你是一名有一定开发经验程序员,那我强烈地建议你一定要看官方文档!!!
如果你是一名初学者,那现阶段来说,看文档会是件非常非常的吃力的事,但我还是强烈地建议你一定要看官方文档,不过可以在你通过视频教程或是书籍学习并入门之后再慢慢的阅读。
2.官方文档扯完了,我们接着来聊聊如何进阶学习
1、看视频进行系统学习
前几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。
另外,我自己也珍藏了好几套视频,有需要的我也可以分享给你。
2、进行系统梳理知识,提升储备
客户端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
-
**架构师筑基必备技能:**深入Java泛型+注解深入浅出+并发编程+数据传输与序列化+Java虚拟机原理+反射与类加载+动态代理+高效IO
-
**Android高级UI与FrameWork源码:**高级UI晋升+Framework内核解析+Android组件内核+数据持久化
-
**360°全方面性能调优:**设计思想与代码质量优化+程序性能优化+开发效率优化
-
**解读开源框架设计思想:**热修复设计+插件化框架解读+组件化框架设计+图片加载框架+网络访问框架设计+RXJava响应式编程框架设计+IOC架构设计+Android架构组件Jetpack
-
**NDK模块开发:**NDK基础知识体系+底层图片处理+音视频开发
-
**微信小程序:**小程序介绍+UI开发+API操作+微信对接
-
**Hybrid 开发与Flutter:**Html5项目实战+Flutter进阶
知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结。
主要内容:
Java 基础(★★)
-
面向对象思想
-
多态
-
异常处理
-
数据类型
-
Java 的 IO
-
集合
-
Java 多线程
Java 高级(★★)
-
Java 中的反射
-
Java 中的动态代理
-
Java 中的设计模式&回收机制
-
Java 的类加载器
Android 基础(★★★)
-
Android 基本常识
-
Activity
-
Service
-
BroadCastReceiver
-
ContentProvider&数据库
-
Android 中的布局
-
ListView
-
JNI & NDK
-
Android 中的网络访问
-
Intent
-
Fragment
Android 高级(★★★)
-
Android 性能优化
-
Android 屏幕适配
-
AIDL
-
自定义控件
-
Android 中的事件处理
-
Android 签名
-
Android 中的动画
-
网络协议
-
其他
3、读源码,看实战笔记,学习大神思路
“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。
主要内含微信 MMKV 源码、AsyncTask 源码、Volley 源码、Retrofit源码、OkHttp 源码等等。
4、面试前夕,刷题冲刺
面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。
关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:
会读文档了,又阅读了这么多学习资料,是不是就不用其他方式再学习了?
答案肯定是不可以!!!
相比上面的学习资料,我们还需要根据自己的情况额外地进行书籍教程的学习。
有人觉得自己总是静不下心来看书,我的方法是,阅读某本书的时候给自己定一个小目标,比如每天阅读该书至少20页内容,这样每天学习的内容不会太多,不容易让人变得焦躁,当然,你可以根据自己的情况制定每天的阅读量,如果按照20页每天的阅读量来算,一本500页的书,不到一个月就读完了。
下面整理了目前最主流的中级,高级进阶书籍。感兴趣可以收藏一下,作为一个参考~
中级进阶推荐看一下以下这几本书:
《Android从入门到精通(附光盘)》 明日科技 编
《第一行代码2 Android(第二版)》 郭霖 著
《Android开发进阶 从小工到专家 》何红辉 著
《Android进阶之光 》刘望舒 著
《Android开发艺术探索》 任玉刚 著
最后
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长。而不成体系的学习效果低效漫长且无助。时间久了,付出巨大的时间成本和努力,没有看到应有的效果,会气馁是再正常不过的。
所以学习一定要找到最适合自己的方式,有一个思路方法,不然不止浪费时间,更可能把未来发展都一起耽误了。
如果你是卡在缺少学习资源的瓶颈上,那么刚刚好我能帮到你。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!