Spring框架05-IoC循环依赖

2020-05-05
阅读 2 分钟
1.4k
Spring IoC 循环依赖问题 什么是循环依赖 循环依赖其实就是循环引⽤,也就是两个或者两个以上的 Bean互相持有对⽅,最终形成闭环。⽐如A 依赖于B,B依赖于C,C⼜依赖于A 注意,这⾥不是函数的循环调⽤,是对象的相互依赖关系。循环调⽤其实就是⼀个死循环,除⾮有终结条件 Spring中循环依赖场景有: 构造器的循环依赖(...

Spring框架04-AOP应用

2020-05-05
阅读 3 分钟
1.9k
在讲解AOP术语之前,我们先来看⼀下下⾯这两张图,它们是一个案例需求的扩展(针对这些扩展的需求,我们只进⾏分析,在此基础上去进⼀步回顾AOP,不进⾏实现)

Spring框架03-IOC应用

2020-04-19
阅读 7 分钟
1.6k
通常,我们称BeanFactory为SpringIOC的基础容器ApplicationContext是容器的⾼级接⼝,⽐BeanFactory要拥有更多的功能,比如说国际化支持和资源访问(xml,java配置类)等等

Spring框架02-核心思想IOC和AOP

2020-04-17
阅读 2 分钟
1.8k
注意:IOC和AOP不是spring提出的,在spring之前就已经存在,只不过更偏向于理论化,spring在技术层次把这两个思想做了⾮常好的实现(Java)

Spring框架01-Spring概述

2020-04-17
阅读 2 分钟
2.8k
Spring 是分层的 full-stack(全栈) 轻量级开源框架,以 IoC 和 AOP 为内核,提供了展现层 SpringMVC 和业务层事务管理等众多的企业级应⽤技术,还能整合开源世界众多著名的第三⽅框架和类库,已经成为使⽤最多的 Java EE 企业应⽤开源框架

多线程与高并发13-Java8并发新特性

2020-04-15
阅读 5 分钟
3.3k
JDK1.8时,java.util.concurrent.atomic包中提供了一个新的原子类:LongAdder根据Oracle官方文档的介绍,LongAdder在高并发的场景下会比它的前辈AtomicLong 具有更好的性能,代价是消耗更多的内存空间

多线程与高并发12-JMM和底层实现原理

2020-04-14
阅读 7 分钟
2k
Java内存模型即Java Memory Model,简称JMM。JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型,所以JMM是隶属于JVM的。Java1.5版本对其进行了重构,现在的Java仍沿用了Java1.5的版本。Jmm遇到的问题与现代计算机中遇到的问题是差不多的

多线程与高并发11-并发安全

2020-04-14
阅读 3 分钟
1.4k
线程安全栈封闭:把对象封装在一个线程里,只有这个线程才能看到,无全局变量无状态:没有任何成员变量的类,就叫无状态的类,这种类一定线程安全让类不可变:类中的成员变量加上final关键字,不提供修改成员变量的地方,但是成员变量中如果有对象,final关键字也不能保证类的线程安全volatile:不能保证线程安全性,只...

多线程与高并发10-线程池

2020-04-13
阅读 6 分钟
3.7k
其实在真正的开发中,高并发的情形并直接用多线程,而是用线程池技术的地方比较多,线程的池化技术有很多好处,JDK也提供了线程池相关的类,下面将深入展开进行介绍

多线程与高并发09-并发容器(二)

2020-04-11
阅读 11 分钟
2.7k
TreeMap和TreeSet使用红黑树按照key的顺序(自然顺序、自定义顺序)来使得键值对有序存储,但是只能在单线程下安全使用;多线程下想要使键值对按照key的顺序来存储,则需要使用ConcurrentSkipListMap和ConcurrentSkipListSet,分别用以代替TreeMap和TreeSet,存入的数据按key排序。在实现上,ConcurrentSkipListSet 本质...

多线程与高并发08-并发容器(一)

2020-04-11
阅读 4 分钟
1.5k
就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消...

多线程与高并发07-一道有趣的面试题目

2020-04-09
阅读 4 分钟
1.5k
一道有趣的面试题 前面学习了多线程中的各种多线程工具类,还是锁的使用,下面来看一道有趣的面试题目,让大家有机会尝试使用前面的各种多线程工具类和锁 题目 请写一个程序,让两个线程交替输出“ABCDEF”和“123456”,输出结果为固定“A1B2C3D4E5F6” 解法 Talk is cheap, show me the code!!! synchronized+wait/notify {...

多线程与高并发06-显示锁和AQS

2020-04-09
阅读 11 分钟
1.4k
Java程序是靠synchronized关键字实现锁功能的,使用synchronized关键字将会隐式地获取锁,但是它将锁的获取和释放固化了,也就是先获取再释放,而不需要我们手动的进行获取和释放,使用起来也更加方便,也不用担心由于某种异常场景没有释放锁

多线程与高并发05-原子操作CAS

2020-04-06
阅读 9 分钟
2.7k
实现原子操作可以使用锁,锁机制,满足基本的需求是没有问题的了,但是有的时候我们的需求并非这么简单,我们需要更有效,更加灵活的机制,synchronized关键字是基于阻塞的锁机制(锁升级),也就是说当一个线程拥有锁的时候,访问同一资源的其它线程需要等待,直到该线程释放锁

多线程与高并发04-线程的并发工具类

2020-04-05
阅读 11 分钟
2k
设置一个初始值,然后await,减到0,自动往下走门闩,CountDownLatch这个类能够使一个线程等待其他线程完成各自的工作后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有的框架服务之后再执行

多线程与高并发03-生产者消费者试题

2020-04-05
阅读 3 分钟
1.3k
采用多线程技术,例如wait/notify,设计实现一个符合生产者和消费者问题的程序,对某一个对象(枪膛)进行操作,其最大容量是20颗子弹,生产者线程是一个压入线程,它不断向枪膛中压入子弹,消费者线程是一个射出线程,它不断从枪膛中射出子弹。

多线程与高并发02-线程基础(二)

2020-04-04
阅读 6 分钟
1k
线程之间相互配合,完成某项工作,比如:一个线程修改了一个对象的值,而另一个线程感知到了变化,然后进行相应的操作,整个过程开始于一个线程,而最终执行又是另一个线程。前者是生产者,后者就是消费者,这种模式隔离了“做什么”(what)和“怎么做”(How),简单的办法是让消费者线程不断地循环检查变量是否符合预期在...

多线程与高并发01-线程基础(一)

2020-04-04
阅读 6 分钟
1.8k
基础概念 进程和线程 进程是程序运行资源分配的最小单位 线程是CPU调度的最小单位,必须依赖于进程二存在 任何程序都必须创建线程,Java程序的main函数就会创建一个主线程 Linux下一个进程最多只能开1000个线程,新线程分配栈空间1M CPU核心数和线程数关系 多线程: Simultaneous Multithreading,简称SMT,让同一个处理...

Netty源码06-Netty相关问题小结

2020-04-03
阅读 3 分钟
1.6k
Netty使用更高效的socket底层通信方式epoll,对JAVA原生NIO空轮询引起的cpu占用飙升在内部进行了处理,避免了直接使用NIO的陷阱,简化了NIO的处理方式

Netty源码05-Netty编解码器框架

2020-04-03
阅读 3 分钟
2.1k
应用程序写入的字节大小大于套接字发送缓冲区的大小,会发生拆包现象* 应用程序写入数据小于套接字缓冲区大小,网卡将应用多次写入的数据发送到网络上,这将会发生粘包现象

Netty源码03-Netty整体框架

2020-03-21
阅读 8 分钟
2.4k
Netty整体框架 前面两篇文章对Java NIO进行了详细的介绍和分析,也给下面分析Netty源码打下一定的基础 netty框架参考博文:[链接][链接] Java已经有了一个原生的NIO框架,为什么还会出现Netty呢,这个原因主要有两个: Java的NIO还不够高效,其底层使用selector,而Netty使用Linux下最高效的I/O模式epoll Selector多路复...

Netty源码04-ByteBuf缓冲区内存管理

2020-03-21
阅读 5 分钟
2.8k
Netty 内存管理 Netty的高效和易用也得益于他强大的内存管理,下面这个章节就让我们一起来研究Netty是如何进行内存管理的 Netty ByteBuf缓冲区 官方列出了一些ByteBuf的特性: 需要的话,可以自定义buffer类型; 通过组合buffer类型,可实现透明的zero-copy; 提供动态的buffer类型,如StringBuffer一样,容量是按需扩展...

Netty源码02-Java的NIO(二)

2020-03-21
阅读 4 分钟
1.7k
文件通道是连接到文件的SeekableByteChannel。它在其文件中有一个当前的position,可以是查询position,也可以是修改的position(long)。文件本身包含一个可变长度的字节序列,可以读取和写入,并且可以查询当前的size。当写入的字节超过当前大小时,文件大小会增加;当文件truncated时,文件大小会减小。文件还可能具...

Netty源码01-Java的NIO(一)

2020-03-20
阅读 4 分钟
2.5k
同时要想深入理解Netty,看懂Netty源码和框架也需要储备许多基础的知识,下面就将从这些基本知识一一展开,逐步揭开Netty源码神秘的面纱

MySQL04-MySql的事务隔离级别

2020-03-17
阅读 2 分钟
1.5k
相对于串行处理来说,并发事务处理能大大增加数据库资源的利用率,提高数据库系统的事务吞吐量,从而可以支持更多用户的并发操作,但与此同时,会带来一下问题:

MySQL03-MySql的锁机制

2020-03-17
阅读 5 分钟
1.2k
锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的 计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显...

MySQL02-索引与优化

2020-03-16
阅读 3 分钟
1.6k
sakila数据库说明 本文中所有的数据库是由MySql官网提供的sakila示例数据库 ZIP格式:[链接] tar格式 [链接] 官方文档 [链接] 解压后得到三个文件: 1、sakila-schema.sql 文件包含创建Sakila数据库的结构:表、视图、存储过程和触发器 2、sakila-data.sql文件包含:使用 INSERT语句填充数据及在初始数据加载后,必须创...

MySQL01-引擎索引与基础数据结构

2020-03-14
阅读 3 分钟
1.4k
Hash表的索引格式首先需要计算Hash值,然后用mod方法确定值存储的位置,如果该位置已经有值,那就是Hash冲突,需要在该值下面的链表尾添加数据

Redis02-Redis高性能与epoll

2020-03-11
阅读 12 分钟
7.2k
Redis通信采用非阻塞IO, 内部实现采用epolll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io上浪费一点时

Redis01-Redis要点汇总

2020-03-11
阅读 5 分钟
1.9k
传统关系型数据库磁盘存储,必须给出schema类型(字节宽度),所以数据库是行级存储。数据表很大性能会下降。如果表有索引,增删改表慢,查询速度并发过多也会慢