自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Joel

学习笔记

  • 博客(54)
  • 资源 (1)
  • 收藏
  • 关注

原创 Kotlin快捷生成对应C++头文件

Kotlin快捷生成对应C++头文件使用javah命令可以快速生成java class的头文件,而kotlin需要在编译时才会生成class文件,因此需要找到kotlin生成的class文件的中间路径,再使用命令生成对应头文件,对应的External Tools工具配置如下:program:javahArguments:-d ContentRootContentRootContentRoot/src/main/cpp/ -cp ContentRootContentRootContentRoot/bui

2021-04-20 16:29:55 582

原创 http各个版本协议区别

HTTP1.0、HTTP1.1、HTTP2 、HTTP3区别HTTP1.1相比HTTP1.0:多种缓存处理的请求头增加Range支持分片资源传输增加Host头支持Host域名对应多个ip地址支持长连接(Connection: keep-alive)和请求流水线(Pipelining)处理(但是请求和响应报文的序列必须一致,有可能会导致队首阻塞),可以发送多个请求。HTTP2相比HTTP1.1:头部压缩:客户端和服务端维护一个头部字典(哈夫曼编码等压缩算法),将重复的头部压缩字节。采

2021-03-14 11:07:51 707

原创 Android界面性能优化

界面性能优化监控指标:在Activity跳转过程中,在上一个Activity的onStop方法和下一个Activity的OnResume期间对用户来说是空白的,假如这段时间过长,就会感觉卡顿,当然OnResume这个时机也不太准确,更准确的是OnResume中创建ViewRootImpl后触发的下一个Vsnc信号导致的绘制流程结束。卡顿解决策略:跳转过程中主线程任务的耗时,导致Looper处理onStop到OnResume的时间变长,可以通过Looper的logger日志插桩每个message的处

2021-03-14 11:07:01 320 1

原创 如何理解泛型的协变与逆变

如何理解泛型的协变与逆变JAVA中的上界: 泛型是用于规范代码输入的编译限制,使用<T extend 某个类> 的语法可以规定泛型的上界,但是会使得集合只能使用add方法不能使用get方法,具体原因是:#mermaid-svg-spw8YskLZZ6I0aCM .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#merm

2020-12-13 21:07:52 359

原创 使用自定义ItemDecoration的各种姿势

自定义ItemDecoration实现间距:1.继承RecyclerView.ItemDecoration重写其getItemOffsets方法:override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) 其中第一个参数outRect为Decoration间距的距离4个方向的距离,在RecycleView布局时会加载itemView的padding上

2020-07-05 16:31:19 701

原创 Kotlin协程初步使用

Kotlin协程使用如何开启一个协程:首先想要调用协程方法,必须先定义一个协程作用域即协程生命周期,一般在kotlin中可以以下方式开启。GlobalScope.launch 开启一个协程,该协程不会阻塞线程,如果线程结束协程会停止执行,该协程的作用域是整个应用运行时期。runBlocking 阻塞线程到该协程执行结束。runBlocking 是常规函数,而 coroutineScope 是挂起函数实际上GlobalScope是CoroutineScope的子类,该类是所有协程构造器的父类,用

2020-05-10 14:25:30 650

原创 Binder使用

Binder使用AIDL实现1.新建aidl包、新建需要传输的自定义类(实现Parcelable)package com.example.aidltest.aidl;/*** Created by joel.* Date: 2019/6/7* Time: 15:56* Description:*/import android.os.Parcel;import android.o...

2020-03-01 20:46:07 331 1

原创 Jvm 垃圾回收机制

判断一个对象是否可回收?引用计数:每当一个对象被引用时,其引用计数加一,当引用计数为0时GC回收内存将对象销毁。缺点:无法回收互相引用的对象(互相调用其引用数永远不为0)根可达算法垃圾回收算法:标记-整理算法: 适用于回收率低的区域标记存活对象,将所有的存活对象压缩到内存的另一端。之后清理边界之外的所有空间。复制算法:适用于回收率高的区域将内存分为两半,每次只是用一半的内存...

2020-03-01 20:39:38 189

原创 传输层

传输层作用: 在通信双方节点上进行处理在传输层负责建立点对点的连接:通过解析数据报文TCP协议首部的目标端口号(可以判断是哪种应用程序如80端口是http协议),将数据包发送往端口中,由特定的应用服务接收信息。端口号: 用于区分同一主机的不同的应用程序或服务。端口号确定方法:    1、标准规定:如HTTP、TELNET、FTP都有相对的端口号,这是内部设定的,分布在1024~49151...

2019-10-08 19:25:14 166

原创 路由算法

路由算法路由算法作用: 计算目标网络之间的距离分类:  1、距离向量算法:路由器之间交换信息优化出下一跳最小路径,不同的路由器的路由表信息不同,可能选择的路径不是最优。  2、链路状态算法:路由器之间持有相同的网络拓扑图信息,只要一台路由器和其他路由器的网络拓扑图一致就说明信息是正确的,否则应该同步路由信息,使路由达到稳定状态,可以进行稳定的路由选择(最优路径)。距离向量类型路由协议实现...

2019-10-08 19:15:55 4918

原创 路由控制范围划分

路由控制范围划分路由控制范围划分作用: 根据不同路由设置不同的路由策略以适应不同的情况具体实现:1、IGP:用于内网通信,采用RIP,RIP2,OSPF协议。2、EGP:用于外网通信,采用BGP协议。...

2019-10-08 19:11:09 241

原创 NAT

NAT作用: 转化私有地址和全局IP工作原理:  在私有地址Ip第一次向路由器发送包时会建立一个转换表,记录私有地址和端口。  在私有地址主机向外网发送数据时,需要通过一个网络地址是全局IP(即全世界只有一个的地址)的路由,在转发出外网时根据转换表会将数据包中的源IP地址帧替换成全局IP地址。在转换时还会包含端口号,防止私网内多个主机同时发送导致的冲突。...

2019-10-08 19:10:38 112

原创 DHCP

DHCP作用: 自动分配IP给连接上网络的设备。工作原理:1、配置一个或多个DHCP服务器(设置可分配的IP和子网掩码)2、设备上线发送ICMP消息以获取IP3、DHCP分配地址前发送ICMP消息确定其他DHCP没有冲突IP(不应答)4、DHCP回传设备ICMP应答分配IP5、设备发送ARP请求包确认(确定没有应答),则这个IP一定是不冲突的,所以设置设备IPDHCP中继代理:作...

2019-10-08 19:09:49 109

原创 网络层

网络层作用:计算数据传输到目标地址的路径,让数据链路层去发送数据到下一个链路,目标地址可以是多个网络通过路由链接而成的某一个地址。因此这一层主要负责寻址和路由选择。涉及技术:1、路由器/3层交换机:网络层面上连接两个网络,对分组报文进行转发的设备通过IP处理转发2、IP协议:  作用:  1、标识网络层中的每一台主机的位置  2、抽象数据链路层通信的差异,根据不同数据链路层协议...

2019-10-08 18:50:21 156

原创 数据链路层

数据链路层作用:负责物理层面上的互连的、节点之间的通信传输,例如与1个以太网相连的2个节点之间的通信涉及技术:1、网桥/2层交换机:在数据链路层面上连接两个网络的设备,通过Mac地址处理转发。  发送方式:    ·储存转发:将传输的数据帧临时储存于内存,再生成信号作为一个全新的帧转发给相关的另一个网段,通过数据帧中的FCS位判断数据是否损坏,数据完整则发送,否则不发送    ·直通...

2019-10-08 18:16:52 223

原创 物理层

物理层作用:负责0、1比特流与高低电压、光的闪灭之间的互换技术:中继器:通过将电缆传输的电信号和光信号通过中继器的波形调整器和放大传给另一个电缆...

2019-10-08 18:16:22 90

原创 IOS七层模型

物理层(01比特流的转换)数据链路层(物理通路的发送和数据包的划分,附加Mac地址到数据包)网络层(根据目的地址选择发送数据包路径–路由选择)传输层(链接建立和断开,保证传输的可靠–重发机制)会话层(发送的顺序和方法)表示层(编码的格式)应用层(具体的应用发送内容)...

2019-10-04 15:45:17 6042 1

原创 多磁盘管理

多磁盘管理作用:对同时多个磁盘协同工作的内存管理磁盘读取的原理通过指针寻道,然后扫描磁道上的数据的信息实现技术:实现原理:1、每次读取的数据在不同的磁盘上,每次读取就可以一起读取并行访问。2、写操作时写入不同的磁盘,写这样一个硬盘失效可以使用另一个硬盘。3、使用额外的磁盘做奇偶校验,用于磁盘恢复。磁盘调度优化:1、访问数据的开销:2、磁盘调度算法: ·FIFO:顺序...

2019-10-04 11:20:46 568

原创 文件系统

文件系统定义:持久性存储系统的抽象,文件即一个单元数据在操作系统的抽象功能:概念:1、文件属性:名称、类型、位置、大小、创建者…2、文件头:储存元数据中保存了每个文件的信息保存文件的属性,跟踪哪一块储存块属于逻辑文件结构的哪个偏移。3、文件描述符:操作系统记录进程打开文件的索引编号。4、块、扇区:操作系统每次访问按照扇区为最小单位,即使只修改1字节,也会修改字节所在的块,读取整个...

2019-10-04 11:18:41 147

原创 IPC

IPC作用:进程间通信方式:1、信号sinal函数:进程可以收到信号执行相应的反应如跳转到处理函数。当收到信号是内核态,返回到用户自定义处理函数就是用户态,这个过程中要修改寄存器处理地址。2、管道:用于进程的数据交换。两个通信的进程需要是同一个父进程的fork,才能共用父进程的管道(一块内存区域)3、消息队列:可以使不相关的进程进行通信4、共享内存:读写可以被其他进程得知,但是数据必...

2019-10-04 11:15:17 180

原创 死锁

产生的原因:多个线程持有彼此需要的资源不放手。死锁特征(出现4个特征也有可能不会死锁):1、互斥:一个时间只能有一个进程使用资源2、持有并等待:进程保持至少一个资源正在等待其他进程持有的额外资源3、无抢占:一个资源只能被进程完成后自愿释放4、循环等待:进程互相等待各自的资源解决死锁的方法:死锁预防:死锁避免:银行家算法:死锁避免算法死锁检测算法:死锁恢复:...

2019-10-04 11:14:10 400

原创 管程

目的:分离互斥和条件同步的关注,针对信号量有可能产生死锁的问题,设置一个标志位实现在使用临界资源的线程等待时切换到另一个线程。定义:包含一个锁用来指定临界区,0或多个条件变量用来等待或通知信号量管理并发共享数据。每个条件变量维护一个等待队列,可以唤醒sinal和阻塞wait。实现:先执行释放锁的原因是因为实际应用中会在操作之前对管程代码加锁,因此在阻塞时需要先释放锁唤醒其他变量的队列。...

2019-10-04 11:09:55 131

原创 信号量

作用:  用于线程的互斥和同步。进程在进入时会采用p操作,退出时采用v操作(理解:假如有cpu同时可以跑3个线程,信号量初始为3,前三个线程进去后信号量减为0,再来一个线程信号量为-1了,这时候cpu中的进程跑完了信号量+1,查看线程信号量是否小于或等于0就可以知道是否有线程在等待。)P操作可以阻塞,V操作不能,信号量用于实现人为控制线程的先后执行。信号量操作:p,v操作的实现:信号量...

2019-10-04 11:08:50 145

原创 同步

  进程间对资源的访问有可能会导致资源的错误,比如在资源加载到寄存器上还没修改到目标值就被另一个进程读取了。原子操作:是指一次不存在任何中断或者失败的执行,不会被其他进程打断。同步方法实现:1、临界区保护:进程间同时进入的一段可能改变状态的代码段进行限制,每次只允许一个进程进入。  ·禁用硬件中断:禁止了上下文的切换,因此不会有进程间互相交替进行的情况,自然也不会有并发资源的争夺。(缺点...

2019-10-04 11:05:07 67

原创 进程调度

进程调度背景:1、上下文切换 ·切换cpu的当前任务,从一个进程到另一个进程 ·保存当前线程的资源(寄存器等) ·加载下一个进程的上下文2、cpu调度  从就绪队列中挑选一个进程作为下一个运行进程 ·通过调度策略选择进程调度时机:1、进程从运行状态切换到等待状态2、一个进程被终结3、可抢占,不可抢占调度算法原则:1、CPU利用率 :CPU处于忙状态所占时间的百分比2...

2019-10-04 10:59:55 137

原创 进程

组成:1、程序代码。2、数据。3、程序计数器。4、寄存器的值,堆,栈。5、一组系统资源(文件等)进程与程序的区别:1、进程是动态的,程序是静态的,程序是有序代码的集合,进程是程序的执行,进程有核心态/用户态。2、进程是暂时的,程序是永久的。特点:1、可动态创建、结束。2、进程可以独立调度并运行(并发即一个cpu一段时间执行一个进程、并行即多个cpu同时执行多个线程)。3、独...

2019-10-04 10:56:59 82

原创 页面置换算法

页面置换算法作用:  用于分配给进程内存页面不够时,决定那个页面要被置换,好的算法需要减少页面的换入换出次数。特殊的对于操作系统的某些关键运行内存地址需要对页的锁定标志位置为1,防止被置换。1、最优页面置换算法:  当缺页发生时,对于保存在内存的每一个逻辑页面计算在他下一次访问前需要等待多少时间,从中选择等待时间最长的那个作为置换的页面。(很难实现但可以作为标准评价其他算法)2、先进先出...

2019-10-04 10:53:42 357

原创 虚拟内存

虚拟内存背景:运行内存不够,需要借助物理内存储存临时的数据。针对背景优化的技术:1、覆盖技术:将程序独立的模块按运行时间分块(不会同时运行和互相调用),共享同一块内存,在运行完后覆盖成下一个相应的程序。2、交换技术:将暂时不能运行的程序送到外存中。换入换出时的存储位置可能不同(需要使用动态地址映射),开销太大。3、虚存技术:将程序中的一部分内容放到内存中,依赖于程序的局部性原理(时间局部...

2019-10-04 10:37:56 131

原创 非连续内存分配

非连续内存分配作用:减少连续分配产生的内存碎片,做好内存管理,可以实现共享数据(分配在同一个内存上)。硬件方案实现:1、分段通过对程序中的连续的逻辑空间对应到分散的物理地址空间,实现内存管理。如代码中的堆栈映射到不同的物理地址空间(实现数据隔离)。分段对应方案:连续的逻辑地址需要通过段寄存器+地址寄存器分离成不连续的物理地址,每一段逻辑地址应该加上不同的偏移量,段寄存器表示段号,地址寄存...

2019-10-04 10:30:34 166

原创 连续内存分配

连续内存分配背景: 通过连续的内存分配给应用,如A(0-20)B(20-30)C(30-40)产生的问题:内存碎片(如果这个时候B结束了,那20-30这里的内存就无法使用到)内存分配算法:1、第一匹配分配:遇到第一个适合的内存就分配给应用(如第一个内存块是1k,那应用需求400bit遇到就直接分配)·缺点:需要对空闲地址排序,需要对空闲块合并,容易产生外碎片2、最优适配算法:寻找最相...

2019-10-04 10:12:52 199

原创 地址空间和地址生成

地址空间和地址生成地址空间定义:物理空间(硬件支持的地址空间)逻辑地址空间(程序中代码自定义的地址空间)。地址的生成: 一开始程序可以设定为自己的代码开始位置,当它进入主存执行时,需要把这个开始位置加上这段程序在主存中的起始位置才是对应在物理内存中的逻辑地址开始位置,然后再通过MMU(内存管理单元)去查找对应的物理内存地址。这样可以使代码中的所有内存都相互对应不会访问到错误的数据,还...

2019-10-04 10:10:53 200

原创 计算机体系结构/内存分层体系

计算机体系结构/内存分层体系体系结构:1、CPU 2、内存 3、外设内存分层体系:运行内存(主存)、磁盘(虚拟内存)。主存是在运行程序时所需要保存的数据空间,而磁盘是用于持久化数据保存的数据空间。操作系统对于内存作用:1、将具体的物理地址抽象成逻辑地址空间,使应用程序不需要依赖具体的物理储存2、将程序运行时的内存分开防止相互影响。3、对相同内存空间访问时的控制。4、更...

2019-10-04 10:05:57 654

转载 Acitivity横竖屏切换

横竖屏幕切换时候activity的生命周期1、不设置activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,且竖屏时会执行两次2、设置activity的android:configChanges=”orientation"时,切屏还是会调用各个生命周期,切横屏,竖屏时只会执行一次3、设置activity的android:configCh...

2019-05-17 15:49:09 116

原创 Activity四种启动方式

1、standard 默认启动模式(不重用)2、singleTop 如果Activity在栈顶就重用,否则就重新新建示例(和默认一样)3、singleTak:在新任务的Root部启动(注意:只设置启动模式为singleTask是没用的!)判定流程:设置为singleTask启动的Activity启动时会被标记为FLAG_ACTIVITY_NEW_TASK.获得Activity的...

2019-05-17 15:48:04 343

原创 Activity生命周期

1、OnCreate 第一次创建2、Onstart 通知启动3、onResumed 获得焦点可见4、onPaused 被半透明Acivity覆盖时,可见却不能交互。(Dialog并不会触发,需要的话可以定制一个Dialog样式的Activity)5、onStoped 被覆盖时,处于后台不可见6、onRestart 后台回到前台时->2->37、onDestory 销毁时...

2019-05-17 15:42:52 73

原创 贪婪算法实现装箱

//贪婪算法实现装箱操作public class test { public static void main(String args[]) { huowu[] h = new huowu[5]; h[0] = new huowu(10); h[1] = new huowu(80); h[2] = new huowu(50); h[3] = new huowu(50); ...

2019-04-04 20:27:42 1189

原创 贪婪算法实现找零

//贪婪算法实现找零public class test{ double[] rmbnum={100,50,20,10,5,10,1,0.5,0.1}; public static void main(String args[]){ double rmb=61.5; test t=new test(); rmbback r=t.reback(782);// while(r!=n...

2019-04-04 20:26:32 663

原创 计算符匹配

//填写运算符问题 :5 5 5 5 5=5 在其中插入 + - * / 运算符使等式成立public class test { // 运算字符中是否只有加减法 static boolean justdoit = false; static int sum = 5; public static void main(String args[]) { test t = new tes...

2019-04-04 20:25:44 179

原创 分治法实现比赛日程安排

//比赛日程安排/****1 2 3 42 1 4 33 4 1 24 3 2 1 左上角与右下角相同,左下与右上相同*/public class test{ public static void main(String args[]){ int num=8;//比赛队伍数量必须是2的幂次数 int result[][]=new int[num][num];...

2019-04-04 20:23:48 406

原创 递归实现汉诺塔

public class test{ public static void main(String args[]){ int n=12;//需要移动的个数 moveto(12,'a','b','c'); } public static void moveto(int n,char a,char b,char c){ if(n==1){ System.out.printl...

2019-04-04 20:22:20 163

GLSL4Idea.jar

显示着色器插件

2021-04-16

空空如也

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

TA关注的人

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