![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试
文章平均质量分 69
AncelyF
这个作者很懒,什么都没留下…
展开
-
Java个人对线程和进程的理解及面试相关
进程: 操作系统运行程序时分配资源的最小单位,进程和进程之间是相互独立的线程: cpu调度的最小单位,它必须依赖于进程.线程在运行时会占用该进程的部分资源,线程之间是可以共享该进程所拥有的全部资源.但是线程与线程之间也有自己的独立空间,称之为线程私有空间.讲到线程,一个进程有多个线程,所以会有多线程并发问题出现.什么是并发: 并发就好比一条高速收费口(这就相当于一个进程),假如这个入口有8个收费口,就代表着这个进程开了8个线程一直在跑. 这时并发好比在一个小时一共有多少汽车通过了这个收费口.这就原创 2020-05-26 21:01:04 · 155 阅读 · 0 评论 -
Android中如何通过keystore生成https证书,并设置证书到我们请求
需要使用keytool命令输入keytool --help 会出现下面帮助类-certreq 生成证书请求-changealias 更改条目的别名-delete 删除条目-exportcert 导出证书-genkeypair 生成密钥对-genseckey 生...原创 2020-04-29 01:23:51 · 998 阅读 · 0 评论 -
类加载机制及热修复实现之插桩原理
Android中是通过ClassLoader来加载class文件的,Android中的ClassLoader分为系统的和自定义的系统的有BootClassLoader DexClassLoader PathClassLoader,而DexClassLoader PathClassLoader都继承于BaseDexClassLoader这二个在加载类的时候操作逻辑全在父类BaseDexClas...原创 2020-04-15 23:56:42 · 256 阅读 · 0 评论 -
JVM内存分配分析
内存管理是JVM的核心内存分配:Jvm在运行过程中会把所管理的内存划分为若干个不同的数据区域(运行时数据区) 线程私有的内存: 程序计数器,本地方法栈,虚拟机栈 程序计数器:指向当前线程正在执行的字节码指令的地址(行号)因为java是多线程,会有线程切换,确保多线程情况下的程序正常执行,记录每个线程执行到哪里 ...原创 2019-12-11 15:53:33 · 180 阅读 · 0 评论 -
Rxjava从使用到原码的解析十三: Rxjava线程切换源码分析(终结版)
先来一段标准代码分析 Observable.create(new ObservableOnSubscribe<String>() { @Override public void subscribe(ObservableEmitter<String> e) throws Exception { ...原创 2019-11-22 14:53:08 · 109 阅读 · 0 评论 -
Android中HashMap分析
本文源码基于AndroidSDK 28里的代码分析,其它的也大同小异,由于SDK里的源码不能Debug,这里就自己创建一个MyHashMap来分析基本使用 MyHashMap<String,String> maps = new MyHashMap<>(); maps.put("12","aaa"); maps....原创 2019-11-21 17:03:56 · 533 阅读 · 1 评论 -
Rxjava从使用到原码的解析十二: Rxjava转换型操作符map原码解析
上一篇讲了创建型操作符,里面需要传个一个泛型假设为String,那么下游接收的泛型也是Stringmap操作符的作用就是,假设我下游需要接收的是一个Bitmap那这个时候就需要类型来转换.下来来分析下Rxjava是如果做到泛型转换的,先来看来.map的代码 public final <R> Observable<R> map(Function<? ...原创 2019-11-20 11:14:59 · 121 阅读 · 0 评论 -
Rxjava从使用到原码的解析十一: Rxjava创建操作符原码解析
被观察者Observable 实现了ObservableSource接口,泛型为T,从Observable.create方法可以看出,create这个方法一定是一个静态的,代码好下 public static <T> Observable<T> create(ObservableOnSubscribe<T> source) { O...原创 2019-11-20 10:34:36 · 111 阅读 · 0 评论 -
Rxjava从使用到原码的解析十: Rxjava实战之配合Retrofit请求完注册接口直接再请求登陆接口
一个注册和登陆接口public interface LoginApi { @FormUrlEncoded @POST("user/login") Observable<HttpResult<LoginBean>> login(@FieldMap Map<String, Object> params); @FormUrl...原创 2019-11-18 16:23:22 · 351 阅读 · 0 评论 -
Rxjava从使用到原码的解析九: Rxjava背压策略
Rxjava背压策略由来:RxJava1.X的时候,还没有背压模式,在我们上游就可以无限发射事件出来,当我们下游处理不过来的时候,就会造成内存泄漏RxJava2.0之后,作者就增加了背压策略-->>Flowable,他拉功能跟Obserable功能基本一样什么时候用Obserable,什么时候用Flowable当上游有大量事件发射的时候,有时会导致下游处理不过来时用Fl...原创 2019-11-18 15:22:00 · 405 阅读 · 0 评论 -
Rxjava从使用到原码的解析八: Rxjava线程切换
来一个最基本的测试在主线程中做如下操作 Log.e(TAG, Thread.currentThread().getName()); Disposable subscribe = Observable.create(new ObservableOnSubscribe<String>() { @Override ...原创 2019-11-17 21:52:43 · 118 阅读 · 0 评论 -
Rxjava从使用到原码的解析七: Rxjava异常型操作符
Rxjava异常型操作符onErrorReturn当发射onError事件的时候,就会拦截这个事件onErrorResumeNext 跟onErrorReturn 差不多,只是onErrorResumeNext 返回的是一个被观察者,可以自己发射事件onExceptionResumeNext可以防止应用异常崩溃retry重试操作符,就是当上游发射了onErro...原创 2019-11-17 20:55:48 · 110 阅读 · 0 评论 -
Rxjava从使用到原码的解析六: Rxjava合并型操作符
Rxjava合并型操作符 : 二个或以上的被观察者进行合并startWithconcatWith跟startWith相反concatmerge合并操作符,跟concat一样,但是他跟concat不同的是他是并列的zipstartWith //Observable(被观察者1).startWith(Observable(被观察者2)) ...原创 2019-11-17 16:54:25 · 116 阅读 · 0 评论 -
Rxjava从使用到原码的解析五: Rxjava过滤型操作符和条件型作符
Rxjava过滤型操作符主要有以下几种filtertakedistinctelementAtfliterDisposable disposable = Observable.just("sanlu", "feihe") .filter(new Predicate<String>() { ...原创 2019-11-17 15:47:16 · 129 阅读 · 0 评论 -
Rxjava从使用到原码的解析四: Rxjava变换型操作符
Rxjava变换型操作符: RxJava从上游发射事件到下游接收事件过程中对进行事件变换.创建变换操作符主要有以下几种map Observable.just(1, 2)//内部会先发送A再发送B .map(new Function<Integer, String>() { @Override...原创 2019-11-17 15:27:27 · 102 阅读 · 0 评论 -
Rxjava从使用到原码的解析三: Rxjava创建型操作符
Rxjava创建型操作符主要有以下几种createjustformArrayemptyrange是用来创建Observable(被观察者)的just操作符的使用 Observable.just("A","B")//内部会先发送A再发送B .subscribe(new Observer<String>()...原创 2019-11-16 22:10:07 · 126 阅读 · 0 评论 -
Rxjava从使用到原码的解析二:Rxjava2的响应式框架设计的事件流向
Rxjava我们可以把他理解成一个河流,事件的起点我们称为上游,事件的终点我们称为下游,河里面的水都是从上而下流动,所以Rxjava也一样,只能从事件的起源再到事件的处理,不可逆状态,我们如果想要改变事件只能在上游和下游之间对事件进行拦截.上游: 被观察者(Observable)下游: 观察者(Observer)示例代码 public void rx01(View view...原创 2019-11-16 21:46:22 · 129 阅读 · 0 评论 -
Rxjava从使用到原码的解析一:Rxjava 的使用和标准观察者模式的写法
Rxjava: 一切满足于起点和终点的这种需求都可以用Rxjava这种事件流来完成.比如我们从服务器拿到一个图片,然后经过很多种处理最终显示在我们手机上.先来 看一下Rxjava的观察者模式Observable:被观察者.一个事件的起点Observer: 观察者,一个事件的终点 public void rx01(View view) { //Rxjava的起点...原创 2019-11-16 21:09:05 · 145 阅读 · 0 评论 -
第二天(MVP和MVC是什么,有什么区别)
一天一面试题---第二天(MVP和MVC是什么,有什么区别)MVC: View接收到用户的操作之后,将用户的操作来交给Controller(activity),Controller完成业务逻辑,将得到的结果封装成Model,再进行View的更新.Controller做的事情非常多,即做了View层逻辑,又做了Model层逻辑,导致过度臃肿.View: layout也可以是自定义View...原创 2019-07-25 11:39:36 · 130 阅读 · 0 评论 -
第三天(组件化,插件化,模块化是什么,有什么区别)
组件化与插件化相同之处: 是将一个APP拆分为多个模块去开发.插件化: 如果我们把一个APP分为多个模块来开发的化,我们最终打包的时候永远只需要打包当前的主apk就可以,其它的功能模块可以不管,它们可以当作是一个独立的apk来单独运行,甚至单独发布,单独给用户用.当我们项目达到一定体积时,一般都会用插件化开发不仅仅是apk也可以是libralaly(dex)好处: 1,提高编译速度,节...原创 2019-07-31 09:43:37 · 677 阅读 · 0 评论 -
第五天(UI绘制的流程及原理)
每当我们在Activity或者Fragment里面setContentView 是怎么将一个布局或都一个View添加到窗口的呢.当setContentView(R.layout.activity_main)的时候会跳转到Window.setContentView这里,从代码里的注释可以看出Window的唯一实现类是PhotoWindow所以直接可以看PhotoWindow.setC...原创 2019-08-06 10:50:24 · 139 阅读 · 0 评论 -
第四天(内存泄漏以及OOM)
内存泄漏造成的原因:是生命周期长的对象持有生命周期短的对象的引用,造成生命周期短的对象使用完之后无法释放内存;内存泄漏出现的场景1.单例中的static成员间接或直接持有了activity的引用2.非静态内部类持有父类的引用,如非静态handler持有activity的引用3.异步操作如AsyncTask4.资源对象没关闭造成的内存泄漏(如: Cursor、File等)...原创 2019-08-02 13:58:27 · 176 阅读 · 0 评论 -
第六天(网络请求之OSI七层模型)
网络交互是一个非常复杂的过程,国际标准把它就分为了七层模型应用层: 可以看的见的终端应用-->比如各种浏览器,有http,rtft等一些信息,上传下载的一些工具表示层: 计算机识别的信息转变成人可以看到的信息(加密解密,压缩解压缩)会话层: 传输端口,接收端口建立会话-->面向连接的,是为传输层服务的传输层: 传输数据的协议与端口-->TC...原创 2019-10-08 14:39:29 · 203 阅读 · 0 评论 -
第七天(okhttp主线流程源码)
Okhttp源码主要涉及到的到有以下几个类OKHttpClientRequestResponseCallCallback简单用法 OkHttpClient client = new OkHttpClient.Builder().build(); Request request = new Request.Builder().url("...原创 2019-10-08 15:13:29 · 106 阅读 · 0 评论 -
第一天(Handler)
问题1:在子线程中一定不能进行UI更新?答:不一定,因为当我们在setText方法时,会走一个checkForRelayout()方法,而在这个方法里面最后都会走 requestLayout();invalidate();这二个方法而在requestLayout()方法里面走一个ViewRootImpl.requestLayout()方法, 在这里会对线程进行检测,check...原创 2019-07-25 11:36:40 · 98 阅读 · 0 评论