- 博客(27)
- 资源 (7)
- 收藏
- 关注
原创 关于Raft算法的共识性算法考究
文章目录前言Raft算法选举Raft算法数据一致性前言Raft算法为主从结构, 其分布式一致性来源于集群的写全委托给Leader, Leader进程自身保证顺序与一致性, 并发起投票要求Follower追加写, 一旦过半赞成写请求(同时附加写的动作), 则该写完成。.需要注意的是, 集群的写是线性一致性/强一致性的, 但是集群的读却是顺序一致性的。这两天想到一个问题, raft算法的成员共识性问题。我之前的理解是:Raft有共识性问题。 当未实现所有日志提交的Follower,之后被选举为新
2020-05-11 18:01:27 1042
原创 Alibaba Sentinel 限流、熔断实现详解
文章目录前言限流快速失败限流(普通限流)滑动窗口热加载限流(WarnUp)前言这篇文章是 Alibaba Sentinel熔断降级/限流框架不完全解析 的附属文章。讲的是其限流、熔断的实现。本文主要讲算法实现, 跟Sentinel关系不大, 无需对Sentinel加以了解本文会辅以部分源码解析, 源码在git 上: https://github.com/alibaba/Sentinel...
2019-12-25 19:16:26 1689
原创 Java synchronized之类锁/对象锁
**Java的 `synchronized` 锁的是对象,也只锁对象**。对象锁是基于对堆内存内对象的头部加锁信息; 类锁是基于对类对应的 java.lang.Class对象加所信息; 特别的, synchronized(this) 是对this所对应的对象加锁。需要特别注意的事是, 根据JMM的规范, synchronized 块里面的对象, 具有内存可见性。
2017-11-03 18:24:15 10960
原创 Java中的公平锁和非公平锁实现详解
Java语言中有许多原生线程安全的数据结构,比如`ArrayBlockingQueue`、`CopyOnWriteArrayList`、,它们的实现方式并非通过`synchronized`关键字,而是通过`java.util.concurrent.locks.ReentrantLock`来实现。 本博客着重讲述ReentrantLock的可重入性原理、公平/非公平实现、内存可见性原理。
2017-04-24 16:09:18 31616 11
原创 Spring Bean的生命周期
Spring作为当前Java最流行、最强大的轻量级框架,受到了程序员的热烈欢迎。准确的了解Spring Bean的生命周期是非常必要的。我们通常使用ApplicationContext作为Spring容器。这里,我们讲的也是 ApplicationContext中Bean的生命周期。而实际上BeanFactory也是差不多的,只不过处理器需要手动注册。
2017-03-07 13:36:29 6590 1
原创 【无标题】
官方知识库提示不支持缩容, 但实际也可以操作,需要再插入一个安装了 ubuntu server 的U盘, 启动 ubuntu server, 试用, 使用ubuntu进行操作。默认的目录位于 /home/LinuxBrew, 会占用 / 路径的大量磁盘空间,如上, 可安装brew,但无需尝试安装apt-get、yum, 成本很高。群晖上默认不带包管理工具的, 也不要尝试安装apt、yum, 不好用,咨询群晖的官方客服, 提示无此功能, 但实际上可以使用。步骤(假设你操作的存储空间的磁盘名为。
2024-04-26 11:07:58 295
原创 SpringWeb Flux + Netty,基于Reactive线程切换(教程)
这里写自定义目录标题前言及问题描述Netty的EventLoopEventLoop怎么承担负载的Netty Server运行阶段Netty Client运行阶段分拆Netty Http Client前言及问题描述我们的项目是 Spring Cloud的,使用netty做Http容器。 Web形式是 Spring Web Flux, 自然而然的就用上了Reactive。netty在性能上非常优异, 比如它的内存管理、nio/epoll(linux)。 它只需要很少的线程(epoll/noi线程, wo
2022-03-08 18:24:36 2912
原创 Redis Cluster集群增容和缩容
文章目录前言基于slots槽的redis cluster增容slots基本概念slot 在redis结点上的位置并不固定slot迁移四步走搭建redis cluster, 并手动操作增容下载redis安装启动多个redis组装redis cluster扩容实操缩容前言本文以手动操作redis cluster集群为例, 讲解并证明redis cluster的增容和缩容。redis分三种模式:主从主从 + Sentinel(哨兵)cluster主从模式不是分布式一致性里面的主从,需要手动指定M
2020-05-10 14:15:04 576
原创 JDK1.8-ConcurrentHashMap的 rehash 扩容逻辑
文章目录前言ConcurrentHashMap resize/rehash1. 什么时候resize2. 怎么resizeHashMap resize/rehashRedis resize/rehash前言此乃随笔, 用于记录ConcurrentHashMap的扩容逻辑, 这位大神 JDK1.8–深度分析CONCURRENTHASHMAP原理分析 的文章给了我莫大的鼓励。顺带, 记录了Has...
2020-04-01 02:12:40 1830
原创 Alibaba Sentinel熔断降级/限流框架不完全解析
Alibaba Sentinel熔断降级/限流框架不完全解析关于Alibaba Sentinel熔断降级/限流框架一段话的Sentinel介绍新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的...
2019-07-25 11:05:30 5990
原创 Mybatis 实现原理之 一二级缓存
文章目录引言引言对Mybatis一直都没有做实质的记录。 现记录Mybatis的一些实现细节。组成一个系列。本片文章讲述的是Mybatis是如何无感知的让用户使用到一二级缓存,以及一二级缓存的实现细节和实现原理。结论:Mybatis下文通过代码DEMO的展示, 以及源码的解说介绍JDK动态代理, 和Mybatis对其的应用。...
2018-10-15 15:19:20 5698 1
原创 Mybatis 实现原理之 JDK动态代理和XML语句执行
用Mybatis+Spring框架,通过XML的编写和接口的编写,实现数据库的CRUD。 这个操作分为如下两拨:1.解析XML, 获取每条SQL语句;组装id(namespace + 每个SQL的id)。2.扫描Mybatis的Mapper接口, 得到id(接口名称 + 方法名称)。在执行Mapper的方法的时候:1.得到注入的Spring Bean(这个Bean是Mybatis通过JDK动态代理生成的)。2.执行Bean方法(通过Bean里面的id找到具体的SQL,并执行)。
2018-10-10 20:33:38 11211 1
原创 Java如何访问Jar包内部的Jar包资源
引言Java 命令Java 启动进程的命令的组成Java 命令的执行过程Java 传参中的 classpath 不生效Java 的Jar包 的类加载如何使得Java程序读取Jar包内部的Jar包Spring Boot的Jar包内类加载原理Java启动命令推荐方案不处于 Maven 仓库环境下处于 Maven 仓库环境下引言日常撸代码,肯定会遇见这样...
2018-05-21 18:23:00 10966 1
原创 判断一个文件是不是UTF-8编码的文本文件的Java实现
前言 为什么写这篇博客?闲来没事看到了老代码,发现有一段的文件是否未UTF-8编码的实现很有趣。 同时联想到这段代码的学习者可以通过这段代码去了解 字符集 和 编码方式。 因此供给大家参考。 这篇博客的功能?这篇博客针对于磁盘上的一个文件(可能是图片,也可能是视频、音乐、Excel、可执行程序等), 判断它是不是一个 UTF-8格式的文本文件 这篇博客全面么?...
2018-03-09 17:57:41 3553
原创 Java NIO 随笔
NIO和BIO是同源的,且NIO也是基于BIO的。BIO的几个问题,NIO在技术层面上做了规避。可以把 NIO理解为BIO的聚合,把IO操作交给了操作系统去做。阻塞性对比:NIO的不阻塞在于: NIO是等到数据拷贝已经完毕之后才会对数据进行处理。BIO的阻塞在于:BIO对于每次的数据请求都会立即处理。> 由此,NIO可以处理更多的数据,但是每个数据块不要太大(会OOM); BIO可以处理少量但是更大的数
2017-12-07 17:25:44 703
原创 手动清理window的右键菜单和win10启动项
注册表更改桌面空白处-新建鼠标右键文件鼠标右键文件夹删除值鼠标右键IE浏览器注册表更改注意!!! 操作之前需要备份!!!桌面空白处->新建HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\ShellNew注意此处的修改往往会在关闭注册表编辑器之后立马失效。
2017-06-27 12:50:30 38947 2
原创 图解Java类加载机制
前言类加载的概述双亲委派加载机制类加载的隔离机制contextClassLoaderSPI用处找文件用处类加载的顺序顺序概述类加载的一般方式类加载的触发点类的实例化附录前言网上有很多的Java类加载机制的介绍, 但是对于初学者而言看起来都太过于深疏, 因此在本文用图解和例子的方式为本文的读者介绍Java的类加载机制。类加载的概述双亲委派加载机制委派模型介绍: 双亲委派模型
2017-03-24 11:02:01 8828 2
原创 Linux文件系统及文件储存方式
闲来无事复习了下Linux文件系统的基本构成,做下记录。主要涉及的内容有:Ext文件系统的记录方式;Linux文件系统的访问方式;rm删除的原理以及恢复方案。
2017-02-08 20:05:54 5301 1
原创 Spring PropertySourcesPlaceholderConfigurer工作原理
前言Spring生命周期元素注入时机数据来源配置Bean方式Spring标签方式引申数据源配置Spring Value注入流程前言Spring提供配置解析功能,就是这种:<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-meth
2017-01-10 15:05:23 16038 1
原创 Docker学习二(部署一个可以自由获取环境变量的SpringWeb)
安装不是目的, 应用才是王道。 发布一个快速部署的Web容器才是Docker的用处。当前有需求:Tomcat启动在Docker容器中,它需要告知注册中心自己暴露对外的Host以及Port。 传统的方式只可以获取到Tomcat启动时绑定的端口, 需要获取Docker对外映射的宿主机的Host以及开放的端口。
2016-05-16 17:48:36 3670
原创 Docker学习一(安装docker并构建一个可ssh登录的镜像)
为什么使用Docker?因为公司的服务将要部署到基于Docker的应用上。 . . . 当然不是这样咯, Docker的好处可以多多通过搜索引擎查询得到, 用过的人都说好。Docker的镜像可以随意拷贝分发, 需要做的仅仅是可以连接的网络。
2016-05-15 15:38:54 3046
原创 Zookeeper分布式锁小示例
目录 一、引言1.1 为何用分布式锁1.2 怎么用分布式锁1.3 Zookeeper分布式锁简介二、Zookeeper使用案例三、Zookeeper分布式锁小示例3.1 源码展示:3.2 轻量解读3.3 结构重构4. 尾注(2018年9月12日)4.1 本文第二三节的案例描述以及代码分析是错误的!!!4.2 Zookeeper 的分布式锁实现原理...
2016-04-21 11:23:25 1787
原创 RSA加密小示例
1. 前言网上有很多关于RSA的介绍,大神阮一峰 http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html 都写了相关的博客。 为了引出 HTTPS, 编写一个小示例。需要注意的点:欧几里得算法:辗转相除求最大公约数。 如果最大公约数为1, 则两数互素: /** * 欧几里得定理
2016-03-30 15:45:08 621
原创 Linux Ftp上传文件变更(MD5值变更)
最近遇到一个很棘手的问题. 问题很简单:一般情况下使用ftp上传就是这个样子:如下脚本:$ vim copy.sh #! /bin/bashremote_path=远程地址if [ -f $1 ]thenftp -i -n <<UPLOADopen ftp服务器user 账户名 密码put $1 $remote_path$1quitUPLOADfi
2015-11-24 13:41:33 4358
原创 Spring自定义注解实现Controller对象获取
Spring原生提供 @RequestBody用于将客户端传递的Json对象转化为Java Object。 所依赖的就是RequestMappingHandlerAdapter。 它已经被集成在<mvc:annotation-driven /> 之中, 在Spring启动的时候自动注册。但是往往在业务流程中有需求对部分自定义注解进行配置 ,从而实现在Controller中配置一个注解便得到自定义参数的功能。该项功能依赖于RequestMappingHandlerAdapter,需要在"customArgu
2015-01-30 16:46:52 5037 2
原创 linux小命令积累
命令关闭端口sudo iptables -A INPUT -p tcp --dport 25 -j DROP引申:sudo iptables -A OUTPUT -p udp --dport 25 -j ACCEPT编程数组
2015-01-21 12:17:45 609
原创 java堆栈和垃圾回收
java JVM管理的内存被分为了很多块。图片来自http://blog.csdn.net/java2000_wl/article/details/8009362#comments实际上分的块是不止这些的。一般开发者所关心的,和我们只需要关心就,就是堆和栈。堆和栈,顾名思义:采用的数据结构分别是堆和栈。按照编译原理的观点,程序运行时的内存分配有三种策
2014-08-09 18:26:34 2348
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人