大家好,我是悟空。ConcurrentLinkedQueue是由链表结构组成的线程安全的先进先出无界队列。如下图所示:!ConcurrentLinkedQueue原理(://s2.51cto.com/images/blog/202210/22182633_6353c5596325a70324.png?xossprocess=image/watermark,size_14,text_QDU
MyBatis自定义缓存MyBatis自定义缓存概述当MyBatis二级缓存不能满足要求时,可以使用自定义缓存替换。(较少使用)自定义缓存需要实现MyBatis规定的接口:org.apache.ibatis.cache.Cache。这个接口里面定义了7个方法,我们需要自己去实现对应的缓存逻辑。!(https://s2.51cto.com/images/blog/202210/21132529_63
MyBatis二级缓存MyBatis二级缓存概述MyBatis的二级缓存相对于一级缓存来说,实现了SqlSession之间缓存数据的共享,同时粒度更加的细,能够到namespace级别,通过Cache接口实现类不同的组合,对Cache的可控性也更强。MyBatis在多表查询时,极大可能会出现脏数据,有设计上的缺陷,安全使用二级缓存的条件比较苛刻。在分布式环境下,由于默认的MyBatisCache实
一、MyBatis缓存中的常用概念MyBatis缓存:它用来优化SQL数据库查询的,但是可能会产生脏数据。SqlSession:代表和数据库的一次会话,向用户提供了操作数据库的方法。MappedStatement:代表要发往数据库执行的指令,可以理解为是SQL的抽象表示。Executor:代表用来和数据库交互的执行器,接受MappedStatment作为参数。namespace:每个Mapper文
大家好,我是悟空。Eureka注册中心系列文章汇总:领导让我研究Eureka源码启动过程(://mp.weixin..com/s?__biz=MzAwMjI0ODk0NA&mid=2451959387&idx=1&sn=a6f50e0693be1ce54e68d777b525bcef&chksm=8d1c17c4ba6b9ed2137e2f0c166c438a2a86af6458503
Eureka注册中心系列文章汇总:领导让我研究Eureka源码启动过程(://mp.weixin..com/s?__biz=MzAwMjI0ODk0NA&mid=2451959387&idx=1&sn=a6f50e0693be1ce54e68d777b525bcef&chksm=8d1c17c4ba6b9ed2137e2f0c166c438a2a86af64585039760d062a
上一讲我们讲到Eureka的启动过程,这次我们来分析客户端是如何注册的。领导让我研究Eureka源码启动过程(https://mp.weixin.qq.com/s?__biz=MzAwMjI0ODk0NA&tempkey=MTEzNF9YemY2VGlUTkwxaUxycTFMZkdVZWNaem4tc0pfYVdkdEJhNEhBWllwQVJTRTlwZG9USVBMcFBrd3ZOc3FHN
Eureka源码之启动过程大家好,我悟空。最近在倒腾Eureka源码,因为大环境太卷了,必须得卷点源码才行,另外呢,能够读懂开源项目的源码、解决项目中遇到的问题是实力的象征,是吧?如果只是会用些中间件,那是不够的,和CRUD区别不大。话不多说,源码走起。本篇是Eureka源码分析的开篇,后续会持续分享源码解析的文章。关于我多年互联网摸爬滚打经验,擅长微服务、分布式、架构设计。目前在一家大型上市公司
Eureka本地集群搭建组成Eureka注册中心集群修改本地hosts配置host文件添加两台Eurekaserver的地址映射,都为本地localhost地址SH127.0.0.1eurekaserver1127.0.0.1eurekaserver2修改EurekaServer配置两个服务互相向对方注册,第一个Eureka开放8761端口,注册到第二个Eureka的8762端口。第一个Eurek
实战Eureka服务注册、调用、集群搭建大家好,我是悟空呀之前已经写过7篇Eureka注册中心的源码剖析和理论相关的文章了,缺少一点实战。本篇会带大家做一个实战案例,涉及内容:配置服务注册到Eureka注册中心。服务之间通过注册的服务名来访问。本地如何搭建Eureka集群。本地如何搭建微服务集群。如何用Ribbon实现负载均衡。!目录(://s2.51cto.com/images/blo
被一位读者赶超,容器化部署ELKStack你好,我是悟空。被奇幻“催更”最近有个读者,他叫“老王“,外号“茴香豆泡酒”,找我崔更ELK的文章。因之前我用的是软件安装Logstash+Filebeat的方式:7000字20图一文带你搭建一套ELKStack日志平台他想知道如何用容器化部署ELK,于是我先写了一半,因为要写其他文章所以耽搁了。没想到过了几天后,老王说他已经部署好了,还写了篇文章,恐怖如
你好,我是悟空目前ES最新版8.4,我用的版本是8.3.2,都是8系列的,和7系列相比,Kibana的界面有很大的不同。Docker安装ES如果想指定分配的内存和挂载的目录,可以用下面的命令shdockerrundnameelasticsearchnetes_netp9200:9200p9300:9300eES_JAVA_OPTS="Xms1gXmx1g"e"discovery.type=sing
从单点Redis到1主2从3哨兵的架构演进之路你好,我是悟空呀本文目录如下:@toc一、前言我们有个项目用的MySQL、Redis、ES、微服务都是单节点的,没有做集群模式部署,为了提高整体的可用性,对项目的部署架构进行了升级,支持高可用。可参考之前的两篇:MySQL高可用篇(://mp.weixin..com/s?__biz=MzAwMjI0ODk0NA&mid=245196300
中介者模式
美团一面:有在⼯作时间中使⽤过jstat,jmap,mat⼯具吗?能给⼀个实际的例⼦说明⼀下吗?!(https://s4.51cto.com/images/blog/202204/22082506_6261f5e20067114131.png?xossprocess=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g
阿里一面:什么情况下触发垃圾回收?一般就分为MinorGC和FullGC两种情况。?年轻代发生垃圾回收的时机(MinorGC)当Eden区没有足够空间分配时?整堆触发垃圾回收的时机(FULLGC)当年轻代晋升到老年代的对象大小比目前老年代剩余的空间大小还要大时。当老年代的空间使用率超过某阈值时当元空间不足时(JDK1.7永久代不足)调用System.gc()时,系统建议执行FullGC,但是不必然
京东二面:讲下jvm调优思路?其实工作中,很少有机会能接触到jvm调优,大部分时间都是在写CRUD代码,但如果万一线上真的出问题了,那么再去想jvm调优就有点晚了,所以我们需要先把这部分知识储备起来。面试官思路:主要是想看下你对造成JVM性能问题有没有思考总结过。可以从三个方面说:1.工作中引起JVM性能问题的原因到底是代码问题还是JVM参数问题?2.JVM性能问题如何监控和排查?3.如何根据性能
字节二面:System.gc()和Runtime.getRuntime().gc()会做什么事情?每天一道面试题61system.gc和runtime.getRuntime().gc()会做些什么事?System.gc()在内部调用Runtime.gc()。硬要说区别的话Runtime.gc()是nativemethod。而System.gc()是非nativemethod,它依次调用Runtim
字节一面:CMS回收停顿了几次,为什么要停顿两次?cms回收为什么要停顿两次?答案:以最少的STW成本,找出要清理的垃圾。什么是STW暂停用户线程StopTheWorld为什么要STW如果不暂停用户线程,就意味着不断有垃圾的产生,永远也清理不干净;其次,因为清理垃圾用的标记清除算法,用户线程的运行必然会导致对象的引用关系发生变化,即标记的变化,,这样就会导致两种情况:漏标和错标。1.漏标:原来不是
字节二面:JVM各区域间是如何协同工作的?每天一道面试题56JVM可以分为运行时数据区以及类加载器、执行引擎、本地方法库运行时数据区包含以下部分:1.方法区:非堆2.虚拟机栈:本地方法3.本地方法栈:native方法4.堆:新生代(from、to、eden)、老年代5.程序计数器:标记当前线程所执行的位置,方便上下文切换完成以后继续执行非运行时数据区:6.类加载器:启动类加载器、扩展类加载器、系统
滴滴一面:你知道哪几种垃圾回收器,各自的优缺点?新生代收集器SerialSerial是一款用于新生代的单线程收集器,采用复制算法进行垃圾收集。Serial进行垃圾收集时,不仅只用一条线程执行垃圾收集工作,它在收集的同时,所有的用户线程必须暂停(StopTheWorld)。ParNewParNew就是一个Serial的多线程版本,其它与Serial并无区别。ParNew在单核CPU环境并不会比Ser
美团一面:说下JVM的垃圾回收算法?每天一道面试题55悟空拧螺丝20210908问题:说下JVM的垃圾回收算法?下面介绍七种回收算法:1、可达性分析算法(标记阶段)原理:可达性分析算法是以根对象集合(GCRoots)为起始点,按照从上至下的方式搜索被根对象集合所连接的目标对象是否可达。虚拟机栈、本地方法栈、方法区、字符串常量池等地方对堆空间进行引用的,都可以作为GCRoots进行可达性分析。2、标
头条一面:JVM从GC角度看,堆的分区情况?jvm从gc角度看,堆的分区情况?答:java堆从GC角度可分为老年代和新生代。其中新生代又分为Eden区和两个Survivor区(以下简称S0区和S1区)为什么要将堆内存分为两块而不是直接一个老年代就行?答:因为JAVA对象90%以上的对象都是朝生夕死的,其中GC回收的成本很高,为了提高性能所以将新生成的对象放在Eden区,将扛过多次GC的“老家伙”放
说下MySQL内部的XA分布式事务?每天一道面试题42悟空拧螺丝20210823XA是X/OpenDTP组织(X/OpenDTPgroup)定义的两阶段提交协议。MySQL本身的插件式架构导致在其内部需要使用XA事务,此时MySQL即是协调者,也是参与者。内部XA事务发生在存储引擎与插件之间或者存储引擎与存储引擎之间。例如,不同的存储引擎之间是完全独立的,因此当一个事务涉及两个不同的存储引擎时,就
说说生成唯一ID的雪花算法是怎么样的?每天一道面试题16悟空拧螺丝20210728snowflake(雪花算法):Twitter开源的分布式id生成算法,64位的long型的id,分为4部分:!snowflake算法(https://s4.51cto.com/images/blog/202204/22081912_6261f4806dcbb86078.png?xossprocess=image/w
说下主从复制原理?每天一道面试题52主从复制主要有以下流程:1.master服务器将数据的改变记录到binlog中;2.slave服务器会在一定时间间隔内对master的binlog进行检查,如果发生改变,则开始一个I/OThread请求读取master中binlog;3.同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动SQL线程
说下执行计划?每天一道面试题51在生产过程中,经常会遇到因为SQL语句导致的性能瓶颈问题,这时候就需要我们去优化SQL的执行效率;EXPLAIN语句的各个输出项指标可以帮助我们有针对性的提升查询语句的性能。const:根据主键、普通唯一索引列等值匹配查询(isnull除外),这种查询是很快的,查询速率认为是常数级别的,定义为const。ref:根据普通索引等值匹配,或isnull。(前面说的普通唯
引入undo日志、roll_pointer、trx_id三个概念:undo日志:事务回滚时恢复数据到未变更状态,每次执行增、删、改操作时都会记录变更前的原始数据到undo日志;roll_pointer属性:表记录的隐藏字段;trx_id属性:表记录隐藏字段表示事务ID;设想一个场景数据库,两个不同用户分别读取和修改同一条数据,为了保证数据的正确性;数据库需要引入读锁、写锁,在读数据加读锁禁止写操作
说下MySQL的BufferPool的工作原理?每天一道面试题39悟空拧螺丝20210820MySQL先把磁盘里面的数据加载到BufferPool中,增删改都是基于BufferPool里面的内存数据进行操作的,内存的效率比IO高很多倍。改了内存数据后,再定期刷新到磁盘。BufferPool有三大双端链表:free、flush、lru链表。free主要指向空闲缓存页。flush指向已修改的缓存页。l
说下索引条件下推(ICP)?\365天学习打卡66阳光下的喵20210830首先声明一点索引下推不是只存在关联索引中,普通索引也可以执行索引下推;一般提到索引下推条件反射的都会先想到关联索引查询;Usingindexcondition可以理解为ICP的必要不充分条件;即执行计划Extra中出现Usingindexcondition,但是SQL语句却不一定发生索引下推,usingindexcondi
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号