自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 资源 (1)
  • 收藏
  • 关注

原创 [操作系统]具有快表的内存转换机构

基本地址转换机构:一组硬件机构,将逻辑地址转换成物理地址,需要两次访存,先查页表再查内存具有快表的地址转换机构1)局部性原理2)什么是快表3)引入快表后,地址转换只需要一次访存局部性原理时间局部性:程序中执行了某条指令,不久后这条指令可能会再次执行;访问了某个变量,不久后可能会再次访问空间局部性:一个程序在访问了某个存储单元,不久后附近的存储单元很可能会再次被访问快表:联想寄存器(T...

2020-12-31 10:57:00 527

原创 [操作系统]内存非连续分配方式

基本分页存储方式1)把内存分为一个个小分区,再按照分区大小把进程拆分成一个个的小部分,比如每个分区4kb,每个分区就是一个页框/页帧/页存块/物理块,页框号从0开始2)将进程也分成和页框大小相等的一个个区域,称为页/页面,每个页面也有个编号,页号也是从0开始的3)将进程分页然后离散的分配到内存的页框里面知道逻辑地址的内存单元如何想得到存储单元内存物理地址1)算出逻辑地址的页号...

2020-12-30 22:33:00 147 1

原创 [操作系统]内存动态分区分配算法

首次适应算法每次从低地址开始查找,找到第一个能满足大小的空闲分区,顺序查找空闲分区链或者空闲分区表最佳适应算法(最小分配)按照容量递增从小到大的顺序查找,每次分配内存按前面顺序查找,找到第一个合适的,会留下很多外部碎片最坏适应算法(最大分配)按容量从大到小顺序查找邻近适应算法每次分配内存时,从上次查找结束的位置开始查找,找到大小,有相同的概率使用低地址和高地址...

2020-12-30 19:27:00 535

原创 [操作系统]内存连续分配管理方式

连续分配:系统为程序分配的是连续的内存空间单一连续分配:内存分为系统区和用户区,只有一道用户程序占据整个用户区,无外部碎片,有内部碎片,内存利用率低固定分区分配:分为系统区和用户区,用户区划分多个分区,每个分区一个程序,无外部碎片,有内部碎片,利用率低动态分区分配:可变分区分配,根据进程的大小动态建立分区  1)使用空闲分区表或者空闲分区链记录每个分区的信息  2)动态分区分配算法...

2020-12-30 19:11:00 145

原创 [操作系统]内存覆盖与交换

内存空间的扩充:覆盖技术,交换技术,虚拟存储技术覆盖技术-解决程序大小超过物理内存总和问题(现在基本不用了),增加了编程负担思想:1)将程序分为多个段,常用的段常驻内存,不常用的段需要时调入内存2)内存分为一个"固定区",若干个"覆盖区"3)需要常驻的放在"固定区",调入后不在调出(除非运行结束)4)不常用的段放在"覆盖区"交换技术-将内存某些进程暂时换出外存,把外存某些具备运行条...

2020-12-30 17:55:00 143

原创 [操作系统]内存的基础知识

什么是内存  1.存储单元  用于存放数据的硬件,程序执行前先放到内存中才能被CPU处理2.内存地址  给内存存储单元编地址,从0开始每个地址对应一个存储单元,可以按字节编址,也可以按字长编址,一个存储单元一个字节或字长内存运行的基本原理  1.指令的工作原理    内存有数据段和程序段,指令存放在程序段,变量存放在数据段    程序编译成指令,会告诉CPU应该去内存的哪个地址存取数据...

2020-12-30 17:18:00 263

原创 [操作系统]处理机调度的概念和层次

调度的三个层次高级调度(作业调度):操作系统调入作业,把作业从外存调入内存,建立相应的PCB,作业运行结束才调出,只发生一次中级调度(内存调度):引入虚拟存储技术,将暂时不能运行的进程调至外存等待,等时间再调入内存,进程状态为挂起状态,PCB还是常驻内存可能会发生多次低级调度(进程调度):在就绪队列中选取一个进程,发生频率很高进程还有两个状态:就绪挂起和阻塞挂起,就绪态或阻塞态都能被挂...

2020-12-30 14:10:00 289

原创 [操作系统]线程的概念和多线程模型

线程的概念和多线程模型 线程是处理机调度的单位,进程是资源分配单位 多CPU,各个线程占用不同CPU 每个线程都有一个线程ID,线程控制块TCB 线程也有就绪阻塞运行状态 同一进程不同线程间共享资源 线程几乎不拥有系统资源用户级线程:是应用程序通过线程库实现(用户视角)内核级线程:操作系统内核完成线程调度(内核视角),是处理机调度的单位多线程模型多对一模型:多个用户级线...

2020-12-30 13:39:00 81

原创 [操作系统]进程通信

进程通信:进程之间的信息交换进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立共享存储   1)两个进程对共享空间的访问必须是互斥的   2)基于数据结构的共享,慢是低级通信   3)基于存储区的共享,高级通信,在内存中画出一块共享存储区,数据形式存储位置都由进程控制消息传递   1)直接通信   2)间接通信   3)格式化的消息,消息头...

2020-12-30 12:06:00 41

原创 [操作系统]进程的控制

进程控制:创建新的进程,撤销已有进程,实现进程状态转换创建完成,提交===>就绪队列===>调度,切换===>CPU===>完成/异常结束用原语实现进程控制,原语的特点是执行期间不允许中断,只能一气呵成,这种不可中断操作就是原子操作原语采用"关中断指令"和"开中断指令"1.进程的创建:  从无-->创建态-->就绪态 1)创建原语   申请...

2020-12-30 11:53:00 75

原创 [操作系统]进程的状态与转换

进程的三种基本状态:运行态-占用cpu,并在cpu运行,单核cpu最多只能有一个进程处于运行态就绪态-具备运行条件,但是没有空闲cpu,暂时不能运行,万事具备只差CPU阻塞态-等待某事件另外两种状态创建态-分配资源,初始化PCB终止态-回收资源,撤销PCB状态转换就绪态-->运行态 [进程被调度]运行态-->就绪态 [时间片到,或CPU被其他高优先级进程抢占]运行态-...

2020-12-30 11:20:00 120

原创 [操作系统]进程的定义

程序段,数据段,PCB组成了进程实体,创建进程就是创建进程中的PCB,撤销进程实体中的PCBPCB是进程的唯一标识1.进程描述信息2.进程控制和管理信息3.资源分配清单4.处理机相关信息进程的组织(执行,就绪,阻塞状态):链接方式,按照进程状态分为多个队列,持有指向各个队列的指针索引方式,按照状态建立几张索引表,操作系统持有各个索引表的指针...

2020-12-29 23:10:00 71 1

原创 [操作系统]操作系统中断机制

1.当中断发生时,cpu立即进入核心态2.当中断发生后,当前进程进入暂停状态,操作系统内核对中断进行处理3.对于不同的中断信号,会进行不同的处理有了中断,才能实现程序的并发运行,cpu从用户态转入核心态,使用特权指令进行操作系统的管理工作(进程切换,分配io设备)中断分为内中断和外中断,内中断是cpu程序指令运行内部,外中断是指令外部...

2020-12-29 22:33:00 599

原创 [操作系统]操作系统的运行机制和体系结构

指令:cpu能识别执行的最基本命令指令分为特权指令和非特权指令,特权指令如内存清零指令,非特权指令如普通的加减乘除指令内核程序在核心态执行特权指令操作系统内核:1.时钟管理-实现计时功能2.中断处理-负责实现中断机制3.原语 1)位于操作系统底层,最接近硬件的程序 2)运行具有原子性 3)运行时间较短,调用频繁4.对系统资源进行管理的功能 1)进程管理 ...

2020-12-29 22:13:00 95

原创 [操作系统] 操作系统的特征-并发性/共享性/虚拟性/异步性

并发性1.并发:两个或多个事件交替执行2.操作系统的并发性:同时存在着多个运行着的程序,一个单核cpu同一时刻只能运行一个程序,操作系统负责协调多个程序交替执行,宏观上看起来是同时进行的3.如果有多个核心的cpu,那么程序是可以并行同时执行的共享性两种资源共享方式:互斥共享和同时共享互斥共享:一段时间之内只允许一个进程访问资源同时共享:一段时间以内允许多个进程“同时”访问...

2020-12-29 21:22:00 3742

原创 [PHP] PHP数组的哈希表实现

1.HashTable中的有个字段记录元素个数,每插入一个元素或者unset删掉元素时会更新这个字段。这样在进行count()函数统计数组元素个数时就能快速的返回。2.在PHP中可以使用字符串或者数字作为数组的索引 , 数字索引直接就可以作为哈希表的索引,数字也无需进行哈希处理 ,在PHP数组中如果索引字符串可以被转换成数字也会被转换成数字索引。所以在PHP中例如'10','11'这...

2020-12-29 11:47:00 158

原创 [算法] 开放寻址法解决哈希冲突方式

开放寻址法:又称开放定址法,当哈希冲突发生时,从发生冲突的那个单元起,按照一定的次序,从哈希表中寻找一个空闲的单元,然后把发生冲突的元素存入到该单元。这个空闲单元又称为开放单元或者空白单元。开放寻址法需要的表长度要大于等于所需要存放的元素数量,非常适用于装载因子较小(小于0.5)的散列表。查找时,如果探查到空白单元,即表中无待查的关键字,则查找失败。开放定址法的缺点在于删除元素的时候...

2020-12-28 17:37:00 908

原创 [GO] golang happen before 的保证原则

1) 单线程2) Init 函数如果包P1中导入了包P2,则P2中的init函数Happens Before 所有P1中的操作main函数Happens After 所有的init函数3) GoroutineGoroutine的创建Happens Before所有此Goroutine中的操作Goroutine的销毁Happens After所有此Goroutine中的操作4) Ch...

2020-12-28 15:07:00 385

原创 [PHP]PHP变量类型及存储结构

在2014年2月10号以前的php存储变量的结构是:Zend/zend.hstruct _zval_struct { /* Variable information */ zvalue_value value; /* value */ zend_uint refcount__gc; zend_uchar type; /* acti...

2020-12-28 12:06:00 83

原创 [PHP] php中的数据类型

php是弱类型语言 , 但是并不表示没有数据类型PHP 支持 10 种原始数据类型。四种标量类型:bool(布尔型)int(整型)float(浮点型,也称作 double)string(字符串)四种复合类型:array(数组)object(对象)callable(可调用)iterable(可迭代)两种特殊类型:resource(资源)NULL(无类型)为了确保代码的易读性...

2020-12-28 11:14:00 55

原创 [Go] Go中的channel特性

会panic的几种情况1.向已经关闭的channel发送数据2.关闭已经关闭的channel3.关闭未初始化的nil channel会阻塞的情况:1. 从未初始化nil channel中读数据2. 向未初始化nil channel中发数据3.在没有读取的groutine时,向无缓冲channel发数据4.在没有数据时,从无缓冲channel读数据返回零值:从已经关闭的...

2020-12-26 18:17:00 172

原创 [Go] Go中延迟语句defer的注意事项

defer语句在不对的位置出现 , 会出现错误file, err := os.Open("/null")defer file.Close() if err != nil { fmt.Println("open error! ", err) return} res, err := http.Get("http://www.google.com") /...

2020-12-26 15:47:00 280

原创 [Go] GO数据类型分类

引用类型1. 切片slice2.映射map3.函数func4.方法(p *P)func5.通道channel值类型数组boolintstringfloat指针类型nil可以赋值给引用类型和指针类型,不能赋值给值类型会报panic错误...

2020-12-26 14:52:00 311

原创 [Go] go常量中的无类型常量

Go语言的常量有个不同寻常之处。虽然一个常量可以有任意一个确定的基础类型,例如int或float64,或者是类似time.Duration这样命名的基础类型,但是许多常量并没有一个明确的基础类型。math.Pi就是无类型的浮点数常量const ( E = 2.71828182845904523536028747135266249775724709369995957496696...

2020-12-25 22:29:00 655

原创 [js] js中的闭包以及特点

闭包的特点是:1.函数里面嵌套函数2.函数内部可以引用函数外部的参数和变量3.参数和变量不会被垃圾回收机制回收这个问题输出啥function Foo(){ var i=0; return function(){ document.write(i++); }}var f1=Foo(),f2=Foo();f1();f1()...

2020-12-25 16:59:00 201

原创 [Go] GO中的字符串底层数据结构

一个字符串是一个不可改变的字节序列,字符串通常是用来包含人类可读的文本数据。和数组不同的是,字符串的元素不可修改,是一个只读的字节数组。每个字符串的长度虽然也是固定的,但是字符串的长度并不是字符串类型的一部分。由于Go语言的源代码要求是UTF8编码,导致Go源代码中出现的字符串面值常量一般也是UTF8编码的。源代码中的文本字符串通常被解释为采用UTF8编码的Unicode码点(rune)...

2020-12-25 10:54:00 252

原创 [Go] Slice的底层自动扩容

go语言圣经中的解释:数组和slice之间有着紧密的联系。一个slice是一个轻量级的数据结构,提供了访问数组子序列(或者全部)元素的功能,而且slice的底层确实引用一个数组对象。一个slice由三个部分构成:指针、长度和容量。指针指向第一个slice元素对应的底层数组元素的地址,要注意的是slice的第一个元素并不一定就是数组的第一个元素。长度对应slice中元素的数目;长...

2020-12-23 22:21:00 216

原创 [PHP] 多条spl_autoload_register的执行顺序

函数的定义如下:spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] ) : bool官方的解释是:如果需要多条 autoload 函数,spl_autoload_register() 满足了此类需求。 它实际上创建了 au...

2020-12-23 16:10:00 247

原创 [PHP] class_exists类不存在时会调用__autoload函数

该函数的定义如下:class_exists ( string $class_name [, bool $autoload = true ] ) : bool第二个参数就是表示是否自动调用autoload函数class_name类名。名字的匹配是不分区大小写的。autoload是否默认调用 __autoload。当然现在建议使用下面的函数进行自动加载spl_au...

2020-12-23 15:54:00 248

原创 [Redis] Redis的消息机制- 发布订阅

目前go-fly客服系统是通过内存来记录客服和访客的映射关系 , 不能用于分布式的环境下 , 只能单机使用 , 后续如果要支持分布式 , 可以考虑redis的pub/sub机制1.基于pub/sub的特点,他的典型使用场景就是实时消息系统,比如即时聊天,群聊等功能2.还常用作减轻高并发的I/O写压力,例如大量的写日志操作,如果实时写入日志文件或者数据库,会造成I/O超负荷,降低系统性...

2020-12-18 10:53:00 95 1

原创 [发电] 现在正式入驻爱发电平台

我的爱发电主页地址是下面这里https://afdian.net/@taoshihan欢迎大家来用爱发电 , 支持鼓励菜地

2020-12-17 23:01:00 2145

原创 [MySQL] PHP IP登录限制的实现

在登录的时候 , 对安全性比较高的业务 , 需要进行限制指定IP或IP段才能登录 , 企邮企业有的就限制只能在本企业内登录这个时候设计一下数据库 , 实现这个功能可以这样表结构:CREATE TABLE `iplimit_list` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `ent_id` int(10) uns...

2020-12-17 15:16:00 196

原创 [Redis] 哈希表的Rehash机制

哈希表的完整结构 , 因为他是多个哈希一层层嵌套的 , 所以会是这样的结构触发rehash的时机字典类型容量变化过程叫做rehash,需要满足一定的条件才能触发扩容机制服务器当前没有进行BGWRITEAOF或者BGSAVE命令,且当前键值对个数超过一维数组的大小,才会触发扩容。如果当前键值对个数超过一维数组大小的五倍,无论是否在进行BGWRITEAOF或者BGSAVE命令,都会强...

2020-12-17 13:49:00 967

原创 [Redis] redis的hash类型底层结构哈希表

redis hash的底层是压缩列表 和 哈希表两种形式 ,哈希表的形式是下面这样一层层嵌套的 , 转载自公众号CodeSheep源码中这几种类型的定义这里面的哈希结点dictEntry使用链地址法解决哈希冲突问题字典dict里存了两个哈希表dictht , 用于处理rehash过程 , 哈希表的扩展和收缩redis其他几种类型 , k- v结构也是利用的哈希...

2020-12-17 13:21:00 216

原创 [总结] 全部笔记博文目录总结(持续更新...)

计算机网络[Linux] tcpdump 过滤传递给指定端口的数据[Linux] 使用tcpkill杀掉tcp连接[Linux]利用tcpdump打印sql语句[linux] tcpdump抓包案例[日常] DNS的迭代查询过程[TCP] 单台linux服务器最多支撑的tcp最大连接数[Linux] 使用tcpdump查看上传文件过程中的tcp传输过程[Linux] 使用...

2020-12-17 11:29:00 242

原创 [Linux] ls命令的几个常用参数实现按时间/文件大小排序

ls命令是最常用的linux命令之一了 , 当要按时间或者按照大小进行排序文件的时候 , 可以使用以下参数按时间倒序排列ll -tr-t是按时间排序-r是倒序按大小倒序排列ll -Srh-S 大写S是按大小排序-r是倒序-h是格式化文件大小, 看起来更直观...

2020-12-15 19:04:00 453

原创 [Go] 在gin框架gorm下查询一对多的数据

go-fly客服系统快捷回复功能 , 需要获取到分组名以及分组名下的回复内容数据库的表结构是 , group_id是关联字段 , user_id是用户id:CREATE TABLE `reply_group` ( `id` int(11) NOT NULL AUTO_INCREMENT, `group_name` varchar(50) NOT NULL DEFAULT '',...

2020-12-15 18:58:00 1223

原创 [Redis] list底层的数据结构

前面我们使用list实现过队列 , 现在就来看一下list的底层结构list有两种实现方式:1. 压缩链表压缩列表(ziplist)是Redis为了节省内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型数据结构,一个压缩列表可以包含任意多个节点(entry),每个节点可以保存一个字节数组或者一个整数值。重点是内存连续2.双端链表prev和next两个指针 , 重点是可以从...

2020-12-14 19:04:00 359

原创 [GO]go redis实现滑动窗口限流-redis版

上一篇是单机当前进程的滑动窗口限流 , 这一个是使用go redis list结构实现的滑动窗口限流 , 原理都一样 , 但是支持分布式原理可以参考上一篇介绍func LimitFreqs(queueName string, count uint, timeWindow int64) bool { currTime := time.Now().Unix() leng...

2020-12-14 18:42:00 407

原创 [Go]GO实现滑动窗口限流算法-单机版

本代码基于原博客java版本的GO实现 , 原文解释也比较详细 , 这里也放上原文链接:https://www.cnblogs.com/dijia478/p/13807826.html具体解释如下 , 代码在最下面1.10秒内通过5次 , 这条线就是队列list,当第一个事件进来,队列大小是0,时间是第1秒:2.因为size=0,小于5,都没有到限制的次数,完全不用考虑时间窗口...

2020-12-14 14:06:00 1139

maccms7php.zip

电影站源码苹果CMS,PHP版本的完整版下载,要求PHP版本低于7.0

2019-09-21

空空如也

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

TA关注的人

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