![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
计算机基础
文章平均质量分 82
dream0130__
这个作者很懒,什么都没留下…
展开
-
接口限流策略
字节三面的场景题限流的目的是通过对于并发访问进行限速,一般是达到限制的速率,就会触发相应的限流行为。常见的限流行为如下:拒绝服务。 把多出来的请求拒绝掉,受到流量暴增的时候,会统计当前的哪个客户端来的请求最多,直接进行拒绝,把带恶意的请求阻挡。服务降级。关闭一些不太重要的服务,让给更重要的功能。另一种是返回部分数据。特权请求。我们只把有限的资源分给重要的用户,我们应该把资源尽可能的分给特权用户。延时队列。利用一个队列来进行缓冲大量的请求,如果队列满,则进行拒绝,一般用于应对短暂的峰刺请求。限原创 2021-04-19 21:39:30 · 1068 阅读 · 0 评论 -
Gnu linker script 脚本手册-笔记
一.概述链接过程由链接脚本(lds文件)控制,链接脚本主要用于规定输出文件的内存布局。(可以看做链接过程中的Makefile)链接器的默认链接脚本,可以通过 ld --verbose 来进行查看,可以通过 -T 选项用于指定自己的链接脚本。二.简单例子SECTIONS { . = 0x10000; .text : { *(.text) } . = 0x800000; .data : { *(.data) } .bss : { *(.bss) } }. = 0x10000 :原创 2021-03-29 23:17:39 · 513 阅读 · 1 评论 -
mapreduce 论文 - 阅读笔记
一.概要MapReduce是一种编程模型,它是一种用于处理和生成大型数据集的实现。用户通过指定一个用来处理键值对(Key/Value)的map函数来生成一个中间键值对集合。然后,再指定一个reduce函数, 它用来合并所有的具有相同中间key的中间value 。二.编程模型由用户所编写的Map函数接收输入,并生成一个中间键值对集合。MapReduce这个库会将所有共用一个键的值组合到一起,传递给Reduce函数Reduce函数接收一个中间键以及该键的值得集合作为输入。它会将这些值合并起来,生成原创 2021-02-01 14:46:18 · 373 阅读 · 1 评论 -
链接-学习笔记
以下内容均为网络上整理的资料一.链接是什么?我们在这里可以去引用csapp 的定义 : 链接(linking)是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或被拷贝)到存储器并执行。 了解这句话的含义,我们首先需要明白linux 系统上的一般编译过程:需要强调的是,链接可以执行于编译时(compile time),也就是在源代码被翻译成机器代码时;也可以执行于加载时,也就是在程序被加载器(loader)加载到存储器并执行时;甚至执行于运行时(run time),由应用原创 2021-01-30 00:35:33 · 204 阅读 · 0 评论 -
TCP和UDP区别-学习笔记
TCP和UDP基本区别TCP面向连接,UDP无连接TCP需要通过三次握手,UDP指明对端通信地址即可TCP可靠,UDP不可靠TCP通过校验和,超时重传,确认机制来保证可靠性,UDP无序性TCP是字节流,UDP是数据报的形式UDP边界性保证发几个包,收几个包TCP有拥塞控制机制,UDP没有拥塞控制机制TCP首部开销是比UDP首部开销大的TCP一般用于可靠性的连接,UDP一般用于实...原创 2020-04-20 22:13:18 · 210 阅读 · 0 评论 -
操作系统中的堆栈区别
堆和栈是两种内存分配的统称。一.栈栈会存放函数的局部变量,函数的返回地址等。栈有"LIFO"(后进先出)的特点。栈由操作系统分配,自动回收.栈的大小受到限制。在x86体系下,栈一般通过esp 指向栈帧顶部,ebp指向底部不断的嵌套或者为局部变量分配空间,可能导致栈溢出。这时候会触发一个异常在执行完一个函数的时候,其中的变量都会从堆栈中弹出。无需亲自管理内存,变量会自动分配和释放。...原创 2020-04-11 17:17:33 · 1197 阅读 · 0 评论 -
vector的性能利器-reserve
vector是c++编程中的最常见的容器之一,可以帮助用户自动管理存储空间,需要分配存储空间的场景,可以取代原生数组.vector在实践的过程中,提升性能的要点就是尽量使用reserve,运行期能确定个数,应该用reserve,不建议用传递大小的数组构造函数或者调用resize为什么不建议使用resize?reserve和resize函数都能分配足够容纳下指定个数对象的空间.不同的是resi...原创 2020-03-09 19:59:22 · 436 阅读 · 0 评论 -
EPOLL 的 LT和ET-学习笔记
Epoll一般有两种方式边缘触发(ET)和水平触发(LT)epoll 默认模式是水平触发水平触发: 只要满足条件,就触发事件(只要内核缓冲区中的数据没有读完,就会一直触发)边缘触发: 每当状态发生变化的时候就触发一个事件.举一个例子,你在吃一碗饭,LT当你没有吃完这碗饭,它会一直给你提示,ET 当你去打第二碗饭的时候,才会给你提示.LT相当于一个快速的poll,可读可写就绪条件和po...原创 2020-03-07 16:13:32 · 213 阅读 · 0 评论 -
select 的文件描述符为什么是1024?
一直不知道为什么select的文件描述符限制是比较小的?于是去查看内核5.6的版本,其中在/include/uapi/linux/posix_types.h有说明/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */#ifndef _LINUX_POSIX_TYPES_H#define _LINUX_POSIX_TYPE...原创 2020-03-07 14:54:16 · 1278 阅读 · 0 评论 -
进程间通信-管道学习笔记
均为整理的资料,侵删.IPC的通信方式-管道.管道一般分为匿名管道和有名管道.管道是最基本的进程通信的方式.匿名管道特点只能在父子进程之间进行使用.有名管道客户克服管道没有名字的限制.因此,除了具有管道所具有的功能之外,还允许无亲缘关系进程之间的通信.匿名管道(pipe)特征:只提供单向通信,也就是说,两个进程都访问这个文件.如果进程1往文件内写东西,进程2只能读取文件的内容.只...原创 2020-03-07 14:43:22 · 210 阅读 · 0 评论 -
Page Cache同步-学习笔记
以下均为自己整理的资料通常Cache 的同步方式有两种,写穿和写回,对应Linux的Page Cache 上所谓的写穿就是write () 操作将数据拷贝到页缓存后立即和下层进行同步的写操作,完成下层的更新之后返回,写回正好相反,指的是写完Page Cache直接返回,Page Cache 到下层的更新操作是异步进行的.Linux 下的 Buffered IO 默认使用回写机制,Page Ca...原创 2020-02-26 23:35:00 · 222 阅读 · 0 评论 -
glibc下的memcpy 源码学习笔记
一直听说memcpy有内存重叠的问题,想看看为什么会有这个问题?glib 版本2.15#include <string.h>#include <memcopy.h>#include <pagecopy.h> #undef memcpy void *memcpy (dstpp, srcpp, len) void *dstpp; ...原创 2020-02-23 14:00:45 · 617 阅读 · 0 评论 -
学习笔记-fork函数(一)
一.进程复制fork建立了父进程的唯一完整副本,作为子进程执行。vfork 类似于fork 函数,与父进程共享地址空间,并不创建副本二.写时复制内核采用了写时复制技术,以防止fork执行时将父进程的所有数据复制到子进程在早期的fork函数中,内核对于父进程的每个内存页,都会为子进程创建一个相同的副本。这样会使用了大量内存,复制操作耗费了很长时间。内核通过子进程和父进程共享同一内存...原创 2020-02-18 19:20:51 · 239 阅读 · 0 评论 -
Linux学习笔记-伙伴算法
一.为什么要有伙伴算法?伙伴算法是Linux系统一种管理内存的分配器,为了减少内存碎片而设计。伙伴算法拥有两个关键特征:速率和效率。二.伙伴算法是什么?伙伴算法把所有的空闲页框分为11块链表,每块链表分别包含大小为1,2,4,8,16,32,64,128,256,512,和1024个连续页框的页框块。我们可以通过查看<mmzone.h>文件,获取相应的信息#define ...原创 2020-02-15 22:31:36 · 713 阅读 · 0 评论 -
leetcode(笔记)-找到两个有序数组中的中位数
寻找两个有序数组的中位数 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3] nums2 = [2]则中位数是 2.0 示例 2:nums1 = [1, 2] nums2 = [3, 4]...转载 2019-11-19 21:00:41 · 152 阅读 · 0 评论 -
内核学习笔记-RCU机制
一.什么是RCU机制RCU是Linux中比较重要的一种同步机制.顾名思义就是 " 读,拷贝更新 " ,该机制记录了指向共享数据结构的指针的所有使用者,在该结构将要改变的时候,首先创建一个副本,在副本中修改.在所有进行读访问的使用者结束对旧副本的读取之后,指针可以替换指向新的,修改后的副本的指针,这种机制可以允许并发读写但是如果存在多个写者时,在写者把更新后的副本覆盖到原来数据之中,写...原创 2019-10-29 17:22:55 · 313 阅读 · 0 评论 -
c++为什么有inline?
一.什么是内联函数内联函数的简单理解就是编译的时候把函数定义替换到调用的位置,用来降低运行时间,编译器将使用函数的定义体来替代函数调用语句,这种替代发生在编译阶段但是内联函数仅仅只是对于编译器的建议,编译器是不是采取你的建议取决于函数是不是符合内联的有利条件,不然编译器将忽视函数的内联声明.inline int add(int a , int b ){ return a+b;}int...原创 2019-10-27 22:38:34 · 141 阅读 · 0 评论 -
smaz-基于short string的压缩库
最近在写自己的学习项目-一个简单的存储引擎(c++),其中在对于key的压缩算法犹豫了很久,在我查找了很多资料之后找到的适合短字符串压缩的算法,决心使用smaz库的压缩算法,然而对于这个库的介绍资料少之又少,想要整理一部分资料出来一.smaz库的介绍基于小对象的压缩算法。由redis作者编写https://github.com/antirez/smaz 目前应用在redis数据库上面。与传统...原创 2019-10-24 23:02:46 · 770 阅读 · 1 评论 -
Linux内核等待队列-源码简单分析
一.概述等待队列在Linux中是十分常用的数据结构,等待队列和进程的调度紧密关联在一起,在驱动程序中,使用等待队列来实现进程的阻塞和进程的唤醒,在epoll中也有等待队列的实现,所以我们很有必要来学习一下等待队列二.等待队列等待队列用于让进程等待某一个特定事件发生而不需要频繁的轮询,进程在等待期间睡眠,在事件发生的时候由内核来进行自动唤醒 每一个等待队列都由一个等待队列头来决定的...原创 2019-10-23 22:01:47 · 301 阅读 · 1 评论 -
new 和malloc 的区别
1.申请内存的所在位置new 从自由存储区上为对象动态分配内存空间,malloc 函数从堆上分配内存.自由存储区是c++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存为自由存储区域,堆是操作系统中的概念,自由存储区是不是堆,取决于new 操作符的实现细节,自由存储区不仅可以是堆,还可以是静态存储区,这都看new操作符在那里为对象分配内存,甚至new可以不为对象分配内...原创 2019-08-31 14:23:55 · 143 阅读 · 0 评论 -
c++11自旋锁的实现
首先我们需要明确,自旋锁式一种用于保护多线程共享资源的锁,它在Linux 内核中也有所使用.(epoll 中有使用) 和一般互斥锁不同的式当自旋锁尝试获取CPU的时候可以是一种忙等的状态,自旋锁不能主动放弃CPU ,如果是内核中的自旋锁,如果没有及时释放一种拿到手中,可能会导致系统挂起我们在这里使用cas 操作来实现自旋锁,如果内存中的值没有达到预期值就一直进行循环等待,当预期值相等的时候,进行...原创 2019-08-12 22:00:46 · 1038 阅读 · 0 评论 -
对于epoll的实现的简单理解和反应堆模型的实现
理解了中断、等待队列、调度,你就能懂Linux的80%写给自己 : 发现自己对于很多知识都只是仅仅了解一哈,不做深入了解,很多Bug出现自己都不知道为什么?这和工具人有什么区别?我们要了解epoll如何实现,首先需要了解关于内核的三点操作,什么是等待队列,内核的poll机制一.等待队列在这里简单解释一下队列头是生产者,队列成员是消费者,当头的资源ready后,逐渐执行每一个成...原创 2019-08-09 16:55:12 · 234 阅读 · 1 评论 -
笔记-虚拟内存
首先,所有应用程序对于硬件的所有操作都必须通过操作系统来完成。我们可以把操作系统理解为在硬件和应用程序之间插入的一层软件操作系统由两个基本功能:(1)防止硬件被关注的应用程序滥用.(2)向应用程序提供简单一致的机制来控制复杂而又通常大不相同的第及硬件设备。操作系统通过几个基本的抽象概念(进程,虚拟内存和文件)来实现这几个功能,在本文中只讨论虚拟内存.文件是对I/O设备的抽象表示,虚拟内存是...原创 2019-01-22 16:08:06 · 270 阅读 · 0 评论