自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 收藏
  • 关注

原创 实用工具---charles

Charles是什么安装步骤使用方法代替服务器提前返回一些数据目前只知道这一个 后面会其他的了再补充。是什么是常用的网络封包截取工具charles是将自己设置成系统的网络访问代理服务器,使所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。安装步骤参考在mac上安装证书的时候,系统是默认不信任的,需要用户手动改成信任,然后安装。在手机上安装证书的时候,有的手机可能会出现打不开文件的情况,需要改后缀名。(有的手机需要把后缀.pem改成.cer)。使用方法代替服务器提前返回一些数

2021-05-17 17:41:53 112

原创 Git的使用

Git的使用什么是gitgit的结构什么是gitgit是一个开源的分布式版本控制系统,换句话说就是一个文本历史版本管理工具,可以管理文件的修改,并且记录下每次操作的修改部分,在Git管理下,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。git的结构...

2021-05-17 17:41:24 188

原创 kotlin-基础-?&&!!

? 和 !!??.?:?.let!!?修饰类型? 修饰类型的时候,一般放在参数或者返回值处,代表这个参数可以为null或者这个返回值可以为null。对应的是@Nullable注解。如果没有?修饰,对应的是@NonNull注解。修饰对象一般修饰类型被?修饰了的对象,也就是类型为可空类型的对象,加?类似于Java中用对象≠null包了一层?.如果不为null,才执行我们后面调用的方法,如果为null,则不执行。?:如果不为null,返回这个对象,如果为null,则返回冒号后面的内容。?.l

2021-05-17 17:40:20 196

原创 kotlin-基础-val&var&const val

基础知识valvarconst valvalval(value的缩写):声明不可变(只读)变量,对应java里面的final;定义变量时必须初始化,唯一可以不用立马初始化的场景就是在init代码块中初始化,但是在别的方法中都必须先初始化才行。varvar(variable的缩写):声明可变变量,对应于java里面的非final变量;使用技巧:编程优先使用val来声明变量,当val无法满足需求的时候再使用var。const val类似于java里面的static final但是不同的是如果他

2021-05-17 17:29:04 163

原创 JAVA里面this的用法

JAVA里面this的用法当局部变量和成员变量重名的时候,在方法里面使用this来表示成员变量用于区分this把当前对象传递给其他方法当需要返回当前对象的引用时候,常常在方法里面写return this参考当局部变量和成员变量重名的时候,在方法里面使用this来表示成员变量用于区分上面的类Demo中有一个成员变量str和一个局部变量str(类方法中的形式参数),很显然局部变量和成员变量重名,这个时候一般在方法中直接使用str实际上是使用局部变量str,对成员变量str没有任何影响,此时如果需要对成员

2021-05-16 19:01:11 520

原创 static关键字

static 关键字static 关键字的用途static方法static变量静态变量和非静态变量的区别static代码块static关键字的误区static关键字会改变类中成员的访问权限吗?能通过this访问静态成员变量吗?static是否能够作用于局部变量?常见面试题参考https://www.cnblogs.com/dolphin0520/p/3799052.htmlstatic 关键字的用途方便在没有创建对象的情况下来进行调用(变量/方法)被static修饰的变量或者是方法,不需要依赖对象或

2021-05-16 15:57:03 115

原创 计网-https-加密,签名,证书

加密,签名,证书加密算法对称加密非对称加密RSA算法摘要算法具体例子加密数字签名数字证书PKI加密算法首先我们得了解下加密算法的知识,加密可以分为对称加密和非对称加密。对称加密需要使用用一个秘钥,非对称加密则是两个秘钥(公钥和私钥)。对称加密对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。不足之处是,交易双方都使用同样钥匙,安全性得不到保证。常见的对称加密有 DES、AES 等。非对称加密非对称加密使

2021-03-20 20:54:49 146

原创 计网-SSL/TLS建立过程

SSL/TLS建立过程客户端发送一个 ClientHello 消息到服务器端,消息中同时包含了它的 Transport Layer Security (TLS) 版本,可用的加密算法和压缩算法。服务器端向客户端返回一个 ServerHello 消息,消息中包含了服务器端的 TLS 版本,服务器所选择的加密和压缩算法,以及数字证书认证机构(CA)签发的服务器公开证书,证书中包含了公钥。客户端根据自己的信任 CA 列表,验证服务器端的证书是否可信。如果认为可信,客

2021-03-19 19:30:43 250

原创 计网-RSA算法

RSA算法第一步:生成秘钥对,即公钥和私钥1:随机找两个质数 P 和 Q ,P 与 Q 越大,越安全。(随机找两个质数)2:计算 n 的欧拉函数 φ(n)。(m = φ(n) = (P-1)(Q-1) )3:随机选择一个整数 e,条件是1< e < m,且 e 与 m 互质。4:有一个整数 d,可以使得 e*d 除以 m 的余数为 1。( e*d%m=1)5:生成公钥和私钥第二步:加密解密1:加密2:解密第一步:生成秘钥对,即公钥和私钥1:随机找两个质数 P 和 Q ,P 与 Q 越大,越安

2021-03-18 10:41:46 251

原创 计网-https

httpshttps工作原理为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为客户端和服务器之间的通信加密。简单点来说,Https就是HTTP+SSL。https工作原理首先HTTP请求服务端生成证书,客户端对证书的有效期、合法性、域名是否与请求的域名一致、证书的公钥(RSA加密)等进行校验;客户端如果校验通过后,就根据证书的公钥的有效, 生成随机数,随

2021-03-18 08:21:33 77

原创 计网-http

长连接和短连接长连接和短连接断点续传长连接和短连接其实HTTP长连接和短连接的本质上是TCP的长连接和短连接。HTTP1.0是默认短连接的,也就是说服务器和客户端的每一次HTTP操作,就建立一次连接,当任务结束,就中断了。而在HTTP1.1默认都是长连接,响应头里面会多一个字段:Connection:keep-alive。这是用长连接时,当客户端和服务器建立连接后,并不会任务完成就立马断开,而是会有一个保持时间,连接超过这个时间了,才会去断开。在保持期间,会通过发送心跳包来保证服务器不会断开连接,心

2021-03-18 07:12:37 99

原创 计网-Http-强制缓存和对比缓存

强制缓存和对比缓存强制缓存ExpiresCache-Control对比缓存Last-Modified和If-Modified-SinceEtag和If-no-match强制缓存强制缓存时,客户端会先从本地缓存里面找,找到了就判断缓存是否过期。强制缓存主要是两个字段:Expires和Cache-ControlExpiresExpires标识缓存到期时间,是一个绝对时间,也就是说,他返回的是几几年几几月几几日几几时几几分几几秒,如果客户端从他的缓存的这个字段里面找到这个时间,发现这个时间过期了,那就会

2021-03-18 06:33:54 127

原创 计网-http

httphttphttp2.0多路复用请求优先级Header压缩服务端推送http和https之间的区别http超文本传输协议HTTP协议被用于在客户端和服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息。http2.0多路复用很多时候我们的客户端与服务器需要进行频繁的通信,这个时候,在Http0.9也就是没有长连接之前,我们只能没通信一次建立TCP连接,通信完毕断开,这个时候会浪费大量资源

2021-03-17 22:30:26 75

原创 计网-分段和分片

分段和分片分片-MTU(Maximum Transmission Unit,最大传输单元)分段-MSS(Maxitum Segment Size,最大分段大小)分段是发生在传输层,一般是TCP进行分段;分片是发生在网络层,IP层会将数据进行分片传输。分片-MTU(Maximum Transmission Unit,最大传输单元)首先说一下MTU的概念。MTU是指数据链路层会对数据帧的大小有一个限制,这个限制就叫做MTU。如果说IP层有一个数据要传,而这个数据的大小超出了MTU,那么IP层就会根据MT

2021-03-17 21:01:15 560

原创 计网-TCP,UDP的区别

TCP,UDP的区别TCP UDP的区别1. Tcp保证可靠性的,Udp不保证可靠性1-1 面向连接1-2 有序确认1-3 重传机制1-4 拥塞控制1-5 维护的数据结构2. Tcp面向字节流,Udp基于数据报TCP UDP的区别TCP是点对点,一对一;UDP可以一对一、一对多、多对一、多对多TCP是面向连接的,UDP是面向无连接的。TCP在发送请求的时候,会去先使用三次握手进行链接,而UDP不会。TCP是提供可靠交付的,它能够保证无差错,不丢失,不重复,按序到达。UDP不提供可靠交付。TCP提

2021-03-17 17:37:14 156

原创 计网-TCP/UDP-TCP

TCP/UDP-TCP概念三次握手为什么是三次而不是两次或者四次三次握手中可以携带数据吗四次挥手为什么要等待两个MSL累计确认 超时重发 出错重发流量控制保证有序性滑动窗口协议(连续ARQ协议)拥塞控制慢开始拥塞避免AIMD算法快重传快恢复拥塞控制和流量控制都是什么,两者的区别?概念TCP 提供一种面向连接的、可靠的字节流服务在一个 TCP 连接中,仅有两方进行彼此通信。TCP不能用于广播和多播TCP 使用校验和,确认和重传机制来保证可靠传输TCP 给数据分节进行排序,并使用累积确认保证数据的顺

2021-03-17 15:44:38 191

原创 操作系统-存储器管理

存储器管理存储器管理**程序的装入和链接****连续分配方式****对换****段页存储**基本分页存储管理基本分段存储管理分页和分段的区别和联系段页式存储管理方式**虚拟存储器****页面置换算法**存储器管理程序的装入和链接将一个用户源程序变为一个可在内存中执行的程序,有以下步骤:编译:编译程序将用户源代码编译成若干目标模块链接:链接程序将编译后的目标模块和它们所需的库函数链接成一个完整的可装入模块装入:装入程序将装入模块装入内存程序的链接根据链接的时间,可以分为下面三种:静态链

2021-03-17 09:59:12 277

原创 计网-TCP/UDP-分段和分片

分段和分片分片-MTU(Maximum Transmission Unit,最大传输单元)分段-MSS(Maxitum Segment Size,最大分段大小)分段是发生在传输层,一般是TCP进行分段;分片是发生在网络层,IP层会将数据进行分片传输。分片-MTU(Maximum Transmission Unit,最大传输单元)首先说一下MTU的概念。MTU是指数据链路层会对数据帧的大小有一个限制,这个限制就叫做MTU。如果说IP层有一个数据要传,而这个数据的大小超出了MTU,那么IP层就会根据MT

2021-03-17 08:29:39 1290

原创 操作系统-页面置换算法

页面置换算法最佳置换算法先进先出最近最久未使用Clock置换算法最佳置换算法这是一种理想的置换算法,思想是提前判断这一页需要多少条指令后才会被访问,那么每次置换时就把需要的条数最大的先置换掉。先进先出最简单,先进先出,先进入内存的页也就会先退出。最近最久未使用也就是LRUClock置换算法为每个页增加一个使用位,然后每新来一个页面,就把他的使用位置为1,同时还有一个指针,默认从第一位开始指起,然后当主存满了,同时此时所有的使用位都是1时,就把当前指针指向的那一位也就是第一位置换掉,同时将其他

2021-03-17 06:38:02 57

原创 操作系统-页表

页表页表分页表页表页表是内存管理系统中的一种数据结构,用于向每个进程提供一致的虚拟地址空间,每个页表项保存的是虚拟地址到物理地址的映射,在应用程序通过虚拟地址去访问内存时,内核会借助页表和硬件把虚拟地址翻译成对应的物理地址。分页表所谓分页表,就是说一个进程只有一个根页表,不同的进程有不同的根页表。所以对于不同的进程,相同的虚拟地址可以转换到不同的物理地址上。...

2021-03-16 15:47:31 700

原创 操作系统-虚拟内存,页,段

虚拟内存,页,段虚拟内存段和页段页式Swap交换区虚拟内存虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。CPU会通过一个虚拟地址来访问主存,这个虚拟地址在被送到主存之前会先被MMU(内存管理单元)装换成一个物理地址。虚拟内存主要提供了如下三个重要的能力:它把主存看作为一个存储在硬盘上的虚拟地址空间的高速缓存,并且只在主存中缓存活动区域(按

2021-03-16 15:31:27 201

原创 操作系统-进程调度

进程调度LinuxWindows先来先服务调度算法短作业(进程)优先调度算法最短剩余时间优先算法时间片轮转法多级反馈队列调度算法(设置多个就绪队列,对应不同的优先级,在优先权愈高的队列中,为每个进程所规定的执行时间片就愈小)优先级调度算法Linux将优先级调度、时间片轮转法调度、先进先出调度综合起来应用Windows一个优先驱动的,抢先式的调度系统——具有最高优先级的可运行线程总是运行...

2021-03-16 14:18:52 28

原创 操作系统-进程同步

进程同步临界资源进程同步进程互斥实现临界区互斥的方法信号量信号量和互斥量的区别生产者消费者问题哲学家就餐读者写着问题银行家算法进程同步是指在多道程序的环境下,存在着不同的制约关系,为了协调这种相互制约的关系,实现资源共享和进程协作,从而避免进程之间的冲突,进而引入进程同步。临界资源对于某些资源来说,在同一时间只能被一个进程所占用,这些资源就被成为临界资源。典型的临界资源比如物理上的打印机等等。对于临界资源的访问,必须是互斥的,也就是当临界资源被占用时,另一个申请临界资源的进程会被阻塞,直到其所申请的

2021-03-16 13:57:03 63

原创 操作系统-进程,线程,协程

进程,线程,协程线程与进程间的区别联系协程线程与进程间的区别联系进程是资源分配的最小单位,线程是CPU调度的最小单位。进程有自己的独立地址空间,每启动一个进程,系统就会为他分配地址空间。而线程是共享进程中的数据的,因此CPU切换一个线程比切换一个进程所需的消耗小很多,创建一个也会小很多。进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源线程间通信比进程要简单。因为同一进程下的线程共享全局变量、静态变量等数据,而进程之间必须以进程间通信方式进行。做个简单的比喻:进程=火

2021-03-16 12:59:45 172

原创 Android-IPC

Android里面的IPCAndroid中的IPC概述Messager简单使用AIDL使用方法简述Android中的IPC概述Messager这是一种轻量级的IPC方式,底层实现是AIDL。特点:服务端通过Handler以串行方式处理请求,不适合服务端有大量消息要处理的情况作用:在不同进程间传递Message对象。在Message中放入我们想要传递的数据,就可以实现进程间数据传递了。简单使用Service作为服务端需要通过android:process属性开启单独的进程// 运行在

2021-03-16 10:07:59 56

原创 操作系统-死锁

死锁产生的四个条件死锁的预防PV操作P操作V操作生产者消费者产生的四个条件互斥访问条件:即一个资源一段时间内只能被一个线程占有,不能被两个或两个以上线程占有不可抢占条件:当一个资源正在被一个进程占用时,不可以被其他进程抢占占有且申请条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。循环等待条件:环形请求资源死锁的预防打破四个条件即可:互斥访问条件:允许进程同时占用某些资源,但是不太可能不可抢占条件:当

2021-03-16 09:03:58 42

原创 操作系统-Linux中的IPC

Linux中的IPC管道pipe信号(Signal)Socket消息队列信号量(semaphore)共享内存(share memory)管道pipe管道本质是一个内核缓冲区,进程以先进先出的方式从缓冲区存取数据,管道一端的进程顺序的将数据写入缓冲区,另一端的进程则顺序的读出数据。只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程);管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。信号(Signal)信号是

2021-03-16 08:30:16 94

原创 操作系统-64位和32位的区别

64位和32位的区别32位操作系统针对32位CPU设计的。64位操作系统针对64位CPU设计的。64位CPU可以运行64和32位操作系统,而32位CPU只能运行32位操作系统。32位操作系统可以一次性处理32位,也就是4个字节的数据;而64位可以一次性处理64位也就是8个字节的数据。理论上:32位=2^32B = 4 * 2^30B = 4GB,这是 32 位下单进程内存上限。64位架构下,地址线是46个,所以最大的物理地址是2^46B,折合64TB,可用地址空间也是这么大(目前为止)。...

2021-03-16 08:14:02 216

原创 Handler

Handler使用方法原理消息屏障异步消息IdelHandlerHandler.CallbackActivity中使用HandlerHandler native层nativeInit()nativeDestroy()nativePollOnce()HandlerThread面试问题总结1. 为什么主线程调用了Looper的loop方法主线程却不会卡死那么别人为什么能主线程发送消息2. Handler为什么会导致内存泄漏解决办法1. 静态内部类+弱引用2. 手动清除所有的消息3. View的post和Hand

2021-03-16 06:55:37 460

原创 RecyclerView

RecyclerView用法绘制过程缓存机制**一级缓存:mAttachedScrap和mChangedScrap****二级缓存:mCacheViews****三级缓存:mViewCacheExtension****四级缓存:mRecyclerPool**懒加载ItemView 复用局部刷新用法先简单来说一下RecyclerView的用法:mRecyclerView = findView(R.id.id_recyclerview);//设置布局管理器mRecyclerView.setLayout

2021-03-15 22:32:50 104

原创 ListView源码解析

ListViewRecycleBin机制ListView原理1. 判断是上滑还是下滑2. 边界值处理3. detach处理view4. 加载屏幕外数据优化1. convertView2. ViewHolder加载错乱解决错乱3 分段加载4 分页加载再说ListView之前首先需要说一下RecyclerBin机制RecycleBin机制这个机制是保证ListView能够实现成百上千条数据也不会OOM的关键,ListView和GridView都使用的是这个机制。他的核心就是几个方法,fillActiv

2021-03-15 17:27:33 392 1

原创 操作系统-用户态和内核态

用户态和内核态为什么要有用户态和内核态用户态和内核态的切换系统调用异常中断用户态:只能受限的访问内存,且不允许访问外围设备。内核态:可以访问到所有数据,包括外围设备、用户空间和系统空间。为什么要有用户态和内核态为了限制不同程序之间的访问能力,防止他们获取到别的程序的内存数据,或者获取外围设备的数据,所以就分成了两个权限——用户态和内核态。用户态和内核态的切换系统调用一般情况下, 所有的用户程序都是运行在用户态下的,但是有些时候程序必须得做一些内核态的事情,比如从硬盘读取数据或者获取键盘输入等等

2021-03-15 14:09:54 71

原创 Parcelable

Paecelable概述原理对比概述Parcelable是Android中特有的序列化方式,它的实现比java的Serializable的实现较复杂一点:它需要重写describeContents和writeToParcel两个方法,以及Creator类型的CREATOR属性(其中public static final一个都不能少,内部对象CREATOR的名称也不能改变,必须全部大写。需要重写Creator接口中的两个方法:createFromParcel和newArray)public class

2021-03-15 13:49:34 119

原创 jetpack-LiveData

LivedataLiveDataLiveData优点LiveData原理分析Transformation.map()和Transformation.switchMap()Transformation.map()Transformation.switchMap()**参考资料**LiveDataLiveData优点确保界面符合数据状态LiveData 遵循观察者模式。当生命周期状态发生变化时,LiveData 会通知 Observer 对象。您可以整合代码以在这些 Observer 对象中更新界面

2021-03-15 10:23:42 66

原创 jetpack-Lifecycle

LifecycleLifecycle作用一些基本的类Lifecycle感知Fragment和Activity生命周期的原理源码分析Activity生命周期的监听LifecycleRegistryObserverWithState.dispatchEvent()Lifecycle作用简单的说就是用来监听Activity与Fragment的生命周期变化。当Activity或Fragment的生命周期发生变化时,就会将事件分发给注册到LifecycleRegistry的LifecycleEventObse

2021-03-15 08:25:28 69

原创 jetpack-ViewModel

ViewModel概述作用ViewModel的特点ViewModel的创建Activity重建时如何保证ViewModel不重建ViewModel的销毁ViewModel如何在Activity和各个Fragment内部共享总结概述官方对ViewModel的解释:ViewModel 类旨在以注重生命周期的方式存储和管理界面相关的数据。ViewModel 类让数据可在发生屏幕旋转等配置更改后继续留存。作用它在Android中事实上是为了解决一下两个问题:UI组件间实现数据共享Activity因配

2021-03-14 19:35:19 91

原创 Jetpack

简单点来说,Jetpack是Google给我们提供的一个Android组件框架,可以理解成一系列Android库的集合。包含了组件、框架、架构方案等等。他的出现让我们更方便的来编写AndroidAPP,最主要的是她是官方支持的。组成主要有四部分:基础AppCompatKTXMultiDexTest架构DataBindingLifecyclesLiveDataViewModelNavigation等等UI行为总结简单点来说:JetPack更多是一种概念和

2021-03-14 15:48:22 155 2

原创 ConstrainLayout

ConstrainLayout概述特点使用onMeasureonLayout概述ConstraintLayout可让您使用扁平视图层次结构(无嵌套视图组)创建复杂的大型布局。它与RelativeLayout相似,其中所有的视图均根据同级视图与父布局之间的关系进行布局,但其灵活性要高于 RelativeLayout,并且更易于与 Android Studio 的布局编辑器配合使用。ConstraintLayout的所有功能均可直接通过布局编辑器的可视化工具来使用,因为布局 API 和布局编辑器是专为彼此

2021-03-14 10:32:28 272

原创 Android架构

Android架构MVCMVP主要区别防止内存泄漏MVVMView与ViewModel之间的交互MVC首先来说下MVC,MVC就是model、view、controller。其中model数据的实体类,view用于视图的展示,controller负责处理用户操作、用来协调model和view。Android最基本的方式就是MVC,即xml文件相当于view,activity相当于controller,实体类、SP等数据相当于model。但是在Android中,由于Android设计上的原因,MVC根

2021-03-13 19:44:46 184 2

原创 Http状态码

Http状态码1. 2XX成功2. 3XX重定向3. 4XX客户端错误4. 5XX服务器错误1. 2XX成功请求正常处理完毕200 OK 从客户端发送的请求在服务端被正常处理了。204 No Content 服务器接受的请求已成功处理,但返回的响应报文的主体部分不包含实体(浏览器页面不更新,仅发送信息给客户端)206 Partial Content 客户端进行了范围请求,而服务器成功执行了这部分请求2. 3XX重定向浏览器需要执行某些特殊的处理以正确处理请求。301 Moved Per

2021-03-13 18:53:46 43

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除