面试官:说说TCP为什么需要三次握手和四次挥手?
面试官:说说TCP为什么需要三次握手和四次挥手?
一、三次握手三次握手(Three-way Handshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包
主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备
过程如下:
第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN(c),此时客户端处于 SYN_SENT 状态
第二次握手:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,为了确认客户端的 SYN,将客户端的 ISN+1作为ACK的值,此时服务器处于 SYN_RCVD 的状态
第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文,值为服务器的ISN+1。此时客户端处于 ESTABLISHED 状态。服务器收到 ACK 报文之后,也处于 ESTABLISHED 状态,此时,双方已建立起了连接
上述每一次握手的作用如下:
第一次握手:客户端发送网络包,服务端收到了这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。 ...
面试官:说说 HTTP 常见的请求头有哪些? 作用?
面试官:说说 HTTP 常见的请求头有哪些? 作用?
一、是什么HTTP头字段(HTTP header fields),是指在超文本传输协议(HTTP)的请求和响应消息中的消息头部分
它们定义了一个超文本传输协议事务中的操作参数
HTTP头部字段可以自己根据需要定义,因此可能在 Web 服务器和浏览器上发现非标准的头字段
下面是一个HTTP请求的请求头:
123456789101112GET /home.html HTTP/1.1Host: developer.mozilla.orgUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-US,en;q=0.5Accept-Encoding: gzip, deflate, brReferer: https://developer ...
面试官:说说HTTP 常见的状态码有哪些,适用场景?
面试官:说说HTTP 常见的状态码有哪些,适用场景?
一、是什么HTTP状态码(英语:HTTP Status Code),用以表示网页服务器超文本传输协议响应状态的3位数字代码
它由 RFC 2616规范定义的,并得到 RFC 2518、RFC 2817、RFC 2295、RFC 2774与 RFC 4918等规范扩展
简单来讲,http状态码的作用是服务器告诉客户端当前请求响应的状态,通过状态码就能判断和分析服务器的运行状态
二、分类状态码第一位数字决定了不同的响应状态,有如下:
1 表示消息
2 表示成功
3 表示重定向
4 表示请求错误
5 表示服务器错误
1xx代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束
常见的有:
100(客户端继续发送请求,这是临时响应):这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。服务器必须在请求完成后向客户端发送一个最终响应
101:服务器根据客户端的请求切换协议,主要用于websocket或 ...
面试官:说说 linux系统下 文件操作常用的命令有哪些?
面试官:说说 linux系统下 文件操作常用的命令有哪些?
一、是什么Linux 是一个开源的操作系统(OS),是一系列Linux内核基础上开发的操作系统的总称(常见的有Ubuntu、centos)
系统通常会包含以下4个主要部分
内核
shell
文件系统
应用程序
文件系统是一个目录树的结构,文件系统结构从一个根目录开始,根目录下可以有任意多个文件和子目录,子目录中又可以有任意多个文件和子目录
二、文件操作常见处理目录的命令如下:
ls(英文全拼:list files): 列出目录及文件名
cd(英文全拼:change directory):切换目录
pwd(英文全拼:print work directory):显示目前的目录
mkdir(英文全拼:make directory):创建一个新的目录
rmdir(英文全拼:remove directory):删除一个空的目录
cp(英文全拼:copy file): 复制文件或目录
rm(英文全拼:remove): 删除文件或目录
mv(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称
ls列出目录文 ...
面试官:说说你对 linux 用户管理的理解?相关的命令有哪些?
面试官:说说你对 linux 用户管理的理解?相关的命令有哪些?
一、是什么Linux是一个多用户的系统,允许使用者在系统上通过规划不同类型、不同层级的用户,并公平地分配系统资源与工作环境
而与 Windows 系统最大的不同, Linux 允许不同的用户同时登录主机,同时使用主机的资源
既然是多用户的系统,那么最常见的问题就是权限,不同的用户对于不同的文件都应该有各自的权限
例如,小 A 希望个人文件不被其他用户读取,而如果不对文件进行权限设置,共享了主机资源的小 B 也可以读取小 A 的个人文件,这是不合理的
这里面涉及到用户与用户组的概念
二、用户与用户组Linux 以 “用户与用户组” 的概念,建立用户与文件权限之间的联系,保证系统能够充分考虑每个用户的隐私保护,很大程度上保障了 Linux 作为多用户系统的可行性
从文件权限的角度出发,“用户与用户组” 引申为三个具体的对象:
文件所有者
用户组成员
其他人
每一个对象对某一个文件的持有权限是不同的
文件所有者当一个用户创建了一个文件,这个用户就是这个文件的文件所有者。文件所有者对文件拥有最高权限,同时排他性地拥有该文件 ...
面试官:说说你对操作系统的理解?核心概念有哪些?
面试官:说说你对操作系统的理解?核心概念有哪些?
一、是什么操作系统(Operating System,缩写:OS)是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件程序,同时也是计算机系统的内核与基石
简单来讲,操作系统就是一种复杂的软件,相当于软件管家
操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务,
操作系统的类型非常多样,不同机器安装的操作系统可从简单到复杂,可从移动电话的嵌入式系统到超级电脑的大型操作系统,在计算机与用户之间起接口的作用,如下图:
许多操作系统制造者对它涵盖范畴的定义也不尽一致,例如有些操作系统集成了图形用户界面,而有些仅使用命令行界面,将图形用户界面视为一种非必要的应用程序
二、核心概念操作系统的核心概念都是对具体物理硬件的抽象,主要有如下:
进程(线程):进程(线程)是操作系统对CPU的抽象
虚拟内存(地址空间):虚拟内存是操作系统对物理内存的抽象
文件:文件是操作系统对物理磁盘的抽象
shell:它是一个程序,可从键盘获取命令 ...
面试官:说说你对输入输出重定向和管道的理解?应用场景?
面试官:说说你对输入输出重定向和管道的理解?应用场景?
一、是什么linux中有三种标准输入输出,分别是STDIN,STDOUT,STDERR,对应的数字是0、1、2:
STDIN 是标准输入,默认从键盘读取信息
STDOUT 是标准输出,默认将输出结果输出至终端
STDERR 是标准错误,默认将输出结果输出至终端
对于任何linux命令的执行会有下面的过程:
一条命令的执行需要键盘等的标准输入,命令的执行和正确或错误,其中的每一个双向箭头就是一个通道,所以数据流可以流入到文件端(重定向或管道)
简单来讲,重定向就是把本来要显示在终端的命令结果,输送到别的地方,分成:
输入重定向:流出到屏幕如果命令所需的输入不是来自键盘,而是来自指定的文件
输出重定向:命令的输出可以不显示在屏幕,而是写在指定的文件中
管道就是把两个命令连接起来使用,一个命令的输出作为另一个命令的输入
两者的区别在于:
管道触发两个子进程,执行 | 两边的程序;而重定向是在一个进程内执行。
管道两边都是shell命令
重定向符号的右边只能是Linux文件
重定向符号的优先级大于管道
二、命令重定向常见 ...
面试官:说说你对 shell 的理解?常见的命令?
面试官:说说你对 shell 的理解?常见的命令?
一、是什么 Shell 是一个由c语言编写的应用程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言
它连接了用户和Linux内核,让用户能够更加高效、安全、低成本地使用 Linux 内核
其本身并不是内核的一部分,它只是站在内核的基础上编写的一个应用程序,它和 QQ、微信等其它软件没有什么区别,特殊的地方就是开机立马启动,并呈现在用户面前
主要作用是接收用户输入的命令,并对命令进行处理,处理完毕后再将结果反馈给用户,比如输出到显示器、写入到文件等,同样能够调用和组织其他的应用程序,相当于一个领导者的身份,如下图:
那么shell脚本就是多个 Shell 命令的组合并通过 if 条件分支控制或循环来组合运算,实现一些复杂功能,文件后缀名为.sh
常用的 ls 命令,它本身也是一个 Shell 脚本,通过执行这个 Shell 脚本可以列举当前目录下的文件列表,如下创建一个hello.sh脚本
12345#!/bin/bash# 执行的命令主体lsecho "hello world&q ...
面试官:说说什么是进程?什么是线程?区别?
面试官:说说什么是进程?什么是线程?区别?
一、进程操作系统中最核心的概念就是进程,进程是对正在运行中的程序的一个抽象,是系统进行资源分配和调度的基本单位
操作系统的其他所有内容都是围绕着进程展开的,负责执行这些任务的是CPU
进程是一种抽象的概念,从来没有统一的标准定义看,一般由程序、数据集合和进程控制块三部分组成:
程序用于描述进程要完成的功能,是控制进程执行的指令集
数据集合是程序在执行时所需要的数据和工作区
程序控制块,包含进程的描述信息和控制信息,是进程存在的唯一标志
二、线程线程(thread)是操作系统能够进行运算调度的最小单位,其是进程中的一个执行任务(控制单元),负责当前进程中程序的执行
一个进程至少有一个线程,一个进程可以运行多个线程,这些线程共享同一块内存,线程之间可以共享对象、资源,如果有冲突或需要协同,还可以随时沟通以解决冲突或保持同步
举个例子,假设你经营着一家物业管理公司。最初,业务量很小,事事都需要你亲力亲为。给老张家修完暖气管道,立马再去老李家换电灯泡——这叫单线程,所有的工作都得顺序执行
后来业务拓展了,你雇佣了几个工人,这样,你的物业公司就 ...
面试官:说说 linux 系统下 文本编辑常用的命令有哪些?
面试官:说说 linux 系统下 文本编辑常用的命令有哪些?
一、是什么Vim是从 vi 发展出来的一个文本编辑器,代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方
而vim 可以说是程序开发者的一项很好用的工具
二、使用基本上 vi/vim 共分为三种模式,分别是:
命令模式(Command mode)
输入模式(Insert mode)
底线命令模式(Last line mode)
命令模式Vim 的默认模式,在这个模式下,你不能输入文本,但是可以让我们在文本间移动,删除一行文本,复制黏贴文本,跳转到指定行,撤销操作,等等
移动光标常用的命令如下:
h 向左移动一个字符
j 向下移动一个字符
k 向上移动一个字符
i 向右移动一个字符
或者使用方向键进行控制
如果想要向下移动n行,可通过使用 “nj” 或 “n↓” 的组合按键
搜索常见的命令如下:
/word:向光标之下寻找一个名称为 word 的字符
?word:向光标之上寻找一个字 ...