- 博客(82)
- 收藏
- 关注
原创 面试总结(mysql定精度/oom排查/spring三级缓存/stream流)
假设一个字段为DECIMAL(3,0),当我们存入100时,实际上存入的1、0、0这三个字符拼接而成的字符串的二进制值,由于一个数字字符占用1个字节,所以共占用三个字节的空间。HTTP通过短暂的请求-响应方式进行通信,每次请求都需要建立一个新的TCP连接。而WebSocket在建立连接后,可以保持持久的双向通信连接,避免了频繁建立和关闭TCP连接的开销。数据格式:HTTP协议通常使用JSON、XML等格式来传输数据,而WebSocket可以传输任意格式的数据,包括文本和二进制数据。4、Spring事务。
2023-10-10 22:23:37
373
原创 Kafka和RabbitMQ的对比
如果是较少的事件(2万以上/秒)并且需要通过复杂的路由逻辑去找到消费者、你希望消息传递是可靠的、并不关心消息传递的顺序、而且需要现在就支持集群-节点级别的高可用就可以考虑rabbitmq。如果有大量的事件(10万以上/秒)、你需要以分区的,顺序的,至少传递成功一次到混杂了在线和打包消费的消费者、希望能重读消息、你能接受目前是有限的节点级别高可用就可以考虑kafka。但是他们对消息语义模型的定义的假设是非常不同的。Rabbitmq比kafka可靠,kafka更适合IO高吞吐的处理,比如ELK日志收集。
2023-10-09 22:01:41
665
原创 Spring相关知识
Component用于声明通用的Bean,@Repository用于声明DAO层的Bean,@Service用于声明业务层的Bean,@Controller用于声明视图层的控制器Bean,被这些注解声明的类就可以被容器扫描并创建。如图中所示,Spring对singleton作用域的Bean和prototype作用域的Bean所负责的生命周期是不一样的,对于singleton作用域的Bean,Spring 能够精确地知道该 Bean 何时被创建,何时初始化完成,以及何时被销毁。
2023-08-22 15:54:50
247
原创 Redis缓存读写策略(三种)数据结构(5+3)
举例:请求 1 先写数据 A,请求 2 随后读数据 A 的话,就很有可能产生数据不一致性的问题。当你这样回答之后,面试官可能会紧接着就追问:“举例:请求 1 先读数据 A,请求 2 随后写数据 A,并且数据 A 在请求 1 请求之前不在缓存中的话,也有可能产生数据不一致性的问题。。解决办法:可以将热点数据可以提前放入 cache 中。
2023-08-14 23:38:49
608
原创 计算机网络
1):主要是指具体的物理媒介和物理设备2):负责在物理层面上传输数据3):负责在不同网络之间传输数据,实现了不同网络之间的互联4):提供端到端的可靠数据传输和错误恢复功能任务:负责为两个主机中进程之间的通信提供服务。传输单位:报文段(TCP)或用户数据报(UDP)代表协议:TCP、UDP5):直接为应用程序提供服务的层OSI 七层网络协议模型就是把应用层继续细分成了:会话层 + 表示层 + 应用层三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是。
2023-07-06 16:29:09
1670
原创 FuLLGC模拟及结果流程
ThreadLocalMap中一个大对象,处理另一个业务的时候,又一个线程存放到ThreadLocalMap中一个大对象,但是这个线程由于是线程池创建的他会一直存在,不会被销毁,这样的话,以前执行业务的时候存放到ThreadLocalMap中的对象可能不会被再次使用,但是由于线程不会被关闭,因此无法释放Thread 中的ThreadLocalMap对象,造成内存溢出。就是说如果使用了线程池并且设置了固定的线程,处理一次业务的时候存放到。,但是如果使用了线程池的话,就依赖于线程池的实现,如果。
2023-07-06 15:59:32
285
原创 Volatile/synchronized/ReentrantLock
(5条消息) 深度剖析 Synchronized 锁升级过程_P@ssW0rd的博客-CSDN博客 synchronized在jdk1.6之后为什么要加入锁升级的机制?答案:因为在之前的版本中synchronized一定是重量级锁,而重量级锁时需要通过内核态去实现的,而用户态到内核态的切换很费时,但在程序具体执行中synchronized修饰的对象在线程争抢不激烈时并不需要重量级锁,所以加入锁升级机制后,偏向锁和轻量级锁在代码层面就可以解决,不需要进入内核态处理。 synchronized锁升级过程记录锁状
2023-06-15 22:49:39
749
原创 Spring内容
代理对象是为了实现AOP,执行切面逻辑,会将前面的普通对象赋值给代理对象中的Target对象,图中的是代理类,代理类是由spring生成的,代理类对应的对象是普通对象的代理对象,最终放到Map中的是代理对象,其中target是真正的普通对象。5、Spring事务 @Transactional ,只有代理对象才会判断此注解是否有效,而代理对象是由spring创建的,具体内部执行的方法还是普通对象的方法,事务很多时候会发生失效。8、Spring容器启动流程是怎杨的?Spring中的事务是如何实现的?
2023-06-08 23:03:29
502
原创 消息队列内容
消息队列是一个存放消息的容器,消息队列是分布式系统中重要的组件之一,使用消息队列主要是为了通过异步处理提高系统性能和流量削峰降低系统的耦合性。
2023-05-30 22:33:03
508
原创 JVM(HotSpot)
元空间的本质和永久代类似,元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。程序执行中当Eden放满之后会出发minor gc,清理内存,此时会清理所有区的内存,如果eden中的对象被标记为非垃圾,则分代年龄+1,并移到suivivor区, 本身就在suivivor区的如果依旧存或,分代年龄+1。指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错OOM,即所谓的内存溢出。
2023-05-26 17:19:53
853
原创 JUC-JMM模型、CAS、AQS
AQS的核心思想是,如果被请求的共享资源是空闲的,则设置当前请求此资源的线程为有效的工作线程,并将共享资源上锁。但如果被请求的资源被占用,那么久需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制AQS是用CLH队列锁实现的。【CLH队列时虚拟的双向队列,AQS将等待的线程封装成一个CLH队列的Node节点实现锁的分配,通过CAS、自旋、LockSupportpark的方式,维护state变量状态,使并发达到同步效果】锁和同步器的关系:锁,面向使用者,调用即可、同步器,面向锁的实现者。
2023-05-25 17:02:53
719
原创 并发知识杂谈
在JAVA语言层面,怎么保证线程安全?有序性:使用happens-before原则可见性:可以使用 volatile 关键字来保证,不仅如此,volatile 还能起到禁止指令重排的作用;另外, synchronized 和 final 这俩关键字也能保证可见性。原子性:可以使用锁 和 包中的原子类来保证。首先,大家应该已经知道,JMM 中不仅有主内存,每个线程还有各自的本地内存。每个线程会先更新自己的本地内存,然后再同步更新到主内存。那如果多个线程都想要同步更新到主内存怎么办呢?CAS 就是用来保证这种
2023-05-24 21:45:19
873
原创 JAVA集合
常用方法:add() 添加元素、size() 获取集合中元素的个数、addAll() 把一个集合的元素添加到一个新的集合isEmpty() 判断当前集合是否为空,判断的是集合中是否有元素、contains() 判断是否包含containsAll() 判断集合coll1中是否包含coll集合中的所有元素、remove() 删除指定元素removeAll() 删除当前集合中包含另一个集合中的所有元素。
2023-05-24 14:47:21
735
原创 JAVA基础(各种类)
3、clone()方法详解:深拷贝和浅拷贝,深拷贝会将引用类型(指的是有其他定义的类,例如学术类、学校类等)一同克隆,但浅拷贝并不会。只能通过getRuntime()方法来获取运行环境对象,因为其构造方法是private修饰的,不允许直接调用,只能通过getRuntime()来返回。clone()方法:需要继承Clonable接口,并覆写clone(),修改为public权限,原来为protected。(3) freeMemory():该方法用于返回Java虚拟机中的空闲内存量,以字节为单位。
2023-05-23 11:14:37
425
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人