- 博客(16)
- 收藏
- 关注
原创 spring的循环依赖
1、spring的bean的建立(单例可以建立,多利不行,因为需要传参)spring的循环依赖的三级缓存解决(A,B两个bena),刚开始实例化A是放入三级缓存,接着填充属性,发现依赖B,B又实例化放入三级缓存,接着初始化时又发现依赖A,这个时候从一二级缓存没有找到,到三级缓存找到A,然后把A放到二级缓存,并删除三级缓存A,B初始化完毕,并将自己放在一集缓存中,接着回来创建A。此时b已经创建结束,从一级缓存拿到B,完成创建,并将A自己放到一级缓存(四个方法三个类(getSingleton,doCreate
2021-11-03 17:06:40
58
原创 主从复制的学习
1、原理:master将改变记录存入二进制日志,slave将二进制事件日志copy到中继日志,salve将中继日志重做,再把记录存入自己的数据2、步骤:2.1、尽可能满足版本一致2.2、主机修改my.ini(主机唯一服务器ID(server-id=1),二进制日志文件(log-bin = 本地路径/mysqlbin)),从机修改my.cnf从机唯一服务器ID(server-id=2),二进制日志文件(log-bin = 本地路径/mysqlbin))2.3、重启mysql2.4、关防火墙2.5
2021-11-03 13:40:34
50
原创 mysql的优化
1、explan查询mysql的类型(create index id on user(userId))1.1、id((一)id相同,执行顺序由上到下,(二)id不同,子查询id序号递增,id值越来越大优先级越来越高,越先被执行,)1.2、select _type(simple简单查询,primary:任何复杂查询,subouery:select 或where包括子查询,derived:临时表,union:union,union refer)1.3、table1.4、type(system,const
2021-11-03 11:46:44
55
原创 OOM学习
1、StackOverflowError(深度方法调用异常)2、java heap space(对象太多,堆溢出了)3、GC overhead limit exceeded(GC回收时间过长,98%时间用来做GC回收不到2%的堆内存,所以抛出这样的异常)4、Direct buffer memory(在使用的NIO经常使用byteBuffer读取或者写入数据,是基于通道和缓存区的IO方式,可以使用native直接分配堆外内存,然后储存到java堆里面的directByBuffer对象作为这块内存的引用操
2021-10-23 18:49:44
58
原创 JVM的学习
1、GC Roots的意思就是一组必须活跃的引用,就是以GC Root为起点,然后往下搜索,如果对象到GC ROOT没有任何引用链,就说明对象不可用。可到达为存活,不可到达判定为死亡;2、标准参数(version,help,java -showversion)x参数(Xint:解释执行,xcomp:第一次执行编码成本地本地,Xmixed:混合模式)3、XX参数(Xms(初始化的堆内存(64分之一)),Xmx(最大堆内存(四分之一)),Xss(单线程的内存大小(512-1024),window默认为0)
2021-10-23 17:13:57
46
原创 线程池的学习
1、线程池控制运行的线程数量,将任务放到队列,然后启动这些任务,如果线程数量超过最大值则排队等候,在等其他线程执行,再从队列抽取任务执行(线程复用,控制最大并发数,管理线程)2、优点:减低资源消耗,提高响应速率,提高线程的课管理性。3、有三种线程池(固定数量的线程池,单个数量的线程池,可缓存数量的线程池)都是引用ThreadPoolExctorts4、七大参数:核心线程数,最大线程数,设定时间,时间单位,队列,工厂,拒绝策略(四种(1、收到异常立马拒绝,2、不会抛弃任务,也不会跑一次,重新调用方法再次
2021-10-21 14:03:13
67
原创 阻塞队列的学习
一、队列1、ArrayBlockingQueue(数组结构的有界阻塞队列)2、LinkedBlockingQueue(链表结构的有界(以interger.MAx_Value))3、LinkedTransferQueue(链表结构的无界)4、synchronousQueue(不储存原始的阻塞队列,就是单个元素队列)5、priortyBlockQueue(优先队列排序的无界阻塞队列)6、delayQueue(优先队列实现延迟无界阻塞)7、LinkedBlockingDeque(链表结构的双向阻塞队
2021-10-21 11:37:41
36
原创 synchronized和lock的区别复习
1、原始构成1.1、synchronized是关键字是需要JVM层面,主要有monitor对象完成(monitorenter进入(wait,notify也是依赖同步代码块),monitorexit)1.2、lock是具体类2、使用方法2.1、synchronized不需要用户手动释放锁,当synchronized代码执行完成系统自动让线程释放对锁的占用2.2、ReentrantLock需要用户去手动释放锁若没有主动释放锁,则可能出现死锁,需要Lock和unLock配合3、等待是否可以中断3.1
2021-10-20 10:05:02
41
原创 java的公平锁,非公平锁,可重入锁(递归锁),自旋锁,读写锁
例子:ReentrantLock(默认是非公平锁,当设置为ture是,就是公平锁)1、公平锁(多线程按照申请锁来获取锁)2、非公平锁(指多线程获取锁的顺序不是按申请顺序,在高并发情况下,有可能出现优先级反转,先尝试申请锁,如果不成功在排队申请锁)3、可重入锁(指线程可以进入任何一个已经拥有锁的同步代码块)最大作用是避免死锁。(ReentrantLock和synchronized都是可重入锁)4、自旋锁(尝试获取锁的线程不会立刻阻塞,才要循环的方式进行尝试取锁)减少线程上下文的切换消耗,缺点是消耗CP
2021-10-19 13:56:44
107
原创 CAS的复习(为什么AtomicInterge不要synchronized而用CAS)
1、CAS(比较和替换)一条CPU并发原语(用于判断内存某位置是否为预期值,如果是则改最新,这个过程是原子的,就是因为CAS是一种系统原语,在执行过程中是连续的,不允许被中断,所以CAS是一个原子指令,不会出现数据不一致问题)2、通过调用unsafe(可以直接操作内存数据,内部方法都是native修饰),而valueOffset就是变量偏移地址,根据内存便宜地址获取数据3、public final int getAndIncrement(){return unsafe.getAndAddInt(thi
2021-10-18 15:17:21
152
原创 volatile的复习
1、jvm运行是是线程,线程创建JVM是需要创建一个工作内存(栈内存),每一个工作内存都是私有数据区域,java内存模型都是在主内存,主内存都是共享数据。2、jmm实际就是内存模型(抽象不存在),同步过程(加锁之前必须把最新主内存的数据存储到工作内存,解锁前,必须将共享变量刷回主内存,解锁和加锁必须同一把),线程对变量的操作只能在工作内存中进行操作,先将主内存的变量拷贝到工作内存,再对变量进行操作,操作完后再讲变量写入主内存,因此我们不能直接操作主内存,每个工作内存有变量副本拷贝,不同线程无法访问对方的工
2021-10-18 14:27:16
35
原创 面试题20200810
一、Java 基础1.JDK 和 JRE 有什么区别?jdk(开发运行环境),jre(运行环境)2.== 和 equals 的区别是什么?1、基础数据就是值的比较,引用数据就是内存地址值的比较3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?不对,hashCode可能会冲突4.final 在 java 中有什么作用?修饰类不让继承,修饰方法不让重写,第一次赋值后后不做修改5.java 中的 Math.round(-1.5) 等于多少?-16.Str
2020-08-10 00:34:27
459
原创 docker的安装及安装其他软件
一、安装docker1、安装必要工具sudo yum install -y yum-utils device-mapper-persistent-data lvm22、添加软件信息sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3、更新yum缓存sudo yum makecache fast4、安装docker-cesudo yum -y
2020-07-22 21:48:18
250
原创 docker的自我学习
docker(CentOS的linux系统的安装)1、docker(一种容器技术)介绍1、docker解决不同的应用程序需要不同的应用环境2、docker直接将开发环境搬到不同环境3、docker部署可以利用空闲内存4、优点:上手快,职责逻辑分类明确,快速高效的开发生命周期,鼓励面向服务架构2、docker组成2.1、docker基本命令 启动docker:systemctl start docker 停止docker:systemctl stop docker 重启docker:s
2020-07-12 18:43:02
47
原创 Mybatis-plus自我学习
自我学习mybatis-plus一、先导入mysql语句DROP TABLE IF EXISTS user;CREATE TABLE user( id BIGINT(20) NOT NULL COMMENT '主键ID', name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', age INT(11) NULL DEFAULT NULL COMMENT '年龄', email VARCHAR(50) NULL DEFAULT NULL COMMEN
2020-07-08 21:20:50
131
原创 java面试题
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入java面试题欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学
2020-07-07 09:20:14
59
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人