- 博客(58)
- 收藏
- 关注
原创 TCP 拥塞控制算法 —— 慢启动(Slow Start)笔记
TCP慢启动机制是拥塞控制的核心算法之一,通过逐步探测网络带宽来防止初始阶段发送过快导致拥塞。其工作原理是:初始拥塞窗口(cwnd)设为1MSS,每收到一个ACK确认就增加1MSS,使窗口在每RTT周期内呈指数增长。当cwnd达到慢启动阈值(ssthresh)后,转为线性增长的拥塞避免阶段。若发生丢包,cwnd会重置为1并重新慢启动。该机制能快速利用可用带宽,同时通过动态调整ssthresh来避免网络拥塞,实现高效的网络资源利用。
2025-07-16 21:45:27
248
原创 TCP 三次握手与四次挥手笔记
TCP连接通过三次握手建立(SYN→SYN+ACK→ACK),确保双方收发能力正常并同步序列号,防止历史连接干扰。断开连接采用四次挥手(FIN→ACK→FIN→ACK),因全双工特性需双方独立关闭各自通道,TIME_WAIT状态保证最终ACK可靠到达。三次握手解决失效请求问题,四次挥手确保数据完整传输,TIME_WAIT避免延迟包干扰新连接,是TCP可靠传输的核心机制。
2025-07-16 21:40:50
482
原创 操作系统笔记:进程调度(Process Scheduling)
进程调度是操作系统核心功能,负责在多进程环境中合理分配CPU资源。主要包括长程、中程和短程三类调度,其中短程调度(CPU调度)最为关键。常见调度算法有先来先服务(FCFS)、短作业优先(SJF)、时间片轮转(RR)和优先级调度等,各有优缺点。多级反馈队列(MFQ)因兼具公平性和适应性成为实际常用方案。调度性能指标包括周转时间、响应时间等。面试常考察调度原理、算法比较及实际系统应用(如Linux的CFS)。理解不同调度策略的适用场景是核心要点。
2025-07-15 21:10:54
793
原创 I/O 多路复用详解笔记
I/O多路复用是一种让单线程同时监听多个I/O描述符的技术,适用于高并发服务器场景。主要有三种实现方式:select(效率低,有连接数限制)、poll(无连接数限制但效率仍不高)、epoll(Linux特有,高效支持大规模连接)。epoll采用事件驱动机制,提供水平触发(LT)和边缘触发(ET)两种模式,其中ET模式性能更高但需配合非阻塞I/O。相比select/poll,epoll通过内核维护数据结构,减少遍历开销,显著提升性能。该技术广泛应用于网络服务器、事件驱动编程等场景,是高性能服务开发的核心技术。
2025-07-15 20:59:33
553
原创 Spring的`@Value`注解使用详细说明
Spring的@Value注解主要用于从外部配置文件(如application.properties)或表达式注入属性值到Bean中。它支持注入常量、默认值、SpEL表达式结果、集合类型及复杂数据结构。通过${}引用配置文件属性,#{}使用SpEL表达式,还可注入方法参数和构造函数参数。该注解简化了配置管理,支持灵活的动态值注入,是Spring应用开发中处理外部配置的重要工具。
2025-07-14 22:04:08
395
原创 Dubbo 学习笔记
Dubbo是阿里开源的分布式RPC框架,提供高性能远程调用、服务注册发现、负载均衡、容错等功能。其架构包含Provider、Consumer、Registry等核心组件,支持多种通信协议和序列化方式。通过SpringBoot可以快速搭建服务,开发者只需定义接口、添加注解即可实现远程调用。Dubbo采用SPI机制实现扩展功能,提供随机、轮询等负载均衡策略,以及失败重试等容错策略。常见问题包括服务注册失败、调用缓慢等。建议从官方文档入手,逐步掌握基础概念、实战搭建和源码分析。
2025-07-14 18:29:56
804
原创 Spring 是如何解决循环依赖的
循环依赖是指多个Bean相互注入形成闭环,导致依赖无法解析。Spring通过三级缓存机制解决该问题:一级缓存保存已初始化Bean,二级缓存存放提前曝光的半成品Bean,三级缓存存储生成早期引用的工厂。在字段/Setter注入时,Spring允许未完成的Bean被引用,从而打破循环;但构造器注入无法解决,因需完全初始化才能暴露对象。建议避免循环设计或使用@Lazy延迟注入。核心原理是三级缓存的协作:当检测到循环时,从缓存中获取早期引用完成依赖注入,待Bean初始化完成后再移入一级缓存。 (149字)
2025-07-14 11:17:05
737
原创 Hashtable 与 HashMap 的区别笔记
Java中的Hashtable和HashMap都是实现Map接口的哈希表类,但存在关键差异:Hashtable线程安全但性能较低,不允许空键值,使用过时的Enumerator迭代器;HashMap非线程安全但性能更高,允许空键值,使用现代Iterator,扩容效率更好。Hashtable继承自Dictionary类,而HashMap直接实现Map接口。现代开发中更推荐使用HashMap,线程安全场景可用ConcurrentHashMap替代Hashtable。
2025-07-13 20:18:14
622
原创 ConcurrentHashMap笔记
ConcurrentHashMap是Java中高效的线程安全哈希表实现,位于java.util.concurrent包。它采用分段锁机制,允许多线程并发访问不同段的数据,避免了传统Hashtable的全表锁性能瓶颈。JDK7使用Segment数组实现分段锁,而JDK8优化为无Segment结构,引入CAS操作和红黑树优化,进一步提升并发性能。主要特点包括非阻塞读取、高效并发更新和弱一致性迭代器。相比HashMap和Hashtable,它在高并发环境下性能更优,特别适合频繁读写场景。虽然写操作仍受锁影响,但整
2025-07-13 20:14:54
723
原创 数据库索引创建与使用详细笔记
索引是数据库中的高效查询结构,常见类型包括B-Tree索引。不同数据类型对应不同索引应用:字符串(VARCHAR)适合前缀索引和模糊查询;整数(INT)适用于等值和范围查询;浮点数(FLOAT)常用于数值范围筛选;日期(DATE)支持时间区间检索;布尔(BOOLEAN)和枚举(ENUM)适合等值查询,而二进制(BLOB)通常不建索引。每种索引类型均有对应的SQL创建语句和典型查询示例,合理使用可显著提升数据库性能。
2025-07-12 18:13:46
438
原创 Redis 基本操作笔记
Redis是一款高性能键值存储系统,支持字符串、哈希、列表等丰富数据类型,常用作数据库、缓存和消息中间件。本文介绍了Redis的核心数据类型及操作命令,包括字符串(SET/GET)、哈希(HSET/HGET)、列表(LPUSH/LPOP)等基本操作,以及键操作、事务和持久化等高级功能。同时涵盖发布订阅、Lua脚本等特性,最后提供了性能调优建议。Redis凭借其高并发处理能力和数据持久化特性,成为提升应用性能的理想选择。
2025-07-12 18:07:50
409
原创 线程通信与进程通信的区别笔记
线程与进程通信对比:线程通信通过共享内存实现(如volatile、wait/notify),速度快但需同步机制;进程通信需IPC(如Socket、管道),隔离性好但开销大。线程适合高并发任务(Java线程池),进程适用于分布式系统(微服务)。线程崩溃影响整个进程,进程间独立安全。典型场景:线程通信用于单服务多任务协同,进程通信用于跨模块/跨平台交互。代码示例:线程用共享变量控制停止,进程用Socket传输数据。核心差异体现在内存共享、性能开销和隔离性三方面。
2025-07-11 17:33:10
919
原创 Java 中线程通信方式笔记
本文介绍了Java中多种线程通信方式及其适用场景。主要包括:wait/notify基础同步机制、join线程串行、volatile状态可见性、LockSupport无锁阻塞、Condition多条件控制、BlockingQueue生产者消费者模式,以及CountDownLatch、CyclicBarrier、Semaphore等并发工具,最后还介绍了Future和CompletableFuture异步编程方式。每种方法都有其特点,如是否需要阻塞、是否配合锁使用等,可根据具体需求选择合适的通信机制来实现线程间
2025-07-11 17:27:04
437
原创 G1 垃圾回收算法详解
G1垃圾回收器是JDK 9及以后版本的默认GC,专为多核大内存服务器设计,兼顾吞吐量和低延迟。它将堆划分为多个Region,采用分阶段回收策略(初始标记、并发标记、最终标记、筛选回收),通过混合回收减少Full GC。相比传统GC,G1提供可预测的停顿时间(可配置MaxGCPauseMillis),但处理大对象时仍有不足。调优建议包括设置合理堆大小、监控关键指标等。G1在响应性和吞吐量间取得平衡,是CMS的理想替代方案。
2025-07-11 17:10:52
705
原创 在 Mac 上安装 Java 和 IntelliJ IDEA(完整笔记)
本文详细介绍了在macOS上配置Java开发环境的完整步骤。首先通过终端检查Java是否安装,然后提供两种JDK安装方法(推荐使用Homebrew安装OpenJDK)。接着指导设置JAVA_HOME环境变量,并介绍IntelliJ IDEA的两种安装方式。文章还包含在IDEA中配置JDK路径的说明,以及验证环境和创建简单Java程序的测试方法。最后附有相关工具的官网参考链接,帮助开发者快速搭建macOS下的Java开发环境。
2025-07-10 21:06:40
666
原创 在 Mac 上使用 Git 拉取项目:完整指南
macOS Git使用指南摘要 本文介绍了在macOS上使用Git的完整流程:1)安装Git(推荐通过Homebrew);2)配置用户名和邮箱;3)生成SSH密钥并添加到Git平台;4)克隆项目(推荐SSH方式);5)常见问题排查。重点讲解了SSH密钥的生成和配置方法,包括启动SSH代理、添加密钥到钥匙链等macOS特有操作。还提供了GitHub/GitLab的SSH密钥添加指引,以及"找不到git命令"、"Permission denied"等常见问题的解决方案。全
2025-07-10 21:03:02
635
原创 linux操作命令笔记
本文总结了Linux常用命令速查表,涵盖八大类操作:1) 文件和目录管理(ls、cd、cp等基础命令);2) 文件内容查看与编辑(cat、vim等);3) 搜索命令(find、grep);4) 权限与用户管理(chmod、useradd);5) 压缩解压(tar、zip);6) 进程管理(ps、kill);7) 网络操作(ping、ssh);8) 磁盘管理(df、du)。每个命令均配有简要说明和典型用法示例,是Linux系统操作的实用参考手册。
2025-07-09 17:43:31
561
原创 Java 17 新特性笔记
Java 17是2021年9月发布的长期支持版本(LTS),主要特性包括:1)语言增强如封闭类(Sealed Classes)、switch模式匹配预览和正式化的instanceof模式匹配;2)API改进如强封装内部API、新RandomGenerator接口、Foreign Memory API和Vector API(均为孵化);3)移除Applet等旧特性;4)JVM性能优化如ZGC和Shenandoah GC稳定化。该版本整合了Java 12-16的多项特性,在安全性、性能和开发效率方面均有提升。作
2025-07-09 17:37:07
801
原创 Java 8 相对于 Java 7 的新增特性笔记
Java 8是2014年发布的革命性版本,引入了多项重要特性:1)Lambda表达式简化函数式编程;2)函数式接口与方法引用;3)Stream API支持集合函数式操作;4)接口默认方法;5)Optional类避免空指针;6)新日期时间API;7)重复注解与类型注解;8)Nashorn JavaScript引擎;9)并发与集合类优化。这些改进使Java更现代化,提升开发效率与代码可读性。
2025-07-09 17:33:35
337
原创 记录一下ubuntu22.02可以ping通,但是telnet不行
摘要:Ubuntu 22.04系统出现ping通但telnet连接失败的问题,可能由于目标端口未监听、防火墙限制、服务未运行或IP绑定错误导致。排查步骤包括:检查网络连通性(ping/traceroute)、验证端口监听状态(ss -tuln)、配置防火墙(ufw)、确保服务运行(systemctl)、调整服务绑定IP(如0.0.0.0),以及检查Telnet客户端安装。最终需综合判断服务、防火墙及网络配置,并建议使用nc/curl等工具替代telnet测试TCP端口。
2025-07-07 23:51:49
412
原创 一条 SQL 语句的内部执行流程详解(MySQL为例)
MySQL查询执行流程详解:从客户端SQL提交到结果返回,需经历7个关键阶段。首先建立连接并进行权限验证(1),然后通过词法/语法分析生成抽象语法树(2),预处理阶段验证表字段并构建逻辑查询(3)。优化器基于成本估算选择最优执行计划(4),执行器调用存储引擎接口完成数据访问(5),InnoDB通过缓冲池和B+树索引定位记录(6)。最终结果经网络协议返回客户端(7)。整个过程涉及索引优化、执行计划选择等核心机制,EXPLAIN命令可查看具体执行策略。
2025-07-06 20:02:14
920
2
原创 Java 双亲委派机制笔记
双亲委派机制是Java类加载的核心机制,它通过层级委托方式确保类加载安全性和一致性。该机制要求类加载器先委托父加载器加载类,只有父加载器无法完成时才自行加载。Java类加载器分为启动类、扩展类、应用类和自定义类加载器,共同构成树形结构。双亲委派的优点包括避免类重复加载、保障安全性和类型一致性。但在SPI、Web容器等场景下需要打破该机制。类隔离由"类名+加载器"共同决定,不同加载器加载的相同类被视为不同类型。理解双亲委派机制对掌握Java类加载原理至关重要。
2025-07-06 19:43:33
956
原创 Java NIO 模型笔记
本文介绍了Java NIO(New I/O)的核心概念与工作机制。主要内容包括:NIO与BIO的对比,NIO三大核心组件(Channel、Buffer、Selector)的详解,以及NIO的工作流程图和示例代码。NIO采用非阻塞和选择器机制,适合高并发服务器开发,但编程复杂度较高。文章还提及基于NIO的Netty框架,建议实际开发中使用Netty等高层封装框架。全文系统性地阐述了NIO的特性、优缺点及适用场景,为构建高性能网络应用提供了技术参考。
2025-07-06 10:39:30
961
1
原创 Redis Cluster 与 Sentinel 笔记
Redis 提供两种高可用方案:Cluster 和 Sentinel。Redis Cluster 采用分布式架构,通过16384个槽位实现数据分片,支持自动故障转移和横向扩展,适合大规模部署。Redis Sentinel 专注于主从架构的故障检测和自动切换,部署简单但无法分片。Cluster 适合分布式场景,但不支持跨节点事务;Sentinel 适合小型高可用需求。两者均支持自动故障转移,但 Cluster 复杂度更高,需专用客户端支持。选择方案需根据业务规模和数据扩展需求权衡。
2025-07-05 16:59:31
930
原创 Java 创建对象过程 & JVM 内存分配并发安全笔记
Java对象创建过程详解:1)类加载检查确保类已加载;2)内存分配采用指针碰撞或空闲列表策略,并使用CAS/TLAB保证并发安全;3)初始化包括空间清零、设置对象头和调用构造方法。对象内存结构包含对象头、实例数据和对齐填充。JVM通过逃逸分析优化可能将对象分配在栈上。常见创建方式包括new、反射和clone等,各具特点。面试常考察创建步骤、并发安全机制和分配位置优化等核心问题。
2025-07-05 16:52:30
1018
原创 Ubuntu 22.04 修改默认 Python 版本为 Python3 笔记
本文介绍了在Ubuntu 22.04中将默认python命令从Python 2切换到Python 3的方法。主要内容包括:通过update-alternatives工具添加Python3为候选项并设为默认;验证切换结果;处理pip的对应配置;以及恢复Python2的方法。文中强调使用update-alternatives的安全性和必要性,同时建议在项目开发中使用虚拟环境。该操作解决了现代开发工具依赖Python3而系统默认指向Python2的兼容性问题。
2025-07-05 16:45:46
444
原创 Java 并发核心:AQS(AbstractQueuedSynchronizer) 详解
AQS(AbstractQueuedSynchronizer)是Java并发包的核心同步框架,用于构建锁和同步器。它通过FIFO队列管理线程状态,提供独占和共享两种模式。核心包括volatile的state变量、CLH队列和模板方法(tryAcquire/tryRelease)。工作流程涉及获取锁(失败入队阻塞)、释放锁(唤醒后续线程)。典型应用包括ReentrantLock、Semaphore等。AQS封装了底层线程调度,具有高复用性,但需注意死锁和性能问题。ReentrantLock通过继承AQS实现公
2025-07-04 22:46:33
1074
原创 Java 中的锁机制详解
Java 提供了丰富的锁机制实现多线程并发控制,主要包括内置锁synchronized和JUC显式锁。锁的分类维度包括实现层面、可重入性、公平性、读写粒度等。常见锁类型有:synchronized(简单同步)、ReentrantLock(高级控制)、ReadWriteLock(读多写少)、StampedLock(高性能读写)以及乐观锁(CAS)。JVM会自动进行锁升级(偏向锁→轻量级→重量级)。选型需考虑线程竞争程度、读写比例、功能需求(如公平性、中断响应)和性能要求,合理使用锁能有效避免死锁并优化并发性能
2025-07-04 22:39:03
643
原创 Ubuntu 22.04 + MySQL 8 无密码登录问题与 root 密码重置指南
摘要: 在Ubuntu系统安装MySQL 8后可能因未提示root初始密码导致无法登录。传统跳过权限表修改密码的方法可能残留隐患。本文提供三步修复方案: 跳过验证启动:通过--skip-grant-tables进入无密码模式; 重建root账户:彻底删除旧root用户并创建新账户,设置强密码; 恢复配置验证:移除临时配置,重启服务确保密码生效。关键步骤包括FLUSH PRIVILEGES刷新权限表,并建议检查配置文件和密码策略。此方法可解决权限表异常问题,适用于密码丢失或损坏场景。
2025-07-04 22:30:34
478
原创 redis缓存三大问题分析与解决方案
Redis缓存三大问题分析与解决方案 摘要:缓存技术(如Redis)能提升系统性能,但会带来三大核心问题:缓存穿透(请求不存在数据)、缓存击穿(热点key失效)、缓存雪崩(大量key同时过期)。针对这些问题,文章提出了具体解决方案:缓存穿透可采用空值缓存、参数校验或布隆过滤器;缓存击穿建议使用互斥锁或逻辑过期策略;缓存雪崩可通过随机TTL、多级缓存和限流降级来应对。最后强调实战中要区分冷热数据、设置合理TTL,并建立统一缓存组件处理这些问题。
2025-07-03 22:32:04
973
原创 项目中数据库表设计规范与实践(含案例)
数据库表设计核心原则:单一职责、规范命名、原子字段、合适数据类型、适度冗余、逻辑删除。遵循高内聚低耦合,兼顾性能与扩展性。秒杀系统建议用逻辑约束代替外键,避免性能损耗。典型表结构包括用户表、商品表、订单表等,需注意索引优化和状态管理。良好设计应具备清晰结构、统一命名、适度冗余等特点,并配套完整文档说明。
2025-07-03 22:18:34
1285
原创 服务器部署流程笔记(Docker + 前后端项目)
本文介绍了在CentOS系统上使用Docker部署前后端项目的完整流程。主要内容包括:1)卸载旧版Docker并配置阿里云Yum源;2)安装Docker并设置镜像加速器;3)创建Docker网络并安装MySQL、Redis、RabbitMQ等基础组件容器;4)前端项目打包及Nginx配置(含Dockerfile示例);5)SpringBoot后端项目的Docker部署;6)可选的使用Docker Compose编排服务。文章提供了详细的命令示例和配置文件模板,涵盖了从环境准备到应用部署的全过程,适合作为服务
2025-07-03 09:06:15
241
原创 HTTPS详解:原理 + 加解密过程 + 面试问答
HTTP与HTTPS的核心区别在于安全性:HTTP明文传输(80端口),HTTPS通过TLS加密(443端口)。HTTPS实现三大安全目标:机密性(对称加密)、身份认证(数字证书)、完整性校验(摘要算法)。TLS握手采用混合加密:非对称加密交换密钥,对称加密传输数据。TLS 1.3比1.2更快更安全(0-RTT、强加密)。数字证书由CA签发,浏览器验证防止中间人攻击。HTTPS适用于所有需保密的场景(登录、支付等),是当前网络安全的基础保障。
2025-07-02 18:57:10
908
原创 Redis 持久化机制
Redis持久化机制详解:RDB、AOF与混合模式 Redis提供了三种持久化方式保障数据安全:RDB快照、AOF日志和混合持久化。RDB通过定时全量备份内存数据,适合备份场景,但可能丢失最新数据;AOF记录每条写命令,数据更完整但性能开销较大;混合模式(Redis 4.0+默认)结合了两者优势,在AOF文件中嵌入RDB快照,既保证恢复速度又保持数据完整性。实际应用中,小型系统可单独使用RDB,高可靠系统推荐AOF,多数场景建议开启混合模式。持久化机制可根据业务需求在redis.conf中灵活配置。
2025-07-02 17:05:43
1018
原创 MySQL 日志机制 + 二阶段提交详解
MySQL日志系统解析:InnoDB引擎的核心日志包括Redo Log(物理日志,保证事务持久性)、Undo Log(逻辑日志,实现回滚和MVCC)以及Server层的Binlog(逻辑日志,用于主从复制)。通过二阶段提交机制(2PC)确保Redo Log与Binlog的一致性,防止数据丢失。Redo Log采用WAL机制先于数据页刷盘,Undo Log记录修改前值支持事务回滚,Binlog则提供数据恢复和复制功能。三种日志各司其职,共同保障MySQL的事务特性和数据可靠性,其中二阶段提交是解决跨层日志一致
2025-07-02 16:52:56
769
原创 Java ArrayList 扩容机制
ArrayList是Java中基于数组实现的可变长度列表,支持随机访问和动态扩容。其底层使用Object[]数组存储元素,默认初始为空数组,首次添加元素时扩容至10。扩容机制采用1.5倍增长策略,通过Arrays.copyOf()复制数组,时间复杂度为O(n)。为避免性能损耗,建议预估容量并指定初始大小或提前调用ensureCapacity()。最大容量限制为Integer.MAX_VALUE-8。与默认构造相比,指定初始容量可显著提升性能。
2025-07-01 17:01:21
378
原创 java 线程池参数选择原则
本文详细介绍了Java线程池ThreadPoolExecutor的核心参数配置方法。重点解析了corePoolSize、maximumPoolSize、keepAliveTime、workQueue、threadFactory和handler等参数的适用场景与选择原则,针对CPU密集型和IO密集型任务给出了具体配置建议。文章强调应避免使用无界队列,推荐采用有界队列配合合理的拒绝策略,并提供了典型场景的参数配置表和一个完整的线程池构建示例。最后通过流程图总结了线程池的任务处理逻辑,帮助开发者构建高效稳定的线程
2025-07-01 16:27:40
1104
原创 Spring AI 向量数据库详解与 RAG 简单实战项目
Spring AI 提供了统一的 VectorStore 接口,支持多种向量数据库(Redis、PGVector、Milvus、Qdrant等),用于构建RAG(检索增强生成)系统。通过 EmbeddingClient 将文本转为语义向量存储,支持近似最近邻搜索(ANN)进行语义检索。示例展示了PGVector的工作流程,包括文档向量化存储、相似度查询及RAG问答系统的实现方法。项目采用分层架构,包含配置、服务、控制器等模块,并提供了数据库选择建议和可视化工具推荐,帮助开发者快速搭建企业级智能问答系统。
2025-07-01 11:22:31
791
原创 大语言模型(LLM)笔记
摘要 大语言模型(LLM)是基于Transformer架构的海量文本训练模型,通过预测下一个token展现类人智能。其核心为Transformer的自注意力机制,训练采用预训练+微调范式。三大主流应用包括: 1)RAG(检索增强生成):结合外部知识库提升回答准确性; 2)Agent:赋予模型规划决策能力,实现多工具调用; 3)MCP(模块化提示):结构化拆解复杂任务。 LangChain(Python)与Spring AI(Java)是构建LLM应用的主流框架,前者侧重灵活工作流编排,后者强调Spring生
2025-06-30 21:39:25
1234
原创 Spring 中 Bean 的生命周期
Spring Bean生命周期是指Bean从创建到销毁的完整过程,主要包括实例化、属性注入、初始化前处理、初始化、初始化后处理、就绪可用和销毁阶段。关键流程包括:通过构造器实例化、依赖注入属性、Aware接口回调感知容器信息、BeanPostProcessor扩展点处理初始化前后的逻辑(如AOP代理)、@PostConstruct或InitializingBean执行初始化逻辑,以及容器关闭时通过@PreDestroy或DisposableBean释放资源。生命周期钩子允许开发者在各阶段插入自定义逻辑,实现
2025-06-30 19:04:28
716
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人