自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 资源 (1)
  • 收藏
  • 关注

原创 redison的分布式锁

redison 的分布式锁是使用lua脚本实现(合并多次网络请求,原子性)1.保证设值和设置超时时间是原子性2.用守护线程完成锁的自动续期3.优化了主备节点的锁同步缺点:一般采用的是同步处理锁的变化,一个redis的节点抖动容易拖慢性能.lua脚本如下:if (redis.call('exists' KEYS[1]) == 0) then + -- exists 判断key是否存在 redis.call('hset' KEYS[1] ARGV[2] 1)

2022-01-25 17:28:00 1065

原创 spring-boot-starter原理浅显

核心: 为了让spring启动的时候自动的去加载对应的配置,自动实例化需要的对象,并塞入对应的配置类.1.要引入(maven或者gradle 等)2.告诉spring加载哪里的文件,在spring.factories中3.一般会加上spring-boot-configuration-processor(编译时生成meta.json),用作元数据,IDE就可以快速提示.4.利用classOnMissBean,ConditionalOnClass,EnableConfigurationProperti

2022-01-25 17:06:14 255

原创 kafka记录

ka’fka的reblance如名:再平衡会在topic订阅变化和个数变化消费组内成员(新加或者挂了)个数发生变化.从上面就能发现,一般后者容易出现,前者是我们自己配置的.常用的调整超时时长和心跳时间https://cloud.tencent.com/developer/article/1631633https://zhuanlan.zhihu.com/p/98770059...

2022-01-24 20:37:27 1663

原创 并发编程模型

线程与锁:线程与锁模型有很多众所周知的不足,但仍是其他模型的技术基础,也是很多并发软件开发的首选。函数式编程:函数式编程日渐重要的原因之一,是其对并发编程和并行编程提供了良好的支持。函数式编程消除了可变状态,所以从根本上是线程安全的,而且易于并行执行。Clojure之道——分离标识与状态:编程语言Clojure是一种指令式编程和函数式编程的混搭方案,在两种编程方式上取得了微妙的平衡来发挥两者的优势。actor:actor模型是一种适用性很广的并发编程模型,适用于共享内存模型和分布式内存模型,也适合解决

2022-01-24 17:26:04 80

原创 延时队列的实现原理

方案:rabbitMq实现延时队列(TTL(Time to live) + DXE(Dead Letter Exchanges))-Redis的ZSet实现Redis 过期回调(Redis的key过期回调事件,也能达到延迟队列的效果,简单来说我们开启监听key是否过期的事件,一旦key过期会触发一个callback事件)定时器轮询遍历数据库记录 JDK的DelayQueue(完全二叉堆 + 根据时间排序,到时间才能取出)JDK ScheduledExecutorService (定时任务)时间

2022-01-24 17:25:00 2958

原创 redis数据类型和底层实现

1.字符串对象 命令:set底层: int (整型),raw(大于SDS简单动态字符串),embstr(小于32字节)2.列表对象 rpush​​​​​早期版本:ziplist或linkedlist新版本 quicklist(linkedlist和ziplist的集合)3.哈希对象 hmsetziplist(键对值的键和值的长度都是小于64字节并且键对值数量小于512)或者hashtable(字典)4.集合对象 saddintset(集合中所有元素都是整数并且元素数量小于5.

2022-01-04 14:01:27 541

原创 多个CompletableFuture异步的执行,主线程等待所有任务完成.

代码实现:List<String> line = new ArrayList();List<CompletableFuture<>> totalLines = lines.stream() .map(productLine -> CompletableFuture.supplyAsync(() -> { //do something async }))

2021-02-02 14:51:23 4746

原创 mysql锁部分

用锁机制区分:排他锁,共享锁用粒度区分:record lock(行锁)next-key lock(间隙锁–页面锁)table lock(表锁)MyISAM 主要采用表锁:加锁快,不死锁.(因为表锁始终),不适合大量查询和修改InnoDB锁模式:InnoDB 实现了以下两种类型的行锁:共享锁(S):允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。排他锁(X):允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和排他写锁。为了允许行锁和表锁共存,实现多粒度锁机制

2021-01-29 17:20:31 74

原创 springboot的controller统一格式的参数封装

配置写法#这里需要填写自己对应的controller对应的包名@ControllerAdvice(basePackages = {"com..controller", "com..controller"})public class WorldResponseBodyAdvice implements ResponseBodyAdvice { //这里是自定义支持规则,什么样的数据做封装 @Override public boolean supports(MethodParameter

2020-12-28 16:19:54 1110

原创 springboot 异常统一处理

异常处理核心自定日志请看该类https://blog.csdn.net/love4amanda/article/details/111692970@ControllerAdvice@ResponseBody@Log4j2public class WebExceptionHandler { /** * 这里是所有的统一返回 * @param e * @return */ @ExceptionHandler public Respon

2020-12-28 16:15:24 127

原创 日志简化,不用个类引入lombok + Log4j2

pom配置 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <dependency> <groupId>org.pro

2020-12-25 17:18:51 564

原创 动态配置springboot定时任务的开关

配置实现import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.annotation.EnableScheduling;/** * 定时任务开关 * @author duanjw */@Confi

2020-12-25 17:10:31 720

原创 学习笔记之completableFuture附带java异步编程

completeFuture

2020-12-16 14:45:58 73

原创 idea插件推荐

1.ignore : git ignore自动2.lombok3.p3c 阿里规范4.FindBugs 查询bug5.GsonFormat 根据json自动生成java类(nice)6.maven helper 查看maven 冲突7.visualVM Launcher JVM idea查看8.GenerateAllSetter 一键调用一个对象所有的setter方法9.MybatisCodeHeplerPro 更加方便的mybatis代码生产器10.rainbow brackets

2020-12-15 19:23:15 114

原创 rabbitMQ高可用性

高可用性(分布式集群)1.rabbitMQ由于Erlang语言的特性,利用magiccookie通讯,天然支持分布式.2. 仅采用元数据同步(指其他节点只知道这个queue的metadata信息和一个指向queue的owner node的指针,简单来说只是同步kafka的offset)3.rabbitmqctl查询集群状态4.通过haproxy完成负载均衡(nginx是应用层级)....

2020-12-14 17:08:00 89

原创 kafka和RocketMQ核心概念比较

核心概念topic:kafka的topic 同rocketMQ的topicqueue和partion类似持久化kafka 数据会先写入磁盘,rocketMQ可以选择同步或者异步刷盘kafka以性能优化方面比较kafka高性能原理:pageCahezero-copybatch-stream顺序读写磁盘rocketMQ默认异步刷盘,且顺序读写pageCachezero-copy默认的批处理操作是1,可以根据实际情况调整...

2020-12-11 19:06:37 260

原创 JVM笔记简述

发展史1.opkenJDK和sun JDK,oracleJDK2.Microsoft JVM内存区域和异常核心:内存的动态分配和回收(下面说的是1.7)program counter register程序计数器,线程私有,为什么呢?想想如果不是线程私有,并发下代码执行顺序岂不是乱掉。java virtual Machine stacks 线程私有,为什么呢?每个线程的本地局部变量表,操作方法出口是各自的。native method stack 与上面类似,但是前者是个虚拟机用的,后者是我们

2020-11-06 00:30:02 199 2

原创 springboot核心原理简介

四大特性:自动配置、起步依赖、Actuator、命令行界面(CLI)自动装配::@SpringBootConfiguration就是 @Configuration通过@ComponentScan启用组件扫描,默认扫描对应类下的路径@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration

2020-11-03 20:47:14 871

原创 怎样解决数据库的AB用户并发读写问题

原因:两个事务不是事务开启一个事务加入,执行AB操作时,AB操作融合为一个事务多版本控制悲观锁业务涉设计,省略读操作,写成 update a = a + b;

2020-09-30 17:53:41 299

原创 maven的三个指令

package 打包install 安装到本地仓库deploy 安装到本地仓库并上传私服

2020-08-18 09:38:04 145 1

原创 restful风格特色

核心思想:将接口当做资源特色:1.无状态2.json3.操作 put post get (put和post 的区别),put幂等,post会重复创建资源restful的版本控制大版本变化 推荐请求头上加小版本变化 推荐请求参数加

2020-08-13 15:55:20 87

原创 欢迎使用CSDN-markdown编辑器(表示用法)

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2020-05-12 15:21:11 126

原创 理解IO

IO模型理解阻塞I/O非阻塞I/OI/O多路复用信号驱动I/O异步I/O常用就3种( 阻塞I/O, 非阻塞I/O,I/O多路复用),NIO属于I/O的多路复用IO类型BIO:同步阻塞IONIO:同步非阻塞IOAIO:异步非阻塞IO学习I/O模型需要的基础文件描述符Linux 的内核将所有外部设备都看做一个文件来操作,对一个文件的读写操作会调用内核提供的系统命令(a...

2020-05-02 23:18:53 187

原创 索引的建立规范

建表一定要有主键优先使用唯一性索引为常常需要做排序,分组和联合操作的字段建索引为常用的where条件建索引尽量使用前缀索引特别是在索引列值很长的情况下删除不用或者少用的索引列大表加索引要在业务不繁忙的时间...

2020-05-01 16:31:20 837

原创 为什么不建议列值默认是null?

很多人都说,not null能省了行头null标记位的空间。确实,对于col1 varchar(10) null来说,改成col1 varchar(10) not null default ''确实是省了行头标志位的空间。但是对于col1 int null来说,改成col1 int not null default 0,省了行头那1 bytes的空间(就当做这一行只有一个null,那么ceil...

2020-05-01 16:21:04 248

原创 索引至少需要优化到的级别

这里说到重要的点:ALLindexrangeref 辅助索引等值查询eq_ref 多表连接查询,连接条件是主键或者唯一键system,const 主键或者唯一键,等值查询null 表中不包含优化的至少级别是range...

2020-05-01 16:15:09 1167

原创 不走索引的情况

基本归纳为5种情况1.全表扫描情没有查询条件2.查查询条件是原表中的大部分数据查询条件是原表中的大部分数据,超过25%(根据业务判断,没有更好的方式,那么应该放到redis中)3.索引本身失效,统计数据不真实索引有自我维护能力例如对索引列更新频繁的情况,可能会导致该问题4.对查询索引做运算或者使用函数5.隐式转换6.<> 或者 not in 或者 !=7....

2020-05-01 16:07:50 632

原创 数据库连接池推荐比较

连接池优势我们有一些常用的数据库连接池,连接池的好处有很多这里直接说应用程序和数据库交互首先通过TCP协议的三次握手和数据库服务器建立连接,然后发送数据库用户账号密码,等待数据库验证用户身份提交SQL语句到数据库执行(可能还有sql的预编译)连接关闭,关闭连接需要和数据库通信,通知断开连接了然后再TCP四次挥手最后完成关闭池技术的思想采用的是空间换时间的概念.预先完成多个数据库连接...

2020-02-14 17:08:37 918

原创 CSRF

简介CSRF指服务器端请求伪造: 由攻击者伪造客户端的虚假访问,导致服务端做出反应,危害用户数据.危害在客户不知情的情况下数据被修改,且服务端数据有被篡改的风险产生产生的方式有多种,主要目的就是瞒过用户,伪造请求; 例如:误导用户点击,构造虚假链接举例:1.伪造get请求简单的CSRF攻击:用户登录访问某有csrf漏洞的银行网站http://www.xxbank.com。用户被...

2020-02-07 17:12:08 157

原创 SSRF

简介SSRF指服务器端请求伪造: 由攻击者构造形成由服务端发起请求的一个安全漏洞.往往用于突破内网的访问限制.解释:多数公司的内网系统是不对外部开放的,特别是金融领域.由于之前在XXE的修复中其实就存在SSRF漏洞,这里做一些补充,便于后续伙伴理解.如果小伙伴理解CSRF那么就很容易理解SSRF;前者是客户端请求伪造后者是危害主要体现在内网端口扫描和文件读写,当然也可以对内网应用进行攻...

2020-02-05 22:11:34 204

原创 RocketMQ生产者组topic和消费组的关系

各个之间的关系其实很松散,并不是说不能操作最佳实践订阅关系一致多个 Group ID 订阅了多个 Topic,并且每个 Group ID 里的多个消费者实例的订阅关系保持了一致。消费幂等最终一致性保证数据一致性,如果不幂等,将导致数据错乱topic和tag的关系topic可以是一级过滤关系 tag是二级过滤关系使用:业务消息往往推荐做topic 的 一级区分tag往往用于过滤...

2020-02-03 16:58:50 14510 1

原创 怎样看源码api解释

看如下网址的路径https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletionStage.html

2020-01-19 10:33:07 214

原创 活动问题

1.超量请求前端校验后端注意做csrf,防止脚本2.慢sql秒杀项目需要注意尽量不要查库,多缓存3.抽奖概率问题中奖数量限制,中奖概率调整

2020-01-15 15:10:37 172

原创 sql的一些优化思路与补充

思路sql优化的核心:减少IO,减少CPU消耗IO减少网络IO和磁盘IO网络IO数据量一次不应过大,也不能过于频繁;这里猜测:机器的内存在操作一次内存过大的数据时,需要一次申请对应的内存(不论是磁盘还是内存)都会造成内存的过度的使用,jvm要考虑是不是扩容,要不要触发GC,系统内存可能需要判断内存要不要连续,网络传输也不宜一次大数据量传输总之:实践的结果是,大多数操作都不应该一次使用...

2020-01-14 11:25:55 139

原创 互联网DDoS整理

简介造成DDoS的几种方式1.针对特定漏洞,定点攻击介绍:这种攻击方式往往是黑客比较熟悉系统,利用系统或者系统的组件存在的漏洞,发出少量有针对性的请求,做出的攻击.实例fastJson安全漏洞 ,内存溢出,导致DDoSXXE漏洞,利用此命令,组装xml文件,利用xml执行系统指令读取不存在的文件,造成崩溃.hash冲突:比如利用hashMap的hash冲突,导致map数据链表化,同时...

2020-01-10 15:20:03 206

原创 分布式事务

XA提交分阶段提交: 第一阶段是表决阶段,所有参与者都将本事务能否成功的信息反馈发给协调者;第二阶段是执行阶段,协调者根据所有参与者的反馈,通知所有参与者,步调一致地在所有分支上提交或者回滚。两阶段提交TCC两阶段提交的改进版TCC方案其实是两阶段提交的一种改进。其将整个业务逻辑的每个分支显式的分成了Try、Confirm、Cancel三个操作。Try部分完成业务的准备工作,confir...

2020-01-10 11:00:58 164

原创 网关聚合系统

关键词:soul , Rxjava , Kong , springcloud-gatway

2020-01-09 16:00:19 592

原创 多线程开发之antpathmatcher的使用

很多人在使用antpathmatcher这个类做匹配的时候,学着网上的demo,每次做匹配的时候都new一个新的antpathmatcher;public boolean match(String u,String s){ Antpathmatcher ant = new Antpathmatcher(); return ant.match(u, s);}实际上我们完全...

2020-01-09 15:17:36 1975

原创 安全问题

安全攻击方式:1.数量型攻击海量请求这种类型的攻击典型代表是ICMP Flood和UDP Flood2.利用漏洞攻击hash冲突:比如利用hashMap的hash冲突,导致map数据链表化,同时做增删改操作,导致服务器响应变慢.Slowloris攻击:不释放服务器连接3.两者兼有常见的攻击SYN Flood :利用TCP的连接;报文发一半.高级而隐晦的攻击手段:将热门文件(...

2020-01-08 13:30:55 128

原创 微服务接口单一

怎样设计接口为什么要接口单一减少接口的修改调用和变化举一个例子:如果前端需要一组数据,后端已经提供(格式不对);推荐是前端做处理,为什么?首先如果由后端做处理,结果其实是前后端都需要改动;而再次面对数据改动的时候,依旧需要前后端改动;而实际上开发,大多出数据格式都已规范;需要变动的数据格式往往是少数;而且具体要怎样的数据格式,前端调用方是最清楚的(或者controller层)1...

2020-01-08 11:31:01 171

SQLyog-64可视化工具

用于MySql的可视化工具,非常好用,解压安装可用,是MySql认定的可视化工具。

2018-03-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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