自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java 内存模型 ,一篇就够了!

Java 内存模型 ,JVM 详细解读!

2022-11-08 20:08:34 234 1

原创 如何解决秒杀场景下的超卖现象(java)

如何解决秒杀场景下的超卖现象(java)

2022-11-03 16:36:48 3222

原创 QueryWrapper.lambda()表达式

2021-10-20 20:24:55 6616 1

原创 Redis Cluster:Too many Cluster redirections异常

一、现象: 我们的redis私有云,对外提供了redis-standalone, redis-sentinel, redis-cluster三种类型的redis服务。 其中redis-cluster, 使用的版本是 Redis Cluster 3.0.2, 客户端是jedis 2.7.2。 有人在使用时候,业务的日志中发现了一些异常(Too many Cluster redirections)。 二、jedis源码分析: 先从jedis源码中找到...

2021-04-25 17:27:14 6998

原创 雪花算法的原理和实现[Java]

SnowFlake 算法,是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 id。在分布式系统中的应用十分广泛,且ID 引入了时间戳,基本上保持自增的,后面的代码中有详细的注解。这 64 个 bit 中,其中 1 个 bit 是不用的,然后用其中的 41 bit 作为毫秒数,用 10 bit 作为工作机器 id,12 bit 作为序列号。给大家举个例子吧,比如下面那个 64 bit 的 long 型数字:第一..

2021-04-25 17:24:40 97

原创 Mybatisplus 自定义sql 使用条件构造器作为参数 两种方式

1.注解只需添加${ew.customSqlSegment}和@Param(Constants.WRAPPER)即可@Select("select * from mysql_data ${ew.customSqlSegment}")List<MysqlData> getAll(@Param(Constants.WRAPPER) Wrapper wrapper);2.xml--重点(1)mapper.java定义接口public List<User> getUser..

2021-04-25 17:23:04 739

原创 IDE Eval Reset插件

插件市场安装在Settings/.......找到Plugins,手动添加第三方仓库地址:https://plugins.zhile.io 搜索:IDE Eval Reset插件进行安装。 完美~

2021-04-15 15:40:39 1158

原创 Redis的LRU算法

Redis的LRU算法LRU算法背后的的思想在计算机科学中无处不在,它与程序的"局部性原理"很相似。在生产环境中,虽然有Redis内存使用告警,但是了解一下Redis的缓存使用策略还是很有好处的。下面是生产环境下Redis使用策略:最大可用内存限制为4GB,采用 allkeys-lru 删除策略。所谓删除策略:当redis使用已经达到了最大内存,比如4GB时,如果这时候再往redis里面添加新的Key,那么Redis将选择一个Key删除。那如何选择合适的Key删除呢?CONFIG GET maxm

2021-04-14 22:25:33 5821 2

原创 分库分表:Sharding-JDBC,mycat

1、关于分表(这里指的肯定是水平分表)在我的思路中 如果要实现分表,首先要考虑每条记录以什么样的规则来区分放到哪一张表中。最直接的方式就是以某个字段或者某些字段通过某种算法来得出一个结果,对应到一张表中。假设user 表。字段 有 id(int) , name(varchar) , age(int)1.1增加数据如果就以id作为分表因子分两张表。那可以定义规则 id % 2 得出结果 0 或者1 这里就可以对应两张表 user_0 user_1 然后对应的将这条数据插入到表中。假设id 是

2021-04-13 14:54:09 407 1

原创 RocketMQ如何保证消息的可靠性?

消息的发送方式有哪几种?存储消息的可靠性面临哪些挑战?消费消息的确认机制是怎样的?本文通过分析消息流转的整个过程,从消息发送、消息存储和消息消费三个阶段介绍RocketMQ是如何保证消息的可靠性的。分布式系统中一个重要的前提假设是所有的网络传输都是不可靠的,在网络传输不可靠的情况下,保证消息的可靠传输,除了进行重试投递别无他法。常用的绝大多数消息队列RocketMQ、RabbitMQ等在消息传输上都只能保证至少传输成功一次,也即(At least once),而不能保证只传输成功一次(Exactl.

2021-02-02 09:25:19 277

原创 notepad++ 查找最后一列以0结尾的行

在使用notepad++处理数据时,我们会遇到需要在notepad++每行首尾添加字符,如果行数不多,可以自己手动的去添加。但如果达到了成百上千行,此时在机械的手动添加是不现实的。notepad++其实提供了正则表达式的操作方式,不懂正则表达式特殊字符的朋友可以参考我的另一个博文https://blog.csdn.net/u010990478/article/details/84953277如果我们需要在内容的每一行首位添加字符w,在内容的每一行末尾添加字符x在正则表达式中,特殊字符^表示行

2021-01-04 15:39:29 610

原创 异步线程CompletableFuture让你的代码速度快到飞起

前言现在大部分的CPU都是多核,我们都知道想要提升我们应用程序的运行效率,就必须得充分利用多核CPU的计算能力;Java早已经为我们提供了多线程的API,但是实现方式略微麻烦,今天我们就来看看Java8在这方面提供的改善。假设场景现在你需要为在线教育平台提供一个查询用户详情的API,该接口需要返回用户的基本信息,标签信息,这两个信息存放在不同位置,需要远程调用来获取这两个信息;为了模拟远程调用,我们需要在代码里面延迟 1s。publicinterfaceRemoteLoader..

2020-12-24 13:59:36 339

原创 为什么重写了equals()也要重写hashCode()

前言在Effective Java中第九条规定在覆盖equals()方法时总要覆盖hashCode()方法。这是为什么呢?接下来我们就介绍一下这两个方法。Java中的equals()方法和hashCode()方法都是在Object类中的方法,而在Java中所有的类都是Obejct类的子类,所以Java中所有的方法都会有这两个方法的默认实现。equals方法Object类中的equals()方法定义如下publicbooleanequals(Objectobj){ret...

2020-12-23 09:38:51 88

原创 校验非空的注解@NotNull怎么取得自定义的message

由于项目表单需要校验字段过多,一个一个去判空太麻烦,所以用了@NotNull注解,字段为空会抛出MethodArgumentNotValidException异常。接下来要取得@NotNull(message=“自定义异常”)里的message内容给前端显示直接贴上代码:public String getMessage(MethodArgumentNotValidException exception){String message = exception.getBindingResult(

2020-11-25 12:52:58 1868

原创 Redis中是如何实现分布式锁的?

分布式锁常见的三种实现方式: 数据库乐观锁; 基于Redis的分布式锁; 基于ZooKeeper的分布式锁。 本地面试考点是,你对Redis使用熟悉吗?Redis中是如何实现分布式锁的。要点Redis要实现分布式锁,以下条件应该得到满足互斥性 在任意时刻,只有一个客户端能持有锁。 不能死锁 客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。 容错性 只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。 实现

2020-11-23 19:27:02 69

原创 基于Mysql实现分布式锁

一.分布式锁要解决的问题可以保证在分布式部署的应用集群中,同一个方法在同一时间只能被一台机器上的一个线程执行。这把锁要是一把可重入锁(避免死锁)这把锁最好是一把阻塞锁(根据业务需求考虑要不要这条)这把锁最好是一把公平锁(根据业务需求考虑要不要这条)有高可用的获取锁和释放锁功能获取锁和释放锁的性能要好二.基于数据库实现原理1.新建锁表记录 CREATE TABLE `methodLock` ( `id` int(11) NOT NULL AUTO_INCREMEN

2020-11-23 15:07:51 167

原创 为什么大家都说SELECT * 效率低

无论在工作还是面试中,关于SQL中不要用“SELECT *”,都是大家听烂了的问题,虽说听烂了,但普遍理解还是在很浅的层面,并没有多少人去追根究底,探究其原理。废话不多说,本文带你深入了解一下"SELECT * "效率低的原因及场景。本文很干!请自备茶水,没时间看记得先收藏-- 来自一位被技术经理毒打多年的程序员的忠告一、效率低的原因先看一下最新《阿里java开发手册(泰山版)》中 MySQL 部分描述:4 - 1.【强制】在表查询中,一律不要使用 * 作为查询的字段列表,...

2020-11-06 14:17:36 106 1

原创 Java List对象集合按对象属性分组、分组汇总、过滤等操作示例

import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.stream.Collectors;public class Test { public static void main(String[] args){ List<PersonData> list = new ArrayList<PersonData>(); .

2020-11-06 09:03:51 894

原创 sql 查数据库中时间最新的一条记录

下策——查询出结果后将时间排序后取第一条 select * from a where create_time<="2017-03-29 19:30:36" order by create_time desc limit 1 这样做虽然可以取出当前时间最近的一条记录,但是一次查询需要将表遍历一遍,对于百万以上数据查询将比较费时;limit是先取出全部结果,然后取第一条,相当于查询中占用了不必要的时间和空间;还有如果需要批量取出最近一条记录,比方说:“.

2020-11-02 11:00:56 15214

原创 jar包反编译,查看源代码

介绍一个反编译工具——jd-gui下载地址:http://jd.benow.ca/根据自己的电脑系统下载对应版本.下载完之后,点击运行点击file——open file,选择想查看的jar。就能看到结果了,不过源码中注释的部分反编译后无法查看...

2020-10-22 20:30:03 545 1

原创 6种负载均衡算法

1、轮询法  将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。2、随机法 通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。由概率统计理论可以得知,随着客户端调用服务端的次数增多,其实际效果越来越接近于平均分配调用量到后端的每一台服务器,也就是轮询的结果。3、源地址哈希法 源地址哈希的思想是根据获取客户端的IP地址,通过哈希函数计算得到的一个数值,用该数值对服务器列表的大...

2020-10-22 18:31:55 658

原创 数据库主键到底是用自增长(INT)好还是UUID好?

数据库主键到底是用自增长(INT)好还是UUID好?使用自增长做主键的优点:1、很小的数据存储空间2、性能最好3、容易记忆使用自增长做主键的缺点:1、如果存在大量的数据,可能会超出自增长的取值范围2、很难(并不是不能)处理分布式存储的数据表,尤其是需要合并表的情况下3、安全性低,因为是有规律的,容易被非法获取数据使用UUID做主键的优点:1、它是独一无二的,出现重复的机会少2、适合大量数据中的插入和更新操作,尤其是在高并发和分布式环境下3、跨服务器数据合并非常方便4、安全性较高使用U

2020-10-22 16:04:26 1292

原创 SQL Server中的Char 、varchar 、Nvarchar数据类型

数据库的表,字段(属性)的数据类型char、varchar、nvchar比较            char(n):是长度为n个字节的定长的非unicode的字符数据。N为一个介于1到8000之间的值。其存储大小为输入数据的实际字节长度,而不是n个字节。如果你输入的实际字节长度少于n,那么其他位置会被空格填充。在数据存储中英文字母和数字占一个字节,汉字占两个字节。那么char(n)最多可以

2014-04-09 16:00:41 752 1

原创 C#中的五大对象(易懂版)

Connection,Command,DataReader,DataAdapter,DataSet1,Connection 对象 —— 连接数据库    首先与数据库进行连接;ConnectionString 数据库连接字符串,用于指定与哪种数据库进行连接。2.Command 对象 —— 执行SQL语句    连接数据库之后,就可以对数据源进行操作了。 对数据源的操作一般包括查看,

2014-04-02 16:51:35 3241 1

原创 ASP.NET与ASP

对于ASP.NET而言,开发人员不可避免的会将ASP.NET与ASP进行比较,因为ASP.NET可以算作是ASP的下一个版本。但是ASP.NET却与ASP完全不同,可以说微软重新将ASP进行编写和组织形成ASP.NET技术。        在传统的ASP开发中,开发人员可以在页面中进行ASP代码的编写,当服务器请求相应的页面时,服务器会解析ASP代码进行页面呈现。ASP具有轻巧等特

2014-04-02 15:43:11 516

原创 生活中的小窍门

1.      炒鸡蛋的窍门:将鸡蛋打入碗中,加入少许温水搅拌均匀,倒入油锅里炒,炒时往锅里滴少许酒,这样炒出的鸡蛋蓬松、鲜嫩、可口。 2.      许多人爱吃青菜却不爱喝菜汤,事实上,烧菜时,大部分维生素已溶解在菜汤里。比如小白菜炒好后,会有70%的维生素C溶解在菜汤里。 3.      烧荤菜时,在加了酒后,再加点醋,菜就会变得香喷喷的。烧豆芽之类的素菜时,适当加点醋,味

2014-04-02 15:38:29 483

原创 如何应对面试

如何应对面试面试前的准备: 1.收集招聘单位的资料一个人对于自己要面试的单位一无所知是很严重的问题。当面试官问到你相关问题时,你一脸茫然,一问三不知,不单单是表现出你对于这场面试的不重视,也是表现出了你对这个职位,这个公司的不重视,更严重的是,让人觉得你不是个脚踏实地,做事有准备的人。所以,无论是什么职位,你要你提出了申请并赢得了面试机会时,你都应该好好地去珍惜和准备。这不单单是对

2014-04-02 15:36:22 558

原创 有return的情况下try catch finally的执行顺序(最有说服力的总结)

结论:1、不管有木有出现异常,finally块中代码都会执行;2、当try和catch中有return时,finally仍然会执行;3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;4、finally

2014-04-01 10:37:34 361

空空如也

空空如也

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

TA关注的人

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