- 博客(74)
- 收藏
- 关注
原创 深入理解JVM读书笔记与实战_01_Java内存区域与内存溢出异常
程序的过程中会把所管理的内存划分为若干个不同的数据区。如果是线程共享的,则考虑线程安全;如果是线程私有的,则不用考虑线程安全。不是,栈内存分配的越大,每个线程所占的内存也就大,并发量越低。栈帧过多导致内存溢出,递归调用,方法自己调用自己。不会,方法调用完之后会被自动弹出方法栈。图形界面工具,多功能检测,可连续监测。查看当前系统中有哪些Java进程。栈帧过大导致内存溢出,不太常见。
2023-05-13 21:18:58
774
原创 Redis实现分布式锁详细解读
我们在学多线程的时候遇到过,这种锁主要应用于多线程竞争资源。如果是多进程竞争资源的话就需要引入分布式锁的概念了。比如在微服务架构中,多个用户进程修改同一条数据且只能有一个用户修改成功,就需要用到分布式锁,今天我们就来讲讲如何用redis来实现分布式锁。
2023-05-07 17:01:46
1035
2
原创 com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hib
根据出现的几种情况做一下总结:第①种:重点在这:解决方法:第②种:报错原因:是因为在实体类中 发现有字段为,在转化成的时候,将对象转换为报错解决办法:在实体类上类上加上一个注解,即可解决此错误
2023-05-01 09:14:02
1577
原创 ConcurrentHashMap源码剖析03_addCount()方法详解
【代码】ConcurrentHashMap源码剖析03_addCount()方法详解。
2023-04-23 10:14:26
213
原创 ConcurrentHashMap源码剖析02_putVal()方法详解
【代码】ConcurrentHashMap源码剖析02_putVal()方法详解。
2023-04-22 15:45:44
164
原创 HashMap源码剖析02_put()方法、putVal()方法详解
【代码】HashMap源码剖析02_put()方法、putVal()方法详解。
2023-04-19 21:06:52
167
原创 HashMap源码剖析01_核心属性、构造方法详解
Hash也称散列、哈希。Hash的基本原理就是把任意长度的输入,通过哈希算法转化为固定长度的输出。这个映射规则对应的就是哈希算法,而原始数据映射后的二进制串就是哈希值。
2023-04-19 20:17:02
195
原创 ReetrantLock源码剖析_03公平锁、非公平锁
方法,这个方法就是用来判断同步队列中是否存在比当前线程先入队的线程,公平锁需要遵循一个先来后到,而非公平锁不会遵守秩序,直接加锁。如果非公平锁加锁失败,程序就和公平锁的执行顺序类似了。非公平锁对锁的竞争是抢占式的,而且可以两次获取锁,这就提高了获取锁的可能性。失败了,就说明,当前环境中有其他线程正在争夺锁,并且当前线程加锁失败。成功,就直接将锁的持有者设置为当前线程,体现了非公平锁的非公平性。与公平锁不同的是,非公平锁的加锁是通过调用。就以公平锁的方式进行工作,因此当。以公平锁方式进行加锁时,调用的时。
2023-04-19 19:58:51
443
原创 Java并发基石_CAS原理实战02_CAS实现原理
CAS,全称,比较并替换。CAS包含了三个操作数,内存位置值V,期望值A,新值B,如果内存位置值V与期望值A匹配,处理器就将内存位置值更新为新值B,否则不做任何操作。无论发生哪种情况,它都会在CAS指令之前返回该位置的值。类中提供了对CAS操作的支持/**/**/**表示要操作的对象表示要操作对象中属性地址的偏移量表示期望值表示新值CAS操作需要在操作值的时候判断值有没有变化,如果没有变化则更新。但是如果一个值原来是A,在CAS方法执行之前,另一个线程先把A的值修改为B,然后又修改为A。
2023-04-18 15:55:42
538
原创 Java并发基石_CAS原理实战01_CAS机制入门
开发一个网站,对访问量进行统计,用户每发送一次请求,访问量就+1,模拟有100个人同时访问,并且每个人对网站发起10次请求,所以理论上访问量应该是1000。
2023-04-18 09:23:18
235
原创 RabbitMQ高级特性------TTL
单位也是毫秒,如果对消息和整个队列都设置了过期时间那么就以短的为主。当消息到达指定存活时间之后还没有被消费,那么消息就会被清除。,单位是毫秒,会对整个队列消息同一过期。设置过期时间,也可以对。
2023-04-13 15:32:07
264
原创 RabbitMQ高级特性------消费端限流
假如,到达后端的请求数据量很大,处理不过来,并且在处理的过程中可能会发生问题,就需要一个。的消息,只有这些消息被正确处理了,才会继续从消息队列中拿取消息并进行处理。消息,只有当这条消息被正确处理之后,才会继续从消息队列中提取消息。消费端限流机制的内在原理:每次处理。配置prefix的数量:比如,比如。可以起到一个削峰的作用,那。,就说明,消费者每次读取。来保证业务被正常处理。采用手动确认机制,配置。是怎么进行削峰的呢?
2023-04-12 20:30:47
390
1
原创 RabbitMQ高级特性------Consumer Ack
这种处理方式不安全,因为消息被接受了但是业务没有处理成功,那么就会造成消息丢失。所以在业务中,我们最好选用手动确认的方式,以免发生问题,导致消息丢失。接收到,那么则自动确认收到,并将相应的。也是同样的,需要先设置相应的属性。消息队列,消息队列,消息队列!如果没有被接收到,调用。”,自动确认是指消息一旦被。
2023-04-12 20:11:38
242
原创 模板方法模式详解
的资源不够,所以你又去了掘金,你也没有掘金账号。模板方法减少了冗余的代码,用在spring的事务管理器中。,如果想实现不同的行为,就需要定义不同的子类,导致类的。上来找资源,假设你之前连个账号都没有,所以你需要先。当你学了一会儿,你发现。假如有一天,你突发奇想想学习,所以你就去。下面我们就用模板方法来模拟一下这个过程。模板方法设计模式定义了一个算法的。:在不改变骨架的前提下重写方法。是不能被改变的,也就是方法。模板方法设计模式也有一个。一个账号,然后在登陆页面。输入你的帐号以及密码。
2023-04-12 19:55:31
640
1
原创 自投递简历以来的第一次面试
投完简历之后HR小姐姐接着就安排了面试,原定时间是今天下午六点,我五点五十进的会议,结果等到六点二十(真的有点不耐烦了说实话)面试官打电话过来了说网络不是很好,所以改成电话面试了。面试官说简历上写的技术只会一些皮毛(我连忙说我确实对技术了解的比较少),但是通过问题能看出我编程基础比较扎实,还说因为我是在校学生,所以更看重编程基础。9、哈希冲突问题(先回答了链地址,引入到hashmap,然后说了hashmap1.7和1.8中的区别,红黑树balabala)只记得这些,,第一次面试太紧张忘了录音了,,,
2023-04-11 19:27:13
1225
4
原创 你还还还没学会RabbitMQ?-----------RabbitMQ详解及快速入门(工作模式)
消息队列,是在消息的传输过程中保存消息的容器,多用于分布式系统之间通信。
2023-04-11 10:05:14
396
5
原创 工厂模式详解(简单工厂模式)
使用工厂来生产对象,生产对象的时候只需要和工厂打交道就可以了,不需要和具体的类进行耦合,达到。:(你去4S店里买汽车,然后4s店告诉汽车工厂生产什么样的汽车)“我一路向北,离开有你的季节;其实就是4S店去生产汽车的地方运汽车过来然后向客户卖出去。:提供了创建产品的方法,调用者通过该方法来创建产品。:定义了产品的规范,描述了产品的主要特性和功能。:实现或者继承抽象产品的子类。说实话,其实我最喜欢的还是。就是基于工厂模式实现的。哈哈哈哈哈哈哈哈哈哈哈。中,对象的创建就是通过。先来一个买汽车的案例。
2023-04-09 20:13:41
329
原创 HashMap面试题-------深入理解HashMap集合(负载因子、哈希冲突、与HashTable的区别)
loadFactor:即我们常说的负载因子,它表示HashMap的疏密程度。负载因子主要与HashMap的扩容有关,先来说说扩容。当我们初始化一个HashMap时,数组的大小默认是16HashMap中还有一个临界值值,临界值 = 数组大小 * 负载因子,当数组大小为16的时候,临界值 =,临界值的作用就是告诉HashMap何时扩容。也就是说,当加入HashMap的元素个数等于12的时候,HashMap会进行扩容,变成原来的两倍,即32。下一次发生扩容的时候,临界值等于32*0.75=24。
2023-04-09 17:03:56
507
6
原创 JVM常见面试题汇总(运行时数据区、类加载机制、JMM、synchronized、偏向锁、轻量级锁、锁自旋、锁消除)
本文包含了JMM、类加载机制、synchronized、运行时数据区、锁的相关知识,可用于面试以及学习
2023-03-26 16:52:18
466
2
原创 Java实习生------JVM中的垃圾回收算法以及CMS、G1收集器⭐⭐⭐
标记-清除算法:首先标记出所有需要回收的对象,标记完成以后,统一回收掉所有被标记的对象。标记清除算法是最基础的收集算法。执行效率不稳定,标记和清除两个过程的执行效率随着对象数量的增长而降低;会产生内存碎片,内存碎片太多可能导致无法分配较大对象而不得不重新触发一次垃圾收集回收之前:(紫色代表需要被回收的对象)标记-复制算法:将可用内存划分为相等的两块,每次只使用其中的一块,如果其中的一块用完了,就将还存活着的对象复制到另外一块上,然后再把已经使用过的内存一次清理掉;
2023-03-26 11:42:34
612
2
原创 Java实习生------JUC并发编程面试题打卡(synchronized、volatile)⭐⭐⭐
volatile读的内存语义是:当读一个volatile变量时,JMM会把该线程对应的本地内存置为无效,线程接下来需要到主内存中读取变量;ThreadLocal是线程变量,ThreadLocal中所填充的变量只属于当前线程,对其他线程而言是隔离的,ThreadLocal为变量在每个线程中都创建了一个变量副本,每个线程可访问自己内部的变量副本。在多线程的环境下,当有多个线程对单个变量进行操作时,具有排他性,即当多个线程同时对该变量的值进行更新时,只有一个线程能操作成功,未成功的线程会继续尝试,直到成功为止。
2023-03-24 15:44:13
371
原创 Java实习生------JUC并发编程面试题(ConcurrentHashMap、BlockingQueue、ReetrantLock、semaphore)附源码解析⭐⭐⭐
JUC并发编程面试题汇总,CopyOnWriteArrayList等源码解析
2023-03-23 16:11:53
249
原创 Java实习生------JUC并发编程(多线程)10道面试题打卡⭐⭐⭐
它认为多线程同时修改资源的概率比较高,很容易出现冲突,所以它在访问资源之前需要先加锁,synchronized就是基于这种思想;主要用于写比较多的情况它会先修改资源,再验证这段时间内有没有其他线程正在修改资源,如果没有,那么操作完成;如果有,就放弃本次操作;因为它全程没有加锁,所以又叫无锁编程;主要用于多读或者加锁成本比较高的场景版本号机制:在数据表中添加了version字段,表示数据被修改的次数。当数据被修改时,version加1。
2023-03-22 14:13:07
365
原创 Java实习生------Redis常见面试题汇总(AOF持久化、RDB快照、分布式锁、缓存一致性)⭐⭐⭐
redis面试题,AOF持久化、RDB快照、分布式锁、缓存一致性。
2023-03-20 21:03:13
1033
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人