- 博客(149)
- 收藏
- 关注
原创 Seata-从源码了解它
Seata-从源码了解它相关知识介绍XA协议本地事务全局事务TM的必要性2PC准备阶段提交阶段两阶段提交的缺陷3PCCanCommit阶段PreCommit阶段doCommit阶段2PC与3PC的区别SeataSeata支持的模式:Seata AT模式三个角色(AT:Automatic Transaction)TC (Transaction Coordinator) - 事务协调者TM (Transaction Manager) - 事务管理器RM (Resource Manager) - 资源管理器整体机
2021-09-24 10:01:05 519
原创 从问题学习TCP协议
从问题学习TCP协议前情提要以太网帧IP数据报TCP数据报问题以及解析一. 能不能说一说 TCP 和 UDP 的区别?二. 说说 TCP 三次握手的过程?为什么是三次而不是两次、四次?1. 两军 里应外合过程2. 真实握手3. 为什么不是两次?4. 为什么不是四次?5. 三次握手过程中可以携带数据么?6. 同时打开会怎样?三. 说说 TCP 四次挥手的过程1. 过程拆解2. 等待2MSL的意义3. 为什么是四次挥手而不是三次?4. 同时关闭会怎样?四. 说说半连接队列和 SYN Flood 攻击的关系1.
2021-07-06 15:35:26 336
原创 IDEA插件推荐
插件推荐1. activate-power-mode 和 Power mode II根据Atom的插件activate-power-mode的效果移植到IDEA上写代码是整个屏幕都在抖动,activate-power-mode是白的的,Power mode II色彩更酷炫点。2.Grep console自定义日志颜色,idea控制台可以彩色显示各种级别的log,安装完成后,在console中右键就能打开。并且可以设置不同的日志级别的显示样式。可以直接根据关键字搜索你想要的,搜索条件是支持
2021-07-01 14:23:13 714
原创 SpringMVC响应的HTTP状态码
SpringMVC响应的HTTP状态码SpringMVC 定义的状态码常用到的状态码2XX200 OK2042063XX3013024XX4004014035XX500503SpringMVC 定义的状态码//// Source code recreated from a .class file by IntelliJ IDEA// (powered by FernFlower decompiler)//package org.springframework.http;import org
2021-06-23 14:27:19 2534
原创 给自己五分钟,彻底搞懂并优化冒泡排序
给自己五分钟,彻底搞懂并优化冒泡排序冒泡排序思想算法描述示例冒泡排序的Java代码实现冒泡排序的第一次优化冒泡排序弊端冒泡排序第一版优化冒泡排序思想给定一个无序数组,让“重”的元素下沉,轻的元素上浮”,这个就是冒泡排序。算法描述1. 对于给定长度为N的数组, 我们从头进行N次扫描。2. 每一次扫描相邻的两个元素进行大小比较,若某一元素大于它的下一个元素,就进行交换。3. 每一次扫描都会把剩余元素的最大值下沉到剩余元素的末尾。故每扫描一次,下一次扫描的超度相应的就减一。示例假设要对 下面数组
2021-05-28 13:48:36 184 1
原创 IO——同步、异步、阻塞、非阻塞
IO——同步、异步、阻塞、非阻塞IO类型IO分类介绍Blocking IO——阻塞型的IONonBlocking IO——非阻塞的IOIO类型一般情况下:IO又五种类型BlockingIO: 阻塞型的IONonBlockingIO:非阻塞型的IOIO multiplexing : IO多路服用signal driven IO:信号量驱动IOasynchronous IO:异步 IO但是 signal driven IO 一般不常见,所以一般情况下我们只用四种IO。IO分类介绍Blocki
2021-03-12 14:53:54 456
原创 Redis内存淘汰策略----源码分析
Redis内存淘汰机制为什么要有内存淘汰机制首先我们从过期删除开始定期删除惰性删除总结淘汰策略Redis的8种内存淘汰策略LRU标准LRU实现方式Redis的LRU实现为什么要使用近似LRU?LFURedis如何实现LFU实现源码:减少counter,unsigned long LFUDecrAndReturn(robj *o)递增counter —— uint8_t LFULogIncr(uint8_t counter)降低 LFUDecrAndReturn增长 LFULogIncr新生KEY策略为什么
2021-03-10 17:26:55 292
原创 结合源码看Redis过期策略
结合源码看Redis过期策略注意事项常用的过期策略1. 定时过期,主动过期为什么redis不采用这个过期策略呢?2. 惰性过期3. 定期过期大致的步骤终止扫描的条件需要注意的是。注意事项笔者所看的源码是redis稳定版 6.2 版本的常用的过期策略1. 定时过期,主动过期这个策略是需要一个过时器,对每一个key都设计一个定时器。优点:对内存友好,但是严重消耗CPU,对CPU非常不友好,这个redis没有采用为什么redis不采用这个过期策略呢?想想, 每一个key都要一个定时器,是不是特别
2021-03-09 18:13:39 323
原创 如何使用JWT来实现单点登录——带你从概念到源码的了解
如何使用JWT来实现单点登录JWT介绍什么是JWTJWT 解决什么问题JWT一些名词解释JWT组成组成一:Header头部JWS可选的头部信息目前JWS实现方式 签名算法:组成二:payload 荷载Registered ClaimsPublic ClaimsPrivate Claims组成三:签名JWT使用JWT介绍什么是JWTJWT全名是Json Web Token,由三部分组成:Header(头部)、Payload(负载)、Signature(签名)。JWT现在已知的就是两种实现JWS (J
2021-03-08 17:16:17 578
原创 SSO单点登录
聊聊SSO单点登录系统架构演变1. 单体架构2. 负载均衡3. 垂直切分/分布式/SOA(服务治理)/微服务架构4. 具有多个域名的系统。单点登录的实现工具支持单点登录的系统角色sso-client(用户服务之外的其他服务)sso-server(用户服务)实现SSO的技术技术整合,RedisJWT(JSON Web Token)系统架构演变1. 单体架构用户量很少的时候,一台服务器就能搞定需要承载的用户量。这个时候我们完全只需要将登录信息存在session中就好。2. 负载均衡随着用户量的提升,我
2021-03-08 10:54:36 224 6
原创 分布式系统接口,如何避免表单的重复提交?
分布式系统接口,如何避免表单的重复提交?使用分布式的好处与坏处幂等性问题幂等性定义保持幂等性的最终目的如何防止重复提交查操作幂等性处理删操作幂等性处理新增和修改幂等性处理使用分布式的好处与坏处很多时候,我们为了更好的承载更多请求,或者稳定的为更多的用户提供服务,那么我们一般会把服务部署多份。以保证服务的高可用,高并发。但是一项事务有它的好处也有它的坏处,比如分布式服务就要解决幂等性的问题。幂等性问题幂等性定义一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外)。也就是说,
2021-03-02 16:05:50 278
原创 Redis实现分布式锁
实现分布式锁的三种方式数据库乐观锁基于Redis实现分布式锁基于Zookeeper实现分布式锁Redis实现分布式锁要点互斥性在任意时刻,只有一个客户端能持有锁。不能死锁客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。容错性只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。加锁和解锁方式可以直接通过 set key value px milliseconds nx 命令实现加锁。通过Lua脚本实现解锁。//获取锁(unique_
2021-02-01 15:15:24 158
原创 消息队列中,如何保证消息的顺序性
面试官心理分析其实这个也是用 MQ 的时候必问的话题,第一看看你了不了解顺序这个事儿?第二看看你有没有办法保证消息是有顺序的?这是生产系统中常见的问题。面试题剖析我举个例子,我们以前做过一个 mysql binlog 同步的系统,压力还是非常大的,日同步数据要达到上亿,就是说数据从一个 mysql 库原封不动地同步到另一个 mysql 库里面去(mysql -> mysql)。常见的一点在于说比如大数据 team,就需要同步一个 mysql 库过来,对公司的业务系统的数据做各种复杂的操作。你在
2021-01-29 16:45:51 385
原创 雪花算法——分库分表情况下id解决方案
雪花算法——分库分表情况下id解决方案分库分表的情况下id会遇到哪些挑战分库分表id的解决方案低并发情况下,使用中心数据库自增使用不同步长数据库自增解决。使用UUID使用redis使用MQ雪花算法为什么要使用雪花算法算法实现雪花算法生成的Id组成Java代码实现分库分表的情况下id会遇到哪些挑战在分库分表的情况下,如果不解决id的问题,那么同一个主键id的数据的时候,将会出现多条记录,这样很显然不能保证数据的正确性。分库分表id的解决方案低并发情况下,使用中心数据库自增用一个中心数据库,建一个表,
2021-01-29 11:53:46 2399 5
原创 积累小记
积累小记SpringMysqlSpringSpring,SpringBoot,SpringMVC、SpringCloud关系Spring 容器 Bean 生命周期Mysqlmysql 查询优化 explain 详解mysql 索引数据结构 B+Tree,为什么要使用B+Tree聚簇索引和非聚簇索引唯一索引、联合索引、普通索引如何使like模糊查询 后模糊(%前置)生效索引下推索引覆盖回表...
2021-01-28 15:39:14 124
原创 Spring中Bean的生命周期
Spring中Bean的生命周期生命周期简单版结合代码理解一下1、Bean的定义2、Bean的初始化3、Bean的调用4、Bean的销毁生命周期简单版实例化一个Bean--也就是我们常说的new;按照Spring上下文对实例化的Bean进行配置--也就是IOC注入;如果这个Bean已经实现了BeanNameAware接口,会调用它实现的setBeanName(String)方法,此处传递的就是Spring配置文件中Bean的id值如果这个Bean已经实现了BeanFactoryAw
2021-01-28 11:17:59 133
原创 如何使Like使用索引
如何使Like使用索引不考虑索引覆盖的情况下只要like后需要匹配的字段前加%,索引就会失效。但是后面加%,能使用索引测试:表结构Test case 1:结果:Test case 2:结果:Test case 3:结果:考虑索引覆盖的情况下,like无论什么情况都会使用索引测试:表结构:Test case 1:结果:Test case 2:结果:Test case 3:结果:不考虑索引覆盖的情况下只要like后需要匹配的字段前加%,索引就会失效。但是后面加%,能使用索引测试:表结构CREATE T
2021-01-27 18:12:38 5126 1
原创 Mysql关于索引问题的问答
这里写目录标题Mysql索引关于索引的问答索引的目的问题1:索引存在内存中还是存在磁盘中?引申问题:为什么两者都存?问题2:Mysql索引采用的数据结构是什么结构引申问题:为什么不使用AVL树、红黑树、二叉查找树、BST?引申问题:为什么不适用Hash表?引申问题:为什么不用BTree?问题3:Mysql索引中存储什么样的数据?问题4:为什么要使用长度尽量短的字段建立索引?为什么尽量使用定长数据类型建立索引问题5:聚簇索引和非聚簇索引区别问题6:一个表中,最多有多少索引?问题7: 什么是回表?问题8:什么是
2021-01-27 17:44:26 381
原创 Mysql之explain详解(超级全面)
Mysql之explain详解(超级全面)概念explain能干嘛?如何使用输出字段解释id(表的读取顺序)id相同,执行顺序由上至下id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越被优先执行id有相同也有不同,同时存在select_type(数据读取操作的操作类型)tabletype (很重要)systemconsteq_ref 刚好匹配一条记录ref 匹配单个值所有的行fulltextref_or_nullindex_mergeunique_subqueryindex_subquery
2021-01-26 22:03:30 3887 2
原创 Linux命令速查手册
Linux命令速查手册查看Linux系统信息date 显示系统日期关机 (关机、重启、登出 )文件和目录文件搜索挂载文件系统磁盘空间相关用户和群组文件权限文件的特殊属性打包和压缩文件RPM包(Fedora, Redhat及类似系统)YUM(Fedora, RedHat及类似系统)DEB包 (Debian, Ubuntu及类似系统)APT软件工具 (Debian, Ubuntu及类似系统)查看文件内容文本处理字符设置和文件格式转换文件系统分析初始化一个文件系统SWAP文件系统备份光盘网络 - (以太网和WIF
2021-01-26 19:37:39 211
原创 Kafka问题,看这一片就能大致清楚了
Kafka问题,看这一片就能大致清楚了Kafka基本概念Broker-节点Topic-主题Partition-分区Offset-偏移量Kafka如何实现高可用问题:既然Partition分为Follower和Leader,那么某一个Broker节点挂掉怎么办呢?挂掉的是Follower节点挂掉的是Leader节点问题:多少个副本才算够用?问题:Follower和Leader没有完全同步怎么办?问题:一个节点的选取规则是什么?Ack参数决定了可靠程度第一种是设为**0**第二种是设为1第三种是设为**All(
2021-01-26 19:30:04 919
原创 Java中的StringBuffer和StringBuilder
Java中的StringBuffer和StringBuilder概述StringBuffer的API介绍StringBuffer对象的初始化String和StringBuffer相互转化StringBuffer的常用方法append()方法deleteCharAt(int index)方法delete(int start,int end)方法insert(int offset, boolean b)方法reverse()方法setCharAt(int index, char ch)方法trimToSize方
2021-01-26 16:11:20 145
原创 Spring,SpringMVC,SpringBoot,SpringCloud有什么区别和联系
Spring,SpringMVC,SpringBoot,SpringCloud有什么区别和联系简单介绍SpringSpringMVCSpringBootSpringCloud对比Spring 和 SpringMVCSpringMVC 和 SpringBootSpringBoot 和 SpringCloud总结简单介绍SpringSpring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。Spring使你能够编写更干净、更可管理、并且更易于测试的代码。SpringMVCSpring
2021-01-26 11:18:56 178
原创 Java如何获取今天周几
Map<Integer, String> weekMap = new HashMap<>(7); weekMap.put(1, "星期日"); weekMap.put(2, "星期一"); weekMap.put(3, "星期二"); weekMap.put(4, "星期三"); weekMap.put(5, "星期四"); weekMap.put(6, "星期五"); ..
2020-08-25 09:42:03 4165
原创 使用Collectors.toMap报java.lang.IllegalStateException: Duplicate key XXX异常
查看下面的代码:public class DailyTest { public static void main(String[] args) { List<User> users = Lists.newArrayList( new User(12L,"花花2"), new User(13L,"花花3"), new User(14L,"花花4"),
2020-07-03 10:37:14 1207
原创 PostMan传@RequestParam修饰的数组
笔者今天被一个问题困扰了一段时间看如下代码:@RestController@RequestMapping("/getTest")public class GetTestController {@RequestMapping("/listRaramTest")public List<String> listRaramTest(@RequestParam("userIdList") List<String> userIdList){ return userIdList
2020-06-30 21:59:21 5095 1
原创 想使用PowerMock,看这里——PowerMock基本使用
首先引入依赖:<dependencies> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-module-junit4</artifactId> <version>2.0.7</version> <scope
2020-06-05 16:33:49 1291
原创 记一次JDK版本错误导致项目运行不了的BUG,--Dubbo Error creating bean with name 'XXXXX':
笔者今日遇到了一次很让人头疼的BUG,以前也遇到过一次。根本原因是JDK版本太低。问题描述:部署服务的时候,启动服务相关报错如下:Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'XXXXX': FactoryBean threw e...
2019-09-18 10:08:08 626
原创 Springboot整合Dubbo和zookeeper-----XML版,即是服务消费者又是服务提供者
笔者个人更喜欢SpringCloud,也更喜欢它的一系列的解决方案。但是技术不在喜不喜欢,而是要符合市场需求。dubbo也是一个成熟的分布式服务的解决方案。所以笔者现在分享Xml方式SpringBoot整合Dubbo和Zookeeper。背景原因,笔者也尝试过使用无xml的方式使用starter的方式整合过Dubbo,但是很遗憾,可能是笔者能力有限,在配置多个注册中心时笔者一直不成功,无赖的情...
2019-08-21 13:12:10 1307
原创 SpringBoot整合redis
redis是一个很好的nosql数据库,那么我们怎么整合springboot呢首先看pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins...
2019-08-18 22:41:58 136
原创 使用信号量实现消费者生产者模式
先贴代码:苹果工厂:class AppleFactory{ private LinkedList<Integer> appleBox; private Integer boxSize; private AtomicInteger appleCurrentNum; // 非满锁 private final Semaphore no...
2019-08-05 14:21:38 785
原创 Java使用Lock和Conditon来实现消费者生产者模式
笔者之前也写过消费者生产者模式,那么废话少说,我们直接上代码生产者:class Producer extends Thread { private String name; private LinkedList<Integer> appleBox; private Integer boxSize; private AtomicInteg...
2019-08-04 21:48:24 424
原创 Java使用BlockingDeque 实现消费者生产者模式
BlockingDeque是一个阻塞有界的链表结构。对它添加数据或者对他弹出数据,都是阻塞的,因为是有界的,所以我们添加的时候,如果已经达到了容量,他就会等待。弹出队列也是一样,如果里面没有元素了,弹出的时候就会被阻塞。下面上代码:生产者代码class Producer extends Thread { private String name; priva...
2019-08-04 20:46:48 483
原创 Java使用wait()、notify()、notifyAll()实现生产者消费者模式
前言:1. wait()、notify()、notifyAll()三个方法不是随随便便就能用的,这三个方法一定要在同步代码块中调用的。2. 同步代码块中的锁最好是使用临界资源,也最好使用临界资源对象的 wait()、notify()、notifyAll()。3. 如果有多个生产者和多个消费者,那么尽量不要调用notify()、而要用notifyAll()。因为如果某一生产者使用noti...
2019-08-03 16:41:46 574
原创 Java实现线程的三种方式
第一种方式,直接继承Thread类,重写run方法,最为简单:/** * 实现的第一种方式就是继承自Thread类 */class MyThread extends Thread{ @Override public void run(){ for(int i = 0 ; i <= 1000 ; i++){ System.ou...
2019-08-02 16:47:28 224
原创 使用jedis简单的连接redis,并操作
首先要有依赖: <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.1.0</version> ...
2019-08-02 14:50:53 715
原创 SpringBoot整和Ehcache
Ehcache是很早就用的一个缓存。但是自从redis横扫天下后,这个就很少有人问津了,但是在小项目中,这个还是能被使用作为数据库的缓存。至于mybatis和web以及日志的配置,亲爱的读者请参考Springboot配置logback日志----依葫芦画瓢就能用这篇博文今天我们就来使用Srpingboot配置 一下:首先加入依赖: <!-- Spring B...
2019-07-31 13:01:12 137
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人