架构师
文章平均质量分 69
鱼跃鹰飞
大厂小架,喜欢探索,住在海边喜欢浪!
展开
-
大厂面试真题-说一说CyclicBarrier、CountDownLatch和Semaphore
CyclicBarrier、CountDownLatch和Semaphore是Java并发包java.util.concurrent中提供的三个重要的同步工具,它们各自具有独特的功能和使用场景。原创 2024-10-12 13:48:15 · 215 阅读 · 0 评论 -
大厂面试真题-说说AtomicInteger 线程安全原理
Java 高并发核心编程 卷 2(加强版):多线程、锁、JMM、JUC、高并发设计模式。的原理比较复杂,简单地说,该关键字可以保证任何线程在任何时刻总能拿到该变量的最。至于什么是变量的线程可见性,具体请参见第。新值,其目的在于保障变量值的线程可见性。关键字用于保障变量的可见性,二者。变量操作的线程安全性,又避免了。相结合的方案实现,既保障了。用于保障变量操作的原子性,源码为例分析一下原子类的。方式赋值,直到成功返回。源码中的主要方法都是通过。声明:本文来源于网络。重量级锁的高开销,使得。原创 2024-10-08 21:47:00 · 419 阅读 · 0 评论 -
Tomcat为什么要打破双亲委派?怎么保证安全
对于JRE基本类和JavaEE API类的处理:对于JRE基本类(如Java标准库类),Web应用程序类加载器不能覆盖,这是为了保证Java核心类的一致性和稳定性。当使用双亲委派模型时,容器的类加载器会先尝试加载共享类库,导致Web应用程序中提供的同名类无法被正确加载,从而产生类加载冲突。有些Web应用程序可能需要加载自定义的类或资源,而不希望受到容器类加载器的限制。代码审查和权限控制:开发者和管理员需要仔细审查和测试自定义的类加载器,确保其加载的类是可信的,并配置适当的权限来限制对敏感资源的访问。原创 2024-09-30 22:26:25 · 394 阅读 · 0 评论 -
大厂面试真题-Synchronized和ReentrantLock怎么选
Synchronized和ReentrantLock怎么选?在选择和时,我们需要考虑多个方面,包括它们的特点、性能、以及具体的使用场景。原创 2024-09-30 11:37:53 · 499 阅读 · 0 评论 -
大厂面试真题:G1比CMS好在哪?一定好吗
这个题我先说以下G1也未必就比CMS要好当堆内存大于6G时,使用G1垃圾回收器相较于CMS(Concurrent Mark-Sweep)垃圾回收器,通常会有更好的性能和可预测性。原创 2024-09-29 18:30:34 · 765 阅读 · 0 评论 -
面试真题-TCP的四次挥手
如果客户端(主动关闭方)最后一次 ACK 报文(第四次挥手)在网络中丢失了,那么按照 TCP 可靠性原则,服务端(被动关闭方)会重发 FIN 报文。假设客户端没有 TIME_WAIT 状态,而是在发完最后一次回 ACK 报文就直接进入 CLOSE 状态,如果该 ACK 报文丢失了,服务端则重传的 FIN 报文,而这时客户端已经进入到关闭状态了,在收到服务端重传的 FIN 报文后,就会回 RST 报文。原创 2024-09-17 18:51:04 · 1077 阅读 · 0 评论 -
面试真题-TCP的三次握手
TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。面向连接:一定是「一对一」才能连接,不能像 UDP 协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的;可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端;字节流:用户消息通过 TCP 协议传输时,消息可能会被操作系统「分组」成多个的 TCP 报文,如果接收方的程序如果不知道「消息的边界」,是无法读出一个有效的用户消息的。原创 2024-09-17 18:22:34 · 1719 阅读 · 0 评论 -
Kafka关键点总结-消息的顺序性
需要注意的是,Kafka不能保证不同分区之间的消息顺序,因为分区是独立的存储单元。为了实现全局的消息顺序,生产者需要在发送时按照顺序将相关消息发送到同一个分区,而消费者需要订阅相同分区,并确保单一的消费者实例来处理消息。这将在分区级别保证消息的顺序性,但不会跨分区保证。:使用单一的消费者实例来处理一个分区内的消息可以确保消息按照发送顺序进行处理。:为了保证消息的顺序性,消费者可以选择订阅主题的特定分区,而不是订阅整个主题。这样,它将仅从一个分区读取消息,并且这个分区内的消息是有序的。原创 2023-09-19 15:34:05 · 567 阅读 · 0 评论 -
JMM内存模型(Java多线程内存模型不是Java虚拟机内存模型)
这个程序中如果要保证修改立马生效的话就需要对于变量initFlag加上volitiel的关键字(保证可见性)加volitile之前的整体流程(对应于上面的那段代码),write的实际是方法结束前。加了volitile就会有lock这个关键字,如果没有volitile就没有。lock修饰的代码前后左右不能重排序。原创 2022-12-05 18:15:00 · 62 阅读 · 0 评论 -
某大厂线上JVM参数(CMS+ParNew)参数解析
参数后,CMS在执行Remark阶段之前,会先执行一次年轻代的垃圾收集(CMS来执行这次新生代的垃圾回收,而不是ParNew)。参数的作用是在CMS的"Remark"阶段(重新标记阶段)之前执行一次年轻代的垃圾收集(Scavenge)。一般来说,这个参数通常在特定的性能调优场景下使用,而不是在普通应用程序中启用,因为它可能会导致垃圾收集操作的复杂性增加,可能会影响应用程序的性能。-XX:+UseConcMarkSweepGC 启用了 CMS 垃圾收集器,它是一种并发垃圾收集器,用于老年代的垃圾回收。原创 2023-09-17 15:57:00 · 214 阅读 · 0 评论 -
Java中的垃圾回收
从原理到调优实战,CMS相关面试题,G1和CMS的优缺点原创 2022-12-14 20:20:07 · 364 阅读 · 0 评论 -
ThreadLocal有内存泄漏问题吗
这是我们实际工作中可能面临的问题,如果ThreadLocal对象因为GC被回收了,也就是对应的key失去了引用,变成了null,那value也就无法访问了,如果我们使用的是new出来的线程,等线程执行结束了也就会被整体回收掉了,但是如果使用的是线程池那线程的空间就不会被回收,所以需要自己在使用完ThreadLocal对象后及时调用remove方法,移除Entry即可。key的是ThreadLocal对象,因为是弱引用,GC的时候就可以被回收掉,所以key的内存泄漏问题通过弱引用的设计就解决了。原创 2023-08-02 06:34:38 · 504 阅读 · 0 评论 -
ConCurrentHashMap常见面试题
在线程安全方面,如果存储元素的计算结果为空,会使用CAS来设置该节点,如果不为空就会使用synchronized加锁来实现,遍历桶中的元素,替换或者新增元素到桶中,最后判断是否需要转为红黑树(链表长度大于8并且数组的长度大于64的时候,链表升级为红黑树的结构),整个过程相当于只对头结点进行了加锁,比Segment加锁力度更小,发生加锁和hash冲突的频率也更低了,并发场景下性能更高,因为使用了红黑树,数据量比较大的时候查询性能更好。关于1.8中的一些核心方法可以查看我的另一篇关于源码分析的文章。原创 2023-08-02 05:50:08 · 493 阅读 · 0 评论 -
分层架构简介
DCI架构模式是架构设计层面的方法论,在DCI架构模式中,把数据对象和通用对象进行抽取,这部分可能只有get set 排序 分页、对象的创建和销毁等一些逻辑,是属于贫血模型。四层架构是非严格的分层架构,每一个层级不会严格它可以调用的层级,而是对于它下面的层级都可以进行调用(从上到下依次是1,2,3,4层,这里说的下指的是数字越大,例如用户层不仅可以访问应用层,还可以访问领域层和基础设施层)4.由于Spring的存在(MVC的主要推崇者),其实我们的开发是不符合面相对象的。五层架构的变体:六层架构。原创 2023-07-02 16:31:52 · 569 阅读 · 0 评论 -
SpringCloud踩坑系列:Mybatis的Mapper报错
SpringCloud学习过程中踩坑的记录:全部原创,全部来自真实的实践总结,与网上那些复制的不同,转发请注明出处,谢谢原创 2023-05-10 07:54:50 · 2281 阅读 · 0 评论 -
MySQL的两阶段提交
为什么需要两阶段提交?要理解这个问题,先要理解redo log 和 binlog 有什么区别?这两个日志有四个区别。相关问题:如果不小心整个数据库的数据被删除了,能使用 redo log 文件恢复数据吗?不可以使用 redo log 文件恢复,只能使用 binlog 文件恢复。因为 redo log 文件是循环写,是会边写边擦除日志的,只记录未被刷入磁盘(主库磁盘)的数据的物理日志,已经刷入磁盘的数据都会从 redo log 文件里擦除。原创 2023-03-22 07:49:00 · 2026 阅读 · 0 评论