- 博客(83)
- 收藏
- 关注
原创 八股文:计算机网络
前言先写到这里,后面再补充OSI网络模型应用层、表示层、会话层、运输层、网络层、链路层、物理层TCP/IP模型应用层、运输层、网络层、链路层、物理层MTU链路层的最大传输单元MAC地址指物理地址,确定网络设备的地址ARP协议提供IPV4和各种网络技术使用的硬件地址之间的映射。为啥有IP地址还需要MAC地址?为啥有MAC地址还需要IP地址首先是有交换机用来寻找地址的,交换机中是根据MAC地址来寻址的,但是随着电脑越来越多,不够交换机去分配,于是有了路由器,路由器
2022-05-17 23:27:56
2337
原创 八股文:C++
面向对象三大特性:封装、继承、多态类的访问权限:private、protected、public在类的内部,无论成员被声明成什么,都可以彼此访问。在类的外部、只能通过对象访问成员、其中public代表从外部可以访问到该关键字修饰的成员、而private则不能访问、protected则只能允许其类的派生类访问。类的拷贝控制操作对于类的拷贝控制操作有5种、其中分为拷贝构造函数、拷贝赋值函数、移动构造函数、移动赋值函数、析构函数拷贝构造函数:如果一个构造函数的第一个参数是其本身、且额外参数都有其
2022-05-12 19:31:32
1796
原创 图(C++版本)
前言关于图,我主要讲一下拓扑排序和迪加特斯拉算法TopSort基本算法思路就是每次寻找入度为0的点,然后将其加入到集合中,然后需要把其相邻的点的入度减1,(毕竟加入了集合,那就不需要连接在一起了,也就减少了入度了)。代码#include<bits/stdc++.h>using namespace std;const int N=100010;vector<vector<int>>edges;//邻接表存储图int indges[N];//每个点的入度
2022-05-03 02:39:10
442
原创 模拟堆(C++版本)
前言用数组来模拟堆对于堆来说是一个满二叉树,其中根节点小于左孩子和右孩子(对于小根堆来说),所以可以利用数组来模拟其元素序号从1开始,这样的话,对于序号为x的元素来说,则2*x为其左孩子,2*x+1为其右孩子对于堆的模拟主要使用up和down操作来模拟up:即此节点与父节点来比较,如果比父节点小则与其父节点交换down:即此节点与其左右孩子中的最小值来比较,如果比其大则与左右孩子中较小的那个孩子交换代码#include<iostream>using namespace std
2022-04-29 17:26:52
1761
原创 (core dumped)中core文件解决
前言写c/c++特别容易出现这个错误,此时就需要利用gdb来调试更加好,按照自己查博客来说只要ulimit -c ulimited即可,这代表开启了core文件的大小不限,但是即便如此却依旧没有core文件生成,后来查博客是说有个脚本把core文件弄到别的地方去了,所以还需要执行下一步sudo bash -c "echo core > /proc/sys/kernel/core_pattern "例子:#include<stdio.h>int main(){ int*ptr=
2022-04-28 00:36:20
3178
原创 CSAPP实验5:malloc lab
前言这个实验想法还是十分清晰的,但是我写了几次都直接错误了,然后bug也不知道到底是哪里出现了问题,最后就只好参考别人的了。参考博客:实验5:malloc lab代码#include "mm.h"#include "memlib.h"team_t team = { /* Team name */ "XXXXXX", /* First member's full name */ "yzf", /* First member's email addre
2022-04-27 18:05:08
1336
原创 AVL树(C++版本)
前言AVL是一个高度平衡的二叉搜索树,主要是为了减少查找的次数而降低树的高度。关于二叉搜索树主要是关于二叉树的左旋和右旋以及无法平衡的四种状态左旋:主要是右子树的高度过高了,所以要左旋,就是根节点与其右孩子交换一下,此时右孩子当作了根节点了,而之间的根节点就作为右孩子的左孩子,但是之前的右孩子是可能存在它的左子树的,这时就可以把这左子树连接之前根节点的右边作为根节点的右子树右旋与左旋是对称的,就不再赘述不平衡的四种状态LL:即在根节点的左孩子的左子树上添加导致不平衡了,此时需要根节点右旋即可。
2022-04-23 22:51:34
1514
原创 操作系统真象还原第10章:输入输出系统
同步机制-----锁这里是利用信号量来作为同步机制的,其中down操作来获取锁,up操作来释放锁,对于锁主要是为了同步那些具有竞争关系的进程或者线程。代码sync.h#ifndef __THREAD_SYNC_H#define __THREAD_SYNC_H#include "../lib/kernel/list.h"#include "../lib/stdint.h"#include "thread.h"/* 信号量结构 */struct semaphore { uint8_t
2022-04-16 18:47:54
252
原创 操作系统真象还原第9章:线程
实现内核线程线程是啥,线程就是执行流,线程也好,进程也好,都是执行流,所谓执行流,就是正在执行的那些指令。线程依附于进程,因为线程没有自己的地址空间,线程是与进程共享对应进程的地址空间的。线程的实现方式有两个,一个是用户线程,一个是内核线程,其中用户线程是用户进程自自己通过某种调度算法实现的线程,其内所有的线程共享用户进程的时间片,内核不知道这些线程,如果有一个线程被阻塞的话,就相当于阻塞了整个进程。内核线程则是在内核实现的线程,其由内核调度,其是会被单独分配时间片的。其与进程一起被内核调度器一起调度。
2022-04-16 00:53:59
453
原创 操作系统真象还原第8章:内存管理系统
8.1makefile简介虽则代码模块越来越多,靠自己一个个编译代码和链接文件无疑是一件十分不讨好的事情,于是有了makefile来帮助我们其基本规则如下xxx.bin:xxx.o gcc xxxx -o xxxx意思是当xxx.o文件更新时间比xxx.bin更快就执行下面的命令,在:左边的称为目标文件,其右边的称为依赖文件。同时还可以设置变量,如下:args=xxx.cxxx.bin:xxx.o gcc $(args) -o xxxx$@代表目标文件的集合,$^代表依赖文件的集合,
2022-04-10 20:53:41
792
原创 操作系统真象还原第7章:中断
前言这一章挺琐碎的,看了好几遍,好好捋一捋这一章干的事情。这一章主要就是利用可编程中断控制器8259A来设置中断处理程序,其中32个中断是计算机自己有的(从0开始数),这一章目前只开启了时钟中断,所以这里设置的中断向量号从32开始,然后有个中断描述符表(IDT),类似与全局描述符表(GDT),中断向量号就类似与索引,从IDT中找到中断描述符,中断描述符中包括选择子(毕竟最终要找到中断处理程序,而中断处理程序肯定是在某个内存地址上的),属性,以及偏移地址,其中选择子在GDT中找到段描述符,段描述中存储着虚
2022-04-08 03:23:59
412
原创 csapp实验4:shell lab
前言我之前不是做不下去吗,关于这个shell lab,这次再尝试后发现也没这么没头绪了,虽然不是自己独立做出来的,但是确实真正看懂了,所以千万不要急躁,不要焦虑啊,认认真真去搞就够了,之后我再做一个malloc lab以及补上实验3的lab就不做了,主要是自己也对cache lab以及buffer lab不太感兴趣。至于proxy lab是与网络编程相关的,就不做了。实验该实验就是写几个函数,补上一个简单的shell可通过make rtestxx来知道正确答案,通过make testxx来测试自己,
2022-04-04 21:58:13
2264
原创 操作系统真象还原第6章:完善内核
前言这一章没啥可讲的,主要就是实现一个类似putchar()的函数,当然是使用纯汇编的,书上已经讲的很详细了,我主要加上了一些我自己的注释代码print.S;--------步骤---------------------------;1.备份寄存器现场;2.获取光标坐标值,光标坐标值时下一个可打印字符的位置;3.获取待打印的字符;4.判断字符是否为控制字符,若是回车符,换行符,退格符三种控制字符之一,则进入;相应流程,否则,其余字符否被粗暴的认为是可见字符,进入输出流程处理;5.判断是否
2022-04-01 00:10:22
756
原创 操作系统真象还原第5章:保护模式进阶,向内核进阶
前言由于涉及到马上要搞实习的事情,搞得我十分的浮躁,自己也是频繁失眠,想来还是自己太过懒了,没控制住自己,自己也在这一个多月没搞好,尤其是本来想花几天时间来写一个高性能服务器,也把游双大佬的linux 高性能服务器编程大概看完了,然后自己也跟着视频写了写,但总是感觉自己没有真的懂,然后自己在github上下来的项目也总是感觉不好下手,然后我自己又想去搞csapp的实验了,结果前几个实验还好,但是在做那个shell lab的时候总感觉自己没有很好的搞懂,遂又放弃,然后自己又迷上了原神,又是荒废了十几天,这一
2022-03-31 01:48:40
2237
2
原创 CSAPP实验3:attacklab
前言这个实验只做前三个,后几个不太想做了实验phase1与上一个实验,相同,首先利用objdump -d ctarget ctarget.txt生成其纯汇编文件,方便观察void test() { int val; val = getbuf(); printf("NO explit. Getbuf returned 0x%x\n", val);}void touch1() { vlevel = 1; printf("Touch!: You called
2022-03-03 20:20:14
536
原创 CSAPP实验2:bomblab
前言花了一天多的时间,也终于是完成了bomblab,这些实验还是十分有难度的啊,也不知道cmu这些顶尖大学学生大一就能够完成是多么的强啊。关于这个实验一些关键地方提示一下,对于一个函数的参数我们从书中可以知道的是,如果函数参数少于6个,是以寄存器的方式来存储的,而多于6个则是通过栈来存储。而我要扩展一下的是这6个寄存器先后分别是 %rdi %rsi %rdx %rcx %r8 %r9。实验利用指令 objdump -d bomb > bomb.txt得到bomb的反汇编文本,然后就可以通过这
2022-02-23 02:31:07
1478
原创 操作系统真象还原第4章:保护模式入门
前言妈的还是没控制住自己,玩了几天,我自己就有一个很臭的毛病,如果玩的话就会一直玩下去,既然如此我直接不玩了,妈的我发誓绝逼不玩了还好没出现什么BUG,也算是完成了。关于这一章,我觉得比较重要的是对于全局描述符的设置,在书中我们可以知道,实模式下用户程序可以直接访问内存,这无疑是及其不安全的,并且用户程序与操作系统是同一地位的,这也意味着用户程序可以随意进入操作系统内核,这些都是及其不安全的,所以就有了保护模式,其中由于对段的约束,描述比较多,于是就用8字节的内存区域来描述段,这也就是段描述符,段描述
2022-02-06 04:02:41
841
1
原创 操作系统真象还原第3章:完善MBR
前言这次我出现了一些BUG,导致我忙活了一阵子,还好的是解决了老规矩还是把整个流程过一遍,当MBR忙活完后,就需要把自己手中的棒交给loader了,MBR的作用就是从硬盘中的内核加载器移动到内存中,然后跳转到内核加载器的地址去让内核加载器运行,在这方面需要对硬件需要一些了解特别是in out指令,还有个各个端口访问(端口就是寄存器),因为需要通过这些端口读取数据实验书中也说了需要对rd_disk_m_16函数要比较了解,所以我给出我的一些注释mbr.S%include "boot.inc"
2022-01-28 20:23:56
1181
原创 操作系统真象还原第2章:编写MBR主引导记录
前言这章的内容挺少的,也很简单,如果环境没配置错的话是没啥问题的。但是这章也很精彩,把引导的过程给说了出来,我也是看了几遍把这个过程给大致看懂了。首先计算机一开机这个时cpu会自动把cs:ip指针赋值成0xf000:0xfff0,根据实模式下的寻址关系可以知道此时正好是指向地址为0xffff0,而这个地址距离最高地址0xfffff之间正好是16字节的地址空间,这肯定是不够BIOS来执行各种硬件初始化以及各种硬件检查和中断向量表的建立等等,所以这里实际上存的跳转的地址,跳转到足够的地址后就会去执行这些,当
2022-01-23 23:12:13
953
原创 CSAPP实验1:datalab
前言CSAPP上的实验还是十分有趣的,尤其是其自动评分系统。做完了实验之后自己也确实对知识的理解更加深入了。有关CSAPP的知识以后或许我会再写博客,现在则先把实验写写博客吧百度网盘下载实验文档提取码:kdx4实验题1-2//1/* * bitXor - x^y using only ~ and & * Example: bitXor(4, 5) = 1 * Legal ops: ~ & * Max ops: 14 * Rating: 1 */
2022-01-22 01:43:05
1216
原创 操作系统真象还原第1章:部署工作环境
前言关于自制操作系统,一开始本来是想利用极客时间的操作系统实战45讲来的(为了能够更快完成),然而当自己真正去学的时候才发现这些视频还是比较坑的,最起码对于我来说,首先是代码注释很少,函数,变量命名直接让我看不懂,而且其代码量有两万行,但代码讲的不多,我觉得对于学生党来说还是十分吃力的,在搞了几天后,我毅然决然的选择的操作系统真相还原,目前来看我的选择还是十分明智的,其书上讲的十分详细,也让我真的弄懂了许多。果然,任何时候都没有捷径可走,脚踏实地才最为稳妥,同时我也大概不会在买啥专栏了,还是书籍更加靠谱
2022-01-21 00:04:48
1475
原创 c++Primer第16章:模板与泛型编程(习题解答)
16.1.1节练习16.1当调用一个函数模板时,编译器会利用给定的函数实参来推断模板实参,用此实际参数代替模板参数来创建出模板的一个新的“实例”,也就是一个真正的可以调用的函数,这个过程被称为实例化。16.2#include<bits/stdc++.h>using namespace std;template<typename T>int compare(const T&v1,const T&v2){ if(v1<v2)return
2022-01-14 22:58:50
701
原创 C++Primer第15章:面向对象程序设计(习题解答)
15.2.1节练习15.1在类中被声明为virtual的成员,基类希望这种成员在派生类中重定义,除了构造函数外,任意非static成员都可以为虚成员15.2protected可以被该类的成员,友元和派生类成员访问,而不可以被该类型的普通成员访问,而private成员只能被基类和友元访问,派生类不可访问15.3...
2021-12-25 00:41:45
995
原创 C++Primer第14章:重载运算符和类型转换(部分解答)
14.1节练习14.1不同点:重载运算符必须具有至少一个class或者枚举类型的操作数重载运算符不保证操作数的求值顺序,例如对&&和||的重载版本不再具有“短路求值”的特性,两个操作数都要进行求值,而且不规定操作数的求值顺序。相同点:对于优先级和结合性及操作数的数目不变。14.2不想写-.-14.3(a)"cobble"=="stone" //内置版本(b)svec1[0]==svec2[0] //string的重载版本(c)svec1==svec2 //v
2021-12-23 12:57:11
551
原创 正则表达式字符查阅(c++)
前提主要方便自己查阅来看正则表达式(1)普通字符普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。(2)特殊字符(3)限定符参考蓝桥实验楼...
2021-12-22 21:08:50
422
原创 C++Primer第13章:拷贝控制(习题解答)
13.1.1节练习13.1:构造拷贝函数是什么?什么时候使用它?答:如果构造函数的第一个参数是自身类型的引用,且所有其他参数(如果有的话)都有默认值,则此构造函数是拷贝构造函数。拷贝构造函数在以下几种情况下会被使用 1.拷贝初始化(用=定义变量) 2.将一个对象作为实参传递给非引用类型的实参 3.一个返回类型为非引用类型的函数返回一个对象 4.用花括号列表初始化一个数组中的元素或者一个聚合类中的成员 5.初始化标准库容器或调用其insert/push操作时,容器会对其元素进行初始化13.2:解释下为什
2021-12-21 16:07:45
896
原创 计算机网络自顶向下:距离向量算法实验
前言关于这个实验的文档可以从下面这个博主的链接中拿到博客链接:计算机网络自顶向下:距离向量算法我本身也是参考了他的部分思路以及其实验文档而做出来的实验思路其主要核心就是距离向量算法的步骤,哈工大计算机网络公开中对于距离向量算法讲的挺好的,当然,其本质就是动态规划,这个就相当于当前节点的邻居节点到终点的最短距离已知一样,这样就只要求出当前节点到邻居节点的代价与这个最短距离之和最小即可,由于这样不停递推,且每次只要当前节点表中维护的距离发生了改变,就会向其邻居发送数据包来确定最短路径,于是能够得到其
2021-12-09 19:52:44
1054
原创 计算机网络自顶向下WireShark实验:DHCP
前言计算机网络自顶向下WireShark实验记录,可供参考题目1.Are DHCP messages sent over UDP or TCP?DHCP 消息是通过 UDP 还是 TCP 发送的?答:UDP2.Draw a timing datagram illustrating the sequence of the first four-packetDiscover/Offer/Request/ACK DHCP exchange between the client and server.
2021-12-01 21:48:20
4211
原创 计算机网络自顶向下WireShark实验:ICMP
前言计算机网络自顶向下WireShark实验记录,可供参考题目1.What is the IP address of your host? What is the IP address of the destinationhost?你的主机的 IP 地址是什么?目的主机的 IP 地址是什么?答:2.Why is it that an ICMP packet does not have source and destination portnumbers?为什么 ICMP 数据包没有源端口号
2021-12-01 17:14:00
5258
原创 计算机网络自顶向下WireShark实验:IP
前言计算机网络自顶向下WireShark实验记录,可供参考题目1… Select the first ICMP Echo Request message sent by your computer, and expandthe Internet Protocol part of the packet in the packet details window.选择计算机发送的第一条 ICMP 回应请求消息,并在数据包详细信息窗口中展开数据包的互联网协议部分。What is the IP addres
2021-12-01 15:46:02
7700
原创 计算机网络自顶向下WireShark实验:UDP
前言计算机WireShark实验记录可供参考题目(有英文原文)1.Select one UDP packet from your trace. From this packet, determine how manyfields there are in the UDP header. (You shouldn’t look in the textbook! Answerthese questions directly from what you observe in the packet trace
2021-11-28 20:48:03
3087
原创 计算机网络自顶向下WireShark实验:TCP
题目(是由英文翻译过来的)1:What is the IP address and TCP port number used by the client computer (source)that is transferring the file to gaia.cs.umass.edu? To answer this question, it’sprobably easiest to select an HTTP message and explore the details of the TCP
2021-11-28 19:51:10
18334
2
原创 计算机网络自顶向下第二章编程作业
前言其代码都写了一些注释,就不再解释啥了,直接上代码,我亲自实验了,所以是可以保证运行的作业1:Web服务器# import socket modulefrom socket import *serverSocket = socket(AF_INET, SOCK_STREAM)# Prepare a sever socketserverSocket.bind(('', 12000)) # 将TCP欢迎套接字绑定到指定端口serverSocket.listen(1) # 最大连接数为1
2021-11-19 20:41:11
2090
原创 计算机自顶向下WireShark实验2:DNS
前言本博客仅记录我自己做实验所用,在码云上看到一份比较好的自顶向下的实验记录,大家可以参考计算机自顶向下实验实验内容1. 运行nslookup获取亚洲一个Web服务器的IP地址。那台服务器的IP地址是什么?答:对自己的学校采用即可2. 运行nslookup来确定欧洲某大学的权威DNS服务器。3. 运行nslookup,以便在问题2中获得的DNS服务器之一查询雅虎的邮件服务器!邮件。它的IP地址是什么?4. 找到DNS查询和响应消息。然后通过UDP或TCP发送?可以看到是通过UDP协议
2021-11-19 20:12:13
4282
原创 计算机自顶向下WireShark实验1:http
前言主要是用来记录自己做自顶向下的实验,可用来作为参考,也欢迎各位同学纠正我做实验上的错误~实验内容1.HTTP1.1版,服务器运行是1.1版2.支持中文和英文3.src即为源地址,dst即为目的地址4.304 不可修改5.If-Modified-Since与Last-Modified相同6.239字节7.不明白啥意思-.-8.看到了,在上面有9.明确返回了,有数据字段10.有时间,即上次文件在服务器修改的时间11.304 not modified 服务器不需要返回了文
2021-11-19 15:57:41
1213
原创 二叉树的创建和遍历(c++版本)
前言关于其创建考虑到前中后三种都是无法单独通过一种方式就能确定二叉树的形状的,所以这里考虑以层序遍历的方式来创建二叉树,至于二叉树的非递归遍历,主要时利用栈来模拟递归时的隐藏栈来实现的,可以去力扣上的深度优先搜索专题上看到其非递归版本。代码#include<iostream>#include<vector>#include<queue>#include<stack>using namespace std;struct TreeNode{ in
2021-11-13 18:51:27
947
原创 循环队列(c++版本)
原理代码实现#include<iostream>#include<stdlib.h>using namespace std;#define MAXSIZE 100typedef int ElemType;typedef long long ll;typedef struct { ElemType* base;//分配需要的存储空间 ll front; ll rear;}queue;bool InitQuque(queue& s) { s.base
2021-11-11 20:17:35
811
原创 链栈(c++版本)
代码mystack.htypedef int Elemtype;typedef long long ll;struct LinkStack { Elemtype data; struct LinkStack* next; LinkStack() :data(0), next(nullptr) {}; LinkStack(Elemtype x):data(x), next(nullptr) {};};LinkStack* top = nullptr;ll len=0;void In
2021-11-11 00:24:20
646
原创 大整数加法
原理就是模仿手算如何实现加法的方式,同时对于其存储采用逆序存储,即最左边是低位,而右边是高位,这样方便进位处理代码#include<iostream>#include<vector>#include<algorithm>using namespace std;vector<int>add(vector<int>& A, vector<int>& B) {//A与B之间都是逆序存储的,方便进位扩充空间
2021-11-10 12:43:22
227
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人