自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

写写代码

个人站点:orangelsk.zone/ 博客园:www.cnblogs.com/orangelsk/

  • 博客(180)
  • 收藏
  • 关注

原创 Kinx TCP服务框架

前两天在小破站看到zinx框架的教程,于是跟着学了学,实现完了换了个名叫 Kinx hhhhh~。有意愿的可以star一波~GitHub - k-si/Kinx: tcp服务框架附一张整体架构图:设计思想tcp通信在代码层面上是非常简单的,因为几乎所有的语言都提供了套接字,套接字就是对底层操作系统通信细节的封装,只需要调用封装好的api,就可以完成复杂的通信操作。tcp通信典型的有server-client模式,对于TCP服务器来说扮演的肯定是server的角色。它通过监听端口,循环阻塞获.

2021-11-20 22:23:12 1557

原创 go slice扩容策略

我的博客搬家啦,欢迎光临~月一orange - 博客园 今天没吃橘子slice扩容代码在`go/src/runtime/slice.go`中,当前使用的使用的golang源码是GitHub中的master分支代码。时间是`2021-10-11`。先抛出一个问题,你觉得应该是打印多少呢?```govar b = []int64{1, 1}b = append(b, 1, 1, 1)fmt.Println("cap:", cap(b))```### 入参slice.go中...

2021-11-20 20:39:54 401

原创 SkipList 一种使用概率替代平衡树的数据结构

SkipList 一种使用概率替代平衡树的数据结构 - 月一orange - 博客园我的博客搬家啦~,来这两个地方看看吧~月一orange - 博客园今天没吃橘子

2021-11-19 18:45:21 478

原创 Adele——以Bitcask为模型的kv数据库

Bitcask存储模型简介Bitcask是一个kv存储的模型,它采用日志追加写的模式来记录数据。该模型包含两部分:内存部分和磁盘部分。我们都知道内存的读写速度是非常快的,痛点就是内存的易失性,所以我们必须将数据持久化到磁盘文件中。如何在磁盘中高效的读写呢?首先想要高效就必须了解磁盘读取数据的方式,传统的机械硬盘中,机械臂移动到目标磁道,然后磁盘旋转,读取该盘面上的数据,数据通过数据总线进入内存。如果要读取的数据是随机散布在硬盘中,需要消耗大量磁臂和磁盘移动时间,所以磁盘的顺序读取速度远远大于..

2021-11-13 20:25:45 605

原创 single flight防止缓存击穿

什么是缓存击穿我们常说的缓存问题:缓存雪崩,缓存击穿,缓存穿透都分别指什么呢?简单来说:缓存雪崩是指缓存在同一时间全部失效,导致压力全部转移到DB上。 缓存击穿指的是某个key在失效的这一刻,有大量的请求数据,这些数据压力也转移到了DB。 缓存穿透指的是大量数据访问一个不存在的key,导致每次都必须请求DB,DB压力过大。如何减少瞬间压力像缓存雪崩这种现象,一般是由于缓存服务器宕机(key哈希失效),大量的key设置了相同失效时间导致。可以通过哈希环或者人为控制key的失效时间来避免。

2021-12-07 09:59:03 2

原创 mmap 通过地址映射读写文件

预备知识理解mmap,首先要理解什么是用户态和内核态,其次要了解虚拟内存。简单的说,用户态内核态指的就是cpu指令集的权限程度,我们用户程序并没有操作硬件的权限,于是很多操作都需要转为内核态才能被执行。我们的物理内存也是分为用户空间和内核空间的,比如32位处理器的寻址范围为4G,那么低地址的3G就是用户空间,高地址的1G是内核空间。其次是虚拟内存,虚拟内存是一种感受,我们作为os的使用者,能加载的程序大小其实可以超过物理内存,这是因为内存空间不足时,访问一个不存在于内存的数据,会触发缺页中断,进

2021-12-05 02:47:29 18

原创 一致性哈希算法

普通哈希在分布式场景下,往往涉及到负载均衡,比如分布式缓存这种应用,我们希望如果获取相同的key,尽量映射到同一台机器上,这样可以在内存中最快速的获取,如果相同的key总是打到不同的机器上,可能由于缓存淘汰导致该缓存值被替换掉,进而需要读取磁盘,这样性能就会大打折扣。基于此,我们可以获取key值的哈希值,该哈希值对应的就是机器节点,比如key和节点个数做取余运算(key%n),这样每次相同的key必然会打到同一台机器上。但是问题又出现了,分布式环境中最常见的问题就是节点宕机,如果一台节点下线了,

2021-12-04 00:09:15 498

原创 CRC 循环冗余校验

参考:循环冗余校验(CRC)算法入门引导_Ivan 的专栏-CSDN博客_crc校验CRC校验原理及步骤_D_leo的博客-CSDN博客_crc校验crc冗余校验是为了保证接收方收到数据后,能确认数据是完好无损的。crc的思想假象实际中,a向b传小纸条,b怎么知道小纸条上的数据有没有被路上的其他同学修改过呢?聪明的a和b约定好,接受的数据必须按照x进行一次运算,如果运算的结果没有余数,就可以相信纸条内容是正确的。如果a真实传输的数据,运算之后就有余数,那这种约定不久失效了吗?这时聪明.

2021-12-03 20:07:40 4

原创 LRU 一种缓存淘汰算法

LRU是什么我们知道内存中的读写速度很快,基于此很多缓存技术都喜欢将数据存在内存中,但是内存空间是有限的,到达一定量后必然需要将一些不常用的缓存数据删除或者落盘。于是顺应而生了很多缓存淘汰算法。其中比较常见的有FIFO、LFU、LRU、LRU-k、2Q算法等等...其目的都是为了高效的维护缓存数据。缓存淘汰算法当内存占用快满时,要删除哪些缓存数据呢?假如刚删除的缓存数据,下一秒就被访问到,这时只能重新去磁盘读到缓存,大大浪费了时间。所以根据合适的场景选择合适缓存算法很关键。先来看FIFO,先

2021-11-29 21:05:34 476

原创 KMP 算法步骤详解

参考:mooc浙大数据结构数据结构_浙江大学_中国大学MOOC(慕课)kmp算法的本质是:1、当指针 i 指向的 字符s[i] 和指针 j 指向的 字符p[j] 不相同时,指针 i 不回退,指针 j 回退。(对比暴力算法是,指针 i 回退到之前位置的下一个位置,指针 j 直接回退到0)2、然后根据p的相同前后缀处理出来一个数组,记录着每次不匹配时,j 指针应该回退的位置。记录指针回退位置的数组称为match数组,match[i]表示的是:字符串p中,下标从0到i这段区间内,找到最长的且相同.

2021-11-26 12:28:04 104

原创 单调栈和单调队列

单调栈和单调队列都有共同的特性,单调性。所谓单调性就是在一段区间上,这段区间的数是线性递增的,或者线性递减的。栈和队列中一直维护一串单调的数字,那么这个栈和队列就叫做单调栈和单调队列,他们可以解决什么问题呢?一般单调栈解决的是,在一串数字中,求第i个数的左边第一个比它小的数。(当然问题不是绝对的,左边或者右边都可以,第一个比它大或第一个比它小也都可以)例题:活动 - AcWing一般单调队列解决的是,求在某个滑动窗口内的最小值。例题:活动 - AcWing对于求某个区间内的最大值最小值,可

2021-11-25 13:39:58 6

原创 go 逃逸分析

我的博客搬家啦~欢迎光临:今天没吃橘子。月一orange - 博客园逃逸分析我们知道往往声明一个变量或者申请内存空间时,是需要区分内存区域的,有的可以申请栈空间,有的申请堆空间。go语言中决定变量是分配到栈还是堆,取决于go编译器对程序的逃逸分析。在程序编译时,如果发现一个变量需要后续一直使用,往往会将其分配到堆内存。看例子:func test02() *int { a := 10 return &a}func main() { test02()}a在函数.

2021-11-20 20:45:07 114

原创 go 结构体内存对齐

我的博客搬家啦~欢迎光临~月一orange - 博客园 今天没吃橘子对齐规则1、对于结构体成员变量:某个成员的偏移量 = k * min(编译器对齐系数, 该成员类型长度) k >= 12、结构体完整大小也必须满足:min(k * max(编译器对齐系数, 最大成员类型长度)) k >= 1编译器默认对齐长度和计算机一次处理的的位数有关,32位处理器对齐系数为4,64位对齐系数为8。对齐系数就是编译器默认的对齐长度。demo对于这样一个结构体:...

2021-11-20 20:43:01 229

原创 静态链表 一种用数组模拟链表的数据结构

区别链表分静态链表和动态链表,工程里一般用动态链表,去new一个node,动态创建节点。静态链表一般用在刷算法题的时候,由于使用数组模拟,没有动态创建过程,并且使用数组下标代替next指针,所以静态链表的速度非常快,缺点就是非常消耗内存。两个数组静态链表中使用两个数组,分别存储节点的值和next“指针”。例如val数组存储节点的值,nex数组存放这个节点指向的下一个节点的下标,例如链表3->5->6->1->7,使用数组存储就是这样的:val: 3 5 6 1

2021-11-20 15:18:37 255

原创 CPU的栈机制

内存中的一段连续空间,可以看作栈,以先进后出的方式存储信息。如果说栈是什么,最好的例子应该是手枪弹夹。这是一段连续的内存空间,由弹夹入口至弹夹底部,内存单元地址递增,假设入口处地址为10000H,每个子弹占据一块标准内存空间(1个字节),第二颗子弹起始位置就应该是10001H。假设一共有16颗子弹,那么整体占用的地址应该是从10000H~10010H。栈空间是人为想象出来的,那么CPU怎么确定栈的入口和终点?首先要明确栈顶的概念,栈顶(SP)是个指针,永远指向栈中“最高“位置处,栈顶指向的内存空间地

2021-08-30 19:32:48 72

原创 寄存器访问内存

内存中字的存储字用来描述cpu一次性能处理的数据量,比如8086PC机的CPU是16位机型,一次可处理16位bit,那么对于该机器,一个字表示16个bit。一块内存单元存放一个字节,那么一个字需要两个内存单元。实际上,字存储在连续的两个内存单元中,这两个内存单元成为字单元。高位地址单元存放字的高位,低位地址单元存放字的低位。比如,1234H,0号单元存储34H,1号单元存储12H。寄存器的赋值前面我们学习过如何将汇编指令写入内存,让CS:IP指向命令所在内存地址,通过t命令来执行汇编指令

2021-08-30 19:32:06 36

原创 debug的使用

查看、改变寄存器内容R命令可以查看、改变寄存器的内容。通过-r,可以看到各个寄存器中的值。并且还展示了CS:IP存储的机器码和其对应的编译指令。(DOSbox是虚拟dos环境,存储的值基本都是0)-r后指定寄存器名称,就可以自定义寄存器存储的值。查看内存单元存储的值默认方式查看D命令可以查看内存空间的值。-d 默认每次展示128个内存单元的信息 右侧显示内存单元ascii码值,比如34H=52,表示的是4,对于不能表示的字符,统一用 . 代替 起始位置是当前CS:I.

2021-08-30 19:30:51 25

原创 寄存器执行指令过程

文章中涉及的机器默认为8086CPU和8086PC机寄存器8086有14个寄存器,其中AX BX CX DX通常存放一般数据,可以简单认为他们就是变量。例如:mov ax,4E20H就是将数据存入AX。add ax,1406H就是将数据加到原有的值上。8086的寄存器有16个比特位,他可以当作两个8比特位的寄存器使用。这两个寄存器分别叫AL,AH(我猜测是low和high的缩写)。mov al,78H就是将78存入低位字节中。当使用al、ah时,ax就被视为分离的寄存器,al、ah之间独立不相互

2021-08-30 19:30:07 130

原创 CPU对存储器读写

cpu可以进行高速计算,计算需要数据,数据可以存储在内存中。那么cpu在计算时,就需要从内存中读取数据,cpu对内存读写数据是怎样进行的呢?简要来说,分为三步:获取存储单元地址 向存储单元芯片输送控制语句(读/写) 将数据返回cpu或写入内存单元cpu和存储单元交互,必然需要物理硬件支持,一个cpu有n多个线路和其他元件连接。上面三步,分别对应三种数据总线:地址总线 控制总线 数据总线让一台微机进行工作,比如cpu要获取第三号存储单元中的数据,需要向微机输入电平信息,用机器指令表示为

2021-08-30 19:29:26 197

原创 GoLang-1 mac m1安装配置和go mod

golang横空出世,其三大特点:1、简单配置,不需要类似jdk、nodejs这样的运行环境,语言编译速度极快 2、自带协程,轻松支持高并发 3、

2021-06-20 01:42:40 1906

原创 分页存储管理方式

原理分页式存储管理的原理:假设一个进程大小1KB,我们把1KB分成若干个大小相同的块,叫做一个页面或一页;每页加以编号,从0开始。同时把内存空间分割成与页面大小相同大小的一块块,叫做块或者页框;这样将进程装入内存时,就以块为单位,将进程分为多个部分装入不相邻的物理块中。(进程的最后一页经常装不满而形成页内碎片)基本分页式存储管理(简单分页式存储管理)的原理:当一个作业需要被调入内存...

2021-06-20 00:55:31 62

原创 docker配置mysql,redis

文章目录介绍:步骤:安装dockerdocker镜像加速安装mysql配置mysql安装redis配置redis持久化数据配置redis密码--name指定容器名字 -v目录挂载 -p指定端口映射 -e设置mysql参数 -d后台运行进入mysql房间,可以发现内部就是一个Linux环境,可以使用ls等命令查看退出房间因为有目录映射,所以我们可以直接在镜像外执行将以下内容写入my.cnf重启mysql设置myql容器在docker启动的时候启动在本机上安装redis在本机修改配置文件插入下面内容,即可打开

2021-05-27 14:53:01 21

原创 Tiree Tree

字典树的结构是多叉树,每个节点有n个出度,每个出度表示一个字符。字典树的节点分为普通节点和终止节点,如图,红色的节点即为终止节点,往字典树中插入一个单词,这个单词的最后一个字符就是终止节点。如图,字典树中包含的单词有:"abcd","abd","b","bcd","efg","hi "。在输入框自动联想、单词出现频率统计的场景上都应用到了字典树。在有巨量相同前缀的单词中,字典树的效率高于哈希表,时间复杂度固定为O(len(str)),但是字典树的构建会消耗大量空间。字典树的特点就是尽量避免相同前缀的单词

2021-04-03 12:27:54 19

原创 Jmeter实践操作——数据库数据驱动

场景:从MySQL中循环读取用户名密码,登录bugfree创建case。步骤:启动bugfree环境,在数据库中新建表,存储几条用户名密码 设置浏览器代理,启动jmeter进行录制 对录制生成的脚本进行筛选,提取关键http请求 添加JDBC配置元件,配置好参数 在Thread Group中添加JDBC请求,填写sql语句和参数名 添加查看结果树和调试取样器,运行一次,查看结果树中的信息 添加while控制器和计数器,设置循环终止条件和和计数器步长 添加if控制器,设置if条件以下是

2021-03-23 00:30:03 58 1

原创 开源测试框架期末复习

第一章:基础概念软件测试分类根据项目流程阶段划分软件测试:单元测试、集成测试、系统测试、验收测试软件测试工作中对软件代码的可见程度:白盒测试与黑盒测试软件的不同测试面:功能测试与性能测试软件测试工作的自动化程度:手工测试与自动化测试自动化测试优缺点:重点缩短软件开发测试周期,可以让产品更快投放市场。测试效率高,充分利用硬件资源。节省人力资源,降低测试成本。增强测试的稳定性和可靠性。提高软件测试的准确度和精确度,增加软件信任度。软件测试工具使测试工作相对比较容易,但能产生更高质

2020-09-08 23:48:13 122

原创 最新开源Android项目,适合新手练习!

20天,从零开始学习Android,最终完成了一个比较满意的背王理小项目,希望大家多多star哦 >_<,谢谢!sdk10.0,代码清晰,注释全面。功能支持查找备忘,手势拖动,分类备忘等等......https://github.com/k-si/Calm-Note...

2020-08-22 00:16:05 349 1

原创 Android:CardView出现点击失效

问题具体是:cardview里加入几个textview,之后点击textview所在区域时点击失效,而点击空白区域,也就是非textview区域时点击有效。这个蛋疼的问题恶心了我好久,查看textview,删去android:inputType="textMultiLine"...

2020-08-14 14:41:08 373

原创 剪绳子

2020-07-24 23:20:25 38

原创 webdriver点击登录失效问题的解决

先描述一下问题:这是登录按钮的html,在testLogin方法中整个登录流程正常执行,并且不报错。但是登录后的界面不会显示,我试着在点击登录后设置sleep五秒,事实却是在输入用户名密码后网页静止,大概五秒后,页面关闭。控制台显示测试成功。这显然是不正常的,因为如果出现不了登录后的页面,后续的测试也无法进行。click方法失效,但是却没被检测到错误,这里我不知原因,如果有知道的朋友可以留言,谢谢。解决方法:百度发现问题原因是click的时候失去了焦点,解决方式是先点击父元素,然后点击子

2020-05-22 16:35:31 550

原创 单元格中出现input时,单元格长度变宽怎么办?

table的css中添加:table-layout: fixed;

2020-05-17 01:39:37 216 1

原创 浏览器查看.md文件强烈推荐Markdown Viewer

Markdown Viewer是一个firefox浏览器扩展插件,可以很方便的在浏览器上以markdown的形式浏览文件。展示一下它的用法:直接在浏览器输入D:进入D盘和资源管理器一样的界面和操作直接点开markdown.md文件,插件自动展示为markdown形式点击插件按钮可以设置更多的功能,代码文字高亮风格、目录、显示表情等等......

2020-04-30 18:28:01 16496 2

转载 运行selenium remotedriver时出现与NativeConstructorAccessorImpl.newInstance0错误的SessionNotCreatedException错误

转载地址:http://www.voidcn.com/article/p-ccdzafzn-bto.html报错信息:Exception in thread "main" org.openqa.selenium.SessionNotCreatedException: Unable to create new service: ChromeDriverServiceBuild info:...

2020-04-23 20:58:38 755

原创 eclipse保存web.xml文件时很卡?

xml版本问题,可以查看你的web.xml文件中webapp标签中的信息:解决方式一:在导入xml文件时,注意版本,我第一个动态web项目是3.0版本(保存web.xml文件不卡),所以这里也要保持3.0版本。解决方式二:使用@WebServlet代替web.xml中的配置...

2020-04-13 12:06:30 1089

原创 leetcode98. 验证二叉搜索树

题目描述:给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。示例1:输入: 2 / \ 1 3输出: true示例2:输入: 5 / \ 1 4 / \...

2020-04-12 23:07:03 31

原创 leetcode104. 二叉树的最大深度

题目描述:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度3 。思路:递归深入。/** * Definition f...

2020-04-11 18:34:57 34

原创 leetcode141. 环形链表

题目描述:给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果pos是-1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例2:输入:head = [1,2]...

2020-04-11 18:06:46 26

原创 leetcode234. 回文链表

题目描述:请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用O(n) 时间复杂度和 O(1) 空间复杂度解决此题?思路:不想借助额外空间,只能对链表做出改变。借助额外空间反而更容易想出思路,比如转换链表为数组,再借助双指针;或者借助...

2020-04-10 23:43:43 32

原创 leetcode21. 合并两个有序链表

题目描述:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路:新建头节点,同时遍历两个链表,p1大于p2就继续遍历l1,p2大于p1就继续遍历l2;最后把剩余的节点添加。/** * D...

2020-04-10 22:02:59 35

原创 leetcode206. 反转链表

题目描述:反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?思路:一次遍历,把2调换到1前面,同时1连接3;把3调换到2前面,同时1连接4.../** * Definiti...

2020-04-10 11:55:20 36

原创 leetcode19. 删除链表的倒数第N个节点

题目描述:给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的n保证是有效的。进阶:你能尝试使用一趟扫描实现吗?思路:一、数组化遍历一遍,同时将实例对象放...

2020-04-09 19:45:56 54

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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