- 博客(52)
- 收藏
- 关注
原创 Elasticsearch
Elasticsearch(简称 ES)是一款开源的分布式搜索引擎,基于 Lucene 构建,专注于实时搜索、数据分析和存储,广泛应用于日志分析、电商搜索、监控告警等场景。
2025-09-01 20:18:38
1032
原创 RocketMQ
RocketMQ 是一款由阿里巴巴自主研发的分布式消息中间件,最初用于解决电商领域的高并发、高可用消息传递问题,后来捐献给 Apache 软件基金会并成为顶级项目。它具有高性能、高可靠、低延迟等特点,广泛应用于金融、电商、物流等场景。
2025-09-01 17:01:07
663
原创 Redis的持久化
优点缺点1. 文件小(二进制压缩),备份方便(比如每天凌晨用RDB做全量备份);2. 恢复快(直接把整个文件读进内存,不用执行命令);3. 存储效率高1.丢数据风险高:如果两次快照之间宕机(比如设了1小时拍一次,59分时宕机),这59分钟的数据全丢;2. 数据量大时,fork子进程和写文件会耗CPU/内存,影响服务性能;3. 不同Redis版本的RDB文件可能不兼容(比如6.x的RDB不能直接给5.x用)优点缺点1. 数据安全高(everysec策略最多丢1秒数据);
2025-08-31 17:17:51
1213
原创 Redis
Redis 是高性能开源键值型 NOSQL 数据库数据结构丰富:支持字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)等,适配多样场景。内存存储:数据默认存在内存,读写超高速(单节点 QPS 万级以上),也支持持久化(RDB/AOF 落盘防丢失)。功能扩展简单说,Redis 是为“快”而生的数据库工具,用灵活数据结构+内存存储,解决高并发场景下的性能、效率问题。在实际项目中,可以根据具体的业务需求和数据类型来选择使用还是。
2025-08-26 09:04:09
825
原创 TCP协议大全
TCP(传输控制协议)是传输层的重要协议,具有面向连接(传输前需先建立连接,是发送方和接收方的点对点一对一连接)、基于字节流(以字节流形式传输数据,传输中会将字节流组织成不同大小的报文段)、可靠的特性。超时重传是"保底机制",无论其他机制是否生效,超时后一定会重传快速重传是"效率优化",通过重复ACK提前发现丢失,不用等超时SACK是"精确制导",让重传更精准,避免无效重传。
2025-08-22 17:01:32
954
原创 jvm三色标记
简单说,漏标就是“回收器没跟上用户线程的修改”导致的误判,解决方案要么是“修改时主动提醒”,要么是“让已处理的对象重新检查”,要么是“按初始状态为准”,最终目的都是确保有用的东西不会被漏掉~:清洁工(回收器)和你(用户线程)同时在房间里活动,你突然挪动了一个有用的东西,清洁工没察觉,最后把它当垃圾扔了。:清洁工觉得“钱包既不在已处理的书包里,也不在待处理的清单上”,最后把钱包当垃圾扔了——这就是漏标。:并发回收时,用户线程修改对象引用,导致本应被保留的活跃对象未被标记,最终被误判为垃圾。
2025-08-20 20:10:18
947
原创 JVM垃圾回收器
引用计数算法:像物品上的 “使用计数器”,简单但解决不了 “互相勾连” 的问题可达性分析算法:像 “家族关系网”,从根节点追溯,能准确判断对象是否还有用,是 JVM 实际采用的方法现在主流 JVM(如 HotSpot)都用可达性分析算法,因为它能更准确地识别 “真正没用的对象”。在Java中,有四种引用类型,分别是强引用(Strong Reference)软引用(Soft Reference)弱引用(Weak Reference)和虚引用(Phantom Reference)。
2025-08-20 20:08:15
661
原创 HTTP的协议
客户端与服务器建立连接后,保持连接状态,可在同一连接上发送多次请求并接收响应,直到超时或主动关闭。客户端与服务器每次请求都建立新连接,请求处理完成后立即关闭连接。在长连接基础上,客户端可连续发送多个请求,无需等待前一个请求的响应返回,服务器按请求顺序依次返回响应。
2025-08-20 20:06:11
1057
原创 计算机网络模型
计算机网络模型是为了规范网络通信流程、实现不同设备和系统间的互联互通而提出的分层结构模型。目前最具影响力的是和。OSI(Open Systems Interconnection)模型由国际标准化组织(ISO)于1984年提出,是一个理论上的理想化分层模型,将网络通信分为7个层次,每层专注于特定功能,通过接口与相邻层交互。
2025-08-20 20:04:47
1241
原创 类的生命周期与加载过程
加载:把菜谱(class 文件)从书架(硬盘)拿到厨房(内存);验证:检查菜谱是否完整、有没有错误(比如步骤是否矛盾);准备:给厨房的调料罐(静态变量)贴上标签,先装默认的水(默认值);解析:把菜谱中 “隔壁老王的酱油”(符号引用)换成具体的位置(比如 “厨房第三层左数第一个瓶子”);初始化:按照菜谱的开头步骤(静态代码块和静态变量赋值),把水倒掉,装上真正的酱油、醋(赋实际值)。
2025-08-16 20:30:02
742
原创 JVM内存模型
小对象先去 Eden 区,用指针碰撞或空闲列表分配;多线程用 TLAB 或 CAS 减少冲突;大对象直接进老年代 “省事”。版本方法区实现字符串常量池位置静态变量位置主要特点JDK 1.6永久代(堆内)永久代永久代有固定大小上限,易内存溢出JDK 1.7永久代(堆内)堆逐步移到堆开始拆分永久代内容JDK 1.8元空间(本地内存)堆堆容量灵活,彻底解决永久代问题简单说,方法区的演变本质是从 "堆内固定空间" 走向 "堆外灵活空间"
2025-08-16 20:29:06
936
原创 类与类加载器
Java类就像是一个模板或蓝图,它定义了对象的属性和行为。比如"汽车"可以看作一个类,它有颜色、品牌等属性,有行驶、刹车等行为。我们根据这个类可以创建具体的汽车对象(如一辆红色的特斯拉)。// 汽车类(模板)// 属性// 属性// 行为System.out.println(brand + "汽车正在行驶");// 创建对象(根据模板造具体的车)myCar.color = "红色";myCar.brand = "特斯拉";// 输出:特斯拉汽车正在行驶。
2025-08-16 20:27:37
838
原创 AQS的原理与ReentrantLock的关系
AQS(AbstractQueuedSynchronizer)是Java并发包的核心组件,为ReentrantLock、Semaphore等同步工具提供底层支持。它通过一个状态变量(state)和一个CLH队列实现线程同步:state记录资源占用情况,队列管理等待线程。AQS定义了一套模板方法处理资源获取(tryAcquire)和释放(tryRelease)的逻辑,子类只需实现这些方法即可定制同步规则。以ReentrantLock为例,它通过继承AQS实现了可重入特性,并区分公平/非公平两种获取锁的模式。A
2025-08-12 19:41:06
726
原创 线程池知识点总结
线程池是一种线程管理机制,通过预先创建一定数量的线程并复用它们,避免频繁创建和销毁线程带来的资源开销,是并发编程中的核心组件。核心线程数固定,最大线程数=Integer.MAX_VALUE,支持定时/周期性任务。让提交任务的线程(如main线程)自己执行任务(降低提交速度,缓解压力)。核心线程数:线程池长期保留的线程数量(即使空闲也不销毁,除非设置。最大线程数:线程池允许创建的最大线程数(核心线程+临时线程)。停止中:不接受新任务,不处理队列任务,中断所有正在执行的任务。接口),如记录日志、持久化任务等。
2025-08-11 21:11:45
928
原创 ThreadLocal
关联当前线程,获取其专属的;在map中查找当前对应的Entry(通过哈希计算+线性探测);若找到则返回值,未找到则通过设置并返回初始值;整个过程中通过等方法主动清理过期条目,配合Entry中key的弱引用特性,最大限度减少内存泄漏风险。这一实现既保证了线程本地变量的隔离性(每个线程操作自己的),又通过主动清理机制平衡了性能与内存安全。
2025-08-11 16:54:17
1037
原创 QueryWrapper和LambdaQueryWrapper的区别
这些方法可以帮助快速构建 SQL 中的比较条件,避免手动拼接 SQL 字符串,提高代码可读性和安全性。的增强版,提供了更好的类型安全和代码可读性,推荐在项目中优先使用。:使用 Lambda 表达式引用实体类的方法,避免硬编码字段名。在 MyBatis-Plus 的条件构造器(如。在 MyBatis-Plus 中,,表示 "大于" 的意思。等价于 SQL 中的。,表示 "小于" 的意思。等价于 SQL 中的。:使用字符串指定字段名。
2025-08-06 18:40:41
465
原创 SpringBoot 自动配置原理
SpringBoot的自动配置就是当spring项目启动后,一些配置类、bean对象就自动存入到了IOC容器中,不需要我们手动去声明,从而简化了开发,省去了繁琐的配置操作。
2025-08-02 14:12:38
724
原创 SpringBoot收尾+myBatis plus
而对于MyBatisPlus的学习,我们将顺序做了+调整,主要的原因MyBatisPlus主要是对 MyBatis的简化,所有我们先体会下它简化在哪,然后再学习它是什么,以及它帮我们都做哪些事。在进行查询的时候,我们的入口是在Wrapper这个类上,因为它是一个接口,所以我们需要去找它对应的实现类,关于实现类也有很多,说明我们有多种构建查询条件对象的方式,等乙再来借书时,他拿出自己记下的 “1” 去核对标签,发现标签已经是 “2” 了,跟自己记的不一样,就知道这本书被别人动过了,自己借不了了,只能放弃。
2025-07-30 18:47:40
860
原创 SpringBoot的web开发
http://localhost:8080/saveEmp/新增的用户名/新增的用户性别 restful方式 必须明确请求方式,get查询 post新增 delete删除 put修改。* http://localhost:8080/saveEmp 把数据以json的形式保存在body体重 请求方式必须为非get。* /users/1/新名/新性 PUT: 更新 id = 1 的 user。
2025-07-29 14:32:31
438
原创 SpringBoot的搭建
其中数据库地址、服务 器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;数据校验 , 这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性。是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就。况,一般是后期运维做的多,相同配置,外部指定的配置文件优先级最高。如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下。着的字母默认是大写的。
2025-07-28 13:02:41
745
原创 SpringAop
AOP 是 OOP 的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。AOP(Aspect-Oriented Programming: 面向切面编程):将那些与业务无关,却为业务模块所共同调用的逻辑(例如事务处理、日志管理、权限控制等)封装抽。
2025-07-26 09:32:38
826
原创 Spring Bean的生命周期
今天我们来说一说 Spring Bean 的生命周期,首先我是把他分成了三个层次的步骤版本去分析的 ,因为我觉的这样通俗易懂。那么下面可以看看我的这个三个层次的步骤:在分析这个生命周期之前 我们可以先了解一下Bean。Spring Bean 是 Spring 容器管理的对象,它不仅是应用程序的核心组件,也是 Spring 框架实现 IoC、DI、AOP 等核心功能的基础。通过对 Bean 的生命周期、依赖关系和作用域的管理,Spring 极大地简化了企业级应用的开发,提升了代码的可维护性和扩展性。
2025-07-25 20:56:06
1188
原创 java的设计模式及代理模式
JAVA六大设计原则JAVA设计模式提供六个基本原则,分别是:开闭原则(OCP) - The Open-Closed Principle单一职责原则(SRP) - Single Responsibility Principle里氏替换原则(LSP) - Liskov Substitution Principle依赖倒置原则(DIP) - Dependency Inversion Principle接口隔离原则(ISP) - Interface Segregation Principle。
2025-07-25 09:14:50
737
原创 Spring语法2
PreDestroy:销毁,修饰方法,替换:destroy-method(必须与@Compnent配合使用)语法:@Autowired(required = "true-默认、false、是否必须进行装配")2.若容器中有多个类型可以与之匹配,则自动切换为按照名称装配,若名称没有对应,则报错。含义:首选项,当类型冲突的情况下,此注解修饰的类被列为首选(备胎扶正)含义:默认按照类型自动装配,如果有则直接装配,若有多个则按照名称装配。@Resource(name="名称")语法:@Value("数据内容")
2025-07-23 20:09:15
725
原创 Tomcat的部署、单体架构、session会话、spring
是一种服务器端的机制,用于跟踪和识别来自同一客户端的多次请求,解决 HTTP 协议 “无状态” 的问题。主要功能是通过 Spring 的 IOC(控制反转置)容器获取并使用对象,展示了 Spring 框架的核心特性之一 —— 依赖注入。它彻底改变了传统 Java 应用中对象的创建和管理方式,主要体现为 “将对象的创建、依赖关系的。服务器为每个客户端创建一个唯一的 “会话标识”,并在多次请求间保持这个标识,从而 “记住” 用户状态。反转:指的是对象的创建和管理的控制权发生了反转,由spring容器维护。
2025-07-21 19:45:02
1468
2
原创 Mybatis的运行原理
理解MyBatis的工作原理,需要结合JDBC的知识。在 Executor 接口的执行方法中有一个 MappedStatement 类型的参数,该参数是对映射信息的封装,用于存储要映射的 SQL 语句的 id、参数等信息:。,负责把 Java 程序的 "需求" 翻译成数据库能听懂的 "SQL 指令",再把数据库的 "回复" 翻译成 Java 程序能看懂的 "对象"。该对象中包含了执行 SQL 语句的所有方法,是一个既可以发送sql执行并返回结果的,也可以获取mapper的接口。
2025-07-19 19:52:00
922
原创 动态SQL的补充及web的b/s架构
2. trim:可以完成where与set的功能 语法:<trim prefix = “关键字” suffixOverrides = “后缀” prefixOverrides=“前缀”></trim> 注意点: 1.prefix,suffix会根据sql语句智能的添加前缀或后缀 2.prefixOverrides,suffixOverrides会智能的帮出去除多余的“and or ,”1.set:替代sql语句中的set关键字 特点:1.set会自动去掉末尾的“,”动态sql的注解方式。
2025-07-19 16:51:59
292
原创 Mybatis知识点2
当数据库表的列名与 Java 实体类的属性名不一致时,或需要进行复杂映射(如嵌套查询、集合映射)时,就需要使用这个注解。4.5.
2025-07-18 20:35:43
927
原创 Mybatis知识点
SQL 注入是一种常见的网络攻击手段,指攻击者通过在输入框、URL 参数等地方,故意输入含有恶意 SQL 语句片段的内容,让后台数据库执行这些非法 SQL,从而达到窃取数据、修改数据甚至删除数据库的目的。举个简单例子:假设登录验证的 SQL 原本是。如果攻击者在用户名输入框中填入,密码随便填,拼接后的 SQL 就会变成:。由于'1'='1'永远为真,这条 SQL 会查询出所有用户信息,导致攻击者无需正确账号密码就能登录。
2025-07-17 20:44:03
1342
原创 JDBC和MyBatis
JDBC是一种用于用于执行SQL语句的Java API,它是一组用java语言编写的类和接口组成。JDBC提供了一种标准的方法,使java程序能够与各种关系数据库进行通信。比如MySQL、Oracle、SQLServer等。
2025-07-16 18:52:19
906
原创 函数查询,子查询及案列
假设要显示产品名称和产品描述,因为产品描述很长,因此只需要前。是一个正整数,指定将从左边返回的字符数。一个查询的结果做为另一个查询的条件。有查询的嵌套,内部的查询称为子查询。约束名 约束关键字。约束对数据验证没有任何作用。这里星期天是星期的第一天。这里星期一是星期的第一天。直接编写在字段属性位置。子查询的结果是单行单列。子查询的结果是多行单列。有英语前缀的月份的日期。子查询的结果是多行多列。
2025-07-16 13:39:56
654
原创 数据库之MySQL
之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数 查询是 纵向查询,它是对一列的值进行计算,然后返回一个结果值;ifnull(表达式1,表达式2):因为null参与的运算,计算结果都为null,所以我们可以把null替换为0。数据是事实或观察的结果是客观事物的逻辑归纳,是用于表示客观事物的未加工的原始素材。流程:取出表中的每条数据,满足条件的记录就返回,不满足条件的记录不返回。where:用于筛选行级数据,即在数据分组之前对原始表中的记录进行过滤。
2025-07-14 20:01:50
874
原创 《Integer缓存池原理及应用》
在Integer类的源代码中,缓存池的定义可以在IntegerCache类中找到,以下是Integer的关键源码static {= null) {try {high = h;k++)low和high定义了缓存池的范围,默认情况下low为-128,high为127.cache是一个Integer数组 用于存储缓存的对象在静态初始化中 cache数组别初始化 并且从low到high的每个整数都别缓存为一个Integer对象。
2025-02-27 20:59:51
907
原创 关于 StringBuffer和StringBulider的扩容机制(源码分析)
关于字符串String类是不可变的,着意味着每次对String对象进行修改时,都会创建一个新的String对象,这都会导致很多性能问题。为了解决这个问题,Java提供了和类,它们允许对字符串进行可变操作。和都继承自类,它们提供了类似的方法来操作字符串。和提供了可变的字符串操作。它们允许在一个对象上进行字符串的追加、插入、删除等操作,而不需要每次都创建新的对象区别:StringBufferJDK1.0线程安全类效率低StringBuilderJDK1.5线程不安全效率高StringBuffer:
2025-01-20 00:22:43
1578
原创 继承,多态
子类可以直接调用父类非private修饰的成员方法和成员变量。修饰符class子类extends父类{定义子类独有的成员变量和成员方法。
2025-01-19 09:28:03
162
原创 方法,方法的重载,测试值传递
package方法;//方法定义的语法规则:(方法定义在类的内部,其他方法在外面)//修饰符返回值类型方法名(参数类型参数名){//方法体//return//}/*修饰符:publicstatic//返回值类型,void-无返回值如果方法有返回值return返回方法名:小驼峰命名参数:参数类型(所有数据类型)参数名(和变量名一样)//方法调用方法名(参数值)//1.方法不调用不执行,方法的执行次数和调用次数保持一致//2.方法调用完后会回到原调用处*/
2025-01-19 09:02:46
135
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅