- 博客(40)
- 资源 (1)
- 收藏
- 关注
原创 Go语言的并发模式
Go语言的并发模式1、约束保证操作安全的方法:用于共享内存的同步原语 (锁,sync.Mutex)通过通信共享内存来进行同步(channel)隐式并发安全: 不会发生改变的数据和受保护的数据在并发编程中,不可变数据是理想的,它隐式的并行安全。并发进程之间可以对相同的数据操作,但是不能修改,如果创建新数据,就需要创建所需修改的数据的新副本,可以提高开发效率和程序运行速度,使得程序临界...
2019-09-22 21:03:50 404
原创 算法实现----二分查找go语言实现
二分查找二分查找:时间复杂度O(log n),有序的情况下go语言实现:func erFen(nums []int, key, n int) int { var low, high, mid = 0, n, 0 for { mid = (high + low) / 2 if key < nums[mid] { high = mid - 1 } else if ke...
2019-09-08 16:38:07 345
原创 Linux内核学习----内存管理
内存管理页区获得页获取填充为0的页释放页一般的内存分配分为内核空间和用户空间,二者之间有很大的不同,内核中不支持简单便捷的内存分配(内核一般不能睡眠),内核中处理内存分配错误相对困难。页内核把物理页作为内存管理的基本单元。即MMU(内存管理单元)通常以页为单位进行处理,管理系统中的页表。从虚拟内存的角度页就是最小单位。处理器的最小可寻址单位通常为字节。不同的体系结构中支持的页大小是不同的...
2019-09-08 16:37:21 389
原创 Golang的内存管理--学习笔记
Go的内存管理内存的分级arena区SpansGo中的mspan内存管理组件mcachemcentralmheap内存的分配流程内存的分级使用的是多级分配的办法,将内存分为多级,进行分级管理,从而降低锁的粒度。并且将可用的堆内存采用二级管理,其中每个线程会有一个自己的内存池,只有在自己的内存池不够时才会去全局内存中获取,够用时首先使用自己的内存池。基本概念arena区arena是堆区(...
2019-09-08 16:36:42 615
原创 Linux学习---中断和中断处理
中断和中断处理1、中断异常2、中断处理程序2.1、注册中断处理程序2.2、中断处理程序标志3、上半部和下半部的对比处理器的速度和外围设备的速度相差太远,为了解决让内核不做过多的无用功(使用轮询),这是就需要一种机制在硬件需要时再向内核发出信号(中断机制)中断机制可以更好的协同处理器和外部设备,并且提高机器的性能1、中断中断:指的是可以使得硬件得以发出通知给处理器,中断可以随时产生(硬件设备...
2019-08-25 15:45:09 395
原创 Redis中面试常见的问题整理
1、Redis中数据结构与使用场景A、string(字符串)是key-value结构value可以是字符串,整数,浮点型主要应用与常规的key-value的缓存(这也是redis常见的使用)B、list(链表)链表中每一个节点都可以是一个字符串,并且节点中的内容可以重复,从链表的两端进行出队或入队操作主要应用:a、消息队列b、关注队列,粉丝队列等C、hash(散列)包含键值对...
2019-08-05 19:27:23 225
原创 linux内核学习-----进程调度
进程调度进程调度:是指进程调度程序,主要负责决定将哪个进程投入运行,何时运行以及运行多长时间;可以认为是在可运行态进程之间分配有限的处理器时间的内核子系统调度程序:最大限度利用处理器时间(可理解为最大程度上减少cpu的空闲时间),当cpu数少于待运行进程数时,这时会有一些进程等待,调度程序需要选择一个来执行(基本工作)一、多任务 多任务操作系统:同时并发地交互执行多个进程的操作系统 多任...
2019-07-21 14:01:47 179
原创 Linux内核学习----进程管理
进程的管理1、进程进程:处于执行期的程序以及相关资源的总称,(进程是正在执行的程序代码的实时结果)包含其他资源:打开的文件挂起的信号内核内部数据处理器状态一个或多个具有内存映射的内存地址空间一个或多个线程存放全局变量的数据段执行线程:(线程)进程中活动的对象,拥有独立的程序计数器,进程栈和一组进程寄存器,是内核调度对象,在Linux中对进程和线程不做特别区分操作系统中进程中...
2019-07-08 20:05:23 224
原创 从零开始学Linux内核-----从Unix到Linux
1、从Unix到LinuxUnix强大的原因:a、Unix简洁:仅仅提供几百个系统调用并且有一个明确的设计目的b、一切皆文件:这一抽象使得对设备和数据操作都是用同一套系统调用接口来进行open(), read(), write(),lseek()和close()c、Unix的内核和相关的系统工具使用C语言编写而成:在各种硬件体系架构中有超强的移植能力,使得开发人员很容易接受它d、进程创...
2019-07-01 22:21:22 365
原创 Linux中如何优雅的删除被打开的文件
linux中如果磁盘满了,删除较大文件的步骤1、查找较大文件find / -type f -size +500M 查找大于500mb的文件2、如何删除如果是没有打开的文件使用 rm如果是正在被使用的文件,并且打开文件的程序不能被kill如果使用rm后磁盘还是没有变化使用lsof | gerp deleted 查看需要被删除的文件被那些进程打开然后使用截断将文件截断,释放内存&...
2019-06-29 15:24:29 1743
原创 Go语言并发组件
Go中的并发组件1、GoroutineGoroutine: go语言程序中最基本的组织单位之一,每个Go程序中至少会有一个main goroutine,在进程开始时自动创建并启动。是一个并发函数,在程序中使用go关键字进行触发gorountine如何工作?A、goroutine与Go语言在运行时是深度集成的B、goroutine没有定义自己的暂停方法或再运行点C、Go语言再运行时会观察...
2019-06-27 19:05:04 368
原创 Redis拓展篇----过期策略
Redis的过期策略Redis中的过期:Redis中所有的数据结构都可以设置过期时间,时间一到就会被自动删除。Redis为单线程,如何保证在删除过期key时保证线上的读写不出现卡顿?1、过期的key集合Redis中将每个设置了过期时间的key放入一个独立的字典中,Redis会定时遍历这个字典,来删除到期的key删除策略:主要是定时删除(集中处理)和惰性删除(零散处理)惰性删除:在客户端...
2019-06-23 14:49:44 213
原创 Redis学习拓展篇-----LRU算法
LRU产生的原因:解决Redis内存超出物理内存限制时,内存和磁盘产生频繁交换,导致Redis性能下降在生产环境中不允许出现交换行为,为了限制使用最大使用内存,Redis提供配置参数maxmemory用于限制内存超出期望大小实际内存超出maxmemory时Redis提供的可选策略: - noeviction:不会继续服务写请求(del除外),不影响读请求,好处保证数据不丢失。默认的淘汰策略...
2019-06-23 14:48:11 329
原创 Redis学习拓展篇---保护Redis
1、指令安全在Redis中有一些比较危险的指令 - keys导致Redis卡顿 - flushdb和flushall导致redis所有数据清空在redis中为了避免认为的误操作,配置文件中提供rename-command指令用于将危险指令修改成特殊的名字。比如:rename-command keys xxxx 在需要执行keys时就需要使用新的xxxx了也可以将将指令设置成空串,...
2019-06-23 14:47:41 236
原创 Golang源码学习----string包
String包在go中的字符串是不可变字节序列,默认是UTF-8编码存储Unicode字符1、分割字符串函数主要有:SplitN:按指定的字符,将字符串分割,返回指定切片长度Split:按指定的字符,将字符串分割SplitAfterN:按指定字符分割,但是包含字符,返回指定切片长度SplitAfter :按指定字符分割,但是包含字符Fields:用于分割字符串,不包括空格(跳过所...
2019-06-23 14:41:00 847
原创 Redis学习拓展篇----懒惰删除
懒惰删除Redis内部除了一个主线程还有几个异步线程专门用作处理一些耗时的操作将Redis中的数据比作为一颗大树1、Redis为什么使用懒惰删除删除指令del会直接释放对象的内存,一般会很快,如果删除很大的key时删除操作会导致单线程卡顿,redis4.0中为了解决这个问题引入了unlink指令,可以对删除操作进行懒处理,丢给后台的线程来异步回收内存。多线程中安全性的保证:当要吧数据(大...
2019-06-09 20:37:37 379
原创 Redis学习拓展篇----Info指令
Info指令Info指令用于使我们可以知道Redis内部一系列运行参数Info指令显示分为9块:- Server:服务器运行的环境参数- Cliens:客户端相关信息- Memory:服务器运行内存统计数据- Persistence:持久化信息- Stats:通用统计数据- Replication:主从复制相关信息- CPU:CPU使用情况- Cluster:集群信息- Ke...
2019-06-02 15:56:14 220
原创 Redis学习集群篇-----Codis
Redis中的CodisCodis式redis集群方案,是一个代理中间件,和redis一样也使用Redis协议对外提供服务,接收到客户端指令然后转发给redis,是客户端和redis之间的中间代理Codis是无状态的服务,每个节点都是对等的1、Codis分片原理在Codis中默认将所有的key划分为1024个槽位(solt),在Codis中会对客户端传过来的key进行特定运算找到key的...
2019-05-26 13:00:02 454
原创 Go语言并发之道学习-----死锁,活锁和饥饿
死锁和活锁死锁:会使得所有并发程序在等待,如果没有外界干预,程序不能恢复type values struct{ mu sync.Mutex value int}func TestMutes(v1, v2 *values){ defer wg.Done() v1.mu.Lock() defer v1.mu.Unlock() time.Sleep(2*time.Second) v...
2019-05-26 12:59:10 905
原创 Go语言并发之道学习-----基本概念
并发概述并发:通常指的是一个或多个进程同时发生的过程1、竞争条件:当两个或多个操作必须按正确的顺序执行,而程序并未保证顺序var data intgo func(){ data++}()if data == 0{ fmt.Printf("The data:%d\n",data)}这段代码可能会有三种情况不打印打印 The data:0打印 The data:1因此代...
2019-05-26 12:58:03 570
原创 Redis集群篇----Cluster
Cluster是redis中提供的集群方案Cluster集群中每一个节点负责集群的一部分数据,并且每个节点负责的数据多少可能不一样。每个节点相互连接组成一个对等的集群,之间使用二进制协议交互集群信息Cluster和Codis:Cluster和Codis不同的是前者是去中心化的Cluster将所有数据划分为16384个槽位,比codis的1024个槽位更加细致,每个节点负责一部分槽位,不...
2019-05-19 14:05:40 305
原创 Redis学习集群篇----Sentinel 哨兵
Sentinel 哨兵Sentinel:Redis中高可用的,自动进行主从切换,Redis Sentinel集群可以看成是一个zookerper集群,是集群高可用的心脏Sentinel主要工作:负责持续监控主从节点的健康,如果主节点挂掉会会从新选择一个新的主节点(选一个最优从节点)客户端连接步骤:客户端----->sentinel集群------>通过sentinel查询主节...
2019-05-12 15:10:56 141
原创 Redis高级数据结构 HyperLogLog,布隆过滤器
Redis中的高级数据结构五、HyperLogLogHyperLogLog:redis高级数据结构,用于解决统计问题,提供不精确的去重计数方案(标准误差0.81%)1、使用方法pfadd:增加计数(和set的asdd用法一样,来一个往里面放一个)pfcount:获取计数(和scard的用法一样,直接获取计数)pfmerage:将多个pf计数累加再一起形成一个新的pf值2、使用Hype...
2019-04-21 15:28:59 1162
原创 网络是怎么连接的系列---从网线到网络设备
从网线到网络设备计算机发的网络包----->集线器----->交换机----->路由器----->互联网接入路由器----->网络----->目的地传输过程中的包:传输到目的地的过程中都是独立的,相互之间没有任何关联1、集线器集线器将信号广播到整个网络中(所有连接的设备)集线器中的PHY模块功能和MAC模块的功能基本一致2、交换机交换机根据地址表进...
2019-04-21 15:26:21 1156
原创 网络是怎么连接的系列--用电信号传输TCP/IP连接
用电信号传输TCP/IP连接1、创建套接字协议栈内部: 应用程序: 网络应用程序 (浏览器,web,邮件服务器等)secokt库 解析器操作系统: 协议栈TCP (需要连接) UDP(无连接)IP(传输网络包,确定路由)ICMP 驱动程序: 网卡驱动程序(控制网卡)硬件: 网卡UDP和TCP的用途:TCP主要用于...
2019-04-14 17:00:35 687
原创 Golang的并发与goroutine
1、并发的含义并发与并行的区别:并发:逻辑上具备同时处理多任务的能力(由程序的逻辑实现决定)并行:物理上在同一时刻执行多个并发任务(由的处理器核数决定)实际的单核处理器在处理任务的时候基本都是以间隔方式切换执行(时间片调度),并行是并发程序在设计的理想执行模式。任务可以并行执行其中多线程和多进程是基本条件。然而在单线程中引入了一个比线程还轻量级的运行单元,协程(coroutine)实...
2019-04-07 13:39:13 448
原创 Redis学习系列,基础数据结构,位图,分布式锁
一、redis基础数据结构redis中所有数据结构都是以唯一key作为名称,并通过key获取value数据,不同的是value的数据结构不同五种数据结构:string(字符串):使用非常广泛,常见的是存储用户信息。字符串是动态字符串,是可以修改的字符串,在内部使用预先分配冗余空间减少内存频繁分配字符串长度小于1MB时扩容是加倍,大于1MB时是扩容一次加1MB。最大长度是512MBlis...
2019-04-07 13:38:01 313
原创 Golang的并发安全
Golang的并发安全1、通道channel(CAP模型)channel是Go中代替共享内存的通信方式,channel从底层实现上是一种队列,在使用的时候需要通道的发送方和接收方需要知道数据类型和具体通道。如果有一端没有准备好或消息没有被处理会阻塞当前端。Actor模型和CAP模型Actor模型:在Actor模型中,主角是Actor,类似一种worker,Actor彼此之间直接发送消息,不...
2018-12-09 22:21:27 7978 1
原创 golang中interface 接口
Golang中的接口:代表一种调用契约,是多个方法声明的集合接口类似于C++中的纯虚函数,只需要关注的是做什么,而不去关注具体怎么做由谁来做(一种面向对象的思想)。接口相比于C++中的纯虚函数更加灵活,只需要实现接口的全部方法就可以进行使用了。接口的优点:解除类型依赖屏蔽内部结构和实现细节有助于程序的扩展使用接口的注意:由于接口的内部实现机制会有运行期开销对于相同的包,或不频繁变化...
2018-12-02 18:04:43 178
原创 MonGoDb学习笔记
MongoDB:一个高性能,开源,无模式的文档型数据库主要功能特性:文件存储格式BSON(json的扩展) 模式自由,数据格式不受限于表的结构 支持动态查询 支持完全索引 支持复制(主从复制)和故障复制 使用高效的二进制数据存储,包括大型对象 自动处理碎片,以支持云计算层次的扩展 支持多种语言 内部支持js优势:查询快速 高并发,2万 高容量,10TB 使用场...
2018-12-02 18:04:00 110
原创 TCP内容杂谈
CRC校验--->循环冗余校验码(Cyclic Redundancy Check) 数据通信领域最常用的一种差错校验码, 特征:信息字段和校验字段的长度可以任意选定CRC:是一种数据传输检错工具,对数据进行多项式计算,并将得到的结果附在帧后面,接收设备也有类似算法,保证数据传输正确性和完整性循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整...
2018-12-02 18:03:40 223
原创 leetCode两数之和
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:/***************...
2018-03-25 16:39:17 681
原创 C风格字符串
C风格字符串与字符数组1.C风格字符串(末尾必须有'\0'): a.字符串常量,末尾自动加空字符 字符常量'A'表示单个字符,"A"字符串常量,表示A和空字符(null)两个字符 b.末尾添加了'\0'的字符数组2.字符数组 方式一:char ca1[]={'C','+','+'};//末尾没有null (大小为3) char ca2[]={'C','+',...
2018-03-20 15:56:28 202
原创 C++,剑指offer青蛙变态跳台阶
青蛙变态跳台阶 一次可跳一个,两个,到N个 解题思路: 用数学归纳法可得出f(n)=2^(n-1).class Solution {public: int jumpFloorII(int n) { int m=1; for(int i=0;i<n-1;i++){ m*=2; } retur
2017-09-25 15:44:00 777
原创 C++百度笔试买帽子
链接:https://www.nowcoder.com/questionTerminal/f3aaf8fedcea43c6b12a11710068726b?toCommentId=876396 来源:牛客网 链接:https://www.nowcoder.com/questionTerminal/f3aaf8fedcea43c6b12a11710068726b?toCommentId=87639
2017-09-24 17:55:15 250
原创 C++百度笔试题
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
2017-09-24 17:46:53 427
原创 C语言小知识
NOWCODER(牛客网) 笔记一、局部变量与全局变量局部变量不会影响全局变量的值,使用完即会释放二、变量的传递形参的修改对外部不影响传入引用与指针时在函数里修改的将会传递出来三、C语言与C++中的const void main(){ const int i = 0; int *j = (int *)&i;
2017-09-21 18:42:28 171
原创 网络编程
一、OSI七层模型物理层:提供为建立、维护和拆除物理链路所需要的机械的、电气的、功能的和规程的特性;有关的物理链路上传输非结构的位流以及故障检测指示。数据链路层:提供数据收发功能和过程,提供数据链路的流控。网络层:控制分组传送系统的操作、路由选择、拥护控制、网络互联;作用是将具体的物理传送对高层透明。传输层:提供建立、维护和拆除链接的功能;选择网络层提供合适的服务;在系统间提供可靠
2017-09-21 18:41:33 177
原创 Linux用户管理,组,目录
1.新建用户组,shengchan,caiwu,jishugroupadd shengchan; groupadd caiwu;groupadd jishu2.新建用户要求如下: *shengchan组是tom用的附加组useradd -G shengchan tom *caiwu组是harry用户的附加组useradd -G caiwu harry *jishu组...
2017-01-06 13:10:02 422
原创 linux 基础
1.用student用户登陆系统图形界面开机后出现一个登陆界面,选择student用户,输入密码登陆。2.打开一个bash方法一:应用程序->收藏->终端 点击打开即可方法二:单击右键方法三:应用程序->utilities->terminal3.修改student的密码,把密码更新成"westos“ su - root passwd student4.显示当前系统时间...
2016-12-29 13:47:15 353
interview_internal_reference.zip
2019-07-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人