写点什么

新鲜出炉的 Android“面筋”,kotlininline 函数

用户头像
Android架构
关注
发布于: 19 小时前

第二部分

1.类加载机制,双亲委托


[https://www.cnblogs.com/iteacat/p/12569008.html](


)


2. Synchronized volatile 关键字,volatile 修饰基本数据类型和自定义类型区别,volatile 底层实现


volatile 本质是在告诉 jvm 当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;synchronized 则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。


volatile 仅能使用在变量级别;synchronized 则可以使用在变量、方法、和类级别的


volatile 仅能实现变量的修改可见性,不能保证原子性;而 synchronized 则可以保证变量的修改可见性和原子性


volatile 不会造成线程的阻塞;synchronized 可能会造成线程的阻塞。


volatile 标记的变量不会被编译器优化(指令重排);synchronized 标记的变量可以被编译器优化


[https://blog.csdn.net/u014674862/article/details/89168376](


)


3. 四种引用类型


强引用:不会被回收


软引用:内存不足时回收


弱引用:GC 就会回收


虚引用:N/A


4. ContentProvider 实现原理(如何跨进程)


getContentResolve->ApplicationContentResolver->ContentProviderProxy<===IBidner====>Transport->NameProvider


[https://www.jianshu.com/p/147169640798](


)


5. 发起一个 https 请求有哪些过程


  • 客户端向服务器发起 HTTPS 的请求,连接到服务器的 443 端口;

  • 服务器将非对称加密的公钥传递给客户端,以证书的形式回传到客户端

  • 服务器接受到该公钥进行验证,就是验证 2 中证书,如果有问题,则 HTTPS 请求无法继续;如果没有问题,则上述公钥是合格的。(第一次 HTTP 请求)客户端这个时候随机生成一个私钥,成为 client key,客户端私钥,用于对称加密数据的。使用前面的公钥对 client key 进行非对称加密;

  • 进行二次 HTTP 请求,将加密之后的 client key 传递给服务器;

  • 服务器使用私钥进行解密,得到 client key,使用 client key 对数据进行对称加密

  • 将对称加密的数据传递给客户端,客户端使用非对称解密,得到服务器发送的数据,完成第二次 HTTP 请求。


这里还问我证书是如何传递到客户端的,有点懵,不知道是不是想问 Android 如何验证证书


6. 有序广播无序广播区别,被拦截后超时机制


普通广播:只要 intentFilter 的 action 匹配,则会接收此广播


有序广播:发送出去的广播被广播接收者按照按照 Priority 属性值大小先后顺序接收,先接受的 receiver 可以对广播进行修改和截断


这里的超时是指,Android 系统(AMS)向一个广播接收器发送无序广播时,


并不需要等待该广播接收器返回结果,就会继续向下一个广播接收器发送广播。但是,当 Android 系统发送有序广播时,将会等待前一个广播接收器返回结果后(除非处理超时), 才会继续发送向下一个广播接收器发送广播。


这个超时时间还真不知道


7. 进程优先级分类


前台进程>可见进程>服务进程>后台进程>空进程


8. AMS 管理的栈有哪几类


这里的栈要区别与所说的 Activity 启动模式的栈(task)


为了让这许多 Activity 协同工作而不至于产生混乱,Android 平台设计了 ActivityStack 机制用于管理 Activity,其遵循先进后出的原则,系统总是显示位于栈顶的 Activity,从逻辑上将,位于栈顶的 Activity 也就是最后打开的 Activity, 这也是符合逻辑的。


在操作应用程序时,每次启动新的 Activity,都会将此压入 Activity Stack,当用户执行返回操作时,移除 Activity Stack 顶上的 Activity,这样就实现了返回上一个 Activty 的功能。直到用户一直返回到 Home Screen,这时候可以理解为移除了 Activity Stack 所有的 Activity,这个 Activity Stack 不再存在,应用程序也结束了运行.


共五种:


  1. HOME_STACK_ID


Home 应用以及 recents app 所在的栈


  1. FULLSCREEN_WORKSPACE_STACK_ID


一般应用所在的栈


  1. FREEFORM_WORKSPACE_STACK_ID


类似桌面操作系统


  1. DOCKED_STACK_ID

  2. PINNED_STACK_ID


画中画栈


9. uid 机制


uid: Android 系统中 uid 用于标识一个应用程序,uid 在应用安装时被分配,并且在应用存在于手机上期间,都不会改变。一个应用程序只能有一个 uid,多个应用可以使用 sharedUserId 方式共享同一个 uid,前提是这些应用的签名要相同。

面试前做好准备战!

接下来将分享面试的一个复习路线,如果你也在准备面试但是不知道怎么高效复习,可以参考一下我的复习路线,有任何问题也欢迎一起互相交流,加油吧!


这里给大家提供一个方向,进行体系化的学习:


**1、看视频进


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


行系统学习**


前几年的 Crud 经历,让我明白自己真的算是菜鸡中的战斗机,也正因为 Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去 B 站进行学习,B 站上有很多学习视频,唯一的缺点就是免费的容易过时。


另外,我自己也珍藏了好几套视频,有需要的我也可以分享给你。


2、进行系统梳理知识,提升储备


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


系统学习方向:


  • **架构师筑基必备技能:**深入 Java 泛型+注解深入浅出+并发编程+数据传输与序列化+Java 虚拟机原理+反射与类加载+动态代理+高效 IO

  • **Android 高级 UI 与 FrameWork 源码:**高级 UI 晋升+Framework 内核解析+Android 组件内核+数据持久化

  • **360°全方面性能调优:**设计思想与代码质量优化+程序性能优化+开发效率优化

  • **解读开源框架设计思想:**热修复设计+插件化框架解读+组件化框架设计+图片加载框架+网络访问框架设计+RXJava 响应式编程框架设计+IOC 架构设计+Android 架构组件 Jetpack

  • **NDK 模块开发:**NDK 基础知识体系+底层图片处理+音视频开发

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
新鲜出炉的Android“面筋”,kotlininline函数