团队管理经验

很多人以为技术团队管理是一门很复杂的学问,但我自己带团队之后慢慢发现,其实很多事情没有想象中那么复杂。技术团队管理,说到底不是“管人”,而是 让团队能够稳定地把事情做好。 刚开始带团队的时候,我也走过一些弯路。最早的时候,我觉得只要自己技术能力强,很多事情亲自做就能解决。但后来慢慢发现,如果团队规模变大,靠一个人是撑不住的。技术负责人真正需要做的事情,其实是让团队整体能力提升,而不是自己变成团队里最忙的人。 这些年做技术管理,我逐渐总结出一些比较简单但很重要的经验。 先把事情想清楚,再让团队去做 很多技术团队效率低,其实不是因为工程师能力不行,而是事情本身没有想清楚。 以前我也遇到过这种情况:需求来了,大家马上开始开发,结果开发到一半才发现设计不合理,又要返工。后来我慢慢养成一个习惯,在项目开始之前一定要把 设计思路和整体方案想清楚。 例如一个系统要做什么功能、系统大概怎么拆分、核心模块怎么设计、哪些地方可能成为瓶颈。如果这些事情没有想清楚,团队越努力,可能走得越偏。 所以现在我通常会先做一件事情:把问题想明白,再安排团队做事情。这样不仅效率更高,也能减少
6 min read

一级二级缓存设计

为什么需要多级缓存 在互联网系统中,随着业务规模不断增长,数据库往往会成为系统的性能瓶颈。大量请求如果直接访问数据库,不仅会带来高延迟,还会导致数据库压力过大,甚至出现连接耗尽、查询变慢等问题。因此,几乎所有高并发系统都会引入 缓存(Cache) 来提升系统性能。 最常见的缓存方式是使用 Redis 作为统一缓存层。客户端请求首先访问 Redis,如果缓存命中,就直接返回数据;如果缓存未命中,再访问数据库并将结果写入缓存。这种方式已经能够显著降低数据库压力。 但随着系统规模继续扩大,仅仅依赖 Redis 仍然可能出现新的问题。例如在高 QPS 场景下,大量请求同时访问 Redis,会产生网络开销和 Redis CPU 压力。同时,某些热点数据可能会被频繁读取,每次都经过网络访问 Redis,也会带来额外延迟。 为了解决这些问题,很多大型系统会引入 多级缓存架构(Multi-Level Cache),其中最常见的一种模式就是 一级缓存 + 二级缓存设计。
6 min read

微服务架构设计

为什么会出现微服务架构 在早期的软件系统中,大多数应用都采用 单体架构(Monolithic Architecture)。所有功能模块都运行在同一个应用进程中,例如用户系统、订单系统、支付系统、库存系统等,都被打包在一个工程中统一部署。这种架构在系统规模较小时非常简单直接,开发效率也较高。 但随着业务不断增长,单体架构的问题逐渐显现出来。系统代码越来越庞大,一个项目可能包含几十万甚至上百万行代码,任何一次修改都需要重新构建和部署整个系统。同时,不同功能模块之间耦合严重,一个模块出现问题很可能影响整个系统运行。当访问量增长时,系统也无法只对某个热点模块进行扩展,只能整体扩容,资源利用效率很低。 在这种背景下,微服务架构逐渐成为大型系统的主流设计方式。微服务的核心思想是 将一个庞大的系统拆分为多个独立服务,每个服务负责一个明确的业务能力,并可以独立开发、部署和扩展。这样不仅可以降低系统复杂度,还可以提升系统的可维护性和扩展能力。 微服务架构的核心设计思想 微服务架构并不仅仅是把系统拆分成很多小服务,更重要的是围绕 业务能力(Business Capability)进行
8 min read

PolarDB 存算分离

背景 随着互联网业务规模不断扩大,传统关系型数据库架构逐渐暴露出一些瓶颈,例如扩展能力不足、存储成本高、读写压力集中等问题。为了应对这些挑战,云厂商开始设计一种新的数据库架构模式:存算分离(Storage-Compute Decoupling)。 PolarDB 是阿里云推出的一款云原生数据库,其核心设计理念之一就是 计算层与存储层解耦。这种架构使数据库具备更强的弹性扩展能力和更高的资源利用率。 () 本文将从架构角度分析 PolarDB 的存算分离设计,并与 AWS Aurora 以及传统 MySQL 架构进行对比。 传统 MySQL 架构的问题 在传统 MySQL 架构中,数据库通常运行在单个服务器上: MySQL Server ├── CPU ├── Memory └── Local Disk 计算和存储都在同一台机器上。 这种架构在早期互联网时代已经足够,但随着业务规模扩大,会出现几个明显问题: 1 存储扩展困难 数据库数据通常存储在本地磁盘中,当数据量增长时,只能通过: * 升级磁盘 * 更换更大的机器 这种方式扩展
6 min read

Flink 理解

前言 在大数据系统的发展过程中,一直存在一个核心问题: 数据越来越多,但处理速度越来越慢。 传统的数据处理方式,大多数是 离线处理。 例如: 每天晚上跑一次任务: * 统计用户行为 * 计算广告数据 * 生成报表 * 分析业务指标 这种方式叫: Batch Processing(批处理) 典型工具例如: * Hadoop MapReduce * Hive * Spark 这些系统适合处理 海量历史数据。 但是随着互联网的发展,很多业务开始需要: 实时数据处理。 例如: * 实时风控 * 实时推荐 * 实时监控 * 实时广告竞价 * 实时日志分析 这些场景有一个共同特点: 数据必须“边产生边处理”。 不能等到第二天。 于是就出现了一个新的计算模式: Stream Processing(流式计算)。 为什么需要 Flink 早期实时计算系统主要依赖: * Storm * Spark Streaming 但这些系统都有一些问题。 例如:
4 min read

ETCD 探索

在分布式系统中,经常会遇到这样的问题: * 服务节点需要共享配置 * 系统需要做服务发现 * 分布式锁需要一个协调中心 * 集群需要一个一致性的状态存储 这些问题,本质上都需要一个 可靠的分布式协调系统。 而在现代云原生体系中,最常用的组件就是 etcd。 例如: * Kubernetes * CoreDNS * service mesh * 分布式配置中心 这些系统的底层都依赖 etcd。 etcd 是什么 简单来说: etcd 就是一个高可靠的分布式 Key-Value 数据库。 但它和普通数据库最大的区别是: 它是为“分布式协调”而设计的。 它的主要特点有: * 强一致(Strong Consistency) * 支持分布式集群 * 提供 Watch 监听机制 * 支持事务 * 提供租约(Lease)机制 很多分布式系统都会用 etcd 做: * 服务注册中心 * 配置中心 * 分布式锁 * Leader
2 min read

Netty 深入学习

在分布式系统、微服务架构中,网络通信是最基础也是最重要的一部分。 很多高性能框架(如 Dubbo、gRPC、RocketMQ、Elasticsearch 等)底层都依赖 Netty 来完成网络通信。 理解 Netty,首先要理解它背后的 NIO 网络模型设计思想。 传统网络编程的问题 在早期 Java 网络编程中,大多数程序使用的是 BIO(Blocking IO) 模型。 例如: 服务器每接入一个客户端连接,就创建一个线程。 一个连接 = 一个线程 如果连接很多,比如: 1万连接 = 1万个线程 这会带来几个严重问题: 线程资源消耗巨大 线程本身需要内存和调度成本。 线程上下文切换开销大 CPU需要频繁在不同线程之间切换。 系统扩展性差 连接数量一多,系统就容易崩溃。 因此,传统 BIO 并不适合 高并发网络服务。 NIO
3 min read

算法:基础知识

什么是算法? 算法,本质上就是 解决问题的一套步骤。 只要是: 输入一组数据 按照一定规则处理 得到结果 这整套处理过程,就是算法。 算法的理解 为什么程序员需要关心算法?因为同样一个问题,不同的算法效率可能差很多。有的做法可能几秒就能算出来,有的可能要跑好几分钟甚至更久。当数据量变大时,这种差距会越来越明显,所以很多系统性能好不好,其实和算法设计关系很大。 算法通常不会单独存在,它往往和数据结构一起使用。数据结构负责把数据组织好,比如数组、链表、树、哈希表这些;而算法则负责对这些数据进行操作。简单来说,一个负责存数据,一个负责处理数据,两者配合起来,程序才能高效运行。 在现实系统中,算法其实无处不在。比如搜索引擎要根据算法排序网页,短视频平台要用算法推荐内容,导航软件要用算法计算最短路线,电商平台也会用算法做商品推荐和排序。很多我们每天使用的软件,其实背后都有各种算法在工作。 学习算法并不是为了刷多少题,而是为了培养解决问题的思路。当遇到一个问题时,能快速想到几种解决方式,然后选择效率更高的一种,这才是算法真正的价值。很多经验丰富的工程师,其实都是在不断优化解决问
2 min read

OpenClaw 使用记录

OpenClaw 是一个 开源的 AI Agent 自动化执行框架。 它的核心目标是让 AI 不仅仅停留在“对话”,而是能够 自动规划任务、调用工具、执行操作并持续迭代完成复杂目标,最近使用下来总结了一些内容。 简单来说,OpenClaw 可以理解为: 一个可以自动写代码、执行命令、分析项目并持续迭代任务的 AI 工程助手。 与普通的 ChatGPT 或 Claude 不同,OpenClaw 的设计目标是: * 让 AI 具备任务执行能力 * 可以 拆解复杂目标 * 自动 调用工具和执行命令 * 持续 迭代直到任务完成 因此,它更像是一个 AI 自动化开发助手(AI Software Engineer)。 OpenClaw — Personal AI AssistantOpenClaw
3 min read

Redis 线程模型

Redis 以高性能著称,其核心原因之一就是其独特的 线程模型设计。很多人听说 Redis 是“单线程”,但实际上 Redis 的线程模型在不同版本中已经发生了演进。理解 Redis 的线程模型,对于理解其高性能原理、以及在高并发场景中的使用方式非常重要。 本文将从 Redis 单线程设计、事件驱动模型、IO 多路复用以及 Redis 6 之后的多线程改进几个方面进行介绍。 Redis 为什么选择单线程 Redis 早期版本(Redis 6 之前)的核心执行模型是 单线程处理命令。 也就是说: * 所有客户端请求 * 所有命令执行 * 数据读写 都由 一个主线程完成。 但需要注意的是: Redis 的单线程 只指命令执行单线程,并不是整个 Redis 进程只有一个线程。例如: * RDB 持久化
3 min read

SonarQube

前言 SonarQube 是一个用于 代码质量管理 的开源平台,可以帮助开发者在开发过程中持续检测代码中的潜在问题。 通过静态代码分析、代码覆盖率统计以及多维度的质量指标,SonarQube 能够在代码进入生产环境之前发现缺陷、安全漏洞和性能隐患,从而提升系统的整体稳定性并降低后期维护成本。 在团队协作和持续集成环境中,SonarQube 通常作为 代码质量守门人(Quality Gate) 使用,使代码质量检查自动化、标准化。 提高代码质量 SonarQube 可以自动检测代码中的潜在问题,例如: * 代码缺陷(Bug) * 安全漏洞(Security Vulnerabilities) * 代码异味(Code Smell) * 潜在性能问题 提升代码可维护性 SonarQube 会对代码进行多维度分析,例如: * 复杂度 * 重复代码 * 测试覆盖率 * 技术债(Technical Debt) 通过这些指标,开发者可以更直观地了解系统的健康状态,并针对性地进行重构和优化。 开发者可以在代码发布前就发现并修复这些问题,从而减少
3 min read

Polaris Mesh

PolarisMesh 提供了完整的微服务治理能力,是腾讯开源的一站式云原生服务治理平台。平台围绕 服务注册与发现、流量治理、容错保护以及配置管理 等核心能力,为微服务架构提供稳定可靠的运行基础。通过 PolarisMesh,服务实例可以自动完成注册与发现,同时结合智能负载均衡策略,实现请求在多实例之间的合理分配,从而提升系统整体的稳定性与吞吐能力。 PolarisMesh支持多语言、多框架的云原生服务治理平台 服务管理、流量管理、故障容错、配置管理、可观测性 GitHub 查看文档 立即体验 一站式服务治理平台 北极星为服务治理提供一站式解决方案,覆盖服务注册中心、服务网格和配置中心的功能,提供业务监控、流量监控、事件中心和操作记录等全方位的可观测性能力,帮助用户快速构建微服务架构。 支持异构技术栈和环境 通过 Proxyless 和 Proxy 两种形态实现服务发现和治理,提供多语言 SDK、开发框架、Java Agent 和网格代理等接入方式,支持虚拟机、容器和混合云等部署环境,满足不同业务场景和开发模式。 支持常用开发框架 提供
6 min read

阿里 ask 集群

前言 阿里云ASK(Alibaba Cloud ACK)集群是阿里云提供的托管式Kubernetes服务。它基于开源的Kubernetes项目,为用户提供了一个简便易用、弹性伸缩、高可用性和安全可靠的容器化部署和管理平台,相当于无服务器Kubernetes容器服务。您无需购买节点即可直接部署容器应用,无需对集群进行节点维护和容量规划,并且根据应用配置的CPU和内存资源量进行按需付费。ASK集群提供完善的Kubernetes兼容能力,同时降低了Kubernetes使用门槛,让您更专注于应用程序,而不是管理底层基础设施。 什么是容器服务 Serverless 版ACK Serverless_容器服务 Kubernetes 版 ACK-阿里云帮助中心本文介绍阿里云容器服务 Serverless 版的产品简介、核心优势、与ACK集群对比、应用场景、核心功能等信息,帮助您快速了解ACK Serverless集群。 ASK集群中的Pod基于阿里云弹性容器实例ECI运行在安全隔离的容器运行环境中。每个Pod容器实例底层通过轻量级虚拟化安全沙箱技术完全强隔离,容器实例间互不影响。 A
4 min read

架构设计原则

在进行系统架构设计时,通常需要从多个维度综合考虑系统能力。一个优秀的系统架构不仅要满足当前业务需求,还需要能够适应未来的业务增长和技术演进。常见需要重点关注的设计原则包括以下几个方面。 可扩展性 系统设计应该具备良好的可扩展能力,能够支持未来业务增长和需求变化。架构在设计时通常需要采用模块化、分层架构等方式,使系统可以在不影响整体稳定性的情况下方便地增加新功能、扩展数据规模或支持更多用户。 可靠性 系统设计需要具备较高的可靠性,能够保证系统在长期运行中的稳定性和可用性。架构设计通常需要考虑故障恢复机制、容错机制以及数据备份策略,以确保在系统出现异常时能够快速恢复业务。 一个高可靠系统通常需要具备以下能力: * 自动侦测故障 * 自动修复问题 * 自动切换(Failover) 通过这些机制可以最大程度减少系统故障对业务造成的影响。 极致性能 系统架构还需要关注性能设计,确保系统能够快速响应用户请求,并处理大量并发操作。常见的性能优化手段包括: * 合理的数据结构与算法设计 * 缓存机制 * 负载均衡 * 并发控制 在实际系统中,性能通常通过 TP
6 min read

防重复提交

使用Token令牌机制可以有效地防止CSRF攻击和重复提交。在提交表单时,服务器会生成一个Token令牌,并将其存储在Redis中。然后,将这个Token令牌作为表单的一个隐藏字段或URL参数传递给客户端。客户端提交表单时,将这个Token令牌一并提交给服务器。服务器在处理表单时,会检查这个Token令牌是否正确,并在处理完表单后删除这个Token令牌。这种方式可以有效地防止重复提交和CSRF攻击,但是需要注意保护Token令牌的安全性,否则可能会被攻击者利用。 Token令牌机制是一种常用的Web应用程序防止重复提交和CSRF攻击的方法。它的基本思想是在每次提交表单时,服务器会生成一个Token令牌,并将其存储在Redis中。然后,将这个Token令牌作为表单的一个隐藏字段或URL参数传递给客户端。客户端提交表单时,将这个Token令牌一并提交给服务器。服务器在处理表单时,会检查这个Token令牌是否正确,并在处理完表单后删除这个Token令牌。 Token令牌机制的实现步骤如下: 在服务器端生成一个Token令牌,并将其存储在Redis中。Token令牌可以使用随机数、UUI
3 min read

数据结构:栈

栈(Stack)是一种先进后出(LIFO)的数据结构,它只允许在栈顶进行插入和删除操作。栈可以用数组或链表来实现。 在栈中,插入和删除操作通常称为入栈(push)和出栈(pop)。当插入一个元素时,它被放置在栈顶,当删除一个元素时,它是从栈顶删除的。栈顶是栈中最新添加的元素,栈底是栈中最早添加的元素。 栈的应用非常广泛,例如,计算机中的函数调用和递归调用都是通过栈来实现的。当一个函数被调用时,它的参数、返回地址和局部变量等信息被压入栈中,当函数返回时,这些信息又从栈中弹出。 以下是栈的基本操作: push(element):将一个元素压入栈顶。 pop():从栈顶弹出一个元素。 top():返回栈顶元素,但不对栈进行修改。 isEmpty():判断栈是否为空。 size():返回栈中元素的个数。 栈的时间复杂度为O(1),因为所有操作都是在栈顶进行的。但是,栈的空间复杂度为O(n),因为需要存储所有元素。 在计算机中,栈(Stack)被广泛应用于函数调用、
2 min read

HTTP 协议发展史

HTTP 是浏览器与服务端之间最主要的通信协议,HTTP 是应用层协议(7层),应用层产生的数据会通过传输层协议作为载体来传输到互联网上的其他主机中,而其中的载体就是 TCP 协议(3.0使用UDP),基于 TCP 协议进行连接,然后传输对应内容信息。 20 世纪 60 年代,美国国防部高等研究计划署(ARPA)建立了 ARPA 网,这被认为是互联网的起源。70 年代,研究人员基于对 ARPA 网的实践和思考,发明出了著名的 TCP/IP 协议。该协议具有良好的分层结构和稳定的性能,并在 80 年代中期进入了 UNIX 系统内核,促使更多的计算机接入了网络。 1989 年,蒂姆伯纳斯-李博士发表了一篇论文,提出了在互联网上构建超链接文档系统的构想。在篇文章中他确立了三项关键技术:URI、HTML、HTTP。 基于这三项技术,
14 min read

Fiddler 安装并抓取HTTPS请求

众所周知 Fiddler 是一个非常实用的抓包工具(主要是对于Http请求)而且有很多的扩展功能可以去官网下载,我们在开发中,难免需要抓包工具来查看接口数据 或者 测试接口的安全性, 如未签名而进行值的修改,下面将介绍它的安装以及配置 证书 来抓取Https加密信息。 Fiddler 官方网址: Fiddler | Web Debugging Proxy and Troubleshooting SolutionsExplore the Fiddler family of web debugging proxy tools and troubleshooting solutions. Easily debug, mock, capture, and modify web and network traffic.Telerik.com [https://www.telerik.com/fiddler]
3 min read

IDEA 常用插件以及开发工具

1、静态代码质量管理工具部署平台 Code Quality and Code Security | SonarQube [https://www.sonarqube.org/] 2、代码质量检查插件 FindBugs 可以直接以插件安装在IDEA IDE中 FindBugs™ - Find Bugs in Java Programs (sourceforge.net) [https://findbugs.sourceforge.net/] 3、翻译插件(英语不好者必备) Translation 可以在代码开发试图中直接翻译 4、代码编码格式约束插件 CheckStyle-IDEA 通过检查对代码编码格式,命名约定,Javadoc,类设计等方面进行代码规范和风格的检查,从而有效约束开发人员更好地遵循代码编写规范 5、Java Meven 包冲突检测工具 Maven Helper 可以检测整个项目pom.
2 min read

随心笔记

技术无止境 创新不停驻