- 博客(58)
- 收藏
- 关注
原创 网络基础(三)
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称域名使用 . 连接com:一级域名,表示这是一个企业域名,同级的还有"net"(网络提供商),"org"(非盈利组织)等。baidu:二级域名,公司名。www:只是一种习惯用法,之前人们在使用域名时,往往命名成类似于 ftp.xxx.xxx/www.xxx.xxx这样的格式,来表示主机支持的协议。
2024-03-05 03:16:45 1062
原创 HTTPS
加密是一种将明文(原始数据或信息)经过一系列变换生成密文的过程,而解密则是将密文再经过相应的变换还原成明文的过程。在这个过程中,通常需要使用一个或多个中间的数据,这些数据称为密钥。加密过程:原始的、未经加密的数据称为明文。使用特定的加密算法对明文进行变换,产生密文。加密算法通常需要一个密钥,这个密钥是用来影响加密算法行为的参数。解密过程:经过加密得到的数据称为密文。使用相应的解密算法对密文进行变换,还原成明文。解密算法通常也需要使用与加密时相同的密钥。
2024-03-05 03:11:24 949
原创 网络基础(二)
无法通过UDP就自动将这些非法报文直接丢弃了,只会将合法的报文向上交付,所以向上交付了就一定能保证报文是独立的、完整的有效载荷,所以对于UDP报文,有没有把一个报文读完,作为读取方,你压根就不要自己处理,只要对方给你发(send)的时候是完整的,你收的就是完整的,所以对方一次发多少,我就一次收多少,这种一个一个由底层交上来的,一个个独立的报文,我们就称之为叫做面向数据报。对于UDP,如果还没有对上层交付数据,UDP的报文长度仍然在,同时,UDP是一个一个把数据交付给应用层就有很明确的数据边界。
2024-03-05 03:09:49 763
原创 网络基础(一)
路由器的路由表的更新和维护是网络中的关键任务,以确保数据包以最有效的方式传递。简单描述一个局域网内的通信原理例子:在一个教室里,当老师喊的人就站起来,比如说,老师喊道 "张三" ,其他人发现喊道的不是自己,所以就不进行理会丢弃了这份数据(这就是碰撞的原理),而有一个人对比了一下,喊道的就是自己的名字就站起来和老师进行对话(通信)。2.跨网段的主机的文件传输(指的是不同的局域网的两个子网或者多个子网进行文件传输),数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器。这两个子网之间有一个路由器R。
2024-03-03 18:58:07 1013
原创 Linux多线程
教材观点:线程是一个执行分值,执行粒度比进程更细(因为执行的是进程内部资源的一部分),调度成本更低。线程是进程内部的一个执行流(所谓一个线程在进程内部执行,说直白点,其实就是一个线程在进程的地址空间内运行,所以你这个线程就隶属于该进程)。内核观点:线程是CPU调度的基本单位,进程是承担分配系统资源的基本实体在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程(指有一个PCB)。
2024-03-03 18:46:13 639
原创 进程的信号
普通信号和实时信号是两种不同类型的信号,它们在处理机制和特性上有一些区别。实时信号的引入:普通信号是早期UNIX系统中引入的,其处理机制并没有特别强调对实时性的支持。实时信号是为了满足对实时性和精确性要求更高的应用而引入的。它们在POSIX标准中定义,并且相对于普通信号,提供了更可靠的信号传递机制。排队特性:普通信号在接收端排队的能力有限,同一种类型的信号在排队时可能会被合并成一个。实时信号具有排队特性,即同一种类型的信号可以被排队,不会丢失。
2024-03-03 18:36:49 973
原创 进程间通信
数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。管道(Pipe)是一种用于进程间通信的机制,用于在相关的进程之间传递数据。它是一个字节流的通信机制,具有先进先出(FIFO)的数据结构。
2024-03-03 17:51:53 553
原创 Linux基础IO
一个inode对应一个文件,而改文件inode属性和改文件对应的数据块,是有映射关系的。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。为了正确地指定静态库的名称,需要去掉库文件名字前面的"lib"部分和后面的文件扩展名,以及在指定库文件时不需要包含文件的完整路径,只需要指定库文件名字即可(如:mymath才是真正的库名)。
2024-03-03 17:47:11 870
原创 进程的控制
需要注意的是,exit函数底层是通过自动调用_exit函数来终止进程,因此在调用exit函数后,程序会先执行清理操作,然后才会真正终止。需要注意的是,basename() 函数会直接修改传入的 path 字符串,因此,请确保传入的字符串是可修改的字符数组或者动态分配的内存。函数参数path是一个字符串,表示要更改到的目录的路径。注:如果替换成功,不会有返回值,如果替换失败,一定有返回值,如果失败了,必定返回,只要有返回值,就说明替换失败了,不用对该函数进行返回值判断,只要继续向后运行一定是失败的。
2024-03-03 17:43:01 685
原创 Linux的进程的概念
目录1.冯诺依曼体系结构(硬件)2.操作系统(软件)2.1概念2.2设计os(操作系统)的目的2.3如何理解管理2.4系统调用和库函数概念3.进程3.1基本概念3.2描述进程-PCB和组织进程3.3ps axj指令3.4查看进程3.5通过系统调用获取进程表示符(PID)getpid()系统调用函数,获取(子)进程pidgetppid()系统调用函数,获取子进程的父进程pid3.6通过系统调用,创建子进程-fork()函数初识4.进程状态5.Z状态(zombie)-僵尸进程6.孤儿进程7.环境变量8.进程优先
2024-03-03 17:39:17 1391 3
原创 Linux环境基础开发工具使用
在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序,但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装。
2024-03-03 17:36:52 771
原创 C++的IO流
在C语言中,如果想要将一个整形变量的数据转化为字符串格式,如何去做?1. 使用itoa()函数2. 使用sprintf()函数但是两个函数在转化时,都得需要先给出保存结果的空间,那空间要给多大呢,就不太好界定,而且转化格式不匹配时,可能还会得到错误的结果甚至程序崩溃。在C++中,可以使用stringstream类对象来避开此问题。在程序中如果想要使用stringstream,必须要包含头文件。
2024-03-03 17:23:46 784
原创 C++的类型转换
需要注意的是,decltype关键字在推断过程中只使用表达式的类型信息,不会执行任何表达式中的实际计算。此外,如果表达式为变量,而非标识符,则decltype将推断出变量的引用类型。typeid是C++的一个运算符,用于获取表达式的类型信息。它的语法形式是typeid(expression),其中expression可以是任何表达式、变量、类型或者类的对象。需要注意的是,typeid运算符只能用于在运行时获取类型信息,而无法获取模板参数的具体类型。2. 说说4中类型转化的应用场景。
2024-03-03 17:20:51 829
原创 特殊类的设计
抽象工厂模式提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。该模式涉及一个抽象工厂接口,具有多个方法,每个方法用于创建不同种类的对象。具体的工厂类实现这个接口,并负责创建一组相关的产品。工厂方法模式通过引入工厂等级结构,解决了简单工厂方法模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。
2024-03-03 17:19:15 877
原创 C++11的一些特性
std::initializer_list是一个标准库类型,用于表示一个初始化列表。它是在C++11中引入的,并被用于简化创建和传递列表的过程。std::initializer_list类似于数组,可以存储一组同类型的元素。它作为函数参数或构造函数的参数时,可以方便地将多个值作为一个参数传递。例如,可以使用std::initializer_list来初始化一个容器,或者在函数调用时传递多个参数。支持迭代器,可以通过begin()和end()方法访问列表中的元素。
2024-03-03 17:10:55 1066
原创 哈希相关知识
1. unordered_map是存储键值对的关联式容器,其允许通过keys快速的索引到与其对应的value。2. 在unordered_map中,键值通常用于惟一地标识元素,而映射值是一个对象,其内容与此键关联。键和映射值的类型可能不同。3. 在内部,unordered_map没有对按照任何特定的顺序排序, 为了能在常数范围内找到key所对应的value,unordered_map将相同哈希值的键值对放在相同的桶中。
2024-03-03 16:38:29 956
原创 异常的捕捉
实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了(在实际使用中,许多公司确实会根据自己的需求自定义异常继承体系,以进行规范的异常管理。这样做的目的是为了确保在一个项目中大家都能按照一定的规范抛出和处理异常,避免异常处理的混乱和不一致。捕获一个基类异常对象就可以处理继承自该基类的派生类异常是因为派生类对象可以赋值给基类对象。
2024-03-03 16:25:52 861
原创 权限的理解
1.目录的可执行权限是表示你可否在目录下执行命令。2.如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)3.而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。
2023-06-07 00:16:55 199
原创 Linux基础操作指令
在 XShell 终端下敲ssh [ip] (ps:在IP面前加上root@可以直接进入root账户)。注:1.在IP后面要加上 @ 然后接上主机地址直接登陆进入普通账户。2.直接 root@ 后面接上主机地址直接登陆进入root账户复制: ctrl + insert (或者 insert 需要配合 fn 来按)粘贴: shift + insertctrl + c / ctrl + v 是不行的alt + enter:xshell自动全屏和取消全屏。
2023-06-07 00:13:46 3045
原创 模板初阶和使用
class 类模板名// 类内成员定义class Stack //Stack不是具体的类,是编译器根据被实例化的类型生成具体类的模板public:, _size(0){}_size++;//用来演示类中声明,在类外定义。//其他函数..~Stack()private:T* _array;int _size;//类外定义i < _size;i++)//普通类:类名和类型是一样的//类模板:类名和类型是不一样的//类名:Stack//类型:Stack<T>
2023-06-06 23:56:54 61
原创 C&C++内存管理
int _val;:_val(x){}int main()//C的方式//C++的方式//开空间+调用构造函数初始化return 0;注意:在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与free不会。new的原理1. 调用operator new函数申请空间2. 在完成申请的空间上执行构造函数,完成对象的构造delete的原理1. 在空间上执行析构函数,完成对象中资源的清理工作。
2023-06-06 23:49:36 48
原创 类与对象(凑数)
/ 类体:由成员函数和成员变量组成//和结构体一样,后面一要有分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。类的两种定义方式:1、声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员时,需要使用 :: 作用域操作。
2023-05-13 01:11:45 72
原创 C++初阶
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。//1.正常的命名空间定义//命名空间里面可以定义变量/函数/类型int* next;int data;//2.命名空间支持嵌套定义int a = 10;int b = 20;int a = 10;int b = 20;//3.同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
2023-05-13 00:51:49 347
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人