本博客主要以技术分享、学习笔记、工作心得为主,大多原创,部分基于较好的博客转载,加以注释辅助阅读。陆续更新,生命不息,学习不止。
23年7月,博主离职在家,着手搭建博客,并陆续发表博文。以各种分类加以系统性的整理,以供自需或有缘人,后续工作、学习查阅之用。
分类及其介绍
漫谈系列
-
工作经验得出的一些codereview最佳实践。
-
都是通过<<重构>>这本书得出的一些分享和经验。
-
如何通过工具,让codereview提高效率。
-
如果在单体服务下,没有把各个业务梳理清楚,你的微服务拆分是不合理的,有很大的风险,而好的微服务模式,应该是先在单体架构先,把各个业务调整完成,验证你的业务逻辑是清晰的,然后按照DDD的思想,去设计完成后,再抽成微服务独立出去,通过业务的探索,而不是你个人的经验。
互联网架构修炼
每个程序员都有着架构师的梦
分布式
-
从单体->集群->分布式->微服务都讲解下,最后阐述了分布式事务相关。
-
详细解释了分布式事务,以及TCC实现原理及流程。
-
介绍了主动轮询和监听回调型两种具体实现方案。
Go语言
MySQL数据库系列
-
数据库、表定义的增、删、改。
-
数据表数据的增、删、改。
-
涵盖了大部分工作中遇到的查询sql语句语法。
-
数据库创建、权限控制等内容。
以上,就是mysql语法的基础部分。
-
着重介绍INNODB、以及索引相关,最后到mysql的优化部分。
-
视图建立与权限控制,存储过程介绍
-
介绍锁相关、事务底层原理以及四大特性详解
-
详细介绍数据库日志相关,以及从零开始搭建主从复制。
-
详细介绍分库分表,并基于docker,从零搭建分库分表。
-
docker下基于Mycat配置一主一从、多主多从介绍。
Redis系列
-
初步介绍redis以及五种类型的使用场景、基本方法,使用go语言操作redis demo。
-
深入C源码区介绍五种类型底层实现原理,剖析RedisObject。
-
基于穿透、雪崩、击穿问题做解释及解决,最后通过redis实现分布式id
-
介绍redis几种常用的更新策略,以及结合工作推荐一个。
-
key 命名,value选型,以及处理bigkey的最佳实践。
-
介绍pipeline,以及使用go语言操作pipeline,进行热点数据预热。
-
相关系统配置问题的最佳实践方案,比如RDB还是AOF?
-
从源码入手,一文弄懂redis是单线程还是多线程。
-
深入源码,结合流程图,实实在在的爬开底层淘汰策略的实现原理
-
介绍持久化方式,到手把手搭建主从、哨兵、集群,最后解释插槽。
中间件系列
-
同步服务,redis、ES等需要数据一致性的,可以使用canal,本文以go语言示例。
-
详细介绍了ES安装、概念、已经工作中大部分使用的操作相关。
-
详细介绍相关概念,手把手搭建RBMQ,并通过go语言实现三种交换机模式。
-
基于持久性、可靠性给出了设计思路,以及扩展了延迟消息实现方法。
-
分布式系统架构的鼻祖zk
微服务系列
实话实话,微服务博主并未有实战经验,只了解皮毛,但对微服务理念深以为然,希望后续有机会深入。
-
介绍了RPC以及实操gRPC
-
使用TLS以及Token两种方式进行认证模式,给出案例。
后续: 限流、服务发现、熔断、降级等等操作。
环境相关
以下介绍k8s相关
操作系统
-
介绍用户态、内核态、以及五种IO模型。
算法和数据结构
算法一直是较弱的一项,所以趁着时间,准备从排序开始分解学习
设计模式系列
设计模式有助于提高软件开发质量、可维护性和可扩展性,设计模式并非一成不变的规则,是需要根据具体的业务去具体的调整和应用,下面给出23中设计模式中简单的例子,以及作用和使用场景。设计模式可以分为创建型、结构型和行为型三种。
源码在github: 23中设计模式源码
创建型
-
单例模式通常用于控制对唯一实例的访问,以便在系统中的多个部分之间共享该实例。
-
定一个用于创建对象的接口,但将实例化的过程延迟到子类中,就是由子类去决定实例化哪个对象
-
创建相关或依赖对象的家族,而不需要指定它们的具体类
-
将一个复杂对象的构建过程和它的表示进行分离,使得同样的构建过程可以创建不同的表示
-
复制现有对象来创建新对象,而不是通过实例化类。
结构型模式
-
它允许将一个类的接口转换成客户端期望的另一个接口。
-
它允许向一个现有对象添加新的功能,同时又不改变其结构。
-
它充当其他对象的接口,以控制对这个对象的访问。
-
为复杂子系统提供一个简化的接口,从而使客户端代码更容易使用。
-
通过组合的方式,将抽象类和实现类分离,使得它们可以独立变化而不互相影响。
-
将对象组织成树形结构,使得客户端可以一致地处理单个对象和组合对象。
-
通过共享对象来减小内存使用或减少计算开销。
行为型模式
-
允许客户端选择算法的实现方式,使得客户端和算法之间解耦。
-
它定义了一个实现模板的骨架,将一些步骤推迟到子类。
-
定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。
-
提供一种方法来顺序访问一个聚合对象中的各个元素。
-
通过一系列处理者(处理对象)来逐步处理请求,直到请求被处理为止。
-
它将请求封装成一个对象,从而使得可以参数化客户端对象
-
它允许在不暴露对象内部状态的情况下,捕获并保存对象的内部状态,以便将对象恢复到之前的状态。
-
它允许对象在内部状态发生改变时改变其行为。
-
通过在被访问的对象中加入一个对外提供的接受访问者的接口,使得访问者可以访问到对象的内部状态。
-
减少对象之间的直接通信,将复杂的交互关系变得更加松散,从而提高系统的可维护性和可扩展性。
-
定义了一个语言的文法,设计该语言的解释器,用户可以使用特定的解释器来解释给定的语言表达式。
博主也爱好旅游,旅游攻略及其对生活片段的分享,主要发表于微信公众号。