![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
InterviewRequestions
文章平均质量分 79
星夜孤帆
人之有吾,当应披荆棘,斩鬼熊,成就一番大事
展开
-
线上OOM解决思路
通过多线程更新数据时,遇到OOM,记录分析过程jvm参数设置发生oom自动生成dump文件xshell, sz将dump文件导出到本地,cmd,JvisualVm打开VisualVm,文件,装入dump文件定位代码,copyOnWriteArrayList里面存了过多的数据。解决方式:Job同步,判断失败字段是否过多,如果过多,一次别迁移那么多...原创 2021-11-07 01:10:44 · 331 阅读 · 0 评论 -
Java线程池源码分析
线程,程序执行流的最小执行单位,是行程中的实际运作单位,经常容易和进程这个概念混淆。那么,线程和进程究竟有什么区别呢?首先,进程是一个动态的过程,是一个活动的实体。简单来说,一个应用程序的运行就可以被看做是一个进程,而线程,是运行中的实际的任务执行者。可以说,进程中包含了多个可以同时运行的线程。ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。ThreadPoolExecutor.DiscardPolicy:也是丢.原创 2021-09-12 01:16:34 · 461 阅读 · 0 评论 -
深入理解BIO/NIO/AIO
一、Java的I/O演进之路1.1I/O 模型基本说明I/O 模型:就是用什么样的通道或者说是通信模式和架构进行数据的传输和接收,很大程度上决定了程序通信的性能,Java 共支持 3 种网络编程的/IO 模型:BIO、NIO、AIO实际通信需求下,要根据不同的业务场景和性能需求决定选择不同的I/O模型1.2 I/O模型1.2.1 Java BIO同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这..原创 2021-09-11 15:17:44 · 553 阅读 · 1 评论 -
BLOG博客索引
一、Java基础总结二、Java集合容器总结三、Java异常总结四、Java并发编程总结五、Java虚拟机总结六、Spring总结七、Spring MVC总结八、Spring Boot总结九、Spring Cloud总结十、MyBatis总结十一、MySQL总结十二、Redis总结十三、RabbitMQ总结...原创 2021-08-30 00:12:18 · 1003 阅读 · 1 评论 -
ConcurrentHashMap实现原理及源码分析
一、ConcurrentHashMap跟HashMap,HashTable的对比1. HashMap不是线程安全:在并发环境下,可能会形成环状链表(扩容时可能造成,具体原因自行百度google或查看源码分析),导致get操作时,cpu空转,所以,在并发环境中使用HashMap是非常危险的2. HashTable是线程安全的:HashTable和HashMap的实现原理几乎一样,差别:1.HashTable不允许key和value为null;2.HashTable是线程安全的。原创 2021-08-29 20:30:02 · 1304 阅读 · 3 评论 -
布隆过滤器原理和实现
一、布隆过滤器介绍巴顿.布隆于一九七零年提出一个很长的二进制向量 (位数组)一系列随机函数 (哈希)空间效率和查询效率高有一定的误判率(哈希表是精确匹配)二、布隆过滤器原理布隆过滤器(Bloom Filter)的核心实现是一个超大的位数组和几个哈希函数。假设位数组的长度为m,哈希函数的个数为k以上图为例,具体的操作流程:假设集合里面有3个元素{x, y, z},哈希函数的个数为3。首先将位数组进行初始化,将里面每个位都设置位0。对于集合里面的每一原创 2021-08-28 11:24:01 · 710 阅读 · 0 评论 -
Mysql binlog日志三种模式
在认识binlog日志三种模式前,先了解一下解析binlog日志的命令工mysqlbinlog。mysqlbinlog工具的作用是解析mysql的二进制binlog日志内容,把二进制日志解析成可以在MySQL数据库里执行的SQL语句。binlog日志原始数据是以二进制形式存在的,需要使用mysqlbinlog工具转换成SQL语句形式。mysql的binlog日志作用是用来记录mysql内部增删改等对mysql数据库有更新内容的记录(对数据库进行改动的操作),对数据库查询的语句如show,s.原创 2021-08-15 19:11:11 · 3648 阅读 · 0 评论 -
从源码剖析Spring事务失效问题
1.Bean是否是代理对象2.入口函数是否是public的3.数据库是否支持事务(Mysql的Mvlsam不支持事务),行锁才支持事务4.切点是否配置正确5.内部方法间调用导致事务失效因为this不是代理对象,可以配置 expose-proxy="true",就可以通过AopContext.currentProxy0)获取到当前类的代理对象。<! -- expose-proxy="true”类内部可以获取到当前类的代理对象--><aop: aspectj-aut.原创 2021-06-06 16:39:36 · 319 阅读 · 1 评论 -
SpringBean的生命周期
一、SpringBean的生命周期Spring Bean的生命周期参考博客原创 2021-05-30 02:51:38 · 201 阅读 · 0 评论 -
Spring常用扩展点
一、BeanPostProcessor如果你想在Spring容器完成实例化,配置和初始化bean之后实现一些自定义逻辑,则可以插入一个或多个自定义BeanPostProcessor实现。这些实现成为后置处理器。BeanPostProcessor接口包含两个回调方法。当实现此接口类通过容器注册为后处理器时,由Spring容器实例的Bean,Spring容器会在bean 的init方法执行前回调postProcessBeforeInitialization方法,然后会在bean初始化之后回原创 2021-05-29 18:55:30 · 9468 阅读 · 8 评论 -
Spring中init-method和destroy-method的四种方式
在java的实际开发过程中,我们可能常常需要使用到init method和destroy method,比如初始化一个对象(bean)后立即初始化(加载)一些数据,在销毁一个对象之前进行垃圾回收等。要用这两个方法,自然先要知道这两个方法究竟是干嘛用的。而从字面意思就很容易理解,一个是加载,一个是销毁。下边就正式代码演示几种创建方式:一、@Bean注解方式public class Person { private String name; private Integer原创 2021-05-29 16:31:13 · 12350 阅读 · 0 评论 -
Java反射创建对象
一、通过类对象调用newInstance()方法,适用于无参构造方法1.1 类名.classpublic class Main { public static void main(String[] args) throws IllegalAccessException, InstantiationException { Class<Person> clazz = Person.class; Person person = clazz.new原创 2021-05-29 14:33:59 · 642 阅读 · 1 评论 -
@Configuration源码解析
一、@Configuration1.1 未加@Configuration1.2 加上@Configuration1.3 Cglib动态代理Gitee、视频教程原创 2021-05-21 22:01:42 · 292 阅读 · 0 评论 -
MySQL之Buffer Pool
一、MySQL简介1.1 查看配置SQL1.2 MySQL页结构1.3 MySQL存储结构1.4 主键索引B+树主键索引树,是聚簇索引,叶子节点存放完整的数据。1.5 二级索引B+树MySQL非主键索引组织的B+树,为二级索引树,它的叶子节点为什么没有存储完整的数据记录呢?一方面,假如索引很多,每一个索引都维护一个完整的索引树,占用空间很多。另一方面,对于更新,每个索引树都需要去更新记录,耗费性能。所以,二级索引树叶子节点,存放索引值和主键值。原创 2021-05-17 09:28:10 · 372 阅读 · 2 评论 -
MySQL全面解析
一、Mysql架构图二、InnoDB数据页结构三、InnoDB行格式原创 2021-05-16 20:21:16 · 190 阅读 · 0 评论 -
MySQL锁原理
一、MySQL锁1.1 读锁与写锁1.1.1 读操作1.1.2 写操作这些操作默认都会加一把写锁,和select for updae是等价的。1.1.3 读写锁演示1. lock in share mode2. select for update视频教程原创 2021-05-16 16:55:47 · 354 阅读 · 1 评论 -
MySQL主从复制
一、复制的基本原理slave会从master读取binlog来进行数据同步1.1 三步骤+原理图MySQL复制过程分成三步:1 master将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events;2 slave将master的binary log events拷贝到它的中继日志(relay log) ;3 slave重做中继日志中的事件,将改变应用到自己的数据库中。MySQL复制是异步的且串行化的二、复制的基本原则原创 2021-05-15 16:39:06 · 138 阅读 · 4 评论 -
MySQL锁机制
一、概述1.1 定义锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(如CPU、RAM、V/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保让数据开友访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。1.2 生活购物打个比方,我们到淘宝上买一件商品,商品只有一件库存,这个时候如果还有另一个人买,那么如何解决是你买到还是另一个人买到的问题?原创 2021-05-15 13:20:47 · 191 阅读 · 0 评论 -
MySQL存储过程
一、建表# 新建库create database bigData;use bigData; #1 建表deptcreate table dept(id int auto_increment,deptno mediumint not null default 0,dname varchar(20) not null default "",loc varchar(13) not null default "",primary key(id)); #2 建表empcrea原创 2021-05-14 09:44:33 · 168 阅读 · 0 评论 -
MySQL查询优化
一、查询优化1.1 小表驱动大表永远小表驱动大表,类似嵌套循环Nested LoopEXISTSSELECT ... FROM table WHERE EXISTS (subquery)该语法可以理解为。将主查询的数据,放到子查询中做条件验证,根据验证结果(TRUE或FALSE)来决定主查询的数据结果是否得以保留。提示1.EXISTS(subquery)只返回TRUE 或FALSE,因此子查询中的SELECT*也可以是select 1或select'X',官方说法是实原创 2021-05-12 22:09:34 · 302 阅读 · 1 评论 -
MySQL索引优化
一、索引优化案例1.1 单表案例1.1.1 sqlcreate table if not exists `article`(`id` int(10) unsigned not null primary key auto_increment,`author_id` int(10) unsigned not null,`category_id` int(10) unsigned not null,`views` int(10) unsigned not null,`comments` i原创 2021-05-10 21:35:58 · 328 阅读 · 0 评论 -
MySQL性能分析之Explain
一、性能分析1.1 MySQL Query Optimizer1.Mysql中有专门负责优化select语句的优化器模块,主要功能:通过计算分析系统中收集到的统计信息,为客户端请求的Query提供他认为最优的执行计划(他认为最优的数据检索方式,但不见得是DBA认为是最优的,这部分最耗费时间)2.当客户端向MySQL请求一条Query,命令解析器模块完成请求分类,区别出是select并转发给MySQL Query Optimizer时,MySQL Query Optimizer首先会对整.原创 2021-05-09 21:09:25 · 288 阅读 · 1 评论 -
Mysql索引分类
一、单值索引概念:即一个索引只包含单个列,一个表可以有多个单列索引语法:1.随表一起创建create table customer (id int(10) unsigned auto_increment,customer_no varchar(200),customer_name varchar(200),primary key(id),key (customer_name));2.单独建单值索引create index idx_customer_name on cu原创 2021-05-09 20:01:18 · 124 阅读 · 0 评论 -
MySQL索引原理
一、索引的概念1.1 是什么MySQL 官方对索引的定义为:索引(Index)是帮助MySQL 高效获取数据的数据结构。可以得到索引的本质:索引是数据结构。可以简单理解为排好序的快速查找数据结构。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。下图就是一种可能的索引方式示例:左边是数据表,一共有两列七条记录,最左边的是数据记录的物理地址。为了加快Col2 的查找,可以维护一原创 2021-05-08 19:06:46 · 215 阅读 · 2 评论 -
MySQL事务隔离级别和MVCC
参考原创 2021-05-07 10:46:47 · 188 阅读 · 0 评论 -
Vector源码解析
一、Vector简介1.Vector继承AbstractList、实现了List、RandomAccess、Cloneable、Serializable这些接口2.Vector 实现了Cloneable接口,即实现clone()函数。它能被克隆。3.Vector 实现 RandomAccess接口,所以提供随机访问功能,RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在Vector中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问4..原创 2021-04-25 09:27:00 · 703 阅读 · 0 评论 -
B树和B+树
一、页单位的作用操作系统是一页一页从磁盘读数据的,操作系统1页=4KB,操作系统从磁盘里面取数据,最少可以取出4KB。InnoDb的一页是等于16KB,这个值是可以改的,但是,尽量改为4的倍数。对于这八条数据,都是存在我们的磁盘里的,假如现在有一条sql语句select * from t1 where a = 7;一种思路,我们从磁盘里一个一个取出数据(每取一次涉及一次磁盘IO),取出来之后跟a=7比较,那么就需要7次磁盘IO,而磁盘IO相对于内存中运算是很耗时的,如果按照这种思路,原创 2021-04-24 16:06:49 · 165 阅读 · 0 评论 -
聚簇索引和非聚簇索引
参考原创 2021-04-24 12:33:49 · 4060 阅读 · 1 评论 -
HashTable源码解析
一、HashTable的基本介绍1.存放的元素是键值对:即K-V2.hashtable的键和值都不能为null,否则会抛出NullPointerException3.hashTable使用方法基本上和HashMap一样4.HashTable是线程安全的(Synchronized),HashMap是线程不安全的5.简单看下底层结构1.底层有数组,Hashtable$Entry[] 初始化大小为112.阈值 threshold 8 = 11 * 0.75 ha..原创 2021-04-23 09:33:47 · 262 阅读 · 1 评论 -
HashSet源码解析
一、HashSet示例1.以Set接口的实现类HashSet来讲解Set接口的方法2.Set接口的实现类的对象(Set接口对象),不能存放重复的元素,可以添加一个null3.Set接口对象存放数据是无序的(即添加的顺序和取出的顺序不一致)4.注意:取出的顺序虽然不是添加的顺序,但是他是固定的5. set接口对象,不能通过索引来获取。二、HashSet全面说明1.HashSet实现了Set接口2.HashSet实际上是HashMap3.可以存放null值,但是,原创 2021-04-20 20:57:29 · 354 阅读 · 2 评论 -
Spring的循环依赖
一、什么是循环依赖多个bean之间相互依赖,形成了一个闭环。比如:A依赖于B、B依赖于C、C依赖于A通常来说,如果问spring容器内部如何解决循环依赖,一定是指默认的单例Bean中,属性互相引用的场景也就是说,Spring的循环依赖,是Spring容器注入时候出现的问题。二、两种注入方式对循环依赖的影响循环依赖官网说明结论我们AB循环依赖问题只要A的注入方式是setter且singleton,就不会有循环依赖问题。...原创 2021-04-19 09:47:02 · 1421 阅读 · 0 评论 -
Spring的Aop顺序
一、Aop常用注解二、业务类2.1 CalcService2.2 CalServiceImpl想在除法方法前后各种通知,引入切面编程2.3 MyAspect新建一个切面类MyAspect并为切面类新增两个注解三、测试3.1 Spring4+Springboot1.5.9@SpringBootTest@RunWith(SpringRunner.class) //1.5.9public class T1{ @Autowired p原创 2021-04-18 21:51:30 · 262 阅读 · 1 评论 -
AQS全面解析
一、前置知识二、是什么2.1 字面意思抽象的队列同步器通常地,AbstractQueuedSynchronizer简称为AQS2.2 技术翻译是用来构建锁或者其它同步器组件的重量级基础框架及整个JUC体系的基石,通过内置的FIFO队列来完成资源获取线程的排队工作,并通过一个int类变量表示持有锁的状态。三、AQS为什么是JUC内容中最重要的基石3.1 和AQS有关的3.1.1 ReentrantLock3.1.2 CountDownLatch原创 2021-04-17 22:02:42 · 980 阅读 · 1 评论 -
LockSupport
一、LockSupport1.1 LockSupport是什么Java ApiLockSupport中的park()和unpark()的作用分别是阻塞线程和解除阻塞线程1.2 线程等待唤醒机制(wait/notify)1.2.1 三种让线程等待和唤醒的方法1.2.2 Object类种的wait和notify方法实现线程等待和唤醒1.正常2.异常1wait方法和notify方法,两个都去掉同步代码块。3.异常21.2.3 Conditi.原创 2021-04-17 20:24:38 · 195 阅读 · 0 评论 -
可重入锁
一、可重入锁1.1 什么是可重入锁可重入锁又名递归锁是指在同一个线程外层方法获取锁的时候,再进入该线程的内层方法会自动获取锁(前提,锁对象得是同一个对象),不会因为之前已经获取过还没释放而阻塞。Java中ReentrantLock和Synchronized都是可重入锁,可重入锁的一个优点是可一定程度避免死锁。1.2 可重入这四个字分库解释1.3 可重入锁种类1.3.1 隐式锁隐式锁,即synchronized关键字使用的锁,默认是可重入锁1.同步代码块2.同步原创 2021-04-17 15:15:06 · 1952 阅读 · 0 评论 -
字符串常量池
一、intern()方法二、代码示例按照代码结果,java字符串答案为false,必然是两个不同的java,那另外一个java字符串如何加载进来的?有一个初始化的java字符串(JDK出娘胎自带的),在加载sun.misc.Version这个类的时候进入常量池。三、OpenJDK8底层源码说明3.1 System代码解析3.2 类加载器和rt.jar根加载器提取部署加载rt.jarhttp://openjdk.java.net/视频教程原创 2021-04-17 13:27:18 · 134 阅读 · 0 评论 -
ThreadLocal全面解析
一、ThreadLocal介绍1.1 介绍ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static类型的,用于关联线程和线程上下文。我们可以得知 ThreadLocal 的作用是:提供线程内的局部变量,不同的线程之间不会相互干扰,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递的复杂度。原创 2021-04-14 22:10:29 · 438 阅读 · 0 评论 -
LinkedList源码解析
一、链表介绍链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。双链表是链表的一种,由节点组成,每个数据结点中都有两个指针,分别指向直接后继和直接前驱。二、LinkedList2.1 LinkedList基本介绍LinkedList是一个实现了List接口和Deque接口的双端链原创 2021-04-13 21:22:26 · 197 阅读 · 0 评论 -
ArrayList源码解析
一、数组介绍数组是数据结构中很基本的结构,很多编程语言都内置数组。在java中当创建数组时会在内存中划分出一块连续的内存,然后当有数据进入的时候会将数据按顺序的存储在这块连续的内存中。当需要读取数组中的数据时,需要提供数组中的索引,然后数组根据索引将内存中的数据取出来,返回给读取程序。在Java中并不是所有的数据都能存储到数组中,只有相同类型的数据才可以一起存储到数组中。因为数组在存储数据时是按顺序存储的,存储数据的内存也是连续的,所以他的特点就是寻址读取数据比较容易,插入和删除比较困难原创 2021-04-12 21:08:35 · 230 阅读 · 0 评论 -
JDK8HashMap源码
一、红黑树1.1 红黑树的定义红黑树是一种自平衡的二叉查找树,它的节点的颜色为红色和黑色。它不严格控制左、右子树高度或节点数之差小于等于1。通过左旋、右旋、变色保证平衡1.每个节点非红即黑;2.根节点总是黑色的;3.每个叶子节点都是黑色;4.红节点的子节点一定是黑色的。5.从任一节点到叶子节点必须包含相同数量的黑色节点。AVL树是高度平衡的而红黑树不是高度平衡的,它只要求部分地达到平衡要求,结合变色,降低了对旋转的要求从而提高了性能。在最坏的情况下也可以保证O(logN)原创 2021-04-11 12:01:32 · 249 阅读 · 2 评论