- 博客(337)
- 资源 (1)
- 收藏
- 关注
原创 深入理解计算机系统(五):不完全の探究虚拟内存
深入理解计算机系统(五):不完全の探究虚拟内存文章目录深入理解计算机系统(五):不完全の探究虚拟内存一、物理和虚拟寻址二、地址空间三、虚拟内存作为缓存的工具页表页命中缺页四、虚拟内存作为内存管理的工具五、虚拟内存作为内存保护的工具六、地址翻译参考 这篇博客适合对内存管理有一定了解的读者阅读,对于虚拟内存->物理内存的地址翻译、内存映射、置换算法等部分内容,不在本...
2020-04-24 21:11:53 473
原创 在x86平台下使用Buildx构建跨平台镜像
1 背景最近在做to G项目,node语言开发,开发团队这边服务器CPU架构基本都是x86的,最终服务要部署到私有云上,然而私有云架构是arm64的,于是就有一个问题,如何构建跨平台镜像。2 当前解决方法本地压缩代码包,丢到私有云打包服务器上(代码包包含node_modules,私有云是不通网络的,无法npm install),然后就地打镜像上传到镜像仓库。不足大部分场景是可以满足的,但是依赖的某个包依赖二进制时候,这种情况下打出来的镜像部署后有问题,因为二进制文件是不可以跨CPU架构做移植的。所
2022-04-24 21:42:34 1711
原创 gyp ERR stack Error: EACCES: permission denied, mkdir ‘/root/codingci/tools/jenkins_home/workspace/
[2022-04-07 19:45:15] gyp WARN install got an error, rolling back install[2022-04-07 19:45:15] gyp WARN install got an error, rolling back install[2022-04-07 19:45:15] gyp ERR! configure error [2022-04-07 19:45:15] gyp ERR! stack Error: EACCES: permissi
2022-04-11 15:51:30 2281
原创 redis Zset及在go-redis中的实践
文章目录1.安装与启动2.redis中切换db3.初始密码和修改密码4.go-redis数据库连接5.zset的常见命令与go-redis中的实践5.1 API5.2 命令实践5.3 go-redis中的使用1.安装与启动安装:yum install redis启动:systemctl start redis查看状态:systemctl status redis,启动正常显示Active(running)登录redis数据库:cd /usr/bin#-a 表示携带密码./re
2021-07-12 10:56:42 944
原创 go.opentelemetry.io/otel/trace ../pkg/mod/go.opentelemetry.io/otel/trace@v0.19.0/config.go:117:2: du
go build编译失败,报错如下:go.opentelemetry.io/otel/trace../pkg/mod/go.opentelemetry.io/otel/trace@v0.19.0/config.go:117:2: duplicate method privatenote: module requires Go 1.14devcloud中的go版本是1.13,升级到1.14就可以了。确认下自己的go版本:go version删除下之前安装go的版本目录 sudo rm -rf
2021-07-08 11:37:52 1167
原创 一次好久才打开电脑的更新
回家前对自己的希望是:多看影音书加强专业能力,回家一个月发现自己只做够了前面一条多看影音书,也许是之前在q的影响下,我突然又用回了豆瓣,虽然大多数时间我喜欢标记我今天的看的电影美剧和听的音乐,书很少看,其实是我看得太慢了,也浮躁,阅读一百页的小书也许会更快乐,但是家里没有类似的读物了。 有时候在家练练字(虽然我的钢笔好像总是不太好用),发现我的字还是那样,或许我和大家之前差了一只lamy。有时候在家学学日语,看番
2021-02-18 17:13:11 217 3
原创 肥宅在深圳的日子
前记:前不久终于下定决心选择18号离职回家过年了,一方面因为觉得自己太菜想回去沉淀下自己,另一方面因为在深圳呆了八九个月,对于南方冬季的湿冷让我怀念起了家乡直白的透骨干冷,可能最关键的原因是感受到了互联网的压力,想完整的再体验下最后的学生生活。 之前实习转正答辩的时候写了一篇鹅厂暑期实习总结,这篇肥宅的反省和总结正好对应了去年九月到今年一月的时间,废话很多,干货很少,单纯记录下最近半年的生活。蜗居的生活 第一次来到深圳是个闷热还有点小雨的傍晚,地铁上的凉风是.
2021-01-27 21:32:02 409 7
原创 go1.15.7高版本VSCODE自动补全代码提示
Go Version:go1.15.7 windows/amd64Now Time :2021/01/23问题描述之前使用nfs/gocode进行自动补全,但是由于新机安装的Go版本比较高,发现nsf/gocode无法支持1.8版本以上自动补全,于是使用mdempsky/gocode(This fork should work for all versions of Go > 1.8. It only works for $GOPATH projects.)进行替换。解决方案创建目录:.
2021-01-23 19:56:12 941
原创 通过sequelize-auto实现将数据库表转化Sequelize模型(Model)
1.管理员身份打开命令行窗口,依次执行下列命令: npm install sequelize -g npm install sequelize-auto -g npm install mysql -g2.安装好后,在对应model文件夹下执行转化命令:sequelize-auto -h 数据库的IP地址 -d 数据库名 -u 用户名 -x 密码 -p 端口 -t 表名PS:如果遇到这个问题Access denied for user 'root'@'localhost' (us
2020-10-22 16:02:36 1034 1
原创 Node.js 根据SHA1算法生成签名
const crypto = require('crypto');const util = module.exports = {}util.GenSha1 = function(secretKey, strsign){ let signMethodMap = {'HashSHA1': "sha1"}; let hmac = crypto.createHash(signMethodMap['HashSHA1'], secretKey || ""); return hmac.upd
2020-10-15 19:46:42 1631
原创 Node.js利用aes-js库进行AES/CBC/PKCS7数据加密
const aesjs = require('aes-js');let aestil = module.exports = {};aestil.encrypt = function(key, iv, data) { let aesCbc = new aesjs.ModeOfOperation.cbc(aesjs.utils.utf8.toBytes(key), aesjs.utils.utf8.toBytes(iv)); let encode= aesjs.utils.utf8.to
2020-10-15 19:41:02 1230 1
原创 Node.js使用request-promise报错Unhandled rejection RequestError: Error: Invalid URI
报错信息:Unhandled rejection RequestError: Error: Invalid URI "xxxxxxxxxxxxxxxxxxx" at new RequestError (D:\WorkSpace\local-test\node_modules\request-promise-core\lib\errors.js:14:15) at Request.plumbing.callback (D:\WorkSpace\local-test\node_modules\
2020-10-15 10:51:30 1543 1
原创 Go Extension:内存管理の栈内存管理
Go Extension:内存管理の栈内存管理 程序在运行期间可以主动从堆区申请内存空间,这些内存是由内存分配器分配,然后由垃圾回收器回收。每个goroutine都需要自己的栈空间,用来存放函数/局部变量等信息,栈区的内存管理是由编译器完成的。 内存分配器和垃圾收集器主要是围绕堆内存的申请和释放过程,这篇文章会介绍下go栈内存的实现原理,这样go的内存管理就完满了。1.设计原理 栈区一般存放着函数的入参和局部变量,这些参数的特点就是和函数的生命周期同步,在程序中不会长时间的存在,栈区的内存管理
2020-10-13 11:04:07 432
原创 Go Extension:内存管理の垃圾收集器
Go Extension:内存管理の垃圾收集器 用户会通过内存分配器在堆上申请内存,而垃圾收集器负责回收堆上的内存空间,内存分配器和垃圾收集器共同管理着程序中的堆内存空间。 Golang的垃圾回收机制从最初的标记-清除算法(需要大量的STW时间),到V1.5实现了三色标记并发垃圾收集器,大幅度降低收集延迟。Golang为了实现高性能的并发垃圾收集,经过多版本的迭代,目前将垃圾收集的暂停时间优化到了毫秒级以下。这篇文章主要是围绕GC中几个重要的概念介绍了Go垃圾收集器的设计思路,梳理了go版本更迭中在
2020-10-13 11:02:29 245
原创 Go Extension:内存管理の内存分配器
Go Extension:内存管理の内存分配器 Go是一种静态类型的编译语言,因此它并不需要VM。那么GC、调度和并发之类的功能是如何实现的呢?实际上,Go的应用程序二进制文件中嵌入了一个小型运行时(Go runtime)。 内存空间包含两个重要区域,一个是栈区还有一个是堆区。函数调用的参数、返回值以及局部变量大都会被分配到栈上,这部分内存是由编译器管理的。 Go的内存管理包括在需要内存时自动分配内存,不需要时进行垃圾回收。这些工作都是由运行时完成。1.Go的内部内存结构 Go runti
2020-10-13 10:58:12 372
原创 Client does not support authentication protocol requested by server; consider upgrading MySQL client
Client does not support authentication protocol requested by server; consider upgrading MySQL clientALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
2020-10-09 20:33:16 156
原创 centos升级golang版本1.14
#移除旧版本golangrm -rf /usr/local/go#安装新版本golangwget https://dl.google.com/go/go1.14.linux-amd64.tar.gz tar -C /usr/local -xzf go1.14.linux-amd64.tar.gz
2020-08-24 10:40:38 1643
原创 鹅厂暑期实习总结
1.实习回顾 由于涉及公司内部业务,这里就不一一展开细说了。可以分为两部分,首先是业务优化需求,其次是新需求开发。2.实习收获 在腾讯实习的这段日子,让我更加意识到,成为一个好的程序员,是不应该闷头只做需求或者业务的,学习永远是最好的延时反馈,当然也不能只学习理论。把实习这段时间的收获总结成如下四点:主动学习,持续学习,不断总结保持聆听,保持好奇心善于分享,交流和分享是学习最直观的成果转化给你一个点,可以撬动整个地球主动学习,持续学习,不断总结。
2020-08-09 21:43:46 615
原创 合并master分支与更新分支代码
本次上线的过程:分支上进行开发->客户端自测->测试同学在测试环境中测试->合并分支到master上->打tag,在正式环境中编译版本->灰度发布(不要一把梭)->观察上线情况,无异常全量发布->持续观察…下面基本是上线时必须要做的git操作,所以总结一下第一次上线时需要用到的git命令。合并master分支开发分支(dev)上的代码达到上线的标准后,要合并到 master 分支git checkout devgit pullgit checkout m
2020-06-30 12:03:20 1823
原创 《GO语言圣经》读书笔记(十二):底层编程
文章目录unsafe.Sizeof,Alignof和Offsetofunsafe.Sizeof():返回操作数在内存中的字节大小unsafe.Alignof():返回对应参数的类型需要对齐的倍数unsafe.Offsetof():返回对应参数的偏移量unsafe.Pointer小结unsafe.Sizeof,Alignof和Offsetofunsafe.Sizeof():返回操作数在内存中的字节大小 unsafe.Sizeof()函数返回操作数在内存中的字节大小,参数可以是任意类型的表达式,但是不会
2020-06-29 20:22:10 308
原创 《GO语言圣经》读书笔记(十一):反射
文章目录变量的内在机制为什么需要反射reflect包Type和ValueTypeOftype name和type kindValueOf通过反射获取值通过反射设置值isNil()和isValid()isNil()isValid()举个例子结构体反射与结构体相关的方法反射三大定律第一条定律第二条定律第三条定律为什么我们吐槽反射太慢进击的反射小结本节读书笔记对应原书第十二章。变量的内在机制 Go语言中的变量是分为两部分的:类型信息:预先定义好的元信息。值信息:程序运行过程中可动态变化的。
2020-06-28 16:54:55 616
原创 《GO语言圣经》读书笔记(九):包
文章目录包声明和导入声明包的匿名导入题外话:为什么go语言的编译速度如此之快?本节读书笔记对应原书第十章。 我们通过将一组相关的特性放到同一个包中,便于理解和后期更新,每个包更新的同时保持和程序中其他包的相对对立性,每个包都可以被其他的不同项目使用。 这么多的包,我们给他们定义不同的名字,用于区分和标识访问。 每个包还通过控制包内名字的可见性和是否导出来实现封装的特性,限制包内变量的可见性(有点类似于Java的private),用户必须通过特定的函数访问和更新变量(类似于Java通过get
2020-06-28 16:53:02 189
原创 《GO语言圣经》读书笔记(八):基于共享变量的并发
文章目录竞争条件解决数据竞争的三种方式互斥锁读写互斥锁sync.WaitGroupsync.Once加载配置文件示例并发安全的单例模式sync.Map原子操作atomic包示例内存同步goroutine与线程可增长的栈goroutine调度GOMAXPROCS本节读书笔记对应原书第九章。竞争条件 只有一个goroutine的程序中,程序的执行顺序和程序的逻辑有关系,按照既定的顺序去执行代码,如果多个goroutine中,我们是无法确定位于两个goroutine的x和y事件的先后顺序,这也说明了x
2020-06-28 16:51:41 559
原创 《GO语言圣经》读书笔记(七):Goroutines和Channels
文章目录使用goroutine启动单个goroutine启动多个goroutinechannelchannel类型创建channelchannel操作发送接收关闭无缓冲的通道有缓冲的通道判断通道是否关闭的两种方法单向通道通道总结worker pool(goroutine池)select多路复用写在前面:本节读书笔记对应原书第八章。 Go中的并发程序可以用两种手段来实现,第八章主要是围绕goroutine和channel展开讲的,他们都支持顺序通信进程(CSP)。CSP是一种现代的并发编程模型,
2020-06-28 16:50:49 221
原创 《GO语言圣经》读书笔记(六):接口
文章目录接口类型一个类型持有一个方法?本节读书笔记对应原书第七章。 接口是一种约定,它是一个抽象的类型,和我们见到的具体的类型(比如数字类型,我们知道可以进行算术操作)不一样。具体的类型,我们可以知道它是什么,并且可以知道可以用它做什么;但是接口不一样,接口是抽象的,接口不会暴露出它所代表代表对象的内部结构以及该对象的方法,所以我们不知道接口是什么,但是我们知道可以通过它提供的方法做什么。 以下就是一个使用接口的例子,fmt.Printf()会把结果写到标准输出,该函数使用了另一个函数fmt.
2020-06-28 16:49:59 168
原创 《GO语言圣经》读书笔记(五):方法
文章目录6.1方法声明6.2 基于指针对象的方法6.3 通过嵌入结构体来扩展类型6.4 方法值和方法表达式本节读书笔记对应原书第六章。6.1方法声明 在函数声明时,在其名字之前放上一个变量,就是一个方法。package geometryimport "math"type Point struct{X,Y float64}func (p Point)Distance(q Point) float64{ return math.Hypot(q.X-p.X,q.Y-p.Y)}
2020-06-28 16:48:46 175
原创 《GO语言圣经》读书笔记(四):函数
文章目录5.1 函数声明5.2 错误5.3 函数值5.4 Deferred、Panic和Recover5.1 函数声明 函数声明包括函数名、 形式参数列表、 返回值列表( 可省略) 以及函数体。 下面提供了一个函数声明的模板。func name(parameter-list) (result-list) { body} 大概知道模板是啥样的了,就要如法炮制,写出了一个真正的函数,函数hypot做的事情就是求直接三角形的斜边是多少:func hypot(x, y float64) fl
2020-06-28 16:47:25 136
原创 《GO语言圣经》读书笔记(三):复合数据类型
ch4:复合数据类型 数组和结构体都是有固定内存大小的数据结构,而对于切片slice和map来说,它们是动态的数据结构,它们可以根据需要进行动态增长。4.1 数组 数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。不过Go中很少使用数组,因为数组无法根据需要进行动态扩展,我们常使用切片slice代替数组的使用。 Go中的数组和其他语言中的数组有很多共通的地方,下面来总结和回顾一下:数组中的每个元素可以通过索引下标来访问,如果数组的长度用变量len表示,那么索
2020-06-28 16:46:31 462
原创 《GO语言圣经》读书笔记(二):基础数据类型
文章目录基本数据类型整型特殊整型数字字面量语法(Number literals syntax)浮点型复数布尔值字符串字符串转义符多行字符串字符串的常用操作byte和rune类型修改字符串类型转换运算符算数运算符关系运算符逻辑运算符位运算符赋值运算符常量iota几个常见的`iota`示例: Go语言中有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有数组、切片、结构体、函数、map、通道(channel)等。Go 语言的基本类型和其他语言大同小异。基本数据类型整型 整型分为以下两个大
2020-06-28 16:45:39 604
原创 《GO语言圣经》读书笔记(一):程序结构
文章目录标识符与关键字标识符关键字变量变量的来历变量类型变量声明标准声明批量声明变量的初始化类型推导短变量声明匿名变量指针new函数变量的生命周期类型包的初始化if else(分支结构)if条件判断基本写法if条件判断特殊写法for(循环结构)无限循环for range(键值循环)switch casegoto(跳转到指定标签)break(跳出循环)continue(继续下次循环) 变量和常量是编程中必不可少的部分,也是很好理解的一部分。标识符与关键字标识符 Go中的变量名、常量名、函数名都遵循
2020-06-28 16:43:33 695
原创 Golang不完全の笔记(一):反射
文章目录reflect包TypeOftype name和type kindValueOf通过反射获取值通过反射设置变量的值函数反射结构体反射与结构体相关的方法StructField类型结构体反射示例反射在GORM中的运用为什么我们吐槽反射太慢小结 反射这个概念比较常见了,在其他语言中也有反射这个概念(不过还有的语言不支持),Java中利用反射可以创建某个对象对应类的实例、访问成员变量和调用方法、动态创建Array数组等。在go中我们可以利用反射主要可以解决以下几件事情:不知道函数的参数是什么,或者
2020-06-09 20:45:05 649 1
原创 Golang 的快速入门学习
Golang 的快速入门学习文章目录Golang 的快速入门学习一、Go语言结构关于包二、 Go语言数据类型三、Go 语言变量四、Go 语言常量五、Go 语言运算符六、Go 语言条件语句七、Go 语言循环八、Go 语言函数九、Go语言变量作用域十、Go 语言数组十一、Go语言指针十二、Go语言结构体十三、Go语言切片十四、Go语言范围十五、Go语言Map十六、Go 语言递归函数十七、Go语言类型转换十八、Go语言接口十九、Go 错误处理panic和recover以及defer二十、Go并发通道通道缓冲区
2020-05-31 16:24:05 897
原创 LeetCode 756. Pyramid Transition Matrix
题目描述756. 金字塔转换矩阵AC代码1.求出所有不同字母产生的字母集合2.从下往上构造,看相邻两个字母可能构成的集合有哪些,递归枚举,直到能构建出金字塔的顶端class Solution { //allow用于保存所有不同字母产生的新字母集合 List<Character>[][] allow=new ArrayList[7][7]; public boolean pyramidTransition(String bottom, List<String
2020-05-18 15:23:21 204
原创 LeetCode 464. Can I Win
题目描述464. 我能赢吗AC代码/*1.两个人选完所有的数后,得到的和都不够desireTotal(即前m项和<desireTotal),那么第一个玩家肯定会输;2.如果t<=1,那么第一个玩家可以直接获胜*/class Solution { //f[0]表示整数1是否被选择过,f[1]表示整数2是否被选择过,null代表还未开始计算过 Boolean[] f=null; int m; public boolean canIWin(int _m,
2020-05-18 15:22:42 146
原创 LeetCode 458. Poor Pigs
题目描述458. 可怜的小猪AC代码class Solution { public int poorPigs(int buckets, int minutesToDie, int minutesToTest) { //一头猪在测试时间内最多可以喝几次水 int base=minutesToTest/minutesToDie+1; int pignum=0,n=1; while(n<buckets){
2020-05-18 15:18:27 180
原创 LeetCode 343. Integer Break
题目描述343. 整数拆分AC代码class Solution { public int integerBreak(int n) { if(n<=3) return n-1; int res=1; if(n%3==1){ res*=4;n-=4; }else if(n%3==2){ res*=2;n-=2; } while(n>0){
2020-05-18 15:17:51 121
原创 LeetCode 650. 2 Keys Keyboard
题目描述650. 只有两个键的键盘AC代码class Solution { public int minSteps(int n) { int res=0; for(int i=2;n>1;i++) while(n%i==0) { res+=i; n/=i; } return res; }}
2020-05-18 15:17:02 164
原创 LeetCode 223. Rectangle Area
题目描述Rectangle AreaAC代码 /*求两个矩形并集的面积=两个矩形的总面积-两个矩形交集的面积那么交集的面积怎么求?首先要求出交集的长和宽就行了。交集的长度L=min(C,G)-max(A,E),L<0说明不重合交集的宽度W=min(D,H)-max(B,F),L<0说明不重合*/class Solution { public int computeArea(int A, int B, int C, int D, int E, int F, int G,
2020-05-18 15:16:36 192
原创 LeetCode 891. Sum of Subsequence Widths
题目描述891. 子序列宽度之和AC代码将数组 A 从小到大排序。假如我们固定了当前子序列的最小值 A[i],假设数组下标从 0 开始,则以 A[i]为最小值贡献的答案为,(A[n−1]−A[i])2n−i−2+(A[n−2]−A[i])2n−i−3+⋯+(A[i+1]−A[i])20(A[n−1]−A[i])2^n−i−2+(A[n−2]−A[i])2^n−i−3+⋯+(A[i+1]−A[i])2^0(A[n−1]−A[i])2n−i−2+(A[n−2]−A[i])2n−i−3+⋯+(A[i+1]
2020-05-18 15:13:41 151
原创 LeetCode 319. Bulb Switcher
题目描述319. 灯泡开关AC代码/*1~n里面有多少个数的约数个数是奇数。*/class Solution { public int bulbSwitch(int n) { return (int)Math.sqrt(n); }}
2020-05-18 15:12:44 128
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人