ndk 开发环境,个人开发者做一款 App 需要知道的事情,绝对干货
背景
坐标广州,五年 iOS 开发经验。
最近面试了一位工作 12 年的程序员,
这位老哥有 3 年 java 开发经验,2 年 H5,7 年 iOS 开发经验,简历上写着精通 Java,iOS,熟悉 H5 开发。没有具体的技术点。
说实话我很期待这位老哥的面试,于是让人事邀约了他。
老哥面试的气场很足,我也很尊敬他,一大波的自我介绍之后,我们进入了正题。
我问了他 Runloop,他说几乎没用过 Runloop,于是我给他举了个小例子,老哥给我的答案是百度可以解决。
于是我有问了他 KVC,老哥还是说不清楚,于是我问了最基础的 copy,weak 等几个关键词,依旧说不清楚,老哥依旧那么强势霸气,他给到我的感觉就是“为啥都会做,你别问这些没用的”。
看着他简历上写着,精通安卓 iOS 开发,熟悉跨平台开发,js 交互,我问了一句了解 Flutter 吗?他说不知道没听过,最后问了一句期望薪资他说 25k,我不知道问什么了,于是匆匆结束了面试。
二、JetPack 里的组件

上图就是 JetPack 中包含的组件列表,每个组件都是相对独立的,可以被单独使用和构建。其中像被介绍的最多,也是最常被使用的 LiveData, ViewModel, Room, Navigation, WorkManager 之类的都发布了正式版,而 CameraX, Compose 之类的还处在 Alpha 版本,未正式发布,官方并不建议在生产环境中使用。
然后说下,JetPack 所有的组件都是基于 AndroidX 构建的,如果想在项目中使用 JetPack 需要先将项目中对 Support Lib 的依赖全部换成 AndroidX。
Android 目前已经发展了 11 年,可以说是比较成熟的技术了,一开始时框架很少,也没有什么规范,所有的代码都是要自己写,比如网络请求,数据库请求,数据解析等等。后来出现了一些框架来帮助开发者快速进行开发,比如 XUtils、Volley、OKHttp、EventBus 等,随着框架越来越多,一个应用可以有多种技术选型,直接导致应用开发越来越不规范,导致做出来的应用质量参差不齐,这显然不是谷歌想看到的。谷歌随后推出了 MVP 和 MVVM 相关的官方例子,效果很一般,而且覆盖面只是在架构上,Goole I/O 2018 大会上推出的 Android Jetpack 有望解决以上的问题。
三、Android Jetpack 简介
Jetpack 并不是一个框架或者组件,它是一套库、工具和指南的集合,可帮助开发者更轻松地编写优质应用。这些组件可帮助开发者遵循最佳做法、摆脱编写样板代码的工作并简化复杂任务,以便将精力集中放在所需的代码上。Android Jetpack 中的很多组件并不都是新开发的,而是很早就有了,比如在 Goole I/O 2017 大会时推出了 Android Architecture Component(AAC),它包括了 LifeCycle、LiveData、ViewModel、Room。在 Goole I/O 2018 大会上,用 AndroidX 替代了 Android Support Library,并在 Android Architecture Component 的基础上发布了 Android Jetpack,AndroidX 也是属于 Android Jetpack。
Jetpack 主要特性有以下三点:
1.加速开发组件可单独使用,也可以协同工作,当使用 kotlin 语言特性时,可以提高效率。
2.消除样板代码 Android Jetpack 可管理繁琐的 Activity(如后台任务、导航和生命周期管理)。
3.构建高质量的强大应用 Android Jetpack 组件围绕现代化设计实践构建而成,具有向后兼容性,可以减少崩溃和内存泄漏。
四、Android Jetpack 分类
下图是 Jetpack 的分类。

谷歌仍旧不断的完善 Android Jetpack,截至到 2019 年 8 月已经有很多新加的组件并没有显示在上图中,比如 CameraX 等。Android Jetpack 分类有 4 种,分别是 Architecture、Foundationy、Behavior、UI,下面分别介绍下。
1. Architecture(架构组件)
Architecture 指的是架构组件,帮助开发者设计稳健、可测试且易维护的应用。架构组件可以说是对应用开发帮助最大的组件,本系列也是围绕着架构组件进行讲解。
DataBinding:以声明方式将可观察数据绑定到界面元素,通常和 ViewModel 配合使用。
Lifecycle:用于管理 Activity 和 Fragment 的生命周期,可帮助开发者生成更易于维护的轻量级代码。
LiveData: 在底层数据库更改时通知视图。它是一个可观察的数据持有者,与常规 observable 不同,LiveData 是生命周期感知的。Navigation:处理应用内导航。
Paging:可以帮助开发者一次加载和显示小块数据,按需加载部分数据可减少网络带宽和系统资源的使用。
Room:友好、流畅的访问 SQLite 数据库。它在 SQLite 的基础上提供了一个抽象层,允许更强大的数据库访问。
ViewModel: 以生命周期的方式管理界面相关的数据,通常和 DataBinding 配合使用,为开发者实现 MVVM 架构提供了强有力的支持。
WorkManager: 管理 Android 的后台的作业,即使应用程序退出或设备重新启动也可以运行可延迟的异步任务。
总结
学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!
最后如何才能让我们在面试中对答如流呢?
答案当然是平时在工作或者学习中多提升自身实力的啦,那如何才能正确的学习,有方向的学习呢?有没有免费资料可以借鉴?为此我整理了一份 Android 学习资料路线:

这里是一部分我工作以来以及参与过的大大小小的面试收集总结出来的一套 BAT 大厂面试资料专题包,在这里免费分享给大家,主要还是希望大家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家。需要的小伙伴们可以点击我的GitHub获取免费领取方式

好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,可以去我的主页加一下技术群。来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。
最后,祝愿即将跳槽和已经开始求职的大家都能找到一份好的工作!
这些只是整理出来的部分面试题,后续会持续更新,希望通过这些高级面试题能够降低面试 Android 岗位的门槛,让更多的 Android 工程师理解 Android 系统,掌握 Android 系统。喜欢的话麻烦点击一个喜欢再关注一下~
评论