2024年Android最全360资深Android开发带你入门Framework,2024年最新面试高频词汇

学习福利

【Android 详细知识点思维脑图(技能树)】

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  1. binder的通信优势

这里先想到这些,注意不是要完成懂所有机制,要的是整体理解即可。如下问题,请思考下,看是否能够答上来。

如果我写了一个应用,名字叫做,com.codegg.home 在主activity里面,加载一个布局,layout_main. xml,布局里面写入了一个TextView,那么我想调试这个TextView,要在com.codegg.home这个进程下断点,还是在system_server进程下断点呢?如果是想调试ActivityThread. java的话?应该在哪个进程下断点呢?

以上答案,都是com.codegg.home下断点,原因是这两个当前的运行进程,都是在com.codegg.home里,所以要调试的话,要在com.codegg.home进程下断点。

那么我们再来思考下,我现在要去追应用的启动过程,start Activity的流程,要在哪个地方下断点呢?

我们知道这个流程,最终核心的都在Activity manager server里面,而它是在system server进程里面,以一个线程的状态存在,于是我们要调试,就要在system server上面下断点了。

搞清楚了system server后,以我们熟悉的AMS WMS PMS 举例。这些服务线程,完成应用的请求任务,将结果返回给应用。比如查看当前运行的所有Activity,就是应用发起请求,从操作系统那里,先找到server manager,这个手里拿到一堆服务的句柄,也可以说令牌,你只能通过这个找到它。

当server manager一看你有权限,就帮你把对应的AMS的句柄给你,这个句柄操作系统也认识,对应到system server的AMS引用上,也就是你通过这个句柄,调用它的方法,操作系统就会将你的请求,传递到system server中去,同时操作系统知道这个句柄是AMS的第20号(这个20号代表查询当前运行的所有Activity的方法),然后就唤醒system server,同时从binder线程池,这个线程跟AMS一样,是个线程,从线程池拿出一个,调用AMS的20号方法。

调用完成后,从操作系统层面,把数据交给调用的应用,实现数据传输。这里面定义的传递数据格式是包裹,也就是序列化数据。

image.png

##了解进程通信

好了,这块就说这么多,主要是说下进程通信,以及binder这种通信的简单逻辑。这里说下,为什么要通信。

因为操作系统设计,管理的软件单元是进程,进程间本身不联系,彼此看不见。一个进程想跟另一个说话,他两都认识的人是操作系统。因为他们是由操作系统管理的。操作系统通过从硬盘将程序装载进入内存,同时给每一个分配了进程号,于是他们就都在系统里面有了标记,同时每个都起了名字,一个叫我就喜欢吃,一个叫我就喜欢喝。喜欢喝的一个人孤单,他不认识喜欢吃的,他就问操作系统,有没有人喜欢吃的,操作系统一查,说有啊,然后把喜欢吃的的进程号给他,他就可以找到喜欢吃的了。

然后操作系统给他了一辆车,让他把想给喜欢吃的的东西,装在车上寄过去。这个车子是操作系统提供的,这个车子就是通信方式。比如汽车,飞机,步行。

于是进程间的通信方式就是,从操作系统找到目标,然后拿到通信方式,用操作系统给的通信工具,进行通信。

##数据结构和算法

这块完成了,我们再来讲一个内容:

文件=文件头+文件内容

我们发现,这里MP3格式,OGG格式,都属于一个文件的格式声明,这个我们可以用HEX工具打开MP3文件,可以看到刚开始的位置,这块属于描述后面的内容该如何解析,比如文件名字,文件大小,文件格式,系统根据这个描述,尝试用对应的解码器解码,解码完成后进行播放。

这里解码器如何解码,就是算法。而文件头,就是描述这个文件的数据结构。

于是,我们就知道

程序=数据结构+算法

比如我要写个贪吃蛇,如何描述蛇的状态,长度,当前轨迹,这些都是需要表征出来,然后围绕着这个描述内容,进行操作,这块就属于算法。

完成的程序,运行起来,就是进程。所以进程是一个存在于内存的东西,操作系统用一个表格记录进程数据,比如进程号,父类进程,进程打开的文件句柄,进程当前状态,进程的上下文(上下文是保存当前CPU的寄存器,保存现场用的,因为寄存器是只有一份,当一个进程被打断时候,另个进程运行,那么之前的就要把它当前的寄存器存下来,防止被别人盖掉,等到下次自己运行的时候,再恢复回来,保证自己运行正常),程序是存在硬盘或者其他存储设备,掉电不会丢失,而进程是内存的,所以掉电就不再了。

**程序如何加载,系统如何识别的呢?**这就又回到开头的地方,数据结构加算法,也叫文件头和文件内容。源码经过编译链接,变成一个文件,我们亲切的叫它可执行文件。那么我们来说说它。

我们常见的两种可执行文件,windows上面称为PE格式,linux称为ELF,两者都是从COFF格式演化来的,这块参考《链接器与加载器》,喜欢感兴趣,可以下载阅读此书。

360资深Android开发带你入门Framework

##程序是如何在CPU执行的?

那么有了格式描述,操作系统就知道如何解析它了,然后把对应的代码段,数据段,堆栈区域配置好,将代码装载进入内存中,然后将下一条执行位置,也就是PC寄存器,指向这个可执行文件配置的text 入口,这个就是程序的入口点,这个我们去写的main方法,可以简单理解成入口,实际情况是在这个前面,系统加入了一些代码,为运行此程序做准备,准备OK才会真正调用到main方法,这段代码叫创建此进程的环境,比如参数,堆栈初始化。

聊到这里,我们从别的纬度,再来看看。

数字电路的与或非逻辑电路,开启了新世界的大门。我们用断点,通电,表示两个状态。我们不能说,好像有电,好像没电,所以,计算机的世界,定义了二进制,因为是非可以界定,孰是孰非不好界定。

于是,在我们的电路板上,规定了0-0.6V,代表了没电,4.4-5V,代表了有电,中间的数值,代表了器件的错误,不稳定性。

于是没电用0表示,有电用1表示,实际世界就是两个区间电压。

CPU在石英晶振的推动下,执行一条条指令。指令是什么呢?就是一串串数字,每一串代表一个具体含义。

所以,CPU能够执行多少条指令,是考量它是否强大的一个重要参数,另一个是它执行一天指令的时间,也叫指令周期,越短越好。也就是两个CPU同时做一个加法,谁用时短谁就强。

CPU拿到一条指令,就会在石英晶振的推动下,将这条指令执行完,然后将PC寄存器加1,读取下一条指令。

我们经常遇到的非法指令,就是因为CPU拿到了一个不认识的数据串,导致异常。比如它的指令集里面,有加法,有减法,你给他说你给我翻个跟头(非法指令),他骂了一句去你的吧,老子不会(异常报错)。一般这种情况是指令不识别,比如你用了新的arm指令,又在旧的arm板子运行这个程序,就会挂掉,提示非法指令。

刚开始的操作系统,嵌入式的操作系统,是没有做内存保护,就是程序段可以跳到数据段执行,当然现在加入了内存管理单元,会将数据段内存描述成可读可写不可执行,如果PC(程序寄存器)指向了这个地方,去读取执行的时候,就会报非法访问。

如果没有保护,你去读取数据段的数据,作为指令执行,出现指令异常就太正常了。

好了,今天就给大家介绍这么多,有什么想方法或者建议欢迎留言评论。

【附】相关架构及资料

加群 Android IOC架构设计领取获取往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术,群内还有技术大牛一起讨论交流解决问题。

image

领取方式:

点赞+加群免费获取 Android IOC架构设计

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

bs.csdn.net/topics/618156601)**

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值