自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis和Zookeeper分布式锁安全吗?

分布式锁

2022-10-10 11:38:47 658 1

原创 Redis分布式锁问题与Redisson解决方案的探究

分布式锁

2022-09-23 18:07:07 1149

原创 从零实现RPC框架之 7: 基于注解的服务自动注册

从零实现RPC框架

2022-09-15 10:24:03 656

原创 MySQL幻读问题探讨

MySQL

2022-08-27 11:18:50 180

原创 MySQL锁的类型及加锁范围

MySQL锁

2022-08-27 00:41:40 1425

原创 linux系统调用实现原理

1.POSIX API和系统调用API(应用编程接口)与系统调用之不同在于,前者只是一个函数定义,说明了如何获得一个给定的服务,而后者是通过软中断向内核发出一个明确的请求系统调用属于内核,而用户态的函数库不属于内核2.为什么需要系统调用linux内核中设置了一组用于实现系统功能的子程序,称为系统调用。系统调用和普通库函数调用非常相似,只是系统调用由操作系统核心提供,运行于内核态,而普通的函数调用由函数库或用户自己提供,运行于用户态。一般的,进程是不能访问内核的。它不能访问内核所占内存空间也不能调用

2022-05-15 12:41:42 1480

原创 Linux源码学习之调度方式与上下文切换

1.调度分类所谓进程调度,其实就是一个人在做 A 项目,在某个时刻,换成做 B 项目去了。发生这种情况,主要有两种方式。方式一:A 项目做着做着,发现里面有一条指令 sleep,也就是要休息一下,或者在等待某个 I/O 事件。那没办法了,就要主动让出 CPU,然后可以开始做 B 项目。方式二:A 项目做着做着,旷日持久,实在受不了了。项目经理介入了,说这个项目 A 先停停,B 项目也要做一下,要不然 B 项目该投诉了。上面两种对应着主动调度和 抢占式调度主动调度的场景:场景1:写入块设备的一个

2022-05-12 01:03:15 475

原创 Linux进程调度源码学习之调度策略与调度类工作流程

经典的进程调度算法首先复习下进程调度的算法批处理进程调度算法:1.FCFS先来先服务2.SJF短进程优先3.高响应比优先算法抢占式:1.时间片轮转算法2.多级反馈队列Linux进程调度策略1.调度策略:全局来看linux是多级队列的方式管理在Linux中,进程大概分为两种:周期进程实时进程,也就是需要尽快返回结果的那种,另一种是普通进程,大部分的进程其实都是这种linux调度管理的数据结构:在 task_struct 中,有一个成员变量,我们叫调度策略。

2022-05-11 23:43:43 489

原创 从零实现RPC框架之 6: 注册中心模块

1.注册中心的作用如你要给一位以前从未合作过的同事发邮件请求帮助,但你却没有他的邮箱地址。这个时候你会怎么办呢?如果是我,我会选择去看公司的企业“通信录”。对于服务调用方和服务提供方来说,其契约就是接口,相当于“通信录”中的姓名,服务节点就是提供该契约的一个具体实例。服务 IP 集合作为“通信录”中的地址RPC 中服务消费端(Consumer) 需要请求服务提供方(Provider)的接口,必须要知道 Provider 的地址才能请求到。那么,Consumer 要从哪里获取 Provider 的地址

2022-05-01 10:44:24 725

原创 从零实现RPC框架之 5.序列化

序列化:序列化以及编解码属于七层网络中的表示层序列化和反序列化的选型却是系统设计或重构一个重要的环节,在分布式、大数据量系统设计里面更为显著。恰当的序列化协议不仅可以提高系统的通用性、强健性、安全性、优化系统性能,而且会让系统更加易于调试、便于扩展典型的序列化和反序列化过程往往需要如下组件:IDL(Interface description language)文件:参与通讯的各方需要对通讯的内容需要做相关的约定(Specifications)。为了建立一个与语言和平台无关的约定,这个约定需要采用

2022-05-01 10:35:11 449

原创 从零实现RPC框架之:4协议设计

前言一提到协议,最先想到的可能是 TCP 协议、UDP 协议等等,这些网络传输协议的实现以及应用层的HTTP协议。其实rpc协议和http协议都属于应用层协议可能你会问:“前面你不是说了 HTTP 协议跟 RPC 都属于应用层协议,那有了现成的 HTTP 协议,为啥不直接用,还要为 RPC 设计私有协议呢?”这还要从 RPC 的作用说起,相对于 HTTP(1.1/1.0) 的用处,RPC 更多的是负责应用间的通信,所以性能要求相对更高。但 HTTP 协议的数据包大小相对请求数据本身要大很多,又需要加

2022-04-30 15:09:07 1342

原创 ArrayList线程安全问题以及解决方案

1. 多线程下的ArrayListpublic class ConcurrentArrayList { public static void main(String[] args) throws InterruptedException { List<Integer> list = new ArrayList<>(); Runnable runnable = () -> { for (int i = 0; i

2022-04-23 16:09:10 8358

原创 从零实现RPC框架之3:服务暴露与URL

1.URL的定义一般而言我们说的 URL 指的就是统一资源定位符,在网络上一般指代地址,本质上看其实就是一串包含特殊格式的字符串,标准格式如下:protocol://username:password@host:port/path?key=value&key=valueprotocol:协议,例如 http 协议username/password:用户名/密码host/port:主机/端口path:请求路径parameters:参数键值对URI与URL的区别:URI(Unif

2022-04-12 18:08:41 1107

原创 从零实现RPC框架2: 插件化设计 SPI机制

1.什么是SPI?SPI的全称是Service Provider Interface, 直译过来就是"服务提供接口",为了降低耦合,实现在模块装配的时候动态指定具体实现类的一种服务发现机制。动态地为接口寻找服务实现。它的核心来自于ServiceLoader这个类。java SPI应用场景很广泛,在Java底层和一些框架中都很常用,比如java数据驱动加载。Java底层定义加载接口后,由不同的厂商提供驱动加载的实现方式,当我们需要加载不同的数据库的时候,只需要替换数据库对应的驱动加载jar包,就可以进行使

2022-04-12 12:08:46 1348 1

原创 从零实现RPC框架1:RPC框架架构设计

从零实现RPC框架1:RPC框架架构设计1.什么是 RPC?RPC 的全称是 Remote Procedure Call,即远程过程调用。简单解读字面上的意思,远程肯定是指要跨机器而非本机,所以需要用到网络编程才能实现,但是不是只要通过网络通信访问到另一台机器的应用程序,就可以称之为 RPC 调用了?显然并不够。我理解的 RPC 是帮助我们屏蔽网络编程细节,实现调用远程方法就跟调用本地(同一个项目中的方法)一样的体验,我们不需要因为这个方法是远程调用就需要编写很多与业务无关的代码。所以我认为,RPC

2022-04-11 23:37:10 1582

原创 实现一个简易的hashmap

hashmap结构图如图所示:由于红黑树实现的复杂性,本次就只实现一个链表+Entry table的hashmap先定义接口:/** * @author xsj * @create 2022-03-17 22:45 */public interface MyMap<K, V> { V put(K key, V val); V get(K key); interface Entry<K, V> { K getKey();

2022-04-09 21:30:28 1020

原创 一文读懂I/O模型与Reactor和Proactor模式

IO模型与Reactor总结OS层面的 UNIX五种IO模型从TCP发送数据的流程说起要深入的理解各种IO模型,那么必须先了解下产生各种IO的原因是什么,要知道这其中的本质问题那么我们就必须要知一条消息是如何从过一个人发送到另外一个人的;以两个应用程序通讯为例,我们来了解一下当“A”向"B" 发送一条消息,简单来说会经过如下流程:第一步:应用A把消息发送到 TCP发送缓冲区。第二步: TCP发送缓冲区再把消息发送出去,经过网络传递后,消息会发送到B服务器的TCP接收缓冲区。**第三步:**B再

2022-01-04 10:52:57 1140

原创 java中浅拷贝与深拷贝的理解

1为什么要克隆?克隆的对象可能已经包含一些已经修改过的属性,保留着你想克隆对象的值,而new出来的对象的属性全是一个新的对象,对应的属性没有值,所以我们还要重新给这个对象赋值。即当需要一个新的对象来保存当前对象的“状态”就靠clone方法了,那么我把这个对象的临时属性一个一个的赋值给我新new的对象不也行嘛?可以是可以,但是一来麻烦不说,二来,大家通过上面的源码都发现了clone是一个native方法,就是快啊,在底层实现的。克隆究竟是什么?先来回忆为一个包含对象引用的变量建立副本时会发生什么 。原

2021-07-13 17:49:54 890

原创 Redis的两种持久化机制RDB和AOF

Redis持久化机制Redis 的⼀种持久化⽅式叫快照(snapshotting,RDB(Redis Database)),另⼀种⽅式是只追加⽂件(append-only file, AOF)1.RDB持久化机制RDB文件是一种经过压缩的二进制文件RDB文件的写入和载入流程如下图所示RDB文件的创建(既可以手动也可以配置选项定期执行)RDB文件的手动创建rdbSave 函数负责将内存中的数据库数据以 RDB 格式保存到磁盘中, 如果 RDB 文件已存在, 那么新的 RDB 文件将替换已有的

2021-05-23 16:15:52 224 1

原创 Redis字典结构的理解以及与java hashmap的区别

1.字典的实现Redis的字典使用哈希表作为底层实现。1.1 哈希表Redis字典所使用的哈希表结构定义如下:typedef struct dictht { // 哈希表数组 dictEntry **table; // 哈希表大小 unsigned long size; // 哈希表大小掩码,用于计算索引值 // 总是等于 size - 1 unsigned long sizemask; // 该哈希表已有节点的数量 u

2021-05-23 15:45:41 2687 3

原创 kafka为什么这么快?

下面从数据写入和读取两方面分析,为什么Kafka速度这么快。一、写入数据1. 利用 Partition 实现并行处理我们都知道 Kafka 是一个 Pub-Sub 的消息系统,无论是发布还是订阅,都要指定 Topic。Topic 只是一个逻辑的概念。每个 Topic 都包含一个或多个 Partition,不同 Partition 可位于不同节点。一方面,由于不同 Partition 可位于不同机器,因此可以充分利用集群优势,实现机器间的并行处理。另一方面,由于 Partition 在物理上对应一个

2021-05-15 15:54:10 339

原创 IO底层原理与Java NIO

IO流程示意图客户端发送数据来到服务器,建立好sokcet连接再到应用程序拿到这个数据可以分为两个步骤因为应用程序是没办法直接去网卡读取数据的,应用程序向OS内核发起read调用1.数据准备(输入流从网卡来到OS内核空间)2.数据拷贝(从内核空间拷贝到用户空间)根据应用程序接收结果的通知方式分为 同步和异步。简单理解:同步就是应用程序发起read调用之后就一直等待结果,异步就是应用程序先去做其他事,等待内核程序根据调用者(client)的影响分为 :阻塞和非阻塞。两类情况总共组合出5种IO模

2021-05-06 15:03:26 105

原创 HotSpot的算法具体实现:

1.根节点枚举我们以可达性分析算法中从GC Roots集合找引用链这个操作作为介绍虚拟机高效实现的第一个例子。固定可作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)中,尽管目标明确,但查找过程要做到高效并非一件容易的事情,现在Java应用越做越庞大,光是方法区的大小就常有数百上千兆,里面的类、常量等更是恒河沙数,若要逐个检查以这里为起源的引用肯定得消耗不少时间今为止,所有收集器在根节点枚举这一步骤时都是必须暂停用户线程的,因此毫无疑问根节点枚举

2021-04-30 22:53:03 281 2

原创 深入理解JVM-经典垃圾收集器

经典的垃圾收集器按照使用的年代可以分为如下图所示的情况如果两个收集器之间存在连线,就说明它们可以搭配使用 [3] ,图中收集器所处的区域,则表示它是属于新生代收集器抑或是老年代收集器1.Serial收集器这个收集器是一个单线程工作的收集器,但它的“单线程”的意义并不仅仅是说明它只会使用一个处理器或一条收集线程去完成垃圾收集工作,更重要的是强调在它进行垃圾收集时,必须暂停其他所有工作线程,直到它收集结束。优点:简单而高效(与其他收集器的单线程相比),对于内存资源受限的环境,它是所有收集器里额外内

2021-04-30 22:46:45 82

原创 syn flood攻击原理及防范

sync攻击原理DoS是Denial of Service的简称,即拒绝服务,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务。最常见的DoS攻击有计算机网络带宽攻击和连通性攻击SYN Flood(半开放攻击)是一种拒绝服务(DDoS)攻击,其目的是通过消耗所有可用的服务器资源使服务器不可用于合法流量。通过重复发送初始连接请求(SYN)数据包,攻击者能够压倒目标服务器机器上的所有可用端口,导致目标设备根本不响应合法流量。SYN Flood攻击如何工作?通过利用TCP连接

2021-04-26 10:28:29 11912

原创 图文讲解JDK1.7HashMap多线程下线程安全问题

JDK1.7HashMap多线程下会出现死循环和数据丢失的情况本文将对这两种情况出现的进行简单讲解简单讲解:出现死循环的例子可见:https://zhuanlan.zhihu.com/p/174226955直接切入主题发生问题就在转移结点的transfer()函数 源码如下:void transfer(Entry[] newTable, boolean rehash) { int newCapacity = newTable.length; for (Entry&

2021-04-21 20:21:11 168

原创 Kafka 请求是怎么被处理的

无论是 Kafka 客户端还是 Broker 端,它们之间的交互都是通过“请求 / 响应”的方式完成的。比如,客户端会通过网络发送消息生产请求给 Broker,而 Broker 处理完成后,会发送对应的响应给到客户端。Apache Kafka 自己定义了一组请求协议(在TCP基础上),用于实现各种各样的交互操作。比如常见的有PRODUCE 请求是用于生产消息的,FETCH 请求是用于消费消息的METADATA 请求是用于请求 Kafka 集群元数据信息的总之,Kafka 定义了很多

2021-04-20 18:00:49 167

原创 事件分发器之Reactor模式详细解读

一、网络服务和请求的特点与事件分发器的两种模式:例如:Web服务、分布式事务大多数都有相同的基础结构和步骤:读请求:Read request解码请求:Decode request进程服务:Process service编码回复:Encode reply回复应答:Send reply但是各种不同的请求不同在逻辑和每一步的开销例如:XML parsing, File transfer, Web page generation, computational services, …典型的服务设

2021-04-20 17:49:21 919 2

原创 1578. 避免重复字母的最小删除成本

给你一个字符串 s 和一个整数数组 cost ,其中 cost[i] 是从 s 中删除字符 i 的代价。返回使字符串任意相邻两个字母不相同的最小删除成本。请注意,删除一个字符后,删除其他字符的成本不会改变。示例 1:输入:s = “abaac”, cost = [1,2,3,4,5]输出:3解释:删除字母 “a” 的成本为 3,然后得到 “abac”(字符串中相邻两个字母不相同)。示例 2:输入:s = “abc”, cost = [1,2,3]输出:0解释:无需删除任何字母,因为字符串

2020-10-09 10:35:43 188

原创 面试题 17.21. 直方图的水量

给定一个直方图(也称柱状图),假设有人从上面源源不断地倒水,最后直方图能存多少水量?直方图的宽度为 1。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的直方图,在这种情况下,可以接 6 个单位的水(蓝色部分表示水)。 感谢 Marcos 贡献此图。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6题解:参考大神写的某一个柱子能否存储水,判断的准则是左侧柱子最大高度、右侧柱子最大高度的较小值是否高于柱子本身,差值为正即可存储水,避免使用辅助空间,先

2020-10-08 14:27:59 151

原创 PAT-A-1095 Cars on Campus (30分)

Zhejiang University has 8 campuses and a lot of gates. From each gate we can collect the in/out times and the plate numbers of the cars crossing the gate. Now with all the information available, you are supposed to tell, at any specific time point, the num

2020-07-24 12:23:28 98

原创 PAT-A-1062 Talent and Virtue (25分)

About 900 years ago, a Chinese philosopher Sima Guang wrote a history book in which he talked about people’s talent and virtue. According to his theory, a man being outstanding in both talent and virtue must be a “sage(圣人)”; being less excellent but with o

2020-07-23 16:51:30 85

原创 PAT-A-1077 Kuchiguse

The Japanese language is notorious for its sentence ending particles. Personal preference of such particles can be considered as a reflection of the speaker’s personality. Such a preference is called “Kuchiguse” and is often exaggerated artistically in Ani

2020-07-23 15:15:36 94

原创 PAT-A-1035 Password

To prepare for PAT, the judge sometimes has to generate random passwords for the users. The problem is that there are always some confusing passwords since it is hard to distinguish 1 (one) from l (L in lowercase), or 0 (zero) from O (o in uppercase). One

2020-07-23 14:23:41 85

原创 PAT-A-1027 Colors in Mars (20分)

People in Mars represent the colors in their computers in a similar way as the Earth people. That is, a color is represented by a 6-digit number, where the first 2 digits are for Red, the middle 2 digits for Green, and the last 2 digits for Blue. The only

2020-07-23 09:46:02 80

原创 PAT-A-1066 Root of AVL Tree (25分)

An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they differ by more than one, rebalancing is done to restore this property. Figures 1-4 illustrate t

2020-07-16 10:41:11 86

原创 PAT-A-1064 Complete Binary Search Tree (30分)

A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:The left subtree of a node contains only nodes with keys less than the node’s key.The right subtree of a node contains only nodes with keys greater than

2020-07-15 16:38:44 99

原创 PAT-A-1043 Is It a Binary Search Tree (25分)

A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:The left subtree of a node contains only nodes with keys less than the node’s key.The right subtree of a node contains only nodes with keys greater than

2020-07-15 15:45:12 91

原创 PAT-A-1053 Path of Equal Weight (30分)(dfs)

Given a non-empty tree with root R, and with weight W​i​​ assigned to each tree node T​i​​ . The weight of a path from R to L is defined to be the sum of the weights of all the nodes along the path from R to any leaf node L.Now given any weighted tre

2020-07-15 12:05:33 109

原创 PAT-A-1004 Counting Leaves (30分)【DFS+BFS】

A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child.Input Specification:Each input file contains one test case. Each case starts with a line containing 0<N<100, the number of nodes

2020-07-15 10:49:31 89

空空如也

空空如也

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

TA关注的人

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