Mingo's Blog

「江湖未静 不得让位」

unsafe usage

Go unsafe的使用说明

什么是 unsafe包 Go是强类型语言,可以在编译期就发现类型转换的错误,这可以大大降低我们代码出错误的概率; 在有些对性能要求较高的场景,比如string与[]byte之间的转换,使用常规的方式性能一般,如果使用unsafe的能力,可以做到零复制,性能大大提高 贴个数据感觉下: 1 2 3 4 5 6 7 8 9 10 strslice gotip test -benchmem ...

统计git代码提交量

查看有没有摸鱼

功能说明 统计当前项目代码分别由哪些人提交,新增/删除/累计行数 其中累计行数=新增-删除,有可能是负数 实现 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #! /bin/bash printf "%10s\t%10s\t%10s\t%10s\n" "name" "add" "remove" "total"; printf "%s...

Go Profile用法

使用Go profile工具来定位程序性能瓶颈

profile工具 写完几万代码,在测试环境跑的好好的,一上线就发现只有几十QPS/TPS,如何快速定位性能瓶颈; 抑或是发生有内存泄漏的问题,如何在这庞杂的代码库中找到泄漏的“凶手”代码; profile工具就是golang作者给Goer提供的定位以上棘手问题的利器 核心原理是:通过「采样」瓶颈现场时的程序运行时数据,生成可视化图形,让我们更好的观察出服务器的CPU/内存被哪些方法消...

Linux系统权限控制

概述 TODO 1. 查看指定用户信息 1 2 3 $ id mingo uid=1000(mingo) gid=1000(mingo) 组=1000(mingo),0(root) 2. 查看当前系统所有用户 /etc/passwd 文件保存了所有用户信息 TODO: 文件格式说明 TODO: 密码存储位置, 加密方式 3. 添加用户 1 2 3...

clickhourse调研

概述 目前对于数据仓库的要求越来越高, 从之前的T+1逐步变为实时级别; 基于传统的Hadoop+Hive等方式, 数据的处理过程比较慢, 查询也是几十分钟级别, 使用体验很差 基于此, 使用MPP思想的数据库产品逐渐成为实时数仓的新思路, 目前最热门MPP数据库的当属毛子的ClickHouse及百度开源的Doris, 都可以对于10亿级的数据或100GB的数据可以秒级查询, 并且都是列...

通过Channel控制并发数

概述 golang开启一个协程是很方便的, 但是如果不加限制的开启协程, 可能会导致系统资源被占尽, 进而导致服务不可用 本文总结了常见的通过channel来控制并发数量的实现思路 方式一 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 var concurrency = 16 // 希望的控制并发数为16 var ...

理解iptables的工作流程

概述 作为一个后端开发同学, 我们经常与iptables打交道, 熟练掌握iptables的工作流程及规则配置是我们进阶路上必备的技能 在理解了iptables的表的规划, 规则引擎, 工作流程设计之后, 对于以后我们的软件开发也是很有借鉴作用的 本篇文章尽量由浅入深的介绍iptables的原理, 用法, 以及一些最佳实践, 方便大家尽快的对iptables有个全面清晰的认识, 进而可...

Shell一天入门手册

这篇文章不是为了方便大家从入门到rm -rf /跑路的, 而是提高大家工作效率的, 要想回家早, 工具用的好; 学会Shell脚本后, 我们就可以把工作中常见的重复,简单的操作都整成一个个命令, 即能提升效率, 还能装逼 shell是一门脚本语言, 属于解析型语言, 也就是解析器读一行执行一行, 直到读取完脚本里的代码或发生错误中断执行; 常见的解释器有sh, bash, zsh, cs...

设计模式之单例模式

模式介绍 单例模式是指整个类只有一个实例对象 一般用于减少重量级对象频繁创建的开销; 或对象太多, 减少内存占用 代码实现 方法一: 饿汉式 1 2 3 4 5 6 7 8 9 10 public class Singleton1 { private final static Singleton1 INSTANCE = new Singleton1(); pri...

设计模式之观察者模式

模式介绍 在这种模式下, 产生事件/状态改变的称为事件源, Observable; 对事件关心, 要进行处理的称为订阅者, Subscriber; Subscriber需要先对Observable的事件进行订阅(subscribe), 当Observable的事件真正发生的时候, Observable会通知所有Subscriber进行处理; 说起来比较绕口, 以警察和小偷的例子来类比, ...