自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

爱欧米

好记性不如烂笔头

  • 博客(223)
  • 资源 (4)
  • 问答 (1)
  • 收藏
  • 关注

原创 1.软件开发方法

式。在DDD实践过程中,需要实现适当的持久化模式,确保模型的正确性和一致性。敏捷开发和瀑布模型是最常用的两种开发模式。

2023-06-02 17:36:55 853

原创 1.操作系统总结

什么是进程调度进程调度的目的是:进程调度是指操作系统决定进程在处理机上运行的顺序和方式,负责为多个进程分配CPU时间并调度它们的运行。进程调度的主要目的是提高处理机的利用率,增加系统的吞吐量和响应速度,提高系统的交互性和并发性,保证系统资源的公平分配。操作系统调度有以下几种常见的策略:1、先来先服务调度(FCFS):按照进程到达系统的先后顺序进行调度,先到先服务。2、最短作业优先调度(SJF):按照进程的运行时间短暂程度排序,最短作业优先调度。

2023-06-02 17:32:21 816

原创 2.Elasticsearch使用优化原理总结

Elasticsearch Mapping 是一种定义索引中文档结构的方式。它描述了每个字段的名称、数据类型、存储方式、索引方式、分析器等属性,帮助 Elasticsearch 了解文档中的数据,从而更好地执行搜索和聚合操作。在 Elasticsearch Mapping 中,可以定义文档中每个字段的数据类型、存储方式、索引方式、分析器等属性。数据类型:字符串、整数、浮点数、布尔值、日期等;存储方式:是否存储源文档、存储方式等;索引方式:是否被索引、索引时采用何种分析器、是否采用倒排索引等;

2023-06-02 15:03:32 1112

原创 2.java容器、多线程、JVM、类加载总结

在 Java 中,每个线程都有一个上下文类加载器(Context ClassLoader),可以通过 Thread.getContextClassLoader() 方法获取。上下文类加载器是一种与双亲委托模型无关的类加载器,它可以用来打破双亲委托模型,从而使得某些类可以使用特定的类加载器进行加载,而不受默认的双亲委托规则的限制。通过 Thread.currentThread().setContextClassLoader() 方法可以将上下文类加载器设置为指定的类加载器。

2023-06-02 11:04:18 419

原创 4、Spring & SpringBoot总结

Map<String, Object> singletonObjects: 一级缓存,也就是我们平常理解的单例池,存放已经完整经历了完整生命周期的bean对象。Map<String, Object> earlySingletonObjects: 二级缓存,存储早期暴露出来的bean对象,bean的生命周期未结束。(属性还未填充完)> > singletonFactories: 三级缓存,存储生成bean的工厂二级缓存可以解决没有aop的循环依赖。核心思路是使用二级缓存来提前曝光创建过程中的对象。

2023-05-31 14:18:34 631

原创 2.算法与数据结构

排序算法平均时间最差时间稳定度额外空间备注冒泡排序O(n²)O(n²)稳定O(1)n小较好插入排序O(n²)O(n²)稳定O(1)n小较好选择排序O(n²)O(n²)不稳定O(1)n小较好交换排序O(n²)O(n²)不稳定O(1)大部分数据已经排序好快速排序O(nlogn)O(n²)不稳定O(nlogn)n大时较好基数排序O(nlogrn)O(nlogrn)稳定O(n)n是真数,r是基数桶排序O(nlogn)

2023-05-30 14:46:58 664

原创 1.场景设计题

熔断状态下,服务进入不可用状态,此时有少量的流量侦探服务状态,如果服务没有恢复继续熔断服务访问量如果超过某个阈值,超过限制部分的流量直接拒绝掉熔断状态或者主动关闭服务部分模块,保留主要功能的方式,就是服务降级的一种方式Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。可以使用这两个对象来包裹待执行的任务。用与依赖服务返回单个操作结果的场景,而。

2023-05-29 16:31:09 1910

原创 7、行为模式-观察者模式

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知,zookeeper watcher通知用的就是此模式。使用面向对象技术,可以将这种依赖关系弱化。在抽象类里有一个 ArrayList 存放观察者们。1、拍卖的时候,拍卖师观察最高标价,然后通知给其他竞价者竞价。

2023-05-23 16:57:28 436

原创 0、Java开发常见(并发,JVM)

并发问题 详解 请谈谈你对volatile的理解 link CAS你知道吗? link 原子类Atomiclnteger的ABA问题谈谈?原子更新引用知道吗? link 我们知道ArrayList是线程不安全,请编码写一个不安全的案例并给出解决方案 link 公平锁/非公平锁/可重入锁/递归锁/自旋锁谈谈你的理解?请手写一个自旋锁 link CountDownLatch/CyclicBarrier/Semaphore使用过吗? link

2023-05-01 17:03:33 893 1

原创 10、Mysql常见问题

自适应哈希索引是Innodb引擎的一个特殊功能,当它注意到某些索引值被使用的非常频繁时,会在内存中基于B-Tree所有之上再创建一个哈希索引,这就让B-Tree索引也具有哈希索引的一些优点,比如快速哈希查找。这是一个完全自动的内部行为,用户无法控制或配置使用命令查看INSERT BUFFER AND ADAPTIVE HASH INDEX多叉树(multiway tree)允许每个节点可以有更多的数据项和更多的子节点。2-3树,2-3-4树就是多叉树,多叉树通过。

2023-04-25 15:14:00 1204

原创 1、集群种类

一个集群只有一台主机,其他的节点都是从机的模型,从机可能什么活都不干,只负担主机的后备,也可能做一些任务型的工作,这部分工作不会关系数据的事务。HA什么活都不干的集群:Canal,HA做部分活的集群:Kafka、ES主从模式集群等。HA重点侧重于高可用性,对数据一致性关注高。

2023-03-27 13:46:00 385

原创 8、LSM树

最近在调研NoSQL数据库,发现RocksDB、LevelDB、HBase以及Prometheus等,其底层的存储引擎都是基于LSM树,于是决定花时间彻底吃透LSM树这一数据结构。不幸的是,在查阅资料学习的过程中,发现网上各种文章汗牛充栋、抄来抄去,不是文不对题就是不知所云。一气之下决定自己写一篇出来消消气,便有了这篇文章。。。PS:学了这么多数据结构,LSMTree应该是最年轻的一个,它在1996年被设计出来(属老鼠的),年纪比我还小~

2023-03-10 00:19:20 383

原创 6、Elasticsearch优化

预处理节点,主要是对数据进行预处理,比如对字段重命名,分解字段内容,增加字段等,类似于Logstash, 就是对数据进行预处理,ingest里面可以定义pipeline(管道),pipeline可以由很多个processor(官方预定义28个)构成,用来出来预处理数据,使用方式:先定义好预处理pipeline,然后在存储数据的时候指定pipeline,如:成为ingest node的方式 node.ingest:true 默认(true)当写索引时,需要把写入的数据都同步到副本节点,

2023-03-09 22:01:27 463

原创 1、netty百万连接设计及优化

理论上系统内存有多少就可以打开多少的文件描述符,但是在实际中内核是会做相应的处理,一般最大打开文件数会是系统内存的10%(以KB来计算),称之为系统级限制。这个数字可以通过 cat /proc/sys/fs/file-max 或者 sysctl -a | grep fs.file-max 命令查看。:用户打开文件描述符默认是1024,文件描述符范围1-65535,这个数字可以通过 ulimit -n查看,可以在65535范围内调整。

2023-02-22 09:51:41 2807

原创 2、centos7修改最大文件数

file-max的值要大于nr_open,如果不修改nr_open,那么file-max至少要大于1024*1024(nr_open的默认值)

2023-02-21 17:35:03 1776

原创 5、GCRoot作用及遍历算法

以GC Roots为根节点,根据引用关系向下搜索,搜索过程走过的路径称为引用链,如果某个对象到GC Roots之间没有引用链相连,那这个对象就是可回收的垃圾对象。我们知道Java堆里面有未被引用的、已被引用的两类对象,问题是我们有什么依据判断谁是垃圾对象需要被回收?换句话说,我们如何判断一个对象被引用?这就需要我们从一个点出发找出他所有的引用对象。这个点就是GCRoot。GCRoot的作用就是从这点出发,找到所有的可到达的引用对象,且这个对象必须不能是待回收的对象。我们知道JVM结构有 栈、方法区、本地方法

2022-12-19 01:26:22 437

原创 8、java常见名词总结

JNI是Java Native Interface的缩写,是使用Java调用系统本地接口、及定制的C、C++语言的接口的方案,可以确保代码在不同的平台上方便移植。从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。本地代码与 Java 虚拟机之间是通过 JNI 函数实现相互操作的。JNI 函数通过接口指针来获得,本地方法将 JNI 接口指针当作参数来接受。

2022-12-18 20:29:40 340

原创 2、Elasticsearch集群种类

整个集群的管理者、索引管理、分片管理,以及整个集群的状态的管理,master节点是从master候选节点中选出的,成为master候选节点的方式:node.master:true 默认(true)

2022-11-28 22:44:36 1001

原创 9、分布式架构种类

集群目前可以分3类,高可用性集群(High Availability Cluster)HA、负载均衡集群(Load Balance Cluster)LB、高性能集群(High Performance Computing Cluster)HPC,这3类集群有什么区别呢?

2022-11-21 16:06:46 549

原创 8、RedLock协议

RedLock是redis分布式锁用到一个协议,其也是用于校验分布式数据一致性且高可用。故我给安排到这里一起说,查阅资料其并不是分布式系统的常用协议,不是他也用到paxos思想了。

2022-11-21 16:03:48 124

原创 7、2pc、3pc协议

提交分为3段,第一段提交前检查资源、第二段事务提交、第三段事务事务回滚。数据库3阶段提交解决分布式事务的tcc协议就是一个3pc案例。就是提交分为2次,第一段确认提交、第二段事务回滚。数据库2阶段提交解决分布式事务的saga协议就是一个2pc案例。

2022-11-21 16:01:17 174

原创 6、Raft协议

我看别人写的论文看着太复杂,自己就自己的理解总结下raft协议。raft和zab主流思想一直,但是在角色、消息同步、消息读、崩溃时刻处理方式不一样,比zab实现更简单。

2022-11-21 15:58:45 347

原创 5、Zab协议

zab协议很多书写的超级复杂,真心看不下去。协议分析要抛弃实现的逻辑单独讨论协议,很多书夹杂太多源码分析了。zab 在消息。

2022-11-21 15:34:02 808

原创 4、paxos协议

Paxos算法是一个高容错性的分布式一致性算法。Paxos算法的作者在1982年提出的。下面的分布式协议个人感觉也是借鉴paxos。

2022-11-21 15:12:41 356

原创 3、中间件与数据库-BASE理论

总的来说,BASE理论面向的是大型高可用可扩展的分布式系统,和传统的事物ACID特性是相反的,它完全不同于ACID的强一致性模型,而是通过牺牲强一致性 来获得可用性,并允许数据在一段时间内是不一致的,但最终达到一致状态。但同时,在实际的分布式场景中,不同业务单元和组件对数据一致性的要求是不同 的,因此在具体的分布式系统架构设计过程中,ACID特性和BASE理论往往又会结合在一起。最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。这就是损失部分可用性的体现。

2022-11-21 14:59:05 333

原创 2、中间件-CAP理论

一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

2022-11-21 14:55:16 352

原创 1、数据库-ACID理论

ACID理论是对事务特性的抽象和总结,方便我们实现事务。也就是说,如果我们使得一组操作具有ACID特性,那么这组操作就可以称之为事务。在单机上,可以通过锁、时间序列等机制保障操作的顺序执行,让系统实现ACID特性。ACID理论是数据库为了。

2022-11-21 14:44:34 442

原创 21、Redis 管道通讯性能测试

客户端批量提交Redis指令,避免网络通讯开销。

2022-11-21 11:06:52 124

原创 6、行为型模式-责任链模式

避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。在处理消息的时候以过滤很多道。拦截的类都实现统一接口。Handler 里面聚合它自己,在 HandlerRequest 里判断是否合适,如果没达到条件则向下传递,向谁传递之前 set 进去。1、红楼梦中的"击鼓传花"。

2022-11-17 09:17:42 129

原创 17、Redis、Zk分布式锁实现原理

我们在编程有很多场景使用本地锁和分布式锁,但是是否考虑这些锁的原理是什么?本篇讨论下实现分布式锁的常见办法及他们实现原理。

2022-11-15 18:21:25 767

原创 12、锁-java对象头与锁优化与GC

HotSpot中,对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。

2022-11-13 09:56:26 425

原创 12、Bootstrap和ServerBootstrap啥关系

Bootstrap是Netty提供的一个便利的工厂类,可以通过它来完成客户端或服务端的Netty初始化。先来看一个例子,从客户端和服务端分别分析Netty的程序是如何启动的。首先,从客户端的代码片段开始。复制上面的客户端代码虽然简单,但是展示了Netty客户端初始化时所需的所有内容。(1)EventLoopGroup:不论是服务端还是客户端,都必须指定EventLoopGroup。在这个例子中,指定了NioEventLoopGroup,表示一个NIO的EventLoopGroup。(2)Channel

2022-11-10 19:01:47 631

原创 9、EventLoop

Netty 高性能的奥秘在于其 Reactor 线程模型。EventLoop 是 Netty Reactor 线程模型的核心处理引擎,那么它是如何高效地实现事件循环和任务处理机制的呢?

2022-11-10 18:11:52 101

原创 10、EventloopGroup和EventLoop啥关系

在netty中不管是服务器端的ServerBootstrap还是客户端的Bootstrap,在创建的时候都需要在group方法中传入一个EventLoopGroup参数,用来处理所有的ServerChannel和Channel中所有的IO操作和event。可能有的小伙伴还稍微看了一下netty的源码,可能会发现还有一个和EventLoopGroup非常类似的类叫做EventLoop。那么EventLoopGroup和EventLoop有什么关系呢?他们的底层和channel的交互关系是怎么样的呢?

2022-11-10 17:36:20 162

原创 8、Netty核心组件介绍

基础的IO操作,如绑定、连接、读写等都依赖于底层网络传输所提供的原语,在Java的网络编程中,基础核心类是Socket,而Netty的Channel提供了一组API,极大地简化了直接与Socket进行操作的复杂性,并且Channel是很多类的父类,如EmbeddedChannel、LocalServerChannel、NioDatagramChannel、NioSctpChannel、NioSocketChannel等。Netty中的所有IO操作都是异步的,不会立即返回,需要在稍后确定操作结果。

2022-11-10 14:39:12 168

原创 100、网关详细设计文档

算法的思想是在2的32次方的范围将7200秒均匀分配在环上,当工控握手的时候会在环上获取一个时间点作为自己重启的时间点。长连接数写入元数据,方便后续做最小连接数上线算法,也可以获取机器在线的工控数量,让我们知道每台机器的负载情况。当工控握手的时候获取工控机的vemId的hashcode,在hash环上获取一个hash段,然后获取hash段的firstKey作为目标的key,取value就是工控重启的时间点。通过获取在线的服务节点上的长链接数,如果链接最多的节点的链接数比最少的多20%则触发控制。

2022-11-09 21:22:09 1180

原创 7、Netty 调用链及设计模式及协议支持

netty服务端创建时序图

2022-11-09 17:56:14 253

原创 6、Netty ByteBuf工作原理

特点是内存的分配和回收速度快,可以被 JVM自动回收;缺点就是如果进行Socket的I/O读写,需要额外做一次内存复制,将堆 内存对应的缓冲区复制到内核Channel中,性能会有一定程度的下降。非堆内存,它在堆外进行内存分配,相 比于堆内存,它的分配和回收速度会慢一些,但是将它写入或者从Socket Channel中读取 时,由于少了一次内存复制,速度比堆内存快。正是因为各有利弊,所以Netty提供了多种ByteBuf供开发者使用,经验表明,ByteBuf 的最佳实践是在I/O通信线程的读写缓冲区使用Dir

2022-11-09 17:50:48 244

原创 5、NIO-Bytebuffer内存结构

因为文件读写、网络通讯等数据都是以流的形式一点点到目的地的,所以需要一个缓冲区承接流.缓冲区(Buffer)就是在内存中预留指定大小的存储空间用来对输入/输出(I/O)的数据作临时存储,这部分预留的内存空间就叫做缓冲区.举个简单的例子,比如A地有1w块砖要搬到B地,由于没有工具(缓冲区),我们一次只能搬一本,那么就要搬1w次(实际读写次数),如果A,B两地距离很远的话(IO性能消耗),那么性能消耗将会很大,但是要是此时我们有辆大卡车(缓冲区),一次可运5000本,那么2次就够了,相比之前,性能肯定是大大提高

2022-11-09 17:46:26 457

原创 4、Netty 线程模型

netty其实就是一个单线程、多线程的外壳,包裹这jdk的 bio、nio实现。bio虽然是同步阻塞io,但是如果有多线程支持一样的可以做到同时支持多个客户端。nio天生就支持多个客户端,netty将接受请求线程、工作线程分开处理。boss线程池创建打开select监听, NioEventLoop继承多线程ScheduledExecutorService,在run方法实现了获取nio selectKey状态的方法processSelectedKeys.后续调read()封装ByteBuf在保存在堆外内存.

2022-11-09 17:34:32 703

iterm mac平台最好用的shell工具

iterm mac平台最好用的shell工具

2022-09-14

mac 版本redis访问皮肤

mac 版本redis访问皮肤

2022-09-14

es-head工具es管理工具

es head 懂的都懂

2022-09-14

mac版本网络调试助手工具

netty 开发必备工具简单轻便

2022-09-14

spring cloud dubbo整合

spring cloud ,dubbo ,mybatis , druid ,generator 整合,代码已经测试通过

2018-03-11

eWebEditor例子.rar

一个eWebEditor应用的小例子

2012-11-14

MAC查看器,ip查看,源代码

mac查看,ip查看及其代码,快速调出QQ,浏览器,vs,播放器等!快速关闭QQ,浏览器,vs,播放器等

2011-04-14

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

TA关注的人

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