IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 分享一些重要的Android面试题,字节跳动最新开源 -> 正文阅读

[移动开发]分享一些重要的Android面试题,字节跳动最新开源

2.自增操作有三步,此时多线程写会出现问题
4.cas

1.操作:内存值V、旧的预期值A、要修改的值B,当且仅当预期值A和内存值V相同时,将内存值修改为B并返回true,否则什么都不做并返回false。
2.解释:本地副本为A,共享内存为V,线程A要把V修改成B。某个时刻线程A要把V修改成B,如果A和V不同那么就表示有其他线程在修改V,此时就表示修改失败,否则表示没有其他线程修改,那么把V改成B。
3.局限:如果V被修改成V1然后又被改成V,此时cas识别不出变化,还是认为没有其他线程在修改V,此时就会有问题
4.局限解决:将V带上版本。
5.线程不安全到底是怎么回事:

1.一个线程写,多个线程读的时候,会造成写了一半就去读
2.多线程写,会造成脏数据
ASYNCTASK和线程池,GC相关(怎么判断哪些内存该GC,GC算法)

1.Asynctask:异步任务类,单线程线程池+Handler

2.线程池:

1.ThreadPoolExecutor:通过Executors可以构造单线程池、固定数目线程池、不固定数目线程池。

2.ScheduledThreadPoolExecutor:可以延时调用线程或者延时重复调度线程。

3.GC相关:重要

1.搜索算法:

1.引用计数

2.图搜索,可达性分析

2.回收算法:

1.标记清除复制:用于青年代

2.标记整理:用于老年代

3.堆分区:

1.青年区eden 80%、survivor1 10%、survivor2 10%

2.老年区

4.虚拟机栈分区:

1.局部变量表

2.操作数栈

3.动态链接

4.方法返回地址

5.GC Roots:

1.虚拟机栈(栈桢中的本地变量表)中的引用的对象

2.方法区中的类静态属性引用的对象

3.方法区中的常量引用的对象

4.本地方法栈中JNI的引用的对象

JAVA类加载过程:

1.加载时机:创建实例、访问静态变量或方法、反射、加载子类之前
2.验证:验证文件格式、元数据、字节码、符号引用的正确性
3.加载:根据全类名获取文件字节流、将字节流转化为静态储存结构放入方法区、生成class对象
4.准备:在堆上为静态变量划分内存
5.解析
:将常量池中的符号引用转换为直接引用
6.初始化:初始化静态变量
MVC、MVP、MVVM:

1.mvc:数据、View、Activity,View将操作反馈给Activity,Activitiy去获取数据,数据通过观察者模式刷新给View。循环依赖
1.Activity重,很难单元测试
2.View和Model耦合严重
2.mvp:数据、View、Presenter,View将操作给Presenter,Presenter去获取数据,数据获取好了返回给Presenter,Presenter去刷新View。PV,PM双向依赖
1.接口爆炸
2.Presenter很重
3.mvvm:数据、View、ViewModel,View将操作给ViewModel,ViewModel去获取数据,数据和界面绑定了,数据更新界面更新。
1.viewModel的业务逻辑可以单独拿来测试
2.一个view 对应一个 viewModel 业务逻辑可以分离,不会出现全能类
3.数据和界面绑定了,不用写垃圾代码,但是复用起来不舒服
APK瘦身:

1.classes.dex:通过代码混淆,删掉不必要的jar包和代码实现该文件的优化

2.资源文件:通过Lint工具扫描代码中没有使用到的静态资源

3.图片资源:使用tinypng和webP,下面详细介绍图片资源优化的方案,矢量图

4.SO文件将不用的去掉,目前主流app一般只放一个arm的so包

ANR的形成,各个组件上出现ARN的时间限制是多少

1.只要是主线程耗时的操作就会ARN 如io

2.broadcast超时时间为10秒 按键无响应的超时时间为5秒 前台service无响应的超时时间为20秒,后台service为200秒

SERIALIZABLE和PARCELABLE 的区别

1.P 消耗内存小

2.网络传输用S 程序内使用P

3.S将数据持久化方便

4.S使用了反射 容易触发垃圾回收 比较慢

SHAREDPREFERENCES源码简述

1.储存于硬盘上的xml键值对,数据多了会有性能问题

2.ContextImpl记录着SharedPreferences的重要数据,文件路径和实例的键值对

3.在xml文件全部内加载到内存中之前,读取操作是阻塞的,在xml文件全部内加载到内存中之后,是直接读取内存中的数据

4.apply因为是异步的没有返回值, commit是同步的有返回值能知道修改是否提交成功

5.多并发的提交commit时,需等待正在处理的commit数据更新到磁盘文件后才会继续往下执行,从而降低效率; 而apply只是原子更新到内存,后调用apply函数会直接覆盖前面内存数据,从一定程度上提高很多效率。 3.edit()每次都是创建新的EditorImpl对象.

ANR的形成,各个组件上出现ARN的时间限制是多少

1.只要是主线程耗时的操作就会ARN 如io
存,后调用apply函数会直接覆盖前面内存数据,从一定程度上提高很多效率。 3.edit()每次都是创建新的EditorImpl对象.

ANR的形成,各个组件上出现ARN的时间限制是多少

1.只要是主线程耗时的操作就会ARN 如io

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-01-28 12:02:03  更:2022-01-28 12:02:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:34:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码