自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

情怀中的释然~

请相信,那年的小哥,依旧很猛!

原创 2020年 Java面试题整理 最新Java面试题2020

文章目录1、类加载和实例化2、Java是值传递还是引用传递3、类加载的主要过程4、什么是GC5、简述垃圾回收过程6、内存泄漏7、导致内存泄漏的场景8、Java中堆和栈的区别9、ArrayList、LinkedList、Vector的区别10、StringBuffer和StringBuilder的区别11、HashMap、HashTable、TreeMap区别12、synchronized 与 Lo...

2020-02-18 09:42:35 29700 4

原创 Lucene同步SQL数据方案

Lucene使用文档1、可视化工具Luke2、同步方案同步双写异步双写(MQ)异步双写(WORKER)BinLog方式**参考链接:**http://www.pbdata.cn/?p=2013、可能存在的问题具体同步方案 见同步方案原数据库中数据修改 或者 删除后 如何重新建立索引 (如何保证 数据库中的数据修改或删除后 Lucene中也要进行更新)4、保证数据同步的方法需要同步的表中增加update_time字段 每次修改操作后 更新update_time字段第一

2020-07-07 11:13:03 66

原创 使用JsonP实现不同域名共享Session 实现SSO单点登录

a.com登录成功后 b.com也可以正常访问清空a.com的cookie信息b.com登录信息也失效思路:1、主要根绝ajax使用jsonp跨域请求时候 同一个单点服务器会使用相同的session 整个项目sessionId相同2、任何一个项目登录之后 将sessionId和登录成功的用户信息保存到redis中3、其他站点使用JsonP请求验证登录的接口 如果能通过sessionId从缓存中读取到用户信息 说明当前用户已经登录**注:**一定要使用单点登录验证服务器 有效避免多服务器

2020-06-30 16:35:26 142

原创 Java8使用stream进行去重操作

/** * 通过列表中对象的某个字段进行去重 * * @param keyExtractor * @param <T> * @return */private <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) { Set<Object> seen = ConcurrentHashMap.newKeySet(); return t -&

2020-06-18 13:51:26 89

原创 syntax error, expect RPAREN, actual LITERAL_INT pos 885, line 46, column 29, token LITERAL_INT

Caused by: com.alibaba.druid.sql.parser.ParserException: syntax error, expect RPAREN, actual LITERAL_INT pos 885, line 46, column 29, token LITERAL_INT at com.alibaba.druid.sql.parser.SQLExprParser.accept(SQLExprParser.java:2860) at com.alibaba.druid.sql

2020-06-03 09:33:16 1416

原创 SpringBoot集成MyBatis 简单代码示例 步骤填写

引入依赖 <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.4</version> </dependency> <!-- sqlServer依赖 --> <dependency> <groupId>co

2020-05-22 10:32:40 73

原创 sleep和wait的区别

Sleep是Thread的静态方法wait是Object的方法sleep仍然持有锁wait是等待 等待别的对象释放锁

2020-04-20 09:58:42 63

原创 MyBatis和SpringDataJPA使用比较

mvnrepository.com使用量比较使用方式比较毕竟只是框架 使用习惯因人而异 只是客观列出不同之处

2020-04-09 15:02:23 202 1

原创 处理openFeign自动将get请求装换为post请求的问题

Application.yml文件中添加feign: httpclient: enabled: truepom.xml文件中添加<dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-httpclient</artifactI...

2020-04-08 15:57:26 439

原创 AOP术语和流程

AOP术语和流程连接点(join point):对应的是具体被拦截的对象,因为spring只能支持方法,所以被拦截的对象往往就是特定的方法。切点(point cut):有时候,我们的切面不单单应用于单个方法,也可能是多个类的不同方法,这是,可以通过正则表达式和指示器的规则去定义,从而适配连接点。切点就是提供这样一个功能的概念。通知(advice):就是i按照约定的流程下的方法,分为前置通知(...

2020-02-23 10:27:24 208

原创 SpringBoot中Bean的生命周期

SpringBoot中Bean的生命周期Bean的定义Bean的初始化Bean的生存期Bean的销毁spring通过我们的配置,如@ComponentScan定义的扫描路径去找到带有@Component的类,这个过程就是一个资源定位的过程。一单找到了资源,那么它就开始解析,并且将定义的信息保存起来。注意此时还没有初始化Bean,也就是没有Bean的实例,它有的仅仅是Bean的定义。...

2020-02-23 10:26:43 422

原创 如果同一接口有多个实现类 该如何对该类型的子类进行依赖注入

如果同一接口有多个实现类 该如何对该类型的子类进行依赖注入@AutoWired@Qualifier(“dog”) // 注入Animal实现类DogAnimal animal;

2020-02-23 10:25:47 305

原创 依赖注入Dependency Injection,DI

依赖注入Dependency Injection,DI@AutoWired,他注入的机制最基本的一条是:根据类型(by type),根据类型从IOC容器中获取bean。使用AutoWired进行依赖注入的时候,如果注入的接口有多于一个的实现类,可一根据变量名称,从IOC容器中获取对象。Animal接口 两个实现类:dog、cat@AutoWiredAnimal animal; // 报错...

2020-02-23 10:25:16 124

原创 Spring IOC

Spring IOCIOC容器是一个管理bean的容器,在spring的定义中,他要求所有的ioc容器都需要实现接口BeanFactory,他是一个顶级容器接口。在IOC容器中,默认情况下,Bean都是以单例形式存在的,也就是说getBean方法返回的都是同一个对象。AnnotationCofingApplicationContext:BeanFactory、ApplicationConte...

2020-02-23 10:24:44 107

原创 SpringBoot的优点

SpringBoot的优点创建独立的Spring应用程序嵌入的tomcat、jetty或者undertow,无需部署war文件允许通过maven来根据需要获取starter尽可能的自动配置Spring提供生产就绪型功能,如指标、健康检查和外部配置绝对没有代码生成,对xml没有要求配置...

2020-02-23 10:24:14 146

原创 Spring核心理念

Spring核心理念ioc:控制反转,通过控制反转来管理各类Java资源,从而降低了各种资源的耦合;并且提供了极低的侵入性aop:面向切面,通过动态代理技术,允许我们按照约定进行配置编程,进而增强了bean的功能。...

2020-02-23 10:23:43 243

原创 HashMap的时间复杂度

HashMap的时间复杂度get()方法最好情况O(1),最差情况O(N),平均O(1)put()方法最好情况O(1),最差情况比较复杂,其中底层实现还涉及到map扩容最好情况 没出现hash碰撞最坏情况 所有key的hash值都一样...

2020-02-23 10:23:10 397

原创 MQ使用时候的注意事项

MQ使用时候的注意事项消费者去注册相关Exchange和将Queue绑定到Exchange生产者只需要注册Exchange并将消息发布到对应的Exchange一个消费队列可以拥有多个消费者 这些消费者是负载均衡的去处理消息的(多劳多得)模式...

2020-02-23 10:22:44 199

原创 RabbitMQ消息队列五种队列

RabbitMQ消息队列五种队列• 简单队列• Work模式1个生产者对应n个消费者 一个消息只能被一个消费者消费• 发布/订阅模式1个生产者对应n个消费者每个消费者有自己的队列生产者没有将消息直接发送到队列,而是发送到了交换机每个队列都要绑定到交换机生产者发送的消息,经过交换机,到达队列,实现,一个消息被多个消费者获取的目的注:一个消费者队列可以有多个消费者实例,只有其中一...

2020-02-23 10:22:05 99

原创 TCP三次握手 四次挥手

TCP三次握手 四次挥手1、三次握手• 客户端向服务器发送SYN同步报文段,请求建立连接• 服务器确认收到客户端的连接请求,并向客户端返送SYN同步报文,表示要想客户端建立连接• 客户端收到服务器的确认请求后,处于建立连接状态,向服务器发送确认保温客户端是在收到确认请求后,先建立连接服务器是在收到客户端的确认后,建立连接发起连接请求的一定是客户端客户端请求建立连接→服务端确认收到...

2020-02-23 10:20:29 56

原创 设计模式

设计模式a:根据使用场景 设置模式分类:创建型模式 结构型模式 行为型模式b:23种设计模式单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例。工厂方法(Factory Method)模式:定义一个用于创建产...

2020-02-23 10:19:19 82

原创 ZooKeeper中Leader选举流程

ZooKeeper中Leader选举流程集群运行期间,Leader故障后的选举流程(三台服务器)a:变更状态。leader挂后,余下的非Observer服务器都会将自己的服务状态变更为LOOKING,然后开始进入leader选举过程。b:每个Server会发出一个投票。在运行期间,每个服务器上的zxid可能不相同,此时假定zk1的的zxid为124,zk3的zxid为123;在第一轮投票中...

2020-02-23 10:18:34 106

原创 ZooKeeper中Leader选举流程

ZooKeeper中Leader选举流程1、ZooKeepter节点状态LOOKING:寻找Leader状态,处于该状态需要进行选举流程LEADING:领导者状态,处于该状态的节点说明是角色已经是LeaderFOLLOWING:跟随者状态,表示Leader已经选举出来,当前节点角色是followerOBSERVER:观察者状态,表明当前节点角色是observer(不参与投票)2、事务I...

2020-02-23 10:17:41 222

原创 Connection Per Thread模式

Connection Per Thread模式Connection Per Thread模式,一个线程处理一个连接模式,早期版本的Tomcat服务器,利用这种原理实现;对于每一个新的网络连接都会分配给一个线程,每隔线程都独立处理自己负责的输入和输出。缺点:对应于大量的连接,需要耗费大量的线程资源,对线程资源要求太高。而且线程的反复创建、销毁、线程的切换也需要代价。因此,在高并发的应用场景下,...

2020-02-23 10:16:42 248

原创 Reactor反应器模式

Reactor反应器模式反应器模式由Reactor反应器线程、handlers处理器两大角色组成:a:Reactor反应器线程的职责:负责响应IO事件,并且分发到Handlers处理器b:Handlers处理器的职责:非阻塞的执行业务处理逻辑...

2020-02-23 10:16:09 83

原创 守护线程和主线程声明周期关系

守护线程和主线程声明周期关系一个进程可以有多个守护线程 可以通过Thread.setDaemon(true)来设置守护线程a:虚拟机中可能同时有多个线程运行,只有当所有的非守护线程(通常都是用户线程)都结束的时候,虚拟机的进程才会结束,不管当前运行的线程是不是 main 线程。b:main 线程运行结束,如果此时运行的其他线程全部是 Daemon 线程,JVM 会使这些线程停止,同时退出。但...

2020-02-23 10:15:38 104

原创 subString和split效率问题

subString和split效率问题// split效率低于subStringfor (Expression param : expressions) { // 获取字段的名称 String key = param.toString(); // 字段名字中包含as 使用as名称做key 否则适用.后面字段做key int asIndex = key.index...

2020-02-23 10:15:04 244

原创 为什么使用消息队列MQ

为什么使用消息队列MQ解耦:服务A是基础服务,任何新接入的服务都要对接A服务,每个人对接A都需要改代码。异步:用户一次请求A、B、C三个服务,每个服务耗时40ms,需要等待120ms,访问A后写入消息队列,避免用户等待。削峰填谷:中午12点,用户量最多的时候,服务器压力过大,可以先将请求保存在消息队列中,慢慢处理...

2020-02-23 10:14:27 68

原创 通过消息队列实现分布式事务

通过消息队列实现分布式事务表设计:生产者:账户余额表、事务记录表消费者:账户余额表、消息记录表生产者事务流程:a:支付宝账户扣除100元b:给事务记录表中新增一条事务记录 (a、b两步操作在同一个数据库中,可以保证事务一致性,同时成功,同时失败)定时程序流程:a:定时扫描生产者事务记录表中状态为未完成的记录,将未完成记录发送到消息队列中b:将生产者事务记录表中的状态改为已完成...

2020-02-23 10:13:21 296

原创 是否真的需要分布式事务

是否真的需要分布式事务尽量减少过度设计,太多团队过度设计,搞的所有人疲劳不堪,而微服务过多就会引出分布式事务,这个时候需要将用到事务的微服务聚合成一个单机服务,使用数据库的本地事务。分布式事务的原则是:尽量使用数据库的本地事务,因为分布式事务无论是那种方案都会增加你系统的复杂度,这样的成本实在是太高了,千万不要因为追求某些设计,而引入不必要的成本和复杂度。...

2020-02-23 10:12:29 101

原创 BASE

BASEBASE 是 Basically Available(基本可用)、Soft state(软状态)和 Eventually consistent (最终一致性)三个短语的缩写。是对CAP中AP的一个扩展a:基本可用:分布式系统在出现故障时,允许损失部分可用功能,保证核心功能可用。b:软状态:允许系统中存在中间状态,这个状态不影响系统可用性,这里指的是CAP中的不一致c:最终一致:最终...

2020-02-23 10:11:56 72

原创 CAP三者是否可以共有

CAP三者是否可以共有CAP三者不能共有,在分布式系统中,网络无法保证100%可靠,分区其实是一个必然现象,如果我们选择了CA而放弃了P,那么当繁盛分区故障现象时,为了保证一致性,在这个时候必须拒绝请求,但是A又不允许,那么分布式系统理论上不可能选择CA架构,只能选择CP或者AP架构。对于CP来说,放弃可用性,追求一致性和分区容错性,我们的ZooKeeper其实就是追求的强一致性对于AP来说...

2020-02-23 10:11:24 85

原创 分布式事务CAP定理

分布式事务CAP定理C(一致性):对某个指定的客户端来说,读操作能返回最新的写操作。对于数据分布在不同节点上的数据来说,如果在某个节点的数据更新了,那么其他节点如果都能读取到这个最新的数据,那么就成为强一致性,如果有某个节点没有读取到,那就是分布式不一致。A(可用性):非故障的节点在合理的时间内返回合理的响应(不是错误和超时的相应)。可用性的两个关键一个是合理的时间,一个是合理的相应。合理的时...

2020-02-23 10:10:53 140

原创 MySql一般数据达到千万级的数据就得分库分表

MySql一般数据达到千万级的数据就得分库分表

2020-02-23 10:10:22 790

原创 什么是分布式事务

什么是分布式事务简单来说,就是一次大的操作由不同的小操作组成,这些小操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。...

2020-02-23 10:09:48 70

原创 @CachePut和@Cacheable的区别

@CachePut和@Cacheable的区别@CachePut负责增加缓存@Cacheable负责查询缓存,如果没查到,则将执行方法,并将方法的结果增加到缓存

2020-02-23 10:09:15 166

原创 Spring缓存相关的注解

Spring缓存相关的注解@CachePut:设置缓存,先执行方法,并将执行结果缓存起来@CacheEvict :删除缓存,在执行方法前,删除缓存@Cacheable:查询缓存,先查询注解中的key是否在缓存中,如果在直接返回缓存值,如果缓存中不存在,执行方法...

2020-02-23 10:08:40 49

原创 RedisTemplate封装的操作Redis方式

RedisTemplate封装的操作Redis方式ValueOperations字符串类型操作API集合ListOperations列表类型操作的API集合SetOperations集合类型的操作API集合ZSetOperations有序集合类型操作API集合HashOperations哈希类型操作API集合...

2020-02-23 10:08:10 143

原创 为什么要使用缓存

为什么要使用缓存主要原因是数据库的查询是比较耗时的,而使用缓存能大大节省数据查询的时间

2020-02-23 10:07:41 107

原创 分布式锁主流实现方案和选型

分布式锁主流实现方案和选型a:基于Redis的分布式锁。使用并发量很大、性能要求很高而可靠性问题可以通过其他方案弥补的场景b:基于ZooKeeper的分布式锁。适用于高可靠(高可用),而并发量不是太高的场景...

2020-02-23 10:07:00 123

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