- 博客(50)
- 收藏
- 关注
原创 精讲java中的CAS
CAS(Compare And Swap)指比较并交换。CAS算法CAS(V, E, N)包含3个参数,V表示要更新的变量,E表示预期的值,N表示新值。在且仅在V值等于 E值时,才会将V值设为 N,如果 V值和 E值不同,则说明已经有其他线程做了更新,当前线程什么都不做。最后,CAS返回当前V的真实值。CAS并发原语体现在JAVA语言中就是sun.misc.Unsafe类中的各个方法。调用UnSafe类中的CAS方法,JVM会帮我们实现出CAS汇编指令。这是一种完全依赖于硬件的功能,通过它实现了原子操作。
2023-09-14 16:07:26 364
原创 AQS锁原理
AQS是juc包下lock接口的底层实现原理,其维护了一个维护了一个类型的变量state用来表示锁的状态,并且底层维护了一个双向队列用来阻塞竞争锁的线程,提供了独占式和共享式的资源获取方式,有公平与非公平锁的实现原理。
2023-09-14 11:14:22 399
原创 Java 类加载机制
本文章将解释java的类加载机制。类是在运行期间第一次使用时,被类加载器动态加载至JVM。JVM不会一次性加载所有类。因为如果一次性加载,那么会占用很多的内存。
2023-09-11 18:44:08 924
原创 为什么使用Nacos而不是Eureka(Nacos和Eureka的区别)
为什么如今微服务注册中心用Nacos相对比用Eureka的多了?本文章将介绍他们之间的区别和优缺点。
2023-08-26 12:52:21 4084
原创 RocketMQ
消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。对于消息中间件,常见的角色大致也就有Producer(生产者)、Consumer(消费者)例如:寄快递。
2023-08-23 19:35:56 394
原创 MySQL 事务
任何一种数据库,都会拥有各种各样的日志,用来记录数据库的运行情况、日常操作、错误信息等,MySQL 也不例外。例如,当用户 root 登录到 MySQL 服务器,就会在日志文件里记录该用户的登录时间、执行操作等。
2023-08-22 21:09:29 1828
原创 Redis之持久化机制
官方推荐两个都启用,如果对数据不敏感,可以选单独用RDB,不建议单独用 AOF,因为可能会出现Bug;如果只是做纯内存缓存,可以都不用;
2023-08-20 14:32:22 522
原创 SpringBoot整合Shiro实现登录认证,鉴权授权
近期对Springboot框架的学习中,为了更好的学习理解Springsecurity中间件,先学习了一下“老派”的shiro安全框架,本文章将通过注解的方式实现基础的用户认证和角色授权案例
2023-08-17 21:21:39 835
原创 Redis之缓存雪崩、缓存击穿、缓存穿透问题
简单理解缓存雪崩和缓存击穿的区别就是雪崩是多个key失效或者Redis宕机,而缓存击穿是一个被高并发访问的key失效导致给数据库造成巨大压力,而缓存穿透指的是一个在redis和数据库都不存在的数据被高并发访问而导致给数据库造成压力。
2023-08-11 21:25:37 716
原创 Redis为什么这么快?
Redis为什么这么快?内存存储:Redis是使用内存存储,没有磁盘IO上的开销。数据是存在内存中的,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1).单线程实现(Redis6.0以前):Redis使用单个线程处理请求,避免了多个线程之间切换和锁资源争夺的开销。注意:单线程是指的是在核心网络模型中,网络请求模块使用一个线程来处理,即一个线程处理所有网络请求。非阻塞IO:Redis使用多路复用IO技术,将epoll作为I/O多路复用技术的实现,再加上Redis自身的事件
2023-08-10 20:46:57 175
原创 SpringBoot基础之注册Servlet三大组件
SpringBoot默认是以jar包的方式运行嵌入式Servlet容器来启动应用,没有web.xml文件,所以Spring提供以下Bean来注册三大组件。注册自定义Servlet注册自定义Filter注册自定义Listener除了以上的方法也可以使用传统的@WebFilter…实现注册,但是这样只能注册声明自己创建的类,在将来我们会用到很多框架提供的类,就无法使用传统的注解注册,所以推荐使用以上配置类的方式注册Servlet。
2023-08-09 21:39:23 857
原创 SpringBoot整合Mybatis-Plus
MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window) 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。特性无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作。
2023-08-08 23:54:33 9886
原创 算法基础之插入排序
插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。(类似与打牌时自己按顺序整理牌面时。
2023-08-07 22:14:46 642
原创 cookie和session区别
cookie:是针对每个网站的信息,每个网站只能对应一个,其他网站无法访问,这个文件保存在客户端,每次您拨打相应网站,浏览器都会查找该网站的 cookies,如果有,则会将该文件发送出去。cookie:cookie的生命周期当浏览器关闭的时候就消亡了,cookie的生命周期是累计的,从创建时就开始计时,30min后cookie生命周期结束。session:session的生命周期是间隔的,从创建时开始计时如在30min内没有访问session,那么session生命周期就被销毁。
2023-08-06 20:34:42 111
原创 Spring中的循环依赖问题
一级缓存:为“Spring 的单例属性”而生 ,就是个单例池,用来存放已经初始化完成的单例 Bean;二级缓存:为“解决 AOP”而生 ,存放的是半成品的 AOP 的单例 Bean;三级缓存:为“打破循环。
2023-08-05 22:16:21 515 1
原创 Spring中Bean的“一生”(生命周期)
首先是实例化属性赋值初始化销毁这 4 个大阶段;再是初始化的具体操作,有Aware接口的依赖注入在初始化前后的前后置处理以及和 配置类加载的的初始化操作;实现接口调用destory()方法销毁以及配置类加载的销毁方法。
2023-08-05 20:30:40 533
原创 Spring核心思想之AOP
AOP(Aspect-Oriented Programming: 面向切面编程):将那些与业务无关却为业务模块所共同调用的逻辑(例如事务处理、日志管理、权限控制等)封装抽取成一个可重用的模块,这个模块被命名为“切面”(Aspect),便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性;
2023-08-04 20:30:06 559
原创 Spring中常用的注解
大家应该都知道Sping的一大核心思想就是IOC控制反转,可以通过的方式管理很多bean,但是一旦管理的bean多了,配置文件就会显得很臃肿,所以spring又提供了更好的方式解决这个问题——注解。
2023-08-02 22:26:52 153
原创 Spring第一大核心思想之Ioc/DI
本文章将介绍Spring第一大核心思想-Ioc控制反转和DI依赖注入,以及它们简单的实现案例。IOCIOC,中文释义:控制反转 ),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。指将创建对象的控制权转移给Spring框架进行管理。由Spring框架根据配置文件或注解等方式,创建bean对象并管理各个bean对象之间的依赖关系。使对象之间形成松散耦合的关系,实现解耦;控制 :指的是对象创建(实例化管理)的权力反转 :控制权交给外部环境(Spring框架、IoC容器)
2023-08-01 22:16:49 191
原创 线程池(重点)
本文章介绍常用的线程池线程池内部维护了若干个线程,没有任务的时候,这些线程都处于等待空闲状态。如果有新的线程任务,就分配一个空闲线程执行。如果所有线程都处于忙碌状态,线程池会创建一个新线程进行处理或者放入队列(工作队列)中等待。以上就是线程池的介绍,并不推荐使用Executors工具类创建的线程池,因为这样创建出来的线程池无法给线程命名,而且不灵活,无法根据需求设定需要的参数(核心线程数,最大线程数,非核心线程存活时间,阻塞队列),所以建议使用自己创建线程,灵活使用;
2023-07-24 21:11:43 62
原创 CopyOnWriteArrayList核心源码阅读及个人理解(附注释和过程解析)
本文章阅读CopyOnWriteArrayList常用方法的核心源码,解读实现过程。
2023-07-17 22:56:46 362 2
原创 为什么不推荐使用Executors创建线程池?(面试常问)
因此,为了更好地控制和管理线程池,推荐使用**ThreadPoolExecutor**类来手动创建线程池,它可以自定义线程名称,还可以根据具体的需求自己设置线程池的参数:例如核心线程数、最大线程数、队列类型、线程工厂等、以及自定义拒绝策略来处理任务无法执行的情况。
2023-07-15 19:40:10 690 2
原创 非对称式加密(RSA算法案例)
非对称加密就是加密和解密使用不同的密钥,只有同一个公钥-私钥才能正常的加解密。特点:非对称式加密算法的安全性非常高,但是运算速度非常的慢,比对称加密要慢得多。
2023-07-11 22:34:24 662
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人