- 博客(205)
- 资源 (6)
- 收藏
- 关注
原创 4、Spring 事务
1、Spring 事务Spring事务是在不同的底层事务管理API的顶部提供一个统一的抽象层。2、编程式事务和声明式事务编程式事务(不推荐):声明式事务:xml方式注解方式:3、事务失效:1、@Transaction可以加在类上,但不能放在接口上;2、@Transaction作用的方法必须是public,因为spring事务依赖aop动态代理,动...
2020-01-04 20:30:09 364
原创 3、Spring Bean生命周期
Spring Bean的生命周期只有四个阶段,每个阶段又有对应的扩展点,如下:实例化 Instantiation属性赋值 Populate初始化 Initialization销毁 Destruction实例化 -> 属性赋值 -> 初始化 -> 销毁。主要逻辑都在doCreateBean()方法中,逻辑很清晰,就是顺序调用以下三个方法,这三个方法与三个生命周期阶段...
2020-01-04 11:10:05 1057 1
原创 2、Spring IOC
1、Sring IOC控制反转:将对象的创建、依赖关系注入(装配)、销毁等整个生命周期的操作全部交给IOC容器管理,脱离代码实现解耦Spring容器中是一切皆BeanBeanFactory与ApplicationContext一般称BeanFactory为IoC容器,而称ApplicationContext为应用上下文,都可以当做spring容器BeanFactory:Spr...
2020-01-04 10:10:46 316
原创 1、Spring AOP
1、Spring AOP面向切面编程,是OOP面向对象编程的补充和完善通过抽取一些系统级(非业务代码)的功能,以达到解耦和重复利用,如日志、事务、权限、缓存等2、AOP相关概念横切关注点对哪些方法在什么时候进行拦截,拦截后怎么处理,这些被称为横切关注点Aspect(切面)类时对象的抽象,切面就是横切关注点的抽象,把非业务代码功能放到一个类中形成切面,包含切入点、通知Po...
2020-01-03 16:56:02 222
原创 7、RabbitMQ集群(普通模式、镜像模式)
集群-普通模式RabbitMQ是基于Erlang编写,Erlang语言天生具备分布式特性(通过同步Erlang集群各节点的magic cookie来实现)。因此,RabbitMQ天然支持Clustering。这使得RabbitMQ本身不需要像ActiveMQ、Kafka那样通过ZooKeeper分别来实现HA高可用方案和保存集群的元数据。集群是保证可靠性的一种方式,同时可以通过水平扩展以达到增加...
2020-01-01 14:18:58 4432
原创 6、RabbitMQ配置
一般情况下,RabbitMQ提供的默认内建配置就能满足要求了,但是为了更好控制RabbitMQ,有时也需要做一些定制化配置。RabbitMQ提供三种配置方式:环境变量;配置文件;运行时参数和策略;一、环境变量RabbitMQ的环境变量都是以”RABBITMQ_”开头的,可以在shell环境中直接配置,也可以在rabbitmq-env.conf这个RabbitMQ环境变量的定义文件中...
2019-12-31 10:40:56 537
原创 5、RabbitMQ管理
管理工具:rabbitmqctl工具(sbin目录下)rabbitmq_management图形化管理插件rabbitmqctl工具(sbin目录下)vhost虚拟主机,每个RabbitMQ服务器能创建多个虚拟的消息服务器,vhost之间绝对隔离,它们拥有独立的队列、交换器、绑定关系、用户权限等等,vhost就像是虚拟机与物理机器一样,提供逻辑上的分离,当RabbitMQ达到一定规模...
2019-12-30 19:30:35 368
原创 4、jvm监控工具
1、jps(jdk安装目录/bin)显示指定系统中所有的HotSpot虚拟机进程。jps -v显示进程号、MainClassName、启动时的JVM参数。2、jmap(jdk安装目录/bin)生成虚拟机的内存快照(headdump文件)。jmap -histo <pid>[C 表示char[][S 表示short[][I 表示int[][B 表示byte[][...
2019-12-29 19:22:34 287
原创 4、RabbitMQ生产者、消费者实战(SpringBoot)
1、application.ymlspring: rabbitmq: host: 192.168.78.169 port: 5672 username: guest password: guest virtualHost: / #publisherConfirms: true # 开启发送确认 publisherReturns: ...
2019-12-28 17:23:40 323
原创 3、RabbitMQ生产者、消费者实战
1、父pom.xml<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd...
2019-12-26 19:25:28 410
原创 2、RabbitMQ安装(Linux单机)
软件准备centos7xshellotp_src_21.0.tar.gzrabbitmq-server-generic-unix-3.7.10.tar.xzErlang安装1、安装依赖环境yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel注意:此时虚拟...
2019-12-22 17:07:38 247
原创 1、RabbitMQ简介
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台(OTP)框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。Erlang(爱浪)特点:并发性:Erlang支持超大量级的并发进程,并且不需要操作系统具有并发机制;分布式:一个分布式Erlang系统是多个...
2019-12-22 16:50:33 205
原创 2、jvm gc
gc:垃圾收集器、垃圾回收机制。1、判断对象是否可以回收引用计数:java在GC时会去看这个对象有没有任何引用与之关联,如果存在引用关系则表示这个对象还有用,不能被回收,如果不存在引用则可以基本定性为可被回收的对象了。使用此方式效率确实很高,但是有个致命的缺点,无法解决循环引用的问,例如下面这段代码:public class Main { public static void ma...
2019-12-18 19:54:05 177
原创 1、jvm内存模型
一、直接内存直接内存更准确的说不在JVM的堆范围内,但JVM会使用到。直接内存并不是JVM运行时数据区的一部分,但也会频繁的使用。在JDK 1.4引入的NIO提供了Channel与Buffer的IO方式,它可以使用Native函数库直接分配堆外的内存,然后使用DirectByteBuffer对象作为这块内存的引用进行操作,这样旧避免了Java堆和Native堆来回复制数据,因此在一些场景...
2019-12-18 16:35:20 382
原创 12、Kafka拦截器
kafka拦截器作用:1、producer发送前对消息做一些预处理;2、producer发送成功后做一些后处理;实现ProducerInterceptorTimeInterceptor.javapublic class TimeInterceptor implements ProducerInterceptor<String, String> { @Override pu...
2019-12-16 19:19:51 173
原创 15、Kafka面试总结
kafka生产数据的分组策略生产者决定数据产生到集群的哪个partition中轮巡方式;自定义分组策略;指定具体分区;kafka的ack机制0:生产者不会等待broker的ack,这个延迟最低但是存储的保证最弱,当server挂掉的时候就会丢数据;1:等待服务端的ack值,leader副本确认接收到消息后发送ack,但是如果leader挂掉后它不保证是否对follower复制完...
2019-12-16 18:42:18 226
原创 11、Kafka 删除topic(建议关闭)
1、server.properties添加配置auto.create.topics.enable=false,默认trueserver.properties添加配置delete.topic.enable=true,默认为true确保topic的producer和consumer客户端全部停掉2、删除topickafka-topics --delete --zookeeper 127...
2019-12-15 20:58:33 1631
原创 10、Kafka事务
只有Producer生产消息:见生产者、消费者实战代码。消费消息和生产消息并存:这个是事务场景中最常用的情况,就是我们常说的“consume-transform-produce ”模式; 也应用到kafka stream应用中,从一个topic读取数据,处理数据,写回另一个 topic场景中。见生产者、消费者实战代码。只有消费者消费消息:这种操作其实没有什么意义,跟使用手动提交效果一样...
2019-12-15 20:54:19 241
原创 9、Kafka flush刷盘机制
熟悉Linux操作系统原理的都知道,当我们把数据写入到文件系统之后,数据其实在操 作系统的page cache里面,并没有刷到磁盘上去。如果此时操作系统挂了,其实数据就 丢了。一方面,应用程序可以调用fsync这个系统调用来强制刷盘;另一方面,操作系统有后 台线程,定期刷盘。如果应用程序每写入1次数据,都调用一次fsync,那性能损耗就很大,所以一般都会 在性能和可靠性之间进行权衡。因为对应...
2019-12-15 20:46:25 5855 2
原创 8、Kafka序列化和反序列化
kafka在发送和接受消息的时候,都是以byte[]字节型数组发送或者接受的。但是我们平常使用的时候,不但可以使用byte[],还可以使用int、short、long、float、 double、String等数据类型,这是因为在我们使用这些数据类型的时候,kafka根据我们 指定的序列化和反序列化方式转成byte[]类型之后再进行发送或者接受的。原生支持的序列化和反序列化org.apach...
2019-12-15 20:43:22 734
原创 7、Kafka消息丢失
生产者:acks=0生产者不用等待服务器应答,以下情况会发生消息丢失:当网络发生异常等情况时;客户端异常,异步发送时,消息并没有直接发送至Kafka集群,而是在Client端按一 定规则缓存并批量发送。在这期间,如果客户端发生死机等情况,都会导致消息的丢失;缓冲区满了,异步发送时,Client端缓存的消息超出了缓冲池的大小,也存在消息丢 失的可能;kafka服务器异常-Leader副本...
2019-12-15 20:29:52 223
原创 6、Kafka消息重复
生产者:kafka生产者在发送数据的时候,通常会有同步与异步发送,异步就是缓存部分数据, 达到一定条数或时间后批量发送,效率高效。那么,不管同步还是异步,消息是否发送成功,Kafka通过acks这个参数来控制的:0—表示不进行消息接收是否成功的确认;1—表示当Leader接收成功时确认;-1(all)—表示Leader和Follower都接收成功时确认;通常为了兼顾效率与数据安全,将a...
2019-12-15 20:08:57 1188
原创 5、Kafka消息顺序保证
kafka消息顺序保证kafka分布式的单位是partition,同一个partition用一个write ahead log组织,所以可以保证FIFO的顺序。不同partition之间不能保证顺序。绝大多数用户都可以通过message key来定义,因为同一个key的message可以保证只发送到同一个partition,比如说key是user id,table row id等等,所以同一个...
2019-12-13 13:06:42 403 1
原创 4、Kafka生产者、消费者实战(含SpringBoot)
1、小试身手-命令行kafka producer默认使用轮巡方式发送消息到分区(不指定分区的情况下)启动3个消费者:./kafka-console-consumer.sh --bootstrap-server 192.168.78.169:9092,192.168.78.169:9093,192.168.78.169:9094 --topic test-topic --partition ...
2019-12-11 20:50:44 409
原创 3、Kafka命令行
切换目录cd /usr/local/kafka/bin创建topic./kafka-topics.sh --create --zookeeper 192.168.78.169:2181,192.168.78.169:2182,192.168.78.169:2183 --replication-factor 3 --partitions 3 --topic test-topic–creat...
2019-12-11 13:05:16 258
原创 2、Kafka环境搭建(Linux伪集群)
准备centos7xshellkafka_2.11-2.1.0.tgzzookeeper-3.4.6.tar.gzjdk-8u65-linux-x64.tar.gzjdk安装1、卸载centos7原本自带的openjdkrpm -qa | grep java;rpm -e --nodeps java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64...
2019-12-10 19:45:33 250
原创 1、HashMap、CurrentHashMap、LinkedHashMap、TreeMap
1、HashMap jdk1.7和1.8中的区别底层数据结构不一样,1.7中使用数组+链表,1.8使用数组+链表+红黑树。数组默认大小为16,负载因子为0.75,如果HashMap的size大于16*0.75就要扩容了,扩容方式为创建一个新数组,大小为16乘以2,然后重新rehash操作;1.8中当链表长度大于8(默认值)时采用红黑树,红黑树是一种自平衡二叉树,能够防止所有节点在同一侧(...
2019-12-10 10:16:33 744
原创 13、Redis Mysql数据一致性
1、缓存设置过期时间,保证最终一致性—弱一致性;2、先更新数据库,再删除缓存,暂时不一致性,并发一般情况下考虑;3、基于订阅mysql binlog的同步机制,阿里巴巴的一款开源框架canal,提供了一种发布/ 订阅模式的同步机制,通过该框架我们可以对MySQL的binlog进行订阅,这样一旦MySQL中产生了新的写入、更新、删除等操作,就可以把binlog相关的消息推送至Redis,Redi...
2019-12-09 18:17:35 148
原创 1、Kafka入门
教程:http://kafka.apachecn.org/Kafka作为一个分布式流处理平台1、发布和订阅流式的记录(消息),在这方面,它类似于消息队列或企业消息系统2、可以存储流式的记录(消息),并且有较好的容错性3、可以在流式的记录(消息)产生时就进行处理适合场景,应用于2大类应用1、构造实时流数据管道,它可以在系统或应用之间可靠地获取数据。 (相当于message queue...
2019-12-09 13:04:55 133
原创 12、Redis秒杀
一个完整的秒杀系统设计到很多技术,下面只说明redis在其中的作用,后面会开一个单独系列说明整个秒杀系统!!!redis作用:商品库存有限,进行限流。package com.java.ashare.redis.miaosha;import com.java.ashare.redis.utils.RedisUtil;public class RedisMiaoSha { public...
2019-12-08 18:15:15 210
原创 10、Redis缓存穿透、击穿
缓存穿透缓存穿透,是指查询一个数据库一定不存在的数据。正常的使用缓存流程大致是,数据查询先进行缓存查询,如果key不存在或者key已经过期,再对数据库进行查询,并把查询到的对象,放进缓存。如果数据库查询对象为空,则不放进缓存。缓存击穿缓存击穿,是指一个key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,数据库一定...
2019-12-08 15:30:00 189
原创 9、Redis分布式锁实战
在【Redis Jedis实战(含Spring Boot)】基础上做如下修改:RedisDistributedLockApplication.javapackage com.java.ashare.redis.distributedlock;import java.util.concurrent.TimeUnit;import org.redisson.api.RLock;impor...
2019-12-08 13:42:06 191
原创 8、Jedis Lettuce Redisson等Redis客户端比较
1、Jedisgithub: https://github.com/xetorthio/jedisJedis是Redis的Java实现的客户端,其API提供了比较全面的Redis命令的支持。支持基本的数据类型如:String、Hash、List、Set、Sorted Set。优点:比较全面的提供了Redis的操作特性,相比于其他Redis 封装框架更加原生。编程模型: 使用阻塞的I/O,方...
2019-12-08 13:29:36 722
原创 7-1、Redis Redisson分布式锁实战(含Spring Boot)
在【Redis Jedis实战(含Spring Boot)】基础上做如下修改:1、子pom.xml添加redisson依赖 <!-- <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</art...
2019-12-08 12:15:20 845
原创 6、Redis Lettuce实战(含Spring Boot)
在【Redis Jedis实战(含Spring Boot)】基础上做如下修改:1、子pom.xml去掉<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId></dependency>和 <exclusions...
2019-12-07 15:20:05 1148 2
原创 5、Redis Jedis实战(含Spring Boot)
1、父pom.xml<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd...
2019-12-05 19:35:36 236
原创 4、Redis-Cluster集群模式安装(Linux伪集群)
准备centos7xshellredis-5.0.6.tar.gz通过xshell上传redis-5.0.6.tar.gz到/usr/local/解压tar -xzvf redis-5.0.6.tar.gz改名mv redis-5.0.6 redis-cluster进入解压后的目录进行编译cd redis-cluster/makemake install...
2019-12-05 16:12:04 184
原创 3、Redis-Sentinel哨兵模式安装(Linux伪高可用)
准备centos7xshellredis-5.0.6.tar.gz【redis主从搭建】通过xshell上传redis-5.0.6.tar.gz到/usr/local/解压tar -xzvf redis-5.0.6.tar.gz改名mv redis-5.0.6 redis-sentinel进入解压后的目录进行编译cd redis-sentinel/make...
2019-12-05 15:34:14 223
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人