自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Gin 源码深度解析及实现(附实现过程及源码)

一个轻量级高性能 HTTP Web 框架。Gin 是一个用 Go (Golang) 编写的 HTTP Web 框架。它具有类似 Martini 的 API,但性能比 Martini 快 40 倍。

2023-12-29 17:34:49 1113 1

原创 词法语法语义分析程序设计及实现,包含出错提示和错误恢复

将语义子程序嵌入到每个递归过程中,通过递归子程序内部的局部量和参数传递语义信息。

2023-12-26 22:41:00 257

原创 汇编语言实现音乐播放器(附源码)

用汇编语言实现一个音乐播放器,并支持点歌。

2023-12-03 01:54:21 1382

原创 jetbrains ai 提示该地区不可用的百分百解决方案,亲测有效

申请 jetbrains 的 ai assistant 白名单已经通过,但是在使用 ai assistant 的过程中提示,我所在的地区是中国,目前该插件是对中国大陆关闭的。刚开始我怀疑是代理的问题,但是开启全局代理之后,依然不可用,所以开始时是初步怀疑因为我申请过中国大陆的教育资格,所以直接把我的账号作为中国大陆的黑号了。但是在 jetbrains 的社区上发现内部员工表示他并不会去明说怎么规避,这其实侧面说明了是有方式规避限制的。

2023-11-20 12:24:20 6236 16

原创 go net/http 源码解读

在 go 中启动一个 http server 只需短短几行代码。

2023-09-13 15:05:01 483

原创 动手实现 Raft 算法(附详细实现过程及源码)

一致性问题是分布式领域最基础、最重要的问题,也是半个世纪以来的研究热点。随着业务场景越来越复杂,计算规模越来越庞大,单点系统往往难以满足高可扩展(Scalability)和高容错(Fault-tolerance)两方面的需求。此时就需要多台服务器通过组成集群,构建更加强大和稳定的“虚拟超级服务器”。任务量越大,处理集群的规模越大,设计和管理的挑战也就越高。谷歌公司的全球搜索集群系统,包括数十万台服务器,每天响应百亿次的互联网搜索请求。集群系统要实现一致性不是一件容易的事。

2023-06-16 11:57:32 1017

原创 Dapper——分布式跟踪系统

当代的互联网的服务,通常都是用复杂的、大规模分布式集群来实现的。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心。面对解耦成大量的分布式微服务时,监控、预警、定位故障就变困难了。因此,就需要一些可以帮助理解系统行为、用于分析性能问题的工具。

2023-04-17 10:57:08 493

原创 RabbitMQ 消息队列

RabbitMQ1.初识MQ1.1.同步和异步通讯微服务间通讯有同步和异步两种方式:同步通讯:就像打电话,需要实时响应。异步通讯:就像发邮件,不需要马上回复。两种方式各有优劣,打电话可以立即得到响应,但是你却不能跟多个人同时通话。发送邮件可以同时与多个人收发邮件,但是往往响应会有延迟。1.1.1.同步通讯我们之前学习的Feign调用就属于同步方式,虽然调用可以实时得到结果,但存在下面的问题:总结:同步调用的优点:时效性较强,可以立即得到结果同步调用的问题:耦合度高性能和

2022-03-03 01:36:09 255

原创 Sentinel微服务保护

微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。

2022-01-06 17:21:08 240

原创 Sentinel 规则持久化

Sentinel 规则持久化一、修改Sentinel客户端服务修改Sentinel客户端服务,让其监听Nacos中的sentinel规则配置。具体步骤如下:1.引入依赖在pom.xml中引入sentinel监听nacos的依赖:<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId>

2022-01-06 16:13:41 282

原创 Jmeter安装与快速入门

Jmeter快速入门1.安装JmeterJmeter依赖于JDK,所以必须确保当前计算机上已经安装了JDK,并且配置了环境变量。1.1.下载可以Apache Jmeter官网下载,地址:http://jmeter.apache.org/download_jmeter.cgi1.2.解压因为下载的是zip包,解压缩即可使用,目录结构如下:其中的bin目录就是执行的脚本,其中包含启动脚本:1.3.运行双击即可运行,但是有两点注意:启动速度比较慢,要耐心等待启动后黑窗口不能关闭,否则

2022-01-06 15:53:13 90

原创 【算法】实现LRU缓存机制

题目运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回-1 。void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上限时,它应该在写入新数据之前删除

2021-10-17 00:40:35 211

原创 【算法】最大子矩阵(dp)(详细注释)

题目给定一个正整数、负整数和 0 组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵。返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。注意:本题相对书上原题稍作改动示例:输入:[[-1,0],[0,-1]]输出:[0,1,0,1]**解释:**输入中标粗的元素即为输出所表示的矩阵说明:1 <= matrix.length,

2021-10-10 11:23:16 459

原创 【算法】 K 站中转内最便宜的航班 (【记忆化dfs】【dp】)

有 n 个城市通过一些航班连接。给你一个数组 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示该航班都从城市 fromi 开始,以价格 pricei 抵达 toi。现在给定所有的城市和航班,以及出发城市 src 和目的地 dst,你的任务是找到出一条最多经过 k 站中转的路线,使得从 src 到 dst 的 价格最便宜 ,并返回该价格。 如果不存在这样的路线,则输出 -1。示例 1:输入:n = 3, edges = [[0,1,100],[1,2

2021-10-07 17:29:14 181

原创 【算法】网络延迟时间 (Dijkstra)

题目有 n 个网络节点,标记为 1 到 n。给你一个列表 times,表示信号经过 有向 边的传递时间。 times[i] = (ui, vi, wi),其中 ui 是源节点,vi 是目标节点, wi 是一个信号从源节点传递到目标节点的时间。现在,从某个节点 K 发出一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1 。示例 1:输入:times = [[2,1,1],[2,3,1],[3,4,1]], n = 4, k = 2输出:2示例 2:输入:t

2021-10-06 23:25:35 610

原创 【算法】通过删除字母匹配到字典里最长单词 (【双指针】,【排序 + 双指针】,【动态规划】)

题目给你一个字符串 s 和一个字符串数组 dictionary ,找出并返回 dictionary 中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。如果答案不止一个,返回长度最长且字母序最小的字符串。如果答案不存在,则返回空字符串。示例 1:输入:s = “abpcplea”, dictionary = [“ale”,“apple”,“monkey”,“plea”]输出:“apple”示例 2:输入:s = “abpcplea”, dictionary = [“a”,“b”,

2021-10-05 18:44:26 328

原创 【算法】矩阵中的最长递增路径 (记忆化dfs)

题目给定一个 m x n 整数矩阵 matrix ,找出其中 最长递增路径 的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你 不能 在 对角线 方向上移动或移动到 边界外(即不允许环绕)。示例 1:输入:matrix = [[9,9,4],[6,6,8],[2,1,1]]输出:4解释:最长递增路径为 [1, 2, 6, 9]。示例 2:输入:matrix = [[3,4,5],[3,2,6],[2,2,1]]输出:4解释:最长递增路径是 [3, 4, 5, 6]。注意

2021-10-05 16:15:38 362

原创 【算法】实现indexOf()函数 (KMP)

题目实现 indexOf() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。示例 1:输入:haystack = “h

2021-10-05 13:16:08 698

原创 【算法】单词搜索 (DFS + 回溯)

单词搜索题目给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例 1:输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “ABCCED”输出:true

2021-10-05 12:45:53 279

原创 Docker

Docker1.初识Docker1.1.什么是Docker微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署,环境不一定一致,会遇到各种问题1.1.1.应用部署的环境问题大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题:依赖关系复杂,容易出现兼容性问题开发、测试、生产环境有差异例如一个项目中,部署时需要依赖于node.js、Redis、Rabbi

2021-09-18 11:06:57 254

原创 CentOS安装Docker和DockerCompose 及 配置私有镜像仓库

安装DockerDocker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。Docker CE 分为 stable test 和 nightly 三个更新频道。官方网站上有各种环境下的 安装指南,这里主要介绍 Docker CE 在 CentOS上的安装。1.CentOS安装DockerDocker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10, CentOS 7 满足最低内核

2021-09-18 10:11:14 348

原创 Gateway服务网关

Gateway概述Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。简而言之,Gateway网关是看门大爷,谁能调用服务,去哪调用服务都得问过他, 网关是微服务的统一入口1.功能特性网关的核心功能特性:请求路由权限控制限流架构图:权限控制:网

2021-09-16 15:55:46 642

原创 Feign远程调用

Feign远程调用概述先来看我们以前利用RestTemplate发起远程调用的代码:这要是请求参数很多怎么办,比如这种http://localhost/nacos/#/configurationManagement?dataId=&group=&appName=&namespace=&pageSize=&pageNo=因此RestTemplate存在下面的问题:•代码可读性差,编程体验不统一•参数复杂URL难以维护Feign是一个声明式的http客户端

2021-09-16 15:14:10 1011

原创 Nacos注册中心 配置管理

Nacos国内公司一般都推崇阿里巴巴的技术Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。通过Nacos可以实现发现,配置和管理微服务认识和安装NacosNacos的官方文档对Nacos概述如下:Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构

2021-09-16 14:00:26 491

原创 Nacos安装与集群搭建 (保姆级指南)

Nacos安装指南1.Windows安装开发阶段采用单机安装即可。1.1.下载安装包在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码:GitHub主页:https://github.com/alibaba/nacosGitHub的Release下载页:https://github.com/alibaba/nacos/releases如图:我们选择采用1.4.1.版本的Nacos,即nacos-server-1.4.1.zip包。1.2.解压将

2021-09-15 12:34:23 2845

原创 Ribbon负载均衡(源码解析)

Ribbon负载均衡概述SpringCloud中用来实现负载均衡的组件原理我们发出的请求明明是http://userservice/user/1,是怎么变成了http://localhost:8081的呢?只输入服务名称,不用ip和端口号就能访问接口,显然有人根据server名称获取到了服务提供者的ip和端口这个类就是LoadBlancerInterceptor,这个类对RestTemplate的请求进行拦截,从注册中心根据服务名称获取服务列表,然后根据对应的负载均衡算法得到真实的服务地址

2021-09-15 12:14:03 344

原创 Eureka注册中心

文章目录Eureka概述实现搭建eureka-servereureka client 服务注册服务发现Eureka概述Eureka是SpringCloud中服务注册与发现的组件实现搭建注册中心引入eureka-server依赖添加启动eureka注解配置eureka服务地址eureka client服务注册引入eureka-client依赖配置eureka服务地址服务发现服务拉取负载均衡搭建eureka-servereureka-server必须是一

2021-09-15 11:23:50 69

原创 Spring 事务操作

概述什么是事务?事务是数据库操作的最基本单元,把一系列操作视为一个整体的功能被称为事务,作为事务时这一系列操作要全部成功才被视为成功,否则只要由一个操作失败就被视为失败。单条SQL语句就是一个事务,这种事务被成为隐式事务。事务特性ACIDAtomic 原子性:原子是不可分割的,事务要么全部执行,要么不执行Consistency 一致性:事务提交前后的状态是一致的,比如银行转账,转账前后各人的账户余额可能变了,但钱的总额不变Isolation 隔离性:多个事务并发执行时,不被其他事务干

2021-09-09 00:56:04 80

原创 Spring AOP

文章目录概述底层原理术语AspectJ概述AOP(Aspect Oriented Programming) 面向切面编程了解AOP(Aspect Oriented Programming面向切面编程)之前,先回顾一下OOP(Object Oriented Programming),OOP作为面向对象编程的模式取得了巨大的成功。OOP的主要功能是封装,继承和多态,封装就要求将功能分配到不同的类中,这在软件设计中称为职责分配。不同的类设计不同的方法,代码就分散到一个个的类中,在分散代码的同时,就增加

2021-09-08 23:30:56 61

原创 Spring IOC

文章目录概述底层原理bean管理创建对象注入属性自动装配外部属性文件bean作用域生命周期概述IOC(Inversion Of Control)即控制反转在了解IOC之前,我们先了解软件设计的一个重要思想:依赖倒置原则(Dependency Inversion Principle)举个例子,一栋大厦建设高层建筑需要根据底层建筑决定如何往上建,底层建筑牵一发而动全身,依赖倒置原则就是把原本的高层建筑依赖底层建筑倒置过来,变成底层建筑依赖高层建筑,高层建筑想要建成什么样,就让底层建筑去实现相应需求,此时

2021-09-07 23:22:48 49

原创 八大排序算法

分类选择排序public static void selectSort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { int min = arr[i]; int minIndex = i; for (int j = i + 1; j < arr.length; j++) { if (min > arr[j]) {

2021-09-07 13:49:08 40

原创 Java核心——反射

文章目录根据需求引出反射反射概述反射能做什么反射相关的主要类快速入门Class类概述常用方法获取Class对象方式哪些类型有Class对象ConstructorFieldMethod根据需求引出反射要是说半天反射是什么怎么做,新手看完还是一头雾水,我们先来看看什么时候会使用到反射现有一个配置文件re.properties的配置信息和定义好的Cat类如下:re.propertiesclassFullPath=com.npc.Catmethod=hiCat.classpublic cl

2021-09-06 23:18:48 91

原创 CPU设计与实现(8位)

文章目录CPU整体结构指令系统设计1. 指令格式分类2. 指令的分组及节拍逻辑设计CPU模块表各指令的控制信号值1. 取指令逻辑2. 指令译码逻辑3. 指令执行逻辑4. 存储器访问逻辑5. 结果写回逻辑各模块说明(1) ALU(2) 数据选择器BUS_MUX(3) 器件T1(4) 标志寄存器FLAG_REG(5) T2(6) 程序计数器PC(7) 地址寄存器AR和指令寄存器IR(8) 寄存器、寄存器组和寄存器的选择(9) 节拍发生器TIMER(10) 控制逻辑(11) T3(12) REG_OUT连通模块测

2021-08-13 21:18:59 6640 6

原创 最通俗易懂的单例模式讲解-设计模式

文章目录单例模式概述解决问题实现真实世界类比UML代码基础单例单线程应用场景优缺点分析单例模式2020.11.26概述单例模式是一种创建型设计模式,让你能够保证一个类只有一个实例,并提供一个访问该实例的全局节点。解决问题保证一个类只有一个实例为什么要控制一个类所拥有的实例数量? 最常见的原因是控制某些共享资源的访问权限。如果你已经创建了一个对象, 过一会你决定又创建一个对象,此时你会获得之前已创建的对象。为该实例提供一个全局访问节点想想平时用来存储重要对象的全局变量,使用上非常方

2020-11-26 17:41:29 125

原创 自制操作系统13-定时器(2)

DAY13 定时器(2)2020.10.26今天主要是修改FIFO缓冲区和继续改进定时器。1. 简化字符串显示文档:harib10a先弄点简单的,一上来就讲难的只会降低效率。boxfill8(buf_back, binfo->scrnx, COL8_008484, 0, 16, 15, 31);putfonts8_asc(buf_back, binfo->scrnx, 0, 16, COL8_FFFFFF, s);sheet_refresh(sht_back, 0, 16, 16

2020-10-28 19:49:27 261

原创 自制操作系统12-定时器(1)

DAY12 定时器(1)2020.10.25为了铺垫之后需要实现的多任务,我们先学习如何使用定时器。学会使用定时器可不简单,还要逐步优化定时器的中断处理。1. 使用定时器文档:harib09aTimer(定时器):每隔一段时间就发送一个中断信号给CPU,有了Timer就不用CPU去辛苦计量时间了。想知道如果操作系统没有定时器有多艰难的可以想象一下自己没有手表还想知道时间的话得怎么办,所以说定时器非常重要,管理定时器是操作系统的重要任务之一。要使用定时器只需要对PIT(Programmable

2020-10-28 15:10:43 420

原创 自制操作系统11-制作窗口

DAY11 制作窗口2020.10.25今天实现了窗口显示并优化了画面刷新避免了闪烁的问题。1. 窗口边缘时的鼠标显示处理文档:harib08a看看下面这张截图鼠标移动到右侧后就不能再往右了,但我们在Windows鼠标移动到最右或最下是可以隐藏起来的。我们修改下HariMain中的鼠标边缘判断语句很轻松就能解决了。原来的程序:if (mx > binfo->scrnx - 16) { mx = binfo->scrnx - 16;} if (my >

2020-10-27 17:17:58 371 1

原创 自制操作系统10-图层叠加处理

DAY10 图层叠加处理2020.10.23-2020.10.24今天实现了画面中窗口的叠加解决了鼠标吃任务栏的问题,还相应地提高了画面刷新的速度。1. 叠加处理文档:harib07b现在我们继续回到上次鼠标显示的问题上,上次鼠标移动到下面后把任务栏给吃了。所以我们要处理画面叠加显示的问题,不仅适用于鼠标还要适用于多窗口的叠加。我们决定使用图层来存放窗口,通过移动图层的方法实现鼠标指针的移动以及窗口的移动。先定义图层结构体struct SHEET { unsigned char *bu

2020-10-27 14:53:33 370

原创 自制操作系统9-内存管理

DAY9 内存管理2020.10.22-2020.10.23今天的主要学习了内存管理的必要性和如何进行内存管理。1. 整理源文件文档:harib06a​ 暂时先把鼠标的问题放一边,今天干点别的。​ bootpack.c现在已经182行了,看着不舒服,我们要稍微整理一下。将程序整理如下:函 数 名移 动 前移 动 后wait_KBC_sendreadybootpack.ckeyboard.cinit_keyboardbootpack.ckeyboard.c

2020-10-23 16:36:06 351 2

原创 自制操作系统8-鼠标控制与32位模式切换

DAY8 鼠标控制与32位模式切换2020.10.21今天非常开心,实现了鼠标的移动,但通往32位模式的任务有点艰巨。稳住!1. 鼠标解读文档:harib05a我们已经能从鼠标取得数据了,接来下就是解读这些数据让鼠标动起来,这听起来很简单。先来对bootpack.c的HariMain函数进行一些修改://这次HariMain的修改部分unsigned char mouse_dbuf[3], mouse_phase;enable_mouse();mouse_phase = 0; /*

2020-10-22 19:42:09 354

空空如也

空空如也

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

TA关注的人

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