自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(100)
  • 收藏
  • 关注

原创 事实 读书笔记

这本书目标是想突破人类的一些本能的直觉惯性,让我们能更加客观的认识这个世界,让我们不显得那么无知。主体内容以一些直觉陷阱一步一步的展开。

2023-11-17 10:01:51 178

原创 预写日志 做一个靠谱的男人

女人和小孩能够粗心大意,但男人不行

2023-02-24 10:27:11 380 1

原创 ACK 与外星文明进行交流

从《三体》里面的一段 与外星文明通信来理解ACK

2023-02-14 20:41:44 357

原创 ChatGPT帮我实现LRU

内存淘汰算法, ChatGPT来帮我实现

2023-02-13 10:32:41 324

原创 回到Zookeeper

通过Zookeeper来反思分布式系统中最根本的问题,数据一致性问题

2023-02-10 17:03:00 782

原创 INVALID TASK ‘.TEST.SKIP=TRUE’: YOU MUST SPECIFY A VALID LIFECYCLE PHASE […]

maven test skip invalid

2022-08-12 14:54:57 134

原创 手写一个布隆过滤器

public class BloomFilter { /** * bitmap */ private int[] table; private int[] speeds = {1, 3}; public BloomFilter(int capacity) { capacity = resizeCapacity(capacity); this.table = new int[capacity]; }

2021-11-16 16:05:56 165

原创 来简单认识下简单的布隆过滤器

布隆过滤器1. 简介布隆过滤器是一种数据结构 主要由 一个 bit数组和一组hash函数组成1.1优点占用空间小,效率高1.2缺点对于判断存在 是一个概率事件 而不是确定事件2.作用用来告诉我们 某个量 在一个量很大的数据集合中 一定不存在 或者 大概率存在3.原理对于布隆过滤器有两个动作,一个是插入 ,一个是查询对于插入操作就是对值放到hash函数中去计算,通过得到的值映射到bit数组中,把对应的位上的值置为1对于查询 就是用插入相同的hash方式 去查找对应的位 检查是不是每一位

2021-09-02 14:38:21 117

原创 开发中遇到的英语单词

工作英语 metrics 指标resiliency 弹性 exchange 交换机 本来是交换 但是在系统中可以理解为邮局 即接受消息并发送消息的地方fuss 麻烦primitive 原始的 简陋的declarative 声明式的Relay 中继,传递token 令牌 常见在鉴权授权中 它与用户名+密码的好处在于 它能指定 范围和有效期adapter 适配器 spring 会有一些供拓展配置的类 如webmvcConfigureAdapterLoad balancing 负载均衡gr

2021-06-10 10:53:22 136

原创 面对idea无厘头问题的两板斧

1.啥都正常但是飘红今天工程 所有import都飘红 但是 编译和运行都正常解决File -> Invalide Cache2. 工程结构不能识别在idea中工程目录信息是控制在.idea 文件夹下面的,有时候我们在一个地方 或者 项目中的某一个人 修改了项目结构。那么修改后的结构被记录在了.idea文件夹下面,但是我们通常又不会用git管理该文件夹,那么我们在异地更新项目后,就无法识别新的结构。解决我们可以删除旧的.idea文件夹 然后重新用idea导入该工程。这样idea就会重新为我

2021-06-10 10:51:55 63

原创 Linux 常用命令

常用命令1. yum1.1 简介yum 全称(Yellow dog Updater, Modified ) 他是一个sheel前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,能够自动处理依赖性关系。1.2 常用命令yum install -y yum-utils ## 安装 -y表示自动yesyum remove -y yum-utils ## 卸载yum update yum-utils ## 更新yum search yum-utils ## 查找1

2021-06-05 22:38:07 203

原创 FastDFS 搭建与客户端编写

FastDFS 搭建与客户端编写文件服务器服务器搭建https://github.com/qbanxiaoli/fastdfs客户端编写依赖 <dependency> <groupId>com.github.tobato</groupId> <artifactId>fastdfs-client</artifactId> <version>1

2021-06-05 22:36:47 104

原创 docker 镜像的复制

docker 镜像的复制有时候我们打的镜像需要从一台服务器传到另一台服务器,但是奈何公司的服务器是只能连接内网的。这时候我们就需要能对docker的镜像进行复制 粘贴。整体思路就是 先在本地对镜像打包 然后通过ftp工具传到 目标服务器 最后把镜像包还原下面我们开始细说第一步 复制第一步当然是复制了,docker也提供了相应的命令供我们使用docker save -o 要保存的文件名 要保存的镜像实际案例docker save -o d://docker/images/fastdfs.ta

2021-06-01 10:53:21 9453

原创 哈士奇与藤原拓海

哈士奇与藤原拓海有的哈士奇是悲伤的。当我看到它的时候,它像一摊被雨淋过的泥巴,有气无力的趴着。它很瘦弱,有几团毛似乎要脱落了。我蹲下来,它只撇了我一眼,它的眼睛是蓝色的,然后又几乎闭上了,像熬了许久的夜。我想它可能是一只流浪狗,但是它的脖子上有项圈。我又向它挪了一点,把一片树叶轻轻放到它鼻子前,它嗅了嗅,没有看我。买了票,我进了植物园,园里人很少,应该是因为天气,五月的武汉风雨不定,前些天蔡甸还刮起了龙卷风,几个可怜的人失去了性命。不过我倒是不担心,因为我包里备了雨衣。一个人出门,要克服的最大困难,不是

2021-05-22 20:55:59 97

原创 动物农村 读后感

动物农场在读完1984后,我又马不停蹄的翻开了《动物农场》。我怀恋苏联,我觉得那是一个美丽的梦,哪个国家所有的一切都属于人民。我想从这本书里找到红色梦想破碎的答案。农场里的动物在一天受到了老上校的思想启蒙,最终赶走了劳役它们的农场主。为了社会的运转,领袖必然会出现,而猪凭借智慧站到了哪里。拿破仑通过它秘密培养的猎狗,赶走了雪球,夺取了权利,并立即取消了群体的议政,完成了集权。明明动物们为了自己能当家做主而发起的革命,却在顷刻间进入了新的集权,随后拿破仑一一违背了它们革命成功后立下的七戒,并篡改了它。为了

2021-05-18 09:54:59 64

原创 克拉拉与太阳

克拉拉与太阳当乔西要去读大学,最后一次拥抱了克拉拉后离开,我他妈真的哭了。克拉拉不应该是只是一个东西,不应该被用完后就被抛弃,不应该这样的。fuck the all。克拉拉最后在独自在堆厂里整理过去的记忆。最后的离别时刻,克里也没有来见乔西,乔西也没有等他。儿时的美好会一直存在,但是他们却不会再相遇了。克拉拉可以完全成为乔西,却也永远不能成为乔西,克拉拉说,因为人们要寻找的属于一个人的特质,其实并不在那个特定人的心里,而是在别人对他的记忆里,所以,克拉拉永远也无法成为母亲心里的乔西。什么是爱?妈的

2021-05-18 09:52:37 171 2

原创 Linux 系统目录结构

Linux 系统目录结构虽然最近一直在使用docker来部署一些中间件或者服务,但是还是会在宿主机中创建一些挂载,这就涉及到我们应该把这些挂载文件放在哪里比较合适的问题。现在我们来认识下Linux的系统目录结构先看一个大图,有一个大体认识现在我们来对这些目录做一点解释:/ :首先我们应该知道 这个斜杠表示根目录的意思,我们写绝对地址就是从这个斜杠开始的 而~表示用户空间的开始地址/bin :bin是Binaries(二进制文件)的缩写。这个目录存放着最经常使用的命令 如find ,t

2021-05-10 17:19:31 302

原创 Linux的用户和用户组

Linux的用户和用户组两个文件我们学习Linux的用户和用户组可以从两个文件开始1. passwd如上图 这个配置文件 在 /etc/passwd路径下每一行表示一个用户1.1 每一行的结构user_name:x:uId:gId::home_directory:sh普通用户的uId 是从1000开始的gId是 创建的时候系统自动分配的初始组 一般我们不建议修改初使组 可以改附加组x表示这个用户有密码 密码 在 etc/shadow文件里 只有root用户可以查看home_dir

2021-05-10 17:18:59 120

原创 Linux 的文件的基本属性

Linux 的文件的基本属性1. 两个指令chown #修该所属用户与组合chmod #修改用户的权限首先这两个指令很重要,我们以后会经常用到,其次,这两个指令也引出的两个概念一个文件一定属于某个用户 及 某个用户组用户和用户组对该文件的权限可以做限制2. 两张图第一张 全览这里需要在引入另一个指令ls -l # 或者 ll通过上述指令 我们可以得到这个文件所属的用户和组,及用户和组拥有的权限我们比较关心的是前面一组权限 及 后面的user 和gourp上图我们可以看到这

2021-05-10 17:18:25 90

原创 取消与关闭

取消与关闭两方面1 线程池的关闭线程池的关闭 线程池给了两个方法 一个是shutdown 一个是shutdownnow前者会把队里的任务给执行完,且拒绝再进来的任务。而后者会将队里没有执行的任务返回,且让正在执行的线程执行interrupt2 线程的关闭线程的关闭当然可以用标志符或者线程中断 但是我们也可用Future 和 Callable那套,然后调用cancel总结对于上面的关闭,我们应该知道,它们都是依靠中断机制,即修改线程的中断状态。所以,任务到底能不能停止,得我们自己看我们的任务

2021-05-10 17:10:55 86

原创 Logback

logbacklogback 与 log4f出自同一作者。logback是作者对log4j的升级。它实现了slf4j。slf4j是 simple log face for java 的缩写。我们要入门logback 搞懂几个核心类就可了logback要做的事情是什么?它搞定输出那些,输出到哪里,怎么输出 这个三个问题。Logger它负责写日志,他有自己的level。这个我们都知道,ERROR,WARN,INFO,DEBUG,TRACE它们的级别逐级下降。低等级level的logger 调用高

2021-05-10 17:07:05 203

原创 任务执行

任务执行大多数并发应用程序都是围绕"任务执行"来执行的:任务通常是一些抽象且离散的工作单元。大多数服务器应用都提供了一种自然的任务边界选择方式:以独立的客户请求为边界。串行的执行任务显式的为任务创建线程无限制创建线程的不足无限制创建线程是非常危险的 理由如下线程生命周期开销非常高 : 线程的创建和销毁并不是没有代价的资源消耗 :活跃的线程会消耗系统资源,尤其是内存稳定性 : 在可创建线程的数量上存在一个限制。如jvm上 thread太多会抛出异常Executor 框架任务是一组逻辑

2021-05-10 17:05:58 252

原创 避免活跃性危险

避免活跃性危险在安全性和活跃性之间通常存在某种制衡。即我们在用加锁来保证安全性的时候,可能会引发死锁。死锁对于死锁 有个经典的问题,哲学家就餐,五个哲学家 坐在一个圆桌上,他们中间放着一根筷子,但是只有拿起两字筷子时才能就餐。那么就可能出现五人都无法就餐的情形。即,大家都在持有别人想要的资源,且在等待别人的资源,又在得到前不会放弃手里的资源。锁顺序死锁当两组任务以不同的顺序来获取两个锁,那么就有可能发送死锁。动态锁顺序死锁原理和上面类似,就是任务获取锁的顺序有时候相同,有时候不同。资源死锁

2021-05-10 17:03:55 74

原创 对spring security的理解

对spring security的理解要想搞清楚springsecurity 最好的切入点 是搞清楚 security的认证流程。这才是这个知识的主干。主要原理spring security 是基于servlet的filter。核心类框架的魅力就在于,它即是方便也是限制。所以为了能用上它的方便,我们就得接受它的限制。要想搞清楚认知流程 又得先说说几个核心类。首先我们得实现一个继承了UserDetail的类,表示用户的一些基本信息,用户名,密码,角色等信息。然后实现一个UserDetailSe

2021-05-10 17:01:51 253

原创 对java流的理解

是离散还是连续?什么是流?流是流水线的流 是离散的流 不能 理解为 连续的流而离散的基本单位byte我们不能再次踏入同一条河流对于inputstream 是不可重复读取的 他不是数据源 它像一个水管,打开水龙头 放水 水放完 结束。但是有时候我们又需要重复读取流,我们可以采取重新获取流的方式是输入还是输出?在java中有两种流 一种是in 一种是 out 。有时候我们会对他们的方向很迷惑 但是我们只需要抓住一点in提供read方法 它把数据 一byte 一 byte的返回出来out提供

2021-05-10 17:00:32 98

原创 迭代器与ConcurrentModificationException

正如这个异常所示,它的目的是为了避免并发条件下的,一个线程正在对一个集合进行遍历,但是另一个线程却对这个集合的结构进行了修改,即进行了添加 删除操作。本质上就是,这些操作会影响一个modcount的值,而我们在使用迭代器的next方法时,会把预期的modcount和这个modcount做比较,若不一样就会抛出这个异常。这种机制叫 快速失败 它出现在java.util包下的集合类。而java.util.concurrent包却不会出现这个错误。所以我们可以选择并发安全容器。如ConcurrentHashMa

2021-05-08 10:19:24 106

原创 java线程中断

java线程中断我们在用线程执行一些任务的时候,可能会遇到要求停止该任务的要求。这里有两个思路标志量一是用标志量 即 在任务内部的某个执行点去判断一个标志量,当该任务执行到该执行点时,且标志判断为需要终止 就可以通过主动抛出一个中断异常来结束该任务。具体实现上,我们可以使用一个volatile修饰的变量来充当这个标志量。线程的中断线程的中断是一种协助式的,我们要理解什么是协助式的,即它需要另一个线程来帮助它 中断。且我们应该注意 这个中断机制是通过interrupt函数,但它只是修改了Thre

2021-05-08 10:15:27 49

原创 给idea装上docker插件

给idea装上docker插件一. 前言当我们给idea 装上docker插件,并做好相应的配置后,打包镜像和上传变得如此丝滑,我们只要做通过maven做一下打包操作,这一切都被完成了。二. 配置服务器我们在本地打包 生成镜像 上传到远程的docker中,自然需要开放远程相应的端口,现在我们就来做这个动作vim /usr/lib/systemd/system/docker.service# 在ExecStart=/usr/bin/dockerd 后面追加-H tcp://0.0.0.0:237

2021-03-29 19:18:38 391

原创 使用docker部署msyql,redis,nacos,nginx

使用docker部署msyql,redis,nacos准备安装docker在部署之前,可能我们的主机上还没有docker ,现在我们先装上docker我们使用yum来安装docker安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的sudo yum install -y yum-utils device-mapper-persistent-data lvm2设置yum源sudo yum yum-config

2021-03-28 15:48:31 312 1

原创 docker数据卷

docker数据卷简介所谓数据卷 就是把host的文件夹借给容器 容器对host的文件夹进行数据读写。这样的好处就是避免容器挂掉后 至少数据被持久化在了主机的磁盘上 不会导致数据丢失。使用如上图所示, 这是一个redis的docker-compose文件里的例子。前面的路径就是主机的文件夹,后面对应的/data就是容器的文件夹。这样本来要写到/data里的数据就会被写到主机的文件夹里去。问题在实践过程中遇到启动失败的问题 通过查看容器日志 发现operation not permitte

2021-03-25 19:15:20 65

原创 日志基本概念

日志基本概念1.故事的开始故事开始于我自己的项目,我习惯性的在一个类上注上了@slf4j注解,但是当我在代码中用log去调用info方法时,却没有可供调用的方法。想了一会我就明白了,因为slf4j是一个标准api,它没有具体的实现,我需要再引入日志库。之前一直没有认真梳理过日志相关的知识,今天来好好总结下。2.关键词在现如今的日志系统里,有三个关键词是需要我们理解的2.1 日志门面设计模式是个好东西,框架有了它,就会变得有魅力。日志框架的设计就用到了门面设计模式。我们前面提到的slf4j就是

2021-02-27 18:54:31 129

翻译 MQTT 发布,订阅 和 取消订阅-MQTT核心系列:第四章

MQTT 发布,订阅 和 取消订阅-MQTT核心系列:第四章作者:HiveMQ 团队翻译:索隆有几把刀欢迎来到MQTT核心系列的第四章。这个系列一共有十章,用来介绍MQTT的核心特性和概念。在这一章中,我们将着眼于MQTT中的发布,订阅和取消订阅。再前面的文章中,我们讲解过订阅发布模式的基本知识。在这一章,我们将深入到MQTT协议中的发布订阅系统的细节中去。如果你还没有读过发布订阅模式的基本知识,我们强烈建议你先去读一下前面的文章。上周,我们了解了MQTT客户端与代理之间的连接的建立。这周我们将在此

2021-02-24 23:12:43 1890 1

翻译 客户端,代理,连接的创建 - MQTT 核心系列: 第三章

客户端,代理,连接的创建 - MQTT 核心系列: 第三章作者: HiveMQ Team翻译: 索隆有几把刀欢迎来到《MQTT 核心系列》的第三章,这个系列一共有十章,用来介绍MQTT的核心特性和概念。在这一章中,我们将讨论MQTT中的角色,客户端和代理,以及当你连接到代理时候可用的一些参数和配置项。在上篇文章中,我们讲述了发布订阅模式是如何工作的,以及它是如何应用在MQTT上的。接下来我们快速回顾下核心概念:发布订阅模式让消息发送方和消息接受方解耦MQTT使用主题来决定消息应该被投送给谁。一

2021-02-24 23:10:39 418

翻译 推送 & 订阅 - MQTT 核心系列: 第二章

推送 & 订阅 - MQTT 核心系列: 第二章作者:HiveMQ 团队翻译:索隆有几把刀欢迎来到《MQTT 核心系列》的第二章,这个系列一共有十章,用来介绍MQTT的核心特性和概念。在这个系列的第一章中,我们介绍了MQTT,谈论了它的历史和由来。假如您还没有阅读第一章,您最好去读一读。发布订阅模式发布订阅模式为传统的客户/服务器(后面以c/s代替)模型提供了一种替代方案。在c/s模型中,客户端会直接与终端交互。但是发布订阅模式能让发送消息的客户端与接受消息的客户端解耦。消息发布者和消息订

2021-02-24 23:09:15 461

原创 @Validated Group 分组

参数校验@Validated我们在参数校验的时候会在Spring mvc的参数上加上诸如@NotBlank @NotNull @Min等注解,然后在handle中加上@Validated来表示对参数的检查但是有一种情况我们难以处理 比如在更新的时候id是notNull 但是 新增的时候却不需要这个校验这个时候我们就需要引进另一个概念了 校验分组。为了实现校验分组 有如下几个步骤声明分组类public interface insert{}public interface

2021-02-23 14:31:11 3307 1

翻译 存活 和 客户端接管 - MQTT 核心:第十章

存活 和 客户端接管 - MQTT 核心:第十章欢迎来到MQTT核心系列的第十章。这个系列一共有十章,用来介绍MQTT的核心特性和概念。在这章中,我们将讨论MQTT的存活特性并且说明为什么这个特性对于移动网络是至关重要的。半开放TCP连接的问题MQTT是基于TCP(Transmission Control Protocol)协议的。这个协议能保证数据包能在网络中以一种可靠,有序,检错的方式传输。但是通讯双方有可能会出现不同步的情况。例如,其中一方崩溃或者发生传输错误,在TCP中,这种未完成的连接状态叫

2021-02-17 17:30:37 343

翻译 遗言 - MQTT 核心系列:第九章

遗言 - MQTT 核心系列:第九章欢迎来到MQTT核心系列的第九章。这个系列一共有十章,用来介绍MQTT的核心特性和概念。在这一章,我们将讲解MQTT中的遗言特性。因为MQTT会运行在网络不好的环境中。可以合理的假设,在这些环境中,客户端偶尔会不正常的断开连接。原因包括连接丢失,电量为空等等。了解客户端是正常断连(发送了DISCONNECT消息)还是非正常断连(没有发送DISCONNECT消息),这对你正确做出响应有帮助。遗言特性为客户端对非正常断连做出响应提供了合适的途径。遗言在MQTT中,你可

2021-02-17 17:30:04 887

翻译 保留消息 - MQTT 核心:第八章

保留消息 - MQTT 核心:第八章欢迎来到MQTT核心系列的第八章。这个系列一共有十章,用来介绍MQTT的核心特性和概念。在这章,我们将介绍保留消息。在MQTT中,客户端是无法保障订阅方能确切收到消息的。发布方唯一能确认的是消息被安全的投送到了代理哪里。相应的,订阅方也面临着类似的问题。订阅方不知道下一次发布方推送消息是什么时候。可能是几秒之后,也可能几分,或者是几小时等。在发布方推送下一条消息前,订阅方都不知道此时主题是什么状态。在这种场景下,保留消息就该上场了。保留消息保留消息就是一个保留标志

2021-02-17 17:29:12 249

翻译 持久化会话和队列消息 - MQTT核心:第七章

持久化会话和队列消息 - MQTT核心:第七章作者:HiveMQ Team翻译:索隆有几把刀欢迎来到MQTT核心系列的第七章。这个系列一共有十章,用来介绍MQTT的核心特性和概念。在这一章中,我们将讨论持久化会话和在MQTT中的消息队列。虽然按照定义,MQTT不是一个消息队列,但是它能为客户端将消息入列。我们将为你展示如何做到这点。持久化会话为了接受从代理来的消息,客户端会连接代理并订阅感兴趣的主题。假如客户端和代理是非持久化会话,那么一旦客户端与代理之间的连接中断,当客户端重新连接后,也需要重新

2021-02-17 17:27:33 799

翻译 服务质量 0,1,2 - MQTT 核心系列:第六章

服务质量 0,1,2 - MQTT 核心系列:第六章作者:HiveMQ 团队翻译:索隆有几把刀欢迎来到MQTT核心系列的第六章。这个系列一共有十章,用来介绍MQTT的核心特性和概念。在这一章中,我们将讲解MQTT中的不同的服务质量。我们在先前的文章中已经多次提到过服务质量,现在让我们来深入了解下吧。服务质量什么是服务质量服务质量是消息发送方和消息接收方之间的一种约定,它定义了特定消息的传递保证的等级。一共有三种等级:最多一次(0)至少一次(1)刚好一次(2)当你在讨论服务质量的时候,

2021-02-17 17:26:22 429 3

空空如也

空空如也

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

TA关注的人

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