关于【android软件工程师】:android工程师需要掌握什么(软件开发自学步骤),今天犇犇小编给您分享一下,如果对您有所帮助别忘了关注本站哦。
1、android软件工程师:android工程师需要掌握什么(软件开发自学步骤)
最近有一个朋友向我问了一个这样的问题:
作为一个应用开发工程师,在网上有看到过大家都说了解系统源码,例如四大组件启动流程及IPC,Binder通信原理这些。而且我也有去看过,也觉得源码写的确实很精彩。但是,好像发现对实际工作上的帮助好像不太大。阅读framework源码是在性能调优上以及自己开发框架轮子等有帮助吗还是?
今天就以这个问题给大家讲解一下framework相关知识。
Framework的重要性
其实不需要别的,你去 Github 上看一下 腾讯 Matrix 的源码,就知道 Framework 的知识有多重要了。
像掉帧监控,函数插装,慢函数检测,ANR 监控,启动监控,都需要对 Framework 有比较深入的了解,才能知道怎么去做监控,利用什么机制去监控,函数插桩插到哪里,反射调用该反射哪个类哪个方法哪个属性……
另外 Framework 作为 Android 框架层,为 App 提供了众多 API 去调用 ,但是很多机制都是 Framework 包装好了给 App 来用的,如果不知道这些机制的原理,那么很难去在这基础上做优化。
举个例子,如果你了解 Android App 的启动机制,优化启动速度的时候会更得心应手:
定制什么样的 StartingWindow;什么时候可以拿到图片的宽高;DelayLoad 怎么做才会更合适;Service 什么时候启动可以不影响启动速度;Activity onResume 回调的时候真的可见了么?Redex 为什么会加快应用启动速度?
再比如我们经常说的 Handler,MessageQueue,Looper。看源码你就可以更好的理解那些概念:ThreadLocal 做什么的;Thread 和 Handler 的关系;为什么不能在子线程更新 UI?
再比如说 Android 的进程管理机制。AMS 把 Android 进程按照一定的规则,设置不同的优先级,在内存比较低的时候,高优先级的 App 比低优先级的 App 更不容易被系统干掉!那么 AMS 是按照什么规则来设置优先级的呢?了解这些规则是不是可以提高 App 的存活率呢?这都是可以通过熟读 AMS 代码知道的。
再比如说 Activity 启动的模式,可能你会熟练使用各种模式,但是如果你学习 Framework 中 Activity 和进程的管理,知道 Activity 栈和 Task 的管理。那么你会对这启动模式的使用更加深刻。
再比如说 View 中的 Hardware Layer,如果你只知道“在动画开始前将 View 设置为 Hardware/Software Layer ,做完动画再设置回去”,那么你会发现,在有些场景下,这么做会让动画变流畅,但是某些情况下动画会变得更差。如果不了解 View 的 Hardware/Software Layer 的实现机制,盲目地给所有动画都这么设置,那么性能问题是在所难免的。
再比如说 Android 的卡顿掉帧问题,很多文章都说卡顿是由于主线程耗时造成的,这其实只是一部分,其他的比如 RenderThread 耗时也会导致卡顿、Binder 通信耗时也会导致卡顿,60 fps 下没问题的 app 90fps 下也可能会卡顿,有时候低内存下你主线程读个文件可能都会导致卡顿。真正明白了卡顿的原理,再面对卡顿问题就不会那么慌了(Choreographer,VSync,SurfaceFlinger,Binder)。
正所谓知其然知其所以然,API 只是 Android 开发的一部分,底层的实现庞大而又复杂,不用心去读源码很难将知识点深入理解。
以上只是个人的一些拙见,希望可以帮到你!
面试中那些Framework相关的问题
通常作为一个Android APP开发者,我们并不关心Android的源代码实现,不过随着Android开发者越来越多,企业在筛选Android程序员时越来越看中一个程序员对于Android底层的理解和思考,这里的底层主要就是Android Framewok中各个组件的运行原理,例如Binder的运行机制、ServiceManager的作用等等。
在Android面试中,关于 Framework 的问题是必备的,但是这些关于字节跳动 Framework 的高频面试题你都掌握了吗?
比如字节面试官常问的Framework问题知识点:
1.AMS 、PMS
2.Activity 启动流程,App 启动流程
3.Binder 机制(IPC、AIDL 的使用)
4.为什么使用 Parcelable,好处是什 么?
5.Android 图像显示相关流程,Vsync 信号等
…….
Android Framework 高频面试题解析
怎么学习Framework?
阅读源码永远是学习最快的方式。
2、普通Android开发如何进阶为Android高级工程师?
可能有很多朋友在做了多年技术之后都会进入一个迷茫期,对自己所负责的业务逻辑非常熟悉,但是每天就只是和各种需求和Bug打交道而已,总感觉对自身能力的提升并不大。虽然在公司里属于不可缺少的一员,但是同时又担心离开了这家公司就找不到更好的工作了。
有这种焦虑的朋友或许应该思考一下这个问题:如何提升自己在 Android 市场上的竞争力?
这里给大家几个方向,希望能够给有着相同问题的朋友提供一点帮助~
一、提升通用技术能力
The more things change, the more important it is to know the underlying principles.
当你觉得进入到迷茫或者瓶颈期的时候其实更应该注重基础,也就是更加通用的技术。
一来通用技术如数据结构和算法、计算机网络、操作系统、计算机系统结构等,对技术的深层理解有很大的帮助,二来这类技术在不同的语言和技术方向上切换时是共通的。
二、提升软实力
软实力实际上也是一项通用的技能,甚至比第一条更加通用。
良好的沟通可以缩短开会的时长、节省相互之间的沟通成本,也使得团队合作更加愉快。不错的文档表达能力可以省去不少的重复沟通。
懂得规划自己的时间,上班时能更有条不紊地完成任务,下班也能高效地规划业余时间的学习。
懂得反思:为什么这个任务预计五小时能完成,却变成了三天;为什么这个需求要这样做,这么做是最合理的吗,还有更好的方式吗?
对问题、业务和自身的更多思考有助于更好地发挥和展现你的技术实力。
三、选择一个细分领域不断深入
可能一个较好的学习方式是先广度优先遍历,即粗略了解自己领域的各方面知识,然后深度优先遍历,即选择一个自己感兴趣或者觉得值得深入的方向深挖下去,等到这个方向学习研究得差不多了,再去深入下一个方向的技术知识。例如:
插件化技术、响应式编程、组件化框架、系统架构等进阶技术,承托着业务之下的基础框架,能够使得开发者在面对需求和功能变化的时候有更快的反应和更优雅的行动。
业务逻辑日渐成熟的形势下,用户体验越来越重要,突然的软件崩溃或是加载图标持续5秒,对于高质量应用都是阻碍。渲染速度、网络请求体验、I/O优化、热修复技术、耗电优化,都是性能优化需要重视的点。
Android 现在细分的领域非常多,应用开发、音视频、物联网、逆向安全、SDK开发等等,可以在这些领域中选择一个并不断深入。若是从时代背景的角度考虑,当下处于信息时代,用户接收和喜爱信息传播的形式一路从文字、图片、音频、视频,到了如今的直播。音视频会是一个不错的选择。其中会涉及到音视频编解码和音视频同步处理、特效处理、合成等等技术,对于 Android 底层源码的理解也十分有帮助。
四、学习方法与具体路线
关于具体的学习方法,一般来说有以下几个方向
- 学习一线大厂的各项技术
- 定期面试
- 报名培训机构
- 多看大佬的学习笔记,学习大佬的设计思想
学习一线大厂的各项技术:
各大一线大厂就是我们的技术先驱,不仅有各种技术,还有很多令你大开眼界的使用方法和对底层原理的理解,参照学习更加有利于自身竞争力的提高,深入学习更是可以有效提高自身的学习效率
推荐这份引领行业的脑图《对标腾讯70W+年薪Android高工技能成长路线》可以查漏补缺,有针对性的系统提升
这份成长路线将Android开发知识点细分为九大板块,每一个专题板块都是非常值得我们去深入了解其原理的,每块内容都配套有对应的文档资料,可以将Android核心知识点全部串联起来,实现系统性的学习。
有需要完整版的朋友,只需私信我【核心笔记】即可免费获取!
1. 项目开发必备底层技术
不光是一线大厂,各大互联网公司Android研发岗位都要求有扎实的Java基础,并要求Android开发者掌握其原理,这一个部分就是Android开发中最常用的Java相关知识。
Android以Java语言为基础,以虚拟机为核心,经过Daivlk虚拟机再到Art虚拟机演变,所以需要学两大底层:一个是Java语言底层,一个是虚拟机底层。
Java底层涵盖:Java序列化、泛型与反射、JDK高级动态代理、 Java高级并发原理详解。
虚拟机底层涵盖:虚拟机层类加载机制、Android虚拟机原理剖析、dex运行机制,Android内存,高级数据结构与算法。
这部分通常是入门就要掌握了的,但是很多开发者追求速成,往往造成自身的基础不牢固,工作多年以后还需要回过头来补习相关内容,这样就非常的得不偿失。
Java知识点汇总:序列化、注解、泛型、反射、虚拟机、并发、Java IO、编译时技术、动态代理、高级数据结构与算法等
2. Android R Framework源码与UI
Android Framework在一个系统中处于内核层之上,为顶层应用提供接口,被设计用来帮助开发者快速开发顶层应用,而不必关心系统内核运行机制,通常Framework都会隐藏main函数等应用程序必须的组件,开发人员只需把精力放在功能代码的实现上。说简单点,Framework具体的工作也就是为android应用开发的开发人员提供了一系列的服务和API的接口。
另外,UI其实并不是单纯指用户看到的效果。因为在Android开发中,每个控件背后都有一套深层次的体系在支撑,自然而然,会UI不单纯指的是会自定义控件,我们还应该知道自定义控件背后的执行流程,包括从Activity的创建,XML的解析,到每个控件的测量、布局、绘制。当然在中间还夹杂着比如动画、事件分发机制、嵌套滑动机制等知识点。还有谷歌提供的一些UI框架也使我们要掌握的对象,比如Jetpack组件库、Material Design等。
Framework知识点汇总:系统启动流程、AMS、PMS、WMS、Zygote、Init、Handler、Binder等
UI知识点:UI绘制原理、事件分发机制原理、插件换肤、属性动画、RecycleView、高阶贝塞尔曲线、SWG矢量图形打造不规则控件等
Jetpack知识点:Lifecycle、ViewModel、LiveData、Navigation、Room、WorkManager内核、Pagging原理、DataBinding等
3. 大厂内部APP调优方案
作为一个Android程序员,性能优化是无法避开的事情,并且性能优化也是Android中最有挑战的工作之一,更是每个工程师都需要掌握的核心技能。
性能问题和Bug不同,后者的分析和解决思路更清晰,很多时候从应用日志即可直接找到问题根源,而性能问题,其排查思路更为复杂一些。
对App进行性能优化,是一个系统性的工程,对工程师的技术广度和技术深度都有所要求。一个简单的应用,它不仅包含了应用代码本身,还和虚拟机、存储、网络等紧密相关,线上应用一旦出现了性能问题,需要我们从多方面去考虑。
性能优化知识点汇总:启动优化、UI渲染优化、崩溃优化、内存优化、卡顿优化、存储优化、网络优化、耗电优化、多线程并发优化、安装包优化等
4. 引领5G时代 高级音视频技术
互联网信息的传播与娱乐方式历经了从文字到图片再到音视频的转变,现如今以抖音为首的各类视频平台更是如日中天,特别是5G时代的全面到来,互联网将会迎来对音视频开发者的需求井喷。
现在市场中使用音视频技术的公司太多了,大到全民观看短视频,小到直播带货,每个人使用手机的时间也基本被音视频占据着。
在目前的大环境下,如果app只是图文的方式展现,已经远远不能满足用户的需求,在5G普及过程中,这种app也会变得越来越少,所以各家公司都在不断的往音视频方向转型,这就必然的催生出大量音视频工作岗位,但相关的人才却是少之又少,音视频相关岗位的薪酬自然是水涨船高。
音视频技术知识点汇总:C/C++、JNI、H.265/H.265、MediaCodec、音视频剪辑、音视频直播、OpenGL与音视频解码、OpenGL特效、FFmpeg万能播放器、Webrtc音视频通话等
5. 对标腾讯T3.3架构师 架构技术
“没有最好的架构,只有最合适的架构。”
架构这块主要是对各大主流框架和一线大厂核心框架进行剖析,理解其中原理,并学习架构设计思想。我们在架构设计中最本质的目的就是管理复杂度,你听过的各种思想、原则、方法大多都是为了控制复杂度而设计出来的。
而提升架构设计硬实力,唯有不断地实战,任何一个架构师都是身经百战的老兵!
架构设计思想、项目实践、演进笔记:
6. Gradle高阶实战
工欲善其事必先利其器
如何提供开发的效率?很多开发者在开发的过程中由于gradle不会用导致加载代码非常耗时,这些就是工作成本。还有就是git的使用可以帮我们管理好我们的代码,这个非常关键,因为这个工具可以让我们修改的代码不会因为错误的操作而导致代码丢失。另外,作为移动开发者至少需要知道如何抓取网络包,其中,最常用的stetho就是一个很好的可以进行网络抓包的工具
7. Kotlin入门到精通
Kotlin在2017年被作为Android一级开发语言,又在2019年被确立为Android的首选开发语言,这门语言近些年的发展得到了前所未有的支持和关注。在一些大厂的开发岗位中也对Kotlin语言青睐有加,越来越多的岗位对Kotlin语言掌握程度提出新的要求和标准,所以这块也是非常有必要深入学习的。
Kotlin知识点汇总:
8. Flutter 2.0 混合式开发
随着移动终端的多样性发展,一套代码适配多个平台已经成为移动开发者的终极梦想,跨平台技术也一直在发展中。
目前为止,我们移动端的跨平台开发技术经历了三个阶段,这三个阶段的代表框架分别是:Cordova、React Native 、Flutter 。
其中,Cordova虽然实用方便,但是受制于 WebView 的性能瓶颈。
React Native 利用 JS 引擎实现了跨平台能力,将 JS 控件,对应解析为平台原生控件进行渲染,虽然极大程度上实现了性能的优化与提升,但也同样存在性能等限制。
而Flutter 另辟蹊径,只要求平台提供一个 Surface 和一个 Canvas就可以了。
在跨平台技术追求的 性能、复用、高效 这三个终极目标上,Flutter占据了至高点。
而且,Flutter在大厂的面试过程中不仅经常被作为加分项,在某些岗位甚至是必问的内容,非常有必要深入了解。
Flutter知识点汇总:
9. 鸿蒙 2.0 系统专题
鸿蒙作为5G时代万物互联的时代性产品,历经了一段时间的发酵,现在再去讨论是不是Android套皮已经没有任何意义,它的出现直接改变了移动端物联网格局,在全世界范围内掀起一股热潮,作为国产系统也是经受了国内外媒体的验证,相信在不远的将来,鸿蒙系统将会在物联网领域产生非常重要的作用。
而物联网作为移动开发的细分领域,移动开发者掌握了鸿蒙开发必然掌握先机,在面试及企业项目中会产生意想不到的效果。
有需要完整版的朋友,只需私信我【核心笔记】即可免费获取!
定期面试:
光学习了一线大厂的技术还不够,如何了解当下Android市场需要哪些技术呢?如何明确自身技术薄弱点呢?
建议大家每隔一段时间就要出去面试一轮,不一定是为了找到好的工作,重点是要知道自己的优缺点是什么?知道市场目前需要什么样的人?
定期的面试让你及时了解当下市场需要哪些技术,也更加容易确定自身的短板在哪,同时,后续也可以更加有针对性的学习提升,并且在面试过程中遇到了你不太擅长的点,你也可以借机向面试官提问,趁机学习一波大厂的技术操作或是对底层原理的理解
而且,要是运气好,直接拿到了高薪Offer,岂不是更赚?
同样,因为面试你的也是同行,在沟通交流过程中也能够碰撞出不同的思想。
试想?如果你一直待在一家公司,都不知道外面的情况如何的话,那是非常可怕的,至少我这么认为。
报名培训机构:
我们对于培训机构总是褒贬不一,但是,不可置否,自己摸索和有人带你肯定是完全不一样的,学会站在巨人的肩膀上前行,要比自己埋头摸索要快很多。
多看大佬的学习笔记,学习大佬的设计思想:
比如上面有提到的《Android开发核心知识点笔记》、《大厂架构演进笔记》等等,每一个都是行业精品中的精品,如果只凭去百度学习的话,搜索出来的资料内容大多杂乱不系统,很多内容都是过时或者错误的,如果学习的方向不对,那不管有多么努力,注定是学不好的。
而且,笔记作者都是在大厂工作,会不定时的更新资料内容,让大家能够及时的学习大厂的先进技术与架构思想。
配合各种资料辅助学习:
在当下这个信息共享的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了
很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘。不少内容都是针对单个的技术问题,无法直接用到项目中去,并且因为很多内容都是几年前的,目前可能已经无法使用了,更不用说代码质量参差不齐,直接生搬硬套也无法适应项目需求迭代,非常不方便。
如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。
有需要完整版的朋友,只需私信我【进阶】即可免费获取!
好了,差不多就到这里了,希望以上内容可以帮助到大家~
最后,有段话想分享给大家:
“如果你热爱,那么请继续热爱,你的付出终将获得与之匹配的回报,如果眼前觉得没有希望,不妨再坚持一会,‘有时候,正是那些无人看好的,最终能成就无人能及的大事’ ”
道理就是这个道理,但是“大道理大家都懂”,而那些成功的人,就是把这些道理运用到了工作和生活当中……
不少人非常容易犯的一个错误就是”明明技术还没有达到一定程度,什么Android前景、技术发展根本影响不到,却以这种莫须有的借口来掩饰自己不愿提升、不愿学习的现状“
Android路漫漫,时代在进步,技术也在不断更替,只有不断地学习,不断地突破技术壁障,很多时候技术提升上来了,其他各方面也都会感觉非常如意
共勉!
本文关键词:android工程师是做什么的,对安卓开发工程师岗位的理解,android工程师要求,android工程师和java工程师,android开发工程师岗位要求。这就是关于《android软件工程师,android工程师需要掌握什么(普通Android开发如何进阶为Android高级工程师)》的所有内容,希望对您能有所帮助!更多的知识请继续关注《赛仁金融》百科知识网站:http://yzsryq.com/!
还没有评论,来说两句吧...