最近几个月没有上班,也没有认真的去回顾过去的知识!以至于今天回北京面试碰一鼻子灰,彻夜难眠,起来写下这篇博客总结经验,告诫自己,提醒大家!
记得有一次刷抖音,是一个听书的节目,说道这样一句话,什么是文化?文化是你学过的看过的,一段时间后还会记得的那些!
个人总结:忘了 还是不扎实!忘了 还是没学透!
一下摘要一些我认为比较偏僻的问题,分享一下
1 当前进程如何开启一个新的进程
很简单,当时确实把我问住了,就是把启动的activity或者service 在对应的清单文件中添加一个 android:process="XX"属性即可 分配一个新的内存地址创建一个新的进程
2 在项目中组件化你是怎么做的 两个module是如何跳转的
关于组件化由来的解答:一个项目刚开始都是采用中心化管理的思想,将相同的资源集中进行管理,但是做着做着,发现集中管理的资源太多了,多人开发时牵一发而动全身,进而又要对原本的项目进行拆分,故而出现了组件化开发!
具体详细的点击链接去看https://www.jianshu.com/p/d0f5cf304fa4
总结就是根据实际开发业务需求来选择组件式还是单一模式开发
两个module的跳转是依靠这里主要还是依赖阿里的ARouter框架来实现
具体点击链接https://blog.csdn.net/hzw2017/article/details/84204833
主要总结可以说通过ARouter,在需要交互的Activity/Fragment 类上用注解的形式指定该类的path(也叫设置该类的路由路径)利用接口回调传递数据,或者是利用ARouter的建造者模式携带数据跳转
还有一种方法也可以实现跳转不需要三方框架的
https://blog.csdn.net/fenggering/article/details/85332523
3热修复和热更新的原理,以及修复完成后会热启动还是冷启动?
现进到这里学习原理https://blog.csdn.net/itachi85/article/details/79522200
然后你就知道 有些三方是不需要重新启动的,腾讯的Tinker是需要重新启动app后才会去替换修改的dex文件
4 关于安卓Q10.0的版本适配
参考https://www.jianshu.com/p/887a0841ce97和https://www.cnblogs.com/bluestorm/p/10782927.html
主要变动存储条件 设备唯一标识符 后台定位权限 禁止应用后台弹页面
多媒体新特性 系统应用变更
5 关于sp
SharedPreferences简称Sp(后面都会称Sp),是一种轻量级的数据存储方式,采用Key/value的方式
进行映射,最终会在手机的/data/data/package_name/shared_prefs/目录下以xml的格式存在。
Sp通常用于记录一些参数配置、行为标记等!因为其使用简单,所以大多数开发者用起来很爽!但是
请注意:千万不要使用Sp去存储量大的数据,也千万不要去让你的Sp文件超级大,否则会大大影响应用性能,
甚至出现ANR,没错是ANR(下面会分析)。
6 webview 如何去掉广告
webview如何去掉广告,总结起来就一句话,通过注入js的方式删除h5页面的广告div节点内容就ok,如果注入js呢,在我们的webview加载里面有一个监听就是页面加载完成,onPageFinished这个方法,在里面通过loadUrl的形式把需要注入的js代码添加进去就OK,注入的js代码可以在这里看https://www.jianshu.com/p/d793c8d4ff81/
7 如何结束一个线程
有三种方法可以结束线程:
使用退出标志,使线程正常退出,也就是当run方法完成后线程终止
使用interrupt()方法中断线程,其实他不会立即终止线程,需要配合isInterrupt()来进行判断,用break跳出操作来终止当前线程
使用stop方法强行终止线程(不推荐使用,可能发生不可预料的结果)
https://www.cnblogs.com/liyutian/p/10196044.html
8 动画有哪些主要的类,插值器,估值器的介绍
地址:https://www.jianshu.com/p/5d090270a4f5
属性动画用到的类ValueAnimator ,ObjectAnimator,AnimatorSet
补间动画用到的类RotateAnimation(旋转)、ScaleAnimation(缩放)、AlphaAnimation(透明度)、TranslateAnimation(位移)、AnimationSet(组合)这5种。
帧动画用到的类 AnimationDrawable
插值器估值器地址:https://www.jianshu.com/p/915471529d3c
9 安卓中动画隔多久刷新一帧
10 Handler中MessageQueue的数据结构 ThreadLocal工作原理里
MessageQueue主要包含两个操作:插入和读取,插入和读取分为enqueueMessage和next,其中enqueueMessage是往消息队列中插入一条消息,next是从消息队列中去出一条消息并从消息队列中移除,MessageQueue实际上是使用单链表来实现的。
ThreadLocalThreadLocal是一个线程内部的数据存储类,通过它可以在指定的线程中存储数据,数据存储以后,只有在指定线程中可以获取到存储的数据,对于其它线程来说无法获取到数据。ThreadLocal另一个使用场景是复杂逻辑下的对象传递,比如监听器的传递,有些时候一个线程中的任务过于复杂,这可能表现为函数调用栈比较深以及代码入口的多样性,在这种情况下,我们又需要监听器能够贯穿整个线程的执行过程,这个时候可以怎么做呢?其实就可以采用ThreadLocal,采用ThreadLocal可以让监听器作为线程内的全局对象而存在,在线程内部只要通过get方法就可以获取到监听器
原文链接:https://blog.csdn.net/chenshuangma/article/details/79818210
地址:https://blog.csdn.net/chenshuangma/article/details/79818210
11一个线程中有几个looper 如何做到的
一个线程中只有一个looper
因为looper的构造方法是private私有的 然而要想创建looper就需要调用looper的prepare()方法 ,这个方法如果当前有一个looper存在,就会抛出异常!地址:https://zhidao.baidu.com/question/2206593625665240668.html
12 Handler中有一个后台空闲线程可以做性能优化IdleHandler
地址:
https://blog.csdn.net/suyimin2010/article/details/93835877
13相对布局会measure测量几次
相对布局会测量两次 相对布局每测量一次里面的组件就会测量两次
地址:https://www.jianshu.com/p/6bbb3b692ca7
14线性布局的权重属性规则
【最后控件的宽度 = 控件本身宽度 + 权重比例分配宽度 】
地址:
https://zhidao.baidu.com/question/502378966311655164.html
15 安卓中的手势检测类
Android提供了一个GestureDetector来帮助我们识别一些基本的触摸手势(还有ScaleGestureDetector可以识别缩放手势),让我们很方便地实现手势控制功能
地址:
https://www.jianshu.com/p/29a72ae35065
16 关于设计模式
其实这个自行度娘把 最主要就是单例模式了 里面还包含volatile和synchronize的相关知识也需要了解
给一个地址
https://blog.csdn.net/qq_24309787/article/details/82257772
17 关于synchronize的介绍
介绍:https://blog.csdn.net/javazejian/article/details/72828483
synchronized(this)、synchronized(class)与synchronized(Object)的区别
地址:https://blog.csdn.net/luckey_zh/article/details/53815694
18 线程池有几个关键的参数
地址:https://blog.csdn.net/qq_31439011/article/details/100824461
19volatile 和synchronize
volatile
它所修饰的变量不保留拷贝,直接访问主内存中的。
您只能在有限的一些情形下使用 volatile 变量替代锁。要使 volatile 变量提供理想的线程安全,必须同时满足下面两个条件:
1)对变量的写操作不依赖于当前值。
2)该变量没有包含在具有其他变量的不变式中。
volatile最适用一个线程写,多个线程读的场合。
如果有多个线程并发写操作,仍然需要使用锁或者线程安全的容器或者原子变量来代替。
synchronized
当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。
当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。
然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。
尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。
当一个线程访问object的一个synchronized(this)同步代码块时,它就获得了这个object的对象锁。结果,其它线程对该object对象所有同步代码部分的访问都被暂时阻塞。
地址:https://blog.csdn.net/mccand1234/article/details/91345168
20 GreenDao 中的Dao是什么意思 神级问题
DAO(Data Access Object) 数据访问对象是一个面向对象的数据库接口,它显露了 Microsoft Jet 数据库引擎(由 Microsoft Access 所使用),并允许 Visual Basic 开发者通过 ODBC 像直接连接到其他数据库一样,直接连接到 Access 表。DAO 最适用于单系统应用程序或小范围本地分布使用。
地址:https://baike.baidu.com/item/DAO/2900358?fr=aladdin
21 sendContentView()用处以及实现
https://www.jianshu.com/p/97bf8476d559
22 gradle 构建过程
初始化阶段
配置阶段
执行阶段
https://www.jianshu.com/p/e7a40a592f15