- 博客(29)
- 收藏
- 关注
原创 进程和线程
本文深入分析了Linux系统中进程和线程的实现机制。在Linux内核中,进程和线程都通过task_struct结构体表示,共享大部分相同特性。文章详细解析了task_struct的关键字段,包括状态管理、进程ID、调度优先级、地址空间、文件系统信息等核心组成部分。特别指出线程与进程的主要区别在于是否拥有独立的地址空间(mm_struct),线程共享父进程的地址空间。此外,还探讨了进程创建机制和命名空间隔离技术。通过Nginx创建worker进程的实例,展示了fork系统调用的内部实现原理。全文揭示了Linu
2025-12-10 09:25:14
920
原创 Spring循环依赖
Spring通过三级缓存机制解决循环依赖问题:一级缓存存储完整Bean,二级缓存存储半成品Bean,三级缓存存储ObjectFactory对象工厂。当Bean A依赖Bean B时,会先创建A的半成品放入二级缓存,然后创建B时通过缓存获取A的引用,从而避免无限循环。对于代理对象的情况,三级缓存通过ObjectFactory处理AOP逻辑。此外,@Lazy注解可通过延迟加载和代理对象间接解决循环依赖,但不推荐过度依赖。SpringBoot 2.6.x后默认禁止循环依赖,建议通过代码重构消除循环引用,或在配置中
2025-12-09 12:45:54
739
原创 IOC和AOP详解
IOC(控制反转)是一种将对象创建和管理权交给容器的设计思想,解决了对象间高耦合问题,其实现方式是DI(依赖注入)。AOP(面向切面编程)则通过切面将横切关注点(如日志、事务)与核心业务逻辑分离,提供五种通知类型(Before/After/Around等)实现功能增强。两者并非Spring独创,但Spring对其进行了优秀实现。IOC通过容器管理对象降低耦合,AOP则通过动态代理等技术实现代码复用和解耦,共同提升了代码的可维护性和扩展性。
2025-12-08 16:35:51
687
原创 TCP三次握手
本文详细解析了TCP协议的三次握手过程及其内核实现原理。首先介绍了TCP报文格式的关键字段,包括端口号、序列号、确认应答号等核心要素。然后重点阐述了三次握手的具体流程:客户端发送SYN报文,服务器回应SYN-ACK,最后客户端发送ACK确认。文章深入分析了内核层面的实现机制,包括socket创建、bind函数绑定端口、listen函数初始化连接队列、connect函数触发握手等关键操作。最后总结了面试中关于三次握手的标准回答要点,包括状态转换、队列管理和定时器机制等核心内容。通过本文可以全面理解TCP连接建
2025-12-07 23:18:44
1168
1
原创 Elasticsearch倒排索引
Elasticsearch是基于Lucene的搜索引擎,提供简单的RESTful API。其核心是倒排索引,实现从词条到文档的快速检索。Lucene通过FST压缩索引,并使用FOR编码和Roaring Bitmaps技术高效处理文档ID列表,平衡存储和查询性能,支持快速集合运算。
2025-11-28 14:47:22
887
原创 spring循环依赖三级缓存
Spring三级缓存机制是解决循环依赖的关键设计。一级缓存存放完整Bean,二级缓存存放实例化但未初始化的半成品Bean,三级缓存存放ObjectFactory工厂对象。通过A->B->A循环依赖案例演示:当B需要A时,通过三级缓存的工厂获取A的早期引用(处理AOP代理),并将其升级到二级缓存,从而打破死锁。三级缓存的必要性在于处理AOP代理场景——仅用二级缓存会导致B持有原始对象而非代理对象,使事务等切面功能失效。工厂模式延迟了代理对象的生成时机,确保依赖注入的正确性。
2025-11-26 15:18:30
512
原创 高性能无锁队列Disruptor
Disruptor是由LMAX公司开发的一款高性能无锁并发框架,其核心设计目标是为高吞吐量和低延迟场景提供极致的性能解决方案。该框架基于环形队列(RingBuffer)数据结构,本质上是一个支持生产者-消费者模式的无锁队列,特别适用于金融交易系统、实时数据处理和游戏服务器等对并发性能和实时性要求极高的领域。
2025-10-04 01:13:21
596
原创 史上最全Java Stream API实战指南:从零玩转数据流处理!
Java Stream API 是 Java 8 引入的革命性数据处理工具,支持声明式编程和函数式操作。教程详细介绍了流的创建方式、中间操作(filter、map、sorted等)、终端操作(collect、reduce、forEach等),以及并行流的使用技巧。通过实际业务场景示例,展示如何简化集合处理、提高代码可读性和性能,帮助开发者告别繁琐循环,编写更优雅高效的Java代码。
2025-09-23 16:24:59
979
原创 React基础语法
JSX是JavaScript和XML(HTML)的缩写,表示在JS代码中编写HTML模板结构,是React构建UI的方式return ({message}语法:事件绑定的位置改造成箭头函数的写法,再执行clickHandler实际处理业务函数的时候传递实参console.log('button按钮点击了', name);return (注意:不能直接写函数调用,这里事件绑定需要一个函数引用语法:在事件绑定位置传递事件实参e的自定义参数,clickHandle中声明形参,注意顺序对应。
2024-10-28 16:09:52
1770
原创 Docker
Docker本身包含一个后台服务,我们可以利用Docker命令告诉Docker服务,帮助我们快速部署指定的应用。Docker服务部署应用时,首先要去搜索并下载应用对应的镜像,然后根据镜像创建并允许容器,应用就部署完成了。
2024-10-01 09:42:34
1896
原创 若依框架使用教程
低代码诞生的目的是将可工作通过,将开发人员从没有技术含量的开发中解放出来,让其专注于更有价值的开发工作例如:数据库设计、流程设计、API核心开发、业务逻辑开发等工作。所以,低代码开发平台可以提高开发效率常见产品有:明道云Noohle(怒吼)简道云若依/RuoYijeecg-boot人人开源 / renren-fast。
2024-09-30 13:32:23
3149
原创 vue3 + Ant Design Vue: ResizeObserver loop completed with undelivered notifications.解决方法
在使用 Vue3 结合 Ant Design Vue 的项目中遇到 “ResizeObserver loop completed with undelivered notifications.” 的报错。
2024-07-13 12:43:01
971
原创 org.springframework.jdbc.BadSqlGrammarException异常
在执行定时任务更新电子书统计信息时,遇到了异常,具体表现为 SQL 函数count被错误地解析为自定义函数wiki.count,导致数据库更新操作失败。
2024-07-06 15:28:27
1547
原创 使用MyBatis Generator自动代码生成器简化Java持久层开发
在Web开发中,数据访问层(DAO层)的编码工作往往重复且繁琐,尤其是在处理数据库表与Java对象之间的映射时。MyBatis Generator是一款强大的代码生成工具,它能自动生成DAO接口、Mapper XML文件和实体类,极大地提升了开发效率。本文将详细介绍如何在Maven项目中集成MyBatis Generator,并通过一个示例演示其配置过程。
2024-06-23 20:22:24
717
原创 牛客 括号区间匹配
这道题目要求我们找出在给定的由括号组成的字符串中,最少需要插入多少个括号才能让所有括号正确配对。我们可以使用动态规划的方法来解决这个问题。动态规划的状态定义为dp[i][j]表示从位置i到位置j的子串需要插入的最少括号数。状态转移方程基于两种情况:如果s[i]和s[j]能配对(即它们分别是左右括号),则dp[i][j]取决于从i+1到j-1的子串所需的最少括号数。如果s[i]和s[j]不能直接配对,则我们需要考虑将子串分割成更小的部分,并计算每部分所需的最少括号数。
2024-06-21 23:45:00
964
原创 P4170 [CQOI2007] 涂色
对于这道题,我们采用动态规划的策略来解决。问题的关键在于找到如何将大的子问题分解为更小的子问题,并且定义状态转移方程。具体来说,我们可以定义dp[i][j]表示将第i到第j个位置涂色所需要的最小次数。如果s[i]==s[j],那么dp[i][j]可以等于dp[i][j-1],因为最后一步涂j位置的颜色时,可以直接覆盖之前在j-1位置的颜色;否则,我们需要考虑所有可能的分割方式,即在i和j之间找到一个k,使得dp[i][j]等于dp[i][k]+dp[k+1][j]的最小值。
2024-06-21 17:37:34
828
原创 如何在Spring Boot中实现图片上传至本地和阿里云OSS
在开发Web应用时,处理文件上传是常见的需求之一,尤其是在涉及到图片、视频等多媒体数据时。本文将详细介绍如何使用Spring Boot实现图片上传至本地服务器以及阿里云OSS存储服务,并提供完整的代码示例。
2024-06-15 11:43:17
1342
原创 实现JWT认证与授权的Spring Boot项目详解
我们将详细介绍如何使用JWT(JSON Web Tokens)结合Spring Boot框架实现用户认证和授权系统。此方案将包括用户注册、登录以及通过JWT令牌进行后续请求的身份验证过程。我们将从引入必要的依赖开始,然后逐步构建项目的各个部分,包括JWT生成类、Controller、Service、ServiceImpl、Mapper以及异常处理机制。
2024-06-11 11:21:44
527
原创 SpringBoot启动报错LibraryNotFoundError,Can‘t load library:tcnative-1.dll
SpringBoot启动报错LibraryNotFoundError,Can't load library:tcnative-1.dll。在这个项目中,我们正在使用SpringBoot和Tomcat来开发一个Web应用。我们的应用需要频繁地与客户端进行数据交换,因此我们选择了使用Tomcat的APR(Apache Portable Runtime)来提高性能。然而,当我们尝试运行我们的应用时,我们遇到了一个问题:我们的应用无法找到Tomcat需要的本地库。
2024-04-19 13:36:51
2239
1
原创 Python零基础到精通
Python 是一种解释型、交互式、面向对象的编程语言。其语法简单明了,结构紧凑,适用于从小型脚本到大型项目的开发。为什么要学 Python?易读性: Python 代码的清晰度是其核心优势,大大提高代码的可维护性。多用途: 无论是 Web 开发、数据分析、人工智能还是网络编程,Python 都能胜任。强大的生态: 有数以万计的库和框架可供选择。
2024-04-06 18:12:09
781
2
原创 JDK21新特性
JDK 21 于 2023 年 9 月 19 日正式发布。Oracle 提供GPL 下的生产就绪二进制文件;其他供应商的二进制文件也将很快推出。Spring Boot 3.x 版本最低支持的 JDK 版本为 JDK 17,也就是说如果你还想用 JDK8的话,那能用的最高 Spring Boot 版本为 2.7。Dubbo 在官方说明中也已经将 JDK 17 作为推荐的版本了。其他的几乎你所能用到的一些开源框架或工具包都早已支持最起码 JDK 17 了。JDK 8 不知道还能坚持多久。
2023-09-23 15:36:58
2420
原创 Tomcat安装及基本使用
Web服务器是一种应用程序(软件),它封装了对HTTP协议的操作,使得开发人员无需直接操作协议,从而简化了Web开发。其主要功能是提供网上信息浏览服务。Web服务器安装在服务器端,我们可以将自己编写的Web项目部署到Web Tomcat服务器软件中。一旦Web服务器软件启动,部署在其中的页面就可以通过浏览器直接访问。准备静态资源下载安装Web服务器软件将静态资源部署到Web服务器上启动Web服务器,使用浏览器访问对应的资源在本文中,我们将使用Apache下的Tomcat软件进行演示。
2023-08-28 22:34:13
997
原创 Redis键值设计
Key的最佳实践固定格式:[业务名]:[数据名]:[id]足够简短:不超过44字节不包含特殊字符Value的最佳实践:合理的拆分数据,拒绝BigKey选择合适数据结构Hash结构的entry数量不要超过1000设置合理的超时时间。
2023-08-07 10:24:36
793
原创 Redis两种持久化方案RDB持久化和AOF持久化
在这种配置下,Redis服务器会根据你的设置同时生成RDB文件和AOF文件。当Redis服务器重启时,它会首先加载AOF文件来还原数据,如果AOF文件不存在或损坏,则会尝试加载RDB文件。因为是记录命令,AOF文件会比RDB文件大的多。要在Redis中启用RDB和AOF持久化,你可以在Redis的配置文件中进行相应的设置。使用RDB和AOF持久化可以提供更好的数据保护和恢复能力,但也会增加服务器的磁盘占用和IO负载。Redis处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件。
2023-08-03 09:07:39
359
原创 Git 的正确使用姿势与最佳实践:团队协作和版本控制的最佳实践
Git是一款非常流行的版本控制系统,它能够帮助团队协作开发,管理代码的版本,以及追踪代码变更历史。在这篇博客中,我们将介绍Git的正确使用姿势和最佳实践,以便您可以更好地使用Git来管理您的代码。
2023-08-02 23:16:07
425
原创 Lua脚本解决多条命令原子性问题
在Redis中,我们可以使用Lua脚本来编写多条命令,以确保这些命令的原子性执行。Lua是一种简单易学的编程语言,下面将介绍如何使用Redis提供的调用函数来操作Redis并保证原子性。通过编写Lua脚本,我们可以在Redis中执行多条命令,并确保这些命令的原子性执行。这对于Java开发人员来说并不需要精通Lua语言,只需要了解Lua脚本的基本语法和Redis提供的调用函数即可。编写好Lua脚本后,我们需要使用Redis命令来调用它。如果Lua脚本中的键和值不是固定的,可以将它们作为参数传递给脚本。
2023-07-27 09:48:23
998
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅