- 博客(18)
- 收藏
- 关注
原创 Spring 创建bean的流程
** 一级缓存 单例缓存池 用于保存我们所有的单实例bean *//** 二级缓存 保存半成品bean实例,当对象需要被AOP切面代时,保存代理bean的实例beanProxy*//** 三级缓存 存放ObjectFactory,传入的是匿名内部类,ObjectFactory.getObject() 方法最终会调用getEarlyBeanReference()进行处理,返回创建bean实例化的lambda表达式。*/
2025-03-17 17:38:27
340
原创 Kafka原理总结
Kafka是一个开源的分布式流式处理平台,在这个平台上可以发布、订阅以及处理数据流,具有强大的吞吐能力,让Kafka成为了一个高性能的发布与订阅消息系统一:概念理解Broker部署Kafka进程的服务被称之为Broker,Broker会接收Producer的消息,持久化到本地,然后Comsumer通Pull的形式进行消息拉取,通常使用集群的形式进行部署Producer生产者,即发送消息的一方,往Broker中写入数据Consumer消费者,即消费消息的一方,从Broker中获取数
2021-08-28 16:21:51
1519
原创 RocketMQ原理梳理总结
RocketMQ是阿里对外开源的一种分布式消息中间件,在阿里内部被叫做MetaQ,具有良好的可靠性、可用性以及稳定性一:概念理解NameServer路由服务,类似于kafka中的zk,主要存储了Broker的路由信息,供Producer和Consumer使用,不然Producer怎么知道往哪个Broker发送消息,多个NameSever之间是互相独立且没有通信的,每个NameSever都会保存所有路由信息。Broker部署RocketMQ进程的服务被称之为Broker,Broker会接收
2021-07-28 22:19:18
2176
原创 Spring集成多数据源及事务中切换数据源问题解析
多数据源应用场景多数据源的应用很大程度上是为了满足多租户业务场景,多租户是一种软件架构技术,是实现如何在多用户环境下共用相同的系统或程序组件,并且可确保各用户间数据的隔离性,多租户的重点就是同一套程序下实现多用户数据的隔离。因此,多数据源就在这种场景下应运而生。目前是实现多数据源的技术方案大致可以分为三类1)每个用户都对应一个独立的数据库2)每个用户共享数据库,同时每个用户对应一个独立的schema3)通过在表中增加一个字段标识来区别数据所属的用户上面三种数据隔离的实现方式都会有自己
2020-11-12 22:46:53
4243
原创 基于redis的分布式锁实现
1.背景介绍随着微服务的发展,越来越多的系统架构由原来的单体结构拆分出多个小型的组件,部署在分布式环境中,分布式环境中的数据一致性是微服务架构需要关注和解决的问题,因此分布式锁应运而生,常用的分布式锁的实现方式有redis、zookeeper等,本篇博客主要讲述基于redis的分布式锁,主要介绍不同版本redis分布式锁的实现方式,以及它们的弊端2.各个版本redis分布式锁的实现1)基本版本tryLock(){ if(SETNX Key 1) { EXPIRE K
2020-10-21 20:19:02
570
原创 B+树在MySQL索引的应用和InnoDB的索引优化
1)在关系型数据库中,由于数据量较大原因,导致构建的索引也非常大,所以需要把索引存储到外部磁盘,而B+树构建的索引更适合在外部磁盘存储,这是因为B+树的每个节点不存储数据,只存储索引,这样B+树的每个节点就会存储更多的索引(Innodb每个索引页(节点)在磁盘空间的默认大小为16KB),所以B+树的层数就会越低,因此索引查找时IO操作的次数就会减少2)由于B+树的叶子节点的特性,使得B+树还有一个最大的好处,方便扫库,B树必须用中序遍历的方法按序扫库,而B+树直接从叶子结点挨个扫一遍就完了,因此使得B+.
2020-10-09 14:10:36
1197
原创 java线程池原理讲解及常用创建方式
(一)什么是线程池其实线程池的概念和数据库链接池的概念类似。线程池的作用就是为了避免系统频繁地创建和销毁线程。在线程池中,总有几个活跃的线程,当你需要使用线程是,可以从池子中随便拿一个空闲线程,当完成工作是,并不是关闭线程,而是将这个线程退回到池子,方便其他人使用。(二)JDK对于线程池常用类讲解首先我们先看一下线程池的类图关系,只有理解了这些类的关系后,后面的理解就容易多了:
2017-09-01 23:34:52
1957
1
原创 java多线程之ThreadLocal
在线程同步中,我们可以使用锁机制,或者通过CAS。但是还有一种方法就是ThreadLocal。这里先举一个生活中的例子,比如,让100个人填写个人信息表,如果只有一支笔的话,那么大家就得挨个填写,为了让每个人都能完成的填写,我们就需要保证大家不能哄抢这一支笔,否则谁也填不玩,这时候可能大家可以想到利用锁机制来控制这支笔。其实从另外一种角度出发,我们可以每人发一支笔让他们填写信息表。如果
2017-09-01 15:56:21
384
原创 java多线程之重入锁ReentrantLock
在讲重入锁(ReentrantLock)之前,相信大家都synchronized很熟悉了,它也是同步控制的一个重要锁,决定了一个线程是否可以访问临界资源,同时synchronized配合Object.wait()和Object.notify()的配合使用起到了等待通知的作用。这里如果大家不是很熟悉,可以查阅资料熟悉一下synchronized的使用。那么有synchronized这个锁,为
2017-09-01 13:58:32
491
原创 java中的代理和动态代理讲解
在说到动态代理模式,我们首先说一说什么是代理模式。什么是代理模式:Proxy Pattern(即:代理模式),23种常用的面向对象软件的设计模式之一代理模式的定义:这里先举一个例子,假设某人要找对象,但是由于某些原因不能直接去找,于是委托一个中介机构去完成这一过程,如婚姻介绍所,在这里婚姻介绍所其实就是一个代理。再举一个专业相关的例子,如果你想调用一个功能非常强
2017-08-31 22:38:06
388
原创 java中的反射机制
(一)什么是反射:反射就是把java类中的各种成分映射成一个个的java对象(加载类,然后解刨出类的各个组成部分)。例如,一个类由:成员变量,方法,构造方法,包等等信息,利用反射技术可以对一个类进行解剖,把各个组成部分映射成一个个对象。1、反射一般会用在什么地方:相信大家在学习JavaEE的时候用过很多框架,比如,spring框架中的IOC反向控制就是利用反射机制,其实大部
2017-08-31 20:01:32
314
转载 HashMap的实现原理
1. HashMap的数据结构数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。 数组数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;链表链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。
2017-08-31 16:45:24
286
原创 HashMap和List遍历方法总结及如何遍历删除元素
相信大家对集合遍历再熟悉不过了,这里总结一下HashMap和List的遍历方法,以及它们该如何实现遍历删除。这里对于每种遍历删除出现的问题的原因都给出了详解!(一)List的遍历方法及如何实现遍历删除我们造一个list出来,接下来用不同方法遍历删除,如下代码: List list= new ArrayList(); famous.add("zs"); famo
2017-08-31 16:26:38
12346
原创 java中自动装箱拆箱的陷阱
本人曾经实习面试的时候遇到的一个java自动装箱的陷阱,当时就是不太明白,回来自己琢磨了一下这个问题,在此作为总结,希望让刚开始接触java的同学以后避免这个坑!好了废话不多说,直接贴出这段代码:public static void main(String[] args) { Integer a = 1; Integer b = 2; Integer c = 3
2017-08-31 14:56:01
746
2
转载 github常用指令
本站为 Git 学习参考手册。目的是为学习与记忆 git 使用中最重要、最普遍的命令提供快速翻阅。 这些命令以你可能需要的操作类型划分,并且将提供日常使用中需要的一些常用的命令以及参数。本手册将从入门到精通指导大家。 首先,我们要从如何以 Git 的思维方式管理源代码开始。如何以 GIT 的方式思考(这节可以不用看懂,接着看下面的内容,看完就全懂了。)懂得 Git,
2017-08-31 14:37:51
1091
1
原创 java虚拟机动态类型语言支持
这篇博客是根据《深入理解java虚拟机》的讲解和本人对动态类型语言的一些认识,来深度剖析一下java虚拟机对动态类型语言的支持!
2017-08-30 18:59:34
1931
原创 使用scrapy+IP代理+多线程爬虫对拉钩网在杭州互联网职位信息的抓取
本篇文章涉及到的集中比较流行的爬虫技术,包括IP代理,多线程,scrapy,cookie等,
2017-08-18 15:15:26
9193
10
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人