![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java后端
文章平均质量分 90
北冥有瑜
这个作者很懒,什么都没留下…
展开
-
linux中的五大IO模型和java的三种IO模型
之前经常听到五种io模型和三种io模型的说法,经常容易弄混淆,这里详细讲解下。五大IO模型:Linux系统中的五种io模型,分别是:阻塞io、非阻塞io、多路复用io,信号驱动io和异步io。三种IO模型:JAVA种的三种io模型,分别是:同步阻塞(BIO),同步非阻塞(NIO)和异步非阻塞模型(AIO)。原创 2023-11-13 13:27:01 · 43 阅读 · 0 评论 -
Spring AOP
AOP概述通过AOP提出横切的概念后,在把模块功能正交化的同时,也在此基础上提供一系列横切的灵活实现,比如通过使用Proxy代理对象、拦截器字节码翻译技术等一系列AOP技术,来实现切面应用的各种编织实现和环绕增强。**面向切面编程(Aspect Oriented Programming,AOP)**其实就是一种关注点分离的技术,为了将业务功能的关注点和通用化功能(日志、缓存、事务等)的关注点分离.切面(Aspect):指的就是通用功能的代码实现,比如我们上面演示的时间记录切面,日志切面,它们都是普通原创 2022-03-20 19:02:11 · 46 阅读 · 0 评论 -
spring IOC原理
IOC初始化过程IOC容器初始化是由ApplicationContext中的refresh()方法启动的,这个方法标志着IOC容器正式启动。这个启动包括BeanDefinition的Resource定位、载入和注册三个基本过程。Resource定位指的是BeanDefinition资源定位,它由ResourceLoader通过统一的Resource接口来完成;载入过程就是将用户定义好的Bean表示成IOC容器内部的数据结构,这个数据结构就是BeanDefinition;将BeanDefinition向原创 2022-03-13 20:51:50 · 1216 阅读 · 0 评论 -
锁底层实现及锁膨胀
Java锁底层实现及锁膨胀背景堆内存java内存模型缓存Synchronized原理Synchronized锁升级过程锁优化锁消除锁粗化二级目录三级目录背景堆内存jvm中,对象在内存中的布局分为三块:对象头:存储对象的哈市Code或锁信息,对象类型数据的指针和数组的长度等。实例变量:存放类的属性数据信息,包括父类的属性信息,如果是数组的实例部分还包括数组的长度,这部分内存按4字节对齐。填充数据:由于虚拟机要求对象起始地址必须是8字节的整数倍。填充数据不是必须存在的,仅仅是为了字节对齐。原创 2021-05-13 20:43:09 · 72 阅读 · 0 评论 -
Java8 Stream
Java8 StreamStream中间操作符mapflatmaplimitdistintfilterpeekskipsorted终止操作符collectcountfindFirstallMatchminreduceforEachtoArrayStreamStream 就如同一个迭代器(Iterator),单向,不可往复,数据只能遍历一次,遍历过一次后即用尽了,就好比流水从面前流过,一去不复返。Stream流的操作符分为两类:中间操作符和终止操作符。Stream 的一系列操作必须要使用终止操作,原创 2021-05-07 20:19:05 · 121 阅读 · 0 评论 -
NIO编程
NIO编程1、流1.1、 java.io下的字符流和字节流1.1.1、字符流1.1.2、字节流1.2、装饰器模式2、Socket2.1、通过Socket发送数据2.2、通过Socket读取数据3、BIO模型4、NIO模型5、NIO多人聊天室1、流1.1、 java.io下的字符流和字节流1.1.1、字符流字符流更加的方便我们使用,一般字符都是由多个字节来形成的,若我们使用字节流传输,则还需要我们自己将其转换为字符,若我们直接使用字符流的话,这样就能直接读取与输出字符。1.1.2、字节流字节原创 2021-04-05 14:14:37 · 113 阅读 · 1 评论 -
高频算法
高频算法215. 数组中的第K个最大元素思路:使用堆,建立一个K个元素的小顶堆,当元素比堆顶元素大时,入堆,否则不入堆。最后弹出堆顶元素即为第K个最大的元素。import java.util.PriorityQueue;public class Solution { public int findKthLargest(int[] nums, int k) { int len = nums.length; // 使用一个含有 k 个元素的最小堆原创 2021-03-24 21:19:31 · 630 阅读 · 0 评论 -
AQS
AQSAQS的核心思想:如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待已经被唤醒时锁分配的机制,这个机制AQS是用CLH队列锁实现的,即将暂时获取不到锁的线程加入到队列中。CLH队列是一个虚拟的双向队列,AQS是将每条请求共享资源的线程封装成一个CLH锁队列的一个结点来实现锁的分配。AQS使用一个int成员变量来表示同步状态,通过内置的FIFO队列来完成获取资源线程的排队工作。AQS使用CAS原创 2020-12-04 16:34:35 · 102 阅读 · 0 评论 -
线程池及参数调优
线程线程的生命周期新建,就绪,运行,阻塞,死亡创建线程的方式继承Thread实现Runnable实现Callable通过线程池的方式实现Runnalbe接口和Callable接口的区别Runnable接口不会返回结果或抛出检查异常,但是Callable接口会返回。线程池线程池就是首先创建一些线程,它们的集合称为线程池。使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会启动一条线程来执行这个任务,执行结束以后,该线程并不会死亡原创 2020-12-04 15:05:03 · 712 阅读 · 0 评论 -
ThreadLocal
ThreadLocalThreadLocal简介ThreadLocal原理ThreadLocal特性ThreadLocal简介ThreadLocal类主要解决的就是让每个线程绑定自己的值,可以将ThreadLocal类形象的比喻成存放数据的盒子,盒子中可以存储每个线程的私有数据。如果你创建了一个TheadLocal变量,那么访问这个变量的每个线程都会有这个变量的本地副本。他们可以使用get()和se()方法来获取默认值或将其值更改为当前线程所存的副本的值,从而避免了线程的安全问题。ThreadLoc原创 2020-12-04 11:14:22 · 74 阅读 · 0 评论