自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SOA是什么

SOA 是一种软件设计方法和架构理念,它将应用程序的不同功能单元(称为服务)通过定义良好的接口和契约联系起来。这些服务可以独立部署、独立运行,并且可以通过网络进行通信和交互,以实现特定的业务目标。

2024-10-08 16:51:00 162

原创 Dubbo常见的几个八股题

Dubbo 是一个高性能,轻量级的 RPC 框架,它提供了分布式架构下的服务之间通信方案,使得开发者可以不需要关 心网络通信的细节。通过该框架可以使得远程服务调用方式和本地服务调用方式一样简单。 由 10 层模式构成,整个分层依赖由上至下。 通过这张图,我们也可以将 Dubbo 理解为三层模式

2024-10-08 16:50:40 696

原创 雪花算法相关面试题

Snowflake是一种分布式唯一ID生成算法,旨在解决分布式系统中唯一ID生成的需求

2024-10-07 16:23:47 352

原创 ElasticSearch快速入门

Elasticsearch 是一个基于 Lucene 的开源搜索引擎,提供了一个分布式、多租户的全文搜索引擎,具有 HTTP Web 接口和无模式 JSON 文档。它可以快速地存储、搜索和分析大量的数据。

2024-10-07 16:22:12 932

原创 HashMap底层原理

HashMap的核心是一个动态数组,数组上的每个元素也被称为桶,而桶的索引是通过对键的哈希值进行哈希函数处理得到的。如果只重写 equals 方法,没有重写 hashcode 方法,那么会导致 equals 相等的两个对象,hashcode 不相等,这样的话,这两个对象会被放到不同的桶中,这样就会导致 get 的时候,找不到对应的值。若对应下标有数据,判断是否相同key,是则覆盖value,否则需要判断是否为树节点,是则插入节点,否则尾插法入链表,插入后链表长度大于等于8,则转化为红黑树。

2024-10-06 17:45:00 355

原创 快速了解Java中的15把锁!

锁是一种抽象的概念,用于控制对共享资源的访问。它确保在同一时间只有一个线程可以访问被锁保护的代码块或对象。Java 中的锁可以是显式的(如通过ReentrantLock类实现)或隐式的(如使用synchronized关键字)。

2024-10-06 17:45:00 605

原创 为什么使用元空间替代了永久代

永久代是JVM内存是有上限的,而元空间是存储本地内存里,内存上限比较大。避免频繁出现OOM问题。永久代对象是通过Full GC进行内存清理,元空间是由操作系统内存管理机制处理,简化FullGC,提高性能Oracle 要合并 Hotspot 和 JRockit 的代码,而 JRockit 没有永久代

2024-10-05 17:30:00 561

原创 MySQL 和 Elasticsearch 的应用场景

MySQL 和 Elasticsearch 的应用场景思考:网络设备的各项性能数据每5分钟采集一次,适合用MySQL还是ElasticSearch

2024-10-05 17:30:00 2291

原创 Kafka为啥比RocketMQ快

- • RocketMQ 和 kafka 相比,在架构上做了减法,在功能上做了加法- • 跟 kafka 的架构相比,RocketMQ 简化了协调节点和分区以及备份模型。同时增强了消息过滤、消息回溯和事务能力,加入了延迟队列,死信队列等新特性。- • 凡事皆有代价,RocketMQ 牺牲了一部分性能,换取了比 kafka 更强大的功能特性。

2024-10-04 17:30:00 882

原创 Hotspot是什么?

HotSpot 在性能优化、垃圾回收器的选择和功能、对新的 Java 语言特性的支持等方面可能与其他 JVM 有所不同。例如,HotSpot 的 G1 垃圾回收器在处理大内存应用和减少停顿时间方面具有独特的优势。

2024-10-04 17:30:00 972

原创 倒排索引是什么

什么是正向索引? 基于文档id创建索引。查询词条时必须先找到文档,而后判断是否包含词条什么是倒排索引? 对文档内容分词,对词条创建索引,并记录词条所在文档的信息。查询时先根据词条查询到文档id,而后获取到文档倒排索引的优点在于它可以在O(1)的时间内判断某个文档是否包含某个词,而且还可以基于词频、相关度等统计信息进行搜索结果排序

2024-10-03 09:58:23 653

原创 三色标记算法

三色标记算法是根可达算法的一种实现方案,其目的是为了找出所有可达对象。三色标记算法会产生多标和漏标问题,其中漏标问题最严重。漏标问题会导致本该存活的对象被回收,从而导致严重的程序问题。

2024-10-03 09:57:29 440

原创 B+树和跳表

简单来说,MySQL大量数据,B+树的节点可以存储较多数据,一般三到四层就足够也就只需要三到四次磁盘操作,而跳表为了存储大量数据,需要很多层来优化性能,相同的数据量可能就需要十几二十层,就需要大量磁盘操作。简单来说,Redis主要是基于内存存储数据,io开销小,不太考虑层级,跳表容易实现,且插入删除不需要旋转平衡,只需要修改对应链表指针,范围查找较少能满足Redis使用场景。磁盘存储优化:B + 树的结构有利于减少磁盘 I/O 次数,因为其节点可以存储较多关键字,树的高度相对较低。

2024-10-02 09:53:25 597

原创 算法必学之LRU

实现:一个双向链表,越靠近尾部,最近越少使用,链表节点存储真正的数据key-value。数据集存储在HashMap中,标注头尾节点。核心:最近最少使用的踢出缓存。

2024-10-02 09:44:24 243

原创 “Stop-the-World”(STW)是什么?

STW 是 Java 垃圾回收过程中的一个重要概念,了解 STW 的发生过程和影响,以及采取相应的措施来减少 STW 的时间,可以提高应用程序的性能和响应时间。

2024-09-29 15:36:36 263

原创 垃圾收集器

常见的垃圾回收器: 新生代收集器(高吞吐量): Serial、ParNew、Parallel Scavenge 老年代收集器(SWT停顿时间): Serial Old、CMS、Parallel Old 新生代和老年代收集器: G1、ZGC、Shenandoah由于新生代和老年代垃圾收集的场景不同,所以需要不同的算法。而混合算法,一个就可以针对不同场景

2024-09-29 15:36:15 1306

原创 ToB和ToC项目是什么?

例如,微软的 Office 软件是典型的 ToB 产品,主要面向企业用户,提供办公自动化解决方案;而微信则是一款 ToC 产品,面向广大消费者,提供社交、支付、娱乐等多种功能。

2024-09-28 15:25:13 351

原创 Cookie、Session、Token(JWT)还不懂?

例如,在一个基于 Spring Boot 的 Web 应用中,可以使用 Spring Security 来实现基于 Cookie 和 Session 的身份认证,也可以使用 JWT(JSON Web Token)来实现基于 Token 的身份认证。注册声明:预定义的声明,如 “iss”(issuer,签发者)、“exp”(expiration time,过期时间)、“sub”(subject,主题)、“aud”(audience,受众)等。服务器验证 Token 的有效性,如果有效,则认为用户已经登录。

2024-09-28 15:20:33 844

原创 如何防止订单重复

关键还是需要怎样的Key去保证这样的幂等性,可以通过用户Token+商品URL+指定key为键,保证当前用户,当前商品,还可以加个指定Key,因为可能这个页面也有其他业务(也就是非下单操作)需要保证幂等性。可以通过redis的setNX来保证唯一幂等性,setNX的作用是保存Key,Value时,当Value值为空,就可以正常保存返回true,这样就能保证多次操作只能存储一次值,其他操作都会失败。当然还需要设置过期时间,比如3-5秒,用户一般不会重复提交订单,有也是恶意的,(超过过期时间,就可以再次下单)

2024-09-26 17:30:00 239

原创 Synchronized对字符串上锁?

利用ConcurrentHashMap来为不同的字符串创建独立的锁,以实现对不同资源的并发安全访问。例如,在多线程环境下,如果有多个线程需要对不同的数据集进行操作,而每个数据集可以用一个字符串来标识,就可以使用这种方式来确保对每个数据集的操作都是线程安全的。就可以使用ConcurrentHashMap,在接口外设置交卷的ConcurrentHashMap对象,在接口中,看看是否有对应字符串,无。关键字对获取到的锁对象进行同步,这样可以保证对于相同的字符串,在同一时间只有一个线程可以执行关键代码部分。

2024-09-26 17:30:00 715

原创 JVM new对象时,堆会发生抢占吗?JVM怎么保证线程安全

默认情况下,TLAB 空间的内存非常小,仅占有整个 Eden 空间的 1%,我们可以通过 -XX:TLABWasteTargetPercent 设置 TLAB 空间所占用 Eden 空间的百分比大小。如果通过TLAB分配失败的时候,则会回到Eden区通过 CAS 方式进行分配。每个线程在Java堆中预先分配一小块内存,也就是本地线程分配缓冲(Thread Local AllocationBuffer,TLAB),要分配内存的线程,先在本地缓冲区中分配,只有本地缓冲区用完了,分配新的缓存区时才需要同步锁定。

2024-09-25 15:01:18 195

原创 CPU 飙高系统反应慢怎么排查

a. CPU 利用率过高的线程一直是同一个,说明程序中存在线程长期占用 CPU 没有释放的情况,这种情况直接通过 jstack 获得线程的 Dump 日志,定位到线程日志后就可以找到问题的代码。如果有多个线程要执行,CPU只能通过上下文切换来执行不同的线程,这就需要保存运行线程的执行状态和启动等待的线程。既然是这两个问题导致的 CPU 利用率较高,于是我们可以通过 top 命令,找到 CPU 利用率较高的进程,再通过 Shift+H 找到进程中 CPU 消耗过高的线程,这里有两种情况。

2024-09-25 14:52:38 358

原创 JVM常用参数配置

JVM(Java虚拟机)参数配置对Java应用的性能、内存管理和调试等方面有重要作用。了解常见的参数配置对于优化应用性能、预防和解决问题、适应不同环境以及提高开发效率都具有重要意义

2024-09-19 19:25:43 420

原创 说说什么是指令重排?

在执行程序时,为了提高性能,编译器和处理器常常会对指令做重排序。重排序分 3 种类型。编译器优化的重排序。编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。指令级并行的重排序。现代处理器采用了指令级并行技术(Instruction-Level Parallelism,ILP)来将多条指令重叠执行。如果不存在数据依赖性,处理器可以改变语句对应 机器指令的执行顺序。内存系统的重排序。由于处理器使用缓存和读/写缓冲区,这使得加载和存储操作看上去可能是在乱序执行。

2024-09-19 19:25:17 289

原创 happens-before

happens-before 是 Java 内存模型(JMM)中用于定义多线程之间操作顺序的规则集合。它规定了如果一个操作 A happens-before 另一个操作 B,那么 A 的结果对 B 可见,并且在 B 执行之前 A 必须已经完成。

2024-09-17 17:30:00 1004

原创 必须了解!JMM,Java内存模型

Java 内存模型(Java Memory Model)是一种抽象的模型,简称 JMM,主要用来定义多线程中变量的访问规则,用来解决变量的可见性、有序性和原子性问题,确保在并发环境中安全地访问共享变量。

2024-09-16 14:50:03 889

原创 volatile 实现原理了解吗?

volatile 可以确保对某个变量的更新对其他线程马上可见,一个变量被声明为 volatile 时,线程在写入变量时不会把值缓存在寄存器或者其他地方,而是会把值刷新回主内存 当其它线程读取该共享变量 ,会从主内存重新获取最新值,而不是使用当前线程的本地内存中的值。例如,我们声明一个 volatile 变量 volatile int x = 0,线程 A 修改 x=1,修改完之后就会把新的值刷新回主内存,线程 B 读取 x 的时候,就会清空本地内存变量,然后再从主内存获取最新值。

2024-09-16 14:34:06 675

原创 线程池介绍、参数、执行过程

线程池介绍,核心参数,执行过程,都是线程池中重要的知识点,也能帮助新手快速理解,老手再巩固一遍

2024-09-12 23:43:25 373

原创 Feign调用

Feign远程调用,帮助还是有疑惑的同学更加理解Feign

2024-09-12 17:30:00 395

原创 curl和ping

curl获取页面内容,ping测试连通。curl和ping是两个在网络环境中常用的命令行工具,但它们的目的和应用场景有很大的不同。

2024-09-11 22:09:03 302

原创 Gossip协议

主要用在Redis Cluster 节点间通信Gossip协议,也称为流行病协议(Epidemic Protocol),是一种在分布式系统中用于信息传播和故障探测的算法。随机选择传播对象每个节点会定期随机选择一些其他节点作为传播对象。这些被选中的节点可能是整个分布式系统中的任意节点,而不是按照特定的顺序或层次结构进行选择。例如,在一个由 100 个节点组成的分布式系统中,每个节点可能会每隔一段时间随机选择 5 个其他节点进行信息传播。交换信息。

2024-09-11 22:06:47 1011

原创 ZAB协议(算法)

ZAB 即 ZooKeeper Atomic Broadcast,是 ZooKeeper 实现分布式数据一致性的核心算法。它是一种原子广播协议,用于确保在分布式环境中,多个 ZooKeeper 服务器之间的数据一致性。

2024-09-10 22:21:10 713

原创 RAFT协议(算法)

RAFT(Reliable and Available Distributed Fault-Tolerant Consensus Protocol)是一种用于管理复制状态机的分布式一致性算法。(也有RAFT共识别算法的叫法)它旨在提供一种易于理解和实现的方法,以确保在分布式系统中多个节点能够就某个状态达成一致。RAFT 将分布式系统中的节点分为三种角色:领导者(Leader)、跟随者(Follower)和候选人(Candidate)。节点在不同的情况下会转换角色,以实现系统的一致性和高可用性。

2024-09-10 22:10:34 1042

原创 springcloud间通信的方式

本文主要介绍Spring cloud子系统之间的通信方式,让读者更快了解接触Spring cloud子系统的通信方式,和简单的实现

2024-09-09 17:30:00 1934

原创 Ribbon快速了解

介绍Ribbon基本信息,帮助新手快速了解Ribbon

2024-09-09 17:30:00 1187

原创 还不懂BIO,NIO,AIO吗

Channel(通道)、Buffer (缓存区)、Selector(选择器) Channel 类似于流,但是它是一个双向的流,他是连接服务端和客户端的通道,不管是客户端还是服务端,都可以使用通道进行读写数据。在NIO模型中,服务端可以开启一个线程处理多个连接,它是非阻塞的,客户端发送的数据都会注册到多路复用器selector上面,当selector (selector的select方法是阻塞的)轮询到有读、写或者连接请求时,才会转发到后端程序进行处理,没有数据的时候,业务程序并不需要阻塞等待。

2024-09-07 23:32:33 1220

原创 Dubbo快速入门-笔记

dubbo是SOA时期的产物,它的关注点主要在于服务的调用和治理。(官方推荐注册中心用zk,最主要的优势还是RPC,尽管现在出来很多微服务功能)

2024-09-07 18:00:00 880

原创 Kafka快速入门

首先引入这样一个场景:A服务可以发送200qps(Queries Per Second,是指每秒查询率),而B服务可以处理100qps。很显然,B服务很可能会被A服务压垮掉。怎么为了保证B不被压垮的同时还能处理A消息,没有什么是不能通过一层中间件解决的,如果有,那就再加一层。开始很容易想到,可以在B服务中增加一个队列,其实就是个链表,B服务根据自己的消费能力,消费链表中的消息。每个节点用Offset记录,消费过程不断更新自己的Offset值。

2024-09-06 19:00:00 1254

原创 Kafka的几个新人面试题

首先引入这样一个场景:A服务可以发送200qps(Queries Per Second,是指每秒查询率),而B服务可以处理100qps。很显然,B服务很可能会被A服务压垮掉。怎么为了保证B不被压垮的同时还能处理A消息,没有什么是不能通过一层中间件解决的,如果有,那就再加一层。开始很容易想到,可以在B服务中增加一个队列,其实就是个链表,B服务根据自己的消费能力,消费链表中的消息。每个节点用Offset记录,消费过程不断更新自己的Offset值。

2024-09-06 19:00:00 782

原创 BFD,SBFD

SBFD 是一种用于 Segment Routing 网络的故障检测协议,提供了高效的故障检测和定位功能。它在 SRv6 网络中扮演着重要角色,通过及时发现和报告网络故障,确保网络的高可用性和可靠性。

2024-09-06 00:17:04 667

空空如也

空空如也

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

TA关注的人

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