自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(265)
  • 资源 (1)
  • 收藏
  • 关注

原创 webbench1.5 源码分析

github 主页readme原文:Web Bench is a very simple tool for benchmarking WWW or proxy servers. Uses fork() for simulating multiple clients and can use HTTP/0.9-HTTP/1.1 requests. This benchmark is not very realistic, but it can test if your HTTPD can really h

2022-04-18 19:49:36 360 1

原创 数组中01,可以将数组的一段翻转(0 变 1, 1 变 0),求翻转后数组最多1的个数

这道题的关键思想:翻转 0 变 1 ,相当于让 1 的个数 +1翻转 1 变 0 ,相当与让 1 的个数 -1解题思路:根据原来的数组 a[] 构造一个新的数组 b[],若 a[i] = 0 则 b[i] = 1若 a[i] = 1 则 b[i] = -1对 b[] 求最长子段和,包含最长子段和的区间就是进行01翻转的区间。代码略...

2022-04-18 19:14:33 1184

原创 STL常用api(函数版)

二. 常用APIvector / list / deque vector<int>v(n, val); v.resize(n, val); vv.resize(n, vector<int>(m, val)); // 二维数组 v.insert(v.begin(), val); v.erase(v.begin() + i); v.push_back(val); v.pop_back(); v.size(); v.empty(); // deq

2022-03-15 21:15:10 512

原创 内存访问常见错误

valgrind内存检查原理建立两个全局表:Valid-Value表:进程的整个地址空间的每一个字节(Byte), 都有与之对应的8bit, 对于CPU中的每一个寄存器, 也都有一个与之对应的bit向量. 这些bit负责记录该字节或者寄存器是否具有有效的、已初始化的值.Valid-Address表:整个地址空间的每一个字节, 还有阈值对应的1bit, 记录改地址能够被读写.检测原理当读写内存中某个字节时, 首先检查Address表, 如果是无效位置, 则错误valgrind中维护一个虚

2022-03-13 17:04:58 562

原创 数位dp模板(1的个数0

力扣:1的个数题意:求1-n的所有数中包含的1的个数。模板:数组:dp[pos][state] : 初始化为-1a[len] : 把数字存储为数组dfs(pos, state, limit):pos代表剩余的可变位数state代表前缀中有几个1limit代表前缀是否都为0,(是否一直为上界)up = limit ? a[pos] : 9; for循环up,定义tmp累加,!limit 下记忆化到dp数组中class Solution {public: int a[20]

2022-02-20 20:45:08 217

原创 二分查找模板

我写二分老是死循环,找了个模板:点击链接左闭右闭 : [left, right]基础模板1while条件 left <= right 时:left = mid + 1right = mid - 1基础模板2while条件 left < right 时:mid = (left + right) / 2left = mid + 1rgiht = midNOTE这里 (left - 1)但是right没有减一 的理解:本轮已经判断完mid了,实际上就应该判断.

2021-12-03 14:55:10 472

原创 单例模式——饿汉/懒汉(c++)

单例模式单例模式 指一个类在整个程序中只有一个实例。特别是某些工具类,在所有地方使用该类都只需要一个实例单例模式分为两种类型饿汉在类定义的时候实例化NOTE:c++里面,静态变量必须要初始化懒汉在第一次用到类实例的时候实例化很多地方有类似的思想:写时拷贝、晚绑定可以通过加锁的方式实现线程安全可以通过c++11中的特性实现线程安全局部静态变量在函数第一次调用的时候初始化代码饿汉/* * 饿汉模式(线程安全) * 在类定义的时候就

2021-12-02 10:18:25 256

原创 tmux用法

基本命令命令描述tmux new -s test创建会话ctrl + b , d分离会话tmux attach-session -t my_session重连会话ctrl + b , s在列表中选择session切换一个窗口内的多个窗格命令描述ctrl + b , %划分左右窗格ctrl + b , "划分上下两个窗格ctrl + b , <上下左右>切换到对应窗格ctrl + b , x关闭

2021-10-20 18:48:12 96

原创 每日一问(20210923)—— cpu 内部各个部件的大小、时延?

问题:cpu 内部各个部件大概多大?大概时延是多少?量化研究方法 第2章的参数intel i7 的参数stack overflow 链接core i7Core i7 Xeon 5500 Series Data Source Latency (approximate) [Pg. 22]local L1 CACHE hit, ~4 cycles ( 2.1 - 1.2 ns )local .

2021-09-24 21:24:35 261

原创 每日一问(20210922)——为什么要区分 icache 和 dcache ?

问题:L1 cache 中,为什么要区分 icache、dcache ?为什么到了 L2 cache 就不区分了呢?stack overflow 链接优点让 icache 放置在靠近取指单元的位置,让 dcache 放置在靠近内存单元的位置,从而同时降低两者的延迟这种分离式的设计,在物理位置上降低了时延。独立的 icache 和 dcache 使得并行获取指令和数据成为可能流水线中取指令和取数据属于不同的模块,硬件上可以并行本质上拆分后的带宽是同一缓存的两倍允许我们.

2021-09-24 21:05:32 1323 5

原创 每日一问(20210921)—— VIPT 和 PIPT是什么东西?

问题:VIPT 、 PIPT 分别是什么东西,怎么一回事?CPU 缓存实现方式1. 缓存结构ARM中的缓存结构CPU 是由多个缓存行(cache line)组成的,每个缓存行包括:一个有效为(valid bit)一个标记地址(用于标识其对应的物理地址(在 ARM 中))一些其他的状态信息通常,CPU的缓存行(常见的是64B)为单位把物理内存中的数据读取到CPU缓存中。为了定位缓存行,物理地址被分为三个部分:Tag也被称为 路(way)同一组中,支持的最大Tag数称为.

2021-09-22 23:49:24 1524

原创 现代操作系统 原理与实现(银杏书)—— 进程间通信

进程间通信 (IPC)基础概念简单IPC概念IPC至少需要两个进程参与: 一个发送者,一个接收者内核为两个进程映射了一段共享内存内存一种常见的通信数据的抽象——消息共享内存 VS 基于共享内存的消息传递 VS 操作系统辅助的消息传递共享内存直接在两个进程间建立共享区域,进程可以直接使用该共享区域上的数据,不存在“消息”的抽象共享内存理论上讲,可以实现零内存拷贝的传输基于共享内存的消息传递操作系统在通信过程中不干预数据传输多了“消息”的抽象消息传递的基本接口:发送消

2021-09-21 21:58:48 453

原创 每日一问(20210920)—— RPC 和 HTTP 区别?

文章目录RPC 基本概念HTTP 基本概念RPC 基本概念HTTP 基本概念

2021-09-21 21:56:29 96

原创 每日一问(20210919) 同步、异步、堵塞、非堵塞 的关系?

问题:同步、异步、堵塞、非堵塞 分别是什么意思,什么区别?一篇很细的博客讲解四者之间的关系两者关注点不同同步、异步是两个线程之间通信时出现的关系关注的是消息通信机制堵塞、非堵塞是一个线程在某个时间段的状态是线程在等待调用结果时的状态同步 VS 异步同步执行一个“调用”后, 调用者 主动等待 结果,才继续执行后续的操作。异步执行一个“调用”后,调用者 不等待 结果,而是 去执行其他的操作,直到收到了通知(回调函数等),然后才回来继续执行刚才的操作。.

2021-09-19 15:45:53 114

原创 每日一问(20210919) MESI协议

问题:什么是MESI协议?文章目录MESI协议1. MESI的状态基础概念MSI 状态的拓展2. MESI 的状态转换MESI协议1. MESI的状态基础概念状态 是指的专用缓存块的状态。即:每个核的私有缓存上,某个缓存块的状态。对于单核处理器,每个 cache line 有 2 个标志:dirty 和 valid。对于多核处理器,要多出来一些保证一致性的标志,MESI 包含 4 个标志:Modified, Exclusive, Shared, Invalid。4 个状态可.

2021-09-19 11:08:22 139

原创 每日一问(20210918) —— 什么是缓存一致性?

问题:什么是缓存一致性?多处理器体系结构多处理器定义为紧耦合处理器组成的计算机这些处理器的协调与使用由单一处理器系统控制,通过共享地址空间来共享存储器量化研究方法第5章 笔记 链接1. 按照存储器组织方式分为两类对称(共享存储器)多处理器(SMP)也被称为集中式共享存储器多处理器特点:核心数较少共享一个集中式存储器所有处理器平等访问它也被称为 一致存储器访问多处理器(UMA)因为: 所有处理器访问存储器的延迟都是一致的分布式共享存储器(DSM).

2021-09-19 00:18:01 444

原创 现代操作系统 原理与实现(银杏书)—— 操作系统调度

操作系统调度单核调度策略经典调度先到先得 / 先进先出(FIFO)缺点:长短任务混合的场景对短任务不友好如果长任务先到,那么所有短任务都等待很久对I/O密集型任务不友好I/O时会放弃CPU重新排队最短任务优先(SJF shortest job first)缺点:必须预知任务的运行时间迟到的短任务无法优先最短完成时间任务优先(STCF)抢占式的SJF时间片轮转(RR Round Robin)优先级调度多核调度策略能耗感知调度(EAS, Ener

2021-09-06 16:51:34 418

原创 现代操作系统 原理与实现(银杏书)—— 进程与线程 (纤程、协程)

进程与线程进程每个进程对应一个运行中的程序进程的内存空间布局自顶向下依次(顶为最大地址,底为最小地址)为:内核代码及数据处在内核栈用户栈自顶向下扩展栈底在高地址,栈顶在低地址代码库(只读)用户堆自底向上扩展堆顶在高地址数据与代码段进程控制块 PCBLinux 4.14中PCB对应的数据结构task_struct包含的部分: struct task_struct { // 进程状态 volatile lo

2021-09-05 21:25:28 349

原创 现代操作系统 原理与实现(银杏书)—— 内存管理

虚拟内存应用程序在运行时使用虚拟内存,CPU负责将虚拟地址翻译成物理地址,操作系统负责设置虚拟地址和物理地址之间的映射虚拟地址和物理地址内存管理单元(MMU, Memory Management Unit)转址旁路缓存(TLB, Translation Lookaside Buffer)分段与分页机制AArch64架构下的4级页表为什么使用多级页表?多级页表的设计极大减少了页表占用的空间大小多级页表允许在整个页表结构中出现空洞,而单击页表则需要每一项都实际存在单级页表可以看做以

2021-09-05 14:42:03 261

原创 现代操作系统 原理与实现(银杏书)—— 概述、arm硬件结构

概述操作系统的共性从硬件的角度来看:管理硬件将硬件资源纳入统一的管理对硬件提供抽象将有限的、离散的资源抽象成无限的、连续的资源从应用的角度来看:服务于应用提供了不同层次的接口(系统调用)以满足应用的需求管理应用对应用的生命周期进行管理(加载、启动、切换、调度、销毁)操作系统接口系统调用接口应用程序通过系统调用向操作系统内核申请服务POSIX接口Portable Operating System Interface for un

2021-09-05 13:22:02 905

原创 STL常用接口

<string.h>初始化string string s1; string s2(s1); string s3("string"); string s4(10, 'c');string的输入 stream is, os; os << s; is >> s; getline(is, s); // 从is中读取一行给s,返回isgetline()getline()函数的参数是一个流is和一个s

2021-09-04 21:52:28 229

原创 c/c++处理输入(字符串处理)

有时候输入会给定字符串的形式,需要进行特定处理c++stringstream 流处理#include <iostream>#include <sstream>using namespace std;int main(){ // 逗号分隔开的串,使用getline()函数 string str("1,2,-3,-4"); string tmp; int a; stringstream input(str); while(getline(input, .

2021-09-01 19:44:14 369

原创 riscv指令集基础

riscv学习参考自如下的书,感谢几位优秀的老师和同学的工作,让我不用看英文。RISC-V 手册(中文版)翻译:勾凌睿、黄成、刘志刚校阅:包云岗还有感谢Patterson等人,创造出如此优秀的ISA本书主要参考资料:参考卡RISC-V全部指令集的精简描述(P1)指令图每章的第一个图以同样的格式列出了所有RISC-V指令的全称操作码映射这些表格在一页展示了指令布局,操作码,格式类型和每页指令扩展的指令助记符指令术语表附录A对每个RISC-V指令和伪指令的详细描述,加起来还不.

2021-08-08 22:32:25 7948

原创 生产工具篇——linux命令

磁盘管理命令dfdf -h / 查看磁盘的总剩余容量du-a 列出所有-h 合适单位显示du -h -d 0 * 列出当前目录下所有文件和目录的大小进程命令top查看动态进程ps查看进程 -l 长格式 -e 所有进程 -a 显示终端所有 -x 显示没有终端的进程 -r 显示正在运行的所有 -au,-l 比较好用 ps -aux | grep 脚本名 找到所有终端后台运行的脚本进程挂起相关ctrl+z 挂起正在运行的进程ctrl+c 结束

2021-07-31 21:20:14 42

原创 生产工具之——我的vim配置

~/.vimrc文件配置" 按键映射map J 5jmap K 5kmap H 7hmap L 7linoremap jj <esc>set clipboard+=unnamed " 与vim共享剪切板setlocal noswapfile " 不要生成swap文件set bufhidden=hide " 当buffer被丢弃的时候隐藏它colorscheme evening " 设定配色方案set number " 显示行号set cursorline " 突出显示

2021-07-31 19:46:49 152

原创 量化研究方法——第五章 线程级并行(书中内容笔记)

引言指令级并行(ILP)的汇报降低,单处理器发展缓慢,引入了计算机体系结构的一个新的时代,线程级并行(TLP)。TLP意味着存在多个程序计数器,因此主要通过MIMD加以开发。这一章的重点是多处理器——由紧耦合处理器组成的计算机,这些处理器的协调与使用由单一处理器系统控制,通过共享地址空间来共享处理器。两种不同的软件模型来开发TLP:并行处理运行一组紧密耦合的线程,协同完成同一任务多重编程执行可能由一或多为用户发起的多个相对独立的进程,这是一种请求级并行形式根据所包含的处理器数量,

2021-07-30 22:31:27 1079

原创 生产工具之——vscode真香

一、本文提到的vscode用法本机(win)端,安装vscode + 插件服务器(linux)端,配置生产环境,实现远程开发。server可以是:Microsoft Store里面装的wsl、实验室局域网下的linux台式机、买的服务器、VMware里面已启动的虚拟机(通过局域网可以访问)。二、服务端配置安装ssh,启动ssh服务ifconfig查看自己ip(局域网下)特别提一句 wslwsl是在windows商店里直接下的linux子系统。对于win机器,想要linux环境进行不

2021-05-19 14:24:28 701

原创 剑指 Offer 16. 数值的整数次方

LeetCode剑指 Offer 16. 数值的整数次方代码实现能力错误1:对于n很大时求幂,直接遍历,超时。错误2:对于n在边界时(2^31-1),直接做加法,越界。错误3:进行二分求幂,重复调用两次,超时。例如:reuturn pow(x, n/2) * pow(x, (n+1)/2);这里重复了,至于一次,用一个变量tmp记录即可。思路+代码:class Solution {public: // 二分求幂运算 // 第一次错误: return myP

2021-05-12 21:35:33 53

原创 leetcode 剑指 Offer 14- I. 剪绳子

LeetCode剑指 Offer 14- I. 剪绳子主站 343思路+代码:/** * 872.叶子相近的树 * * 思路: * 一. 贪心 * 尽可能减成长度为3的小绳子,可保证长度最长 * 二. 动态规划(1) * 1. 用dp[i]表示长度i的绳子剪成m段时的最大乘积,初始化dp[2]=1, * 2. 先把绳子剪掉一段j,考虑剩余部分,(因为剪掉1对乘积无增益,所以2起步剪) * 3. 剪掉j后,剩下(i-j)可以剪可以不剪,不剪的

2021-05-10 21:23:35 72

原创 静态联编和动态联编

静态联编,调用函数只与指针的类型有关,与指针指向子类无关,指针是父类的指针,就会调用父类的函数。动态联编,前提是父类的函数是虚函数,调用的函数,是指针指向的对象所对应的函数。...

2020-11-12 22:54:52 136

原创 top-K问题 第k小的数

链接:LeetCode题意:求第k小的数,或前k小的数。方法一:快排,直接前k个好了。(nlogn)。方法二:普通暴力,一遍遍历,设一个数组维护前k个数。O(nk)方法三:优化二,数组换成堆,O(nlogk)。方法三:BFPRT算法,线性查找,时间复杂度O(n)。实质上是类似于快速排序的过程,不过快排中选pivot是选的最边上值,而这里选择了一种中位数的中位数方法()知乎上一个关于复杂度的计算概括:未完待续...

2020-09-22 15:55:38 127

原创 整数拆分求乘积最大(DP)

链接:leetcode题目:给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。说明: 你可以假设 n 不小于 2 且不大于 58。方法一:也就是我的第一想法,就是暴力深搜。题解上面有这个解法,也就是说可以。但是具体一点,要有必要的剪枝,加上记忆化搜索。确实是太久没上手做题了,自己想解题思路的时候死活没想到记忆华搜索这回事来。要努力吧!方法二:这是个数学规律。拆的越多越好,拆成3333***,最后剩一个再乘。方法三:真正的方法,DP。把

2020-09-22 15:07:36 5317 3

原创 git常用命令

马上要进实验室做事情了,今天再整理一下git常用命令,方便之后使用查阅。另外,git教程git init初始化仓库git add a.txt把文件加入仓库,(添加到暂存区)git commit -m "添加了新文件a.txt"把文件提交到仓库git status查看哪个文件有修改git diff a.txt查看某个文件哪里修改了git diff HEAD -- a.txt查看当前版本和刚修改过的a.txt的区别git log查看历史提交记录git log --pre

2020-07-14 22:14:06 120

原创 听课记录——物联网技术发展趋势

今天听了一次讲座,是北京科技大学的王老师讲的,题目是《物联网技术发展趋势》。做笔记如下:一、物联网是国家未来经济基建的重要内容—— 新基建:5G、物联网、大数据平台、机器人、充电桩—— 长期的需要:练内功:内部消费市场as USA;自己科技;新经济—— 新经济:数字经济;新基建二、物联网基础物联网的定义IOC(Internet of Things)把物体连在网络上物联网的应用智慧城市、智慧工业物联网的结构、边界应用层 + 网络层 + 感知层三者缺一不可感知\color{red}

2020-07-14 12:41:07 579

原创 gem5 learning——(一)文件结构

前几天配了gem5的环境,过程还是蛮曲折的,下东西慢,自己重装系统也好几次,装好之后也不知道干啥的,就找了gem5的官方文档看了看,这里做一些总结。gem5是什么官方文档的说法是:The gem5 simulator is a modular platform for computer-system architecture research, encompassing system-level architecture as well as processor microarchitecture.

2020-07-06 19:18:52 433

原创 计算机体系结构量化研究方法学习笔记(二)——第二章 存储器层次结构设计

一、引言一种经济型方案——存储器层次结构,利用了局部性原理。一般情况下,低层级存储器中的数据是其上一级存储器中数据的超集。Intel Core i7为例,每个时钟周期可以有每个核心生成两次数据存储器引用,i7有4个核心,时钟频率为3.2GHz,除了大约128亿次128位指令引用的峰值指令要求外,每秒最多还可生成256亿次64位数据存储器引用,总峰值带宽为409.6GB/s。二DRAM的峰值带宽只有25GB/s(6%)。传统上,存储器层次结构的重点是优化存储器平均访问时间,这一时间由访存访问时

2020-06-22 21:20:58 1030

原创 计算机体系结构量化研究方法学习笔记(一)——第一章 量化设计与分析基础

第一章 量化设计与分析基础1、引言2、计算机的分类3、计算机体系结构的定义2、计算机的分类二级目录三级目录1、引言发展过程:20世纪80年代早期,开发出新体系结构——RISC(精简指令集计算机)。主要关注两点:指令级并行的开发、缓存的使用。基于RISC的计算机抬高了性能指标。促使了1986-2003,计算机性能以超过50%的年增长率持续增长17年。然而,由于风冷芯片最大功耗和无法有效地开发更多指令级并行这两大孪生瓶颈,单处理器性能受限了。2004年,Intel取消了高性能单核处理器项目,这是标志

2020-06-19 16:17:37 2791

原创 SQL——查询和1002号的同学学习的课程完全相同的其他同学的学号和姓名

今天做sql题,看到这个题目后,就感觉完全相同这个限定很是特别,完全相同,意思显然是:1、选课数目相同,2、选择的课每个都相同。然后书上答案看着不对就去搜了搜,果真各有各的说法,看了几个博客,自己总结了一番,最终还是选择code更直观。 首先表结构只有一个:sc(sno,cno,grade)。表内数据如图,只有1001和1002是完全一样的。note:下面给的sql语句为了能有1...

2020-03-14 12:26:55 10831 5

原创 数据库——数据库完整性

数据库的完整性是指数据的正确性和相容性。1、实体完整性 关系模型的实体完整性在create table中用primary key定义。一种是定义为列级约束条件,另一种是定义为表级约束条件。 2、参照完整性 在create table中用foreign key短语定义哪些列为外码,用references短语指明这些外码参照哪些表的主码。 对于参照完整性,除了应该定义外...

2020-02-27 15:02:46 1066

原创 数据库——数据安全性

1、存取控制 确保只授权给有资格的用户访问数据库的权限,同时令所有未被授权的人员无法接受数据,这主要通过数据库系统的存取控制机制实现。存取控制主要包括定义用户权限和合法权限检查两部分。 1)定义用户权限,并将用户权限登记到数据字典中; 2)合法权限检查。 C2级的数据库管理系统支持自主存取控制,B1级的数据库管理系统支持强制存取控制。2、自主存取控制 SQL标准对...

2020-02-27 11:36:21 810 1

tinyhttp.tar

自己学习整理了tinyhttp的代码,500多行受益匪浅,不过源码是不能直接运行的,找了好久的博客才运行起来,自己写了篇博客,也把自己的代码传上来

2019-12-29

空空如也

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

TA关注的人

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