• 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和贝塞尔曲线 能做出很多复杂的漂亮的效果。

(3)矢量动画

  • svg

  • VectorDrawable

  • AnimatedVectorDrawable

矢量动画大家可能比较陌生,Android Studio 支持将一个Svg 文件导入生成一个path 路径,用VectorDrawable 和AnimatedVectorDrawable 来实现矢量动画。但是需要在Android5.0 以上。

4 . Material Design 系列

Android 5.0 开始,Google 推出了 Material Design 设计规范,Android support 包中也加入了符合Material Design 设计规范的各种控件:

最后

总而言之,Android开发行业变化太快,作为技术人员就要保持终生学习的态度,让学习力成为核心竞争力,所谓“活到老学到老”只有不断的学习,不断的提升自己,才能跟紧行业的步伐,才能不被时代所淘汰。

在这里我分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司19年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。需要的朋友可以私信我【资料】或者 点这里 免费领取

还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。 领取地址: Android学习PDF+架构视频+最新面试文档+源码笔记

链图片转存中…(img-SJ6M9aUs-1643952530885)]

[外链图片转存中…(img-njMd9g62-1643952530886)]

[外链图片转存中…(img-pn53P288-1643952530886)]

还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。 领取地址: Android学习PDF+架构视频+最新面试文档+源码笔记

Android程序员该如何进阶?,2021Android面经相关推荐

  1. Android程序员该如何进阶学习以预防35岁中年职场危机?

    一.大家都在担心的问题 不只是Android,很多程序员都在担心业界的"35岁危机",担心自己到35岁后就被市场淘汰. 比如最近就经常被大家问到这样的问题,比如这样的: 大佬好,目 ...

  2. Android程序员的进阶之路

    本文主要论述的是Android程序员的进阶之路,博主本人就是一名android开发攻城狮,所以这里讲述的大多数是android开发攻城狮的技术进阶之路,如有问题请多指正. 大家都知道程序员之中有有菜鸟 ...

  3. android开发培训!作为一个Android程序员你还不会JetPack?安卓系列学习进阶视频

    开头 让我们一起来看看,字节跳动的第三面,面试官都问了什么?(第一二面的题目及答案已整理,需要的可以在文末领取) 从七月中旬开始,我前前后后差不多一共投递了八十份简历,到目前为止,我参加面试的面试有十 ...

  4. Android程序员如何有效提升学习效率?帮你突破瓶颈

    背景 惯例,先简单陈述一下自己的,91年生人,164年三本毕业后在深圳工作,末流小公司,工资13k,无房,无车,无户口. 那时候感觉生活也还行,父母有退休金,我基本上不用太操心,女朋友在一起很久了,很 ...

  5. Android程序员重头学Synchronized

    面试官:能说说 Synchronized 吗? 答:Synchronized 是Java的一个关键字,使用于多线程并发环境下,可以用来修饰实例对象和类对象,确保在同一时刻只有一个线程可以访问被Sync ...

  6. 2020倒计时,大厂核心送给每一个脚踏实地努力着的Android程序员,逆风前行

    Android前景的压力: 面试的压力: 寒冬的压力: <Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义>开源 年龄的压力: 等等- 其实每个人都有自己的 ...

  7. Android程序员现状:没有架构师的命,却得了架构师的病!

    Android开发的现状貌似已经是一个老生常谈的问题了.但今天不想写Android开发的现状,什么Android前景如何.Android凉凉之类被别人写烂了的话题. 今天我们来聊聊我们自己,我们And ...

  8. Android程序员春招三面蚂蚁金服,7年老Android一次坑爹的面试经历,先睹为快

    本专栏专注分享大型Bat面试知识,后续会持续更新,喜欢的话麻烦点击一个关注 面试官: 音视频是什么,视频为什么需要压缩 心理分析:很多人对音视频的概念停留在 苍老师的小电影上,只能理解他是一个视频文件 ...

  9. Android程序员接下来的路该如何走?

    随着"5G"(第五代移动通信技术)商用进程越来越快,各个芯片和终端厂商们都已经开始布局准备,想必智能手机会是消费者最先能够接触到5G的重要终端,而和其相辅相生的移动互联网也势必会有 ...

最新文章

  1. 都说区块链颠覆未来,区块链究竟能改变什么?
  2. 黄聪:C# MP3操作类,能播放指定的mp3文件,或播放嵌入的资源中的Mp3文件
  3. rebar Erlang构建工具(转)
  4. [bug解决] IndentationError unindent does not match any outer indentation level
  5. 算法工程师当前选哪个方向好?1,计算机视觉;2,自然语言处理;3,风控;4,推荐系统?...
  6. 页面性能优化的利器 — Timeline
  7. 端口冲突,可爱的8080
  8. 运行java SWT例子
  9. 智能电网调度技术支持系统建设方案
  10. echarts 圆饼图空心中间加文字
  11. Objective-C基础之闭包
  12. 为什么webview中网页字体大小跟样式设置的不同?
  13. Python爬取网易云音乐热评(附源码)
  14. 手机计算机国二支付,“刷手机”时代悄然来临 手机支付呼唤国家标准(二)...
  15. [ZT]:fancy设置latex页眉页脚
  16. 牛客网力扣算法编程之十四 | 字符串 - 字符个数统计 - Java代码实现
  17. vs2013开发简单ATL ocx控件
  18. 论文阅读-ViTDet:Exploring Plain Vision Transformer Backbones for Object Detection
  19. 嵌入式linux系统前景,嵌入式前景怎么样?是否已经饱和?
  20. 思科,华三,H3C命令

热门文章

  1. win系统的VBS脚本简易教程
  2. Fluent验证案例05:管道中的泊肃叶流动
  3. 计算机二级c 试题 答案,200409计算机二级C笔试试题(含答案)
  4. 你为什么错过优质信息?
  5. 【前端领域】3D旋转超美相册(HTML+CSS)
  6. (损人损己)做代码质量检查差事最易得罪人,大多是为公司干好事给自己树敌的差事...
  7. pg_hint_plan 使用hint固定SQL执行计划
  8. 台式机fiddler手机抓包
  9. wifipumpkin3启动报No such file or directory: b‘liblibc.a‘
  10. [Win32] 窗体暗色模式, C++, WinForm, WPF 使用方法, 判断颜色模式, 响应颜色变更消息, 设置标题栏暗色.