随笔分类 -  常见面试题

摘要:为什么会有TLAB(Thread Local Allocation Buffer)? • 堆区是线程共享区域,任何线程都可以访问到堆区中的共享数据; • 由于对象实例的创建在JVM中十分频繁,一次在并发环境下从堆区中划分内存空间是线程不安全的; • 为避免多个线程操作同一地址,需要使用加锁等机制,进 阅读全文
posted @ 2020-12-17 10:26 天宇轩-王 阅读(161) 评论(0) 推荐(0)
摘要:你了解对象分配规则吗 为新对象分配内存是一个非常严谨和复杂的任务,JVM的设计者们不仅需要考虑内存如何分配、在哪里分配等问题,并且由于内存分配算法与内存回收算法密切相关,所以还需要考虑GC执行完内存回收是否会在内存空间中产生内存碎片。 对象优先分配在Eden区,如果Eden区没有足够的空间时,虚拟机 阅读全文
posted @ 2020-12-17 10:09 天宇轩-王 阅读(170) 评论(0) 推荐(0)
摘要:Java 对象的创建过程 1.1 类加载 虚拟机遇到new指令,首先检查这个指令的参数能否在元空间的常量池中定位到一个类的符号引用,并且看这个符号引用的类是否已经被加载,解析和初始化。如果没有,那么在双亲委派模式下,查找对应的class文件。 1.2 分配内存 对象所需内存大小根据加载的类来确定,为 阅读全文
posted @ 2020-12-17 00:59 天宇轩-王 阅读(317) 评论(0) 推荐(0)
摘要:Minor GC、Major GC、Full GC Minor GC 当年轻代空间不足时,就会触发Minor GC,这里的年轻代满指的是Eden满,Survivor满不会触发GC。(每次Minor GC 会清理年轻代的内存) 因为Java对象大多都具备朝生熄灭的特性,所以Minor GC非常频繁,一 阅读全文
posted @ 2020-12-17 00:18 天宇轩-王 阅读(990) 评论(3) 推荐(0)
摘要:说说常见的垃圾回收算法 标记-清除算法 标记:Collector从引用根节点开始遍历,标记所有引用的对象。一般是在对象的header中记录为可达对象。 清除:Collector对堆内存从头到尾进行线性的遍历,如果发现某个对象在其Header中没有标记为可达对象,则对其回收。 缺点 效率不高,标记和清 阅读全文
posted @ 2020-12-16 22:10 天宇轩-王 阅读(192) 评论(1) 推荐(0)
摘要:你了解WeakHashMap吗 WeakHashMap正是由于使用的是弱引用,因此它的对象可能被随时回收。在缓存场景下,由于内存是有限的,不能缓存所有对象,因此就需要一定的删除机制,淘汰掉一些对象。允许null键。 下面我们就来看看,WeakHashMap是如何实现这些功能。 Entry作用 //继 阅读全文
posted @ 2020-12-15 23:41 天宇轩-王 阅读(129) 评论(0) 推荐(0)
摘要:JVM怎么判断对象是否存活 引用计数算法 引用计数算法比较简单,对每个对象保存一个整型的引用计算器属性。用于记录对象背应用的情况。 对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1;当引用失效时,引用计数器就减少1.只要对象A的引用计数器的值为0,便表示对象A不可能再被使用,可进行 阅读全文
posted @ 2020-12-15 22:26 天宇轩-王 阅读(195) 评论(0) 推荐(1)
摘要:Builder模式,例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder; 工厂模式,例如SqlSessionFactory、ObjectFactory、Mapper 阅读全文
posted @ 2020-12-15 20:52 天宇轩-王 阅读(83) 评论(0) 推荐(0)
摘要:**# 正确的答案是:#是预编译处理,$是字符串替换。 (1)mybatis在处理#时,会将sql中的#替换为?号,调用PreparedStatement的set方法来赋值。 (2)mybatis在处理$时,就是把$替换成变量的值。 (3)使用#可以有效的防止SQL注入,提高系统安全性。原因在于:预 阅读全文
posted @ 2020-12-15 20:37 天宇轩-王 阅读(385) 评论(0) 推荐(0)
摘要:1、tranlog flush 间隔调整 默认设置下,每个请求都flush,这是影响es写入速度的最大因素,需要调整translog持久化策略为周期性和一定大小的时候flush,例如: index.translog.durability: async 设置为async表示translog的刷盘策略按 阅读全文
posted @ 2020-12-15 17:48 天宇轩-王 阅读(2102) 评论(0) 推荐(0)
摘要:1.内存到寄存器 2.寄存器自增 3.在写入到内存当中 阅读全文
posted @ 2020-12-15 10:17 天宇轩-王 阅读(277) 评论(0) 推荐(0)
摘要:Zookeeper的watch机制 概况:大体上讲 ZooKeeper 实现的方式是通过客服端和服务端分别创建有观察者的信息列表。客户端调用 getData、exist 等接口时,首先将对应的 Watch 事件放到本地的 ZKWatchManager 中进行管理。服务端在接收到客户端的请求后根据请求 阅读全文
posted @ 2020-12-15 00:22 天宇轩-王 阅读(616) 评论(0) 推荐(0)
摘要:ZAB 协议算法 ZooKeeper 最核心的作用就是保证分布式系统的数据一致性,而无论是处理来自客户端的会话请求时,还是集群 Leader 节点发生重新选举时,都会产生数据不一致的情况。为了解决这个问题,ZooKeeper 采用了 ZAB 协议算法。 ZAB 协议算法(Zookeeper Atom 阅读全文
posted @ 2020-12-14 23:36 天宇轩-王 阅读(182) 评论(0) 推荐(0)
摘要:具体的可以看之前的这篇博客,考的就是Redis的逐出算法。 达到最大内存后的,对被挑选出来的数据进行删除的策略 影响数据逐出的相关配置 检测易失数据(可能会过期的数据集server.db[i].expires ) ① volatile-lru:挑选最近最少使用的数据淘汰 ② volatile-lfu 阅读全文
posted @ 2020-12-14 22:58 天宇轩-王 阅读(324) 评论(0) 推荐(0)
摘要:过期策略 数据删除策略的目标在内存占用与CPU占用之间寻找一种平衡,顾此失彼都会造成整体redis性能的下降,甚至引发服务器宕机或内存泄露 。 定时删除 创建一个定时器,当key设置有过期时间,且过期时间到达时,由定时器任务立即执行对键的删除操作 优点:节约内存,到时就删除,快速释放掉不必要的内存占 阅读全文
posted @ 2020-04-01 23:57 天宇轩-王 阅读(1185) 评论(0) 推荐(2)
摘要:概述 Spring的ioc容器功能非常强大,负责Spring的Bean的创建和管理等功能。而Spring 的bean是整个Spring应用中很重要的一部分,了解Spring Bean的生命周期对我们了解整个spring框架会有很大的帮助。 BeanFactory和ApplicationContext 阅读全文
posted @ 2019-12-10 16:04 天宇轩-王 阅读(741) 评论(0) 推荐(1)
摘要:入口类中有一个main方法,这个方法其实就是一个标准的Java应用的入口方法,一般在main方法中使用SpringApplication.run()来启动整个应用。 值得注意的是,这个入口类要使用@SpringBootApplication注解声明,它是SpringBoot的核心注解。 /** * 阅读全文
posted @ 2019-10-31 16:36 天宇轩-王 阅读(1032) 评论(1) 推荐(2)