自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

代码时光

高山仰止,景行行止.虽不能至,心向往之。

  • 博客(105)
  • 资源 (1)
  • 收藏
  • 关注

原创 【架构师之路】分布式事务通关秘籍:原理、挑战与主流解决方案

分布式事务指事务的参与者、资源服务器及事务管理器分布在不同的网络节点上。网络不可靠:节点间通信可能延迟、丢失或重复。数据一致性:跨多个数据库或服务的数据需保持同步。性能与可用性:需在一致性和系统可用性之间权衡(CAP理论)。分布式事务是微服务架构的核心挑战之一,需结合 CAP/BASE 理论选择合适方案。工业级框架(如 Seata)降低了实现复杂度,但开发者仍需根据业务特点权衡一致性、可用性与性能。

2025-03-26 15:00:00 1556

原创 想微调特定领域的 DeepSeek,数据集究竟要怎么搞?

从最上层的预训练模型开始,我们先划分出是否为多模态(例如让模型具备对图片、语音、视频的理解和生成能力)微调,还是纯文本微调(仅让模型具备生成文字的能力)。在文本微调中,监督微调是目前应用最广泛也是最常用的微调技术,当然目前我们普通人想在特定行业里去微调自己的大模型,最常用的也是监督微调,所以监督微调的数据集格式是我们后续重点学习的内容。然后其他微调技术还包括无监督自监督微调强化学习微调等等,这些我们只做简单了解,不用过多深入。

2025-03-24 13:36:58 956

原创 分布式系统设计陷阱,白话CAP理论

这就是 CAP 理论的核心。

2025-03-23 17:00:00 627

原创 大模型微调(Fine-tuning)实战:快速使用 colab下的unsloth 零成本打造定制化模型

最近b站上刷到一个博主,大模型DeepSeek,实现本地运行,打造一款定制化的LLM,下面是一些关键步骤和代码。UP主的案例是微调deepseek,打造一个。

2025-03-21 18:11:53 1031

原创 【架构师之路】从15% CPU到3%:我们如何通过替换日志框架拯救了服务器集群?

Log4j2:适用于复杂的日志需求,对性能要求较高的场景,以及需要灵活配置和扩展的项目。Logback:适用于简单的日志记录需求,对性能要求不是特别高的场景,以及希望快速上手的项目。综合建议:新项目优先选择 Log4j2,存量系统根据改造成本评估迁移价值。

2025-03-20 18:00:00 862

原创 大模型应用开发所需的技术栈概览

在大型 AI 模型中,RAG(Retrieval-Augmented Generation)是一种模型架构,它结合了检索(Retrieval)和生成(Generation)两种方法,用于处理自然语言生成任务。

2025-03-20 10:52:13 388

原创 订单消失、余额乱跳!分布式系统工程师必须跨越的ABA天坑

在分布式系统中,ABA 问题可能导致数据不一致和错误的业务逻辑。通过引入版本控制、使用全局唯一标识符、乐观锁、分布式协调服务和分布式事务等方法,可以有效地解决这一问题。选择合适的解决方案应根据具体的系统架构和业务需求进行评估。

2025-03-19 18:00:00 417

原创 从NullPointer到数据混乱:this逃逸为何是Java开发者的‘帕里斯通‘?

this逃逸是多线程编程中的典型陷阱,其隐蔽性可能导致严重的并发问题。避免在构造函数中传递this引用:尽量避免在构造函数中将this引用传递给其他作用域或线程。延迟初始化:延迟初始化对象,确保对象完全构造完成后再将其暴露给外部。工厂方法模式:使用工厂方法创建对象,确保对象的构造和初始化过程在同一作用域内完成。同步机制:在必要时使用同步机制来保护对象的访问,避免多线程环境下的问题。

2025-03-18 18:00:00 820

原创 【架构师之路】线程池参数优化实战——如何根据QPS设计合理线程数?

基准测试先行:通过JMeter/Gatling获取任务执行时间分布监控驱动优化:实时观察aqueue_size等指标弹性伸缩设计:结合K8s水平扩容与线程池垂直调整。

2025-03-18 13:33:02 834

原创 【架构师之路】TCC 分布式事务解决方案与实现

TCC 是一种灵活而高效的分布式事务解决方案,通过将事务分解为 Try、Confirm 和 Cancel 阶段,确保了事务的一致性和可靠性。在设计分布式系统时,考虑使用 TCC 可能是一个不错的选择,特别是在需要更高性能和更灵活的事务管理方式时。

2025-03-17 17:00:00 652

原创 【架构师之路】每秒崩溃100次到百万并发:四大限流算法如何拯救你的系统?

随着互联网和移动应用的蓬勃发展,系统的稳定性和可靠性变得至关重要。在面对突发流量和恶意攻击等挑战时,限流器算法的重要性愈发凸显。限流器算法作为保护系统免受过载的有效手段,扮演着关键的角色。它们能够有效地控制请求的处理速率,防止系统被过多请求淹没,从而保障系统的正常运行并提升用户体验。在这篇文章中,我们将探讨不同类型的限流器算法,包括漏桶算法、令牌桶算法、固定窗口算法和滑动窗口算法,深入剖析它们的原理、特点以及在实际场景中的应用。

2025-03-17 14:34:25 784

原创 【架构师之路】从Java中不同Hash表,探索Hash冲突的解决方法。

Hash冲突是哈希技术中不可避免的现象,但通过合理选择冲突解决策略(如链地址法兼顾灵活性与性能,开放定址法优化内存)、设计高效哈希函数,以及动态调整负载因子,可显著降低其影响。实际应用中需根据数据规模、访问模式和硬件条件综合权衡。

2025-03-14 05:00:00 639

原创 【架构师之路】从一个对象真实占用大小引发的Java内存对齐(Memory Alignment)的思考

内存对齐(Memory Alignment)是 JVM 在分配对象内存时,通过填充字节(Padding)使数据按特定字节边界对齐的技术。提高内存访问效率:CPU 通常以固定大小(如 8 字节)读取内存块,对齐后减少跨边界访问的指令次数优化硬件兼容性:某些硬件平台无法访问未对齐的内存地址,对齐避免抛出硬件异常减少伪共享(False Sharing):对齐填充可防止多个线程访问同一缓存行的不同数据,降低并发竞争。

2025-03-12 17:30:00 908

原创 你知道Netty源码中都用了哪些设计模式吗?

实现:Netty 的 ChannelPipeline 通过 fireChannelRead 等方法将事件分派给链中的各个 ChannelHandler,每个 ChannelHandler 负责处理特定的事件。实现:Netty 中的 ChannelFuture 和 ChannelPromise 可以看作是命令模式的应用,它们封装了异步操作的请求和结果。命令模式也支持可撤销的操作。描述:观察者模式定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。

2025-03-11 20:00:00 676

原创 【架构师之路】哈希函数优化终极方案,完美哈希函数的探索与思考

哈希表是⼀种查找性能⾮常优异的数据结构,它在计算机系统中存在着⼴泛的应⽤。尽管哈希表理论上的查找时间复杂度是 O(1),但不同的哈希表在实现上仍然存在巨⼤的性能差异。下面是jdk里的一些hash表的测试情况我们发现,hash频繁碰撞也有可能将查询时间复杂度从O(1)退化为O(n),空间复杂度也会伴随上升。这是因为,一般哈希表对哈希冲突的处理会增加额外的分⽀跳转和内存访问,这会让流⽔线式的CPU指令处理效率变差。当遇到哈希冲突时,我们常见到的解决⽅案有:开放寻址法、拉链法、⼆次哈希法。

2025-03-11 14:21:01 761

原创 快速了解八款主流大模型推理框架

当前大模型推理平台/引擎生态各具特色,从企业级高并发服务到本地轻量化部署,从国产硬件优化到前沿编译技术探索,每种方案都有其独到优势。选择合适的推理方案不仅需考虑技术指标,更要结合业务场景、硬件资源与未来扩展规划。未来,随着技术的不断进步和产业协作的加深,大模型推理生态将呈现出更加多元、灵活和高效的局面,为各领域在激烈竞争中抢占先机提供强大支撑。

2025-03-10 16:39:45 879

原创 【架构师之路】微服务架构设计中的边车(Sidecar)模式

Sidecar模式是一种架构设计模式,通常用于微服务架构中。它通过将辅助功能与主应用程序分离,使得主服务可以专注于其核心业务逻辑。Sidecar模式指的是在微服务架构中,将一些常见的功能(如日志记录、监控、服务发现等)封装在一个独立的服务或代理中(例如 Kubernetes 中的 Pod),这个服务与主服务并行运行,形成“侧车”结构。如下图所示,sidecar 模式允许您在应用程序旁边添加更多功能,而无需额外第三方组件配置或修改应用程序代码。

2025-02-17 10:56:39 494

原创 Deepseek R1 模型本地部署(ollama+cherry studio)详细指南! 个人知识库搭建与使用

对于想要在本地或自托管环境中运行 LLM 的用户而言,Ollama 提供了一个无需 GPU、在 CPU 环境也可高效完成推理的轻量化 “本地推理” 方案,接下来跟着笔者学习怎么一步步搭建自己的本地知识库吧

2025-02-14 16:58:08 5339 6

原创 【架构师之路】软件架构设计方法之The Clean Architecture 整洁架构

Clean Architecture 是一种旨在提高软件质量的设计理念,通过严格的层次划分和依赖管理,使得系统更加灵活、可维护和可测试。理解和应用清洁架构的原则,可以帮助开发者在构建复杂系统时做出更合理的设计决策。

2024-12-17 18:00:00 1438

原创 Java内存回收(GC)新贵的抉择,G1与ZGC!

设计为几乎无停顿,通常在几毫秒的范围内,即使在大堆内存情况下也能保持低延迟。使用并发标记和处理,最大限度地减少应用线程的暂停时间。G1:提供可预测的停顿时间,能够通过 -XX:MaxGCPauseMillis 参数设置最大停顿时间。停顿时间通常比 G1 短,但在处理大堆内存时仍可能造成较长的停顿。

2024-12-13 20:00:00 802

原创 【架构师之路】锁战争终结者:Actor与CSP如何颠覆传统并发编程?

每种并发模型都有其特定的优缺点和适用场景,选择合适的模型可以帮助开发者更有效地构建高并发、可靠的应用程序。根据具体的应用需求和上下文,开发者可以选择最匹配的并发计算模型。

2024-12-12 12:00:00 1881

原创 【架构师之路】分布式系统中,容错治理的三大利器熔断、限流、降级

服务降级是指在系统部分功能出现异常或负载过高时,主动降低某些非核心功能的质量或直接停止这些功能,以保证核心功能的正常运行。其核心思想是“优先保障核心服务服务熔断是一种保护机制,用于防止系统在某些服务出现问题时,影响到整个系统的稳定性。其灵感来源于电力系统中的熔断器,当电路出现过载时,熔断器会自动切断电路以保护整个系统。服务限流是指通过限制系统处理请求的速率,来保护系统资源,防止系统过载。限流策略通常用于防止突发流量对系统的冲击。

2024-12-11 11:27:55 839

原创 【架构师之路】理解 CAP 理论:分布式系统中的权衡与选择 | 常用组件中的CP和AP

Redis Cluster 没有选择强一致性,而是采用了最终一致性。这是因为在保证高可用性和分区容错性的同时,强一致性会带来性能上的巨大损耗。例如,在主从复制过程中,如果要求每次写操作都必须等待从节点同步完成才能返回成功,会大大增加写操作的延迟。Redis Cluster 通过异步复制的方式来维护数据的一致性。主节点接收写请求后,会异步地将数据复制给从节点。在正常情况下,这种异步复制能够快速地将数据传播到从节点。

2024-12-10 13:50:31 958

原创 【架构师之路】深入了解架构中常见的4种缓存模式及其实现

Cache-Aside(旁路缓存)模式,又叫(懒加载)模式,在这种模式下,缓存的读取和写入由应用程序直接管理。应用程序首先尝试从缓存中读取数据,若缓存未命中,则从数据库中加载数据并将其存储在缓存中;对于更新操作,应用程序直接更新数据库,并更新或删除缓存中的相关数据。Read-Through 模式下,缓存层自动管理数据的读取。当应用程序请求数据时,缓存层会先检查缓存,如果缓存命中则直接返回数据;如果缓存未命中,则缓存层自动从数据库加载数据,并将数据存入缓存。Cache-Aside模式中,

2024-12-09 20:11:15 2087

原创 UDP就一定比TCP快吗?

TCP为了实现可靠性,引入了重传机制、流量控制、滑动窗口、拥塞控制、分段以及乱序重排机制。而UDP则没有实现,因此一般来说TCP比UDP慢。TCP是面向连接的协议,而UDP是无连接的协议。这里的”连接“其实是,操作系统内核在两端代码里维护的一套复杂状态机。大部分项目,会在基于UDP的基础上,模仿TCP,实现不同程度的可靠性机制。比如王者农药用的KCP其实就在基于UDP在应用层里实现了一套重传机制。

2023-05-26 14:01:32 957

原创 Java常用17个工具类方法,提升开发效率的“轮子”,避免重复造轮子

首先出场的是java.util包下的Collections类,该类主要用于操作集合或者返回集合,我个人非常喜欢用它。在工作中经常有对集合排序的需求。看看使用Collections工具是如何实现升序和降序的:执行结果:1.2 获取最大或最小值有时候需要找出集合中的最大值或者最小值,这时可以使用Collections的max和min方法。例如:执行结果:1.3 转换线程安全集合我们都知道,java中的很多集合,比如:ArrayList、LinkedList、HashMap、HashSet等,都是线程

2022-06-29 09:43:18 4869 4

翻译 深入理解 Linux CPU 上下文切换

我们都知道 Linux 是一个多任务操作系统,它支持的任务同时运行的数量远远大于 CPU 的数量。当然,这些任务实际上并不是同时运行的(Single CPU),而是因为系统在短时间内将 CPU 轮流分配给任务,造成了多个任务同时运行的假象。CPU 上下文(CPU Context)在每个任务运行之前,CPU 需要知道在哪里加载和启动任务。这意味着系统需要提前帮助设置 CPU 寄存器和程序计数器。CPU 寄存器是内置于 CPU 中的小型但速度极快的内存。程序计数器用于存储 CPU 正在执行的或下一条要.

2022-05-25 13:30:35 664

原创 C++中的一些复杂的定义和声明

一些复杂的定义和声明(1) void * (* (*fp1) (int)) [10];(2) float (* (*fp2) (int, int, float)) (int);(3) typedef double (* (* (*fp3) ()) [10]) (); fp3 a;(4) int (* (*fp4()) [10]) ();先看一些简单的定义定义一个整型数int a;定义一个指向整型数的指针int *p;定义一个指向指针的指针,它指向的指针指向

2022-02-11 19:39:04 1189

原创 CMake快速入门

前言:CMake是一个跨平台的安装编译工具,可以用简单的语句来描述所有平台的安装(编译过程)。CMake可以说已经成为大部分C++开源项目标配CMake官方文档Cross-platform developmentWhat you will do if you want to add new bar.cpp source file? You have to add it to every tool you use:To keep the environment consistent you

2022-02-10 09:50:34 377

原创 GDB调试器入门教程

前言:GDB(GNU Debugger)是一个用来调试C/C++程序的功能强大的调试器,是Linux系统开发C/C++最常用的调试器, 一般和 gcc(GNU Compiler Collection)配搭使用。要使用 GDB 进行调试,编译程序时要指定-g 或-ggdb 的编译选项。如:gcc –g main.c / gcc –ggdb main.c这样,gcc 就会在生成可执行文件时产生调试信息。-g 用于产生一般的调试信息-ggdb 则用于产生 GDB 特有的调试信息。使用-ggdb

2022-02-10 09:31:13 1205

原创 gcc编译器入门教程

GCC 编译器支持编译 Go、Objective-C,Objective-C ++,Fortran,Ada,D 和 BRIG(HSAIL)等程序;Linux 开发C/C++ 一定要熟悉 GCCVSCode是通过调用GCC编译器来实现C/C++的编译工作的;实际使用中:使用 gcc 指令编译 C 代码使用 g++指令编译 C++ 代码3.1 编译过程预处理-Pre-Processing //.i文件# -E 选项指示编译器仅对输入文件进行预处理g+

2022-02-10 09:18:45 5004

原创 IDEA的5大调试技巧,你学废了吗?

在项目开发的时候我发现很多小伙伴能非常熟练的使用IDEA编写代码,但是对于IDEA调试的技巧掌握的不是很好,只会F7、F8、F9等这些基本调试功能。而像一些复杂的调试场景就无从下手,如:在for循环中调试某个特定值;多线程、Reactor调试;修改变量的运行值等。下面我们就来分场景介绍一下IDEA的调试技巧,看完掌握后调试bug的效率一定大大提升。1. 条件断点循环中经常用到这个技巧,比如:遍历1个大List的过程中,想让断点停在某个特定值。参考上图,在断点的位置,右击断点旁边的小红点,会出来一

2021-08-21 19:28:47 204

翻译 Java直接内存对齐(Memory Alignment)

内存对齐意味将数据类型写入到内存地址时是按照它们大小切割的,内存对齐会带来性能提升,是Java性能提升的黑技术。内存对齐定义(n是2的乘幂):boolean nAligned = (address%n) == 0;如果内存地址是n字节的倍数,那么我们说这n字节是内存对齐的,注意,这里n是2的幂,说白了,内存地址正好放下n字节的倍数,两者相除余数为零,正好整除。内存对齐类型有:类型对齐:某种CPU需要其特定的对齐方式缓存行对齐:正常是64,也有32/128,缓存行是主内存等内存的基本原子单位,有

2021-08-21 19:19:41 920

原创 Linux下的GitLab 的安装及使用

GitLab介绍GitLab:是一个基于Git实现的在线代码仓库托管软件,你可以用gitlab自己搭建一个类似于Github一样的系统,一般用于在企业、学校等内部网络搭建git私服。功能:Gitlab 是一个提供代码托管、提交审核和问题跟踪的代码管理平台。对于软件工程质量管理非常重要。版本:GitLab 分为社区版(CE) 和企业版(EE)。配置:建议CPU2核,内存2G以上。Gitlab的服务构成:Nginx:静态web服务器。gitlab-shell:用于处理Git命令和修改auth

2021-02-24 10:17:55 768

原创 基于Joplin和Joplin Server搭建私有云笔记

我们知道,多端同步功能是笔记工具最重要的功能。只有实现了多端同步,我们才能在工作电脑和手机之间无缝切换笔记体验。Joplin 在同步上做得不错,支持 Dropbox、OneDrive 和 AWS s3(当然国内都没法用),支持 WebDAV 协议,也支持自家的 Joplin Server。本文介绍如何在自己的服务器上搭建 Joplin Server,并配置好 Joplin Desktop 的同步功能。前置条件安装docker创建 Joplin Server 配置文件创建配置文件,~/docke

2021-02-24 09:35:52 17432 4

转载 用户进程缓冲区和内核缓冲区

常常听到有程序员会跟你讨论:“我们在读写文件的时候,系统是有缓存的”。但实际上有一部分人把用户进程缓存区和系统空间缓存区的概念混淆了,包括这两种缓冲区的用法和所要解决的问题,还有其它类似的概念。本文就来区分一下不同的缓冲区概念(主要针对类unix平台)。用户进程和操作系统的关系,首先我用一张图来解释“用户进程和操作系统的关系“   这是一个计算机系统运行时的简化模型,我们把所有运行在操作系统上的进程成为用户进程,它们都运行在用户空间(可以看到用户空间有很多进程)。把操作系统运行的空间成为系统空间为什

2020-12-30 10:32:53 955 1

原创 Intellij IDEA快捷键大全

动作快捷键说明Move Caret to Code Block EndCtrl+] 诸如{}围起来的代码块,使用该快捷键可以快速跳转至代码块的结尾处Move Caret to Code Block StartCtrl+[同上,快速跳至代码块的开始出Complete Current StatementCtrl+Shift+Enter将输入的if、for、函数等等补上{}或者;使代码语句完整Start New LineShift+Enter在当前行的下方开...

2020-12-29 14:44:04 240

原创 5款强大的JVM 性能调优监控工具 !

现实企业级Java应用开发、维护中,有时候我们会碰到下面这些问题:OutOfMemoryError,内存不足内存泄露线程死锁锁争用(Lock Contention)Java进程消耗CPU过高…这些问题在日常开发、维护中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些问题是Java程序员进阶的必备要求。本文将对一些常用的JVM性能调优监控工具进行介绍,希望能起抛砖引玉之用。一、 jps(Java Virtual Machin

2020-10-27 11:01:05 1513

原创 SpringBoot最新版:优雅停机,抢先解读~~ 拒绝kill -9

优雅停机目前Spring Boot已经发展到了2.3.4.RELEASE,伴随着2.3版本的到来,优雅停机机制也更加完善了。目前版本的Spring Boot 优雅停机支持Jetty, Reactor Netty, Tomcat和 Undertow 以及反应式和基于 Servlet 的 web 应用程序都支持优雅停机功能。优雅停机的目的:如果没有优雅停机,服务器此时直接直接关闭(kill -9),那么就会导致当前正在容器内运行的业务直接失败,在某些特殊的场景下产生脏数据。增加了优雅停机配置后:在服

2020-10-26 10:37:46 696

转载 一整套Java线上故障排查技巧,爱了!

线上故障主要会包括 CPU、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如 jstack、jmap 等工具也是不囿于一个方面的问题的,基本上出问题就是 df、free、top 三连,然后依次 jstack、jmap 伺候,具体问题具体分析即可。CPU一般来讲我们首先会排查 CPU 方面的问题。CPU 异常往往还是比较好定位的。原因包括业务逻辑问题(死循环)、频繁 GC 以及上下文切换过多。而最常见的往往是业务逻辑(或者框架逻辑)

2020-10-22 17:32:49 344 1

kali-cookbook PDF大全

Kali Linux是基于Debian的Linux发行版, 设计用于数字取证操作系统。由Offensive Security Ltd维护和资助。最先由Offensive Security的Mati Aharoni和Devon Kearns通过重写BackTrack来完成,BackTrack是他们之前写的用于取证的Linux发行版 。Kali Linux预装了许多渗透测试软件。

2020-07-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除