成都彭于晏的博客

虽然我不是彭于晏,但是我会敲bug,嘤嘤嘤~
私信 关注
负债程序猿
码龄5年

希望文中举的例能帮到你们理解更多知识点吧

  • 111,816
    被访问量
  • 98
    原创文章
  • 22,300
    作者排名
  • 1,308
    粉丝数量
  • 毕业院校 四川理工学院
  • 目前就职 京东集团
  • 于 2016-01-11 加入CSDN
获得成就
  • 获得884次点赞
  • 内容获得400次评论
  • 获得3,529次收藏
荣誉勋章
兴趣领域
  • #后端
    #MySQL#分布式#Linux#Java#Spring Boot
TA的专栏
  • java必备知识点
    30篇
  • 内推岗位
    1篇
  • mysql
    5篇
  • B+tree
    1篇
  • 算法
    16篇
  • 日常
    15篇
  • Linux
    4篇
  • redis
    5篇
  • 分布式
    4篇
  • leetcode
    3篇
  • rabbitMQ
    1篇
  • 数据库
    4篇
  • 并发编程
    3篇
  • postgresql
    2篇
  • 模糊查询
    3篇
  • 数据处理
    1篇
  • axios
    1篇
  • springboot
    1篇
  • 跨域
    1篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

mysql如何实现可重复读

字有点多,但是保证你看完后对可重复读有新的理解
原创
216阅读
0评论
2点赞
发布博客于 22 天前

mysql执行计划explain属性解析

所谓执行计划就是看sql执行情况,有没有走索引啊之类的很简单,在你的select语句前面加个EXPLAIN就行比如我的查询语句是SELECT * FROM pool WHERE operating_status = “OFFLINE”那他的执行计划就这么看EXPLAIN SELECT * FROM pool WHERE operating_status = "OFFLINE"反馈结果:从这个反馈就能看出你这个sql的执行情况字段含义:id:如果是子查询,表示各个子查询的顺序id相同
原创
1582阅读
6评论
1点赞
发布博客于 27 天前

for( ; ; )和while(true)的区别

喜欢看源码的同学可能都会发现,很多组件的作者在做死循环时,都喜欢用for( ; ; ),while(true)或者while(1)也能实现死循环,为啥大佬们都用for( ; ; )呢我们看下这两者的字节码public class ForTest { public static void main(String[] args) { for (;;){ System.out.println("666"); } }}public
原创
168阅读
2评论
4点赞
发布博客于 28 天前

linux查看java相关进程

用psps -ef | grep java也可以用jps显示pid和应用类型:jps显示应用名称:jps -l关闭进程kill pid,如停止demo-0.0.1-SNAPSHOT.JAR,kill 1336如果杀不掉就加个-9,kill -9 1336
原创
49阅读
0评论
1点赞
发布博客于 28 天前

jar包的几种启动方式

方式一java -jar demo.jar最基本的一种,启动后只要ctrl+c终止,服务就停了,这种基本不用方式二java -jar demo.jar &方式一的升级版,&表示后台运行,区别在于这种方式启动的服务允许你ctrl+c,服务会在后台继续运行,但是这种是伪后台,当你关闭xshell窗口或者断开ssh连接后,服务立即停止方式三nohup java -jar demo.jar >/dev/null &这种才是我们最常用的启动方式,即使你关闭ssh连接
原创
85阅读
0评论
1点赞
发布博客于 28 天前

idea新建项目没有Spring Initializr

安装个插件就行了安装完了重启idea这个就是Spring Initializr,跟以前的图标不一样,功能一样一样的
原创
26阅读
0评论
1点赞
发布博客于 29 天前

linux安装jdk和配置环境变量

jdk都不会装,好意思说你搞java?
原创
70阅读
2评论
2点赞
发布博客于 29 天前

mybatis的association标签传多个参数

mybatis联表查询的时候我们会用到association标签一个参数的时候:<association column="id" property="User" select="getUser"></association><select id="getUser" resultMap="UserMap" parameterType="java.lang.String"> SELECT * FROM user_table WHERE id = #{id}&
原创
164阅读
0评论
2点赞
发布博客于 1 月前

@JsonInclude注解增加自定义校验规则

可以更灵活的增加想要的校验规则
原创
38阅读
0评论
1点赞
发布博客于 1 月前

mysql获取当前时间

mysql获取当前时间的两种方式
原创
89阅读
1评论
1点赞
发布博客于 1 月前

大白话tcp三次握手、四次挥手

啊哈,你也是来拉屎的吗
原创
847阅读
0评论
4点赞
发布博客于 1 月前

Java实现二分查找

将数组二分,用数组中位数和x对比,如果中位数大于x,则去数组的左半边找,反之去右半边;
原创
76阅读
1评论
1点赞
发布博客于 1 月前

二叉树的三种遍历方式,含demo(递归与非递归)

手撕二叉树,装逼神器,你值得拥有!!!
原创
87阅读
0评论
2点赞
发布博客于 1 月前

用Java实现一个简单二叉树

手撕二叉树,装逼神器,你值得拥有!!!
原创
63阅读
0评论
2点赞
发布博客于 1 月前

idea-always-eval.jar

idea的一个插件
jar
发布资源于 1 月前

八旬老人彻夜难眠,竟是为了学会二叉树

手撕二叉树,装逼神器,你值得拥有!!!
原创
276阅读
3评论
3点赞
发布博客于 1 月前

idea查看接口所有实现类

打开你想查看的接口:右键 - >Diagrams;选中接口,右键,Show Implementations
原创
105阅读
0评论
2点赞
发布博客于 1 月前

美团二面 - 求数的平方根,不使用Math.sqrt

给一个整数,求它的平方根,不能使用java自带的Math.sqrt();
原创
453阅读
5评论
4点赞
发布博客于 1 月前

Java求数的平方根,不使用Math.sqrt

题目,给一个整数,求它的平方根,不能使用java自带的Math.sqrt()
原创
354阅读
6评论
1点赞
发布博客于 1 月前

分布式事务解决方案总结(精心整理)

一、两阶段提交(2PC);二、补偿事务(TCC);三、本地消息表(异步确保);四、MQ 事务消息;
转载
276阅读
1评论
2点赞
发布博客于 1 月前

HashMap遍历所有的key和value

四种方式遍历hashmap,面试官都馋哭了
原创
161阅读
0评论
2点赞
发布博客于 1 月前

Java字符串压缩(两种压缩方式)

字符串的两种压缩方式,统计出现次数和只统计相邻元素出现次数
原创
604阅读
2评论
2点赞
发布博客于 1 月前

百词斩算法面试题--字符串压缩

输入aabcccccaaa,输出a2b1c5a3
原创
160阅读
1评论
1点赞
发布博客于 1 月前

logger日志输出占位符{}

原来是这样用的呀
原创
115阅读
0评论
1点赞
发布博客于 1 月前

csdn写文章如何修改字体颜色

你喜欢粉色还是蓝色还是你喜欢大的这么大够不够<font color="pink" size="3">你喜欢粉色</font><font color="blue" size="3">还是蓝色</font><font color="red" size="5">还是你喜欢大的</font><font color="red" size="7">这么大够不够</font>...
原创
109阅读
1评论
2点赞
发布博客于 1 月前

八旬老人废寝忘食,只为学会Java快速排序,今天他终于学会了

“妈妈,我终于学会快速排序啦”,“儿子真棒”。
原创
174阅读
1评论
6点赞
发布博客于 1 月前

用java实现一个简单队列

本文demo基于数组实现,主要用来帮助理解队列先进先出的特点public class MyArrayQueue { //声明一个数组,int、Integer都行,这里用Integer是因为不想看到int的默认值0 private Integer[] arr; //声明一个变量index来记录当前下标 private int index = 0; public MyArrayQueue(Integer size) { //实例化数组时的容量
原创
182阅读
5评论
3点赞
发布博客于 1 月前

nginx部署多个静态页面

首先把项目上传到服务器root目录下(登入服务器默认就是root目录)dist文件夹结构weddingInvitations-master文件夹结构再来到你的nginx目录:在conf目录下的nginx.conf文件夹,按照下图配置注意五角星处的区别,一个是root一个是alias...
原创
235阅读
1评论
5点赞
发布博客于 2 月前

java字符串反转(7种方法)

1、用stringBuffer或者stringBuilder自带的reverse方法 public static String reverseTestOne(String s) { return new StringBuffer(s).reverse().toString(); }2、将字符串拆分为char数组 public static String reverseTestTwo(String s) { char[] charArray = s.
原创
288阅读
2评论
5点赞
发布博客于 2 月前

leetcode题解 - 回文数

题目描述题解class Solution { public boolean isPalindrome(int x) { //利用sb的reverse方法 return new StringBuffer(String.valueOf(x)).reverse().toString().equals(String.valueOf(x)); }}慢是慢了点,但又不是不能用!!!...
原创
38阅读
0评论
2点赞
发布博客于 2 月前

java数字与字符串互转

数字转字符串int i = 123;String s = String.valueOf(i);字符串转数字String str = "123";int i = Integer.parseInt(str);溺水三千,我只取一瓢;方法很多,我只举一种。
原创
30阅读
0评论
1点赞
发布博客于 2 月前

java数字转字符串

数字转字符串int i = 123;String s = String.valueOf(i);字符串转数字String str = "123";int i = Integer.parseInt(str);溺水三千,我只取一瓢;方法很多,我只举一种。
原创
149阅读
0评论
4点赞
发布博客于 2 月前

java字符串转数字

字符串转数字String str = "123";int i = Integer.parseInt(str);数字转字符串int i = 123;String s = String.valueOf(i);溺水三千,我只取一瓢;方法很多,我只举一种
原创
53阅读
0评论
2点赞
发布博客于 2 月前

leetcode题解 - 两数之和

题目描述题解class Solution { public int[] twoSum(int[] nums, int target) { int[] ints = new int[2]; for(int i = 0;i<nums.length-1;i++){ for(int j = 1;j<nums.length;j++){ //题目中说了数组中元素不能使用两遍 if(
原创
28阅读
0评论
2点赞
发布博客于 2 月前

java中数组的定义与使用

概念数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式,是用于储存多个相同类型数据的集合。通过使用数组,可以在很大程度上缩短和简化程序代码,从而提高应用程序的效率。使用int[] arrone = new int[3];//开辟长度为3的数组空间int[] arrtwo = new int[]{1,2,3};//arrtwo[0]=1,arrtwo[1]=2,arrtwo[2]=3int[] arrthree = {1,2,3};//还能这样搞喔二维数组
原创
23阅读
0评论
1点赞
发布博客于 2 月前

leetcode题解 - 转置矩阵

题目描述解题class Solution { public int[][] transpose(int[][] matrix) { //新建二维数组用来存放结果,注意顺序 int[][] ints = new int[matrix[0].length][matrix.length]; //两层循环,第一层遍历原数组内每个数组 for(int i = 0 ; i < matrix.length ; i++){ //
原创
27阅读
0评论
2点赞
发布博客于 2 月前

java中接口和抽象类的区别(保证你一看就懂)

先单独说一点,让你可以在朋友面前装逼:接口也能被继承,只不过是被接口继承对比:1、都能包含抽象的方法,这些抽象的方法用于描述类具备的功能,不提供具体的实现(jdk1.8允许接口有一个default的实现方法)2、接口是对事物行为的抽象,而抽象类是对事务本质的抽象;3、接口中的变量必须给出初始值,抽象类可以不给;4、一个类只能继承一个抽象类,但可以实现多个接口;5、抽象类中可以写非抽象的方法,从而避免在子类中重复书写它们,这样可以提高代码的复用性,这是抽象类的优势;接口中只能有抽象的方法;针
原创
1852阅读
20评论
26点赞
发布博客于 2 月前

hashCode和equals方法的联系

java规定:如果两个对象的hashCode()相等,那么他们的equals()不一定相等。如果两个对象的equals()相等,那么他们的hashCode()必定相等。对hash算法不太清楚的同学必须看看这篇文章,我以前花了整整一天时间写的,举了很多例,真正搞懂hashCode和hash算法...
原创
68阅读
0评论
1点赞
发布博客于 2 月前

get请求和post请求的区别

它们的本质都是 TCP 连接,并无区别。下面的答案纯粹是为了应付面试官。真正导致产生区别的原因是 HTTP 的规定以及浏览器 / 服务器的限制,这才导致它们在应用过程中可能会有所不同。GET在浏览器回退时是无害的,而POST会再次提交请求。GET产生的URL地址可以被Bookmark,而POST不可以。GET请求会被浏览器主动cache,而POST不会,除非手动设置。GET请求只能进行url编码,而POST支持多种编码方式。GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保
原创
88阅读
1评论
1点赞
发布博客于 2 月前

成员变量和方法的区别?

成员变量有两种:实例变量类变量(也称静态变量,静态域)成员方法有三种:实例方法类方法(也称静态方法)构造方法(无返回值,方法名和类名一致)public class Person { public static final int defaultAge = 18;//常量,类编译时放到常量池 public static int age = 18;//类变量,在类加载的准备阶段,分配到方法区 private String like;//实例变量,在类被实例化时,分配
原创
115阅读
0评论
1点赞
发布博客于 2 月前

大白话工厂模式及使用场景

设计模式共23种,按功能可以分为创建型、结构型、行为型,工厂模式属于创建型模式,主要用于创建对象;比方说造一辆车:不使用工厂模式我需要造宝马的时候,就写一个造宝马的方法,需要造奔驰的时候就写一个造奔驰的方法,缺陷很明显,后期不易维护、代码冗余、不符合面向对象的思想;使用工厂模式我只需要写一个造汽车的方法,在内部做一些判断,如果参数是宝马我就造宝马,如果是奔驰我就造奔驰,这样后期如果造汽车,只需要调用它的方法传入参数就行;工厂模式能细分为简单工厂,工厂方法和抽象工厂三种常见的有简单工厂和
原创
122阅读
0评论
1点赞
发布博客于 2 月前

什么是redis缓存穿透、缓存击穿、缓存雪崩?如何解决?

这些就是概念性的东西了,记住区别吧缓存穿透:请求数据库中根本就不存在的数据,既然数据库中都没有,缓存中更没有,导致每次请求直接怼到数据库;缓存雪崩:缓存大面积失效;缓存击穿:请求了很多缓存中没有但是数据库中真实存在的数据,一般是缓存过期导致,也导致请求直接怼到数据库;从事态严重性来讲:穿透 > 雪崩 > 击穿解决办法:缓存穿透:最简单的就是利用布隆过滤器过滤非法key,我写了个 demo来分析具体原理,请移步布隆过滤器原理缓存雪崩:设置key过期时间的时候加上一个随机数,关键
原创
139阅读
4评论
5点赞
发布博客于 2 月前

京东二面:Redis如何避免内存耗尽

redis的数据都是存放在内存中,而对于服务器来说内存是很有限的,那我们应该如何避免内存耗尽呢?一、内存回收在设置redis键值时务必设置过期时间,除开一些需要持久化保存key的场景;expire key time(以秒为单位)//这是最常用的方式setex(String key, int seconds, String value)//字符串独有的方式除了字符串自己独有设置过期时间的方法外,其他方法都需要依靠expire方法来设置时间二、3种过期策略定时删除:为每个键设置一个定时器,一
原创
132阅读
0评论
4点赞
发布博客于 2 月前

西红柿炒鸡蛋教程(从入门到精通)

没错,这篇文章跟开发没鸡毛关系,不知道写什么,昨晚炒的西红柿炒鸡蛋很好吃,干了两碗饭,写个教程记录下;初始化一、买菜1、购买环境:基于SC(steelConcrete钢筋混泥土)结构搭建的京东便利店,因为离家近,本端到对端落地距离只有约3583步;2、菜品对象:这方面我选择到了egg * 3、西红柿 * 1、bigSuan * 1、smallCong * 1,菜品对象集成过程中发现了沙糖桔,顺带买了一包;3、账单结算:共计46.68元,采用支付宝面向商家端二维码付款;至此,菜品进入可运输态;二
原创
179阅读
0评论
4点赞
发布博客于 2 月前

Could not write JSON: (was java.lang.NullPointerException); nested exception is...不出意外就是这个原因

出现这个报错百分之80都是实体类有问题,检查下实体类的get/set方法,有没有空指针我这里是这样的,get方法忘了空判断public Date getLastUpdate() { return amphoraHealth.getLastUpdate();}加个判断就行啦public Date getLastUpdate() { return amphoraHealth == null ? null : amphoraHealth.getLastUpdate();}...
原创
56阅读
0评论
3点赞
发布博客于 2 月前

乐观锁与悲观锁总结

什么是悲观锁与乐观锁乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人。悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。
转载
976阅读
0评论
6点赞
发布博客于 2 月前

什么是回表查询

前置知识点索引数据结构mysql主要有两大索引:B-tree索引和hash索引,注意一个误区,这个不叫B减树,B树就是B树,B+树就是B+树,没有所谓的B减树,那个 - 是连接符号索引实现hash索引的底层就是一张哈希表,根据key的hash值查找值,因此无论有多少条数据,查找的时间复杂度都为O(1),但是如果有排序查询,时间复杂度会从O(1)退化到O(n);而树形结构永远都是O(log(n));索引类型mysql的所有分为聚集索引和非聚集索引mysql引擎MyISAM:B+Tree叶节
原创
222阅读
0评论
2点赞
发布博客于 2 月前

mysql索引总结

索引数据结构mysql主要有两大索引:B-tree索引和hash索引,注意一个误区,这个不叫B减树,B树就是B树,B+树就是B+树,没有所谓的B减树,那个 - 是连接符号索引实现hash索引的底层就是一张哈希表,根据key的hash值查找值,因此无论有多少条数据,查找的时间复杂度都为O(1),但是如果有排序查询,时间复杂度会从O(1)退化到O(n);而树形结构永远都是O(log(n));索引类型mysql的所有分为聚集索引和非聚集索引mysql引擎MyISAM:B+Tree叶节点存放的是数
原创
353阅读
2评论
5点赞
发布博客于 2 月前

不借助第三变量实现两数交换

基操两数交换最简单最容易理解的就是借助第三变量 public void swapOne(){ int a = 4; int b = 5; int c = a; a = b; b = c; System.out.println("a:"+a); //a:5 System.out.println("b:"+b); //a:4 }进阶利用数学计算 public void
原创
141阅读
0评论
5点赞
发布博客于 2 月前

搞清楚java中的PO、VO、DAO、BO、DTO、POJO

1、PO :(persistant object ),持久对象与数据库中的表相映射的java对象2、VO :(value object) ,值对象通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要。PO只能用在数据层,VO用在商业逻辑层和表示层。各层操作属于该层自己的数据对象,这样就可以降低各层之间的耦合,便于以后系统的维护和扩展。3、DAO :(Data Access Objects) ,数据访问对象接口DAO是Dat
原创
157阅读
2评论
2点赞
发布博客于 2 月前

idea三款装逼插件

1、activate-power-mode效果:敲代码的同时,会有很多发散的小圆点,你还可以开启屏幕震动,敲一下屏幕震一下,狂拽酷炫吊炸天2、NyanProgressBar效果:进度条会变成一个彩虹小猫咪3、Background Image Plus效果:可以设置idea背景图片,说实话我还没见过idea有我好看的~除了上述这些,还有好些插件,博主idea主题已打包,整体效果如上图,包括字体、颜色、间距等等,之前闲着没事调了老半天,需要的加博主好友要,暗号: chuanAhaojig
原创
282阅读
0评论
2点赞
发布博客于 2 月前

京东各大城市内推岗位(2021.2.7更)

北京:上海:广东:四川:重庆:暂无杭州:暂无陕西:湖北:湖南:暂无岗位每周更新一次因为内推系统只能以省份维度查看,想了解具体城市和岗位详情的请加本人wx:chuanAhaojige8...
原创
451阅读
1评论
3点赞
发布博客于 2 月前

java线程间通讯的几种方式

并发编程中,我们可能会遇到这样一个场景A、B两个线程并行,但是我希望保证B线程在A线程执行完了后再执行这个时候就需要线程间进行通讯A执行完了后对B说一声,喂B,我执行完了来康康用Java怎么实现1、基于synchronized2、基于reentrantLock3、基于volatile4、基于countDownLatch我目前就知道这四种1、synchronized+wait() 和 notify()wait() 和 notify()都是Object类的通讯方法,注意一点,wai
原创
2530阅读
13评论
12点赞
发布博客于 2 月前

线程池实现原理吐血总结

要理解实现原理,必须把线程池的几个参数彻底搞懂,不要死记硬背线程池参数1、corePoolSize(必填):核心线程数。2、maximumPoolSize(必填):最大线程数。3、keepAliveTime(必填):线程空闲时长。如果超过该时长,非核心线程就会被回收。4、unit(必填):指定keepAliveTime的时间单位。常用的有:TimeUnit.MILLISECONDS(毫秒)、TimeUnit.SECONDS(秒)、TimeUnit.MINUTES(分)。5、workQueue(必
原创
1503阅读
6评论
9点赞
发布博客于 2 月前

我凭ThreadLocal唬住了京东面试官

关于ThreadLocal,网络上的文章不计其数,一开始我也是无从下手,费了好大劲才搞懂,现在把自己理解的ThreadLocal记录在博客,以帮助到更多同学;我理解的ThreadLocalThreadLocal中文名叫线程变量,它底层维护了一个map,key就是当前的ThreadLocal对象(可以理解为当前执行该段代码的线程),value就是你set的值,这个map保证了各个线程的数据互不干扰; //这是ThreadLocal类的set方法源码 public void set(T val
原创
1944阅读
13评论
11点赞
发布博客于 2 月前

windows解决端口被占用

先打开终端,cmd或者powershell,我这里用的powershell先看下谁占用了我们的端口,比如端口是8088netstat -ano|findstr "8088"最后面那栏的18940就是任务id查看任务id对应的任务tasklist|findstr "18940" 看哇,是java.exe占用了端口关闭任务taskkill /f /t /im "java.exe"哦啦...
原创
544阅读
2评论
1点赞
发布博客于 2 月前

2021 Java知识点精心整理(持续更新)

我不是针对谁,我是说其它面试题都是辣鸡
原创
25459阅读
105评论
363点赞
发布博客于 2 月前

synchronized底层实现原理(保证看懂)

首先那些说看过synchronized源码的基本都是大聪明,synchronized根本点不进去,想弄懂它的实现原理,我们只能通过看编译好的字节码文件整个测试类public class SynchronizedTest { public void get() { synchronized (this) { System.out.println("小张你好鸭!"); } }}字节码文件(怎么看?? idea => view
原创
1739阅读
7评论
5点赞
发布博客于 2 月前

Java的.class文件剖析

测试Java类public class TestDemo { public static final String SUCCESS = "success"; public static void main(String[] args) { System.out.println("main"); } private String printText(String str) { System.out.println(str); r
转载
797阅读
3评论
1点赞
发布博客于 2 月前

使用valgrind来检查内存泄漏

之前写代码,有少量的内存泄露,平时没发现,长时间运行才发现问题。为以后更方便的检测内存泄漏问题,于是学习使用了valgrind来对内存泄漏进行检测。valgrind不止可以检测内存泄露,但目前只使用这一功能。1.安装下载安装文件下载链接下载完成后解压,终端进入解压后的文件夹,依次输入./configuremakemake install如遇提示权限不够,make前加sudo如果想验证是否安装完成,在终端输入valgrind --version,若安装成功,会输出相应版本,如图2.检测
转载
1457阅读
0评论
8点赞
发布博客于 2 月前

信不信十分钟让你彻底搞懂java反射

自从搞懂java反射,我是越来越觉得这破公司容不下我了
原创
5793阅读
40评论
85点赞
发布博客于 2 月前

日常编码必备idea快捷键

提高效率型查找型编译运行打断点
原创
576阅读
0评论
4点赞
发布博客于 2 月前

如何解决redis并发竞争key

先说下为什么redis会存在并发问题,redis不是单线程吗,不管你多少个请求过来,我就只有一个线程,讲道理永远不会出现并发问题;但上述情况仅适用于单机系统,如果是多个系统并发操作redis,就有可能造成数据丢失、数据覆盖等并发问题;打个比方,有ABC三个系统A系统要把变量a赋值为1;B系统要把变量a赋值为2;C系统要把变量a赋值为3;本来我们期望顺序执行A > B > C后,a的值为3,但是如果并发太大,导致A晚了一步,让BC先执行了,最后a的值就成1了;解决方案1、分布式锁+
原创
584阅读
0评论
2点赞
发布博客于 2 月前

redis五大数据结构和使用场景

文中操作redis的方法仅作为理解redis数据类型举例,实际上每个数据类型都还有很多很多其它方法,具体的本文不展开叙述
原创
3219阅读
22评论
19点赞
发布博客于 2 月前

搭建ELK日志分析系统

下载ELK地址:https://www.elastic.co/downloads命令:wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.3.tar.gz解压:tar -zxvf elasticsearch-6.4.3.tar.gz有的需要使用unzip解压,需要使用: yum install unzip 下载安装unzip工具elasticsearch配置启动安装jdk1.8:yum ins
原创
858阅读
0评论
2点赞
发布博客于 3 月前

真正搞懂hashCode和hash算法

自从搞懂hash,妈妈再也不担心我找不到工作啦
原创
9106阅读
63评论
146点赞
发布博客于 3 月前

idea pom文件全部爆红

百分之90的可能都是maven的setting文件路径不对在导入别人项目的时候最容易出现这个问题解决办法ctrl+alt+s打开设置,或者idea左上角file —> setting1、选择maven;2、选择你的maven安装路径,如果下面出现version才说明路径正确;3、选择你的maven安装目录下conf文件夹中的setting文件(setting文件里面需要设置两个东西,一个是本地仓库路径,第二个是镜像仓库地址,详情看下文中的setting配置),记得打上后面的勾;4、你
原创
1188阅读
1评论
1点赞
发布博客于 3 月前

idea java类文件左下角出现红色的J标识(已解决)

如下图所示,类文件左下角有个J,项目也不报错解决办法运行按钮左边那个下拉框有个Edit Configurations…最后apply - ok,等待一会儿就ok啦!
原创
1019阅读
1评论
2点赞
发布博客于 3 月前

什么是对象存储

对象存储概述什么是对象存储(OSD)?存储局域网(SAN)和网络附加存储(NAS)是目前两种主流网络存储架构,而对象存储(Object-based Storage)是一种新的网络存储架构,基于对象存储技术的设备就是对象存储设备(Object-based Storage Device)简称OSD。1999年成立的全球网络存储工业协会(SNIA)的对象存储设备工作组发布了ANSI的X3T10标准。总体上来讲,对象存储综合了NAS和SAN的优点,同时具有SAN的高速直接访问和NAS的分布式数据共享等优势,提供
转载
706阅读
0评论
1点赞
发布博客于 3 月前

Linux故障排查(亲身经历)

首先使用top命令查看cpu使用情况属性释义:PID - 进程标示号USER - 进程所有者PR - 进程优先级NI - 进程优先级别数值VIRT - 进程占用的虚拟内存值RES - 进程占用的物理内存值SHR - 进程使用的共享内存值S - 进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死%CPU - 进程占用的CPU使用率%MEM - 进程占用的物理内存百分比TIME+ - 进程启动后占用的总的CPU时间Command - 进程启动的启动命令名称通过%cpu列就能
原创
668阅读
1评论
1点赞
发布博客于 3 月前

数据库设计三范式(理解只需五分钟)

第一范式属性(字段)的原子性约束,要求属性具有原子性,不可再分割;比如个人信息,个人信息不能作为一个字段,它可以再分为姓名、name、age等;第二范式记录的惟一性约束,要求记录有惟一标识,每条记录需要有一个属性来做为实体的唯一标识;第三范式字段冗余性的约束,即任何字段不能由其他字段派生出来;主键没有直接关系的数据列必须消除,消除的办法就是再创建一个表来存放他们,当然外键除外;误区并不是非得严格按照三范式来设计,好的数据库设计一定不是这样的,而是根据实际情况柔性处理比如公司资产
原创
680阅读
0评论
2点赞
发布博客于 3 月前

5分钟搞懂io、nio、bio

i/o即input/output,就是指读写操作面试官经常问io和nio的区别,如果把io和nio放一起比较的话,那这里的io其实可以理解为bio,即blocking-io:bio:同步阻塞bio是java传统的io模型,他是同步阻塞io,一个线程触发io操作后,必须等待这个io操作执行完成,期间不能去做其他事情;nio:同步非阻塞nio(non-blocking-io)是同步非阻塞io,一个线程触发io操作后它可以立即返回,但是他需要不断地轮询去获取返回结果;aio:异步非阻塞ai
原创
750阅读
2评论
2点赞
发布博客于 3 月前

io和nio的区别

i/o即input/output,就是指读写操作面试官经常问io和nio的区别,如果把io和nio放一起比较的话,那这里的io可以理解为bio,即blocking-io:bio:同步阻塞bio是java传统的io模型,他是同步阻塞io,一个线程触发io操作后,必须等待这个io操作执行完成,期间不能去做其他事情;nio:同步非阻塞nio(non-blocking-io)是同步非阻塞io,一个线程触发io操作后它可以立即返回,但是他需要不断地轮询去获取返回结果;aio:异步非阻塞aio(
原创
643阅读
0评论
0点赞
发布博客于 3 月前

java各种io的区别

首先说io这个概念,i/o即input/output,就是指读写操作,如果把io和nio放一起比较的话,那这里的io可以理解为bio,即blocking-io:bio:同步阻塞bio是java传统的io模型,他是同步阻塞io,一个线程触发io操作后,必须等待这个io操作执行完成,期间不能去做其他事情;nio:同步非阻塞nio(non-blocking-io)是同步非阻塞io,一个线程触发io操作后它可以立即返回,但是他需要不断地轮询去获取返回结果;aio:异步非阻塞aio(Asynch
原创
643阅读
0评论
0点赞
发布博客于 3 月前

spring security的坑

security配置文件里面增加放行域名的时候要注意security底层是根据字符串对比来判断两个域名是否为同一域名的所以localhost和127.0.0.1不一样不一样不一样不一样嘤嘤嘤~
原创
657阅读
2评论
0点赞
发布博客于 3 月前

spring security原理

总配置类首先security有一个总配置类,它需要继承WebSecurityConfigurerAdapter,并加上@Configuration和@EnableWebSecurity注解,重写它的两个方法:configure(HttpSecurity http):主要配置configure(WebSecurity web):对静态资源放行前者方法里里面需要配置很多东西,有些配置可以单独new个配置类,也可以直接用security自带的:放行接口:哪些接口不需要鉴权权限认证:需要有一个权限认
原创
629阅读
0评论
1点赞
发布博客于 3 月前

linux系统cpu占用过高故障排查

首先使用top命令查看cpu使用情况属性释义:PID - 进程标示号USER - 进程所有者PR - 进程优先级NI - 进程优先级别数值VIRT - 进程占用的虚拟内存值RES - 进程占用的物理内存值SHR - 进程使用的共享内存值S - 进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死%CPU - 进程占用的CPU使用率%MEM - 进程占用的物理内存百分比TIME+ - 进程启动后占用的总的CPU时间Command - 进程启动的启动命令名称通过%cpu列就能
原创
763阅读
1评论
1点赞
发布博客于 3 月前

linux查看内存大小

查看服务器内存:grep MemTotal /proc/meminfoMemTotal: 264025916 kB ##264G
原创
656阅读
0评论
0点赞
发布博客于 3 月前

linux查看服务器配置

查看cpu详细信息:lscpuroot@node1:~# lscpuArchitecture: x86_64 ##cpu架构CPU op-mode(s): 32-bit, 64-bitByte Order: Little EndianCPU(s): 56 ##cpu核心数On-line CPU(s) list: 0-55Thread(s) per core: 2 ##每个核心支持的线程数Core(s) pe
原创
646阅读
0评论
0点赞
发布博客于 3 月前

Spring Cloud总结

先搞清一个概念,spring cloud并不是一种技术,它是一种设计思想的落地方案;spring cloud组件注册中心:zookeeper、eureka、nacos服务调用/负载均衡:ribbon、nginx、feign、openFeign服务熔断/降级:Hystrix(Netflix)、Sentinel(阿里中间件团队)网关:zuul、gateway配置中心:spring cloud config+spring cloud bus怎么使用基本所有的组件使用方法都是基于注解,开启+使
原创
726阅读
0评论
1点赞
发布博客于 3 月前

Spring Cloud 从入门到精通

先搞清一个概念,spring cloud并不是一种技术,它是一种设计思想的落地方案;spring cloud组件注册中心:zookeeper、eureka、nacos服务调用/负载均衡:ribbon、nginx、feign、openFeign服务熔断/降级:Hystrix(Netflix)、Sentinel(阿里中间件团队)网关:zuul、gateway配置中心:spring cloud config+spring cloud bus怎么使用基本所有的组件使用方法都是基于注解,开启+使
原创
681阅读
0评论
1点赞
发布博客于 3 月前

什么是循环依赖

什么是循环依赖先看个demo@Datapublic class A{ private B b;}public class B{ private A a;}当你new了一个Aspring在实例化A的时候发现依赖B这时候spring就会先去实例化B然后又发现B依赖了Aspring又去实例化A。。。。。。由此导致无限循环如何解决首先搞懂一个概念,解决循环依赖并不是靠我们,spring会帮我们解决但是!!!记住一点,很重要spring只能通过提前暴露bean来解决set
原创
660阅读
0评论
1点赞
发布博客于 3 月前

spring如何解决循环依赖(大白话)

什么是循环依赖看这两个demo@Datapublic class A{ private B b;}public class B{ private A a;}当你new了一个Aspring在实例化A的时候发现依赖B这时候spring就会先去实例化B然后又发现B依赖了Aspring又去实例化A。。。。。。由此导致无限循环如何解决首先搞懂一个概念,解决循环依赖并不是靠我们,spring会帮我们解决但是!!!记住一点,很重要spring只能通过提前暴露bean来解决se
原创
1333阅读
3评论
2点赞
发布博客于 3 月前

String str = new String(“abc“)到底new了几个对象(再问自杀)

我就不墨迹了,你只需要看下面一句话,希望你看完记住一个或者两个1、如果常量池里面没有“abc”这个字符串,那虚拟机就会在堆内存中new出一个String对象,还会在常量池中new一个abc字符串对象;2、如果常量池中已经有"abc"这个字符串,也就是说你在前面已经new过一个值为“abc”的字符串,那虚拟机就只会在堆内存中new一个String对象,并将常量池中“abc”的地址指向你刚刚new的String对象...
原创
678阅读
0评论
2点赞
发布博客于 3 月前

空指针常见原因和解决办法

首先NullPointerException是RuntimeException的一个子类,这是运行时,在编译时期不会触发,所以这是最最最容易出现的线上bug;容易出现空指针异常的场景在调用对象方法时比如处理字符串常用的replace方法,数组的length方法,map的size方法等等;str.replace(…)如果str为null,这里就直接空指针了判断一个str是否等于"test",你直接str.equals(“test”)还有像map.forEach()、list.stream()
原创
892阅读
0评论
1点赞
发布博客于 3 月前

java.lang.NullPointerException常见原因及解决办法

首先NullPointerException是RuntimeException的一个子类,这是运行时,在编译时期不会触发,所以这是最最最容易出现的线上bug;容易出现空指针异常的场景在调用对象方法时比如处理字符串常用的replace方法,数组的length方法,map的size方法等等;str.replace(…)如果str为null,这里就直接空指针了判断一个str是否等于"test",你直接str.equals(“test”)还有像map.forEach()、list.stream()
原创
1301阅读
2评论
1点赞
发布博客于 3 月前

单点登录原理及实现demo

一、单机系统登录机制1、http无状态协议  web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,这个过程用下图说明,三次请求/响应对之间没有任何联系但这也同时意味着,任何用户都能通过浏览器访问服务器资源,如果想保护服务器的某些资源,必须限制浏览器请求;要限制浏览器请求,必须鉴别浏览器请求,响应合法请求,忽略非法请求;要鉴别浏览器请求,必须清楚浏览器请求状态。既然http协议无状态,那就让服务
转载
676阅读
0评论
1点赞
发布博客于 3 月前

hashmap扩容机制(简单粗暴大白话)

扩容算法:<<1,即*2HashMap是先插入还是先扩容:HashMap初始化后首次插入数据时,先扩容再插入数据,之后每当插入的数据个数达到阈值时就会发生扩容,此时是先插入数据再扩容。
原创
692阅读
0评论
1点赞
发布博客于 3 月前

HashMap初始容量

在已知HashMap中将要存放的KV个数的时候,设置一个合理的初始化容量可以有效的提高性能。HashMap默认初始容量:16 (即2<<3)别问为什么,太大浪费内存,太小频繁扩容,16是一个在性能和资源之间相对折中的选择;我们可以在new HashMap时显式指定容量大小HashMap<String, Object> map = new HashMap<>(10);但是!!但是!!但是!!事情没你想得那么简单你指定容量大小后,实际初始容量大小并不是.
原创
661阅读
0评论
1点赞
发布博客于 3 月前

postgresql模糊查询过滤首尾空格

此处不讨论模糊查询的方法(like、bind等),只针对如何过滤前后字符串xml文件xml文件的话可以直接在sql上加trim方法,但一定要注意trim和concat的先后顺序select * from table_name where name like concat('%',trim(#{name}),'%')实体类如以下User实体类,我们可以通过重写set方法来实现public class User { private String name; private Stri
原创
630阅读
0评论
1点赞
发布博客于 3 月前

mysql模糊查询过滤首尾空格

此处不讨论模糊查询的方法(like、bind等),只针对如何过滤前后字符串xml文件xml文件的话可以直接在sql上加trim方法,但一定要注意trim和concat的先后顺序select * from table_name where name like concat('%',trim(#{name}),'%')实体类如以下User实体类,我们可以通过重写set方法来实现public class User { private String name; private Stri
原创
683阅读
0评论
1点赞
发布博客于 3 月前

postgresql模糊查询不区分大小写

pg默认的模糊查询是区分大小写的,如果你想忽略大小写的话,酱紫做修改sql很简单,直接把like换成ilikeselect * from table_name where name ilike concat('%',#{name},'%')本人当时找了无数文章都没解决,后面才发现pg有ilike这个关键字,书读少了好吃亏的(小声逼逼)除此之外还可以通过upper()函数来搞,具体方法请出门右转自己百度,嘤嘤嘤...
原创
655阅读
0评论
1点赞
发布博客于 3 月前

mybatis模糊查询过滤前后空格

以mysql为例,此处不讨论模糊查询的方法(like、bind等),只针对如何过滤前后字符串xml文件xml文件的话可以直接在sql上加trim方法,但一定要注意trim和concat的先后顺序select * from table_name where name like concat('%',trim(#{name}),'%')实体类如以下User实体类,我们可以通过重写set方法来实现public class User { private String name; pri
原创
714阅读
0评论
2点赞
发布博客于 3 月前

org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible 已解决

今天修改mybatis的xml文件遇到个这么个问题,找了半天找不到原因,各种回滚,最后发现是注释的原因;切记在mybatis的xml文件中只能这样注释!!!在mybatis的xml文件中只能这样注释!!!在mybatis的xml文件中只能这样注释!!!<!-- 注释内容 -->不管是单行还是多行,必须以<开头。我话说完...
原创
696阅读
0评论
0点赞
发布博客于 3 月前

springboot用实体接收axios get请求参数(亲测有效)

首先看看axios的get请求如何把参数放到body里面(正常情况下get请求的参数都是在url后面)axios.get(‘/user/getUsers’, {params:{name:‘小张’,age:18}}).then(res => { do something })记住,一定要把你的参数包裹过在params里面,比如你的参数变量是params,那你要这样写{params:params},反正我是这样写才成功的重头戏springboot怎么接收?能试的我都试了,@Requ
原创
1172阅读
0评论
1点赞
发布博客于 7 月前

springboot+security+vue解决跨域问题(亲测有效)

记录一下最近遇到的一个跨域问题,我这边是springboot+security+vue,话不多说,开始表演前端我们前端项目用的vue,先在vue项目的config目录下的index.js配置跨域请求代理,将所有请求代理到你的服务器域名(ip)下然后设置host和port这么一套操作下来,你的前端所有请求都是被代理到http://localhost:8080统一了请求地址,这就好办了,在你的security配置类里面这样搞一下后端在配置类的corsConfigurationSource方
原创
923阅读
0评论
1点赞
发布博客于 7 月前

布隆过滤器原理(小白都能看懂的demo)

啊哈,布隆过滤器,你值得拥有
原创
4692阅读
15评论
17点赞
发布博客于 7 月前

Java大文件排序(有手就能学会)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码
原创
897阅读
3评论
1点赞
发布博客于 7 月前

Linux常用命令整理(面试官都馋哭了)

Linux常用命令,记住30%你就是运维系统信息arch 显示机器的处理器架构uname -m 显示机器的处理器架构uname -r 显示正在使用的内核版本dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI)hdparm -i /dev/hda 罗列一个磁盘的架构特性hdparm -tT /dev/sda 在磁盘上执行测试性读取操作cat /proc/cpuinfo 显示CPU info的信息cat /proc/interrupts 显示中断cat /proc/m
转载
1195阅读
0评论
2点赞
发布博客于 7 月前

数据库设计总结(面试官都馋哭了)

文章目录前言一、合理设置字段二、合理设计表结构三、合理利用索引前言简单粗暴,我的爱好一、合理设置字段在设计表是有个原则,在保证业务的基础上让字段尽可能小,能用INT就别用BIGINT,因为mysql的innoDB引擎索引结构是B+树,它的非叶子节点保存的是索引和指针,节点容量是固定的(16k),指针大小也是固定的(6字节),所以索引占用字节越少,就能让b+树的节点保存更多元素;还有就是字段尽量设置成NOT NULL,这样mysql在检索数据的时候就会少做NULL判断,从而更好地发挥索引效果。
原创
667阅读
0评论
0点赞
发布博客于 7 月前