- 博客(64)
- 收藏
- 关注
原创 SpringBoot多场景中23种常用注解详解
作用:Spring Boot集成测试。三、Web MVC相关注解。作用:映射Web请求路径。作用:声明一个类为配置类。作用:自动装配依赖对象。二、依赖注入相关注解。五、AOP相关注解1。作用:声明一个切面类。
2025-09-09 15:12:17
442
原创 100条常用SQL语句
SELECT CONSTRAINT_NAME, TABLE_NAME FROM information_schema.TABLE_CONSTRAINTS WHERE TABLE_SCHEMA = ‘数据库名’ AND CONSTRAINT_TYPE = ‘PRIMARY KEY’;SELECT CONSTRAINT_NAME, TABLE_NAME FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = ‘数据库名’;
2025-07-18 11:35:25
1282
原创 springboot 解决跨域
CORS(Cross-Origin Resource Sharing,跨域资源共享)是一种由 W3C 标准定义的跨域请求机制,允许浏览器通过设置 HTTP 请求头和响应头来实现跨域访问。跨域是指当一个网页从一个域(比如 example.com)发起请求,试图访问另一个域(比如 api.example.com)上的资源时,因浏览器的同源策略限制而导致的访问问题。简单来说,CORS 是一种由服务端控制跨域请求的安全策略,通过设置特定的 HTTP 响应头,告诉浏览器是否允许该请求跨域访问资源。
2025-07-09 11:00:00
1060
原创 nginx 同时支持ipv4与ipv6 配置
在某些情况下,您可能需要在防火墙规则中显式允许 IPv6 流量。在 server 块中添加了监听指令,并指定了 IPv4 和 IPv6 的地址。使用 ss 或 netstat 命令来检查 Nginx 是否正在监听 IPv6。查看输出中是否包含 ::😗,这表示 Nginx 在监听 IPv6 的所有接口。通过以上步骤,您应该能够在 Nginx 中同时支持 IPv4 和 IPv6。5、步骤5:测试监听情况,是否同时存在ipv4 、ipv6。2、步骤 2: 配置 Nginx 监听所有 IP 版本。
2025-06-05 17:24:56
879
原创 RocketMQ总结
比如CommitLog、ConsumeQueue、IndexFile的作用是什么?27、你提到增加Consumer实例可以解决消息积压,但如果Consumer实例数大于Topic的队列数,为什么不起作用?13、能详细说一下Broker是如何存储消息的吗?10、如果Broker地址发生变化,而NameServer不可用,会有什么影响?14、如果Consumer拉取消息时,Broker还没有将消息刷盘,会怎样?17、如果主节点和从节点之间的网络延迟很高,同步复制会有什么问题?29、如何增加Topic的队列数?
2025-03-04 10:58:32
385
原创 sql 性能优化15点
因为ids太多,即使能快速查出数据,但如果返回的数据量太大了,网络传输也是非常消耗性能的,接口性能始终好不到哪里去。如果实现业务场景中需要查询出另外几张表中的数据,可以在a、b、c表中冗余专门的字段,比如:在表a中冗余d_name字段,保存需要查询出的数据。mysql会查到1000020条数据,然后丢弃前面的1000000条,只查后面的20条数据,这个是非常浪费资源的。但缺点是mysql执行子查询时,需要创建临时表,查询完毕后,需要再删除这些临时表,有一些额外的性能消耗。
2025-01-14 17:01:11
891
原创 JSON 解析6种方案
1)强大的序列化和反序列化:支持将 JSON 字符串转为 Java 对象,也支持将 Java 对象转换为 JSON。3)支持注解:如@JsonIgnore、@JsonProperty等,能精细控制序列化与反序列化的行为。4)注解控制:类似 Jackson 和 Gson,支持注解控制字段的序列化和反序列化。1)高效字段提取:通过路径表达式(类似 XPath)快速提取嵌套字段。4)易扩展:通过自定义序列化器和反序列化器,可以处理复杂的场景。3)强大的类型支持:支持嵌套对象、泛型、数组等复杂结构。
2025-01-06 16:59:21
1347
原创 前端禁用 页面复制粘贴
event.preventDefault() 是关键的部分,它告诉浏览器不要执行 copy 事件的默认行为。由于浏览器的默认行为是将选定的文本内容复制到剪贴板,所以 preventDefault() 可以阻止这一过程。这种方法不仅可以应用于整个文档,也可以应用于特定的元素。如果我们只希望禁用某些特定部分的复制功能,而不是整个页面的内容,那么可以为特定元素添加 copy 事件监听器。为了更好地理解这段代码的原理,我们可以更深入地分析 addEventListener() 的工作机制。事件监听器的工作原理。
2024-12-02 16:02:16
675
原创 for 循环遍历List 比 foreach 遍历List 更加适用
技术点:Stream.forEach 中引用的变量必须是 final 或 effectively final,限制了灵活性,而 for 可直接修改外部变量。实际应用:比如在电商平台,你要快速统计1000个订单中的总金额,用 for 循环比 Stream.forEach 更快。技术点:for 循环的调试流程清晰,而 forEach 由于 Lambda 的存在,增加了调试难度。技术点:for 循环可以直接抛出异常,而在 forEach 中,必须用 try-catch 包装。
2024-11-25 16:47:11
519
原创 java 基础常用知识点
当 size 超过 threshold 时,HashMap 会自动进行扩容,通常是将数组长度翻倍,将旧数组中的所有元素重新计算哈希值,并将它们放入新的数组中。这是因为哈希表的索引是基于数组的长度计算的,当数组长度改变时,哈希值的索引也会改变。8、finalize()当对象的引用不再被使用且被垃圾回收器标记为可回收时,finalize() 方法会被调用,从 JDK 9 开始,finalize() 方法不推荐使用。1、getClass()返回对象的运行时类的 Class 对象,可以用于反射操作。
2024-11-05 15:57:22
1118
原创 String.format() 用法详解
System.out.println(“%s格式化之后=========”+str);System.out.println(“%d%格式化===”+str);System.out.println(“%b格式化===”+str);System.out.println(“%d格式化===”+str);System.out.println(“%x格式化===”+str);System.out.println(“%o格式化===”+str);System.out.println(“%a格式化===”+str);
2024-10-30 17:27:56
1631
原创 mysql 锁
在mysql中使用范围查询的时,如果请求共享锁或者排他锁,InnoDB会给符合条件的已有数据的索引项加锁。悲观锁对于数据库中数据的读写持悲观态度,即在整个数据处理的过程中,他会悲观的认为数据不会保持一致性,所以是会将相应的数据锁定。乐观锁对于数据库的数据的读写持乐观态度,即在整个数据处理的过程中,他会很乐观的认为数据会保持一致性,所以不加锁,而是通过数据版本记录机制实现。需要强调的一点是,InnoDB 中行级锁是基于索引实现的,临键锁只与非唯一索引列有关 ,在唯一索引列(包括主键列)上不存在临键锁。
2024-10-09 16:00:49
1179
原创 sql 查询重复记录(mysql)
查处各个重复记录组中多余的鸡柳数据,不查出id最小的一条。查询出有重复记录的各个记录组中的ID最大的记录。删除多余的重复记录,只保留id 最小的记录。查出有重复记录的各个记录组中ID最大的记录。删除多有的重复记录,只保留id最小的记录】查询出多余的记录,不查出id最小的记录。1、单子段(nick_name)查询所有有重复记录的所有记录。查出所有有重复记录的记录。
2024-10-08 11:19:05
995
原创 java四种线程池
2.newCachedThreadPool:一个可缓存的线程池,线程池的规模超过了处理需求,将自动回收空闲线程,当需求增加时,可以添加新线程,线程池的规模不存在任何限制,没有顺序执行。4.newSingleThreadExecutor:单个工作线程来执行任务,如果这个线程异常结束,就会有一个新的来替代它,它的特点是能确保任务在队列中的顺序来串行执行。1.newFixedThreadPool:固定长度的线程池,每提交一个任务就创建一个线程,直到达到线程池的最大数量,这时线程规模将不再变化。
2024-08-05 15:40:55
215
1
原创 MongoDB 100问
MongoDB是一种面向文档的NoSQL数据库,使用BSON(二进制JSON)格式存储数据。它支持动态模式设计,具有高性能、高可用性和易扩展性。
2024-08-05 15:15:30
1253
原创 为什么可以使用@Resource,但不推荐使用@Autowired
属性注入应该是我们用的最多的一种,即通过@Autowired注解,该注解默认是按照ByType方式(按类型)注入Bean,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false)。1、@Resource是Java的标准注解,定义在javax.annotation.Resource包中,主要用于EJB 组件的依赖注入,但在Spring中也可以用于bean的注入。2、setter 方法注入。
2024-08-02 16:20:52
562
原创 多个线程同时调用接口
当多个线程同时访问共享资源时,可能会出现线程安全问题。每个线程可以独立执行一段代码,与其他线程并行运行。Java提供Thread类和Runnable接口来创建和管理线程。假设我们有一个名为MyService的接口。实现Runnable接口并实现run()方法,然后将Runnable实例传递给Thread对象。 //为每个线程创建Runnable实例。 //线程执行的代码。2)实现Runnable接口。 //接口的具体实现。 //创建线程数组。 //启动所有线程。
2024-08-01 17:29:15
817
原创 SQL 执行过程
如果写了 redo log 直接提交,不经过 prepare 阶段,那么这个过程在发生故障时,如果 MySQL 部署了主从节点,主节点可以根据 redo log 恢复数据,但从节点就无法同步这部分数据。我们知道,当非聚集索引插入时,数据会按主键的顺序存放,所以叶子节点可能需要离散地访问数据索引页,每次索引页更新时,都需要刷新磁盘。二进制日志记录了所有执行的 SQL 语句,而不仅仅是数据修改,这对于数据复制和恢复非常重要,因为它可以确保不仅数据的状态被恢复,连同执行的 SQL 操作也能被还原。
2024-07-09 17:16:40
2029
原创 JavaScript实用总结
Async/await 提供了一种编写外观和行为都像同步代码的异步代码的方法,从而提高了可读性和可维护性。这些数组方法提供了一种转换、过滤和减少数组的函数式方法,使您的代码更具表现力和简洁性。部分应用允许您通过预先应用一些参数来创建新函数,从而使您的代码更加灵活和可重用。函数流水线允许您按顺序将一系列函数应用于一个值,从而提高代码的可读性和可维护性。函数组合允许您通过组合多个函数来创建新函数,从而使您的代码更加模块化和可重用。通过柯里化,您可以创建可以用较少参数调用的函数,并返回接受其余参数的新函数。
2024-06-03 14:44:55
481
原创 springboot 实现跨域的几种方式
1)浏览器的同源策略(Same Origin Policy)限制了跨域请求。由于同源策略(Same Origin Policy)的限制,浏览器不允许跨域请求。同源策略规定,A网页设置的Cookie、LocalStorage和IndexDB无法被同源以外的网页读取。A域名下的页面无法读取B域名下的Cookie、localStorage等。3)postMessage:A域的window向B域的window发送消息,实现跨域通信。2)CORS:服务器端设置HTTP头,允许指定的请求来源跨域访问。
2024-05-21 10:03:01
625
原创 一个优雅的 controller
4、使用 @Valid 进行参数效验步骤:整个过程如下,用户访问接口,然后进行参数效验,因为 @Valid 不支持平面的参数效验(直接写在参数中字段的效验)所以基于 GET 请求的参数还是按照原先方式进行效验,而 POST 则可以以实体对象为参数,可以使用 @Valid 方式进行效验。2、@Valid 注解的作用:@Valid 的主要作用是用于数据效验,可以在定义的实体中的属性上,添加不同的注解来完成不同的校验规则,而在接口类中的接收数据参数中添加 @valid 注解,这时你的实体将会开启一个校验的功能。
2024-05-11 11:02:08
535
1
原创 Springboot+logback 详细配置
这里使用springboot3.0.2。application.yml 配置。二、logback详细配置。
2024-05-11 10:41:26
4593
原创 java 实现预览
/ 调用默认浏览器打开PDF文件。// 检查是否支持浏览器打开操作。// 获取Desktop实例。// 创建一个URI对象。//使用桌面程序打开。
2024-05-07 10:53:52
627
原创 springboot的一些优化
删除一个服务(已下架或未上架的才能删除),之前有看别人写的代码,会先根据id查询该记录,然后做一些判断。2、用@RequiredArgsConstructor代替@Autowired。hashSet而不是list,list判断一个元素是否存在的代码。Java 开发手册中说到每个方法的代码不要超过 50 行。5、减少不必要的db (尽可能的减少对数据库的查询)// 判断a是否在list中。//使用时注入这个bean。(bean的三种注入方法)// 判断a是否在set中。11、判断元素是否存在。
2024-05-06 15:09:37
767
原创 Linux命令
sbin/iptables -I INPUT -p tcp --dport 【端口】 -j ACCEPT。如果输出“Connection established”,则表示连接成功。或者输出“Connection refused”,说明端口不通。输出“No route to host”,说明端口不通。ssh 【IP地址】 -p 【端口】 -v。1、linux 服务器查看网络是否通。2、关闭服务器防火墙。
2024-05-06 14:49:16
1501
原创 map学习总结
(1)哈希算法:把任意长度的输入,变成固定长度的输出,输出为散列值,压缩映射,散列值的空间通常远小于输入的空间,不同的输入可能会散列成不同的输出,不能通过散列值确定输入的唯一值。(2)hash表:hash 表又叫做散列表,通过key直接访问到内存存储位置的数据结构,通过hash函数,把key映射到表中的某个位置,获取某个数据的位置,从而加快数据的查找。效率低:1.7 当我们的多个KEY ,计算吃的index 值发生冲突的情况下,会存放在同一个链表中,查询效率较低,从头查到尾,时间复杂度为O(n)
2024-04-22 14:32:49
794
1
原创 达梦数据库-常用SQl整理笔记
SELECT SCH_NAME AS “所属模式”,TABLE_NAME AS “所属表”,INDEX_NAME AS “索引名称”, MONITORING AS “是否监控”,USED AS “是否使用”,START_MONITORING AS “开始监控时间”,END_MONITORING AS “停止监控时间” FROM V。--监控IDX_T1_C1索引。select ‘归档状态’,DECODE(ARCH_MODE,‘Y’,‘启用’,‘N’,‘未启用’) from v。
2023-12-14 11:29:41
1850
原创 sql查询 exists(not exists)与in(not in)
WHERE (列名1, 列名2) IN (SELECT 列名1, 列名2 FROM 表名 WHERE 条件)WHERE 列名 IN (SELECT 列名 FROM 表名 WHERE 条件 LIMIT 1)IN 运算符用于比较单个值或列与一组值,而 EXISTS 运算符用于检查子查询是否返回结果。IN 运算符适用于静态数据列表,而 EXISTS 运算符适用于动态或复杂的子查询。WHERE 列名 IN (SELECT 列名 FROM 表名 WHERE 条件)WHERE 字段名 IN(数据值_1,数据值_2,…
2023-12-06 15:25:41
1156
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅