自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [学习笔记]《CSAPP》深入理解计算机系统 - Chapter 7 链接

高速编译器驱动程序,链接器应该构建一个完全链接的可执行目标文件, 它可以加载到内存并运行,在加载时无需更进一步的链接。文件中的代码和数据,而不是像静态库的内容那样被复制和嵌入到引用他们的可执行文件中。其次,在内存中,一个共享库的。是一个目标模块,在运行或加载时,可以加载到任意的内存地址,并和一个在内存中的程序链接起来。,在链接时,链接器将只赋值被程序引用的目标模块(函数),这就减少了可执行文件在磁盘和内存中的大小。如果定义一个符号的库,出现在引用这个符号的目标文件之前,引用就不能被解析,链接会失败。

2024-09-10 16:26:54 680

原创 [学习笔记]《CSAPP》深入理解计算机系统 - Chapter 6 存储器层次结构

写回: 尽可能地推迟更新,只有当替换算法要驱逐这个更新过的块时,才把它写到紧接着的第一层中,缺点是增加了复杂性。发出请求,磁盘控制器收到指令(比如读),之后,将逻辑快好翻译成一个扇区地址,读该扇区内容,然后将这些内容直接传送到主存,不需要。写分配: 加载相应的低一层的块到高速缓存中,然后更新这个高速缓存块。的高速缓存块写回紧接着的第一层中。高速缓存既保存数据,也保存指令。既保存指令又保存数据的高速缓存称为"同一的高速缓存(非写分配: 避开高速缓存,直接把这个字写到低一层中。直写: 写一个缓存了的字。

2024-09-10 10:25:48 643

原创 [学习笔记]《CSAPP》深入理解计算机系统 - Chapter 4 处理器体系结构&Chapter 5 优化程序性能

简单来说,寄存器是单个的存储单元,而寄存器文件是这些寄存器的集合。在CPU的设计中,寄存器文件是实现寄存器存储和访问的关键组件。寄存器文件是CPU内部的一个物理结构,它实现了寄存器的物理存储和访问。寄存器文件通常包含多个寄存器,每个寄存器都有一个唯一的标识符或编号。寄存器文件是一组寄存器的集合,它们被组织在一起,形成一个存储结构。寄存器文件允许CPU通过寄存器的编号来访问和操作这些寄存器。在硬件中,寄存器直接将它的输入和输出线连接到电路的其他盆。中为数不多的可寻址的字,这里的地址是寄存器的。

2024-09-09 11:29:17 465

原创 [学习笔记]《CSAPP》深入理解计算机系统 - Chapter 3 程序的机器级表示

结构的所有组成部分都存放在内存中一段连续的区域内,而指向结构的指针就是结构第一个字节的地址。编译器维护关于每个结构类型的信息,指示每个字段。它以这些偏移作为内存引用指令中的位移,从而产生对结构元素的引用。

2024-09-05 11:02:07 402

原创 [学习笔记]《CSAPP》深入理解计算机系统 - Chapter 2 信息的表示和处理

当作笔记用。第二章对大小端和二进制的解释非常清晰

2024-08-30 17:56:31 1014

原创 MIT 6.S081 Operating System Lecture8 (非常随意的笔记)

非常随意的笔记。

2022-12-04 19:01:41 588 1

原创 MIT 6.S081 Operating System Lecture5 (随意的笔记)

MIT S081

2022-11-27 17:04:25 901

原创 MIT 6.S081 Operating System Lecture4 (随意的笔记)

MIT 6.S081 第四课 Page Table 笔记

2022-11-19 16:49:41 512

原创 linux常用命令和工具(如tmux)使用方法记录

记录学习过程中遇到的好用的工具

2022-11-12 00:20:45 428

原创 学习笔记 -- pipe 管道问题记录

管道是进程间通信的方法之一,也是很简单的一种方法父进程通过系统调用 pipe(int fd[2]) 在内核空间创建的一个管道,并且 fd[1], fd[2] 分别代表了读端和写端。父进程再 fork() 出一个子进程,那么子进程也拥有了该管道的读端与写端。注意:管道为半双工,如果要进行全双工通信,需要两个管道然后,如果父进程向子进程进行通信,那么需要经过如下几个过程parent: close(fd[0]) // 父进程关闭读端parent: write(fd[1], &buf, size

2021-06-04 09:21:41 874

原创 MIT 6.S081 Operating System--Lecture 1 (作业记录)

文章目录open重定向questionanswerforkexecquestionanswerforkexec.cquestionanswerquestionanswerquestionanswerquestionanswerquestionanswer系统调用,应用程序调用的系统 API ,看上去和我们写程序过程中的函数调用很相似,但其实是应用程序进入内核系统,进入操作系统内核态的方式。几种不同常用的系统调用APIfd = open("out", 1)这一个系统调用,打开名为 “out” 的文

2021-05-25 22:25:11 1409

原创 《计算机网络-自顶向下方法》学习随记 -- 计算机网络和因特网章节

文章目录计算机网络和因特网1.3 网络核心1.3.1 分组交换转发时延排队时延和分组丢失转发表和路由选择协议1.3.2 电路交换1.4 分组交换网中的时延、丢包和吞吐量1.4.1 分组交换网中的时延概述ps: 我的笔记都以看书过程中记录觉得比较重要的文字句子,偶尔会有一点个人的梳理( 书本本身已经说地很详细了 )计算机网络和因特网1.3 网络核心ISP 因特网服务提供商 Internet Service Provider, ISP1.3.1 分组交换在各种网络应用中,端系统彼此交换报文(m

2021-05-25 19:04:16 242 3

原创 《高性能MySQL》学习笔记随记 -- 基准测试

文章目录指标指标吞吐量 throughput指单位时间内事务处理数。常用的测试单位是每秒事务数 (TPS/QPS) , 有些也采用每分钟事务数 (TPM)响应时间或者延迟这个指标用于测试任务所需的整体时间。根据具体的应用,测试的时间单位可能是微妙、毫秒、秒或者分钟。根据不同的事件单位可以计算出平均响应时间、最小响应时间、最大响应时间和所占百分比。最大响应时间通常意义不大,因为测试时间越长,最大响应时间可能也就越大。而且其结果通常不可重复,每次测试都可能得到不同的最大响应时间。因为,通常可以使用

2021-05-25 13:24:19 142 1

原创 Reactor | Epoll 模型理解

Reactor 模型的理解组成: 由非阻塞的 io + IO多路复用机制组成特征:基于事件循环,以事件驱动或者==事件回调的方式来实现业务逻辑单 Reactor 模型Epoll根据不同的事件( EPOLLIN | EPOLLOUT ) 等 对不同的文件描述符进行不同的操作作为服务器端连接客户端,触发 EPOLLIN作为客户端连接服务器端,触发 EPOLLOUT , 触发则说明连接建立。这是因为在三次握手过程中,收到来自服务器端的 syn ack 包时,会触发自己发送 ack 包,便触发

2021-05-24 20:33:29 508 1

原创 类内使用 pthread_create 时,第三个参数为什么必须是静态函数

#include <pthread.h>int pthread_create(pthread_t* thread, const pthread_attr_t* attr, void *(*start_routine)(void*), void *arg);以上是 pthread_create() 的声明。但是在学习《Linux高性能服务器编程》,实现线程池的时候,发现有这么一句话类内使用 pthread_create 函数时,将函数的第 3 个参数指向一个静态函数(必须是静态

2021-05-20 17:04:38 1467

原创 《Effective C++》条款35 Strategy 模式写法记录

Non-Virtual Interface (NVI) 手法实现这个方法主张 virtual 函数应该几乎总是 private。这个流派认为,较好的设计是保留 healthValue 为 public 成员函数,但让它成为 non-virtual ,并调用一个 private virtual 函数进行实际工作class GameCharacter{public: int healthValue() const{ // derived classes 不重新定义它 ... /

2021-05-16 11:52:45 154

原创 C++ 中 new object 和 new object() 的区别

目前来看的区别更好总结如下:new object 分配了内存空间,初始化不确定new object 调用了 object 类的构造函数来进行初始化#include<iostream>#include <unordered_set>#include <vector>#include <iomanip>using namespace std;class Base1 {public: int a;};class Base2 {publ

2021-05-15 11:56:48 796

原创 连接我的webserver图片和视频数据无法正常传输

(ps: 就自己留着以后看,对大家的帮助不大)问题描述:在用浏览器连接 webserver 服务器,并选择查看图片或者视频时发现图片传一半,视频传不过来。(准确说,当时发现的问题是小图片能正确传输,图片大了就传不过来)尝试了一下 tcpdump (其实感觉没看出来啥),但是当看到传输过程中 seq 和 ack 以及 length 之间没有很好的对应,又确认连接没有被断开。已经察觉的是系统调用 writev() 这一个阶段出现了问题。检查代码:bool http_conn::write(){

2021-05-09 17:31:58 431

原创 数据库学习笔记 - 管理与技术

ps: 笔记很简陋,仅供自己使用。对其他的朋友可能没有参考性 – 来源:学堂在线-哈尔滨工业大学-数据库系统文章目录并发控制三种典型的不一致现象丢失修改不能重复读脏读幻读核心技术事务事务的特性:ACID原子性( Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability)DBMS 对事务的控制事务调度表达事务调度的一种模型冲突可串行性冲突可串行性判别算法基于封锁的并发控制方法锁的类型排他锁X(eXclusive locks) ( 写锁 )共享锁S(Shar

2021-05-07 17:04:07 98

原创 数据库学习笔记 - 建模与设计(三种设计E-R模型的方法)

ps: 笔记很简陋,仅供自己使用。对其他的朋友可能没有参考性 – 来源:学堂在线-哈尔滨工业大学-数据库系统文章目录E-R 模型E-R 模型

2021-05-07 14:15:44 496

原创 数据库学习笔记 - 模型与语言

ps: 笔记很简陋,仅供自己使用。对其他的朋友可能没有参考性 – 来源:学堂在线-哈尔滨工业大学-数据库系统关系模式的第一范式属性不可再分: 这个“表”可以很清晰地按照一行一列的方式来区分,不会在表内又嵌套一个表,这样便满足第一范式 1NF关系模式的第二范式关系模式的第三范式...

2021-05-06 16:49:44 138 1

原创 我的WebServer客户端调用read()返回-1问题分析及解决

问题描述:在做压测的过程中,先尝试了用 telnet 等连接,发现没有问题,能够正确返回 200 ok,抓包同样没有问题。然后使用浏览器在地址栏直接输入 ip 地址,同样没有问题。开始用 webbench 测试右侧是服务器端,发现有正确的反馈输出,并且预设的一些错误返回都没有触发。但是左边就是没有一个 susceed。开始 Wireshark 抓包,发现服务端发送了 RST 包。没有正常地走四次挥手流程,并且netstat 查看端口状态发现,在压测过程中,全程只出现了如下几个状态:SYS_W

2021-04-28 15:38:45 928

原创 《C++11Primer》阅读随记 -- 十九、特殊工具与技术

第十九章 特殊工具与技术控制内存分配operator new 接口和 operator delete 接口malloc 函数和 free 函数定位 new 表达式运行时类型识别dynamic_cast 运算符指针类型的 dynamic_cast引用类型的 dynamic_casttypeid 运算符使用 RTTI枚举类型枚举成员类成员指针成员函数指针成员指针函数表union: 一种节约空间的类定义 union使用 union 类型匿名 union位域volatile 限定符合成的拷贝对 volatile .

2021-04-19 20:52:57 155

原创 《C++11Primer》阅读随记 -- 十八、用于大型程序的工具

第十八章 用于大型程序的工具命名空间命名空间定义每个命名空间都是一个作用域命名空间可以是不连续的使用命名空间成员友元声明与实参相关的查找第十八章 用于大型程序的工具命名空间大型程序往往会使用多个独立开发的库,而这些库又会定义大量的全局名字,如类、函数和模板等。当应用程序用到多个供应商提供的库时,不可避免地回繁盛某些名字相互冲突地情况。多个库将名字放置在全局命名空间中将引发命名空间污染( namespace pollution )命名空间( namespace ) 为防止名字冲突提供了更加可控的机制.

2021-04-19 17:08:57 337

原创 《C++11Primer》阅读随记 -- 十七、标准库特殊设施

第十七章 标准库特殊设施未格式化的输入/输出操作单字节操作第十七章 标准库特殊设施未格式化的输入/输出操作标准库还提供了一组底层操作,支持 未格式化 IO 。这些操作允许我们将一个流当作一个无解释的字节序列来处理单字节操作有几个未格式化操作每次一个字节地处理流。它们会读取而不是忽略空白字符语法作用is.get(ch)从 istream is 读取下一个字节存入字符 ch 中。返回 isos.put(ch)将字符 ch 输出到 ostream os。返回 os.

2021-04-19 16:21:11 107

原创 《C++11Primer》阅读随记 -- 十六、模板与泛型编程

第十六章 模板与泛型编程非类型模板参数inline 和 constexpr 的函数模板类模板实例化类模板类模板的成员函数check 和元素访问成员在类代码内简化模板类名的使用在类模板外使用类模板名类模板和友元一对一友好关系通用和特定的模板友好关系令模板自己的类型参数称为友元模板类型别名类模板的 static 成员模板参数模板声明使用类的类型成员typedef typename std::vector::size_type size_type;默认模板实参模板默认实参与类模板成员模板普通( 非模板 )类的成.

2021-04-16 13:34:07 143 1

原创 《C++11Primer》阅读随记 -- 十五、面向对象程序设计

第十五章 面向对象程序设计派生类构造函数继承与静态成员防止继承的发生虚函数final 和 override 说明符虚函数和默认实参抽象基类纯虚函数访问控制与继承公有、私有和受保护继承友元和继承改变个别成员的可访问性默认继承保护级别名字查找先于类型检查定义派生类的拷贝或移动构造函数派生类赋值运算符容器与继承编写 Basket 类定义 Basket 的成员隐藏指针模拟虚拷贝第十五章 面向对象程序设计在派生类对象中含有与其基类对应的组成部分,这一事实是继承的关键派生类构造函数尽管在派生类对象中含有从.

2021-04-15 14:01:10 141

原创 《C++11Primer》阅读随记 -- 十四、重载运算与类型转换

第十四章 重载运算与类型转换基本概念输入和输出运算符重载输出运算符 <<重载输入运算符 >>第十四章 重载运算与类型转换基本概念以源运算符有一个参数,二元运算符有两个。对于二元运算符来说,左侧运算对象传递给第一个参数,而右侧运算对象传递给第二个参数。除了重载的函数调用运算符 operator() 之外。其他重载函数不能还有默认实参。对于一个运算符函数来说,它或者是类的成员,或者至少含有一个类类型的参数:// 错误:不能为 int 重定义内置的运算符int operato.

2021-04-12 14:31:08 287

原创 《C++11Primer》阅读随记 -- 十三、拷贝控制

第十三章 拷贝控制拷贝构造函数拷贝赋值运算符重载赋值运算符第十三章 拷贝控制拷贝构造函数如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数class Foo{public: Foo(); // 默认构造函数 Foo(const Foo&); // 拷贝构造函数 // ...};作为一个例子,Sales_data 类的合成拷贝构造函数等价于:class Sales_data{public: // 其他成员和构造函数的.

2021-04-08 12:43:08 879

原创 《C++11Primer》阅读随记 -- 十二、动态内存

第十二章 动态内存shared_ptr 类shared_ptr 和 unique_ptr 都支持的操作shared_ptr 独有的操作make_shared 函数shared_ptr 的拷贝和赋值定义 StrBlob 类StrBlob 构造函数元素访问成员函数StrBlob 的拷贝、赋值和销毁第十二章 动态内存动态内存是通过一对运算符来完成的: new,在动态内存中为对象分配空间并返回一个指向该对象的指针;delete, 接受一个动态对象的指针,销毁该对象,并释放与之关联的内存。为了更容易(同时也更.

2021-04-07 13:30:26 109

原创 《C++11Primer》阅读随记 -- 十一、关联容器

第十一章 关联算法使用关键字类型的比较函数pair 类型insertmap 的下标操作访问元素equal_range 函数一个单词转换的 map简历转换映射生成转换文本无序容器管理桶无序容器对关键字类型的要求第十一章 关联算法使用关键字类型的比较函数我们不能直接定义一个 Sales_data 的 multiset,因为 Sales_data 没有 < 运算符。但是,可以用一个 compareIsbn 函数来定义一个 multiset。boo compareIsbn(const Sales_d.

2021-04-06 14:36:31 336

原创 《C++11Primer》阅读随记 -- 十、泛型算法

第十章 泛型算法初识泛型算法只读算法写容器元素的算法back_inserter拷贝算法重排容器元素的算法定制操作(仿函数,谓词)向算法传递参数lambda 表达式介绍 lambda向 lambda 传递参数使用捕获列表调用 find_iffor_each完整的 biggieslambda捕获和返回值捕获引用捕获隐式捕获可变 lambda指定 lambda 返回类型参数绑定标准库 bind 函数使用 placeholders 名字bind 的参数用 bind 重排参数顺序绑定引用参数再探迭代器插入迭代器io.

2021-04-05 17:20:31 826

原创 《C++11Primer》阅读随记 -- 九、顺序容器

第九章 顺序容器顺序容器概述迭代器标准 array 具有固定大小使用 assign (仅顺序容器)swap第九章 顺序容器顺序容器概述STL 容器在以下方面有不同的性能折中:向容器添加或从容器中删除元素的代价非顺序访问容器中元素的代价容器介绍vector可变大小数组。支持快速访问。在尾部之外的位置插入或删除元素可能很慢deque双端队列。支持快速随机访问。在头尾位置插入/删除速度很快list双向链表。只支持双向顺序访问。在 list 中任何位置进行插入.

2021-03-31 12:30:57 515

转载 怎么通过 Linux 调用命令查找到死锁

死锁简单概要产生的原因:系统资源竞争进程推进顺序非法死锁产生的必要条件互斥条件:进程要求对所分配的资源进行排他型控制,即在一段时间内,某个资源仅为一个进程所占有不可剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自己来主动释放请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放循环等待条件:存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被

2021-03-28 14:10:00 1005

原创 《C++11Primer》阅读随记 -- 七、类

第七章 类类作用域和成员函数在类的外部定义成员函数第七章 类定义在类内部的函数是隐式的 inline 函数,外部不是类内函数体前加 const 该方法不能更改成员变量书本解释:紧随参数列表之后的 const 关键字的作用是修改隐式 this 指针的类型默认情况下,this 的类型是指向类类型非常量版本的常量指针。例如在某类比如 Sales_data 成员函数中,this 的类型是 Sales_data* const。尽管 this 是隐式的,但它仍然需要遵循初始化规则,意味着( 在默认.

2021-03-27 11:29:52 215

原创 《C++11Primer》阅读随记 -- 六、函数

第六章 函数返回数组指针C++11 新特性 -> 尾置返回来行重载和 const 形参const_cast 和 重载默认实参声明内联函数和 constexpr 函数constexpr 函数第六章 函数返回数组指针因为数组不能被拷贝,所以函数不能返回数组。不过,函数可以返回数组的指针或引用。虽然从语法上来说,要想定义一个返回数组的指针或引用的函数比较繁琐,但是有一些方法可以简化,其中最直接的方法就是使用类型别名typedef int arrT[10]; // arrT 是一个类型别名,它表示.

2021-03-25 12:48:05 131

原创 ubuntu配置apue.h记录

下载源码(我在 windows 下好直接通过 vscode 传过去的)UNIX环境高级编程-3E-源代码.rar解压文件(在Linux操作也可以的们这里不赘述)将 apue.3e 转移到 ubuntu 中sudo apt-get install libbsd-devcd apue.3esudo make注意,这里我遇到了几个问题我的解决办法:sudo chmod 777 systype.sh问题解决;sudo make 成功测试#includ..

2021-03-23 21:39:11 178

原创 《MYSQL必知必会》阅读随记 ( 二十四 - 二十九章)

文章目录工具准备第二十四章 使用游标游标使用游标创建游标打开和关闭游标使用游标数据第二十五章 使用触发器创建触发器删除触发器使用触发器INSERT 触发器DELETE 触发器UPDATE 触发器第二十六章 管理事务处理事务管理控制事务处理使用 ROLLBACK使用 COMMIT使用保留点更改默认的提交行为第二十七章 全球化和本地化使用字符集和校对顺序第二十八章 安全管理管理用户创建用户账号删除账号设置访问权限更改口令第二十九章 数据库维护备份数据数据库维护诊断启动问题查看日志文件工具准备MySQL Wo

2021-03-22 17:04:02 414 2

原创 《MYSQL必知必会》阅读随记 ( 十九 - 二十三章)

文章目录工具准备第十九章 - 插入数据数据插入插入完整的行插入多个行插入检索出的数据第二十章 - 更新和删除数据更新数据工具准备MySQL Workbench 8.0create schema crashcourse;use crashcourse;分别运行 create.sql 和 populate.sql这两个脚本下载地址:脚本地址第十九章 - 插入数据数据插入INSERT 用来插入( 或添加 )行到数据库表地。插入可以用以下几种方式使用:插入完整的行插入行的一部分插入多行

2021-03-18 13:40:22 376 2

原创 《C++11Primer》阅读随记 -- 四、表达式;五、语句

第四章 表达式左值和右值赋值运算符成员访问运算符位运算符第四章 表达式左值和右值在 C++ 语言中,一个左值表达式的求值结果是一个对象或者一个函数,然而通常以常量对象为代表的某些左值实际上不能作为赋值语句的左侧运算对象。此外,虽然某些表达式的求值结果是对象,但它们是右值而非左值。简单的归纳:当一个对象被用作右值时,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(在内存中的位置)当一个左值被当成右值使用时,实际上使用的是它的内容(值)。到目前为止,已经有几种我们熟悉的运算符是.

2021-03-18 11:13:51 229 3

空空如也

空空如也

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

TA关注的人

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