中介者模式
美团一面:有在⼯作时间中使⽤过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
说下你在使用索引上遇到的一些问题?\365天学习打卡65阳光下的喵20210829索引的出现是为了提高查询效率,但是使用索引也存在一些常见的思维误区:用索引和用索引快速查询是有区别的,查询SQL经常提到全表扫描效率低,这个全表扫描默认指主键索引全表扫描,实际操作中非聚簇索引也存在全表扫描;覆盖索引简单点理解就是查询的条件和要查询的值都在同一颗索引树上这种现象称为覆盖索引可以通过执行计划查看,和索引
说下MySQL最左匹配原则知道吗?每天一道面试题46悟空拧螺丝20210828最左优先,以最左边的为起点任何连续的索引都能匹配上。同时遇到范围查询(、<、between、like)就会停止匹配。比如有联合索引a、b、c,where过滤条件中哪些排列组合可以用到索引?(比如这种:wherea=xxxb=xxxandc=xxx)以下排列组合都会走索引:a、ab、ac、ba、ca、abc、acb、bac
说下MySQL回表?每天一道面试题49悟空拧螺丝20210902回表查询:先到普通索引上定位主键值,再到聚集索引上定位行记录,它的性能较扫一遍索引树低(一般情况下)。详细说明:一般我们自己建的索引不管是单列索引还是联合索引,都称为普通索引,相对应的另外一种就是聚簇索引。每个普通索引就对应着一颗独立的索引B+树,索引B+树的节点仅仅包含了索引里的几个字段的值以及主键值。根据索引树按照条件找到了需要的
一、说下MySQL的redolog和binlog?每天一道面试题35悟空拧螺丝20210816(1)MySQL分两层:Server层和引擎层。区别如下:Server层:主要做的是MySQL功能层面的事情。Server层也有自己的日志,称为binlog(归档日志)引擎层:负责存储相关的具体事宜。redolog是InnoDB引擎特有的日志。(2)redolog是物理日志,记录的是“在某个数据页上做了什
PassJava(佳必过)项目全套学习教程连载中,关注公众号悟空聊架构第一时间获取。文档在线地址: www.passjava.cn如何监控线程池用一个printStats方法实现了最简陋的监控,每秒输出一次线程池的基本内部信息:JAVAprivatevoidprintStats(ThreadPoolExecutorthreadPool){Executors.newSingleThreadSched
PassJava(佳必过)项目全套学习教程连载中,关注公众号悟空聊架构第一时间获取。文档在线地址: www.passjava.cn如何优雅地终止线程线程池提供了两个方法来终止线程:shutdown()和shutdownNow()。shutdown()方法是一种很保守的关闭线程池的方法。线程池执行shutdown()后,就会拒绝接收新的任务,但是会等待线程池中正在执行的任务和已经进入阻塞队列的任务都
Java线程池有哪几种?通常开发者都是利用Executors提供的通用线程池创建方法,去创建不同配置的线程池,主要区别在于不同的ExecutorService类型或者不同的初始参数。Executors目前提供了5种不同的线程池创建配置:(1)newCachedThreadPool(),它是一种用来处理大量短时间工作任务的线程池,具有几个鲜明特点:它会试图缓存线程并重用,当无缓存线程可用时,就会创建
线程池中的阻塞队列有哪几种?阻塞队列用于保存等待执行的任务。当任务的数量超过corePoolSize数量,后续的任务将会进入阻塞队列,阻塞排队。有以下几种阻塞队列:ArrayBlockingQueue是一个基于数组结构的有界阻塞队列,此队列按FIFO(先进先出)原则对元素进行排序。!(https://s4.51cto.com/images/blog/202204/22075826_6261efa2
Java线程池的原理知道吗?线程池的好处降低资源消耗。重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果频繁创建,会消耗系统资源,降低系统稳定性,使用线程池统一分配、调优和监控。线程池有核心参数:1.maximumPoolSize:最大线程数。线程池允许创建的最大线程数。2.corePool
什么是Java内存模型?!原理图1Java内存模型(https://s4.51cto.com/images/blog/202204/20224655_62601cdf36da892559.png?xossprocess=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,
ABA问题:因为CAS需要在操作值的时候,检查值有没有发生变化,如果没有发生变化则更新,但是如果一个值原来是A,变成了B,又变成了A,那么使用CAS进行检查时会发现它的值没有发生变化,但是实际上却变化了。解决方案:ABA问题的解决思路就是使用版本号。在变量前面追加上版本号,每次变量更新的时候把版本号加1,那么A→B→A就会变成1A→2B→3A。从Java1.5开始,JDK的Atomic包里提供了一
并发编程中的CAS原理知道吗?PassJava(佳必过)项目全套学习教程连载中,关注公众号悟空聊架构第一时间获取。文档在线地址: www.passjava.cn原子整型类AtomicInteger的getAndIncrement方法就用到CAS。比如这一段代码:SHatomicInteger.compareAndSet(10,20);调用atomicInteger的CAS方法,先比较当前变量ato
有哪些与Redis交互的操作?面试者小空听到这题后,窃喜,这题简单,不假思索地回答:键值对的读和写。面试官面无表情的说道:还有吗?小空支支吾吾的没有答上来。面试官继续说:和Redis实例交互的对象分别有四种:客户端、磁盘、主从节点、切片集群实例。这些对象和Redis交互时,有不同的操作:客户端对象会有网络IO交互、键值对增删改查操作、数据库操作。磁盘对象会有生成RDB快照、记录AOF日志、AOF日
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号