- 博客(46)
- 收藏
- 关注
原创 JAVA实现存在更新不存在插入与及多余的进行删除(三)
通过这个ApplicationContextAware获取到所有bean服务,肤浅地以实体类拼凑一下服务名,找到bean服务就作为这个调用的bean服务。
2023-08-03 16:46:13
1151
原创 说下对mysql MVCC的理解
readView作为读视图,存放查询那一刻读视图快照,与行记录的trx_id做比较,小于readView的trx_id则记录可见,大于等于readView的trx_id的除了与readView的creator_trx_id一致的可见外,其余不可见。然后我们要知道,mysql每行记录,都有隐藏的db_trx_id(事务id),db_roll_point(回滚到undoLog的id),如果该行没主键则还会有个隐藏主键字段。依赖这两点,可以做到在并发读写事务的时候,既保证数据的安全性,又保证一定的性能。
2025-07-15 13:37:25
244
原创 由BIO与NIO的区别到select、poll、epoll的粗浅理解
莫慌,再去getIO一下嘛,由于是非阻塞的,getIO即刻又返回了,可能还是没有结果,那就继续get下去,总有结果的。NIO是可以同步非阻塞IO,N是new的缩写,它监听请求,IO的读写非阻塞,而是加入了通道(channel)这个概念。是的,如果硬是要获取某个请求的读写IO来说,其实是阻塞的,BIO就是阻塞一到到结果返回,NIO虽然不阻塞直接返回了,如果为空,还是要不断循环去获取,说白了还是阻塞。BIO是同步阻塞IO,B是block的缩写,它监听请求,阻塞在那里,直到收到读或写,才继续往下执行。
2024-05-17 18:54:41
428
原创 再论无为而治
比如你是大领导,底下一堆有为下属,他们在做有为之事,你就要反着来做无为之事(做精炼、做熵减,有问题处理问题(处理掉问题亦是无),无问题精减工作),我好不容易做了1、2、3..10这么多事,结果就被你这个领导砍掉了3-4件,又3-4件精炼揉合成了1件事。这过程绝对是痛苦的。无为的反着来做就是要拥有,要勤力,要有学识、要有经验,要高工资,这个过程也绝对是痛苦的。真实应该是别人发挥了,你就浓缩他熵减它,别人不发挥了,你就督促他、引导他,绝对是痛苦的,而不是轻松的,躺平的。你有,无为就是减,你无,无为就是加。
2023-11-09 17:21:57
261
原创 梳理下我自已对Reactor与及IO多路复用的select\poll\epoll的理解
它的核心是Reactor与资源处理器。非阻塞同步的意思就是通过Reactor的IO多路复用(select或poll或epoll)实现非阻塞监听,然后监听到连接后,将数据从用户态搬运到内核态则是同步,业务处理完将数据从内核移到用户也是同步。所以总的来说,Reactor先是通过IO多路复用,非阻塞地监听到是否有请求连接过来了,再分发到资源处理器负责处理具体的(连接、读、写)事件。具体的流程是系统调用监听请求,判断请求是连接、读或写。它是非阻塞同步的,这里的非阻塞同步是指,监听请求这个过程非阻塞,
2023-09-05 17:05:10
1085
原创 两个类文件,实现根据返回的id显示对应的人员信息增强返回
这个AOP在@Controller方法返回前,校验返回的实体是固定的泛型且泛型参数对应的实体类中存在被@BaseId注解的变量,就基于这个变量生成一个人员信息实体,加进这个返回实体中返回给前台。比如第一次IO时就连接查出对应的返回实体,或者本来不需要后续又需要这些实体就又要补上代码。直接返回给前台时,前台可能要根据你这个user_id作为参数,再请求一次后台,获取对应的人员信息实体,以作人员信息展示。后台与前台交互时,由于后台存放的原始信息可能就是一些id或code,要经过相应的转换才能很好地在前台展示。
2023-09-05 16:13:36
236
原创 2023年中成长思辨
正因为意识到这点我是乐于去设计的,但设计这个东西,是不是讲天赋的不得而知,就好痛苦,纠结于很多个选择而头脑爆炸。遇到难的就逃避进而换,我感觉不是的,我绝对是想迎难而上,解决问题进而愉悦大家,共同成长。目前,我养成了每晚自学的习惯有6年了,自学类的书主要是技术类、与设计相关的书像重构、设计模式等说实话,看是看了,感觉收获不大。最近李想在微博说的一段话我很认可,大体是说他们的核心驱动是成长:学习然后实训形成闭环,进而成长,如果只是学习没实训,就像梦中打飞机,不会有成长,只是实训没学习,容易井底蛙,也不会成长。
2023-07-05 16:33:15
159
原创 极简介绍spring的循环依赖解决方案
6、首先会将涉及循环依赖的beanName存到一个set中,回到bean创建时发觉在set中,那就启用二级缓存,回到第4步,将实例化后的Aput到二级缓存,转而B创建要A时,二级缓存的map get(A)直接拿到一个未完整的A赋值给B,完成B的创建进而让A也能完成创建。9、如果只是二级缓存,AOP代理会导致在创建A时map.get(A)拿到的ObjectFactory再get()出来的A实例地址 与创建B时装配A时map.get(A)再get()得到的A的实例地址不一致。第一个map是完整可用的map。
2023-06-17 10:58:34
226
原创 我是如何学习IT技术的
我最近在学的应该是Java相关、计算机系统相关、算法相关三个方向。java嘛,我的本职工作主要靠它混饭吃,那它的框架、组件、原生api与jvm相关等都有在学。计算机系统与及算法相关,则是在30岁后,想着往后的生涯前途,除了CRUD还能干嘛呢?没有一个明确的方向,就想着打好基础准没错,所以学的他们我的学习通常是通过:博客、视频、书。在上下班路上时会看技术博客,中午休息时会看下视频,晚上在家休息时,以看书为主。
2023-06-05 14:11:00
142
原创 GcRoot可达性分析随想
这时候走可达性分析算法的时候,由于当前main方法在入栈中,main内的所有变量都是可达的,那么无论minorGC还是majorGC又或fullGC都回收不了。在运行中,我们去看它的内存分配与回收:栈中被分了一块内存(main方法入栈),堆和元空间被分了内存(类信息与对象实例数据)。也就是随着程序的运行,JVM帮我们自动根据程序的代码分配内存来执行程序,与及回收没被使用的内存。由这些Gc Root经由深度优先搜索算法标记上的节点,就是可达的,是不可回收的,其余只要触发GC,就可以被回收掉。
2023-05-18 13:24:00
193
原创 由类加过载开始,说道说道JVM的内存分配与回收(未排版)
这里我们只关注【当前栈桢局部变量指向的对象】(大部份的回收都是这个),在13行时,这一刻栈的内存部局如上图。在进行内存回收进行对象是否可用的标记时,由于栈桢中main方法内的局部变量dao恰好就是GcRoot的数据,表明对象还在被引用中,所以它不会被回收。到得main方法都出栈后,GcRoot可达性分析扫描时,会发觉栈桢是空的,没有gcroot的数据了,那么dao堆实例如果触发gc就会被回收掉。之后根据对象在内存中的排列是不是规整的,规整的就指针碰撞,否则就空闲列表来为对象分配内存。
2023-05-13 11:32:41
109
原创 动态代理远程方法调用,返回的结果不一致问题处理
由于客户提供的工具类叫RemoteProxy,固名思义是远程动态代理嘛,可能用了AOP增强,或者可能是多线程线程安全问题导致的返回结果不一致。我写的测试用例验证通过,在布署到客户的测试环境的时候,每当跑到这个工具类的方法调用就报$Proxy can not be cast to XXX类型异常。我的项目是由于这个热布署的依赖导致,我由于偷懒直接去掉这个依赖就ok,网上应该还有保留这个依赖依然解决类加载器不一致的方案,看官们如有需要请自行百度。明明断点到方法内部的最后一步,显示返回的结果是【true】。
2023-03-22 18:51:14
266
原创 com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
druid
2022-12-24 15:21:44
8662
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1