golang的垃圾回收(GC)机制

请先阅读 golang的goroutine调度机制 然后再到这里 golang的垃圾回收采用的是 标记-清理(Mark-and-Sweep) 算法 就是先标记出需要回收的内存对象快,然后在清理掉; 在这里不介绍标记和清理的具体策略,只介绍 GC过程是怎么调度的以及stw相关 这个算法,会导致 stw (stop the world) 的问题,中断用户逻辑 触发GC机制 1. 在申请内存的时候,检查当前当前已分配的内存是否大于上次GC后的内存的2倍,若是则触发(主GC线程为当前M) 2. 监控线程...阅读全文

2016-09-26 14:35 liangzhiyang
阅读:7855 评论:0

golang第三方类库(json)-jsoniter

概述 jsoniter(json-iterator)是一款快且灵活的 JSON 解析器;从 dsljson和 jsonparser 借鉴了大量代码。 Jsoniter 有三个不同的 api 用于不同的场合: iterator-api:用于处理超大的输入 bind-api:日常最经常使用的对象绑定 any-api:lazy 解析大对象,具有 PHP Array 一般的使用体验 一句话总结就是简单快捷方便,性能OK!并且完美兼容:encoding/json 性能 性能压测 对比 在不使用代码生成的前...阅读全文

2018.12.06 19:07 神奇的考拉
阅读:5202 评论:0

使用client-go包访问Kubernetes CRD

Kubernetes API服务器可通过自定义资源定义轻松扩展。但是,用client-go库访问这些资源有点麻烦,官方也没有完整的文档。如kubebuilder operator-framework都能很方便的帮助我们去创建实现一个controller,但是封装的过于好导致我们并不清楚内部是怎么调用client-go的,很多场景我们是需要自己去调用接口操作CRD的而不是在controller中去访问CRD。 安装kubernetes 最简单的方式当然是使用sealos 不管是单机还是生产环境还是...阅读全文

2019.09.30 11:33:51 aside section . 等
阅读:292 评论:0

【第十八期】分享一个网易go面经

自我介绍 未来的主要方向 介绍下之前的项目用到的优化点、难点 为什么不要大量使用goroutine gpm模型 go里面goroutine创建数量有限制吗? 线程和协程有什么区别 golang支持哪些并发机制 go利用channel通信的方式 有缓冲和无缓冲channel的区别 channel实现原理 被close的channel会有什么问题 分布式锁知道哪些?用channel如何实现? 集群用c...阅读全文

2022-02-16 11:33:14 itmrtan
阅读:659 评论:1

【第二十四期】golang 一年经验开发 富途

他们家是按题目来的,从一个小题目慢慢延伸着问,由浅入深,问到你换题为止。 第一题 给了一个网址,解释一下浏览器填入这个网址后发生了什么? TCP为什么要三次握手四次挥手? 502是什么? 如果出现502怎么办? 怎么排查? 为什么会出现这个问题?好,如果你是开发,这个是你的服务,你怎么知道你的服务出问题了?如果情况极端一点,你突然间所有的服务都有问题了,但瞬间又重启了,你如果不看日志,怎么知道你的服务挂了? 第二题 给了2个表结构,写sql。 ...阅读全文

阅读:558 评论:1

【第二十五期】最右社招Golang工程师面经

最右APP 2技术1hr已offer 一面 1. 工作项目 2. 比较有成就感的产出 3. redis相关,网络模型,存储模型,常用数据结构等 4. 缓存穿透解决方案 5. 分布式系统CAP 6. 工作项目中以及其他共识算法 7. raft算法细节(选主 复制 脑裂balabala) 8. mysql索引相关,数据结构,优化,优缺点等 9. 主键需要保证的特性以及为什么这样做 二面 1. 场景题:某个下游服务的接口...阅读全文

2022-02-21 17:01:43 itmrtan
阅读:475 评论:0

Go错误集锦 | 处理error时有哪些常见的陷阱

大家好,我是Go学堂的渔夫子。今天跟大家聊聊使用Go在处理error过程中有哪些常见的陷阱以及如何避免。 原文链接:[https://mp.weixin.qq.com/s/Zi7U7Tt_8m2Y3xfafRG7rw]() ## 陷阱01:不理解使用panic处理错误的场景 在Go中,error通常是被当做函数或方法的最后一个返回值来处理的。但有时候也会遇到使用panic的场景。那么什么场景下该使用panic呢? **panic基础使用** 在go中,panic...阅读全文

2022-02-24 21:39:53 yudotyang
阅读:335 评论:0

Go实战 | 记一次降低30%的CPU使用率的优化方法

大家好,我是「Go学堂」的渔夫子。今天聊聊在项目中通过优化redis写入而降低cpu使用率的一次经历。 ​ 原文链接:[https://mp.weixin.qq.com/s/16Fn7LahXSadTHS0NXcapQ](https://mp.weixin.qq.com/s/16Fn7LahXSadTHS0NXcapQ) ​ **01 背景** ​ 本文是项目中基于redis记录实时请求量的一个功能,因流量上涨造成redis服务器的CPU高于80%而触发了自动报警机制,经...阅读全文

2022-03-02 09:00:28 yudotyang
阅读:996 评论:10

Go实现并发扇入,批量扇出功能

## 背景 有上万台边缘机器,每台都会有多个agent客户端,并且每个agent都会同时向中心系统上报数据,由于上报数据频繁,并发量也大,每个agent都频繁和中心建立连接,导致中心压力非常大,所以需要对此进行优化,对每台机器上的agent上报数据做聚合,批量进行上报,减少边缘和中心的上报频率,从而减轻中心压力。 ## 方案 - 边缘增加一个batch中间件,所有agent上报的数据由原来直接向中心上报变为向batch中间件上报 - batch中间件会聚合请求,再分批向中心上...阅读全文

阅读:412 评论:1

【第三十四期】Golang社招面经-快手

快手:4轮技术1hr 口头offer 一面: 欢乐局 看你简历大学有竞赛经历,算法都懂吧?我:了解 面试官:嗯,了解就不问了 raft算法懂不?我:懂 面试官:嗯,懂就不问了 讲讲tidb 讲讲newsql 项目吞吐量,怎么优化的性能? 工作有啥亮点?产出?共识怎么做的? 二面 mmap操作原理 答:1.内存映射 2.逻辑/物理地址转换 3. 程序访问触发缺页中断 4. 调页 追问:mmap的问题?答了内存过大时会出现频繁的页面置换 影响效率...阅读全文

阅读:610 评论:2

json-filter 一个golang的json字段过滤器,随心所欲的构造自己的json数据结构,随意复用结构体的开源项目。

## 支持过滤的数据结构 github地址:https://github.com/liu-cn/json-filter [json-filter](https://github.com/liu-cn/json-filter) 结构体/嵌套结构体/匿名结构体/指针 结构体切片/数组 map ## 使用场景 有时候你可能会遇到这种情况:一个结构体想要在不同的接口下返回不同的json数据字段。 举个例子: 一个模拟用户的model,真实环境中的字段会要比这个多得多。 ...阅读全文

2022-03-08 17:08:57 liubaorui
阅读:505 评论:0

Go错误集锦 | nil通道及其使用场景

大家好,我是「Go学堂」的渔夫子。今天跟大家聊聊nil通道及其正确的使用场景。 原文链接:<https://mp.weixin.qq.com/s/IIruvES-U7ztudfQFGwOCA> 在Go中有时候忘记使用nil通道也是经常犯的一个错误。本节我们一起来看看什么是nil通道,为什么要使用nil通道。 首先,假设我们在一个协程中有如下代码片段: ```go //初始化的channel值为nil var ch chan int <-ch ``` 那么这段代码将会如何...阅读全文

2022-03-09 08:41:42 yudotyang
阅读:317 评论:0

【面试联盟】毕业一年半小伙挑战30k; K8S大厂真题第二篇-全网唯一,有重题算我输

### 先贡献面试题 - 怎么让K8S集群内资源使用量更平均 - 如何修改scheduler的调度策略 - Deployment和SatefulSet 的根本区别在哪里 - POD创建过程中,controller和scheduler 各起到了什么作用,两者的联系是什么? - kube-proxy 在ISO 7层中的那一层 - StatefulSet 的滚动升级的过程是什么样的,现在我们希望只升级 StatefulSet 中的任意个节点进行测试, 可以怎么做? - Kubernet...阅读全文

2022-03-09 10:23:54 tutengdihuang
阅读:582 评论:0

【面试联盟】让您出道即巅峰, tcp为什么需要TIME_WAIT

### **如何加入我们** ### 联系方式 vx: tutengdihuang ### 或者加群 <img src="https://user-images.githubusercontent.com/31843331/156959323-7be34628-0955-494b-8f3c-ab5f4354d21c.png" height="100" width="75"> ### **tcpip为什么需要TIME_WAIT** - 客户端等待两个最大数据段生命周期(Maxi...阅读全文

2022-03-10 10:48:16 tutengdihuang
阅读:280 评论:0

【第三十七期】小米 golang服务端开发 校招 一面二面

一面: 自我介绍 由于没有golang基础,又没什么项目经验,所以上来先代码题: 链表存储的大数加减法 字符串存储的带优先级算术表达式计算 判断二叉树是否为平衡二叉树 基础知识: tcp四次挥手过程。 最后一次挥手为什么要等待2MSL 数据库索引的实现 B树B+树的区别 五种io模型 说一下事物隔离,怎么实现事物隔离? ……后面记不清了 面试官很和蔼,有的问题没回答出来,也一一给我进行了讲解。一度以为...阅读全文

阅读:454 评论:0

lancet(go语言工具函数库)发布v2.0.0, 全面支持go泛型特性

[lancet](https://github.com/duke-git/lancet) 是一个全面、高效、可复用的go语言工具函数库。 本次发布v2.0.0版本,全面升级go1.18,应用泛型重写大部分函数。同时新增70+函数。 ## 特性 - 全面、高效、可复用 - 250+常用go工具函数,支持string、slice、datetime、net、crypt... - 只依赖go标准库 - 所有导出函数单元测试覆盖率100% ## 安装 ### Note: - ...阅读全文

2022-03-17 14:11:24 duke-git
阅读:693 评论:0

Go 1.18 新特性多模块工作区教程-让多模块开发变得简单

## 导读 - 随着 2020 年 3 月 15 日 go 1.18 正式发布,新版本除了对性能的提升之外,还引入了很多新功能,其中就有 go 期盼已久的功能泛型(Generics),同时还引入的多模块工作区(Workspaces)和模糊测试(Fuzzing)。 - 关于泛型网上已经有很多介绍的教程了,这里我介绍一个实用的功能,多模块工作区的使用方法和教程。 - Go 多模块工作区能够使开发者能够更容易地同时处理多个模块的工作,如: > 方便进行依赖的代码调试(打断点、修改代码)、...阅读全文

2022-03-21 09:19:02 link1st
阅读:1387 评论:0

Gopacket的学习

>Gopacket的学习和使用 在`linux`下,需要安装`libpcap-dev`,在`windows`下,需要安装`WinPcap`,在`mac`下可直接使用 涉及到的包 ``` "github.com/google/gopacket" "github.com/google/gopacket/layers" "github.com/google/gopacket/pcap" "github.com/google/gopacket/pcapgo" ``` ...阅读全文

2022-03-30 14:33:40 DG9Jww
阅读:1405 评论:0