Skip to content
个人的知识库
Home
Initializing search
个人的知识库
Home
开发环境搭建
开发环境搭建
操作系统
操作系统
Ubuntu
Ubuntu
Ubuntu修改DNS
定制ubuntu_iso镜像
Ubuntu16.04导入根证书
64位Ubuntu兼容32位程序
桌面左侧任务栏到屏幕底部
Windows
Windows
Windows系统下载网站
使用NSIS制作安装包
再生龙
再生龙
再生龙备份还原操作系统
开发工具
开发工具
VSCode
VSCode
VSCode_Windows安装教程
VSCode_Ubuntu安装教程
Git
Git
Git_Windows安装
Git_Ubuntu安装
计算机基础
计算机基础
计算机网络
计算机网络
基础
基础
TCPIP网络模型有哪几层
键入网址到网页显示期间发生了什么
Linux系统是如何收发网络包的
IP
IP
IP基础知识全家桶
ping的工作原理
断网了还能ping通127.0.0.1吗
TCP
TCP
TCP三次握手与四次挥手面试题
TCP重传 滑动窗口 流量控制 拥塞控制
TCP实战抓包分析
TCP半连接队列和全连接队列
如何优化TCP
如何理解TCP是面向字节流的协议
为什么TCP每次建立连接时初始化序列号都要不一样呢
SYN报文什么时候情况下会被丢弃
已建立连接的TCP收到SYN会发生什么
四次挥手中收到乱序的FIN包会如何处理
在TIME_WAIT状态的TCP连接收到SYN后会发生什么
如果TIME_WAIT状态持续时间过短或者没有会有什么问题
TCP连接一端断电和进程崩溃有什么区别
拔掉网线后原本的TCP连接还存在吗
HTTPS中TLS和TCP能同时握手吗
TCP Keepalive 和 HTTP Keep-Alive是一个东西吗
TCP协议有什么缺陷
如何基于UDP协议实现可靠传输
TCP和UDP可以使用同一个端口吗
服务端没有listen客户端发起连接建立会发生什么
没有accept能建立TCP连接吗
用了TCP协议数据一定不会丢吗
TCP四次挥手可以变成三次吗
TCP序列号和确认号是如何变化的
HTTP
HTTP
URI和URL区别和关联
HTTP常见面试题
HTTP1.1如何优化
HTTPS RSA 握手解析
HTTPS ECDHE 握手解析
HTTPS如何优化
HTTP2牛逼在哪
HTTP3强势来袭
既然有HTTP协议为什么还要有RPC
既然有HTTP协议为什么还要有WebSocket
如何使用tcpdump抓拍https包
计算机操作系统
计算机操作系统
硬件结构
硬件结构
冯诺依曼模型
存储器之间的比较
如何写出让CPU跑得更快的代码
CPU缓存一致性
CPU是如何执行任务的
什么是软中断
为什么0.1+0.2不等于0.3
内存管理
内存管理
为什么要有虚拟内存
malloc是如何分配内存的
内存满了会发生什么
在4GB物理内存的机器上申请8G内存会怎么样
进程管理
进程管理
进程线程基础知识
进程间有哪些通信方式
多线程冲突了怎么办
怎么避免死锁
什么是悲观锁乐观锁
一个进程最多可以创建多少个线程
线程崩溃了进程也会崩溃吗
开发语言
开发语言
Go语言开发
Go语言开发
开发环境搭建
开发环境搭建
Go语言Ubuntu开发环境搭建
Go语言Windows开发环境搭建
Go语言入门
Go语言入门
语言基础
语言基础
Go语言的主要特征
Golang内置类型和函数
Init函数和main函数
命令
运算符
下划线
变量和常量
基本类型
数据结构
数据结构
数组
切片
指针
Map
结构体
流程控制
流程控制
条件语句if
条件语句switch
条件语句select
循环语句for
循环语句range
循环控制Goto、Break、Continue
函数
函数
函数定义
参数
返回值
匿名函数
闭包、递归
延迟调用(defer)
异常处理
单元测试
压力测试
方法
方法
方法定义
匿名字段
方法集
表达式
自定义error
面向对象
面向对象
匿名字段
接口
Go语言进阶
Go语言进阶
依赖管理
依赖管理
Golang依赖管理
常用标准库
常用标准库
strings
strconv
time
fmt
ioutil
bufio
context
sync
flag
viper
sort
rune
Zap
BigCache
os
crypto-aes
crypto-rsa
encoding/json
gorm
math
Excelize
jwt
go-redis
testing
elastic
Colly
Cron
go-funk
json-iterator
fasthttp
ants
网络编程
网络编程
Socket编程
Socket编程
TCP编程
UDP编程
TCP黏包
HTTP编程
HTTP编程
HTTP编程
Websocket编程
Websocket编程
Websocket编程
MQTT编程
MQTT编程
MQTT编程
RPC编程
RPC编程
初步了解RPC
快速入门使用
gRPC快速入门
protobuf语法学习
gRPC中的Token认证
gRPC中的证书认证
gRPC中的截取器
数据操作
数据操作
Go操作Mysql
Go操作Mysql
链接Mysql
Insert操作
Select操作
Update操作
Delete操作
MySQL事务
Go操作Redis
Go操作Redis
Redis介绍
链接Redis
String类型Set、Get操作
String批量操作
设置过期时间
List队列操作
Hash表
Redis连接池
Go操作ETCD
Go操作ETCD
ETCD介绍
操作ETCD
Go操作Zookeeper
Go操作Zookeeper
基本操作测试
简单的分布式server
Zookeeper命令行使用
Go操作Kafka
Go操作Kafka
Kafka介绍
Kafka的安装
操作Kafka
Go操作Apollo
Go操作Apollo
Go操作Apollo
Go操作memcached
Go操作memcached
Go操作memcached
Gorm
Gorm
入门指南
入门指南
概览
模型定义
惯例
连接数据库
CRUD接口
CRUD接口
创建
查询
更新
删除
教程
教程
链式操作
错误处理
钩子
数据库迁移
事务
原生SQL和SQL生成器
通用数据库接口
Gorm用法介绍
深入理解Go
深入理解Go
Golang三色标记_混合写屏障GC模式
Golang的协程调度器原理及GMP设计思想
Golang内存逃逸分析
Go语言高性能编程
Go语言高性能编程
性能分析
性能分析
benchmark基准测试
pprof性能分析
pyroscope性能分析
常用数据结构
常用数据结构
字符串拼接性能及原理
切片(slice)性能及陷阱
for和range的性能比较
GoReflect提高反射性能
Go空结构体struct{}的使用
Gostruct内存对齐
并发编程
并发编程
读写锁和互斥锁的性能比较
如何退出协程goroutine(超时场景)
如何退出协程goroutine(其他场景)
控制协程(goroutine)的并发数量
sync.Pool
sync.Once
sync.Cond
编译优化
编译优化
减小Go代码编译后的二进制体积
内联函数和编译器对Go代码的优化
Go逃逸分析
运行时
运行时
GMP原理与调度
Golang内存回收模式全分析
Go语言Web开发
Go语言Web开发
Gin框架
Gin框架
快速入门
Gin路由
Gin路由
基本路由
Restful风格的API
API参数
URL参数
表单参数
上传单个文件
上传多个文件
routesgroup
路由拆分与注册
Gin数据解析与绑定
Gin数据解析与绑定
Json数据解析和绑定
表单数据解析和绑定
URI数据解析和绑定
Gin渲染
Gin渲染
各种数据格式的响应
HTML模板渲染
重定向
同步异步
Gin中间件
Gin中间件
局部中间件
全局中间件
Next()方法
会话控制
会话控制
Cookie介绍
Cookie的使用
Cookie的缺点
Sessions
参数验证
参数验证
结构体验证
自定义验证
多语言翻译验证
Gin源码阅读
Gin源码阅读
net/http的大概流程
揭开gin的神秘面纱
gin牛逼的context
gin的路由算法
Fx框架
Fx框架
Fx理论篇
Java语言开发
Java语言开发
开发环境搭建
开发环境搭建
MacOS上安装Java
MacOS上使用Jenv管理多个JDK版本
Nodejs开发
Nodejs开发
Node.js开发环境搭建
中间件
中间件
Mysql
Mysql
基础篇
基础篇
执行一条select语句期间发生了什么
Mysql一行记录是怎么存储的
如何开启慢Sql日志
如何设置数据表字符编码
分库分表
索引篇
索引篇
索引常见面试题
从数据页的角度看B+树
为什么MySQL采用B+树作为索引
MySQL单表不要超过2000W行靠谱吗
索引失效有哪些
MySQL使用like“%x“索引一定会失效吗
count(*)和count(1)有什么区别
事务篇
事务篇
事务隔离级别是怎么实现的
MySQL可重复读隔离级别完全解决幻读了吗
锁篇
锁篇
MySQL有哪些锁
MySQL是怎么加锁的
update没加索引会锁全表吗
MySQL记录锁加间隙锁可以防止删除操作而导致的幻读吗
MySQL死锁了怎么办
加了什么锁导致死锁的
日志篇
日志篇
undolog与redolog与binlog有什么用
内存篇
内存篇
揭开BufferPool的面纱
Redis
Redis
面试篇
面试篇
Redis常见面试题
数据类型篇
数据类型篇
Redis常见数据类型和应用场景
Redis数据结构
持久化篇
持久化篇
AOF持久化是怎么实现的
RDB快照是怎么实现的
Redis大Key对持久化有什么影响
功能篇
功能篇
分布式延时任务
内存篇
内存篇
Redis过期删除策略和内存淘汰策略
高可用篇
高可用篇
主从复制是怎么实现的
为什么要有哨兵
高性能篇
高性能篇
一文看懂Redis6.0多线程IO
缓存篇
缓存篇
什么是缓存雪崩击穿穿透
Redis与MySQL双写一致性如何保证
Zookeeper
Zookeeper
Zookeeper核心知识
Kafka
Kafka
Kafka基础入门篇
Kafka三高架构设计剖析
Kafka面试之上篇
Kafka面试之中篇
Kafka面试之下篇
微服务与分布式
微服务与分布式
基础理论
基础理论
康威定律
分布式ACID、CAP、BASE理论
微服务和分布式的区别和联系
解决方案
解决方案
分布式ID解决方案
分布式锁解决方案
分布式session解决方案
分布式缓存解决方案
分布式事务解决方案
分布式任务调度解决方案
分布式配置中心解决方案
分布式跨域解决方案
相关算法
相关算法
一致性共识算法
一致性共识算法
图解Paxos算法
图解Raft算法
图解zab算法
图解Gossip算法
一致性Hash算法
一致性Hash算法
一致性Hash算法
设计模式(24种)
设计模式(24种)
创建型模式(6种)
创建型模式(6种)
简单工厂模式
工厂方法模式
抽象工厂模式
建造者模式
原型模式
单例模式
结构型模式(7种)
结构型模式(7种)
外观模式
适配器模式
代理模式
组合模式
享元模式
装饰模式
桥接模式
行为型模式(11种)
行为型模式(11种)
中介者模式
观察者模式
命令模式
迭代器模式
模板方法模式
策略模式
状态模式
备忘录模式
解释器模式
责任链模式
访问者模式
软件开发种的原则(SOLOD)
领域驱动设计
领域驱动设计
参考系列文章
开源架构
程序目录结构
内部博客系列
内部博客系列
1.开篇
2.聚合
3.存储库
4.领域服务
5.应用服务
6.六边形架构
工具|部署
工具|部署
Nginx可视化工具
Nginx可视化工具
Nginx可视化工具部署
Git简明教程
Git简明教程
一文讲清Git的基础知识Git简明教程
写给自己的Git分支使用备忘指南
Docker从入门到实践
Docker从入门到实践
Docker从入门到实践
Kubernetes开发技术
Kubernetes开发技术
kubeadm部署
kubeadm部署
Kubeadm部署Kubernetes1.23
二进制部署K8S集群
二进制部署K8S集群
集群规划与环境准备
部署Master集群
部署Worker集群
持续集成(CI/CD)
持续集成(CI/CD)
Drone
Drone
Docker部署Drone
Drone使用私有镜像仓库
Drone相关的环境变量
Jenkins
Jenkins
自动化部署SpringBoot项目
文档管理
文档管理
Seafile+Onlyoffice部署
Gitlab私有仓库搭建
Gitlab私有仓库搭建
使用Docker部署Gitlab
gitlab设置中文
Gitlab定时备份
Gitlab配置邮件服务
Gitlab配置HTTPS
数据结构与算法
数据结构与算法
数据结构
数据结构
并查集
并查集
并查集
树
树
BST树
AVL树
B树与B+树
红黑树
算法
算法
十大排序算法
十大排序算法
冒泡排序
插入排序
希尔排序
选择排序
归并排序
堆排序
快速排序
计数排序
桶排序
基数排序
排序算法总结
TopK问题
TopK问题
TopK问题
字符串匹配算法
字符串匹配算法
BF算法与RK算法
BM算法
什么是KMP算法
Manacher算法
二分查找算法
二分查找算法
二分查找算法
前缀和与差分数组
前缀和与差分数组
前缀和与差分数组
数学
数学
组合数学
组合数学
卡特兰数列
不同场景操作channel的结果