自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Seky_fei的博客

学习的方式是学“道”,然后自己从实践中去领悟“术”的部分;记录自己所学,思考自己所见,持续改变!

  • 博客(40)
  • 资源 (4)
  • 收藏
  • 关注

原创 详解布隆过滤器原理、及分布式运用

1.什么是布隆过滤器布隆过滤器是一个叫“布隆”的人提出的,本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure)。它本身是一个很长的二进制向量,特点是高效地插入和查询,可以用来确定 “某一条数据一定不存在或者可能存在一个集合中”。相比于传统的 List、Set、Map 等数据结构,它更高效、占用空间更少(因为是个二进制的向量),但是缺点是其返回的结果是概率性的,而不是确切的。2.布隆过滤器数据结构布隆过滤器是一个 bit 向量或者

2020-06-04 23:42:45 1583 4

原创 关于SnowFlake-雪花算法的实现和思考

雪花算法是Twitter公司为了解决分布式唯一主键ID问题,而酝酿出来的算法。最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没有顺序ID生成机制,所以twitter的snowflake大神就开发了这样一套分布式系统全局唯一ID生成服务。snowflake巧妙有效的运用了一个long数据类型各个位来生产分布式全局唯一ID,如下图我们先来看看snowflake的组成...

2020-05-26 08:34:54 1180

原创 深入图解AQS实现原理和源码分析

AQS底层实现原理用一句话可以总结就是:volatile + CAS + 一个虚拟的FIFO双向队列(CLH队列)。所以在了解AQS底层实现时,需要先深入了解一下CAS实现原理。#名词解释(1)CAS:无锁的策略使用一种叫做比较交换的技术(Compare And Swap)来鉴线程修改冲突,一旦检测到冲突产生,就重试当前操作直到没有冲突为止。(2)AQS:AbstractQuenedSynchronizer抽象的队列式同步器,主要提供了一些锁操作的模板方法。其中J.U.C都是基于AQS实现的。

2020-05-16 00:19:56 2165 2

原创 工具网站汇总

工具网站整理汇总

2023-02-04 11:57:24 1227

转载 为什么说Java中只有值传递

   对于初学者来说,要想把这个问题回答正确,是比较难的。在第二天整理答案的时候,我发现我竟然无法通过简单的语言把这个事情描述的很容易理解,遗憾的是,我也没有在网上找到哪篇文章可以把这个事情讲解的通俗易懂。所以,就有了我写这篇文章的初衷。这篇文章中,我从什么是方法的实际参数和形式参数开始,给你讲解为什么说Java中只有值传递。 ...

2021-08-27 08:02:27 320

原创 JDK缺少JavaFx相关的包怎么解决?

1.问题出现今天迁移一个老项目时,在本地启动遇到一个奇怪的问题:IDEA工具不能导入javafx包,导致项目编译失败。如下图:IDEA编辑器导入jar包import javafx.util.Pair 异常。#1.先解释一下JavaFx包是干什么的: JavaFX主要用于桌面应用GUI的开发工具包(桌面图形界面开发包),现在B/S、移动端比较火,而JavaFX目前主要用于开发桌面程序,上个十年C/S架构的程序也还很有市场的。而现在这些年,不是非要客户端调用本地、复杂硬件等特殊要求(如医院的..

2021-05-14 19:48:43 20950 4

原创 git版本回退–soft –mixed –hard的区别

这周上班的时候,一个同事发了一个如下的截图问我IDEA的代码回滚这三种操作有什么区别?当时也回答得寥寥草草的,平时用hard比较多也没太注意这个细节,所以写篇文章记录一下,也希望能到帮助大家。实际上git版本回滚有三种操作方式: 根据–soft –mixed –hard,会对工作区working tree和暂存区index和历史记录repository(HEAD)进行重置,每种操作重置的方式不一样。下面我们看看三种方式的具体区别(1)git reset --mixedcommit_id使用.

2021-03-14 21:46:34 3209

原创 git log和git reflog的区别

在平时的开发中,经常会遇到代码提交错了需要回滚到一个历史版本,或因为大意回滚错了代码又需要还原等问题,这种回滚和还原操作都离不开git操作命令历史记录的查询。哪git为什么能实现回滚和撤销操作呢?主要跟HEAD有关,可以把HEAD理解成一个指针,HEAD指针通常会指向一个分支指针。这样说不太直观,我们用图来演示一下:如上图所示,由于当前分支处于master分支,所以HEAD这个指针指向了master分支指针,master分支指针指向具体的版本号;如果我们现在checkout到qa分支,那么HEAD指

2021-03-13 14:27:16 3831 1

原创 Elasticsearch和Kibana版本对应关系

在使用Kibana时,需要注意Kibana的版本号必须和ES的版本相互对应,不然会出现Kibana和ES不兼容的问题,导致Kibana安装后不能使用。具体的版本对应问题,可以参考官网:elasticsearch和Kibana版本关系Elasticsearch Kibana X-Pack Beats^* Elastic Agent^* Logstash^* ES-Hadoop (jar)***** APM Server App Search Enter

2021-03-01 19:33:56 11957 3

原创 CentoS6停止维护-yum源配置问题

1.问题出现由于服务器迁移到了阿里云上,很长一段时间没有操作虚拟机,今天突然要在原有的虚拟机上搭建个rocketMQ集群,供其它XX环境使用。由于平时喜欢使用rz、sz命令的习惯,上来就使用rz传jar包到服务器上,提示rz命令无法找到。如下图:常规的操作就是安装lrzsz,使用yum源安装lrzsz命令时,出现下面这一扒拉“404 Not Found”,当时就有点懵,所有的mirrors都没法访问,里面还有阿里云的镜像aliyun。2.问题分析确认不是网络的问题后,开始分析问.

2020-12-12 01:28:59 2482

原创 Jackson(3)之常用注解使用

Jackson根据它的默认方式序列化和反序列化java对象,比如:默认情况下Jackson序列化或反序列化java对象是按对象属性进行一一匹配、返序列化json串里不能带特殊字符等。若根据实际需要,可以灵活的调整Jackson序列化和反序列化的规则。比如:可以设置ObjectMapper属性(详细请参考:ObjectMapper配置详解),也可以使用Jackson的注解。常用的注解及详细的使用方法如下:(1)@JsonProperty注解用于对象的属性,把属性的名称在序列化或反序列化时,转换为另外.

2020-12-06 20:46:16 468

原创 Jackson(4)之JsonUtils工具类

在开发中好多人喜欢用阿里的fastjson,官方评价说是最快的json解析框架,但最近几年经常出高危漏洞,项目也跟着不断打复补丁,有时候搞得人心惶惶的,特别被动。于是做个记录:为了今后不重复造轮子,将Jackson封装成统一的json处理工具,可以根据自己公司的情况定制序列化 和 反序列化的一些功能特性。(1)JsonUtils工具类/** * @author: wf * @create: 2020/10/23 14:53 * @description: JSON序列化工具 */publ

2020-12-06 20:44:27 1704

原创 Jackson(2)之@JsonFormat和@DateTimeFormat本质区别

1.问题平时在开发中前后端交互经常遇到两个问题:1. 后端给前端返数据时,moudel对象里的Date属性,需要格式化后给前端展现(比如:格式化成yyyy-MM-dd HH:mm:ss)。 2. 前端给后端接口传参数时,格式化的时间字符串(比如:createTime="2020-11-29 20:10:11")需要转化成后端moudel对象里Date属性。解决这个问题有两种方式:1. 手动格式化处理:比如,每次返给前端的数据使用SimpleDateFormat将Date转化成指定格式的字符串

2020-11-29 21:21:43 979

原创 Jackson(1)之ObjectMapper配置详解

Jackson是当前用的比较广泛的,用来序列化和反序列化 json 的 Java 的开源框架。Jackson社区相对比较活跃,更新速度也比较快,从Github中的统计来看,Jackson 是最流行的 json 解析器之一 。 Spring MVC和Spring Boot的默认 json解析器便是 Jackson。Jackson 的核心模块由三部分组成:...

2020-11-22 20:32:38 20859 2

原创 Java中的引用类型总结

在java的引用体系中有4种引用类型:强引用、软引用、弱引用和虚引用。Java中提供这四种引用类型主要有两个目的:一个是可以让程序员通过代码的方式决定某些对象的生命周期;另一个是有利于JVM进行垃圾回收。四种类型对象特征如下:引用类型 被垃圾回收时间 用途 生存时间 强引用 从来不会回收 对象的一般状态 JVM停止运行时终止 软引用 当内存不足时被回收 对象缓存 内存不足时终止 弱引用 正常GC时被回收 对象缓存 垃圾回

2020-09-20 22:36:31 184

原创 Redis之dict数据结构的渐进式rehash原理

前面讲到了Redis底层数据结构dict(字典)的结构设计,本篇文章继续深入了解dict(字典)数据结构的扩容过程(即rehash过程);如果不了解dict(字典)的数据结构,可以先看看这篇文章:图解Redis底层数据结构实现原理。这里就直接上图了,dict(字典)数据结构如下图:扩展或收缩哈希表需要将 ht[0]里面的所有键值对 rehash 到 ht[1]里面, 但是, 这个 rehash 动作并不是一次性、集中式地完成的, 而是分多次、渐进式地完成的。...

2020-09-02 23:55:20 1173 2

原创 深入理解PriorityQueue实现原理、及源码分析

PriorityQueue是使用Object[]数组实现的一个优先队列,是线程不安全的。它与FIFO的队列的区别在于,优先队列每次出队的元素都是优先级最高的元素。那么怎么确定哪一个元素的优先级最高呢?PriorityQueue使用堆这种数据结构,加上用户自定义的Comparator来确定每次出队的元素总是队列里面最小的,这里Comparator就相当于指定优先级。所以我们先来看看堆这种数据结构。...

2020-08-08 17:51:40 1197

原创 MySql自增主键ID重置这个坑货

这两天在面试的时候被问到一个问题:在mysql中用自增列作为主键时,先往表里插入5条数据,此时表里数据id为1、2、3、4、5,如果此时删除id=4、5的数据后,再重启数据库,重启成功后向表里insert数据的时候,INNODB、MyISAM引擎下ID分别是从几开始增加?当时被问到这个问题时,一脸懵逼,MD谁有事没事去重启线上数据库嘛。最后还是基础知识不牢固,在此作个笔记。MySQL通常使用的引擎都是INNODB,在建表时,一般使用自增列作为表的主键,这样的表对提高性能有一定的帮助。但是自增列有一个坑,

2020-08-03 09:37:48 6091 3

原创 Redis Cluster数据分片实现原理、及请求路由实现

Redis在3.0上加入了 Cluster 集群模式,实现了 Redis 的分布式存储,也就是说每台 Redis 节点上存储不同的数据。但redis cluster发布得比较晚(2015年才发布),在这期间各个大厂在redis主从模式上开发了自己的集群,想进一步详细了请参考:聊聊Redis的各种集群方案、及优缺点对比。Redis Cluster模式为了解决单机Redis容量有限的问题,将数据按一定的规则分配到多台机器,内存/QPS不受限于单机,可受益于分布式集群高扩展性。Redis Cluster是一种

2020-07-27 15:44:57 5659 1

原创 Mysql中Innodb引擎表的默认主键_rowid

mysql的技术文档里面有如下文字:If you do not define aPRIMARY KEYfor your table, MySQL picks the firstUNIQUEindex that has onlyNOT NULLcolumns as the primary key andInnoDBuses it as the clustered index.If there is no such index in the table,InnoDBinternally...

2020-07-11 00:06:35 1865 3

原创 Redis和Memcache的主要区别

提到分布式缓存就不得不提及到Redis和Memcache的区别,刚到途家工作的时候,一些老项目基本上用的全是Memcache做缓存,后面也不断迁移成Redis,原因就是Memcache没人维护了,都搞Redis去了!目前业界的主流也是使用Redis,相对于Memcache来说,Redis的主要优点有一下几个: 1.存储方式 Memcache把数据全部存在内存之中,断电后会挂掉,无法做到数据的持久化,且数据不能超过内存大小。 redis支持数据的持久化,RDB和AOF持久化

2020-07-09 22:59:33 252

原创 聊聊Redis的各种集群方案、及优缺点对比

由于最近在忙找工作的事,先把大纲列出来,后续进行详细的再补充。望见谅......1.主从模式2.哨兵模式3.各大厂的Redis集群方案(1)客户端分片(2)代理分片(3)Codis4.Redis Cluster...

2020-07-09 22:58:12 11444 4

原创 dubbo配置属性-快捷查询表

1.服务端配置属性xml中服务端全局配置标签:<dubbo:service />属性 类型 是否必填 缺省值 描述 interface class 必填 无 服务接口全路径 ref object 必填 无 服务对象实现引用 version string 可选 0.0.0 服务版本,建议使用两位数字版本如1.0,通常在接口不兼容时版本号才需要升级 timeo...

2020-07-04 23:33:01 293

原创 HashMap源码分析、及HashMap的容量为什么是2的n次幂?

JDK1.7中多线程操作hashMap的ReHash的时候,会出现HashMap Infinite Loop(死循环)问题。具体问题分析参考: HashMap死循环问题解析

2020-07-02 12:49:54 754

原创 图解Redis底层数据结构实现原理

待更新中

2020-06-26 11:58:38 8008 3

原创 Redis对外暴露的数据类型总结

Redis底层数据结构的实现包含:dict(字典)、sds(简单动态字符串)、intset(整数集合) 、ziplist(压缩列表)、quicklist(快速列表)、skiplist(跳跃表),但并没有直接对外暴露使用,而是基于这些底层的数据结构,redis使用API对外只暴露了五种使用的数据类型。各种数据类型大致应用场景和底层实现的数据结构如下: 1、String:最常规的set/get操作,value可以是String也可以是数字。一般做一些复杂的计数功能的缓存。常用命令get、set、自增in.

2020-06-26 11:56:50 579

原创 Redis事务、及事务操作案例

通过持久化功能,Redis保证了即使在服务器重启的情况下也不会丢失(或少量丢失)数据,持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载数据。 但是由于数据是存储在一台服务器上的,如果这台服务器出现硬盘故障等问题,也会导致数据丢失,并且请求量增大时,读写不分离遇到瓶颈。为了避免单点故障 和 读写不分离,使用redis的主从模式(一主一从或多从)既能实现即使有一台服务器出现故障,其他服务器依然可以继续提供服务,又能实现读写分离。Redis 提供了复制(replication)功能,可以实现master数

2020-06-23 19:55:15 305

原创 Redis主从同步原理、及SYNC和PSYNC同步区别

通过持久化功能,Redis保证了即使在服务器重启的情况下也不会丢失(或少量丢失)数据,持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载数据。 但是由于数据是存储在一台服务器上的,如果这台服务器出现硬盘故障等问题,也会导致数据丢失。请求量增大时,读写不分离遇到瓶颈。为了避免单点故障 和 读写不分离,使用redis的主从模式(一主一从或多从)既能实现即使有一台服务器出现故障,其他服务器依然可以继续提供服务,又能实现读写分离。Redis 提供了复制(replication)功能,可以实现master数据库

2020-06-20 21:18:21 5957

原创 Redis之VM机制

Redis的VM(虚拟内存)机制就是暂时把不经常访问的数据(冷数据)从内存交换到磁盘中,从而腾出宝贵的内存空间用于其它需要访问的数据(热数据)。通过VM功能可以实现冷热数据分离,使热数据仍在内存中、冷数据保存到磁盘。这样就可以避免因为内存不足而造成访问速度下降的问题。Redis提高数据库容量的办法有两种:一种是可以将数据分割到多个Redis Server上;另一种是使用虚拟内存把那些不经常访问的数据交换到磁盘上。需要特别注意的是Redis并没有使用OS提供的Swap,而是自己实现。Redis为了保证查找

2020-06-18 21:54:43 2077 1

原创 Redis之I/O多路复用模型实现原理

在I/O多路复用之前我们先来看看Redis是怎么和客服端建立连接的、单线程的socket服务端为什么I/O会阻塞。(1)Redis客户端连接Redis通过监听一个 TCP 端口或者 Unix socket 的方式来接收来自client端的连接,当一个连接建立后,Redis 内部会进行以下一些操作: 首先,客户端 socket 会被设置为非阻塞模式,因为 Redis 在网络事件处理上采用的是非阻塞多路复用模型。 然后为这个 socket 设置 TCP_NODELAY 属性,禁用 Nag

2020-06-14 19:29:42 6957 11

原创 电影《大空头》启示录:权威机构的保障就像镰刀装上了发动机,只会让韭菜灭得更快!

最近一段时间把《大空头》仔细的看了一遍,由于level不足,观看的过程中遇到很多专业不太懂,也是一边看,一边查询理解,最后串联下来收获不少,无比感慨华尔街精英们的智慧。历史背景《大空头》这部电影真实的反映了2008年次贷危机的演化过程。次贷危机前,美国为了挽救低迷的经济,长期执行了宽松的货币政策,多印钞票、贷款利息低,拉动消费和投资,刺激经济发展。21世纪初,随着9·11事件和网络泡沫破灭,为了防止经济衰退,小布什政府为了推动经济增长,刺激房地产,推动美国家庭“居者有其屋”。美联储为了配合这一计划,

2020-06-14 00:21:09 2821

原创 Chrome将不再允许HTTPS页面加载HTTP资源

今天线上反馈一个问题

2020-06-10 22:49:49 5830 6

原创 Redis之持久化机制和实现原理

1.Redis 持久化的意义redis的数据全部在内存中,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证redis的数据在发生突发状况时不会丢失、或者只丢失少量,于是必须根据一些策略来把redis内存中的数据写到磁盘中,这样当redis服务重启时,就会将硬盘中的数据恢复到内存中。Redis持久化的意义就是为了保证突然宕机,内存数据不会全部丢失。2.Redis 持久化机制redis有两种持久化机制:RDB和AOF。每种持久化机制各有优缺点,了解每种持久化机制的原理对我们使用Redis

2020-06-06 21:43:24 2893

原创 Condition实现原理和源码分析

在AQS中存在两个FIFO队列:同步队列 和 等待队列。本篇文章主要是讲condition实现原理(即等待队里),同步队列实现原理看这篇文章:深入理解AQS实现原理和源码分析。等待队列是由Condition内部实现的,是一个虚拟的FIFO单向队列,在AQS中同步队列、等待队列组成关系如下图: (1)AQS中tail 和 head主要构成了一个FIFO双向的同步队列。 (2)AQS中condition构成了一个FIFO单向等待队列。condition是AQS内部类,每个Condition对

2020-05-31 14:55:47 483 1

原创 ReentrantReadWriteLock实现原理及源码分析

ReentrantLock具有完全互斥排他的效果,即同一时间只有一个线程在执行lock()方法后的任务,这就会出现一个弊端,比如在一些环境里多个线程都是读操作,没有涉及到数据的变更,那么多个读并发时效率就非常低;为了解决这种少写多读场景下的性能问题,JDK中设计了一种读写锁ReentrantReadWriteLock(可重入读写锁)。在读写锁中锁的策略有两种:公平策略和非公平策略。1.ReentrantReadWriteLock类的内部结构ReentrantReadWriteLock有五个内部类,五

2020-05-24 19:46:47 401 1

原创 单例模式多种实现的优缺点对比

自己在平时的业务开发中单例模式运用较多,感觉没有啥技术含量,直到今天和一个同事聊起不同单例模式的底层实现原理时,才发现自己愚昧,里面蕴藏知识点还真有点多,于是就做了这个笔记。单例设计模式大的方面可以分为两种:对象不延迟加载、对象延迟加载设计。在对象延迟加载设计中又有懒汉模式、双重检查锁(Double-Checked Locking)、IoDH 。接下来我们就一步一步分析每种设计方案的优缺点对比。1.俄汉模式单例模式中俄汉模式是最暴力的,也是实现起来最简单的。代码实现如下:class Eag

2020-05-17 19:23:16 533

原创 Java对象内存布局和内存大小计算

1.对象的内存布局 在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和 对齐填充(Padding)。下图是普通对象实例对象结构 与 数组对象实例的数据结构:(1)Java对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。也就是 JAVA对象 = 对象头 + 实例数据 + 对象填充(2)对象头(Header)包含三部分信息:m..

2020-05-10 21:42:31 714 2

转载 基础排序算法

基础排序算法参考文章: 十大经典排序算法动画与解析

2020-03-31 18:17:59 134

转载 HashMap源码详细分析(JDK1.8)

HashMap 源码详细分析(JDK1.8)转载一篇详细文章: HashMap 源码详细分析

2020-03-25 13:54:32 148

转载 时间复杂度为 O(n)和 O(1)的删除单链表结点的方法

转载一篇写的清晰的文章https://www.cnblogs.com/kubixuesheng/p/4390917.html

2020-03-24 14:10:08 686

xshell6免费版-破除窗口限制.rar

1.xshell6免费版-破除四个窗口限制 2.解压后,根据安装步骤安装即可

2021-05-17

Xshell6无窗口限制+小工具.rar

Xshell6破解版无窗口限制, 绝对的无窗口限制. 下载后直接安装使用, 无需破解.

2019-08-19

Java反编译器

Java免安装反编译器, 简单方便使用; 直接拖拽class文件或jar文件到窗口直接使用

2019-01-04

spring-framework-3.0.5.RELEASE-dependencies.zip

所有spring-framework版本依赖的jar包下载地址(很难找的资源)

2016-04-27

空空如也

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

TA关注的人

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