自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux进程之调度器

在 Linux 中,用户可以使用nice和renice命令来改变程序的优先级。这些命令主要改变程序的nice值,nice值范围从 -20 到 19。-20 是最高优先级,19 是最低优先级。默认情况下,进程的nice值是 0。在启动程序时设置nice值:这将以nice值 10 运行command。改变正在运行的进程的nice值:这将把具有进程 ID[PID]的进程的nice值增加 5。请注意,nice值通常只能由 root 用户或进程的所有者更改。如果是普通用户的话,他们只能增加他们自己进程的。

2023-08-13 01:53:38 408

原创 linux之命名空间

PID命名空间(PID Namespaces)是Linux命名空间中的一种类型,用于隔离进程ID空间。这意味着在各个PID命名空间中,进程ID是唯一且独立的。每个新的PID命名空间都有自己的PID为1的进程,该进程是命名空间内的所有其他进程的祖先。当我们创建新的PID命名空间(例如在创建新的容器时),这实际上会生成一个新的进程ID空间,其中的进程将为其当前命名空间分配一个新的、唯一的PID。同样一个进程在其父命名空间中也有一个唯一的PID。这样就允许在单系统中并行运行多个相同PID的进程,

2023-08-12 16:29:46 746

原创 linux内核之双向链表实现原理

Linux内核中广泛使用了一种称为循环双链(Circular Doubly Linked)链表的数据结构,即每个节点都有一个向前和向后的链接,而且首尾节点也相互连接。使用这样的链表,你可以很方便地访问任何一个元素的上一个和下一个元素,且无论目前位于哪个元素。相反,你应当使用内核提供的链表函数,因为这些函数已经对各种边缘情况进行了处理,可以确保你的链表操作是正确且安全的。需要你提供链表节点的指针、包含该节点的数据结构的类型、以及链表节点在该结构体中的名称。这样,就可以使用Linux内核提供的链表函数,例如。

2023-08-12 13:51:10 266

原创 linux之缓存技术(TLB、伙伴系统、Slab缓存)

Linux中的伙伴系统(Buddy System)是一种内存分配策略,该策略主要用于满足内存分配请求并减少内存碎片。在伙伴系统中,内存被分为多个连续的区块(例如,2^N个连续的页框),这些区块被称为“区”。每次内存分配请求到来时,系统会选择一个最小且符合大小需求的区来满足该请求,并且这个区的大小总是2的幂。如果选中区的大小超过了请求的内存大小,那么这个区将被分割为两个大小相等的子区,这对子区被称为“伙伴”。其中一块将被用于满足内存请求,另一块则保留以供未来使用。

2023-08-12 13:40:26 268

原创 linux操作系统概念:内核态

"处于内核态"通常意味着。在现代计算系统中,CPU 运行模式通常有两种:用户态(User Mode)和内核态(Kernel Mode)。:当 CPU 处于用户态时,运行的程序只能访问一部分受限制的资源和指令。如果一个程序需要访问更多的资源或执行特权级操作(例如,直接控制硬件),它需要请求操作系统,通过一种称为“系统调用”的方式将执行上下文切换到内核态。:当 CPU 处于内核态时,操作系统内核或设备驱动程序等可以访问所有硬件资源及内存,执行所有指令。

2023-08-12 13:05:05 256

原创 NASM汇编

在汇编语言中,我们可以使用%macro和%endmacro指令来定义一个宏。宏可以包含任意的代码片段,并用一个自定义的名字来标识它,然后可以在需要的地方通过这个名字来使用宏。;定义宏 % macro print 1 mov eax , 4;sys_write 的系统调用号为 4 mov ebx , 1;文件描述符 1 —— stdout mov ecx , % 1;要打印的字符串要打印的字符串长度 int 0x80;执行系统调用 % endmacro' , 0xA;

2023-07-30 21:38:50 1812

原创 时间问题详解

【代码】时间问题详解。

2023-07-28 00:53:07 125

原创 类之间的关系

在这个示例中,Car 类和 Engine 类之间存在强关联关系,因为每辆车都拥有(包含)一个引擎,而引擎也是车的一个组成部分。在 NewCar 函数中,当我们创建一个新的 Car 实例时,同时也会创建一个新的 Engine 实例。如此一来,Car 对象的生命周期和 Engine 对象的生命周期就相互依赖了。注意,关联关系即可以按关联方式分类,也可以按关联性强弱分类。是按两种维度来进行划分的。关联方式与关联性强弱没有相关性。

2023-07-15 15:06:53 144

原创 go数据结构之slice与map

lencap。

2023-07-09 05:28:00 606 1

原创 高级sql

窗口函数CREATE TABLE students ( id INT PRIMARY KEY auto_increment, NAME VARCHAR ( 30 ), math INT, english INT, num INT );INSERT INTO students ( NAME, math, english, num )VALUES ( "张三", 99, 88, 4 ), ( "李四", 77, 88, 5 ), ( "王五", 96, 74, 3 ), ( "赵六", 76, 8

2023-07-01 17:55:12 2516 1

原创 领域驱动设计

限界上下文定义了领域的边界在同一界限上下文中,我们可以使用统一的语言进行交互。用来封装通用语言和领域对象,提供上下文环境,保证在领域之内的一些术语、业务相关对象等有一个确切的含义,没有二义性。我们将限界上下文内的领域模型映射到微服务,就完成了从问题域到软件的解决方案一个限界上下文理论上就可以设计为一个微服务。领域模型由领域对象组成。领域对象包括以下几种实体值对象聚合领域事件领域服务领域对象都是为了解决业务问题而创建的,它们应当包含足够的业务逻辑,而不仅仅是数据的容器。

2022-09-16 13:16:51 1425 1

原创 笔试刷题输入

输入

2022-08-08 23:47:45 178

原创 计算机网络之应用层面试题

计算机网络之应用层面试

2022-07-20 00:34:39 333 1

原创 计算机网络之DNS面试题

DNS面试题

2022-07-19 00:27:42 1397

原创 计算机网络传输层面试题

计算机网络传输层面试题

2022-07-17 19:28:47 118

原创 网络层面试题

网络层面试题

2022-07-17 15:17:25 500

原创 网络相关概念面试题

网络相关面试题

2022-07-17 14:26:37 472

原创 内存管理面试问题

内存管理面试题

2022-07-16 18:55:55 496

原创 进程和线程面试问题

进程和线程面试问题

2022-07-16 11:10:21 649

原创 字符编码问题

字符编码问题

2022-07-15 09:55:57 173 1

原创 重构:改善既有代码的设计

1. 提炼函数1.1 提炼函数的动机何时重构:需要花时间才能弄懂一段代码对于api,我们不需要去弄明白代码如何实现,只需要知道功能,则不需要重构大量短小函数会让程序跑的更快,更容易被缓存当函数超过10行就应该考虑提炼函数1.2 做法创造新函数,根据意图进行命名(”做什么“来命名,而不是“怎么做”命名)将待提炼代码复制到新的函数中若提炼的代码引用了作用域限于源函数,则以参数的形式传递给新函数在源函数中,将被提炼代码段替换为对目标函数的调用测试若其他代码与被提炼代码有相似处,使用以

2022-05-13 01:13:47 895

原创 正则表达式

1. 匹配单个字符.可以用来陪陪任何的单字符(但是大多数实现中不匹配换行符).是元字符,它表示了特殊的含义,而不是字符本身的含义,所以如果需要匹配.,则需要反斜杠转义,即\..如果出现在中括号里,则就代表这个字符本身,此时不需要转义2. 匹配一组字符abc[^0-9]^在中括号之间表示取非操作-只有在中括号之间才是元字符,所以如果在中括号内想匹配该字符本身,则需要转义。3. 使用元字符数字元字符\d :匹配数字字符,等价于[0-9]\D : 匹配非数字字符,等价于[^0-9

2022-05-08 09:28:54 124

原创 领域驱动设计

1. 基本概念1.1 模块模块是DDD中明确提到的一种控制限界上下文的手段。我的理解就是模块是微服务拆分单元对于模块内的组织,一般是按照领域对象,领域服务,领域资源库,防腐层等组织方式定义的1.2 领域对象对应之前设计中的实体对象,但是与以往的仅有getter,setter的实体对象不同,领域对象具有了行为,对象更加丰满。同时对比将这些逻辑写在服务内(如mvc的service层中),领域功能的内聚性更强,职责更加明确1.3 资源库领域对象需要资源存储。以前我们是通过ORM直接映射

2022-05-04 17:33:22 601

原创 代码整洁之道

1. 命名1.1 名副其实通过名称就知道表达的意思。反例int d; // elapsed time in days||经过了几天时间正例int elapsedTimeInDays;int daysSinceCreation;int daysSinceModification;int fileAgeInDays;1.2 避免误导使用accountList来指一组账号,要确保它真的是list类型。否则,使用accountGroup或者bunchOfAccounts会更好用小写

2022-05-03 20:09:03 393

原创 redis数据结构

1. redis数据类型redis有五种基本数据类型stringlistsetsorted sethash这五种基本数据类型其实是逻辑数据类型,每种数据类型都有不止一种的实现方式逻辑数据类型,规定了它有哪些操作,有哪些特性。如set规定了它无序,不能重复如list规定了它有序,操作队首或队尾时间复杂度为O(1)所以它们都是规定了有哪些特性,至于你到底怎么实现,取决于你。如hash这个数据类型,在元素少的时候底层实现用的是zipList,元素多了用Dict实现。2..

2022-05-03 16:21:59 1161

原创 python高级特性

1. 迭代器1.1 自定义可迭代对象只需要在对象中申明一个__iter()__方法即可,用来返回一个迭代器对象1.2 自定义迭代器对象只需要在对象中声明一个__next__()方法即可,用来获取下一个元素值class FeiboIterator(object): """斐波那契数列迭代器""" def __init__(self, n): # 斐波那数列值的个数 self.n = n # 记录当前遍历的下标 sel

2022-04-23 11:49:48 144

原创 python之创建虚拟环境方法

1. virtualenvpip安装virtualenvpip install virtualenv创建虚拟环境目录mkdir projectcd project创建独立的python运行环境virtualenv --no-site-packages myenv1# --no-site-packages 其意义在于不复制已经安装到系统Python环境中的所有第三方包从而得到一个“纯净”的运行环境。激活虚拟运行环境source myenv1/bin/activate

2022-04-20 23:01:24 2073

原创 linux之磁盘管理、进程管理、网络管理相关命令

1. 磁盘管理当一个磁盘设备安装到系统后,先要进行分区,然后在分区中装入文件系统,最后将分区挂载到linux文件目录中。lsblk -l list block ,列出块设备的挂载信息以及所用的文件系统mount /dev/sdb5 /mnt : 将/dev/sdb5这个块设备挂载到/mnt目录下unmount /mnt : 取消挂载在/mnt目录下的块设备unmount /dev/sdb5 :取消指定的块设备的挂载mount -o ro /dev/sdb5 /mnt : ro read

2022-04-17 22:20:32 1002

原创 grep、cut、sed、awk

1. grep1.1 格式grep [otions] pattern filename1.2 option常用参数-A 8 : after 显示匹配行后8行-B 5 : before 显示匹配行前5行-C 5 :context 显示匹配行上下5行-e : pattern可以使用正则表达式-i :不区分大小写-n : 打印行号-m 10 : 最多匹配10个后停止-r :递归搜索目录--color: 将匹配的字符串用颜色显示出来# 在dir1文件夹下查找所有good字符串grep

2022-04-16 12:43:55 1117

原创 shell基础

1. 常用操作1.1 shell脚本的执行方式. a.sh : 以当前shell解析器来执行脚本source a.sh : 以当前shell解析器来执行脚本./a.sh : 以文件#!指定的解析器来执行脚本bash a.sh : 以指定的bash解析器来执行脚本bash -vx a.sh : 打印调试信息1.2 shell终端是否登录状态echo $0若结果为 -bash ,则为登录状态若结果为 bash,则为未登录状态List itembash : 在终端中执行

2022-04-14 23:47:37 1788

原创 ES基本操作

0. 补充以下划线开头的是es中自带的关键字1. 操作索引GET /_all:查看所有索引PUT /goods_index:添加索引goods_indexGET /goods_index1,goods_index2:查询多个索引DELETE /goods_index:删除索引POST /goods_index/_close:关闭索引POST /goods_index/_open:打开索引2. 映射操作2.1 添加映射向已存在的索引中添加映射字段(增量)PUT person/

2022-04-04 23:55:18 2831

原创 MongoDB基本操作

1. 数据库操作use 数据库名 : 选择数据库,没有则自动创建show databases:查看所有数据库db: 查看当前正在使用哪一个数据库数据库名.dropDatabase():删除指定数据库数据库2. 集合操作db.createCollection(name):显示创建集合name:要创建的集合名称show collections :查看当前库中的所有集合db.集合名.drop():删除指定集合3. 文档操作3.1 插入插入单条数据db.collection.

2022-04-04 11:29:46 583

原创 分布式事务

1. 2PC(两阶段提交)1.1 原理两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段和提交阶段 准备阶段:事务管理器给每个参与者发送prepare消息,每个数据库参与者在本地执行事务,并在写本地的undo/redo日志,此时事务没有提交(但需要锁定资源) 提交阶段:如果事务管理器收到了参与者的执行失败或者超时消息时,直接给每个参与者发送回滚消息;否则发送提交消息。1.2 缺点同步阻塞问题:执行过程中,所有参与节点都是事务阻塞型的。数据库本地事务只有在第二阶段(提交阶段)才会进行提交

2022-04-04 01:31:12 858

原创 限流,降级,熔断

1. 熔断对于某个目标服务调用慢或者有大量超时,此时,熔断该服务的调用,对于后续调用请求,不实际调用目标服务,直接返回一个mock的值,快速释放资源。如果目标服务情况好转则恢复调用。 一般应用在调用方。2. 限流比如一个provider是一个核心服务,给多个consumer提供服务,突然某个consumer流量飙升,占用了provider大部分机器时间,导致其他可能更重要的consumer不能被正常服务。或者导致provider处理不过来。 所以provider端需要根据consumer的重要

2022-04-02 19:51:08 159

原创 数据库服务器优化步骤

步骤1:观察数据库服务器状态是否有周期性波动如果有,可能是某一时刻出现大量查询或缓存失效,尝试加缓存或更改缓存失效策略 如果没有,进入步骤二步骤2:可能是出现了慢查询开启慢查询日志,定位到慢查询的sql语句 通过explain和show profiling命令来查看慢查询详情,根据慢查询详情进行判断步骤3:是不是sql等待时间长那就调节服务器参数,线程数等步骤4:是不是sql执行时间长那就查询加索引,优化索引 看看是不是多表join过多,优化多表联查 优化表结构步骤5:还是没

2022-03-26 00:00:21 939

原创 Java异常

所有的异常都是继承自Throwable,它是所有异常的共同祖先 Throwable有两个子类,Error和Exception Error表示错误,这种错误会导致程序奔溃,无法处理。程序中应该不允许出现Error Exception表示程序本身可以处理的异常。它分为两类,可检查异常和不可检查异常 可检查异常,它的发生是可以预测的,应该在编码的时候考虑到 未检查异常,也就是运行时异常,RuntimeException及其子类都是未检查异常1. 常见的运行时异常ClassCastException

2022-03-18 11:47:00 318

原创 微服务监控

1. 监控对象用户端监控:指业务直接对用户提供的功能进行监控 接口监控 资源监控:数据库访问量等 基础监控:对服务器本身的健康状况的监控,如cpu利用率,内存使用量等2. 监控指标请求量:如QPS 响应时间:如P99 错误率3. 监控维度全局维度:从整体角度监控对象的的请求量、平均耗时以及错误率 分机房维度:同一个监控对象,在不同机房各种指标可能相差很大 单机维度 时间维度:同一个监控对象的不同时间对比,如一天前,一周前4. 监控系统原理数据采集 服务主动上报:代码中

2022-03-16 18:50:32 3274

原创 RPC远程服务调用

1. 基本概念跨网络、跨进程的方法调用 因为客户端和服务端位于网络上不同的地址,要完成一次rpc调用,则需要以下步骤 首先建立网络连接 建立连接后,双方需要按照某种约定的协议进行网络通信 能正常通信后,服务端收到请求后需要以某种方式处理,处理完成后把请求结果返回给客户端 为了减少传输数据大小,还需要对数据进行序列化与反序列化 2. 连接方式可以基于HTTP通信 但是一次http通信就需要一次三次握手,四次挥手。反复建立和销毁tcp连接,速度不够快。 基于TCP通信 也就

2022-03-16 18:35:03 4272

原创 服务注册中心原理

1. 原理服务提供者:提供服务,在启动时,根据服务发布文件中的配置的信息,向注册中心注册自身服务,并向注册中心定期发送心跳汇报存活状态。 服务消费者:调用服务,在启动时,根据服务引用文件中配置的信息,将注册中心订阅服务,把注册中心返回的服务节点列表缓存在本地内存中,并于服务提供者建立连接 当服务提供者节点发生变更时,注册中心会同步变更。服务消费者感知后会刷新本地缓存的服务节点列表 服务消费者从本地缓存的服务节点列表中,基于负载均衡算法选择服务提供者的一个节点发起调用2. 注册中心需要提供的接

2022-03-16 18:10:54 2969

原创 23种设计模式

1. 模板方法模式定义一个操作中算法的骨架(稳定),而将一些步骤(变化)延迟到子类中。 可以使得子类不改变一个算法的结构即可重定义该算法的某些步骤。 “不要调用我,让我来调用你”2. 策略模式定义一系列算法,把它们一个个封装起来,并且使它们可相互替换(变化)。该模式使得算法可独立于使用它的客户程序(稳定)而变化 对于变化部分抽出接口,让客户端依赖接口(稳定)而不是依赖细节(变化) 策略模式提供了用条件判断语句以外的一种选择,消除条件判断语句,就是在解耦合3. 观察者模式定义对象间的一

2022-03-12 01:47:08 248

空空如也

空空如也

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

TA关注的人

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