用到哪里查到哪里
1. 文本文件和二进制文件的区别
文本文件是由单一统一的编码方式进行编码的文件,如.txt文件或.py文件1。文本文件是字符序列,存储的是基于字符的编码(比如ASCII码)。
二进制文件没有统一的编码,而是直接由0和1组成,如.png文件或.avi文件1。二进制文件则存储的就是对应的值,是字节序列。
文本文件和二进制文件并无本质的差别(都是0和1,但前者有编码,显示的是字符),他们的区别在于打开这个文件的程序在对其内容的解释上。我们可以把一个典型的所谓二进制文件(bmp)当作文本文件来打开,只是得到的内容就是一些乱七八糟的符号了。反过来,也是同样成立。
2. 预编译器和编译器的区别
预编译器: 预编译器是一种程序,它在编译之前对源代码进行处理。预处理器(cpp)将所有的#define删除,并且展开所有的宏定义。处理所有的条件预编译指令,比如#if、#ifdef、#elif、#else、#endif等。处理#include预编译指令,将被包含的文件直接插入到预编译指令的位置。删除所有的注释。添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号。保留所有的#pragma编译器指令,因为编译器需要使用它们。
编译器: 编译器是一种程序,它将高级语言代码转换为计算机可执行代码。编译器读取整个程序并将其转换为目标代码,这是一种计算机可以直接执行的形式。
3. 内存和磁盘的区别
计算机内存和磁盘是两种不同的存储设备。内存是一种高速,造价昂贵的存储设备,它是计算机的工作场所,用于为系统和软件提供运行空间。而磁盘则是一种速度较慢、造价低廉的存储设备,它负责为系统和软件提供储存空间,可以长期的存储数据,不受断电影响。
内部存储设备和外部存储设备又是如何区分的呢?
4.大端存储与小端存储
在计算机的存储器中,数据是以字节为单位进行存储的。而对于多字节的数据,如整数和浮点数等,计算机需要将它们拆分为若干个字节进行存储;大端存储和小端存储的产生是由于不同的处理器架构使用了不同的字节存储方式;
大端存储: 高位字节(这里的高低是按照正常数字从左到右依次降低的顺序分的)存储在低地址,低位字节存储在高地址(地址高低是从左到右依次增加)。例如,整数0x12345678在大端存储中被表示为0x12 0x34 0x56 0x78。
小端存储: 低位字节存储在低地址,高位字节存储在高地址。例如,整数0x12345678在小端存储中被表示为0x78 0x56 0x34 0x12。
5.进程和线程的概念
进程和线程是操作系统中的两个基本概念,用于描述计算机中正在运行的程序的执行方式和资源分配方式。
进程是一个执行中的程序的实例。每个进程都有自己的内存空间、程序计数器、寄存器和堆栈,以及打开的文件和其他资源。进程之间是相互独立的,每个进程都在自己的地址空间内运行。操作系统通过分配进程间的资源和调度进程来控制系统的性能和稳定性。
线程是在进程内执行的轻量级的执行单元。线程共享进程的地址空间和资源,但有自己的堆栈和程序计数器。多个线程可以同时运行在同一个进程中,共享相同的资源。线程通常比进程更轻量级,可以更快地创建和销毁,也更容易实现并发和并行执行。
进程和线程之间的主要区别在于资源的分配方式和执行方式。进程是资源分配的基本单位,线程是执行的基本单位。 进程之间是相互独立的,线程之间共享资源。进程之间的切换比线程之间的切换要慢得多,因为需要保存和恢复进程的上下文。线程之间的切换比进程之间的切换要快得多,因为只需要切换线程的上下文即可。
在实际应用中,进程和线程的选择取决于具体的需求和场景。如果需要相互独立的运行环境和资源,应该选择进程;如果需要实现并发和共享资源,应该选择线程。
6. 句柄(Handle)的概念
句柄(Handle)是计算机科学中的一个概念,是一个用于标识和引用对象的整数值或指针(由操作系统提供的API函数返回:比如C语言中的打开文件fopen()后返回的,一个有确定指向的FILE类型的指针?)。句柄可以被看作是一个对象的“名字”,可以被用来查找或引用这个对象。
在操作系统中,句柄通常被用于引用一些系统资源,如窗口、文件、设备等。句柄可以被看作是一个指向内存中系统资源的指针,使用句柄可以避免直接操作系统资源(比如STM32中的寄存器名字宏定义?),从而保证了系统的稳定性和安全性。
使用句柄的一个好处是,它们可以被用于跨进程和跨计算机访问共享资源。例如,在Windows操作系统中,句柄可以被用于访问其他进程或计算机上的窗口或文件,从而实现了进程间通信和网络共享等功能。
7.动态链接库和静态链接库的概念
动态链接库 (.dll 文件 ) : 英文全称为Dynamic Link Library,是一种可执行文件,它包含一些可以被多个程序共享使用的代码和数据。
动态链接库在程序运行时才被加载,可以节省内存空间,并且可以实现代码共享和更新。当程序需要使用动态链接库中的函数或数据时,操作系统会将动态链接库加载到内存中,并将需要的函数或数据映射到程序的地址空间中,程序就可以直接调用这些函数或数据了。
动态链接库被使用的流程 ( C 语言编程时 ) :
①#include包含动态链接库的相关头文件:这是在源文件中程序员操作的;
②编译器在编译阶段,将动态链接库与程序员的代码进行链接:将目标代码(编译器生成)与动态链接库中的符号相关联; 这一步在大多数情况下由编译器自动完成,两个特殊情况说明一下: 一是在某些平台/编译器下可以借助预编译命令实现动态链接库与程序员代码的链接,从而省略在编译命令中显式指定链接库的步骤,例如#pragma comment(lib, "ws2_32.lib")告诉编译器将 Windows Sockets 2.0 (Winsock) 库(ws2_32.lib)与当前的源文件进行链接,但这种预编译指令不是通用的,同时记住预编译指令在编译前执行,动态库链接在编译阶段执行。 二是某些编译器中需要自己显式地执行某些命令以实现动态库链接,如:gcc main.c -L/path/to/mylibs -lmylib -o myprogram 其中,-L选项指定了动态链接库的路径/path/to/mylibs,-l选项指定了要链接的库的名称mylib。最后的-o选项用于指定生成的可执行文件的名称。
静态链接库 (.lib 文件 ) : 英文全称为Static Link Library,静态链接库在编译时被链接到可执行文件中,成为可执行文件的一部分,程序运行时无需再加载,因此运行速度较快,但占用的磁盘空间和内存空间较大。 比如C标准库便是静态链接库
8. \r与\n即回车与换行的区别
\r:将光标移动到行首;
\n:将光标移动到下一行;
在Windows系统中,文本结尾一般是\r\n
9.API的概念
API(Application Programming Interface) 即编程接口,是一组定义了软件组件之间交互的规范和约定。它提供了一套定义良好的函数、类、方法、协议和数据结构,用于在应用程序之间进行通信和交互。
API的提供形式有:函数调用,类和方法,接口和协议,Web API,SDK(Software Development Kit)等。比如系统和某些制作者提供的函数库便属于API的一种。其中系统提供的库有的以动态链接库(DLL)的形式被提供。
draft
websocket相比起http是双工的,握手之后不会再反复握手,保证stream流