- 博客(69)
- 资源 (13)
- 收藏
- 关注
原创 Spring源码常见问题
1、ApplicationContext与BeanFactory的关系?BeanFactory基础的Bean工厂,IOC基础容器,提供存储功能ApplicationContext 国际化、事件传播、资源加载,然后从BeanFactory获取。什么是Bean的定义Bean工厂 和 Bean父工厂Spring Bean在什么时候放入到单例缓冲池中的Spring Bean对象生命周期创建...
2020-06-09 08:12:06
352
1
原创 Redis五种数据类型应用场景(学习笔记)
一、String应用场景单值缓存set key value对象缓存mset k1 v1 k2 v2mget k1 k2分布式锁setnx k1 v1set k1 v1 ex 10 nx 放置意外终止计数器incr keyWeb集群Session共享分布式IDincrby key 100二、Hash应用场景对象缓存hmset user 3:name mawenbo 3:age 32 3:email 732648796@...
2020-06-02 17:10:38
400
转载 【转】MySQL 5.7半同步复制配置(亲测) 有
http://m.aluaa.com/articles/2019/07/16/1563273440479.html1、首先加载插件mysql的root账号登录后操作:主:mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';从:mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';2、查.
2020-05-28 13:54:21
369
原创 五、AOP原理-获取拦截器链-MethodInterceptor(适配器模式+链式调用调用过程)
容器Bean创建前后,尤其在对象创建之后,尤其是在目标对象创建之后,需要被切入需要增强的组件。容器中生成的对象即为代理对象,那么代理对象前置通知、目标方法、后置通知、返回通知、异常通知如何有序执行1)、CglibAopProxy.intercept();拦截目标方法的执行CglibAopProxy.DynamicAdvisedInterceptor.intercept(Object, Method, Object[], MethodProxy)2)、根据ProxyFactory对象获取将要执
2020-05-21 17:11:35
1744
原创 四、[源码]-AOP原理-创建AOP代理(InstantiationAwareBean Instantiation实例化区别BeanPostProcessor initialization 初始化)
org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessBeforeInstantiation(Class<?>, String)特殊的后置处理器InstantiationAwareBeanPostProcessor是在创建Bean实例之前先尝试用后置处理器返回对象的每一个bean创建之前,调用postProcessBeforeInstantiation();第一.
2020-05-21 16:08:56
387
原创 三、AOP原理-AnnotationAwareAspectJAutoProxyCreator执行时机
AspectJAutoProxyCreator完成BeanFactory初始化工作finishBeanFactoryInitialization(beanFactory);完成BeanFactory初始化工作;创建剩下的单实例beanrefresh()->finishBeanFactoryInitialization()->preInstantiateSingletons()->getBean()->doGetBean->getSingleton-...
2020-05-21 13:42:32
235
原创 二、AOP原理-AnnotationAwareAspectJAutoProxyCreator分析(后置处理的注册机创建)
1、 AnnotationAwareAspectJAutoProxyCreator继承关系AnnotationAwareAspectJAutoProxyCreator: AnnotationAwareAspectJAutoProxyCreator ->AspectJAwareAdvisorAutoProxyCreator ->AbstractAdvisorAutoProxyCreator ...
2020-05-21 11:45:43
279
原创 有海量key和value都比较小的数据,在redis中如何存储才更省内存引出Redis内存管理,消耗和优化
内存消耗used_memory_human:983.98Mused_memory_rss:1096163328used_memory_peak_human:1017.11Mused_memory_lua:35840mem_fragmentation_ratio:1.06mem_allocator:jemalloc-3.6.0对象内存:存储用户所有key-value数据 缓冲内存:客户端缓冲,复制积压缓冲区,AOF缓冲区 内存碎片:默认内存分配器:jemalloc内存回收策略
2020-05-20 16:14:49
2177
原创 Xlint:invalidAbsoluteTypeName
错误:启动spring容器时报类似 [Xlint:invalidAbsoluteTypeName]的错误问题:spring aop进行事务控制时配置切点表达式错误
2020-05-20 11:00:50
834
原创 一、AOP动态代理配置
AOP:指在程序运行期间,将某段业务diam切入到指定方法、指定位置进行运行的编程方式1、导入AOP POM依赖<dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>4.3.12.RELEASE</version></dependency>.
2020-05-20 10:47:44
217
原创 ThreadLocal的入门代码实践及使用和实现原理
为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序,ThreadLocal并不是一个 Thread ,而是 Thread 的局部变量。查看Thread 源码可得知: /* ThreadLocal values pertaining to this thread. This map is maintained * by the ThreadLocal class. */ ThreadLocal.ThreadLocalMap thre...
2020-05-19 11:41:24
229
转载 [转]一文带你看懂binlog和redo log
一文带你看懂binlog和redo log在介绍binlog和redolog之前,有必要先简单介绍一下MySQL的逻辑架构。总体上来说,MySQL可以分为server层和engine层两部分,如下图所示:image其中server层包括连接池、查询缓存、分析器、优化器等部分,MySQL的大多数核心服务都在这一层,而engine层就是其插件式的存储引擎,主要负责数据的存储和读取。1.binlog1.1binlog作用我们今天要讲的binlog就是server层产生的日志,因此.
2020-05-18 16:46:39
585
原创 MYSQL日志 MySQL InnoDB及MyISAM 行锁,表锁,间隙锁
Bin log 二进制日志 备份 增量备份 DDL DML DCLErro Log 错误日志 排错Relay Log 中继日志 复制 接收relication masterSlow queryLog 慢查询日志Redo Log 重做日志什么时候产生: 事务开始之后就产生redo log,redo log的落盘并不是随着事务的提交才写入的,而是在事务的执行过程中,便开始写入redo log文件中。什么时候释放: 当对应事务的脏页写入到磁盘之后,redo log的...
2020-05-18 15:27:58
458
转载 [转]聚簇索引与非聚簇索引(也叫二级索引)
通俗点讲聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据 非聚簇索引:将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行,myisam通过key_buffer把索引先缓存到内存中,当需要访问数据时(通过索引访问数据),在内存中直接搜索索引,然后通过索引找到磁盘相应数据,这也就是为什么索引不在key buffer命中时,速度慢的原因澄清一个概念:innodb中,在聚簇索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要二次查找,非聚簇索引都是辅助索引,像复合索引、前缀索引
2020-05-15 13:07:01
765
原创 Java虚拟机类加载机制及类加载器
一、什么是类的加载类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class对象,用来封装类在方法区内的数据结构。目前类加载器却在类层次划分、OSGi、热部署、代码加密等领域非常重要,我们运行任何一个 Java 程序都会涉及到类加载器。二、类加载的过程加载通过全限定类名来获取定义此类的二进制字节流。 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。 在内存中生成一个代表.
2020-05-14 15:45:05
240
原创 exe4j JRE压缩
在公司研发项目中,使用exe4j打包SpringBoot的程序。使用Electron搭建C/S阅卷软件,通过浏览器及Node regedit模块启动C/S程序。通过Yarn和VNISEdit组合方式对程序进行打包。其中JAVA服务提供OCR与OpenCV识别。打包程序软件,exe 程序为112M,依赖的JRE为234M,仅JAVA程序将近350M,首先需要压缩JRE大小在官网http://code.google.com/p/greenvm/上下载greenjvm工具,解压后在其子目录gr..
2020-05-14 15:08:10
288
原创 Redis 主从复制的原理、断点续传、哨兵工作原理及哨兵主备切换的数据丢失问题(异步复制、集群脑裂)
1、Redis replication基本原理(1)复制的过程步骤从节点保存主节点的信息,redis.conf里面的slaveof配置的主节点的信息,并没有立即发起复制 从节点通过定时任务,每秒检查是否有新的master node要连接和复制,如果发现,就跟master node建立socket网络连接、 slave node发送ping命令给master node 口令认证,如果master设置了requirepass,那么salve node必须发送masterauth的口令过去进行认
2020-05-14 13:43:01
578
原创 (三)MySQL读写分离的原理及主从同步延时解决方案
MySQL读写分离的原理1、主服务器配置Binlog,将改变记录到二进制文件(binary log).2、从服务器配置RelayLog.Slave将master的binary log events拷贝到它的中继日志(relay log)。3、在主服务器授权Slave账户,从服务器有权读取主服务器的Binlog。4、Slave重做中继日志的事件,将改变应用到自己的数据库中。Mysql复制是异步且串行化的。主库上并行的操作,在从库上会串行执行。所以这就是一个非常重要的点了,由于从库从主库拷贝
2020-05-14 11:16:01
485
原创 (八)SpringBoot整合RabbitTemplate发送接受消息&序列化机制
一、在POM文件中添加AMQP的依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId></dependency>二、在主类添加@EnableRabbit 注解自动配置RabbitAutoConfiguration 有自动配置了连接工...
2020-05-11 18:34:42
6398
2
原创 (七) RabbitMQ的消息路由机制四种Exchange模式(fanout,direct,topic,header)
一.Direct Exchange任何发送到Direct Exchange的消息都会被转发到RouteKey中指定的Queue。1.一般情况可以使用rabbitMQ自带的Exchange:”"(该Exchange的名字为空字符串,下文称其为default Exchange)。2.这种模式下不需要将Exchange进行任何绑定(binding)操作3.消息传递时需要一个“RouteKey”,可以简单的理解为要发送到的队列名字。4.如果vhost中不存在RouteKey中指定的队列名,.
2020-05-11 10:00:59
1722
原创 (六)RabbitMQ 生成者确认(事务及Confirm机制)
publish消息确认机制事务模式如果采用标准的 AMQP 协议,则唯一能够保证消息不会丢失的方式是利用事务机制 — 令 channel 处于 transactional 模式、向其 publish 消息、执行 commit 动作。在这种方式下,事务机制会带来大量的多余开销package com.jetsen.mq.q6transaction;import java.io.IOException;import java.util.concurrent.TimeoutExceptio.
2020-05-10 18:48:24
452
原创 (五)RabbitMQ 消费者确认(消息应答及持久化)
RabbitMQ 消费者消息应答消费者应答指的是RabbitMQ需要确认消息到底有没有被收到当自动应答等于true的时候,表示当消费者一收到消息就表示消费者收到了消息,消费者收到了消息就会立即从队列中删除。boolean autoAck = false;channel.basicConsume(QUEUE_NAME,autoAck, consumer); /** * Start a non-nolocal, non-exclusive consumer, with .
2020-05-10 18:28:42
821
原创 (四)RabbitMQ 官方的七种工作模式(含RPC模式)及可实操JAVA运行代码(2020最新)
官网介绍:https://www.rabbitmq.com/getstarted.html简单模式:一个生产者,一个消费者work模式:一个生产者,多个消费者,每个消费者获取到的消息唯一。订阅模式:一个生产者发送的消息会被多个消费者获取。路由模式:发送消息到交换机并且要指定路由key ,消费者将队列绑定到交换机时需要指定路由keytopic模式:将路由键和某模式进行匹配,此时队列需要绑定在一个模式上,“#”匹配一个词或多个词,“*”只匹配一个词RPC模式:使用Rabbit...
2020-05-10 17:25:32
729
原创 (三) RabbitMQ 组件的基本概念
一、Message消息,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可能需要持久性存储)等。二、Publisher消息的生产者,也是一个向交换器发布消息的客户端应用程序。三、Exchange交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。Exchange有4种类型:direct(默认),fanout, topi
2020-05-09 17:07:59
198
原创 (二) JMS与AMQP 基本简介
RabbitMQ是一款开源的,Erlang编写的,基于AMQP协议的,消息中间件;一、RabbitMQ组件和工作原理解耦、异步、削峰;RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue Protocol)的开源实现。二、消息服务中两个核心概念消息代理:Message Broker;目的地: DestinationBroker 是指一个或多个 erlang node 的逻辑分组,且 node 上运行着 RabbitMQ 应用程序。c
2020-05-09 16:30:19
333
原创 Redis 事务指令 MULTI、EXEC、DISCARD、WATCH、UNWATCH
Redis 事务Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:批量操作在发送 EXEC 命令前被放入队列缓存。 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。一个事务从开始到执行会经历以下三个阶段:开始事务。 命令入队。 执行事务。序号 命令及描述 1 DISCARD 取消事务,放弃执行事务块内的所有命令。 2 EXEC
2020-05-09 11:09:30
693
原创 Redis基本数据类型5种数据类型
Redis基本数据类型Redis目前支持5种数据类型,分别是:String(字符串)List(列表)Hash(字典)Set(集合)Sorted Set(有序集合)下面就分别介绍这五种数据类型及其相应的操作命令。String(字符串)String是简单的 key-value 键值对,value 不仅可以是 String,也可以是数字。String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算.
2020-05-09 10:06:16
253
原创 (四)分布式锁解决方案-Redis实现方式(Jedis实现)
基于Redis的分布式锁使用常用命令SETNXSETNX key val当且仅当key不存在时,set一个key为val的字符串,返回1;若key存在,则什么都不做,返回0。Expireexpire key timeout为key设置一个超时时间,单位为second,超过这个时间锁会自动释放,避免死锁。Deletedelete key删除key在使用R...
2020-05-08 15:36:34
398
原创 (三)分布式锁解决方案-Zookeeper两种实现方式(ZkCurator实现)
public class ZkCuratorLockUtil { public static String idGenerator(IGenerateGlobalId iGenerateGlobalId,InterProcessMutex lock) { String idGenerator = null; try { lock.acquire(); idGener...
2020-05-08 15:32:43
308
原创 (二)分布式锁解决方案-Zookeeper两种实现方式(zkclient实现)
业务场景在分布式情况,生成全局订单号ID产生问题在分布式(集群)环境下,每台JVM不能实现同步,在分布式场景下使用时间戳生成订单号可能会重复分布式情况下,怎么解决订单号生成不重复使用分布式锁 提前生成好,订单号,存放在redis取。获取订单号,直接从redis中取。使用分布式锁生成订单号技术1.使用数据库实现分布式锁缺点:性能差、线程出现异常时,容易出现死锁...
2020-05-08 15:30:21
431
原创 (一)分布式锁解决方案-初识JVM synchronized
分布式锁一般有三种实现方式:数据库乐观锁; 基于Redis的分布式锁; 基于ZooKeeper的分布式锁单体应用上根据时间戳+num++ 实现唯一ID首先我们定义一个接口public interface IGenerateGlobalId { public String idGenerator(); }实现两个子类,一个是使用synchronized修饰,一...
2020-05-08 10:27:28
209
原创 Spring源码大纲目录
IOC容器的设计容器的基本组成和实现启动容器 类路径下查找配置文件来实例化容器 使用注解Config来实例化容器 在文件系统下寻找配置文件实例化容器Spring容器内部对象的创建 调用实例工厂来实例化 调用无参构造器 静态工厂一、管理Bean(BeanFactory) Bean的创建 Be...
2020-05-08 09:59:37
213
原创 (二)Kafka基础概念及分区原理
Kafka简介Kafka是一种高吞吐量的分布式发布订阅消息系统,使用Scala编写。对于熟悉JMS(Java Message Service)规范的同学来说,消息系统已经不是什么新概念了(例如ActiveMQ,RabbitMQ等)。Kafka拥有作为一个消息系统应该具备的功能,但是确有着独特的设计。可以这样来说,Kafka借鉴了JMS规范的思想,但是确并没有完全遵循JMS规范。...
2020-05-06 14:36:01
330
原创 (七)Java线程之间的乐观锁与悲观锁
悲观锁、乐观锁乐观锁总是认为不会产生并发问题,每次去取数据的时候总认为不会有其他线程对数据进行修改,因此不会上锁,但是在更新时会判断其他线程在这之前有没有对数据进行修改,一般会使用版本号机制或CAS操作实现。version方式:一般是在数据表中加上一个数据版本号version字段,表示数据被修改的次数,当数据被修改时,version值会加一。当线程A要更新数据值时,在读取数据的同时也...
2020-04-30 14:39:27
133
原创 SpringBoot集成Ehcache基本用法
本地缓存Ehcache什么是Ehcache Ehcache是纯java的开源缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。它主要面向通用缓存、Java EE和轻量级容器,具有内存和磁盘存储、缓存加载器、缓存扩展、缓存异常处理程序。 Ehcache最初由Greg Luck于2003年开始开发。2009年,该项目被Terracotta购买。软件仍然...
2020-04-30 14:35:49
213
原创 (六)使用多线程批量数据库千万级别业务数据与mysql数据量大时使用limit分页
在实际业务中,需要从数据库中(千万级别)的数据,批量进行处理,将数据同步到索引服务器中。核心问题:1、使用多线程查询数据库中的数据,例如我们有10个线程,每一个线程每次分页步长为10,数据一个10000条。代码如下:public class Demo18Sequence { private static int nThreads = 10; private static int...
2020-04-30 10:33:27
1186
原创 (五)Java线程之间的通信之wait notify 及Condition用法await Signal
1.因为涉及到对象锁,他们必须都放在synchronized中来使用.Wait、Notify一定要在synchronized里面进行使用。2.Wait必须暂定当前正在执行的线程,并释放资源锁,让其他线程可以有机会运行3. notify/notifyall: 唤醒因锁池中的线程,使之运行wait notify* wait notify一定要放在同步代码块中执行|同步方法中...
2020-04-29 14:14:38
451
原创 (四)Java锁的深度化(可重入性+读写锁)
可重入性:从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大。两者都是同一个线程没进入一次,锁的计数器都自增1,所以要等到锁的计数器下降为0时才能释放锁。锁的实现:Synchronized是依赖于JVM实现的,而ReenTrantLock是JDK实现的,有什么区别,说白了就类似于操作系统来控制...
2020-04-29 13:06:26
172
原创 CentOS 基于OpenResty(Nginx+Lua)完成访问流量实时上报Kafka
编写日期:2018-03-15编写作者:mtsbv110邮 箱:2532874889@qq.com主机规划:192.168.9.131 ngx_openresty版本 ngx_openresty-1.7.7.2.tar.gz 安装目录 /usr/local/servers ...
2020-04-22 13:44:01
808
原创 CentOS 安装OpenResty(Nginx+Lua)开发环境搭建及Lua从动态渲染网页模板及从Redis获取数据
编写日期:2018-03-05编写作者:mtsbv110邮 箱:2532874889@qq.com主机规划:192.168.9.131 ngx_openresty版本 ngx_openresty-1.7.7.2.tar.gz 安装目录 /usr/local/servers n...
2020-04-22 13:40:41
821
Microsoft SQL Server Native Client 32-64位安装包.zip
2021-08-30
elasticsearch-analysis-ik-7.2.1.zip
2020-04-20
neo4j-community-3.5.8-windows.zip
2019-08-06
FreeMarker_Manual_zh_CN[1].pdf
2011-09-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人