自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 资源 (12)
  • 收藏
  • 关注

转载 七、Spring源码-解决循环依赖,为什么使用三级缓存

1.循序渐进,看一看什么是循环依赖?先来回顾一下三级缓存的概念。singletonObjects: 一级缓存,存储单例对象,Bean 已经实例化,初始化完成。earlySingletonObjects: 二级缓存,存储singletonObject,这个 Bean 实例化了,还没有初始化。singletonFactories: 三级缓存,存储singletonFactory。1.1 Bean 的创建过程@Servicepublic class CircularServiceA { pr

2022-05-22 22:14:16 219

原创 六、Spring源码-容器启动Bean的创建

容器启动最核心的步骤之一,初始化所有非懒加载的其余BeanAbstractApplicationContext.finishBeanFactoryInitialization(…)protected void finishBeanFactoryInitialization(ConfigurableListableBeanFactory beanFactory) { // Initialize conversion service for this context. // 初始化类型转换器

2022-05-22 22:05:13 216

原创 五、Spring源码-容器启动Bean的注册

代码清单5-1 为例介绍其中一种基于注解的容器AnnotationConfigApplicationContext的启动流程/** * @author Rab * @since 2022-04-24 */public class App { public static void main(String[] args) { AnnotationConfigApplicationContext applicationContext = new AnnotationConf..

2022-05-22 21:58:28 318

原创 四、Spring源码-IOC容器BeanFactory

4.1 BeanFactory介绍  我们前面说过,Spring的IoC容器是一个IoC Service Provider,但是,这只是它被冠以IoC之名的部分原因,我们不能忽略的是“容器”。Spring的IoC容器是一个提供IoC支持的轻量级容器,除了基本的IoC支持,它作为轻量级容器还提供了IoC之外的支持。如在Spring的IoC容器之上,Spring还提供了相应的AOP框架支持、企业级服务集成等服务。Spring的IoC容器和IoC Service Provider所提供的服务之间存在一定的交集,

2022-05-03 15:58:39 573

原创 三、Spring源码-注解说明

1.@Configuration  Indicates that a class declares one or more @Bean methods and may be processed by the Spring container to generate bean definitions and service requests for those beans at runtime, for example:@Configurationpublic class AppConfig {

2022-05-03 15:52:27 1255

转载 一、Linux Epoll IO模型

1.从网卡接收数据说起下图是一个典型的计算机结构图,计算机由CPU、存储器(内存)、网络接口等部件组成。了解epoll本质的第一步,要从硬件的角度看计算机怎样接收网络数据。下图展示了网卡接收数据的过程。在①阶段,网卡收到网线传来的数据;经过②阶段的硬件电路的传输;最终将数据写入到内存中的某个地址上(③阶段)。这个过程涉及到DMA传输、IO通路选择等硬件有关的知识,但我们只需知道:网卡会把接收到的数据写入内存。通过硬件传输,网卡接收的数据存放到内存中。操作系统就可以去读取它们。2.如何知道接收了数

2022-03-03 08:59:30 212

转载 一、Linux网络IO模型

1.最基本的 Socket 模型要想客户端和服务器能在网络中通信,那必须得使用 Socket 编程,它是进程间通信里比较特别的方式,特别之处在于它是可以跨主机间通信。Socket 的中文名叫作插口,咋一看还挺迷惑的。事实上,双方要进行网络通信前,各自得创建一个 Socket,这相当于客户端和服务器都开了一个“口子”,双方读取和发送数据的时候,都通过这个“口子”。这样一看,是不是觉得很像弄了一根网线,一头插在客户端,一头插在服务端,然后进行通信。创建 Socket 的时候,可以指定网络层使用的是 IP.

2022-03-03 08:47:08 215

原创 一、Java网络编程基础

1.计算机网络体系结构1.1 OSI七层模型开放系统互连参考模型 (Open System Interconnect 简称OSI)是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,为开放式互连信息系统提供了一种功能结构的框架。其目的是为异种计算机互连提供一个共同的基础和标准框架,并为保持相关标准的一致性和兼容性提供共同的参考。这里所说的开放系统,实质上指的是遵循OSI参考模型和相关协议能够实现互连的具有各种应用目的的计算机系统。OSI采用了分层的结构化技

2022-03-01 09:10:38 225

原创 六、MongoDB查询语法

MongoDB查询语法1.MongoDB数据类型2.查询2.1 语法格式2.2 查询选择器2.3 查询选择器实战in选择器exists选择器not选择器2.4 映射2.5 排序2.6 跳过或限制2.7 查询唯一值3.字符串数组选择查询3.1 数组单元素查询3.2 数组精确查找3.3 数组多元素查询3.4 索引查询3.5 返回数组子集4.对象数组查询4.1 单元素查询4.2 $in 查找符4.3 $all 操作符4.4 $elemMatch查找符1.MongoDB数据类型2.查询2.1 语法格式Mo

2020-12-01 21:12:23 861

原创 五、MongoDB与Spring结合

MongoDB与Spring结合1.Maven依赖2.Spring配置3.定义实体-Collection4.新增5.查询6.修改7.删除1.Maven依赖<!-- Spring-MongoDB --><dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <versi

2020-12-01 21:05:14 78

原创 四、MongoDB原生Java客户端

MongoDB原生Java客户端1.Maven依赖2.第一种方式:Document2.1 连接MongoDB2.2 新增2.3 查询2.4 修改2.5 删除3.第二种方式:Pojo3.1 连接MongoDB3.2 新增3.3 查询3.4 更新3.5 删除1.Maven依赖<!-- mongodb --><dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-

2020-12-01 20:59:23 197

原创 八、RabbitMQ与SpringBoot集成

RabbitMQ与SpringBoot集成1.maven依赖2.SpringBoot配置3.RabbitMQ配置3.1 ConnectionFactory:发布确认3.2 RabbitTemplate:失败通知,发布确认回调3.3 声明交换器与队列3.4 队列与交换器绑定3.5 SimpleMessageListenerContainer:队列绑定消费者,手动确认3.6 生产者失败通知与发布确认回调3.7 完整配置4.发送消息5.消费消息5.1 第一种方式:RabbitListener + RabbitHa

2020-11-03 10:03:01 285

原创 七、RabbitMQ与Spring实战

RabbitMQ与Spring实战1.场景2.RPC实现3.消息中间件的实现4.与Spring集成时的更多配置4.1 发送者确认4.2 交换器持久化配置4.3 消息持久化4.4 队列参数(死信交换器、持久化、队列级别消息过期、独占模式)4.5 消费者手动确认消息5.实战5.1 订单生产者Spring配置发送消息失败通知发布者确认5.2 库存消费者Spring配置消费消息:手动确认1.场景用户下订单买商品,订单处理成功后,去扣减库存,在这个场景里,订单系统是生产者,库存系统是消费者。库存是必须扣减的,在

2020-11-03 09:58:17 227

原创 六、RabbitMQ与Spring集成

RabbitMQ与Spring集成1.与Spring集成1.1 pom文件1.2 spring配置文件配置文件中增加命名空间连接相关配置生产者配置RabbitTemplate队列和交换器消费者配置队列和交换器消费者bean监听容器2.示例2.1 生产者Spring 配置文件发送消息2.2 消费者spring配置文件接收消息:fanout类型接收消息:Topic类型1.与Spring集成1.1 pom文件1.2 spring配置文件配置文件中增加命名空间连接相关配置生产者配置RabbitT

2020-11-03 09:51:23 235

原创 五、RabbitMQ控制队列

RabbitMQ控制队列1.临时队列1.1 自动删除队列1.2 单消费者队列1.3 自动过期队列2.永久队列3.队列级别消息过期4.队列保留参数列表5.消息的属性1.临时队列1.1 自动删除队列自动删除队列和普通队列在使用上没有什么区别,唯一的区别是,当消费者断开连接时,队列将会被删除。自动删除队列允许的消费者没有限制,也就是说当这个队列上最后一个消费者断开连接才会执行删除。自动删除队列只需要在声明队列时,设置属性auto-delete标识为true即可。系统声明的随机队列,缺省就是自动删除的。

2020-11-02 20:09:23 196

原创 四、RabbitMQ消息的消费

RabbitMQ消息的消费1.消息的获得方式1.1 拉取Get1.2 推送Consume2.消息的应答2.1 自动确认2.2 自行手动确认3.QoS预取模式4.消费者中的事务5.可靠性和性能的权衡6.消息的拒绝6.1 Reject和Nack6.2 死信交换器6.3 死信交换器和备用交换器的区别1.消息的获得方式1.1 拉取Get属于一种轮询模型,发送一次get请求,获得一个消息。如果此时RabbitMQ中没有消息,会获得一个表示空的回复。总的来说,这种方式性能比较差,很明显,每获得一条消息,都要和Ra

2020-11-02 19:53:25 468

原创 三、RabbitMQ消息发布时的权衡

RabbitMQ消息发布时的权衡1.失败通知2.发布者确认Confirm的三种实现方式:channel.waitForConfirms()channel.waitForConfirmsOrDie()channel.addConfirmListener()3.备用交换器4.事务不做任何配置的情况下,生产者是不知道消息是否真正到达RabbitMQ,也就是说消息发布操作不返回任何消息给生产者。怎么保证我们消息发布的可靠性?有几种常用机制。1.失败通知发送消息时设置mandatory标志在发送消息时设置

2020-11-02 19:44:15 147

原创 二、原生Java客户端与RabbitMQ通信

原生Java客户端与RabbitMQ通信1.DirectDirectProducer:direct类型交换器的生产者NormalConsumer:普通的消费者MulitBindConsumer:队列绑定到交换器上时,是允许绑定多个路由键的,也就是多重绑定MulitChannelConsumer:一个连接下允许有多个信道MulitConsumerOneQueue:一个队列多个消费者,则会表现出消息在消费者之间的轮询发送。2.Fanout消息广播到绑定的队列3.TopicTopicProducer订阅所有消息所

2020-11-02 19:30:15 189

原创 一、RabbitMQ综述

RabbitMQ综述1.AMQP概论2.包括的元素2.1 生产者、消费者、消息2.2 信道2.3 交换器、队列、绑定、路由键2.4 常见问题3.消息的确认4.交换器类型4.1 Direct4.2 Fanout4.3 Topic5.虚拟主机6.RabbitMQ在Windows下安装和运行6.1.下载Erlang:6.2 下载Windows版RabbitMQ6.3 安装和配置环境变量1.AMQP概论AMQP:即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标

2020-10-31 16:40:23 256

原创 三、MongoDB入门

MongoDB入门1. 数据库操作2.数据操作2.1 新增2.2 查询2.3 修改2.4 删除1. 数据库操作启动、连接# cd /usr/local/mongoDB/mongodbserver/# bin/mongod -f conf/mongodb.conf# bin/mongo查看数据库列表# show dbs;新增数据库没有就会新增# use rab查看文档集合(表)# show collections2.数据操作2.1 新增db.users.drop();

2020-10-30 15:42:44 315

原创 二、MongoDB安装

MongoDB安装1.创建MongoDB的安装路径2.下载文件并解压到指定目录3.创建相关文件3.1 创建数据库文件夹3.2 创建日志文件夹3.3 创建配置文件4.启动MongoDB5.连接MongoDB6.关闭数据库1.创建MongoDB的安装路径在/usr/local/ 创建文件夹mongoDB# cd /usr/local# mkdir mongoDB2.下载文件并解压到指定目录mongoDB 各个版本下载链接地址:http://dl.mongodb.org/dl/linux/x86

2020-10-29 21:55:55 165

原创 一、MongoDB综述

1.NoSQL1.1 NoSQL诞生背景NoSQL,泛指非关系型的数据库,NoSQL即Not-Only SQL,它可以作为关系型数据库的良好补充。随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系数据库产品的发展非常迅速。而传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,例如:1.High performance - 对数据库高并发读写的需求  w

2020-10-28 22:01:08 341

原创 二、并发容器

并发容器1.时间复杂度1.1 什么是大O1.2 常见的时间复杂度量级O(1)O(n)O(n2)O(logn)O(nlogn)2.HashMap源码分析3.ConcurrentHashMap3.1 JDK1.7中原理和实现ConcurrentHashMap中的数据结构初始化做了什么事?构造方法中部分代码解惑在get和put操作中,是如何快速定位元素放在哪个位置的?get()方法put()方法扩容操作size方法弱一致性3.2 JDK1.8中原理和实现与1.7相比的重大变化主要数据结构和关键变量初始化做了什么事

2020-10-26 21:45:31 100

原创 四、类的线程安全

类的线程安全1.怎么才能做到类的线程安全?1.1 栈封闭1.2 无状态1.3 让类不可变1.4 volatile1.5 加锁和CAS1.6 安全的发布1.7 ThreadLocal2 死锁2.1 静态死锁2.2 动态死锁2.3 线程饥饿3.锁性能思考3.1 缩小锁的范围3.2 减少锁的粒度1.怎么才能做到类的线程安全?1.1 栈封闭所有的变量都是在方法内部声明的,这些变量都处于栈封闭状态。public class Safe{ public int service(){ int a = 1

2020-10-26 21:25:58 431 1

原创 三、阻塞队列与线程池应用

阻塞队列与线程池补充1.LinkedTransferQueue2.LinkedBlockingDeque3.自定义线程池4.合理配置线程池5.ScheduledThreadPoolExecutor6.ComletionService1.LinkedTransferQueue一个由链表结构组成的无界阻塞队列。transfer(),必须要消费者消费了以后方法才会返回, tryTransfer()无论消费者是否接收,方法都立即返回。2.LinkedBlockingDeque一个由链表结构组成的双向阻

2020-10-26 21:24:45 177

原创 二、位运算Hash

位运算与Hash1.位运算1.1 补码、原码、反码1.2 为什么计算机系统中,数字用补码表示1.3 位运算使用1.4 位运算的常用小技巧1.4.1 判断奇偶数1.4.2 权限系统设计2. a % 2 n = a & (2 n - 1)3.Hash4.多线程下HashMap为什么线程不安全?4.1 put数据丢失4.2 扩容死循环1.位运算1.1 补码、原码、反码1.在计算机系统中,数字一律用补码表示、运算和存储。原码:原码表示法在数字前面增加了一位符号位,即最高位为符号位,正数位该位为0

2020-10-25 18:10:54 743

原创 一、多线程基础补充

多线程基础补充1.并行与并发2.怎么样才能让Java里的线程安全停止工作呢3.Thread的中断机制中断线程判断线程是否被中断如何中断线程底层中断异常处理方式中断应用使用中断信号量中断非阻塞状态的线程使用thread.interrupt()中断非阻塞状态线程使用thread.interrupt()中断阻塞状态线程4.等待/通知的标准范式5.等待超时模式的数据库连接池(wait/notify)6.Fork/join6.1 Fork/join介绍6.2 Fork/Join框架的实现原理:6.3 使用场景:6.4

2020-10-25 11:54:35 76

原创 八、线程池原理

线程池原理1.Executors的缺陷2.Executor 接口:3.ExecutorService接口4.FutureTask5.AbstractExecutorService5.ThreadPoolExecutor1.Executors的缺陷可以通过Executors静态工厂构建线程池,但一般不建议这样做Executors创建线程池可能会导致OOM(OutOfMemory ,内存溢出)在阿里巴巴Java开发手册中也明确指出,而且用的词是『不允许』使用Executors创建线程池。newFix

2020-10-23 15:44:17 70

原创 七、AQS原理篇

原理篇1.AQS (AbstractQueuedSynchronizer)1.1 AQS产生背景2 AQS设计和结构2.1 AQS设计思想2.2 同步状态2.3 阻塞2.4 队列2.5 条件队列3 AQS源代码实现3.1 独占式同步状态的获取和释放3.1.1 独占锁的获取3.1.2 独占锁的释放3.2 共享锁的获取和释放3.2.1 共享锁的释放3.2.2 共享锁的获取3.3 中断3.4 超时4 本节问题4.1 上节问题解答4.2 本节问题1.AQS (AbstractQueuedSynchronizer)

2020-10-22 21:19:30 219

原创 六、锁的深入化

锁的深入化1.锁的分类1.1 公平锁/非公平锁1.1.1 公平锁1.1.2 非公平锁1.2 可重入锁/不可重入锁1.2.1 可重入锁1.2.2 不可重入锁1.3 独享锁/共享锁1.3.1 独享锁1.3.2 共享锁1.4 互斥锁/读写锁1.4.1 互斥锁1.4.2 读写锁1.5 乐观锁/悲观锁1.5.1 悲观锁1.5.2 乐观锁1.6 分段锁1.7 偏向锁/轻量级锁/重量级锁1.7.1 偏向锁1.7.2 轻量级锁1.7.3 重量级锁1.8 自旋锁1.8.1 CAS: 无锁的执行者:Compare And Sw

2020-10-21 21:48:43 147

原创 五、Callable与Future模式

Callable与Future模式1.介绍2.Future3.Future模式4.JDK中的Future模式1.介绍创建线程的2种方式:继承Thread,实现Runnable接口,这两种方式都有一个缺陷就是:在执行完任务之后,无法获取执行结果。如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式达到效果。Callable位于java.util.concurrent包下:public interface Callable<V>{ V calls throws Excep

2020-10-20 13:45:36 99

原创 四、并发包工具与线程池

并发包工具与线程池1.并发包1.1 计数器:CountDownLatch1.2 CyclicBarrier屏障1.3 计数信号量 Semaphore2 阻塞队列 BlockingQueue2.1 介绍2.2 ArrayBlockingQueue2.2 LinkedBlockingQueue2.3 DelayQueue2.3.1 业务场景一:多考生考试2.3.2 业务场景二:具有过期时间的缓存2.4 优先队列 PriorityBlockingQueue2.5 同步队列:SynchronousQueue3 阻塞

2020-10-19 14:19:03 275 2

原创 三、多线程通讯

多线程通讯1.生产者-消费者模型1.1 示例1.2 wait、notify、notifyAll方法2.wait、notify常见问题2.1 丢失的信号2.2 假唤醒2.3 while循环其他场景:多个线程等待相同信号2.4 不要在字符串常量或全局对象中调用wait()2.5 wait、sleep、yeild方法的区别3 Lock锁3.1 synchronized与Lock对比3.1 lock():3.2 tryLock() & tryLock(long time, TimeUnit unit)3.3

2020-10-16 10:42:48 94

原创 二、多线程安全

多线程安全1.多线程安全问题2.synchronized使用及原理2.1 synchronized 使用2.2 synchronized 原理3.多线程死4.多线程运行状态(生命周期)5.用户线程与守护线程(User与Daemon)6.Join方法7.线程的优先级8.yield()方法1.多线程安全问题当多个线程同时共享,同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,也就是线程安全问题,但是做读操作是不会发生数据冲突问题。经典实例:两个窗口同时出售100张票public class

2020-10-14 18:44:32 562 2

原创 一、多线程基础

多线程基础1.线程和进程2.多线程应用场景:提高程序效率3.多线程创建方式4.多线程运行状态(生命周期)5.用户线程与守护线程(User与Daemon)6.Join方法7.线程的优先级8.yield()方法1.线程和进程1)进程:计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。2)线程:操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。2.多线程应用场景:提高程序效率3.多线程创建方式1)第一种方式:继承class T1 → Th

2020-10-13 18:06:11 61

org.json_0.0.0

eclipse 安装 sts报错, 报错原因: Missing requirement: Spring IDE Live Beans Graph 3.7.2.201511260958-RELEASE (org.springframework.ide.eclipse.beans.ui.livegraph 3.7.2.201511260958-RELEASE) requires 'bundle org.json 0.0.0' but it could not be found Cannot satisfy dependency: 解决办法,下载完成后,将JAR文件放在 eclipse安装目录下的plugins目录下 重启,然后重新安装 STS即可。

2017-04-22

jquery_1.7帮助文档中文版

jquery_1.7 帮助文档 中文版

2017-04-20

jdk1.8_java8_官方文档_英文版

jdk1.8_java8_官方文档_英文原版 空白或者显示404解决方法: 选择文件,右键属性,找到 解除锁定, 点击之后 重新打开即可

2017-04-20

mybatis eclipse插件

mybatis eclipse 插件 下载完成后,请看安装说明.txt

2017-04-20

activiti_安装所需插件

activiti bpmn插件安装失败, 报错原因: Cannot complete the install because one or more required items could not be found. Software being installed: Activiti Eclipse BPMN 2.0 Designer 5.18.0.201508100929 (org.activiti.designer.feature.feature.group 5.18.0.201508100929) Missing requirement: Activiti Eclipse BPMN 2.0 Designer 5.18.0.201508100929 (org.activiti.designer.feature.feature.group 5.18.0.201508100929) requires 'org.eclipse.emf.transaction 1.4.0' but it could not be found 解决办法:解压缩后,将三个jar文件放置在eclipse目录下的plugins目录下

2017-04-20

SQLyog最强大的企业破解版

SQLyog 企业版 破解版 解压即可使用,解压后,请先看下载安装说明.txt

2017-04-20

jQuery1.4.4类库

强大的JQuery类库,更加强化了Jquery的功能!具体使用功能相信大家会的

2014-11-06

jdom包解析xml数据

JDOM是一种使用 XML 的独特 Java 工具包,用于快速开发 XML 应用程序。它的设计包含 Java 语言的语法乃至语义。   JDOM是两位著名的 Java 开发人员兼作者,Brett Mclaughlin 和 Jason Hunter 的创作成果.

2014-11-06

json数据解析所需jar包

json-lib-2.4-jdk15.jar commons-beanutils-1.7.0.jar commons-collections-3.2.jar commons-lang.jar commons-logging-1.0.4.jar ezmorph-1.0.6.jar 没有的话会显示一些错误的,放在lib文件夹下面,简单json-lib示例工程,真心分享,希望能够帮到你!

2014-11-06

myeclipse 所有版本注册机

myeclipse所有版本的注册机,我试过2013,完美激活,切记仔细阅读使用前必看,按照步骤来

2014-10-02

jdk 1.7 帮助文档(英文版)chm格式

JDK的API的帮助文档,是1.7目前最新版本,英文版,方便学习java的人使用,另外我也上传了1.6版本的。

2014-08-19

XMLSpy 2010 破解版下载

最新发布的XMLSpy会让XML代码的处理更容易,还会有助于这个产品成为最主要的XML编辑器。xmlspy是符合行业标准的XML开发环境,专门用于设计,编辑和调试企业级的应用程序,包括XML, XML Schema, XSL/XSLT, SOAP, WSDL和互联网服务技术。这是J2EE,.NET和数据库开发人员不可缺少的高性能的开发工具。

2014-08-18

空空如也

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

TA关注的人

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