自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(326)
  • 收藏
  • 关注

转载 哈希表原理以及go map原理

哈希表原理其实map是一种HashMap,表面上看它只有键值对结构,实际上在存储键值对的过程中涉及到了数组和链表。HashMap之所以高效,是因为其结合了顺序存储(数组)和链式存储(链表)两种存储结构。数组是HashMap的主干,在数组下有有一个类型为链表的元素。当我们存储一个键值对时,HashMap会首先通过一个哈希函数将key转换为数组下标,真正的key-value是存储在该数组对应的链...

2019-07-16 20:02:03 1171 1

原创 golang实现切片

切片//定义切片类型type Slice struct { // void * C语言中的万能指针,没有具体数据类型,不能进行运算 Data unsafe.Pointer //go语言中万能指针类型。操作需要转换成int Len int //数据元素个数 Cap int //可扩展的有效容量}unsafe.Pointer参与运算操作需要转换,p := uintpt...

2019-07-16 19:57:03 438

原创 gc机制

gc机制引用计数法三色标记法:目标是为了缩短STW(stop the world)时间,提高程序时序性。基本原理扫描与标记阶段起初所有对象都是白色扫描找出所有可达对象,标记为灰色,放入待处理队列从队列提取灰色对象,将其所有引用对象标记为灰色放入队列,自身标记为黑色写屏障监视对象内存的修改,重新标色或清理阶段此时只剩下白色和黑色对象,将白色对象的内存收回。将所有黑...

2019-07-16 07:37:10 157

原创 websocket

websocketWebSocket是应用层的双向全双工协议,基于tcp。创建链接只需要一次握手,服务器和浏览器就可以创建持久性连接。服务器可以持续推送消息,而过去使用轮询方法。首先浏览器要支持websocket,websocket主要应用弹幕,网站客服聊天,交易所行情实时推送。uri协议是ws,增加安全套接字wssgolang版本demopackage mainimport ( ...

2019-07-15 21:19:27 130

原创 go mod

go mod12.5版本及以上检查go mod是否开启go mod没有开启可以在环境变量中配置export GO111MODULE=auto# 12.5默认不需要配#auto#on#off使用新建一个文件test.gopackage mainimport ( "fmt" "github.com/astaxie/beego")func main() { b...

2019-07-02 22:01:46 153

原创 一个好用的errors包

一个好用的errors包可以报出错误的位置地址"github.com/pkg/errors"demo包裹错误,打印出像panic的效果func Wrap(err error, message string) error打印错误需要%+v才能详细输出package mainimport ( "fmt" "github.com/pkg/errors" E "errors"...

2019-07-02 21:02:49 2267

原创 gob序列化与反序列化

gobgob 支持变长类型编解码性能对比:protocol buffer > gob > binary > json结构体序列化时,需要序列化的字段需要首字母大写。序列化type People struct { Name string Age uint64 Pid *int //可以序列化指针类型}func Serialize() { pid := ne...

2019-06-27 21:36:50 636

原创 binary序列化与反序列化

binary性能一般,使用简单,适合定长的数据,例如bool, int8, uint8, int16, float32, complex64, ...或者数组、包含定长成员变量的结构体。有性能需求建议使用protocol buffer性能比较:protocol buffer > binary > gob> json序列化 var n uint64 n = 500 b...

2019-06-27 21:08:23 677

原创 证书和HTTPS

证书和HTTPShttp:应用层协议,标准协议https:不是标准协议,http +ssl(security socket layer)例如访问百度访问百度时,如何认证百度,需要CA机构帮忙认证百度在本地生成公私钥将公钥发给CA机构CA对百度的公钥进行处理,生成百度数字证书,返回给百度。客户访问百度,百度发送给客户证书。客户认证证书是否有效如果证书有效,生成对称密钥,使用服务...

2019-06-24 20:14:21 127 1

原创 base64编解码

base64编解码对二进制数据进行处理,每3个字节一组,一共是3x8=24bit。然后将24bit重新划为4组,每组正好6个bit。base64编码不是加解密,一种数据的格式,方便传输。两个系统可能有不同的字符,把特殊的字符编译文本,传输过去。把一些特殊字符做处理,正常传输。base64标准字母表A-Za-z0-9 + /不足3字节倍数的情况go中bas...

2019-06-23 20:40:04 1289 1

原创 go实现DES+CBC

go实现DES+CBCDES密钥长度:8字节CBC分组长度要与算法密钥长度相同//加密func desCBCEncrypt(plainText []byte, key []byte) ([]byte, error) { //TODO //创建des接口 block, err := des.NewCipher(key) if err != nil { return nil ,...

2019-06-23 20:00:19 452 1

原创 go实现AES+CTR

go实现AES+CTR加密算法:aes密钥:16分组长度:16分组模式:ctr不需要填充package mainimport ( "bytes" "crypto/aes" "crypto/cipher" "fmt")//加密func aesCtrEncrypt(plainText []byte, key []byte) ([]byte, error) { //TOD...

2019-06-23 19:57:42 1374 1

原创 web从前端接收数据的方式

web从前端接收数据的方式前端发起get请求通过url 请求部分解析数据url请求/api/v1.0/:mobile例如:/api/v1.0/13111111111获取参数,这里使用第三方包github.com/julienschmidt/httprouterfunc Getsmscd(w http.ResponseWriter, r *http.Request, ps httpr...

2019-06-19 12:23:35 3868

原创 正向代理与反向代理

正向代理客户端为了从指定服务器(web服务器)获取内容,向代理服务器发送请求并指定目标(web服务器),然后代理服务器向指定服务器(web服务器)转交请求。代理服务器获取响应内容后转发给客户端。反向代理反向代理是一种代理服务器。代理服务器根据客户端的请求,从其关系的一组或多组后端服务器(服务器1、2、3)上获取资源,再将这些资源返回给客户端,客户端只知道代理服务器,不知道在其后面的服务器...

2019-06-10 14:52:17 119

原创 服务发现简介

服务发现服务发现就是程序如何通过一个标志来获取服务列表,并且这个服务列表能够随着服务的状态而动态变化。服务注册与健康检查服务x把自己的网络位置注册到服务发现模块服务发现模块以key-value方式记录服务发现模块定时查看服务状态客户端请求服务过程客户端根据服务名A向服务发现模块请求服务A的网络位置服务发现模块向客户端返回服务A的网络位置客户端根据服...

2019-06-10 13:53:52 452

原创 搭建openssh服务器

安装ssh服务器sudo apt install openssh-server配置ssh服务器sudo vi /etc/ssh/ssh_config账户密码登录:PasswordAuthentication yes允许root账户登录:PermitRootLogin yes重启ssh服务器:sudo service ssh restart...

2019-06-02 17:39:08 606 1

原创 docker权限问题

如果还没有 docker group 就添加一个::~$sudo groupadd docker将用户加入该 group 内。然后退出并重新登录就生效啦。:~$sudo gpasswd -a ${USER} docker重启 docker 服务:~$systemctl restart docker切换当前会话到新 group 或者重启 X 会话:~$newgrp - docker...

2019-06-02 12:49:26 1286

原创 归并排序

归并排序归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。用途用途:速度仅次于快速排序,为稳定排序算法,一般用于对总体无序,但是各子项相对有序的数列。复杂度平...

2019-05-27 12:02:58 98

原创 最长子串的长度

最长子串 的长度给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串...

2019-05-26 19:17:55 1332

原创 大端法和小端法

大端法和小端法指的是字节在内存中存储时的排列规则大端法常用于网络Big-endian高存低:高字节的数据存放在内存低位地址上数据: 0xaabbccdd内存低到高的顺序:aa bb cc dd两个16进制数为一个字节golang版代码 var i uint32 i = 0xAABBCCDD buf := make([]byte, 4) binary.BigEndian....

2019-05-24 21:13:38 1035

原创 面向抽象层依赖倒转

依赖倒转原则设计系统时将模块分为3个层次,抽象层、实现层、业务逻辑层。那么,我们⾸先将抽象层的模块和接⼝定义出来,这⾥就需要了interface 接⼝的设计,然后我们依照抽象层,依次实现每个实现层的模块,在我们写实现层代码的时候,实际上我们只需要参考对应的抽象层实现就好了,实现每个模块,也和其他的实现的模块没有关系,这样也符合了上⾯介绍的开闭原则。这样实现起来每个模块只依赖对象的接⼝,⽽和其...

2019-05-22 21:11:11 145

原创 mysql 事务隔离

脏读事务A更新了数据但是并未提交,事务B查询到事务A更新的数据,事务A此时执行回滚操作,事务B读到的数据是脏数据。不可重复读事务A多次读取同一数据。事务B在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一样。幻读事务A多次读取一组数据。事务B在事务A多次读取的过程中,对数据作了插入或删除,然后提交。导致事务A多次读取的一组数据时,结果并不相同,好像出现...

2019-05-20 12:15:48 167

原创 FastDFS安装、配置、启动、检测

FastDFS安装安装FastDFS依赖包解压缩libfastcommon-master.zip进入到libfastcommon-master的目录中执行**./make.sh**执行sudo ./make.sh install安装FastDFS解压缩fastdfs-master.zip进入到 fastdfs-master目录中执行 ./make.sh执行 sudo ./...

2019-05-14 21:39:28 308

原创 fastDFS简介

fastDFS小文件存储系统作者:于庆好处:冗余备份 根据内容做运算。一个文件只存一份,节约内存空间。横向扩容,只需要改fastDFS的配置防止文件名重复负载均衡工作流程:Tracker定时查看仓库状态Client找Tracker(监听服务器)询问可用的存储服务器地址Tracker返回可用的存储服务器地址给Client客户端根据返回的地址,存储相应数据存储服务器返回...

2019-05-14 21:32:33 249

原创 gitignore

使用规则使用.gitignore文件,使git忽略新的文件添加到工作区/program/.idea 忽略文件夹*.txt 忽略指定类型的文件.gitignore文件注意事项将.gitignore配置到.git文件夹的同级目录,windows下可以用另存为的方式生成这个名字的文件。检查忽略文件检查指定文件被哪条规则忽略git check-ignore -v pyg/.idea...

2019-05-13 21:59:04 80

原创 定时器Timer和周期性定时器Ticker

单次定时器Timer创建timer : = time.NewTimer(d duration)该函数返回一个*Timer类型Timer类型如下:type Timer struct { C <-chan Time r runtimeTimer}延迟定时的三种方法sleep(duration)timer := newTimer(duration) 然后<- ti...

2019-04-11 21:29:49 991

原创 TCP连接状态转换

什么是TCPTCP是面向连接的可靠的数据包传递。针对不稳定的网络层做完全弥补,借助回执,丢包重传。TCP三次握手主动建立请求连接(客户端),发送SYN标志位,携带序号n被动接受连接请求端(服务器),接收SYN标志位,回发ACK携带确认序号n+1。同时发送SYN标志位M。主动建立请求连接(客户端),接收SYN标志位,回发ACK确认序号M+1标志3次握手完成,对应应用层客户端:Dia...

2018-09-20 14:03:10 273

原创 UTF-8

变长编码,每个文字符号用1~4个字节表示。 Go的源文件总是以UTF-8编码,文本字符串也优先采用UTF-8编码。编码规则:0xxxxxxx //文字符号0~127(ASCII)110xxxxx 10xxxxxx //128~20471110xxxx 10xxxxxx 10xxxxxx //2048~65535111...

2018-07-31 20:30:32 605

原创 JavaScript简介和分类

JavaScript的作用html 定义了网页的内容css 描述了网页的布局javascript 控制网页的行为JS的书写方式行内式<input type="button" value="提示框" "alert('行内式')">嵌入式<head> <meta charset="UTF-8"> <meta name="...

2019-12-26 11:09:13 1877

原创 搭建slurm

文章目录任务要求搭建slurm本地环境配置centos环境配置网卡开机自启,以及DNS关闭防火墙,包括firewalld和selinux配置ssh免密登录克隆机器、配置ip、hostname、hosts配置NFS环境服务端部分客户端部分配置NIS环境NIS服务端环境安装以及添加域名添加用户配置NIS客户端权限初始化NIS数据库以及启动NIS服务NIS客户端环境安装客户端添加NIS域使用authco...

2019-08-30 20:08:24 6414

原创 反转链表

反转链表初始化,前节点为空,当前节点为第一个节点,下一个节点根据当前节点是否为空来进行赋值。改变当前节点的下一个节点的指向为前一个节点。前中后节点依次移动。//链表节点type ListNode struct { next *ListNode data int}/*反转链表://初始化pre为空cur为第一个节点for cur不为空 { next为cur.ne...

2019-08-16 15:09:18 250

转载 wget

ubuntu 中wget (下载)命令用法Linux wget是一个下载文件的工具,它用在命令行下。对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器1、使用wget下载单个文件以下的例子是从网络下载一个文件并保存在当前目录wget http://cn.wordpress.org/wordpress-3.1-zh_CN.zip在...

2019-08-04 14:37:21 433

原创 panic

panic异常指的是不应该出现问题的地方出现了问题例如:引用空指针、数组下标越界、除数为零。使用panic抛出异常,抛出异常后将立即停止当前函数的执行并运行所有被defer的函数,然后将panic抛向上一层,直至程序carsh。但是也可以使用被defer的recover函数来捕获异常阻止程序的崩溃,recover只有被defer后才是有意义的。对于异常,我们可以选择在一个合适的上游去rec...

2019-07-28 11:30:02 424

原创 二分查找go实现

二分查找二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。O(log2n)go实现这里是升序情况递归实现1. 与中间数比较2. 小于则递归中间数左半数组3. 大于于则递归中间数右半数组 加上 length/2 + 14. 返回下标,-1表示没找到//递归法func bin...

2019-07-21 20:56:14 350

原创 堆排序

堆排序堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列;...

2019-07-21 19:40:22 144

原创 快速排序

快速排序算法初始化基准值游标,首尾游标,首游标为第二个元素首游标与基准值比较,大于时尾游标和首游标交换,尾游标向前移动。小于则首游标与基准值交换,首游标和基准值游标向后移动。重复2和3步,直到首游标遇到尾游标(注意有等号)。将基准值左边数组和右边数组递归快排。go实现func quickSort(arr []int) { if len(arr) <= 1 { ret...

2019-07-21 15:25:49 131

原创 计数排序

计数排序计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。场景:10万个数,每个数取值0-999区间内go实现借助slice实现//maxValue 为统计数的最大值func countingSort(arr []int, maxValue int) { bucket := make([...

2019-07-21 11:09:33 116

原创 希尔排序

希尔排序又称为缩小增量排序。希尔排序没有快速排序算法快 O(n(logn)),因此中等大小规模表现良好,对规模非常大的数据排序不是最优选择。但是比O(n^2 )复杂度的算法快得多。并且希尔排序非常容易实现,算法代码短而简单。 此外,希尔算法在最坏的情况下和平均情况下执行效率相差不是很多,与此同时快速排序在最坏的情况下执行的效率会非常差。算法算法先将要排序的一组数按某个增量d(n/2,n为要...

2019-07-21 10:38:02 102

原创 直接插入排序

直接插入排序它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。原理像扑克牌抓牌动作一样,牌堆是无序的,手中的牌有序的,从牌堆中抓牌,并将牌根据手牌大小插入到手牌相应的位置。算法将待排序列分成有序数据组和无序数据组取无序数据组第一个元素,与有序数据组的最后一个元素比较有序数组依次向后移动,为待插入数据留出合适位置。数据插入有序数组重复1-...

2019-07-21 09:43:02 98

原创 选择排序

选择排序选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。外层控制行,比较次数数据元素个数减一内层控制列,从i+1开始,比较次数是len(arr)将第一个元素当做最小数使用该数依次向后比较,找真正的最小数,记录下标当一行比较结束。将index对应值,写到最开始位置。func SelectSort(arr []i...

2019-07-20 23:05:40 95

空空如也

空空如也

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

TA关注的人

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