- 博客(137)
- 收藏
- 关注
原创 xxl-job源码读书笔记
也就是说,先插入的元素会先被遍历到。当创建一个新的线程时,会检查父线程是否有InheritableThreadLocal变量的值,如果有,这些值会被复制到子线程对应的InheritableThreadLocal变量中。这个机制主要用于在 Spring 容器初始化阶段,当所有需要创建的单例 bean 都已经创建好实例之后,执行一些额外的初始化逻辑或者进行一些后置处理操作,比如对已创建的 bean 集合进行进一步的配置、检查,或者触发一些需要基于完整 bean 集合才能进行的业务逻辑初始化等。
2024-12-27 19:38:44
1013
原创 mybatis-plus使用问题
1.使用 @TableField(updateStrategy = FieldStrategy.IGNORED) 注解。,在用mybatis-plus时,应该忽略该字段的更新。在实体类的字段上添加该注解,可以让 Mybatis Plus 在执行 update 操作时忽略该字段。可以手动构建 UpdateWrapper 对象,并在其中指定需要更新的字段,从而忽略其他字段。这样在执行 update 操作时,someField 字段将会被忽略。与上述方式类似,但这种方式可以更精确地控制字段的更新行为。
2024-12-09 14:38:33
923
原创 数据库读写分离
然而,在实际应用中,读写分离的方式更适合大多数场景。因为它可以更好地满足高并发系统中读操作的需求,提高系统的整体性能和可扩展性。同时,通过合理的数据同步机制和负载均衡策略,读写分离也可以实现高可用性和数据一致性。优化查询执行:读服务器可以根据读操作的特点进行优化,例如使用MyISAM存储引擎(如果支持的话),它可以提供更快的读取速度。减少锁竞争:写操作通常涉及行级锁或表级锁,而读操作则不需要。利用缓存:读服务器可以更好地利用缓存机制,如查询缓存或内存缓存,以加速读取操作。
2024-08-06 22:02:53
255
原创 单点登录SSO
AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高,支持128、192、256位密钥的加密。后台根据企业code查企业信息获取其密钥,并利用时间戳,入参,密钥(企业code查库得到),用MD5算出其密串,和用户传过来的比较。非对称加密,也称为公钥加密或双密钥加密,是指加密和解密使用不同的密钥的加密方法。对称加密,也称为单密钥加密或私钥加密,是指加密和解密使用同一个密钥的加密方法。1Nginx配置IP白名单。1.2.1 对称加密。
2024-07-27 20:44:43
225
原创 sql优化方法
在使用子查询时,尽量使用EXISTS代替IN,EXISTS只关心是否存在记录,而IN会将子查询的结果集加载到内存中,可能导致性能问题。是两个集合中所有可能的有序对的集合,而在数据库查询中,它指的是两个或多个表中的每一行都与另一个表中的每一行组合。1.使用索引,在创建索引时,需要考虑查询的频率和数据的更新频率,避免过度索引或不必要的索引。1.在查询数据时,尽量避免使用%通配符在查询字段的开头,这会导致索引失效,需要进行全表扫描。1.在查询大量数据时,使用LIMIT可以限制返回的记录数,避免查询过多的数据。
2024-06-25 12:57:40
922
1
原创 多线程leetcode编程题
假设线程A已经拥有了某个对象(不是类)的锁,而其它线程B、C想要调用这个对象的某个synchronized方法(或者代码块), 由于B、C线程在进入对象的synchronized方法(或者块)之前必须先获得该对象锁的拥有权,而恰巧该对象的锁目前正被线程A所占用,此时B、C线程就会被阻塞,进入一个地方去等待锁的释放,这个地方便是该对象的锁池。假设线程A调用了某个对象的wait()方法,线程A就会释放该对象的锁,同时线程A就进入到了该对象的等待池中,进入到等待池中的线程不会去竞争该对象的锁。
2024-06-07 17:01:05
621
原创 消息队列常见面试题
这两个操作发生了两次系统调用,每次系统调用都得先从用户态切换到内核态,等内核完成任务后,再从内核态切换回用户态,也就是消息发送过程中一共发生了 4 次用户态与内核态的上下文切换。要想提高文件传输的性能,就需要减少【用户态与内核态的上下文切换】和【内存拷贝】的次数。通过上面的分析可以看出,第2、3次拷贝(也就是从内核空间到用户空间的来回复制)是没有意义的,数据应该可以直接从内核缓冲区直接送入Socket缓冲区。CPU把数据从用户缓冲区拷贝到内核的网络驱动的 socket 缓冲区;read:读取本地文件内容;
2024-06-06 16:48:51
218
原创 java基础面试题
因为参数的地址都指向同一个对象,所以我们也称之为"传共享对象",所以,如果在被调函数中改变了形式参数的值,调用者是可以看到这种变化的。Map 是键值对映射容器,与 List 和 Set 有明显的区别,而 Set 存储的零散的元素且不允许有重复元素(数学中的集合也是如此),List是线性结构的容器,适用于按数值索引访问元素的情形。因为传共享对象调用的过程和传值调用的过程是一样的,而且都有一步关键的操作,那就是"复制",所以,通常我们认为传共享对象调用是传值调用的特例。1、什么是值传递,什么是引用传递?
2024-06-05 18:47:29
740
原创 并发相关面试题
FutureTask类提供了一个Future的基本实现 ,具有启动和取消计算的方法,查询计算是否完整,并检索计算结果。2、不能用于实时读的场景,像拷贝数组、新增元素都需要时间,所以调用一个 set操作后,读取到数据可能还是旧的,虽然 CopyOnWriteArrayList 能做到最终一致性,但是还是没法满足实时性要求;1、由于写操作的时候,需要拷贝数组,会消耗内存,如果原数组的内容比较多的情况下,可能导致 young gc 或者 full gc;wait()方法会释放 CPU 执行权 和 占有的锁。
2024-06-05 16:44:15
286
原创 redis常见面试题
这个指令没有 offset、limit 参数,是要一次性吐出所有满足条件的 key,由于 redis 是单线程的,其所有操作都是原子的,而 keys 算法是遍历算法,复杂度是 O(n),如果实例中有千万级以上的 key,这个指令就会导致 Redis 服务卡顿,所有读写 Redis 的其它的指令都会被延后甚至会超时报错,可能会引起缓存雪崩甚至数据库宕机。scan 参数提供了三个参数,第一个是 cursor 整数值,第二个是 key 的正则模式,第三个是遍历的 limit hint。keys 指令会导致线。
2024-06-04 11:49:08
438
原创 MQ消息丢失/重复/顺序/挤压
通过以上流程,RocketMQ 的事务消息能够保证在消息发送和消费过程中的事务一致性和可靠性,确保消息在各个环节的正确处理。采用了2PC(两阶段提交)+ 补偿机制(事务状态回查)的思想来实现了提交事务消息,同时增加一个补偿逻辑来处理二阶段超时或者失败的消息,如下图所示。RocketMQ事务消息是指应用本地事务和发送消息操作可以被定义到全局事务中,要么同时成功,要么同时失败。RocketMQ 的事务消息是指在消息发送方发送消息后,需要经过两阶段提交来确保消息的可靠性传递和处理。
2024-06-03 23:24:30
417
原创 JVM调优实战
1数据量一次性申请的内存过多,比如数据库查询返回值大多,所以做个分页。如果老年代能回收掉大部分,说明年轻代太小了,放不下。2.并发过高的情况下,一些连接未释放。
2024-06-03 21:05:33
309
原创 redis如何实现分布式锁
tryLock() 获取到锁返回true,获取不到锁并直接返回false。它支持多种锁模式,如公平锁、可重入锁、读写锁等,并且提供了锁的超时设置和自动释放功能。System.out.println(“获取锁成功,执行被保护的代码…System.out.println(“获取锁成功,执行被保护的代码…(3)tryLock() 是可以被打断的,被中断的;lock() 方法 与 tryLock() 方法。lock() 与 tryLock() 的区别。// 使用 tryLock() 方法获取锁。
2024-06-02 21:57:57
558
原创 ThreadLocal简介
这样的话,ThreadLocalMap中就会出现key为null的Entry,就没有办法访问这些key为null的Entry的value,如果当前线程再迟迟不结束的话(比如线程池的核心线程),这些key为null的Entry的value就会一直存在一条强引用链:Thread变量 -> Thread对象 -> ThreaLocalMap -> Entry -> value -> Object 永远无法回收,造成内存泄漏。ThreadLocal的很重要一个注意点,就是使用完,要手动调用remove()。
2024-05-27 16:56:30
598
原创 Sentinel 与 hystrix
缺点是除了增加了线程切换的成本(过多的线程池导致线程数目过多),还需要预先给各个资源做线程池大小的分配。和资源池隔离的方法不同,Sentinel 通过限制资源并发线程的数量,来减少不稳定资源对其它资源的影响。当某个资源出现不稳定的情况下,例如响应时间变长,对资源的直接影响就是会造成线程数的逐步。当依赖的资源出现响应时间过长后,所有对该资源的访问都会被直接拒绝,直到过了指定的时间窗口之后才重新恢复。当线程数在特定资源上堆积到一定的数量之后,对该资源的新请求就会被拒绝。堆积的线程完成任务后才开始继续接收请求。
2024-05-26 16:08:02
1044
原创 一些常见的程序设计问题
库存扣减后发送mq消息,去异步执行创建订单流程,创建订单失败会造成少卖。可加重试机制,对多次重试依旧失败的,用定时任务处理。1.判断库存名额是否充足,2.进行扣减。2个50亿的url文件找出相同的url。为了防止超卖,必须保证这两部的原子性。2.rabbitMq的延迟队列。30min取消未支付订单。
2024-05-19 17:44:02
192
原创 spring面试题笔记
2、AsyncLogger是采用Disruptor,通过环形队列无阻塞队列作为缓冲,多生产者多线程的竞争是通过CAS实现,无锁化实现,可以降低极端大的日志量时候的延迟尖峰,Disruptor 可是号称一个线程里每秒处理600万订单的高性能队列。slf4j是对所有日志框架制定的一种规范、标准、接口,并不是一个框架的具体的实现,它的接口并不能独立使用,需要和具体的日志框架实现配合使用(如log4j、logback、log4j2)。我们在项目中经常使用一个叫SLF4J的依赖,它是做什么的呢?
2023-11-05 19:06:52
329
原创 nacos面试题
通常我们说,Nacos技能保证CP,也能保证AP,具体看如何配置,但其实只不过是Nacos中的注册中心能保证CP或AP,Nacos中的配置中心其实没什么CP或AP,因为配置中心的数据是存在一个Mysql中的,只有注册中心的数据需要进行集群节点之间的同步,从而涉及到是CP还是AP,如果注册的节点是临时节点,那么就是AP,如果是非临时节点,那么就是CP,默认是临时节点。Nacos最外层是namespace隔离环境,然后是group对服务进行分组,然后就是服务,一个服务下 有多个集群,集群下有多个实例。
2023-10-29 20:27:37
415
原创 netty知识集锦2
2.定长解码器:服务器端选最大长度的消息作为定长,客户端不足补齐,缺点造成浪费。1短链接,它的消息边界是从链接建立到链接断开。netty协议设计与解析。Message编码解码。
2023-07-23 15:10:16
149
原创 netty知识集锦
Netty原理架构解析【硬核】肝了一月的Netty知识点简单深入理解高性能网络编程(Netty)中的Reactor模型(图文+代码)
2023-06-30 16:41:48
103
原创 sql知识集锦
ALTER TABLE ALTER COLUMN SET DEFAULT alter table alter column drop default。ALTER TABLE ADD COLUMN [约束条件]ALTER TABLE MODIFY COLUMN ALTER TABLE DROP COLUMN 若字段有默认值,则需要先删除字段的约束,在添加新的默认值。
2023-06-27 17:11:33
178
原创 牛客JAVA问答题
链接:https://www.nowcoder.com/questionTerminal/82331a08576e4e9485de71fa54e12c7f来源:牛客网1、创建泛型对象的时候,一定要指出类型变量T的具体类型。争取让编译器检查出错误,而不是留给JVM运行的时候抛出类不匹配的异常。 2、JVM如何理解泛型概念 —— 类型擦除。事实上,JVM并不知道泛型,所有的泛型在编译阶段就已经被处理成了普通类和方法。 处理方法很简单,我们叫做类型变量T的擦除(erased) 。 总结:泛型代码与JVM ①
2023-03-29 10:19:29
364
原创 Tomcat 集成大秘籍
Tomcat顶层架构Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个Server可以包含至少一个Service,用于具体提供服务。Service主要包含两个部分:Connector和Container。从上图中可以看出 Tomcat 的心脏就是这两个组件,他们的作用如下:Connector用于处理连接相关的事情,并提供Socket与Request和Response相关的转化;Container用于封装和管理Servlet,以及具体处理Request请求;一个To
2022-05-31 16:57:19
176
原创 操作系统--b站视频
https://www.bilibili.com/video/BV1wq4y1M7qf?p=45&spm_id_from=pageDriver进程
2022-05-19 18:43:22
103
原创 HTTP与HTTPS的区别
HTTP 和 HTTPS 的区别(面试常考题)HTTPS:是以安全为目标的 HTTP 通道,是 HTTP 的安全版。HTTPS 的安全基础是 SSL。SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。HTTPS 设计目标:(1) 数据保密性:保证数据内容在传输的过程中不会被第三方查看。就像快递员传递包裹一样,都进行了封装,别人无法获知里面装了什么 。(2) 数据完整性:及时发现被第三方篡改的传输内容。就像快递员虽然不知道包裹里装了什么东西,但他有可能中途掉包,数据完
2022-03-21 22:45:37
104
转载 HTTP 状态码
链接200多这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。300多重定向400多请求错误400 Bad Request1、语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。2、请求参数有误。401 Unauthorized当前请求需要用户验证。该响应必须包含一个适用于被请求资源的 WWW-Authenticate 信息头用以询问用户信息。客户端可以重复提交一个包含恰当的 Authorization 头信息的请求。如果当前请求已经包含了
2022-03-21 22:29:32
223
转载 XXL-JOB原理
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。在众多XXL-Job平台的特征中,有如下几条需要关注的:1、使用简单:支持通过Web页面对任务配置,降低操作任务的难度;2、动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效;3、调度中心HA(中心式):调度采用中心式设计,“调度中心”自研调度组件并支持集群部署,可保证调度中心HA;4、执行器HA(分布式):任务分布式执行,任务”执行器”
2022-03-18 11:36:58
21104
原创 WebSocket 的一些东东
HTML5 WebSocketWebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。现在
2022-03-17 21:03:05
110
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人