Jonathan Blog

Thinking will not overcome fear but action will.

json tag妙用

最近在迭代的时候遇到json的两个问题,解决方法都是通过tag来解决的。记录一下。 beego的orm映射,如果结构体的字段和数据库里的不一样,或者列名带id的可能会冲突,会重新建一列,要通过orm的tag来指定列名: type NetworkConfig struct { NetConfID uint64 `json:"net_conf_id" orm:"pk;column(...

引用类型≠传引用

Golang slice

切片传参幻觉:传引用 golang中函数的参数为切片时是传引用还是传值?对于这个问题,当你百度一轮过后,你会发现很大一部分人认为是传引用,通常他们会贴出下面这段代码进行佐证 pacakge main func changeSlice(s []int) { s[1] = 111 } func main() { slice := []int{0, 1, 2, 3} ...

Docker组件工作流程

Docker学习笔记整理

从docker1.11版本开始,docker容器运行已经不是简单的通过docker daemon守护进程来启动,而是集成了containerd、containerd-shim、runC等多个组件。docker服务启动之后,系统上通过命令可以查看到dockerd、docker-containerd等进程。 Docker容器组件介绍 Docker CLI(docker) docker程序是一个...

Docker网段与公司网段冲突

Docker学习笔记整理

今天才发现对Docker的network知之甚少。 最近用ssh连公司服务器的时候,出现过几次莫名其妙就就断开连接的问题,断开以后就再也连不上了,ping也不通。 刚开始不觉得是自己的问题,每次出了问题都要找负责人,后来都有点不好意思了。 今天负责人问我这种情况之前自己做了什么操作,想起来无非就是Docker-compose up然后就断了,不觉得是问题,后来负责人告诉我,有可能是do...

逃逸分析笔记

概念 编译器会根据该对象是否被函数外部引用来决定是否逃逸: 如果函数外部没有引用,则优先放到栈中; 如果函数外部存在引用,则必定放到堆中; ps: 注意,对于函数外部没有引用的对象,也有可能放到堆中,比如内存过大超过栈的存储能力。 函数中申请一个新的对象 如果分配在栈中,则函数执行结束可自动将内存回收; 如果分配在堆中,则函数执行结束可交给GC(垃圾回收)处理; ...

Struct知识点记录

空结构体struct{}用途 golang 空结构体 struct{} 可以用来节省内存 a := struct{}{} println(unsafe.Sizeof(a)) // Output: 0 空struct{}也在向别人表明,这里并不需要一个值 在map里节省资源 set := make(map[string]struct{}) for _, value := range [...

JWT退出登录的解决方案

从Session到JWT的技术转型后,发现JWT在用户主动注销、强制登出(禁止登陆)、忘记密码、修改密码,JWT续签等方面的因为他的特性,解决起来让人头疼,之前内网环境和客户需求对这方面要求不严,无为而治的方法只让前端清理token,后端不理会。后来碰见几种解决方案,记录备用 黑名单校验 凡是退出登录的token都放入黑名单中,定期清理。 每次用户请求服务器都校验token是否在黑名单...

websocket心跳包的必要性

心跳包 心跳的原因:虽然理论tcp连接后一直不断,但实际上会断网。见:比如 NAT超时,国内移动无线网络运营商在链路上一段时间内没有数据通讯后, 会淘汰NAT表中的对应项, 造成链路中断. 心跳包的主要作用是告知对方连接端,我还活着,心还在跳。 心跳时长多少? 现实是残酷的, 根据网上的一些说法, 中移动2/3G下, NAT超时时间为5分钟, 中国电信3G则大于28分钟, 理想的情况下...

go map遍历顺序分析

为啥 range获取迭代器是通过调用了mapiterinit()方法。 然后看到mapiterinit方法里,有取随机数的部分。java语言每次都会按顺序去遍历桶,而go语言会提前取一个随机数,把桶的遍历顺序随机化。 原因 遍历map的时候,每次取随机数,看起来是没有意义的,为什么要这样设计呢?(寻找答案的时候,看到有些博客说go的早期版本的map遍历没有取随机数这个步骤) ...

计算机网络知识点整理

体系结构 数据链路层: 1.封装成帧 2.透明传输 3.差错检测(CRC) 信道有两类:广播信道(信道复用技术或CSMA/CD 协议避免碰撞)和点对点信道(PPP协议) 以太网是一种星型拓扑结构局域网。 以太网协议 规定所有人都能接收到数据帧 但是收到以后会看是不是发送给自己的 因为数据帧上有目标主机的mac地址 不是自己的就会扔掉,目前以太网使用交换机替代了集线器,交换机是...