ThreadLocal篇 关于threadlocalthreadlocal的实现答ThreadLocal对象可以提供线程局部变量,每个线程Thread拥有一份自己的副本变量,多个线程互不干扰。threadlocal的内部结构以前的设计每个ThreadLocal都创建一个Map,然后用线程作为Map的key,要存储的局部变量作为Map的value,这样就能达到各个线程的局部变量隔离的效果。这是最简单的设计方法jdk8 开始每个Thread维护一个ThreadLocalMap,这个Map的key是ThreadLoca
mysql篇 mysql 权限如何管理?答MySQL的权限分为 表权限、列权限、过程权限。权限分布可以设置的权限表权限select,insert,update,delete,create,deop,grant,index,alter,refernces列权限select,insert,update,refernces过程权限execute,alter routine,grant通过权限表来控制用户对数据库的访问,主要有下面四张表:user,db,table_priv
http协议篇 什么是HTTP协议?答HTTP 协议,全称超文本传输协议,是一个无状态协议,也就是说服务器不维护任何有关客户端过去所发请求的消息。HTTP 是应用层协议,它以TCP(http 3之前)作为底层协议,http 3开始采用UDP协议。什么是 TCP协议?什么是 UDP 协议?答TCP 是一种面向有连接的传输层协议,能够对自己提供的连接实施控制。适用于要求可靠传输的应用,例如文件传输。面向字节流,传输慢。需要三次握手和四次挥手。UDP 是一种面向无连接的传输层协议,不会对自己提供的连接实施
redis 汇总 缓存集中失效答秒杀商品、微博热搜排行、或者一些活动数据,都是通过跑任务方式,将DB数据批量、集中预热到缓存中,缓存数据有着近乎相同的过期时间。当过这批数据过期时,会一起过期,此时,对这批数据的所有请求,都会出现缓存失效,从而将压力转嫁到DB,DB的请求量激增,压力变大,响应开始变慢。解决:我们可以从缓存的过期时间入口,将原来的固定过期时间,调整为过期时间=基础时间+随机时间,让缓存慢慢过期,避免瞬间全部过期,对DB产生过大压力。缓存穿透答当查询缓存中不存在的数据时,缓存无法命中,就
JVM之内存管理与垃圾回收 https://www.yuque.com/u21195183/jvm/qpoa81说说JVM内存模型答根据《JAVA虚拟机规范》将java内存划分为程序计数器、虚拟机栈、本地方法栈、堆和方法区。1. 程序计数器是用于存储字节码行号的,当线程获取cpu执行权时,根据该值可以知道上一次的执行位置。这个内存没有OOM也不会进行GC。2. 虚拟机栈与本地方法栈由于hotspot虚拟机的实现没有区分虚拟机栈与本地方法栈,所以这里就一起说了,虚拟机栈是线程的执行模型,每一个栈帧代表一个方法。一个栈帧
JVM之性能监控与优化 jps:查看正在运行的Java进程jstat:查看JVM统计信息答类装载相关的:-class:显示ClassLoader的相关信息:类的装载、卸载数量、总空间、类装载所消耗的时间等垃圾回收相关的:-gc:显示与GC相关的堆信息。包括Eden区、两个Survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息。-gccapacity:显示内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大、最小空间。-gcutil:显示内容与-gc基本相同,但输出主要关
JVM之类加载系统 类加载器子系统作用?答类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射加载阶段答加载阶段可细分为加载、链接、初始化。链接又可分为验证、准
Mysql Innodb 事务实现原理 ACID原子性:要么都成功,要么都失败一致性:事务前后状态一致,比如某张表的id是唯一约束,不能重复。则无论事务成功失败,都不能出现重复的id。隔离性:A事务不应该访问到B事务没有提交的数据持久性:事务一旦提交,结果是永久的。事务分类1. 扁平事务最简单也最频繁的事务。就是begin开始,中间一个或几个编辑操作,然后一起提交。整体要么都成功要么都失败。缺点:只能全部回滚,不能部分回滚。在某些大事务中,代价太大2. 带保存点的扁平事务对上诉问题的优化处理,可以设置保存点,回滚
Mysql关联更新、删除重复、复制 准备数据-- 1 test_user 表DROP TABLE IF EXISTS `test_user`;CREATE TABLE `test_user` ( `id` int(11) NOT NULL, `name` varchar(255) DEFAULT NULL COMMENT '姓名', `phone` varchar(11) DEFAULT NULL COMMENT '号码', `create_time` datetime(0) NULL DEFAULT CURREN
Mysql Innodb锁实现 lock与latchlatch:闩锁,一种轻量级的锁。当锁定时间短时性能很好,但是锁定时间长时,性能会很差。在Innodb中,latch可分为mutex(互斥量)和rwlock(读写锁)。目的是用来保证并发线程操作临界资源的正确性,作用于线程,没有死锁检测机制lock:锁。作用对象是事务,用来锁定数据库中的对象。有死锁机制。Innodb的行锁共享锁(S lock),允许事务读取一行数据。S锁可兼容其他S锁排他锁(X lock),允许事务更新或删除一行数据。X锁不兼容其他锁意向锁意
设计模式(1)类图、设计原则与工厂 UML类图如图所示,可分为三组实现: 虚线+三角形继承: 实线+三角形依赖: 虚线+箭头关联: 实线+箭头组合: 实心菱形+实线+三角形聚合: 空心菱形+实线+三角形设计原则开闭原则:对修改关闭,对扩展开放依赖倒置原则:软件系统的设计,应该是依赖接口,而不是具体的实现类接口分离原则:客户端接口应该按功能需求依赖多个不同的,而不是一个大而全的接口迪米特法则:即最少知道原则,一个类应该尽量少的依赖其他类里氏替换原则:在父类可以使用的地方,使用子类替换,系统执行效果不
深入理解JVM虚拟机(3)垃圾回收算法与实现 传统的垃圾回收算法与实现(JDK9之前)如何判断数据可回收这里是引用标记-清楚算法这里是引用复制算法这里是引用标记整理算法这里是引用低延迟的垃圾回收器G1这里是引用Shenandoah这里是引用ZGC这里是引用...
Java JUC 1 基础知识 java线程状态转换关系juc并发包线程:是操作系统能够进行运算调度的最小单位CPU多级缓存由于cpu的计算速度与内存的i/o操作速度存在几个数量级的差距,为了弥补改差距,使用了多级高速缓存解决该问题,但同时又引出了新的问题CPU多级缓存-缓存一致性问题,而缓存一致性的解决是通过各种协议完成如MSI MESI MOSI等CPU多级缓存-乱序执行优化:在多线程中,如果两个线程有通信,该优化可能带来一些问题,比如线程a有一个标志位,在线程执行后改变;线程b会监听这个标志,然后做一些处理,由于乱
深入理解JVM虚拟机(2)类加载机制 类加载过程一个类从被加载到虚拟机内存开始,到卸载出内存为止,一共需要经历加载、验证、准备、解析、初始化、使用和卸载,其中加载、验证、准备、解析、初始化又被称为类加载过程,而验证、准备、解析又被称为连接。何时必须初始化对于初始化阶段,《JAVA虚拟机规范》有严格规定,(目前为止 jdk 12之前,之后不清楚)有且仅有下面6种情况:遇到new、getStatic、putStatic、invokeStatic、 这四个字节码指令时场景:1)使用new关键字实例化对象2)读取或设置一个类的静态
深入理解JVM虚拟机(1)运行时数据区 运行时数据区运行时数据区由:程序计数器、虚拟机栈、本地方法栈、堆和方法区组成。程序计数器:记录当前执行的代码行号,由于java多线程是通过线程轮流切换,分配处理器执行时间来实现,任何一个确定的时刻,一个CPU只能执行一个线程的代码,为例保证下一次线程执行时,能正常继续执行,每个线程需要独立的计数器虚拟机栈:描述了虚拟机执行方法的内存模型。当执行一个方法时,虚拟机会同步创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、返回地址等。一个方法执行至结束的过程就是一个栈帧从入栈到出栈的过程。局
Mysql之Innodb引擎 查询语句分析首先我们可以用EXPLAIN或DESCRIBE(简写:DESC)命令分析一条查询语句的执行信息优化子查询在MySQL中,尽量使用JOIN来代替子查询.因为子查询需要嵌套查询,嵌套查询时会建立一张临时表,临时表的建立和删除都会有较大的系统开销,而连接查询不会创建临时表,因此效率比嵌套子查询高.常用数据库优化方法索引是提高数据库查询速度最重要的方法之一。在表中建立索引,优先考虑where、group by使用到的字段。查询条件中,尽量不使用select *,因为会返回过多
spring面试笔记 spring AOPAOP:面向切面的编程;Filter(过滤器)也是一种 AOP., 是对传统 OOP(面向对象编程) 的补充.AOP 的主要编程对象是切面(aspect), 而切面模块化横切关注点.比如事务和日志等。实现原理 java动态代理机制和CGLIB动态代理。JDK动态代理只提供接口的代理,不支持类的代理。核心InvocationHandler接口和Proxy类,InvocationHandler 通过invoke()方法反射来调用目标类中的代码,动态地将横切逻辑和业务编织在一起;接着P
红黑树 红黑树的规则每个节点非红即黑根节点总是黑色的如果节点是红色的,则它的子节点必须是黑色的(反之不一定)每个叶子节点都是黑色的空节点(NIL节点)从根节点到叶节点或空子节点的每条路径,必须包含相同数目的黑色节点(即相同的黑色高度)树的旋转以 LL型、LR型、RR型、RL型基础的为例,旨在对树有一定的了解LL型 如下图所示,将不满足的元素向右旋转即可LR型 如下图所示,需要进行两部操作,第一步交换2和4,将图形转为LL型;然后右旋RR型 如下图所示,