自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 资源 (4)
  • 收藏
  • 关注

原创 递归使用细节

递归1.表现递归的表现很简单,就是方法套方法2.使用时机出现一个状态可以转移到另一个状态的场景(状态可以是一个节点,一个问题的抽象定义等等),并且这些状态可以使用同一个方法(步骤),(比如走迷宫同一个点使用的走法一样,再比如遍历树用一个节点遍历方式一样,等等),那么就可以使用递归。3.细节实现细节是:该递归方法的参数和返回值。何时进入下一个状态。何时返回上一个状态。...

2022-01-11 15:23:28 202

原创 FLE(zab协议的具体实现)和raft的区别

FLE(zab协议的具体实现)和raft的区别下面不管是zab中所说的事务还是raft中所说的log,都用记录代替。1.相同点都可以保证全序(total order)提交记录。leader(不论是否是新选举出来的)包含集群中在任意节点上已提交的记录。即,一条记录在节点A上被提交了,即使节点A已经宕机,那么只有此时集群存在leader,该记录仍然在leader中。注意:2个算法都不能保证选举出来的新leader包含最多(最新)的记录,只能保证一定拥有已提交的所有记录。leader只需要向follow

2022-01-05 14:52:57 1116

原创 zookeeper Fast Leader Election(FLE) Recovery数据同步阶段源码分析

zookeeper Fast Leader Election(FLE) Recovery数据同步阶段源码分析1.介绍该阶段主要是leader同步数据给follower,具体见源码分析。2.关键对象Zxid:每一个事务id或者newEpochZxid都可以用Zxid表示,事务id的组成为(epoch|counter),epoch表示发送该事务的leader的currentEpoch,counter从1开始,该leader没发送一个事务就会自增该值;高32位为epoch,低32位为counter。ne

2022-01-05 11:36:12 728

原创 zookeeper Fast Leader Election(FLE) leader选举阶段源码分析

zookeeper Fast Leader Election(FLE) leader选举阶段源码分析1.关键对象vote /notification:投票信息,注意vote和notification不一样,但是下面都用vote泛指,因为它们包含的主要内容一样:id;表示该vote是谁投的state ;投出这个vote的节点的状态。proposedLeader ; 表示该vote给谁投(目标节点)。proposedZxid;该节点【内存】dataTree上最大的zxidproposedEpoch

2022-01-04 16:02:25 492

原创 线段树概念和使用技巧

线段树概念和使用技巧1.概念线段树概念可以查看博客线段树详解 (原理,实现与应用)_岩之痕-CSDN博客_线段树和书籍《算法竞赛进阶指南》-李煜东。2.使用技巧线段树可以方便的查找任一区间的统计值;这么说还有点含糊。本质上是,我们需要:每次根据一系列点[X1,X2,…,Xn]的值[f(X1),f(X2),…,f(Xn)]来得到某些值a,b,c,…。并且支持更新一系列点[x1,x2,…,xn]的值f(x)。求值a,b,c…满足区间可加性。当然上面说的一系列点也可以是一个。其实只想实现上

2021-08-19 20:11:59 232

原创 参考书籍汇总

参考书籍汇总1.算法《算法竞赛进阶指南》李煜东

2021-08-13 23:25:56 92

原创 并查集概念和使用技巧

并查集概念和使用技巧1.概念并查集常用来维护一些集合,每个集合中的任意两元素都满足某个条件x,并且条件x是一个传递性条件。支持查询**find()和合并2个集合union()**的操作,经过优化后的并查集完成上述操作的时间复杂度近似位O(1)。即:一个集合中的元素都满足某个传递性条件,如果a集合中某个元素和b集合中某个元素满足上传递性条件,则集合a,b合并为一个集合。例子:nums = [1,2,2,1,3,1]假如此时要将nums中相等的元素分到一个集合中去,显然“两元素相等”就是一个传递性条件

2021-08-13 17:40:15 373

原创 常用低复杂度算法和数据结构

常用低复杂度算法和数据结构1.查找无序序列中第K大的数:快速查找算法 O(n)。2.找到序列中的逆序对:归并排序 O(nlogn)3.查找序列中的最长递增子序列:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。贪心算法+二分查找 O(nlogn)4.查找2个序列的最长公共子序列:输入:text1 = "abcde", text2 = "agcafe" 输出:3 解释:最长公共子序列是 "ac

2021-07-30 17:22:39 739

原创 二分多分概念和技巧

二分/多分概念和技巧1.概念二分/多分是通过两个或者多个变量,将大的问题依次转成小的问题求解,降低时间复杂度。本质上是分治法的思想,不同点是分治可以将问题分为多个小问题,而二分/多分是将问题转成一个小问题。如何正确的写对二分需要注意某些细节。2.二分适用情况双指针的适用问题,双指针本质上也是二分思想。有序序列,或者部分有序序列上的查找。三分求单峰或者单谷函数的极值点。3.二分实现二分查找本质上就是找一个数,这个数满足某个函数,把这个函数叫做valid();有时候满足valid()函数

2021-07-30 13:29:43 832

原创 状压dp概念和使用技巧

状压dp概念和使用技巧1.概念状压就是用一个N进制整数,表示一个状态。比如:1:有一个序列[A,B,C,D],序列中的每个元素可以拿或者不拿。则一共有2^4种方式,可以用一个4位的2进制整数来表示每一种方式(状态)。整数6[0110]表示拿了B,C整数1[0001]表示拿了A整数15[1111]表示都拿了2:有一些人[a,b,c,d],每个人可以拿0,1,2个苹果。则一共有3^4种方式,可以用一个4位的3进制数来表示每一种方式(状态)。整数3表示的3进制数为[0010],表示只有b拿

2021-07-20 18:49:52 790

原创 单调队列概念和技巧

单调队列概念和技巧总结单调队列适合在数组/集合中,求滑动窗口的最值问题。1.概念单调队列相比单调栈,不同点就是利用第一种实现方式的单调栈,并接受删除栈底的数;表现为可以在队列尾部插入和删除数据(同第一种单调栈栈顶操作),并且可以在队列头部删除数据。2.实现单调栈主要用来找出一个滑动窗口中的最值。所以对于原数组中的每一个值,都会在队列尾部进行进队操作,进队操作和单调栈的进栈操作一样。当队列头部的元素已经不属于该窗口时就将该元素从头部删除。例子:找出每一个窗口中的最小值——构建一个单调递增队列

2021-07-15 15:51:59 109

原创 单调栈概念与技巧

单调栈概念与技巧总结(1)总的来说,单调栈适合一些求解过程或者求解出的结果明显的呈现出V或者形式的问题,这种类型的问题可以考虑使用单调栈。**(可以考虑是指,按照这个特点使用单调栈不一定能绝对完成任务),**总之能用单调栈解决的问题一定符合v,,但是符合v,^形式的问题,不一定能用单调栈,的具体问题具体分析(但是大部分都可以)。(2)求数组中一个元素的两端最近的大于或者小于该元素的元素(即左边最近的小于/大于它的元素,右边最近的小于/大于它的元素),可以求两端,当然只求一端也可以完成。——适用于第一种

2021-07-14 22:27:09 149

原创 SQL 特征

SQL 查询特征1.子查询和连接查询子查询(所有位置,不只是WHERE后面的子查询)可以看作是左连接操作+按两表的某些字段分组。例子:world表如下:namecontinentareapopulationgdpAfghanistanAsia6522302550010020343000000AlbaniaEurope28748283174112960000000AlgeriaAfrica2381741371000001886810000

2021-07-12 16:12:10 260

原创 同步、异步、阻塞、非阻塞

同步、异步、阻塞、非阻塞在谈论I/O时,经常会出现这几个词,但是很多文章把这几个词混淆在一起。同步/异步 和 阻塞/非阻塞 描述的是不同的对象,因此是不同的概念。1.同步/异步同步/异步描述的对象是多个事务,这里的事务可以是一行代码,一个方法,一个功能模块,或者一个进程/线程;因此在使用同步/异步时,一定有多个事务。同步:同步指的是多个事务按照一定的顺序执行,一个执行完,执行下一个。比如两行代码,一行执行完执行下一行;两个方法,一个执行完执行另一个;两个进程/线程,一个运行完在运行另一个。所以在

2021-05-15 12:11:20 280 1

原创 系统调用

系统调用1.设计系统调用功能使用syscall和sysretq指令完成,系统调用进入内核后,内核系统调用函数仍然使用的是用户地址空间的栈,即系统调用不会手动进行栈切换。因为系统调用处理函数采用c语言编写,利用c语言函数调用的特点:参数通过RDI、RSI、RDX、RCX、R8和R9寄存器传递,并且RAX用于保存函数返回值。通过这个特点,使用syscall和sysretq指令将系统调用模拟成一个普通的c函数调用。2.实现1.SystemCallTabel内核会维护一个SystemCallTabel,保

2021-04-26 19:10:51 312

原创 进程管理

进程管理1.设计在KePOS系统中,涉及到多进程场景,设计进程的初始化,进程的切换,进程的销毁;并且设计了一个可重入自旋锁来实现进程的同步和互斥。上图代表着每一个用户进程的线性地址空间,高地址为该进程的内核线性地址空间,低地址为该进程的用户线性地址空间。在每一个用户进程的页表中,都保存有完整的内核线性地址映射,和已经分配的用户线性地址映射。地址0x7fffffffffff为该进程的栈基址(栈向低地址扩展)。系统调用时,仍然使用用户空间的栈,这样设计的原因是:我将系统调用也当作该进程发生的一种普通函数

2021-04-26 17:21:37 188

原创 中断和异常

中断和异常1.介绍KePOS运行在长模式下,在长模式下,中断和异常处理过程如下:1.cpu会自动根据中断/异常向量,从中断描述IDT表中找到当前中断和异常的描述符,然后根据描述符中的IST,从Tss表中选出对应的栈指针将其赋值给RSP,完成栈的切换;然后,cpu会自动保存rsp,ss,cs,rip寄存器值到新栈,在长模式中,不论是否发生CPL变换,都会将中断/异常发生时的rip,rsp,ss,cs压栈,同时如果异常有错误码也会自动把错误码压栈,执行完后,栈环境如下图:2.然后将IDT表中该中断/异

2021-04-25 22:07:05 457 1

原创 C语言和汇编语言函数调用

C语言和汇编语言函数调用关系1.汇编语言函数调用X86结构中,cs寄存器和rip寄存器共同控制着CPU要执行的下一条指令(当前在不同的模式中控制方式不同,如:实地址2模式和保护模式,长模式等),一般会按照指令在内存中存储的顺序,依次执行。如果想要在普通程序(除去系统调用和中断)执行中跳转到某一条指令,就需要使用JMP、CALL、RET及其变种指令。jmp指令是无条件跳转指令,直接跳转到某条指令。call指令在执行时,会先将下一条指令地址压栈,然后跳转到目标指令。ret指令执行时,会从当前栈顶弹出

2021-04-24 23:59:47 1435

原创 设备管理

设备管理1.概念设备管理的主要功能有缓冲区管理、设备分配、设备处理、虚拟设备及实现设备独立性等,由于I/O设备不仅种类繁多,而且他们的特性和操作方式往往相差甚大,使得设备管理称为操作系统中最繁杂且与硬件最紧密的部分,下面开始正式的学习1。2.相关结构体设备管理模块主要的功能是管理每一个设备的驱动程序,从而可以对设备进行读写I/O操作,和其他操作;在该系统设计时,没有考虑字符设备和块设备的区别,简单的为所有的设备都划分2块缓冲区。1.Buffer//队列//head出队//tail入队str

2021-04-23 16:07:59 210

原创 内存管理

内存管理1.内存相关结构体设计了E820结构体,Zone结构体,Page结构体,Slab结构体,SlabPool结构体,Memory结构体。1.E820struct E820{ unsigned long address;//该块内存的物理开始地址 unsigned long length;//该块内存的长度 unsigned int type;//该块内存的类型}__attribute__((packed));E820结构体保存的是一块物理内存的信息,该信息在lo

2021-04-23 00:30:21 127

原创 Loader设计与实现

Loader设计与实现1.设计loader最主要的功能就是检测计算机硬件信息,然后加载操作系统到指定的物理内存0x200000。因为KePOS操作系统还没有文件系统功能,因此将应用程序简单的保存到了物理内存地址0xd0000000。要将应用程序最终保存到物理内存上,就需要程序实现从软盘FAT12文件系统读取应用程序bin文件(mymain.bin),然后将其保存到物理地址0xd0000000。2.功能1.检测计算机SVGA信息,设置SVGA。2.在软盘上找到kernel.bin,并将其加载到物理

2021-04-22 17:27:18 154

原创 Boot设计与实现

Boot设计与实现1.MBR主引导记录是存在于任何硬盘的第一个扇区中的信息。它包含有关操作系统在硬盘中的位置和位置的信息,以便它可以在RAM中引导1。主引导记录(master boot record,MBR)位于硬盘的第一物理扇区。由于历史原因,硬盘的一个扇区大小是512字节,包含最多446字节的启动代码、4个硬盘分区表项(每个表项16字节,共64字节)、2个签名字节(0x55,0xAA)2。计算机系统启动首先对本机的硬件设备进行测试, 测试成功之后进入自举程序INT l9H, 然后将磁

2021-04-22 16:19:31 326

原创 CGLib动态代理

CGLib动态代理1.概述CGLib动态代理不要求委托方法需要实现接口。CGLib动态代理能够实现基于方法级别的拦截处理。CGLib动态代理执行方法,不是使用反射执行Method.invoke()。CGLib不能对声明为final的方法进行代理。2.使用1.Callbackpublic class TargetObject { public String method1(String paramName) { return paramName; }

2021-02-17 15:17:37 544 4

原创 JDK动态代理

JDK动态代理1.动态代理与静态代理类对照的是动态代理类,动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码。动态代理类不仅简化了编程工作,而且提高了软件系统的可扩展性,因为Java反射机制可以生成任意类型的动态代理类。java.lang.reflect 包中的Proxy类和InvocationHandler接口提供了生成动态代理类的能力。2.类图其中Proxy$0是生成的代理类。3.实现1.接口Subject和Subject2interface Subj

2021-02-17 12:10:55 123

原创 设计模式-代理模式

设计模式-代理模式1.概述代理模式为另一个对象提供一个替身,以控制对这个对象的访问。2.类图3.角色Subject:真实对象和代理对象的公共接口。RealSubject:上述接口的实现对象。Proxy:对Subject对象的代理对象。4.实现1.Subjectpublic interface Subject { void Do();}2.RealSubjectpublic class RealSubject implements Subject{ publ

2021-02-16 13:21:35 152

原创 设计模式-状态模式

设计模式-状态模式1.概述状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。2.类图3.角色State接口:定义了一个所有具体状态的共同接口,任何状态都实现这个相同的接口,这样一来,状态之间可以互相替换。StateA,StateB:具体的2个状态,处理来自Context的请求。Context类:可以拥有一些内部状态。一些需要定义内部状态的类,都可以使用状态模式。4.实现1.State接口public interface State { void i

2021-02-15 13:04:08 338

原创 设计模式-模板方法模式

设计模式-模板方法模式1.概述模板方法模式是在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。2.类图3.角色AbstractClass:含有模板方法的类ConcreteClassA,ConcreteClassB:具体的实现类。4.实现1.AbstractClasspublic abstract class AbstractClass { //这个方法就是模板方法,定义为final放置子类重写。

2021-02-14 11:55:26 412 6

原创 设计模式-外观模式

设计模式-外观模式1.概述外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。2.类图3.角色palyGameFacade接口:外观接口,提供一个打游戏的场景,提供给使用者(Client)的一个统一的接口。computer接口:代表电脑。Game接口:代表游戏。其他类为上述接口的具体实现类。4.实现1.computer接口和其实现类public interface computer { void open(); v

2021-02-13 11:16:27 378 4

原创 设计模式-适配器模式

设计模式-适配器模式1.概述适配器模式将一个类的接口,转换成客户期望的另一个接。让原本不兼容的类可以合作无间。2.类图3.角色Target接口:适配器类和要转换成的目标类的共同父接口。Adapter类:适配器类,将Adaptee接口的子类转成Target接口的子类,内部组和了一个Adaptee对象。Adaptee接口:被适配的接口。AdapteeClass:Adaptee接口的具体实现类。4.实现1.Target接口public interface Target { vo

2021-02-12 17:26:08 252 1

原创 设计模式-命令模式

设计模式-命令模式1.概述命令模式将“请求”或者“命令”封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。2.类图3.角色Command接口:所有命令或请求都得实现该接口。Control对象:管理一组命令对象,通过队列或者集合管理命令。Temperature对象: 具体的组件对象。TempreatureLOWCommand对象:将Temperature对象温度调低的命令对象,内部组和了一个要操作的Temperature对象。4.测试1.接口Com

2021-02-11 15:44:58 192

原创 Spring Boot 常用接口和调用顺序,以及循环依赖分析

文章目录Spring Boot 常用接口和调用顺序,以及循环依赖分析1.概述1.ApplicationContextInitializer2.BeanFactoryPostProcessor2.1 BeanDefinitionRegistryPostProcessor3.BeanPostProcessor3.1InstantiationAwareBeanPostProcessore3.1.1 SmartInstantiationAwareBeanPostProcessor3.2 MergedBeanDef

2021-02-10 18:03:07 1730

原创 Spring Boot getBean()

Spring Boot getBean()1.概述getBean()方法是容器获取和实例化Bean的重要方法。容器中的所有的Bean(不包括SpringApplication启动时从/META-INF/spring.factories中读取并创建的Bean)都要通过该方法实例化。2.doGetBean()getBean()最终会调用doGetBean方法。//部分代码protected <T> T doGetBean( String name, @Nullable Cl

2021-02-10 13:31:02 3816 1

原创 Spring Boot源码阅读分析

文章目录Spring Boot源码阅读分析1.SpringApplication实例创建和运行1.1 SpringApplication实例创建new SpringApplication()1.2 SpringFactoriesLoader加载资源1.3 使用创建好的SpringApplication对象run()1.4 SpringApplicationRunListener注册概述:1.5 创建Context1.6 callRunners()2.refreshContext2.1 application

2021-02-10 13:29:45 544 2

原创 SpringBoot 笔记 (一)

SpringBoot 笔记(一)1.基础入门1.1 依赖管理父项目做依赖管理<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.2</version></parent>他的父项目<p

2021-02-06 14:10:34 225

原创 设计模式-工厂方法模式

设计模式-工厂方法模式1.概述工厂方法模式定义了一个创建对象的接口,但由其子类决定要实例化的类是哪一个。工厂方法让类把接口的实例化推迟到子类。2.类图3.角色Creator:是一个抽象类,实现了所有的操作产品的方法,但不实现工厂方法,工厂方法由具体子类实现。Product:所有产品必须实现这个接口。ConCreteProduct:具体的产品类。ConCreteCreator:具体的创建者类。4.实现功能:更具需要的产品,使用工厂方法创建具体产品。public interface Pr

2021-02-06 10:30:44 197

原创 设计模式—装饰者模式

设计模式—装饰者模式1.概述装饰者模式,动态地将责任附加到对象上。装饰者模式在设计上类似一种递归的方式:装饰者和被装饰者有相同的超类型。可以用一个或多个装饰者包装一个对象。装饰者可以在所委托被装饰者的行为之前或之后加上自己的行为,以达到特殊目的。2.类图3.角色Component : 装饰者和被装饰者的共同的超类。Decorator :装饰抽象类,内部组和了一个Component。ConcreteComponent : 被装饰者的具体实现类。ConcreteComponentA

2021-02-05 12:06:34 185

原创 设计模式—观察者模式

设计模式—观察者模式1.概述在对象之间定义了一对多依赖,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。2.类图3.角色Observer :观察者,用来监听Subject。Subject: 观察者观察的主题,可以注册观察者,删除观察者和当观察者观察的事情发生变化通知观察者。myObserver: 观察者的具体实现类。DataSubject: 具体的主题类。4.实现功能:当主题的data发生变化时,通知观察者,观察者输出变化后data的值。1.Subject接口//主题

2021-02-04 13:52:39 254 6

原创 Java FutureTask,Future,callable

文章目录Java FutureTask,Future,callable1.Future接口2.FutureTask类关系1.相关变量:2.相关状态以及状态之间的转换:3.内部类WaitNode3.FutureTask函数说明1.run()2.finishCompletion()3.cancel()4.get()5.awaitDone()4.用法与实现分析2.等待队列Java FutureTask,Future,callable1.Future接口来自官方文档 (Java 8)FutureA Fut

2021-02-03 20:37:22 238 2

原创 Java monitorexit指令有2次

Java monitorexit指令有2次1.结论:保证线程出现异常,锁也可以被释放编写一个测试方法:public void f(){ synchronized (this){ int x = 1; } }查看该方法生成的字节码: 0 aload_0 //从局部变量表下标为0的位置,加载锁对象到栈 1 dup //在栈顶复制该对象 2 astore_1 //将栈顶对象(锁对象)保存到局部变量表1的位置。 3 monitor

2021-02-01 16:41:06 911

原创 Java 对象头

Java 对象头在HotSpot虚拟机实现中,每一个java对象在jvm底层对应一个oop c++对象。下图为32位的虚拟机,对象的结构。注意:对象头中的Class对象指针,实际指向一个klass c++对象。该对象表示此Java类的元数据信息。所有java对象,包括java class对象都对应一个oop c++对象。java对象--------class对象实际通过下述关系维护:java对象(klass指针)-------->klass对象(内部的oop指针)---->class

2021-02-01 10:23:14 316

国科大知识产权考试总结.docx

国科大知识产权考试总结.docx

2021-04-16

第一讲 知识产权概述.ppt

第一讲 知识产权概述.ppt

2021-04-16

第三讲 著作权.ppt

第三讲 著作权.ppt

2021-04-16

第二讲 专利2019.pptx

第二讲 专利2019.pptx

2021-04-16

空空如也

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

TA关注的人

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