自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 笔记的图片些

2024-04-10 15:45:40 401

原创 ThreadLocal篇

关于threadlocalthreadlocal的实现答ThreadLocal对象可以提供线程局部变量,每个线程Thread拥有一份自己的副本变量,多个线程互不干扰。threadlocal的内部结构以前的设计每个ThreadLocal都创建一个Map,然后用线程作为Map的key,要存储的局部变量作为Map的value,这样就能达到各个线程的局部变量隔离的效果。这是最简单的设计方法jdk8 开始每个Thread维护一个ThreadLocalMap,这个Map的key是ThreadLoca

2022-05-06 22:26:33 777

原创 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

2022-04-27 21:16:06 1114

原创 http协议篇

什么是HTTP协议?答HTTP 协议,全称超文本传输协议,是一个无状态协议,也就是说服务器不维护任何有关客户端过去所发请求的消息。HTTP 是应用层协议,它以TCP(http 3之前)作为底层协议,http 3开始采用UDP协议。什么是 TCP协议?什么是 UDP 协议?答TCP 是一种面向有连接的传输层协议,能够对自己提供的连接实施控制。适用于要求可靠传输的应用,例如文件传输。面向字节流,传输慢。需要三次握手和四次挥手。UDP 是一种面向无连接的传输层协议,不会对自己提供的连接实施

2022-04-09 11:40:59 3042 1

原创 redis 汇总

缓存集中失效答秒杀商品、微博热搜排行、或者一些活动数据,都是通过跑任务方式,将DB数据批量、集中预热到缓存中,缓存数据有着近乎相同的过期时间。当过这批数据过期时,会一起过期,此时,对这批数据的所有请求,都会出现缓存失效,从而将压力转嫁到DB,DB的请求量激增,压力变大,响应开始变慢。解决:我们可以从缓存的过期时间入口,将原来的固定过期时间,调整为过期时间=基础时间+随机时间,让缓存慢慢过期,避免瞬间全部过期,对DB产生过大压力。缓存穿透答当查询缓存中不存在的数据时,缓存无法命中,就

2022-04-02 14:54:20 1285

原创 JVM之内存管理与垃圾回收

https://www.yuque.com/u21195183/jvm/qpoa81说说JVM内存模型答根据《JAVA虚拟机规范》将java内存划分为程序计数器、虚拟机栈、本地方法栈、堆和方法区。1. 程序计数器是用于存储字节码行号的,当线程获取cpu执行权时,根据该值可以知道上一次的执行位置。这个内存没有OOM也不会进行GC。2. 虚拟机栈与本地方法栈由于hotspot虚拟机的实现没有区分虚拟机栈与本地方法栈,所以这里就一起说了,虚拟机栈是线程的执行模型,每一个栈帧代表一个方法。一个栈帧

2022-03-31 18:47:41 578

原创 JVM之性能监控与优化

jps:查看正在运行的Java进程jstat:查看JVM统计信息答类装载相关的:-class:显示ClassLoader的相关信息:类的装载、卸载数量、总空间、类装载所消耗的时间等垃圾回收相关的:-gc:显示与GC相关的堆信息。包括Eden区、两个Survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息。-gccapacity:显示内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大、最小空间。-gcutil:显示内容与-gc基本相同,但输出主要关

2022-03-31 18:47:08 131

原创 JVM之类加载系统

类加载器子系统作用?答类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射加载阶段答加载阶段可细分为加载、链接、初始化。链接又可分为验证、准

2022-03-21 18:24:21 127

原创 java基础知识

展开查看System.out.println("Hello to see U!")

2022-03-17 15:21:42 1025

原创 Mysql Innodb 事务实现原理

ACID原子性:要么都成功,要么都失败一致性:事务前后状态一致,比如某张表的id是唯一约束,不能重复。则无论事务成功失败,都不能出现重复的id。隔离性:A事务不应该访问到B事务没有提交的数据持久性:事务一旦提交,结果是永久的。事务分类1. 扁平事务最简单也最频繁的事务。就是begin开始,中间一个或几个编辑操作,然后一起提交。整体要么都成功要么都失败。缺点:只能全部回滚,不能部分回滚。在某些大事务中,代价太大2. 带保存点的扁平事务对上诉问题的优化处理,可以设置保存点,回滚

2021-06-02 16:51:40 463

原创 Mysql Innodb锁实现

lock与latchlatch:闩锁,一种轻量级的锁。当锁定时间短时性能很好,但是锁定时间长时,性能会很差。在Innodb中,latch可分为mutex(互斥量)和rwlock(读写锁)。目的是用来保证并发线程操作临界资源的正确性,作用于线程,没有死锁检测机制lock:锁。作用对象是事务,用来锁定数据库中的对象。有死锁机制。Innodb的行锁共享锁(S lock),允许事务读取一行数据。S锁可兼容其他S锁排他锁(X lock),允许事务更新或删除一行数据。X锁不兼容其他锁意向锁意

2021-05-27 18:09:00 300

原创 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

2021-05-26 10:34:58 230

原创 设计模式(1)类图、设计原则与工厂

UML类图如图所示,可分为三组实现: 虚线+三角形继承: 实线+三角形依赖: 虚线+箭头关联: 实线+箭头组合: 实心菱形+实线+三角形聚合: 空心菱形+实线+三角形设计原则开闭原则:对修改关闭,对扩展开放依赖倒置原则:软件系统的设计,应该是依赖接口,而不是具体的实现类接口分离原则:客户端接口应该按功能需求依赖多个不同的,而不是一个大而全的接口迪米特法则:即最少知道原则,一个类应该尽量少的依赖其他类里氏替换原则:在父类可以使用的地方,使用子类替换,系统执行效果不

2021-02-26 16:00:10 298

原创 深入理解JVM虚拟机(3)垃圾回收算法与实现

传统的垃圾回收算法与实现(JDK9之前)如何判断数据可回收这里是引用标记-清楚算法这里是引用复制算法这里是引用标记整理算法这里是引用低延迟的垃圾回收器G1这里是引用Shenandoah这里是引用ZGC这里是引用...

2020-12-08 21:07:46 311

原创 Java JUC 1 基础知识

java线程状态转换关系juc并发包线程:是操作系统能够进行运算调度的最小单位CPU多级缓存由于cpu的计算速度与内存的i/o操作速度存在几个数量级的差距,为了弥补改差距,使用了多级高速缓存解决该问题,但同时又引出了新的问题CPU多级缓存-缓存一致性问题,而缓存一致性的解决是通过各种协议完成如MSI MESI MOSI等CPU多级缓存-乱序执行优化:在多线程中,如果两个线程有通信,该优化可能带来一些问题,比如线程a有一个标志位,在线程执行后改变;线程b会监听这个标志,然后做一些处理,由于乱

2020-11-17 11:37:35 421 2

原创 深入理解JVM虚拟机(2)类加载机制

类加载过程一个类从被加载到虚拟机内存开始,到卸载出内存为止,一共需要经历加载、验证、准备、解析、初始化、使用和卸载,其中加载、验证、准备、解析、初始化又被称为类加载过程,而验证、准备、解析又被称为连接。何时必须初始化对于初始化阶段,《JAVA虚拟机规范》有严格规定,(目前为止 jdk 12之前,之后不清楚)有且仅有下面6种情况:遇到new、getStatic、putStatic、invokeStatic、 这四个字节码指令时场景:1)使用new关键字实例化对象2)读取或设置一个类的静态

2020-11-02 21:26:41 269

原创 深入理解JVM虚拟机(1)运行时数据区

运行时数据区运行时数据区由:程序计数器、虚拟机栈、本地方法栈、堆和方法区组成。程序计数器:记录当前执行的代码行号,由于java多线程是通过线程轮流切换,分配处理器执行时间来实现,任何一个确定的时刻,一个CPU只能执行一个线程的代码,为例保证下一次线程执行时,能正常继续执行,每个线程需要独立的计数器虚拟机栈:描述了虚拟机执行方法的内存模型。当执行一个方法时,虚拟机会同步创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、返回地址等。一个方法执行至结束的过程就是一个栈帧从入栈到出栈的过程。局

2020-11-02 20:10:49 276

原创 Mysql之Innodb引擎

查询语句分析首先我们可以用EXPLAIN或DESCRIBE(简写:DESC)命令分析一条查询语句的执行信息优化子查询在MySQL中,尽量使用JOIN来代替子查询.因为子查询需要嵌套查询,嵌套查询时会建立一张临时表,临时表的建立和删除都会有较大的系统开销,而连接查询不会创建临时表,因此效率比嵌套子查询高.常用数据库优化方法索引是提高数据库查询速度最重要的方法之一。在表中建立索引,优先考虑where、group by使用到的字段。查询条件中,尽量不使用select *,因为会返回过多

2020-10-28 20:53:40 416 1

原创 spring面试笔记

spring AOPAOP:面向切面的编程;Filter(过滤器)也是一种 AOP., 是对传统 OOP(面向对象编程) 的补充.AOP 的主要编程对象是切面(aspect), 而切面模块化横切关注点.比如事务和日志等。实现原理 java动态代理机制和CGLIB动态代理。JDK动态代理只提供接口的代理,不支持类的代理。核心InvocationHandler接口和Proxy类,InvocationHandler 通过invoke()方法反射来调用目标类中的代码,动态地将横切逻辑和业务编织在一起;接着P

2020-10-27 22:55:50 336 1

原创 红黑树

红黑树的规则每个节点非红即黑根节点总是黑色的如果节点是红色的,则它的子节点必须是黑色的(反之不一定)每个叶子节点都是黑色的空节点(NIL节点)从根节点到叶节点或空子节点的每条路径,必须包含相同数目的黑色节点(即相同的黑色高度)树的旋转以 LL型、LR型、RR型、RL型基础的为例,旨在对树有一定的了解​​​​​​LL型 如下图所示,将不满足的元素向右旋转即可​​​​​​LR型 如下图所示,需要进行两部操作,第一步交换2和4,将图形转为LL型;然后右旋​​​​​​RR型 如下图所示,

2020-10-27 20:39:36 228

原创 Netty 3-框架设计

线程模型传统阻塞I/O服务模型采用阻塞I/O模式获取输入的数据每个连接都需要独立的线程完成数据的输入,业务处理,数据返回问题:1. 并发数很大,就会创建大量线程,占用很大系统资源2. 连接创建后,如果当前线程暂时没有数据可读,该线程会阻塞在read操作,造成线程资源浪费Reactor模型基于I/O复用模型:多个连接共用一个阻塞对象,应用程序只需要在一个阻塞对象等待,无需阻塞等待所有连接。当某个连接有新的数据可以处理时,操作系统通知应用程序,线程从阻塞状态返回,开始进行业务处理基于线

2020-09-21 22:30:46 293

原创 Netty-2零拷贝

零拷贝基本介绍零拷贝是网络编程的关键,很多性能优化都离不开。在Java程序中,常用的零拷贝有mmap(内存映射)和 sendfile。DMA copy :直接内存拷贝一次传统的IO操作和网络编程需要经历多少次用户态与内核态的转换,以及多少次数据拷贝? File file = new File("D://test.txt"); RandomAccessFile raf = new RandomAccessFile(file,"rw"); byte[] bytes =

2020-09-17 21:59:49 357

原创 Netty-1 基础学习

Netty的介绍- Netty是一个**异步**的、基于**事件驱动**的网络应用框架,用于快速开发高性能、高可用的网络IO程序- Netty主要针对在TCP协议下,面向客户端的高并发应用,或者P2P场景下,大量数据持续传输的应用- 基于NIOI/O模型BIO 传统阻塞IO每个请求都需要创建独立的线程,与对应的客户端进行数据Read业务处理,数据 Write。当并发数较大时,需要创建大量线程来处理连接,系统资源占用较大。连接建立后,如果当前线程暂时没有数据可读,则线程就阻塞在Read操

2020-09-08 21:55:29 507

原创 Redis 2 配置文件redis.conf以及应用

redis.confunits 单位对大小写不敏感include 引用其他配置文件NETWORKbind 127.0.0.1 ::1 绑定哪些ip才能访问protected-mode yes 是否保护port 6379 端口daemonize yes 以守护进程的方式运行,默认no- pidfile /var/run/redis.pid 如果是上面是yes,就需要指定一个pid文件- loglevel notice 日志级别 debug/verbose/notice/warning

2020-09-02 19:27:08 334

原创 Java JUC 3 -AQS同步组件

AQS同步组件CountDownLatch维护一个计数器State,每调用countdown计数器减1,当调用await时,会将当前线程放到阻塞队列中并挂起,只有当state为0时,才会唤醒阻塞队列中的线程(也就是移到同步队列),该线程才会执行。当某个计算需要等待另一个应用的完成时使用,用法:public static void main(String[] args) throws InterruptedException { CountDownLatch latch = new CountD

2020-08-31 21:58:29 305

原创 Java JUC 2 -AQS

AQS理解AQSAbstractQueuedSynchronizer,它提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架,ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier等并发类均是基于AQS来实现的,具体用法是通过继承AQS实现其模板方法,然后将子类作为同步组件的内部类。AQS基本框架如下图所示:AQS维护了一个volatile的共享变量state和一个FIFO线程等待队列。当state>0时表示已经获取了锁,当

2020-08-31 21:56:23 359

原创 JavaSE基础知识2

面试遇到的基础题下面代码的输出结果public class Parent { static { System.out.println("Parent - 静态代码块"); } { System.out.println("Parent - 代码块"); } public Parent() { System.out.println("Parent - 构造"); }}public class Child extends Parent{

2020-08-27 20:20:50 323

原创 Redis 1基础知识

redis 数据结构string# 1单值缓存set key valueget key# 2对象缓存mset user:1:name 张三 user:1:age 12mget user:1:name user:1:age# 3分布式锁setnx product: 100 // 返回1 表示获取锁成功setnx product: 100 // 返回0 表示获取锁成功//第一次设置可以获取成功,第二次设置,由于已经有了,所以获取失败返回 0 ,// 这样就知道已有其他线程已经获

2020-08-26 21:46:44 312

原创 设计模式(2)单例模式

单例模式饿汉式public class SingletonTest {private SingletonTest test2 = new SingletonTest();/*** 饿汉式:如果系统没有使用,会造成资源浪费* 如果初始化中,执行代码多,会使启动慢*/public SingletonTest getInst() {return test2;}懒汉式public class SingletonTest {private SingletonTest test =

2020-08-23 15:45:44 225

原创 Mysql小知识

1 使用B+Tree 而不使用二叉树的原因:二叉树是不平衡树二叉树的深度太深,I/O操作次数过多每次I/O可读取16K的量,但二叉树保存数据太少,没有很好的利用IO的预读能力。2 B+Tree 与 B Tree的区别B+节点关键字搜索采用闭合区间B+非叶节点不保存数据相关信息,只保存关键字和子节点的引用B+关键字对应的数据保存在叶子节点中B+叶子节点是顺序排列的,并且相邻节点具有顺序引用的关系3 innodb引擎innodb采用聚集索引,使用该引擎推荐ID必须有且自增聚集

2020-08-22 12:58:36 324

原创 MyBatis

1 JDBC的执行流程加载JDBC驱动建立并获取数据库连接connection创建JDBC Statements对象设置SQL语句的传入参数执行SQL语句并获得查询结果对查询结果进行转换处理并将处理结果返回释放相关资源(关闭Connection,关闭Statement,关闭ResultSet)2 对mybatis的整体理解MyBatis是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis可以对配置和原生Map使用简单的XML或注解,将接口和Java的POJO映射成

2020-08-20 21:42:02 254

原创 HashMap与ConcurrentHashMap

map类1. HashMap的数据结构哈希表结构(数组+链表),在jdk1.8之后当链表超过8时转为红黑树结构,当链表少于6时,转回链表2. HashMap的工作原理HashMap的底层由hash数据和单项链表实现,数组的每个元素都是链表,由Node内部类实现,通过put/get存储和获取数据3. HashMap的put工程计算key的hash值,并与数据取模,获取元素的存储位置如果没有hash冲突,则插入如果hash冲突,则进行equals比较,相同则覆盖,不同则在后面插入调整数组大小

2020-08-20 20:29:10 418

原创 idea快捷键汇总

idea快捷键汇总常用快捷键ctrl+shift+ +/- 展开「或折叠」代码shift+f6: 重命名ctrl+alt+m: 提取方法ctrl+alt+l: 格式化代码CTRL+ALT+T 把选中的代码放在 TRY{} IF{} ELSE{} 里CTRL+ALT+U 查看类的继承结构Ctrl+D

2020-08-20 20:01:53 352

原创 关于ArrayList与LinkedList的增删改查

都说链表增删快,查询慢,数组查询快,增删慢,但是关于ArrayList和LinkedList,你真的用对了吗?有对比过各个方面之间的性能吗?下面的测试以500000条为例:插入:public static void main(String[] args) { int num = 500000; test1(num); } private...

2020-03-25 21:02:06 563

原创 正则表达式-语法大全-详细

类型 字符 描述 非打印字符 \cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。 \f 匹配一个换页符。等价于 \x0c 和 \cL。 \n 匹配一个换行符。等价于 \x0a 和 \cJ。 \r 匹配一个回车符。等价于...

2020-03-12 20:54:08 529

原创 java-排序算法-未完

再java中经常需要对数据进行排序,一个好的排序算法,可以大大提高程序的效率,最近开始看数据结构与算法,将自己学习的笔记和心得纪录下来。冒泡排序 这大概是想我这种新手使用最多的排序方法了,也基本上是唯一能熟练使用的排序算法,但是在时间上可以说是相当慢了。由于这个比较简单,原理什么的都不重要了,忽略。 private static void sortByBubble(Integer[...

2018-12-02 23:31:51 285

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除