- 博客(95)
- 收藏
- 关注
原创 死锁实现以及日志解读
事务A,B形成了死锁闭环后,因为Innodb的底层机制,它会让其中一个事务让出资源,另外的事务执行成功,这就是为什么你最后看到事务B插入成功了,但是事务A的插入显示了Deadlock found ~
2024-09-06 09:35:31 448
原创 this application requires .NET Framework 4.5.2
安装mysql社区版的时候报这个错:this application requires .NET Framework 4.5.2https://www.microsoft.com/en-us/download/details.aspx?id=42642
2024-05-10 16:06:49 447
原创 SpringSecurity源码分析(RemeberMe)
记住我的服务的接口可以重写实现自己的记住我记住我基类在请求中找到 Spring Security 记住我 cookie 并返回其值。当MaxAge为0时候表示删除cookie解码 cookie 并使用 “:” 分隔符将其拆分为一组令牌字符串。由子类实现,整个autoLogin是一个模板方法返回的最终 Authentication 对象校验过期时间->生成签名并与cookieTokens中进行比较默认实现InMemory,还提供了JDBC。
2024-05-09 16:02:48 465 1
原创 前端部署时候开发以及生产环境切换
在 HBuilderX 中,点击“运行”编译出来的代码是开发环境,点击“发行”编译出来的代码是生产环境。uniapp 版本切换。
2024-05-09 13:40:19 335
原创 uniapp图片展示异常----hbuilder里可能就正常显示,但微信里显示不了
在uni开发过程中,uview的图片组件使用相对路径也就是 …/xxx的时候在hbuilder里可能就正常显示,但微信里显示不了 这时候就得使用觉得路径,也就是如果图片资源在你的根目录static文件夹下就直接 /static/xxx。
2024-05-09 08:57:45 342
原创 SpringSecurity源码4-安全上下文
javax.servlet.Filter这与 类似SecurityContextPersistenceFilter,只是必须显式调用 来SecurityContextRepository.saveContext(SecurityContext, HttpServletRequest, HttpServletResponse)保存 SecurityContext.这提高了效率,并通过允许不同的身份验证机制单独选择是否应保留身份验证来提供更好的灵活性。SecurityContext的持有器。
2024-04-18 14:00:36 425
原创 SpringSecurity源码分析3--UserDetail部分
一个允许子类重写和处理UserDetails对象的基AuthenticationProvider。该类旨在响应UsernamePasswordAuthenticationToken身份验证请求。通过预先编码这个密码,可以确保在后续的时间攻击防护方法中,不会因为实时编码操作而导致时间差异,这些时间差异可能会被攻击者用来推断密码或其他敏感信息。默认都是null,可以通过setUserCache设置Cache。从缓存中获取UserDetail对象。加密方法升级后,重新更新密码。默认页面,生产不会使用。
2024-04-15 16:55:44 526
原创 SpringSecurity源码分析2
继承了之前提到的AbstractConfiguredSecurityBuilder构造器postProcess安全对象的后处理,那么ProviderManager是什么。
2024-04-03 16:52:09 175 1
原创 gRPC基础知识
HTTP/2连接上传输的每个帧(frame)都关联到一个流,一个连接上可以同时有多个流, 同一个流的帧按序传输,不同流的帧交错混合传输, 客户端、服务端双方都可以建立流,流也可以被任意一方关闭。对于基于protobuf的代码生成,您可以将您的proto文件放在src/main/proto和src/test/proto目录中,并使用适当的插件。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同。客户端发起的流使用奇数流ID,服务端发起的使用偶数流ID。
2024-03-27 08:46:16 1113
原创 Spring Security源码
WebSecurityConfigurerAdapter已废弃,官方推荐使用HttpSecurity 或WebSecurity。new DebugFilter(filterChainProxy)对filterChainProxy进行装饰。可以通过@EnableWebSecurity(debug = true)开启debug模式。都继承了SecurityBuilder。
2024-03-17 12:50:52 572
原创 当MySql有字段为null,索引是否会失效
sql执行过程中,使用is null或者理论上都会走索引,由于优化器的原因导致索引失效变成全表扫描,或者说是否使用索引和NULL值本身没有直接关系,和执行成本有关系。
2024-01-17 08:41:01 856
原创 线程池源码实现细节盘点
allowCoreThreadTimeOut这个参数来控制是否能释放核心线程数。线程池利用了AQS对执行任务进行加锁操作。reject拒绝策略触发时机。
2023-09-04 16:45:30 117
原创 高并发下单例线程安全
思路可以沿用到rabbitmq重连上。2.使用static代码块实现单例。4.使用static代码块实现单例。1.使用静态内置类实现单例模式。3.使用静态内置类实现单例模式。
2023-09-04 09:50:07 452
原创 Synchronized锁升级
处在重量级锁状态时说明有线程没拿到锁需要阻塞等待锁,当拥有锁的线程释放锁后唤醒它继续竞争锁。此处就引入了一个问题:其它线程如何找到被阻塞的线程?我们很容易想到:把阻塞的线程放到多线程共享的(能访问)的列表里。当获取锁冲突多,时间越长的时候,线程肯定无法继续在这里死等了,所以只好先挂起,然后等前面获取锁的线程释放了锁之后,再开启下一轮的锁竞争,而这种形式就是我们的重量级锁。线程1当前拥有偏向锁对象,线程2是需要竞争到偏向锁。
2023-08-24 17:50:14 92
转载 线程池ForkJoinPool
ForkJoinPool线程池最大的特点就是分叉(fork)合并(join),将一个大任务拆分成多个小任务,并行执行,再结合工作窃取模式(worksteal)提高整体的执行效率,充分利用CPU资源。从图中可以看出ForkJoinPool要先执行完子任务才能执行上一层任务,所以ForkJoinPool适合在有限的线程数下完成有父子关系的任务场景,比如:快速排序,二分查找,矩阵乘法,线性时间选择等场景,以及数组和集合的运算。
2023-07-07 15:04:04 153
原创 领域事件模型(四) CQRS模式
将系统中的操作分为两类,即「命令」(Command) 与「查询」(Query)。命令则是对会引起数据发生变化操作的总称,即我们常说的新增,更新,删除这些操作,都是命令。而查询则和字面意思一样,即不会对数据产生变化的操作,只是按照某些条件查找数据。这样可以根据查询的需求来优化查询模块的性能,例如使用读取专用的数据库或缓存来提高查询性能。
2023-07-02 16:00:34 197
原创 领域事件驱动(二)聚合与聚合根的了解
领域事件是历史的记录,捕捉重要时刻的意图和任何相关上下文,通俗地来讲业务中由于某个领域对象的动作被触发会引发与之关联的另外的领域对象也受到影响。在订单聚合中,Order类作为聚合根,负责管理订单的整体状态和操作。仓储介于领域模型和数据模型之间,主要用于聚合的持久化和检索。聚合有一个聚合根和上下文边界,这个边界根据业务单一职责和高内聚原则,定义了聚合内部应该包含哪些实体和值对象,而聚合之间的边界是松耦合的。当一些逻辑不属于某个实体时,可以把这些逻辑单独拿出来放到领域服务中,理想的情况是没有领域服务。
2023-07-02 14:34:46 299
原创 JVM知识点整理
G1 依然遵循分代回收的设计理论,但它对堆(Java Heap)内存进行了重新布局,不再是简单的按照新生代、老年代分成两个固定大小的区域了,而是把堆区划分成很多个大小相同的区域(Region),新、老年代也不再固定在某个区域了,每一个Region都可以根据运行情况的需要,扮演Eden、Survivor、老年代区域、或者Humongous区域。和标记-清除算法一样,先标记,但清除之前,会先进行整理,把所有存活的对象往内存空间的左边移动,然后清理掉存活对象边界以外的内存,即完成了清除的操作。
2023-06-17 18:29:26 961
原创 HashSet面试题
2.HashSet 存储的元素对应 HashMap 的 key,因为 HashMap 不能存储重复的 key,所以 HashSet 不能存放重复元素;3.由于HashMap 的 key 是基于 hashCode 存储对象的,所以 HashSet 中存放的对象也是无序的;1.HashSet 的底层源码特别少,主要是因为 HashSet 的方法基本都是借助 HashMap 的方法来实现的。4.HashSet 也没有提供 get 方法,可以通过 Iterator 迭代器获取数据。hashSet的源码。
2023-05-11 17:03:20 90
转载 Mybatis实现百万级数据导出(重点代码摘要)
MyBatis 实现逐条获取数据,必须要自定义 ResultHandler,然后在 mapper.xml 文件中,对应的 select 语句中添加 fetchSize=“-2147483648”。最后将自定义的 ResultHandler 传给 SqlSession 来执行查询,并将返回的结果进行处理。
2023-03-31 17:11:08 694
原创 了解数据库的ACID特性
原子性(Atomicity)单个事务,为一个不可分割的最小工作单元,整个事务中的所有操作要么全部commit成功,要么全部失败rollback,对于一个事务来说,不可能只执行其中的一部分SQL操作,这就是事务的原子性。一致性(Consistency)数据库总是从一个一致性的状态转换到另外一个一致性的状态。隔离性(Isolation)通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的。持久性(Durability)一旦事务提交,则其所做的修改就会永久保存到数据库中。
2023-03-29 16:03:51 263
原创 CopyOnWriteArrayList
在很多应用场景中,读操作的频率可能会远远大于写操作。由于读操作根本不会修改原有的数据,因此对于每次读取都进行加锁其实是一种资源浪费。我们应该允许多个线程同时访问 List 的内部数据,毕竟读取操作是安全的。
2023-03-24 16:57:03 186
原创 Mysql相关知识点
有一种特殊的情况即使不满足最左法则,MySQL也能通过索引来实现排序,如果WHERE或者JOIN中对索引中某些列指定为常量,那么可以弥补这个最左法则!虽然通过学号和课程名称的联合主键,可以确定除联合主键外的所有的非主键值,但是基于上述两个假设,也不符合第二范式的要求。假设课程名称是表中的唯一主键,那由课程名称就可以确定学分了,但是却不能确定姓名、年龄和成绩。假设学号是表中的唯一主键,那由学号就可以确定姓名和年龄了,但是却不能确定课程名称和成绩。在InnoDB引擎中,主键索引采用的就是聚簇索引结构存储。
2023-03-17 16:58:30 654
原创 MyBatis的工作原理如下图所示
MyBatis的工作原理如下图所示四个核心对象SqlSession对象,该对象中包含了执行SQL语句的所有方法。Executor接口,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。MappedStatement对象,该对象是对映射SQL的封装,用于存储要映射的SQL语句的id、参数等信息。https://blog.csdn.net/moernagedian/article/details/128956922?spm=1001.2014.3001.55
2023-03-15 15:07:02 411 1
原创 HashMap的扩容机制
一、HashMap的底层底层:采用数组+链表(JDK1.7),采用数组+链表+红黑树(JDK1.8)。容器:HashMap默认容器长度为16,扩容因子为0.75,以2的n次方扩容。二、HashMap的扩容机制原理1、JDK1.7版本扩容①:先生成新数组;②:遍历老数组中的每个位置上的链表上的每个元素;③:获取每个元素的key,并基于新数组长度,计算出每个元素在新数组中的下标;④:将元素添加到新数组中去;⑤:所有元素转移完之后,将新数组赋值给HashMap对象的table属性。2、JDK1
2023-03-15 14:24:15 861
原创 Mybatis debug 查看sql(排查sql问题)
今天写mapper文件时候发现SQL一直执行不成功,mybatis也不会将sql反馈给我们,只能自己摸索了
2023-02-09 17:25:37 1375
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人