总结
找工作是个很辛苦的事情,而且一般周期都比较长,有时候既看个人技术,也看运气。第一次找工作,最后的结果虽然不尽如人意,不过收获远比offer大。接下来就是针对自己的不足,好好努力了。
最后为了节约大家的时间,我把我学习所用的资料和面试遇到的问题和答案都整理成了PDF文档
喜欢文章的话请关注、点赞、转发 谢谢!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
那么,作为Android 开发者,该怎样规划自己的学习路线,然后一步一个脚印的向中高级进阶呢?本篇文章根据自己的一些见解梳理一下。
一、Java基础
首先,Java作为Android开发的第一语言(Kotlin普及还需要时间),要想在Android开发中游刃有余,就得先打牢Java基础,Java 基础有哪些呢?除了一些基本的语法之外,总结了如下一些基础:
1 . 面向对象的三大特性:
Java 作为面向对象编程语言,你得知道OOP的的三大特性
封装、继承、多态。
2 . 程序设计的6大原则:
-
单一职责原则
-
里氏替换原则
-
依赖倒置原则
-
接口隔离原则
-
迪米特法则
-
开闭原则
了解这6大设计原则是非常有必要的,它能指导你的程序整个结构的设计和规范。要想提高你的代码质量,请熟记这几个原则。在我们设计类、方法、接口的时候,请遵循这些原则。
3 . 设计模式
-
单例模式 :double check 双重加锁方式、静态内部类方式、枚举方式。
-
构造器模式
-
模板方法模式
-
装饰器模式
-
观察者模式
-
责任链模式
-
策略模式
23种设计模式就不一一列举了,不管你是工作了5年还是工作了1年,学习一下设计模式吧,这有助于打开你的编程思维。
4 . Java 字符串相关
Java 字符串相关的三个类:String
、StringBuilder
、StringBuffer
,你知道他们的区别吗?这也是面试中比较常问的,如果你还不知道?那就去查查资料吧。
5 . Java 线程池
线程池方面,JDK 为我们内置了几种线程池:
-
**newFixedThreadPool:**newFixedThreadPool,创建固定大小的线程池,poolCoreSize和maxPoolSize 相等,到达coreSize,则将新的任务放到缓存队列,有线程执行完毕,直接去取。
-
**newSingleThreadExecutor:**newSingleThreadExecutor,创建一个单线程的线程池,核心池的大小和最大池大小都为1.
-
**newCacheThreadPool:**newCacheThreadPool,无大小限制的线程池,提交一个任务就创建一个线程执行。
如果默认的几种线程池还不能满足你的需求,那就试一试自定义线程池吧!自定义线程池继承ThreadPoolExecutor。
6 . Java 集合
集合是Java中用得最多的了吧,你也面试的必问题之一,对于Java集合,你的脑袋里要熟记它的整个框架图:
Collection:
(1) List:
-
LinkedList
-
ArrayList
-
Vector
(2) Set
-
HashSet
-
TreeSet
Map:
-
HashMap
-
TreeMap
-
HashTable
我们需要知道每个容器的特性,以及它们的扩容方式(这个很重要)。根据我们的数据大小、特定场景、业务逻辑来选择合适的容器。
7 . Java 内存模型
Java 内存模型这一块非常重要,因为它涉及到我们程序的性能,我们需要知道,内存是如何分配的,成员变量、静态变量、局部变量、对象等各自分配到哪一个区:
-
栈内存
-
堆内存
垃圾回收机制:
涉及到内存,我们就需要知道java的垃圾回收机制,虽然Java 不像c++一样需要我们自己分配内存、释放内存。但是我们还是需要知道它的回收机制,分代回收:
-
年轻代:1 Eden 区 和2个Survivor 区
-
年老代
-
永久代
分代回收分为了三个代,每个代的垃圾回收时机和频率是不一样的,因此才用的回收算法也不一样。
总的来说:年轻代的回收频率很高,对象的生命周期比较短暂,当经过一定次数的回收周期之后,年轻代的对象还存活的话,就会被移动到年老代,年老代的回收比较耗时,回收频率较低,回收成本较大。
Java 基础总结:关于Java基础暂时就总结了这些,这些都是Android 开发中比较常用或者常常需要关心的一些东西。如果你想比较系统的学习Java基础相关的东西,推荐你去看一下经典书籍《Thinking in Java》。
二、Android 基础
就像建造房屋一样,要建造一座宏伟的建筑,首先得打牢根基。同样的,作为Android 开发者,要想走的更远,也要学好Android基础。
1 . Android 四大组件
Android四大组件是Android的根本,从我们学习Android 时候,就先认识了它们:
-
Activity
-
Service
-
BroadcastReceiver
-
ContentProvider
Activity:
Activity 再熟悉不过了吧,我们APP 所能看到的活动界面就是一个个Activity,说到Activity,我们得知道:
- 1,Activity 的生命周期
- 2,Activity 的几种启动方式:
standard
SingleTask
SingleTop
SingleInstance
请记住这几种启动方式的区别。
-
3,Activity 间传如何递数据?
-
4,Activity 横竖屏切换生命周期有哪些变化?
-
5,显示Intent 和隐式Intent 有和区别?
Service:
Service 也是我们用得比较多的一个组件,关于Service ,我们需要知道:
-
Service 的生命周期
-
Service 的两种启动方式:
1, startService
2, bindService
2种启动方式 所走的生命周期方法是不一样的
- Service vs IntentService:
Service 和IntentService 个自用于不同的场景,想知道他们各自的使用场景和区别吗?查资料去吧!
BroadcastReceiver:
广播相关的知识点:广播有两种注册方式,Manifest 清单文件中注册和 代码中动态注册,代码中注册的广播一般为局部广播,最好 register 和 unRegister 成对出现,别忘了反注册。
全局广播可以跨应用访问,存在安全隐患并且效率不高,因此出现了更安全、更高效的替代者:LocalBroadcastReceiver
,使用非常简单。如果在代码中看到的是LocalBroadcastReceiver
而不是BroadCastReceiver
,我会给你加分。
ContentProvider
ContentProvider 可能用得不是很多,可以用于共享数据,提供数据源,掌握会写增删改查就好了。
啰嗦一下:四大组件需要在清单文件中声明。
2 . Android 常用的几种布局
-
1,帧布局 FrameLayout
-
2,线性布局 LinearLayout
-
3,相对布局 RelativeLayout
-
4,Google 新出的约束布局ConstraintLayout
3 . Android Studio
Android Studio 是我们Android开发的常用工具,熟练操作和使用上面的快捷键和一些插件,对我们的开发效率有很大的帮助。
Android Studio 有很多好用的插件,可以根据自己的需要安装,如:
-
GsonFormat
-
Parcelable 序列化
-
翻译插件:对于英文不是很好的很有帮助。
除了一些好用的插件之外,还可以根据自己的习惯设置一些快捷键,总之,工欲善其事,必先利其器。要提高开发效果,先配置好我们的开发工具。
4 . Fragment
-
1,Fragment 的生命周期
-
2,Fragment 与fragment 之间的通讯方式
-
3,Fragment 与Activity 之间的通讯方式
-
4,Fragment + ViewPager 懒加载
-
5,Fragment +TabLayout 选项卡
5 . 数据库相关
Android 自带数据库 Sqlite, 关于数据库,我们应该熟悉:
-
1,数据库和表的创建
-
2,数据的增删、改、查。
-
3,数据库升级:
这点尤为重要,因为数据库的升级往往伴随着数据的升级,不能升级之后把前面的用户数据弄没了。
- 4,三方库:GreenDao:
如果你觉得自己做这些操作很麻烦的话,你可以选择你一些三方的库,如GreenDao,已经为你封装了所有的这些操作,只需简单配置就能使用。当然,Github 上还有很多类似的库,根据自己的需要选择。
6 . 常用控件基础控件
-
1,RecyclerView & ListView
-
2,ViewPager
-
3,TextView
-
4,ImageView
-
5,Button
-
6,Checkbox
-
7,RadioButton
所有复杂的界面都由这些简单的基础控件组成,因此,你需要好好了解一下他们的各种属性。
三、Android 进阶
上面列举了一些Android的基础知识点,仅仅熟悉这些还不够,还需要学习Android开发中更高级一点的东西:
1 . View
上面列举了一些基础的View和控件,但是这些基础控件有时候不能满足我们的需求,这时候就需要自定义View了。
自定义View:
自定义view 的三种方式:
-
1,组合基础控件
-
2,继承基础控件,做相应的更改。
-
3,继承View 或 ViewGroup:
这种方式也是我们用的比较多的一种方式,这种方式比较自由,定制度高,需要实现下面几个方法
(1) onMeasure()
(2) onLayout()
(3) onDraw()
执行顺序为:onMeasure()
->onLayout()
-> onDraw()
。
View事件分发机制:
自定义view 的时候,我们需要响应用户的各种事件,这个时候我们就需要了解View的事件分发机制了。
关于事件分发机制,看一张比较经典的图(U型图):
当这几个方法都调用super 的时候,整个事件会走完这个U型图。
事件分发机制这一块还是比较难理解的,更多详解请查资料。
App 的几种架构
-
MVC
-
MVP
-
MVVM
常见的三种架构,根据自己的业务需要选择,每种架构都有自己的有点和缺点,另外,我觉得一个APP 中,多种架构是可以并存的,比如:MVC和 MVP 。一个非常简单的展示界面,不必为它弄一个 P 层,反而变得复杂了。
3 . Android 动画
(1) Android 中的5种基础动画
-
平移动画
-
缩放动画
-
旋转动画
-
Alpha 动画
-
帧动画
(2) 属性动画
补间动画很简单,但是它的场景使用很有限,它只能对一个View做动画。有的时候,我们需要更为精准的控制,我们要控制一个属性来做动画,这个时候属性动画就派上用场了。属性动画的几个相关类:
-
ObjectAnimator
-
ValueAnimator
-
AnimatorSet
属性动画用得就比较广泛了,属性动画 + 自定义View 配置 Path和贝塞尔曲线 能做出很多复杂的漂亮的效果。
最后
由于文章篇幅原因,我只把面试题列了出来,详细的答案,我整理成了一份PDF文档,这份文档还包括了还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 ,帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
有的时候,我们需要更为精准的控制,我们要控制一个属性来做动画,这个时候属性动画就派上用场了。属性动画的几个相关类:
-
ObjectAnimator
-
ValueAnimator
-
AnimatorSet
属性动画用得就比较广泛了,属性动画 + 自定义View 配置 Path和贝塞尔曲线 能做出很多复杂的漂亮的效果。
最后
由于文章篇幅原因,我只把面试题列了出来,详细的答案,我整理成了一份PDF文档,这份文档还包括了还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 ,帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!