星哥の面试题Day28
面试题系列均来自鱼皮的知识星球——编程导航
Node.js 有哪些全局对象?它们分别有什么作用?
Node.js 中有一些全局对象,它们可以在任何模块中直接访问,无需进行导入。以下是一些常见的全局对象及其作用:
global
:它是 Node.js 的全局命名空间,类似于浏览器环境中的window
对象。在global
对象上定义的属性和方法可以在任何地方访问。然而,在实际开发中,应避免在global
对象上添加属性,以防止全局命名空间污染。process
:它是一个全局对象,提供了关于当前 Node.js 进程的信息和对其进行控制的方法。process
对象包含诸如环境变量、命令行参数、内存使用情况、当前工作目录等属性和方法。console
:它是一个全局对象,提供了用于输出信息和调试的方法,如console.log()
、console.error()
、console.warn()
等。setTimeout
和clearTimeout
:这两个方法用于设置和清除定时器。setTimeout
方法用于在指定的毫秒数后执行一个回调函数,clearTimeout
方法用于取消一个先前通过setTimeout
设置的定时器。setInterval
和clearInterval
:这两个方法用于设置和清除周期性定时器。setInterval
方法用于每隔指定的毫秒数执行一个回调函数,clearInterval
方法用于取消一个先前通过setInterval
设置的定时器。setImmediate
和clearImmediate
:这两个方法用于在当前事件循环结束时执行一个回调函数。setImmediate
方法会将回调函数添加到事件循环的队列末尾,以便在当前事件循环的所有 I/O 事件和定时器事件处理完毕后执行。clearImmediate
方法用于取消一个先前通过setImmediate
设置的回调函数。Buffer
:它是一个全局的构造函数,用于处理二进制数据,如文件 I/O、网络 I/O 等。Buffer
提供了一系列方法来创建和操作字节缓冲区。require
和module
:require
是一个全局函数,用于导入其他模块。module
是一个全局对象,表示当前模块。每个 Node.js 文件都是一个模块,模块可以导出函数、对象或值,以便其他模块使用。
注意,虽然这些对象在全局范围内可用,但它们并非严格意义上的全局变量。在 Node.js 模块中,它们是模块作用域内的变量,这意味着在一个模块中定义的变量不会自动成为全局变量。
简述 TCP/IP 网络模型,分为几层?每层的职责和作用是什么?
TCP/IP 网络模型(也称为互联网协议套件)是一种用于描述网络通信的概念模型。它分为四层,每层都有特定的职责和作用,它们分别是:
- 应用层(Application Layer):应用层负责处理与应用程序的通信和数据传输。它包括各种应用层协议,例如 HTTP、HTTPS、FTP、SMTP、IMAP、POP3、DNS 等。这些协议定义了客户端和服务器之间如何互相发送和接收数据。应用层的主要职责是为应用程序提供用户接口、数据传输以及数据封装和解封装。
- 传输层(Transport Layer):传输层主要负责在网络中进行端到端的可靠数据传输。它提供了两种主要的传输协议:TCP(传输控制协议)和 UDP(用户数据报协议)。TCP 提供了可靠、面向连接的数据传输,它可以确保数据在传输过程中不会丢失、重复或乱序。UDP 提供了不可靠、无连接的数据传输,它不能保证数据的传输质量,但传输速度更快,适用于实时通信等场景。
- 网络层(Internet Layer):网络层负责在不同网络之间进行数据包的路由和传输。它使用 IP(互联网协议)进行寻址和路由,将数据包从源主机传输到目的主机。网络层的主要职责包括:IP 地址分配、路由选择、分片和重组以及错误检测和处理。除了 IP 协议,网络层还包括其他协议,如 ICMP(互联网控制消息协议)和 IGMP(互联网组管理协议)。
- 链路层(Link Layer):链路层(又称网络接口层或数据链路层)负责在同一网络中进行数据帧的发送和接收。链路层的协议因网络硬件而异,如 Ethernet、Wi-Fi、PPP 等。链路层的主要职责包括:物理寻址、数据帧封装和解封装、差错检测、流量控制以及链路管理。
总的来说,TCP/IP 网络模型将网络通信划分为四个层次,每层都有自己的职责和功能。这种分层模型有助于降低网络系统的复杂性,便于设计、实现和维护网络协议和设备
git stash 命令有什么作用?什么时候适合用它?
git stash
命令用于临时保存当前工作区的修改,以便你可以在干净的工作区上执行其他操作,如切换分支、拉取更新等。当你完成其他操作后,可以使用 git stash apply
或 git stash pop
将之前保存的修改重新应用到工作区。
git stash
在以下场景中非常有用:
- 当你正在进行一项尚未完成的任务,但需要切换到其他分支处理紧急问题或更新时。你可以使用
git stash
临时保存当前修改,然后切换分支并处理其他任务。完成后,切换回原来的分支,并使用git stash apply
或git stash pop
恢复之前的修改,继续完成未完成的任务。 - 当你需要拉取远程仓库的更新,但当前工作区有未提交的修改时。使用
git stash
保存当前修改,拉取远程更新,然后使用git stash apply
或git stash pop
恢复修改。
以下是一些常用的 git stash
子命令:
git stash save [message]
:将当前工作区的修改保存到一个新的存储,并可以添加一个可选的描述信息。git stash list
:列出所有的存储。git stash apply [stash_name]
:将指定的存储应用到当前工作区,不删除存储。如果未指定存储名,则默认应用最近的存储。git stash pop [stash_name]
:将指定的存储应用到当前工作区,并从存储列表中删除。如果未指定存储名,则默认应用并删除最近的存储。git stash drop [stash_name]
:删除指定的存储。如果未指定存储名,则默认删除最近的存储。git stash branch <branch_name> [stash_name]
:基于指定存储创建一个新分支,并将存储应用到新分支。如果未指定存储名,则默认使用最近的存储。git stash clear
:删除所有的存储。
总之,git stash
是一个非常有用的命令,用于临时保存工作区的修改,以便在干净的工作区上执行其他操作。在处理紧急任务、更新代码或切换分支时,git stash
都可以帮助你轻松管理工作区的状态。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 星Blog!