自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

JavaMa的博客

你知道的越多,你不知道的越多。

  • 博客(29)
  • 资源 (1)
  • 收藏
  • 关注

原创 一图看懂MySql索引B+Tree

ProcessOn浏览:https://www.processon.com/view/link/5f48818e1e0853452d3fa33c

2020-11-14 17:32:42 191 2

原创 CompletableFuture实现微服务优雅调用

使用CompletableFuture实现微服务优雅调用。举例:可以使用CompletableFuture的allOf方法来实现多个调用的统一返回。 public void futureTest() { CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> { try { Thread.sleep(10);

2020-07-11 20:06:23 791

转载 MySQL深度分页优化

Mysql深度分页优化1. 背景mysql使用select * from table limit offset, rows分页在深度分页的情况下, 性能急剧下降。例如:select * 的情况下直接⽤limit 600000,10 扫描的是约60万条数据,并且是需要回表60W次,也就是说⼤部分性能都耗在随机访问上,到头来只⽤到10条数据(总共取600010条数据只留10条记录)2. 优化2.1 业务层面限制跨度比较大的跳页百度和Google方案:[外链图片转存失败,源站可能有防盗链机制,

2022-05-16 15:39:45 6765

原创 缓存穿透解决方案和最佳实践(注解+AOP)

缓存穿透解决方案分析:一步步分析改进AtomicBoolean,ReentrantLock,ConcurrentHashMap,Guava Striped,Redisson

2022-05-07 15:25:59 1077 2

转载 win系统查看端口占用并kill

步骤:1、通过cmd窗口进入dos命令窗口或者win+r快捷键,输入cmd进入dos窗口;2、输入命令:netstat -ano,从中查找你需要关闭的端口号;如果你知道端口号,那你可以直接输入命令:netstat -aon|findstr “7200”,记住pid(进程号),我这里的pid是6764;3、输入命令:taskkill /f /pid 6764,ok,成功杀死7200端口的进程————————————————原文链接:https://blog.csdn.net/fanrenxian

2021-03-18 14:55:51 522

原创 mysql大字段设计的思考

【强制】varchar 是可变长字符串,不预先分配存储空间,长度不要超过 5000,如果存储长度大于此值,定义字段类型为 text,独立出来一张表,用主键来对应,避免影响其它字段索引效率。为什么会大字段会影响其他字段的索引效率?因为大字段导致一行数据占的空间变大,叶子节点的每个page存储的数据行变少,需要查询更多的page,增加磁盘IO次数。...

2021-01-06 11:32:34 645 3

原创 token在前端保存的安全性思考

CSRF和XSSCSRF:用户在A网站登录,未退出A网站的前提下访问B网站,B网站向A网站发起请求,此时浏览器会携带用户在A网站的cookie请求A网站,A网站并不知道是用户的操作还是B网站(危险)的操作。XSS:是向网站 A 注入 JS代码或html脚本等,然后执行 JS 里的代码,篡改网站A的内容或者盗用cookie等。前端可以把token存储在localstorage或者cookie。方案:存cookie比较好。localstorage有xss风险 ,cookie有csrf 和xss风险。

2020-12-15 22:09:13 4410 1

原创 怎么理解text大字段影响其他字段索引效率?

【强制】varchar 是可变长字符串,不预先分配存储空间,长度不要超过 5000,如果存储长度大于此值,定义字段类型为 text,独立出来一张表,用主键来对应,避免影响其它字段索引效率。解析:大字段导致一列数据量太大, InnoDB 每个数据页中存放的行数减少。...

2020-12-01 13:17:40 861

原创 按位运算--位与(&)、位或(|) 和异或(^)及左移(<<)和右移(>>)

按位与运算符(&)按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0参与运算的数以补码方式出现。运算法则: 0&0=0; 0&1=0; 1&0=0; 1&1=1;例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。按位或运算(|)按位或运算符“|

2020-11-24 08:27:42 339

原创 HashMap深度解释推导

1. HashMap泊松分布的解释推导: /** * Ideally, under random hashCodes, the frequency of * nodes in bins follows a Poisson distribution * (http://en.wikipedia.org/wiki/Poisson_distribution) with a * parameter of about 0.5 on average for the def

2020-11-19 13:40:43 4365 10

转载 sleep和wait

**一句话:sleep和wait都会释放cpu,区别在于sleep不释放锁,wait释放锁。 **sleep:​ A线程调用sleep方法不会释放锁,所以其它和A线程一起持有一把锁的A1、A2线程就不会执行,但是另外的线程不需要持有这把锁的线程是可以被cpu执行的,例如主线程,B1、B2线程sleep和wait方法的区别就是sleep不会释放锁,当睡眠的时间到了之后,线程会自动进入可执行状态,等待cpu的执行。wait:​ 而wait方法会释放锁(所以前提就是线程在执行wait方法之前必须要获得

2020-11-13 11:21:38 200

原创 Git本次修改合并到上次提交

1. 命令行操作git commit --amend #会通过core.editor指定的编辑器进行编辑git commit --amend --no-edit #不仅如此命令行,直接提交2. IEDA操作在Commit界面,勾选Amend commit,正常提交即可。

2020-11-05 19:31:49 5703

原创 手动实现redis分布式锁

/** * 模拟多个人同时审核一个章节 */ @GetMapping("/lock") public Result testRedisLock() throws InterruptedException { String key = "abc"; final long EXPIRE = 10, REFRESH_TIME = 8; if (redisUtil.setIfAbsent(EnumUserRedisKey.REDIS_LOCK, k

2020-11-02 10:51:20 157 2

原创 通俗解释Linux文件句柄

现linux通过虚拟文件系统管理各种硬件资源,包括sock资源,例如创建一个file,创建一个socket,然后将file和socket相互之间建立引用,接着将file挂载到文件系统里,并将file放入进程pcb的flie数组的一个槽位,并将槽位对应数组下标返回给用户态,这个数组下标就是文件对应的文件描述符,linux里万物皆文件的概念就是这么来的。所以使用redis、kafka之类的中间件得调大,不然os会报错。...

2020-09-23 14:11:28 486

原创 Git撤销已push和未push的提交

命令:git reset --hard HEAD~HEAD:HEAD是指当前的快照,主要配合reset的--hard,--mixed和--solf三个参数对对本次的修改进行处理。HEAD~1指回退一个快照,可以简写为HEAD~HEAD~2指回退两个快照。HEAD^主要是控制merge之后回退的方向。HEAD~才是回退的步数。三个参数详解:...

2020-09-16 15:06:25 528

原创 秒杀系统核心环节

页面数据静态化,每次请求不必动态加载。静态数据放多级缓存:CDN+Nginx+Redis最终不存的数据才访问到DB

2020-09-14 21:48:38 127 4

原创 Kafka RocketMQ RabbitMQ详细对比

Kafka RockerMQ RabbitMQ详细对比

2020-09-13 15:39:22 339

原创 FileOutputStream和BufferedOutputStream原理

FileOutputStream每次都向内核调一次syscall和write(byte[]),将二进制流写入内核的page cache。不提供flush(),只有close。BufferedxxxStreambuffer缓存区是jvm层面的东西,默认开辟了8kb的数组。每次write先写入缓存区,等这8kb写满了才调用一次内核syscall和write(byte[]),将二进制流写入内核的page cache。提供flush,手动将数据刷入内核。buffer优势:减少了应用程序和内核的IO次数;减少

2020-08-30 20:51:38 1139

原创 MySQL判断时间段是否重合

两种写法。如图,4种重合情况和2种不重合情况。第一种写法:-- 时间段 a,b SELECT * FROM table WHERE (start_time >= a and end_time <= b) -- 被包含了 or (end_time >= a and end_time <=b) or (start_time >= a and start_time <=b) or (start_time <= a and end_time &.

2020-08-28 16:34:20 787

原创 cap分析zk是cp还是ap

看到有文章说zk是cp,也有人说是ap。zk的ap和cp是从不同的角度分析的。从一个读写请求分析,保证了可用性(不用阻塞等待全部follwer同步完成),保证不了数据的一致性,所以是ap。但是从zk架构分析,zk在leader选举期间,会暂停对外提供服务(为啥会暂停,因为zk依赖leader来保证数据一致性),所以丢失了可用性,保证了一致性。再细点话,这个c不是强一致性,而是最终一致性。即上面的写案例,数据最终会同步到一致,只是时间问题。综上,zk广义上来说是cp,狭义上是ap。..

2020-08-24 20:48:38 7121 3

原创 JWT单点登录的三种解决方案

看过不少JWT和单点登录系统的文章,大部分说的比较片面。 这里就根据自己的实际开发经验谈一下我的理解。 可以总结为以下三种方案:三种方案:1. 纯Jwt2. Jwt + 认证中心Redis3. Jwt + 认证中心Redis + 多系统Redis1. 纯Jwt 方案 1. 用户去认证中心登录,认证中心生成jwt,返回给客户端。 2. 客户端携带jwt请求多个系统 3. 每个系统各自解析jwt,取出用户信息。能解析成功就说明jwt有效.

2020-07-16 12:46:41 3357 1

转载 @EqualsAndHashCode()注解

官方文档:@EqualsAndHashCode原文中提到的大致有以下几点:此注解会生成equals(Object other) 和 hashCode()方法。它默认使用非静态,非瞬态的属性可通过参数exclude排除一些属性可通过参数of指定仅使用哪些属性它默认仅使用该类中定义的属性且不调用父类的方法可通过callSuper=true解决上一点问题。让其生成的方法中调用父类的方法。另:@Data相当于@Getter @Setter @RequiredArgsCon

2020-07-14 18:03:51 2778

原创 Fastjson序列化定制+空值、Null、空数组、List不序列化

虽然现在不推荐用FastJson了,但是今天遇到这个问题了还是说一下吧。同事求助我一个问题:第三方jar包里的一个对象,有些类型为List的属性,值为空list,不是null。使用JSON.toJSONString()方法,得到的json字符串这些属性的值为[]。序列化时怎么才能把这些类型为List的属性忽略掉?自定义过滤器可以自由实现你想要的规则////老的写法 PropertyFilter f = new PropertyFilter() { @Ov

2020-07-14 14:20:56 3018

转载 PageHelper基于ThreadLocal的实现原理分析

你或许用过mybatis,但你未必用过github上的一个基于mybatis的分页插件PageHelper。项目地址:https://github.com/pagehelper/Mybatis-PageHelper小用了一下,感觉还是蛮不错的。使用MyBatis分页插件PageHelper非常简单,代码如下://使用方法可参考https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.mdPageHe.

2020-07-13 19:33:54 286

原创 iOS Universal Links 唤起APP

后台配置:1.创建apple-app-site-association文件2.nginx配置详细教程:https://www.jianshu.com/p/f1a1e1833eec

2020-06-12 18:33:46 219

原创 Java解决跨域问题

只需服务器端拦截器设置如下即可:HttpServletResponse response = ctx.getResponse(); response.setHeader("Access-Control-Allow-Origin", origin); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Allow-H

2020-05-23 22:59:49 299

转载 本地项目关联远程Git仓库

本地项目关联远程Git仓库完全空白项目关联有文件的项目关联设置仓库级别的用户名和邮箱完全空白项目关联首先讲一种简单的场景,如果我们新建项目的时候没有生成任何的初始化文件,我们需要做的就是将本地的项目和空白的仓库关联起来,这种情况下的命令是:#git初始化git init#设置remote地址git remote add 地址#将全部文件加入git版本管理 .的意思是将当前文件夹下的全部文件放到版本管理中git add .#提交文件 使用-m 编写注释git commit -m "注释"

2020-05-23 19:22:46 395

原创 快速解决idea快捷键被占用

链接:https://pan.baidu.com/s/1vS99vVNwKlHx2ADF1tNd0Q提取码:e298打开软件,按出被占用的快捷键,程序会弹出热键被占用的进程。打开对应的软件,取消掉快捷键。比如我的Ctrl+Alt+O 被QQ占用:

2020-05-22 12:34:47 2249 1

原创 jps不显示Java进程

使用jps命令无法查看Java进程首先检查以下两点:1.权限问题:检查用户是否对/tmp/hsperfdata_userName/{pid}文件或目录有足够的读写权限。2.检查jvm参数-Djava.io.tmpdir在博文https://www.iteye.com/blog/trinea-1196400的启发下,推测是文件残留的问题。所以,删除/tmp/hsperfdata_userName/{pid},重启Tomcat,ok!...

2020-05-19 13:36:40 1649

FindGlobalHotkey.zip

可以查看热键/快捷键被占用的进程。快速解决被占用的烦恼。 使用方法:打开程序-按出被占用的快捷键-程序会显示进程的路径。

2020-05-22

空空如也

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

TA关注的人

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