计算机基础高频100问——适用于所有程序员!

当 ping 一个 IP 地址时发生了什么

  • 当你ping一个IP地址时,你的计算机会发送一个ICMP(Internet Control Message Protocol)回显请求包到目标IP地址,并等待回显应答。

  • 如果目标IP地址可达并且没有防火墙阻止ICMP包,你的计算机将会收到一个ICMP回显应答。

如何获取一个进程的内存并监控

  • 在Linux中,可以使用ps命令或top命令来查看进程的内存使用情况。

  • 例如,ps aux会显示所有进程的CPU和内存使用情况。

  • 如果你想要实时监控一个进程的内存使用情况,可以使用top -p [pid]命令,其中pid]是你想要监控的进程的ID。

js 复制代码
ps aux
top -p [pid]

ps 是一个显示当前进程状态的命令。aux 是 ps 命令的选项参数,含义如下:

  • a:显示所有进程,包括其他用户的进程

  • u:以用户为主的格式来显示进程状态

  • x:显示没有控制终端的进程

所以,ps aux 命令的作用是显示系统中所有用户的所有进程状态。
top 是一个动态显示进程状态的命令。

-p 是 top 命令的选项参数,后面跟着进程 ID(pid),用于指定监视的进程。

所以,top -p [pid] 命令的作用是动态显示指定进程的状态。

简述 TCP socket 建立的过程

TCP socket的建立过程通常被称为"三次握手":

  1. 客户端发送一个SYN包到服务器,请求建立连接。
  2. 服务器接收到SYN包后,返回一个SYN-ACK包确认收到请求。
  3. 客户端接收到SYN-ACK包后,发送一个ACK包确认连接建立。

这个过程确保了双方都准备好进行数据传输。

在linux中如何获取登录的用户

  • 在Linux中,可以使用who命令来查看当前登录的用户。
  • who命令会显示每个登录用户的用户名、终端类型、登录时间等信息。
js 复制代码
who 
whoami

linux 中如何打印所有网络接口

  • 在Linux中,可以使用ip命令或ifconfig命令来查看所有网络接口。
  • ip addr showifconfig会显示所有网络接口的信息,包括IP地址、MAC地址、网络掩码等。
js 复制代码
ip addr show
ifconfig

linux 有哪些发行版,你最喜欢哪一个

  • Linux有很多发行版,包括Ubuntu、Debian、Fedora、CentOS、Arch Linux、Red Hat等。
  • 每个发行版都有其特点,选择哪个发行版主要取决于个人喜好和使用需求。
  • Ubuntu:Ubuntu是一个以桌面应用为主,基于Debian的开源Linux操作系统,注重用户体验,易于使用。
  • Debian:Debian是一个稳定且强大的开源Linux发行版,以其严谨的软件包管理著称,是许多其他Linux发行版的基础。
  • Fedora:Fedora是一个由Red Hat赞助,面向最新技术和开源社区的Linux发行版,常用于测试最新的开源软件。
  • CentOS:CentOS是一个基于Red Hat Enterprise Linux源代码的开源Linux发行版,主要面向企业用户,注重稳定性和安全性。
  • Red Hat:Red Hat Enterprise Linux(RHEL)是一个由Red Hat公司商业支持的Linux发行版,主要面向企业市场,提供长期支持。

CoW 策略指什么,docker 中有哪些应用

  • CoW是Copy-on-Write的缩写,是一种优化策略。
  • 当一个对象被复制时,不立即进行复制,而是当对象被修改时才进行复制。
  • 这样可以节省内存和CPU资源。
  • 在Docker中,CoW策略被用于镜像和容器的管理。
  • 当创建一个新的容器时,Docker不会复制一个新的镜像,而是创建一个指向原镜像的指针。
  • 当容器修改了镜像中的文件时,Docker才会复制一个新的文件。

如何使用命令查看一个文件有多少字符以及多少行

  • 在Linux中,可以使用wc命令来查看一个文件有多少字符和多少行。
  • wc -c [file]会显示文件的字符数,
  • wc -l [file]会显示文件的行数。
js 复制代码
wc -c [file]
wc -l [file]

如何使用vim查看文件有多少个字符以及多少行

在 Vim 中,你可以使用以下命令来查看文件的字符数和行数:

  • 查看字符数:在命令模式下(按 Esc 键进入),输入 g Ctrl+g,Vim 会在底部显示文件的字符数、行数、单词数等信息。

  • 查看行数:在命令模式下,输入 :=,Vim 会在底部显示文件的总行数。

在 Vim 中,你可以使用以下命令来开启行号显示:

  • 在命令模式下(按 Esc 键进入),输入 :set number 或者简写为 :set nu,然后按回车键,Vim 就会在每行的开始处显示行号。

  • 如果你想让 Vim 每次启动时都自动开启行号显示,你可以在你的 Vim 配置文件(通常是 ~/.vimrc )中添加一行 set number

如何把一个 CIDR 地址转化为IP地址范围段

  • CIDR地址是一种表示IP地址和子网掩码的方式,
  • 例如192.168.1.0/24。
  • 转化为IP地址范围,需要将子网掩码转化为二进制,然后计算出最小和最大的IP地址。
  • 例如,192.168.1.0/24的子网掩码是24,表示前24位是网络地址,后8位是主机地址
  • 所以,IP地址范围是192.168.1.0到192.168.1.255。

如何实现一个优先级队列

  • 优先级队列是一种特殊的队列,每个元素都有一个优先级,
  • 优先级最高的元素最先出队。
  • 优先级队列可以用堆(Heap)来实现。

JS实现范例如下:

js 复制代码
class PriorityQueue {
    constructor(comparator = (a, b) => a > b) {
        this._heap = [];
        this._comparator = comparator;
    }

    size() {
        return this._heap.length;
    }

    isEmpty() {
        return this.size() == 0;
    }

    peek() {
        return this._heap[0];
    }

    push(value) {
        this._heap.push(value);
        this._heap.sort(this._comparator);
    }

    pop() {
        return this._heap.shift();
    }
}

// 使用示例
let pq = new PriorityQueue((a, b) => a[1] < b[1]);
pq.push(["item1", 3]);
pq.push(["item2", 1]);
pq.push(["item3", 2]);

while (!pq.isEmpty()) {
    console.log(pq.pop());
}

什么是守护进程

  • 守护进程是一种在后台运行的进程,
  • 不需要用户交互。
  • 它们通常用于提供服务,
  • 如web服务器、数据库服务器等。
  • 在Linux中,守护进程的父进程通常是init进程

什么是对象存储,与块存储和文件存储有什么区别

  • 对象存储是一种存储结构,
  • 每个对象包含数据、元数据和唯一标识符
  • 对象存储可以轻松扩展,适合存储大量非结构化数据
  • 块存储将数据分割为块,
  • 每个块有唯一的地址。
  • 块存储适合存储结构化数据,如数据库。
  • 文件存储将数据存储为文件,
  • 文件组织在目录中。
  • 文件存储适合存储需要通过文件系统访问的数据。

简述TCP 的三次握手

TCP的三次握手是建立连接的过程:

  1. 客户端发送SYN包到服务器,请求建立连接。
  2. 服务器接收到SYN包后,返回一个SYN-ACK包确认收到请求。
  3. 客户端接收到SYN-ACK包后,发送一个ACK包确认连接建立。

这个过程确保了双方都准备好进行数据传输。

如何在 linux 中打印所有环境变量

  • 在Linux中,可以使用printenv命令或env命令来打印所有环境变量。
  • 如果不带任何参数,这两个命令都会打印所有环境变量。
js 复制代码
printenv
env

SIGINT SIGTERM SIGKILL 有什么区别

SIGINT、SIGTERM和SIGKILL都是用来结束进程的信号,但它们的行为有所不同:

  • SIGINT(信号2):通常由用户通过Ctrl+C发送 ,进程可以捕获这个信号并决定如何处理
  • SIGTERM(信号15):这是默认的结束信号,进程可以捕获这个信号并决定如何处理。
  • SIGKILL(信号9):这个信号不能被捕获或忽略,进程会立即结束
  • interrupt=手动打断 VS terminate=自然终止 VS kill=强杀

有没有使用过 oss,对象存储相比块存储和文件存储有什么优缺点

  • 对象存储(Object Storage Service,OSS)是一种存储服务,
  • 适合存储大量非结构化数据。
  • 对象存储的优点是可以轻松扩展,
  • 支持HTTP/HTTPS访问,
  • 适合存储图片、视频等大文件。
  • 缺点是性能较低,
  • 不适合存储需要频繁读写的数据。
  • 块存储将数据分割为块,
  • 每个块有唯一的地址。
  • 块存储的优点是性能高,
  • 适合存储数据库等需要频繁读写的数据。
  • 缺点是扩展性较差,不适合存储大量数据。
  • 文件存储将数据存储为文件,
  • 文件组织在目录中。
  • 文件存储的优点是可以通过文件系统访问,
  • 适合存储文档等需要通过文件系统访问的数据。
  • 缺点是性能较低,
  • 不适合存储需要频繁读写的数据。

如何用 linux 命令输出文件的特定行

  • 在Linux中,可以使用sed命令或awk命令来输出文件的特定行。
  • 例如,sed -n '5p' [file]会输出文件的第5行,
  • awk 'NR==5' [file]也会输出文件的第5行。
js 复制代码
sed -n '5p' [file]
awk 'NR==5' [file]

什么是 CNAME 记录和 A 记录

CNAME记录和A记录都是DNS记录的一种:

  • CNAME(Canonical Name)记录:用于将一个域名映射到另一个域名。
  • 例如,www.example.com 可以映射到 example.com
  • A(Address)记录:用于将一个域名映射到一个IPv4地址。
  • 例如,example.com 可以映射到 192.0.2.1

助记:cname=域名映射 VS address=IP地址映射

如何实现一个 LRU

  • LRU(Least Recently Used)是一种缓存淘汰策略,
  • 当缓存满时,最近最少使用的数据会被淘汰。
  • LRU可以用哈希表和双向链表来实现。
  • 哈希表用于查找数据,双向链表用于存储数据。

在 JavaScript 中,可以使用 Map 数据结构来实现一个简单的 LRU(Least Recently Used)缓存。以下是一个基本的实现:

js 复制代码
class LRUCache {

    constructor(capacity) {
        this.capacity = capacity;
        this.cache = new Map();
    }

    get(key) {
        if (!this.cache.has(key)) {
            return -1;
        }

        const temp = this.cache.get(key);
        this.cache.delete(key);
        this.cache.set(key, temp);

        return temp;
    }

    put(key, value) {
        if (this.cache.has(key)) {
            this.cache.delete(key);
        }

        this.cache.set(key, value);

        if (this.cache.size > this.capacity) {
            this.cache.delete(this.cache.keys().next().value);
        }
    }

}

// 使用示例
let cache = new LRUCache(2);
cache.put(1, 1);
cache.put(2, 2);
console.log(cache.get(1)); // 返回 1
cache.put(3, 3);           // 该操作会使得密钥 2 作废
console.log(cache.get(2)); // 返回 -1 (未找到)
cache.put(4, 4);           // 该操作会使得密钥 1 作废
console.log(cache.get(1)); // 返回 -1 (未找到)
console.log(cache.get(3)); // 返回 3
console.log(cache.get(4)); // 返回 4
  • 在这个实现中,get 方法从缓存中获取一个键的值,
  • 如果键不存在,则返回 -1。
  • 每次调用 get 或 put 方法时,都会将键移动到缓存的末尾。
  • 当缓存的大小超过其容量时,put 方法会删除最近最少使用的键。

cron 表达式 (* 10 * * *) 会如何触发

  • cron表达式由5个字段组成,分别表示分钟、小时、日期、月份和星期。
  • * 10 * * * 表示每天的第10小时的每一分钟都会触发。
  • 分钟(0 - 59)
  • 小时(0 - 23)
  • 日期(1 - 31)
  • 月份(1 - 12)
  • 星期(0 - 7,0 和 7 都表示星期日)

助记:分时日月周 / 分食日月粥

cron 表达式 (30 10 * * *) 会如何触发

30 10 * * * 表示每天的第10小时的第30分钟会触发。

  • 也就是每天的10:30触发一次

助记:分时日月周 / 分食日月粥

在 linux 中如何查看 cron 执行的情况

  • 在Linux中,可以使用crontab -l命令来查看当前用户的cron任务。
  • 如果你想要查看cron任务的执行情况,可以将任务的输出重定向到一个文件,
  • 例如30 10 * * * command > /path/to/logfile 2>&1
js 复制代码
crontab -l

git 如何查看某个文件的提交历史

  • 在git中,可以使用git log命令来查看某个文件的提交历史。
  • 例如,git log -- [file]会显示该文件的所有提交。
js 复制代码
git log -- [file]

什么是IO多路复用

  • IO多路复用是一种技术,可以让一个进程同时监控多个IO事件
  • 当任何一个IO事件准备好时,进程就可以处理它。
  • IO多路复用可以提高程序的并发性能,
  • 特别是处理大量长连接的情况。
  • 在Linux中,IO多路复用可以使用selectpollepoll等系统调用来实现。

如何查看一个文件的 inode number

  • 在Linux中,可以使用ls命令或stat命令来查看一个文件的inode number。
  • 例如,ls -i [file]stat [file]会显示文件的inode number。
js 复制代码
ls -i [file]
stat [file]

文件系统中 mtime、ctime 和 atime 指什么,都有什么不同

在文件系统中,mtime、ctime和atime是文件的三个时间戳:

  • mtime(Modification Time):文件内容最后一次修改的时间
  • ctime(Change Time):文件状态(如权限、所有者等)最后一次改变的时间
  • 注意,当文件内容改变时,ctime也会改变。
  • atime(Access Time):文件最后一次被访问的时间
  • 在Linux中,可以使用ls命令或stat命令来查看这些时间戳。
js 复制代码
ls -l [file]
stat [file]

TCP 是如何保证可靠性的

TCP通过以下几种机制来保证可靠性:

  • 序列号:每个TCP段都有一个序列号,接收方可以根据序列号重新组装数据。
  • 确认应答:当接收方收到数据后,会发送一个确认应答。如果发送方没有收到确认应答,会重新发送数据。
  • 重传超时:如果发送方在一定时间内没有收到确认应答,会重新发送数据。
  • 流量控制:接收方可以告诉发送方它的接收窗口大小,发送方不能发送超过接收窗口大小的数据。
  • 拥塞控制:当网络拥塞时,TCP会减少数据的发送速率

如何监控文件的变动

  • 在Linux中,可以使用inotify机制来监控文件的变动。
  • inotify可以监控文件的创建、删除、修改等事件。
  • 也可以使用watch命令定期执行一个命令,
  • 例如watch ls会每隔2秒执行一次ls命令。
js 复制代码
watch ls

vpn 的原理是什么

  • VPN(Virtual Private Network)是一种在公共网络上创建私有网络的技术。
  • VPN通过加密和隧道技术,使得数据在公共网络上传输时保持私密性和完整性。
  • VPN工作时,客户端会与VPN服务器建立一个虚拟的网络连接
  • 所有的网络通信都会通过这个连接,然后由VPN服务器转发到目标地址
  • 由于所有的通信都被加密,所以其他人无法窥探到通信内容

shell 中 <math xmlns="http://www.w3.org/1998/Math/MathML"> 与 {} 与 </math>与() 各是什么意思

在shell中,${}$()都是变量替换的一种形式,但它们的用途不同:

  • ${}用于变量替换
  • 例如,如果有一个变量name="world",那么echo "Hello, ${name}"会输出"Hello, world"。
  • $()用于命令替换/优先计算
  • $()会执行其中的命令,并将结果替换到原位置。
  • 例如,echo "Today is $(date)" 会输出"Today is "后面跟上当前日期。
js 复制代码
name="world"
echo "Hello, ${name}"
echo "Today is $(date)"

ssh 的原理是什么

  • SSH(Secure Shell)是一种网络协议,
  • 用于在不安全的网络上进行安全的远程登录。
  • SSH通过公钥加密技术来验证远程计算机和用户,
  • 通过对称加密技术来保护数据的私密性和完整性。
    当你使用SSH登录一个远程计算机时,会发生以下步骤:
  1. SSH客户端连接到SSH服务器。
  2. SSH服务器发送它的公钥到SSH客户端
  3. SSH客户端使用服务器的公钥加密一个随机生成的会话密钥,并发送给服务器。
  4. SSH服务器使用它的私钥解密会话密钥
  5. 客户端和服务器都有了会话密钥,然后使用这个密钥加密所有的通信。

PS:其实是先非对称交换秘钥,后对称通信!和HTTPS一样的!

Node 中 cluster 的原理是什么

  • Node.js的cluster模块是一种创建多进程的方式。
  • 主进程(Master)负责创建和管理子进程(Worker),
  • 子进程负责处理客户端的请求。
  • 当主进程接收到客户端的请求时,会将请求分发给一个子进程。
  • 子进程处理完请求后,将结果返回给主进程,
  • 主进程再将结果返回给客户端。
  • 这种方式可以充分利用多核CPU的性能,提高程序的并发能力。

如何判断端口是否可达

  • 在Linux中,可以使用nc命令或telnet命令来判断一个端口是否可达。
  • 例如,nc -zv [host] [port]telnet [host] [port]会尝试连接到指定的主机和端口,如果连接成功,那么端口就是可达的。
js 复制代码
nc -zv [host] [port]
telnet [host] [port]

助记:telnet 主机 端口 好记一点!

如何禁止服务器被 ping

  • 在Linux中,可以通过配置iptables防火墙来禁止服务器被ping。
  • 例如,iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
  • 该命令会丢弃所有的ICMP回显请求,这样服务器就不会响应ping命令。
js 复制代码
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

助记:iptables墙掉所有icmp即可!

什么是文件描述符 (file descriptor)

  • 文件描述符是一个非负整数
  • 用于表示打开的文件、套接字或其他IO设备
  • 在Linux中,每个进程都有一张文件描述符表
  • 当进程打开一个文件或创建一个套接字 时,系统会返回一个文件描述符
  • 进程可以通过这个文件描述符来读写数据

在服务器内如何得知自己的公网IP

  • 在Linux中,可以使用curl命令或wget命令来获取公网IP。
  • 例如,curl ifconfig.mewget -qO- ifconfig.me会返回公网IP。
js 复制代码
curl ifconfig.me
wget -qO- ifconfig.me

助记:就是访问一下自己!

简述 UDP socket 建立的过程

  • UDP(User Datagram Protocol)是一种无连接的协议,所以建立UDP socket的过程比较简单:
  1. 创建一个socket。
  2. 绑定到一个地址和端口。
  3. 发送和接收数据。

助记:socket绑定目标地址,开始通信!

ssh 如何设置 IP whiteList

  • 在Linux中,可以通过配置ssh的hosts.allowhosts.deny文件来设置IP白名单。
  • hosts.allow文件中的IP地址会被允许访问,
  • hosts.deny文件中的IP地址会被拒绝访问。
  • 例如,如果你想要只允许192.168.1.1访问ssh,可以在hosts.allow文件中添加一行sshd: 192.168.1.1,并在hosts.deny文件中添加一行sshd: ALL

简述 TCP 的四次挥手

TCP的四次挥手是断开连接的过程:

  1. 客户端发送一个FIN包到服务器,请求断开连接。
    2. 服务器接收到FIN包后,返回一个ACK包确认收到请求,此时连接处于半关闭状态。 3. 服务器发送一个FIN包到客户端,请求断开连接。
  2. 客户端接收到FIN包后,返回一个ACK包确认收到请求,此时连接完全关闭。

助记:C-FIN-ACK + S-FIN-ACK / 客辉映,服辉映

tcp 中 time_wait 堆积过多会有什么问题,为什么它超时时间这么长

  • TIME_WAIT是TCP连接关闭后的一个状态,
  • 表示连接已经关闭,但是可能还有一些迟到的数据包在网络中。
  • TIME_WAIT状态通常持续2倍的最大段生存时间(MSL),在Linux中默认是60秒
  • 如果TIME_WAIT状态的连接过多,可能会耗尽系统的资源,导致新的连接无法建立。
  • 此外,如果服务器频繁地建立和关闭连接,可能会导致大量的连接处于TIME_WAIT状态,这被称为TIME_WAIT积累
  • TIME_WAIT状态的超时时间需要足够长,以确保所有的数据包都已经从网络中消失
  • 如果超时时间太短,可能会导致旧的数据包被误认为是新连接的数据包
  • 这可能会导致数据的错误。

助记:目送你走远!

如何判断文件中的换行符是 LF 还是 CRLF

LF 和 CRLF 是两种不同的行结束符(Line Ending)标记。

  • LF:Line Feed,ASCII 码为 10,表示换行,在 Unix/Linux 系统中作为行结束符
  • CRLF:Carriage Return Line Feed,ASCII 码分别为 13 和 10,表示回车换行,在 Windows 系统中作为行结束符
  • 在处理跨平台文本文件时,这两种行结束符的差异可能会导致问题,
  • 例如在 Unix/Linux 系统中打开 Windows 系统的文本文件,可能会在每行的末尾看到一个额外的 ^M 字符。
  • 在Linux中,可以使用file命令来判断文件中的换行符是LF还是CRLF。
  • 例如,file [file]会显示文件的信息,
  • 如果文件中的换行符是CRLF,那么会显示 with CRLF line terminators
js 复制代码
file [file]

进程与线程的区别是什么

进程和线程都是操作系统进行任务调度的基本单位,但它们有以下区别:

  • 进程是系统资源分配的最小单位
  • 线程是CPU调度的最小单位
  • 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间。
  • 线程是进程的一部分,同一进程内的线程共享该进程的地址空间
  • 进程间不会做信息共享,线程间可以共享进程的资源,如内存等。
  • 创建进程的开销大于创建线程。

如何查看 node_modules(某一文件夹) 的体积有多大

  • 在 Unix/Linux 系统中,你可以使用 du 命令来查看 node_modules 文件夹的大小。具体命令如下:
js 复制代码
du -sh node_modules
  • -s 参数表示对每个参数进行总计,
  • -h 参数表示以人类可读的格式(例如 KB、MB、GB 等)显示大小。

助记:diskUsage short humanReaable

服务器的平均负载如何计算

  • 服务器的平均负载是一段时间内系统处于可运行状态和不可中断状态的平均进程数。
  • 可运行状态表示进程正在使用CPU或等待使用CPU,
  • 不可中断状态表示进程正在等待I/O操作完成。
  • 在Linux中,可以使用uptime命令或查看/proc/loadavg文件来查看服务器的平均负载。
  • 这两种方法都会显示最近1分钟、5分钟和15分钟的平均负载。
js 复制代码
uptime
cat /proc/loadavg

如何创建一个进程

  • 在Unix/Linux系统中,可以使用fork()系统调用来创建一个新的进程。
  • 在JavaScript 中,我们可以使用 Node.js 的 child_process 模块来创建一个新的进程。

以下是一个简单的示例:

js 复制代码
const { spawn } = require('child_process');

// 创建一个新的进程来执行 'ls' 命令
const ls = spawn('ls', ['-lh', '/usr']);

ls.stdout.on('data', (data) => {
  console.log(`输出:\n${data}`);
});

ls.stderr.on('data', (data) => {
  console.error(`错误:${data}`);
});

ls.on('close', (code) => {
  console.log(`子进程退出,退出码 ${code}`);
});
  • 在这个示例中,我们使用 spawn 函数创建了一个新的进程来执行 ls 命令,
  • 并监听了 stdout、stderr 和 close 事件来处理子进程的输出和退出。

多服务器的系统时间不一致如何解决

  • 可以使用网络时间协议(NTP)服务器来同步多服务器的系统时间。
  • 在Linux系统中,可以使用ntpdate命令来同步时间。

source 与 sh 执行脚本时有何区别

  • source命令会在当前shell环境中执行脚本,
  • 脚本中的变量和环境变量会影响到当前shell。
  • 而sh命令会启动一个新的shell来执行脚本,
  • 脚本中的变量和环境变量不会影响到当前shell。

如何列出所有已合并到 master 的分支并删除

在Git中,可以使用以下命令列出所有已合并到master的分支:

js 复制代码
git branch --merged master

然后,可以使用以下命令删除这些分支:

js 复制代码
git branch --merged master | grep -v "\* master" | xargs -n 1 git branch -d

localhost 与 127.0.0.1 有什么区别

  • localhost是一个主机名,通常在系统的hosts文件中映射到IP地址127.0.0.1。
  • 127.0.0.1是IPv4网络协议的环回地址,用于网络软件回环测试。

TCP 四次挥手时为什么需要 2MSL

  • 在TCP四次挥手过程中,需要等待2MSL(最大报文段生存时间)以确保最后一个ACK报文能够到达对方
  • 如果直接关闭,最后一个ACK报文如果丢失,那么就会导致不必要的TCP重传。

简单介绍一下 RSA 算法

  • RSA是一种非对称加密算法,
  • 主要用于数据加密和数字签名。
  • 它基于一个公钥和一个私钥,
  • 公钥用于加密,私钥用于解密。
  • RSA的安全性基于大数分解的困难性。

什么是 CPU 缓存,如何查看缓存命中率

  • CPU缓存是位于CPU和主内存之间的一种高速缓存存储器,
  • 用于存储最近使用的数据和指令,
  • 以减少CPU访问主内存的时间。
  • 在Linux系统中,可以使用perf工具查看缓存命中率。

git 如何添加与删除一个 submodule

添加一个submodule:

js 复制代码
git submodule add <repository> [<path>]

删除一个submodule:

  1. 删除.gitmodules文件中的相关条目
  2. 删除.git/config文件中的相关条目
  3. 运行git rm --cached <path_to_submodule>命令
  4. 删除未跟踪的submodule文件

什么是 exit code

  • exit code是程序结束时返回给操作系统的一个值,用于表示程序的运行状态。
  • 通常,0表示成功,非0表示出错。

同一进程的线程共享那些资源

同一进程的线程共享以下资源:

  • 代码段、
  • 数据段、
  • 堆、
  • 文件描述符、
  • 信号处理器、
  • 进程ID和父进程ID等。

助记:数据代码堆栈文件信号ID / 数代堆文信ID

HTTP 与 TCP 中的 keep-alive 各是什么

  • HTTP的keep-alive是一种持久连接,
  • 使得在同一个TCP连接中可以传输多个HTTP请求和响应。
  • TCP的keep-alive是一种机制,用于检测一个TCP连接是否仍然有效。

什么是原码、补码与反码

  • 原码、补码和反码都是二进制数的表示方法。
  • 原码就是其正常的二进制表示法,
  • 反码是在原码的基础上,符号位不变,其余位取反
  • 补码是在原码的基础上,符号位不变,其余位取反后加1

npm 执行命令传递参数时,为何需要双横线

  • npm执行命令时,双横线后面的参数会被传递给执行的脚本,而不是npm本身。

软链接和硬链接有何区别

  • 硬链接是指向文件的i节点的指针
  • 而软链接(符号链接)是一个特殊的文件,其内容是另一个文件的路径。
  • 硬链接不能跨文件系统,不能链接目录。
  • 软链接可以跨文件系统,可以链接目录。
相关推荐
广而不精zhu小白4 分钟前
CentOS Stream 9 挂载Windows共享FTP文件夹
linux·windows·centos
一休哥助手10 分钟前
全面解析 Linux 系统监控与性能优化
linux·运维·性能优化
二进制杯莫停12 分钟前
掌控网络流量的利器:tcconfig
linux
watl028 分钟前
【Android】unzip aar删除冲突classes再zip
android·linux·运维
赵大仁1 小时前
在 CentOS 7 上安装 Node.js 20 并升级 GCC、make 和 glibc
linux·运维·服务器·ide·ubuntu·centos·计算机基础
vvw&1 小时前
Docker Build 命令详解:在 Ubuntu 上构建 Docker 镜像教程
linux·运维·服务器·ubuntu·docker·容器·开源
冷曦_sole2 小时前
linux-21 目录管理(一)mkdir命令,创建空目录
linux·运维·服务器
最后一个bug2 小时前
STM32MP1linux根文件系统目录作用
linux·c语言·arm开发·单片机·嵌入式硬件
dessler2 小时前
Docker-Dockerfile讲解(二)
linux·运维·docker
卫生纸不够用2 小时前
子Shell及Shell嵌套模式
linux·bash