08 2021 档案
摘要:一、简介 RPC 是一种技术思想而非一种规范或协议,常见 RPC 技术和框架有: 应用级的服务框架:阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud。 远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JS
阅读全文
摘要:一、RPC 是什么? RPC 的全称是 Remote Procedure Call 是一种进程间通信方式。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用 的细节。即程序员无论是调用本地的还是远程的,本质上编写的调用代码基本相同。 二、RPC
阅读全文
摘要:一、股票买卖 1.1 最多买一次 题目链接: https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/submissions/ 题目: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第
阅读全文
摘要:一、简介 定时器是网络框架中非常重要的组成部分,往往可以利用定时器做一些超时事件的判断或者定时清理任务等。 定时器有许多经典高效的实现。例如,libevent 采用了小根堆实现定时器,redis 则结合自己场景直接使用了简单粗暴的双向链表。 时间轮也是一个非常经典的定时器实现,Linux 2.6 内
阅读全文
摘要:一、大致流程 根据域名和 DNS 解析到服务器的IP地址 (DNS + CDN) 通过ARP协议获得IP地址对应的物理机器的MAC地址 浏览器对服务器发起 TCP 3 次握手 建立 TCP 连接后发起 HTTP 请求报文 服务器响应 HTTP 请求,将响应报文返回给浏览器 短连接情况下,请求结束则通
阅读全文
摘要:一、中央处理器 1.1 简介 早期CPU由运算器和控制器组成,称为中央处理机。随着ULSI技术的发展,CPU芯片外部增加了一些逻辑功能部件,CPU越来越复杂,因此CPU基本部分有了运算器、cache、控制器三大部分,称为中央处理器。 1.2 CPU具有的功能 指令控制:由于程序是一个指令序列,这些指
阅读全文
摘要:一、简介 which 查看可执行文件的位置 whereis 配合数据库查看文件的位置 locate 配合数据库查看文件位置 find 实际搜寻硬盘查询文件名称 (find也可以根据文件大小-size 时间-atime 正则表达式-regex) 二、which 语法: [root @redhat~]
阅读全文
摘要:一、什么是虚拟内存 虚拟内存是操作系统为每个进程提供的一种抽象,每个进程都有属于自己的、私有的、地址连续的虚拟内存,当然我们直到最终进程的数据以及代码必然药放到物理内存上,那么必须有某种机制能记住虚拟地址空间中的某个数据,被放到了那个物理内存地址上,这就是所谓的地址空间映射,也就是虚拟内存地址与物理
阅读全文
摘要:一、抛出问题 关于如何计算并发线程数,一般分两派,来自两本书,且都是好书,到底哪个是对的?问题追踪后,整理如下: 1.1 派系1 第一派:《Java Concurrency in Practice》即《java并发编程实践》,如下图: 如上图,在《Java Concurrency in Practi
阅读全文
摘要:本节我们将从linux启动的第一个进程说起,以及后面第一个进程是如何启动1号进程,然后启动2号进程。然后系统中所有的进程关系图做个简单的介绍 一、0号进程 0号进程,通常也被称为idle进程,或者也称为swapper进程。 0号进程是linux启动的第一个进程,它的task_struct的comm字
阅读全文
摘要:一、引言 Linux Namespaces机制提供一种资源隔离方案。 PID,IPC,Network等系统资源不再是全局性的,而是属于特定的Namespace。每个Namespace里面的资源对其他Namespace都是透明的。要创建新的Namespace,只需要在调用clone时指定相应的flag
阅读全文
摘要:一、LRU算法 1.1 背景 目前尽量由于摩尔定律,但是在存储硬件方面始终存在着差异,并且这种差异是不在同一数量级别的区别,例如在容量方面,内存<<外存;而在硬件成本与访问效率方面,内存>>外存。而目前互联网服务平台存在的特点: a. 读多写少,快速ms级响应,因此需要把数据搁在内存上; b. 数据
阅读全文
摘要:一、死锁及银行家算法背景介绍 1.1 死锁 1.1.1 定义: 指的是多个进程在运行过程中因为争夺资源而造成的一种僵局,当进程处于这种僵局状态时,若无外力作用,他们都将无法再向前推进的状态。 1.1.2 产生死锁的原因: (1)竞争非可剥夺性资源; (2)进程推进不当。 1.1.3 产生死锁的必要条
阅读全文
摘要:一、什么是死锁 多线程以及多进程改善了系统资源的利用率并提高了系统的处理能力。然而,并发执行也带来了新的问题——死锁。 死锁是指两个或两个以上的进程(线程)在运行过程中因争夺资源而造成的一种僵局(Deadly-Embrace) ) ,若无外力作用,这些进程(线程)都将无法向前推进。 下面我们通过一些
阅读全文
摘要:一、直接排序找中位数 直接利用自带的sort方法排序,然后返回数组的中间索引的值代码如下: 1 //1.直接排序 2 public static int findMediaMethod1(int[] a) 3 { 4 if(a.length==0) return -1; 5 Arrays.sort(
阅读全文
摘要:一、引言 当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。 HTTP状态码的英文为HTTP Status Code。 下面是常见的HTTP状态码: 2
阅读全文
摘要:一、简介 调度算法是指:根据系统的资源分配策略所规定的资源分配算法。常见的进程调度算法有: 1.先来先去服务 2.时间片轮转法 3.多级反馈队列算法 4.最短进程优先 5.最短剩余时间优先 6.最高响应比优先 7.多级反馈队列调度算法 二、先来先去服务 先来先去服务调度算法是一种最简单的调度算法,也
阅读全文
摘要:一、简介 雪花算法这一在分布式架构中很常见的玩意,但一般也不需要怎么去深入了解,一方面一般个人项目用不到分布式之类的大型架构,另一方面,就算要用到,市面上很多ID生成器也帮我们完成了这项工作。 二、分布式ID的特点 全局唯一性 不能出现有重复的ID标识,这是基本要求。 递增性 确保生成ID对于用户或
阅读全文
摘要:一、SO_REUSEADDR 目前为止我见到的设置SO_REUSEADDR的使用场景:server端在调用bind函数时 setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR,(const void *)&reuse , sizeof(int)); 目的:当服务
阅读全文
摘要:一、计算机寄存器分类简介 32位CPU所含有的寄存器有: 4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) 二、数据寄
阅读全文
摘要:一、简介 1.1 介绍 list是一种序列式容器。list容器完成的功能实际上和数据结构中的双向链表是极其相似的,list中的数据元素是通过链表指针串连成逻辑意义上的线性表,也就是list也具有链表的主要优点,即:在链表的任一位置进行元素的插入、删除操作都是快速的。list的实现大概是这样的:lis
阅读全文
摘要:一、string简介 1.1 介绍 首先在c++中string是一个类,其头文件为 < string > string在标准空间std。 具体资料在官方链接。 主要参考官方文档和具体实例。 strings are objects that represent of characters. 1.2 s
阅读全文
摘要:一、B+树插入逻辑 1,如果结点不存在,则新生成一个结点,作为B+树的根结点,结束。2,如果结点存在,则查找当前数值应该插入的位置,定位到需要插入到叶子结点,然后插入到叶子结点。3,插入的结点如果未达到最大数量,结束。如果达到最大数量,则把当前叶子结点对半分裂:[m/2]个放入左结点,剩余放入右结点
阅读全文
摘要:一、前言 最近在部署项目时要求实现负载均衡,有趣的是发现网上一搜全部都是以下类似的配置文件。 1 upstream localhost{ 2 server 127.0.0.1:8080 weight=1; 3 server 127.0.0.1:8081 weight=1; 4 } 5 server
阅读全文
摘要:一、前言 1.1 简介 Linux把物理内存划分为三个层次来管理: 层次 描述 存储节点(Node) CPU被划分为多个节点(node), 内存则被分簇, 每个CPU对应一个本地物理内存, 即一个CPU-node对应一个内存簇bank,即每个内存簇被认为是一个节点 管理区(Zone) 每个物理内存节
阅读全文
摘要:一、TCP 协议是流式协议 很多读者从接触网络知识以来,应该听说过这句话:TCP 协议是流式协议。那么这句话到底是什么意思呢?所谓流式协议,即协议的内容是像流水一样的字节流,内容与内容之间没有明确的分界标志,需要我们人为地去给这些协议划分边界。 举个例子,A 与 B 进行 TCP 通信,A 先后给
阅读全文
摘要:一、前言 “自动根据CPU数目设置进程个数和绑定CPU亲缘性”。当时笔者对CPU亲缘性没有任何概念,当时作者只是下意识的打开了google并输入CPU亲缘性(CPU Affinity)简单了做了个了解。 后来,在笔者参加实际工作以后,就碰到了这么两个问题。 问题一:如何在SMP的系统中,保证某个特定
阅读全文
摘要:一、硬中断 由与系统相连的外设(比如网卡、硬盘)自动产生的。主要是用来通知操作系统系统外设状态的变化。比如当网卡收到数据包的时候,就会发出一个中断。我们通常所说的中断指的是硬中断(hardirq)。 硬中断是外部设备对CPU的中断; 硬中断是由硬件产生的,比如,像磁盘,网卡,键盘,时钟等。每个设备或
阅读全文
摘要:一、概述 内存描述符的结构体——mm_struct,抽象的来描述linux下进程的地址空间的所有的信息。 一个进程的虚拟地址空间主要由两个数据结来描述。一个是最高层次的:mm_struct,一个是较高层次的:vm_area_structs。最高层次的mm_struct结构描述了一个进程的整个虚拟地址
阅读全文
摘要:一、简介 进程上下文和中断上下文是操作系统中很重要的两个概念,这两个概念在操作系统课程中不断被提及,是最经常接触、看上去很懂但又说不清楚到底怎么回事。造成这种局面的原因,可能是原来接触到的操作系统课程的教学总停留在一种浅层次的理论层面上,没有深入去研究。 处理器总处于以下状态中的一种: 1、内核态,
阅读全文
摘要:一、SPARC SPARC(Scalable Processor ARChitecture,可扩展处理器架构)是国际上流行的RISC处理器体系架构之一, SPARC如今已发展成为一个开放的标准,任何机构或个人均可研究或开发基于SPARC架构的产品,而无需交纳版权费。SPARC 处理器架构具备精简指令
阅读全文
摘要:一、什么是原子操作? 所谓原子操作,就是"不可中断的一个或一系列操作" 。 1.1 硬件级的原子操作 在单处理器系统(UniProcessor)中,能够在单条指令中完成的操作都可以认为是" 原子操作",因为中断只能发生于指令之间。这也是某些CPU指令系统中引入了test_and_set、test_a
阅读全文
摘要:一、锁 互斥锁是用来保护一个临界区,即保护一个访问共用资源的程序片段,而这些共用资源又无法同时被多个线程访问的特性。当有线程进入临界区段时,其他线程或是进程必须等待。 二、锁的开销 在谈及锁的性能开销,一般都会说锁的开销很大,那锁的开销有多大,主要耗在哪,怎么提高锁的性能。 现在锁的机制一般使用 f
阅读全文
摘要:一、管程 1.1 简介 管程可以视为一个线程安全的数据结构,其内部提供了互斥与同步操作,向外提供访问共享数据的专用接口(接口被称为管程的过程),通过管程提供的接口即可达成共享数据的保护与线程间同步。 使用管程,可以简化线程间互斥、同步的编码复杂度(否则需自己控制互斥、同步机制,并保证正确),可以集中
阅读全文
摘要:一、Content-Length 1.1 内容校验的方式 对于http的请求返回结果要进行内容的长度校验主要有两种方式,二者互斥使用 1、客户端在http头(head)加Connection:keep-alive时,服务器的response是Transfer-Encoding:chunked的形式,
阅读全文
摘要:一、简介 当我们被问及 HTTP 的 GET 与 POST 两种请求方式的区别的时候,很多答案是说 GET 的数据须通过 URL 以 Query Parameter 来传送,而 POST 可以通过请求体来发送数据,所以因 URL 的受限,往往 GET 无法发送太多的字符。这个回答好比在启用了 HTT
阅读全文
摘要:一、TCP三次握手 1.1 TCP报文段的头部格式 1.1.1 报文格式 1.1.2 部分报文内容 ACK:TCP协议规定,只有ack=1时,有效,也规定连接建立后,所有发送的报文ack必须为1。 SYN :在连接建立时用来同步序列号,当SYN=1,而ACK=0时,表明这是一个连接请求报文,对方若同
阅读全文
摘要:一、MySQL逻辑架构 1.1 结构分析 整体来说,MySql的逻辑架构分成三个部分。 1)客户端:主要是建立连接的过程,交互的过程 2)核心服务 3)存储引擎 这个可能比较抽象,我们结合MySql的查询过程,结合着进行学习。 1.2 结构图 二、MySql查询过程 2.1 流程图 这个图其实就是在
阅读全文
摘要:一、简介 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(BlockingIO):即传统的IO模型。 (2)同步非阻塞IO(Non-blockingIO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO
阅读全文
摘要:一、简介 1.1 POSIX AIO POSIX AIO是一个用户级实现,它在多个线程中执行正常的阻塞I/O,因此给出了I/O异步的错觉.这样做的主要原因是: 它适用于任何文件系统 它(基本上)在任何操作系统上工作(请记住,gnu的libc是可移植的) 它适用于启用了缓冲的文件(即没有设置O_DIR
阅读全文
摘要:一、前言 分布式锁相信大家一定不会陌生, 想要用好或者自己写一个却没那么简单 想要达到上述的条件, 一定要 掌握分布式锁的应用场景, 以及分布式锁的不同实现, 不同实现之间有什么区别 二、分布式锁场景 如果想真正了解分布式锁, 需要结合一定场景; 举个例子, 某夕夕上抢购 AirPods Pro 的
阅读全文
摘要:一、过期设置 1.1 过期设置的指令 Redis是key-value数据库,我们可以设置Redis中缓存的key的过期时间 expire可以设置过期时间 1 SET key value // 存入键值对 2 3 EXPIRE key 5 // 设置过期时间(秒) 4 PEXPIRE key 5000
阅读全文
浙公网安备 33010602011771号