自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 synchronized 字节码层原理解析及锁升级

作为Java程序员可能使用synchronized的频次不是很多大部分时间都是在crud,但是作为一个技术人还是要有点追求的,本篇文章想写了好久在此之前需要了解Java运行时数据区、Java字节码与字节码文件、Java线程模型(挖坑),再此基础上细致的聊一聊Java为了实现线程安全synchronized都做了那些事情。

2022-11-08 01:31:42 470

原创 Java二进制指令码大全及解析

编写的java会被编译成机器可以看懂的字节码文件,那么这些字节码文件包含了那些指令,这些指令都标识了那些东西操作了那些东西本文带你了解

2022-11-06 00:47:20 1330

原创 Java运行时数据区详解

JVM运行我们的代码,在JVM工作时是怎么利用内存空间的,它把内存划分了那些区域,堆和栈都是承担了那些任务存放了那些数据本文带你了解。

2022-11-05 20:33:09 1397

原创 Redis底层数据结构(一)

Redis这么快得益于基于内存了IO复用,初次之外Redis为了存储数组字符串自动以的一些的底层数据结构也功不可没。

2021-09-12 23:31:06 18588

原创 redis文件事件和时间事件

Redis在6.0以前是单线程的,在6.0之后可以通过配置文件开启多线程,6.0之后的多线程是指在io方面使用多线程来执行以加快I/O的速度。Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件:文件事件(file event)Redis服务器通过套接字与客户端(或者其他Redis服务器)进行连接,而文件事件就是服务器对套接字操作的抽象。服务器与客户端(或者其他服务器)的通信会产生相应的文件事件,而服务器则通过监听并处理这些事件来完成一系列网络通信操作。文件事件处理器使用I/O多路复用(m

2021-09-05 14:43:32 19324

原创 线程池源码之runWorker方法解析

一切都在源码中final void runWorker(Worker w) { // 获取当前线程对象的引用 Thread wt = Thread.currentThread(); // 获取worker的firstTask Runnable task = w.firstTask; // 获取完之后把worker的firstTask置为null 防止下次获取到 w.firstTask = null; // 初始化worker的state = 0, e

2021-07-30 01:14:31 24883 2

原创 线程池源码之addWorker方法解析

一切都在源码中private boolean addWorker(Runnable firstTask, boolean core) { retry: // 每次for循环都需要获取最新的ctl值 for (int c = ctl.get();;) { /* * 这个地方的判断为true时可以分成三种情况 * 1、线程池的状态是大于等于 STOP的 这个判断为true * 2、线程池状态是SHUTDOWN 但是 fir

2021-07-30 01:12:56 24387

原创 线程池的源码解析之execute方法解析

上一段自己打了注释的源码吗 jdk版本是11和8的略有不同线程池的一些属性和方法// 记录线程池的状态信息 高三位是状态信息,其余位表示工作的worker数量private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));// 表示worker数量的位数也就是上面说的 其余位private static final int COUNT_BITS = Integer.SIZE - 3;// 求worker数量的掩码 1

2021-07-30 01:10:11 23856

原创 redis应用篇----秒杀、签到、session共享

利用redis的QPS高的特点我们可以用来做秒杀,redis的bitmap结构我们可以做登陆签到,利用缓存可以做session共享

2021-07-19 00:13:49 31603 2

原创 redis应用篇----延时通知

当你有延迟通知这种类似的需求的时候,可能最先想到的是定时器,但是定时器这种实现是极其的不友好他会使你的pod变为有状态的,今天使用redis来实现这一功能----延时通知

2021-07-18 18:47:57 32879 1

原创 redis缓存----一致性hash和hash槽

一致性hash和hash槽都是为了解决分布式缓存系统中数据节点的选择以及在增删阶段后减少数据缓存消失范畴。

2021-07-18 14:24:07 32776

原创 redis应用篇----分布式锁

使用Synchronize和ReentrantLock等方法来实现线程间的同步只能锁住单实例内的临界区,但是现在大多数服务的部署方式都不是单实例的,你需要一种方法锁住其他实例的临界区那么今天的方法就可以帮助到你----分布式锁!!!

2021-07-18 02:02:56 33075 1

原创 缓存那点事----缓存击穿、缓存雪崩

缓存击穿和缓存雪崩是缓存的另外两大问题,这两个问题同样也会影响我们服务的高可用性和稳定性,本文将讲述这两种问题出现的原因和解决方案。

2021-07-16 00:43:21 35351

原创 缓存那点事----缓存穿透

现在的服务架构大量的使用了缓存,可以说缓存用的好服务慢不了,但是缓存的使用又会遇到一些问题比如今天这种----缓存穿透

2021-07-15 01:34:43 17631

原创 跳表是个好东西你值得拥有!

跳表是一种特殊的链表组成的也因此他有链表的优点插入方便,也由于他不同于普通的单链表,他带了索引所以他的查找性能也是非常的优秀。

2021-07-14 01:30:28 18630

原创 spring的后置处理器今天我来给你肤浅的讲讲

spring是如何获取后置处理器的,又是按照什么顺序来执行这些后置处理器的,看完这篇文章你进全懂了

2021-06-29 00:29:33 31228 1

原创 手动模拟一个Mybatis,让你对spring拓展点的使用心里有一点点数

应用spring给出的拓展点,手写一个青春mini版的Mybatis可以集成到项目里面并且可以手动开启和关闭,让你对spring的拓展心中有数。

2021-06-27 02:19:06 31766

原创 @Import的使用和源码分析

@Import可以让我们实现根据用启动类上的注解来动态加载某些功能和特性例如Mybatis,本文章可以然你透彻理解并开心使用@import注解

2021-06-25 01:35:06 20412

原创 spring的full模式和lite模式的异同

full模式和lite模式的对比以及full实现原理

2021-06-22 01:27:21 22275 3

原创 @Configuration到底在干什么是怎么干的你了解过吗?

@Configuration的用法和相关原理和设计到的源码解析

2021-06-21 00:30:56 25981

原创 spring-data-jpa的@Query运行机制

**spring-data-jpa对与@Query运行机制**我们可以使用@Query注解符给Repository中的方法加入自定义sql,使得方法能按照我们自己想要的方式搜索或修改数据。关于这个@Query的注解符我们可以看到有一个参数nativeQuery默认值为false,当nativeQuery为false时我们需要给value一个Hql(Hibernate Query Language),当nativeQuery为true时我们需要给value一个Sql。下面来看一下nativeQuer

2020-12-16 02:26:32 2853

原创 Java异常分类以及异常处理

异常的分类1、受检查的异常,这类异常是必须显示地捕捉或抛出,如果显示地不捕捉或抛出通不过编译,这类异常是可以处理的异常,同时会强迫API的使用者捕获恢复异常或者声明异常继续向上抛出。(IOException,ClassNotFoundException,NoSuchMetodException)2、不受检查的异常,这类异常不必显示地捕捉和抛出,同时这类异常又分为两种,Error和运行时异常,导...

2019-10-19 12:21:07 211

原创 Java包装类的拆箱和装箱是怎么回事?

Java包装类的拆箱和装箱是怎么回事?什么是自动装箱和拆箱自动装箱就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。因为这里的装箱和拆箱是自动进行的非人为转换,所以就称作为自动装箱和拆箱。原始类型byte,short,char,int,long,float,double,b...

2019-09-17 17:25:41 2370

原创 java多线程和同步基础知识

多线程方法说明Thread.start()启动线程,线程进入就绪队列Thread.sleep()让线程进入休眠队列Thread.wait()让线程进入等待队列Thread.notify()让等待进程进入就绪队列notifyAll()让所有线程都进入就绪队列Thread.interrupt()中断进程,进程被中断后会抛出Interrup...

2019-05-24 16:00:42 106

原创 Java反射和注解符的使用

Java反射使用示例1、访问构造方法访问方法返回值类型说明Class.getConstructors()Constructor型数组获得所有访问权限为public的构造方法Class.getDeclaredConstructors()Constructor型数组获得所有构造方法Class.getConstructor(Class<?>…pa...

2019-05-22 14:00:27 13390

空空如也

空空如也

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

TA关注的人

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