为面试做准备,整理一些计算机专业的基础知识
准备秋招找工作,研究方向是深度学习目标检测之类的。一次面试的时候,面试官问到计算机方面的基础知识,回答的不是很好,遂整体相关知识。特此感谢多位好友给出的学习意见。下面主要从数据结构、操作系统、计算机网络、数据库、Linux几个方面进行简要整理高频考点,若有错误之处,还请多多指正。1、数据结构关于数据结构,之前有总结八大排序算法和一些数据结构知识,这里就不重复整理了。另外可以参考知乎大佬写的总结,有
准备秋招找工作,研究方向是深度学习目标检测之类的。一次面试的时候,面试官问到计算机方面的基础知识,回答的不是很好,遂整体相关知识。特此感谢多位好友给出的学习意见。下面主要从数据结构、操作系统、计算机网络、数据库、Linux几个方面进行简要整理高频考点,若有错误之处,还请多多指正。
1、数据结构
关于数据结构,之前有总结八大排序算法和一些数据结构知识,这里就不重复整理了。另外可以参考知乎大佬写的总结,有图更生动。其它关于一些常见算法移步刷题总结(leetcode HOT100),目前还在写。关于python中的数据结构(整理的移步这里)、魔法函数感兴趣可以看看。
2、操作系统
这里整理一些常考的问题。
(1)什么是操作系统?(操作系统的目标和功能)
操作系统控制和管理整个计算机系统的硬件和软件资源,并合理的组织和调度计算机的工作和资源的分配,以提供给用户和其它软件方便的接口和环境,它是计算机系统中最基本的系统软件。
资源管理:处理机管理(进程控制、进程同步、进程通信、处理机调度)、存储器管理(提高内存利用率、内存的分配和回收、地址映射、内存保护与共享)、文件管理(计算机中信息以文件形式存在)、设备管理(用户的I/O请求,外设等);
为用户提供计算机硬件系统接口:命令接口(通过命令向系统提供各种服务要求)、程序接口(用户在程序中使用这些系统调用请求操作系统提供服务);
图形接口:图像用户界面GUI
(2)介绍进程(process)和线程(thread)以及区别
A、进程是进程是系统进行资源调度和分配的一个独立单位。
B、线程是系统调度的最小单位。
C、一个进程可以有多个线程,多个线程也可以并发执行。
这里贴两个非常贴切的比喻。介绍1,介绍2
下面举个栗子,来说一下一个进程和线程的运行整个过程。先说下这个框图:
CPU(central processing unit,中央处理器)由运算器和控制器组成。大块来看,CPU有以下几个重点模块:
- ALU(arithmetic and logic unit,算术逻辑单元):用于计算;
- CU(Control Unit,控制单元):负责程序的流程管理,从内存取指令、分析指令和执行指令;
- MMU(Memory Management Unit,内存管理单元):一种负责处理中央处理器(CPU)的内存访问请求的计算机硬件,完成虚拟地址到硬件地址的映射;
- Register(寄存器):存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果;
- cache(高速缓冲存储器):用于内存和cpu之间的数据交互;
- PC(Program Counter,程序计数器):存放下一条要执行指令的地址。
比如现在你的电脑上有一个软件叫QQ.exe存放在你的电脑上,双击运行:
- 双击QQ.exe,(比如要计算2+3)操作系统将指令(+)和数据(2,3)存储到了内存上(程序运行的整体叫做进程,是系统分配资源的最小单位);
- 现在在内存中开始运行主线程(进程有多个线程),从主线程开始可能会有分支其他的线程也开始运行(线程是操作系统运行调度的基本单位);
- 现在通过总线将线程的数据存储(2,3)在Register中,然后由ALU进行计算(5),运行之后结果返回到Register中,再返回到内存中;
- 一个程序有多个指令,PC记录指令执行到哪里,下一步该运行哪一个;
- 数据传输过程 内存-Cache-寄存器
(3)线程同步的方式有哪些?
线程同步就是多个线程同时访问一个数据时(多个线程同时对一个数据操作,有的读有的写不就乱套了),容易出现线程安全问题。(线程五种状态:新建、就绪、阻塞、运行、死亡)
- 互斥量:每个线程在访问共享资源前先尝试对互斥量进行设置(加锁),成功加锁后才可以对共享资源进行读写操作,操作结束后释放互斥量(解锁)。(另外你可能会想,互斥量如果被多线程同时访问怎么办?互斥量保证这一操作的原子性,也就是指一系列操作不可中断的特性,要么全执行、要么全不执行、不会中断)
- 信号量:信号量本质上是一个非负的证书计数器,只有当信号量的值大于0时,才能使用公共资源,否则说明没有可用资源。它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。
- 事件:通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作(允许一个线程在处理完一个任务后,主动唤醒另外一个线程执行任务)。
(4)进程通信的方式有哪些?
进程通信就是在不同进程之间进行数据交流,比如存储在磁盘上(不过效率太低了)。进程同步的四个原则:空闲让进(资源无占用,可以用)、忙则等待(有占用等待)、有限等待(等待有限时间保证可以用)、让权等待(进程由执行变成阻塞)。
进程间的通信主要包括管道、系统IPC(Inter-Process Communication,主要指大量数据交换)(包括消息队列、信号量、共享内存)、Socket。
- 管道是一种半双工的通信方式,数据只能单项流动,并且只能在具有亲缘关系的进程间流动(进程的亲缘关系通常是父子进程)。
- 命名管道也是半双工的通信方式,允许无亲缘关系进程间通信。
- 消息队列是消息的链表,存放在内核中并由消息队列标识符标识。
- 信号量同线程同步的信号量相似,是个非负计数器,当信号量的值大于0时可以使用临界资源。(原语操作PV、读写锁、管程)
- 共享内存是映射一段能够被其他进程访问的内存,其由一个内存创建可以被多个进程访问。
- Socket可以用于不同进程间的进程通信(比如利用IP和端口发送、接收数据)。
(5)什么是缓冲区溢出?危害及原因? 参考
- 缓冲区溢出是指当计算机向缓冲区填充数据时超出了缓冲区本身的容量,溢出的数据覆盖在合法数据上。
- 危害 程序崩溃,导致拒绝服务、跳转并且执行一段恶意代码(由于栈空间中保存了函数的返回地址,该地址保存了函数调用结束后后续执行指令的位置,如果位置被恶意修改指向新的地址,程序则会从其他地方执行)。
- 原因 没有对用户的输入进行合法检查。
(6)什么是死锁?死锁产生的条件
死锁是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。
死锁产生的条件:
- 互斥条件:一个资源只能被一个进程使用(也就是临界资源);
- 请求与保持条件:一个进程因请求资源而阻塞时,对已有资源保持不放;
- 不可剥夺条件:进程获得的资源在未完成使用之前,不能被其他进程强行剥夺;
- 循环等待条件:若干进程之间形成一种首尾相连的环形等待资源。
预防死锁的方法:
- 资源一次性分配:一次性分配所有资源,这样就不会再有请求了(破坏请求条件);
- 只要有一个资源得不到分配,也不给这个进程分配其他的资源(破坏请保持条件);
- 可剥夺资源:即当某进程获得了部分资源,但得不到其它资源,则释放已占有的资源(破坏不可剥夺条件);
- 资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反(破坏环路等待条件);
(7)进程分为哪几种状态?参考
三种状态:
- 就绪状态:进程已获得除处理机以外的所需资源,等待分配处理机资源;
- 运行状态:占用处理机资源运行,处于此状态的进程数小于等于CPU数;
- 阻塞状态:进程等待某种条件,在条件满足之前无法执行;
(五种状态:加上新建状态、终止状态)
(8)分页和分段有什么区别
用户程序的地址空间划分成**相同(页)或不同(段)**的存储空间,离散的存储在内存空间(块)中。
- 页是信息的物理单位,分页是为了实现非连续分配,以便解决内存碎片问题,或者说分页是由于系统管理的需要。段是信息的逻辑单位,它含有一组意义相对完整的信息,分段的目的是为了更好地实现共享,满足用户的需要。
- 段的大小不固定,由它所完成的功能决定(完整的程序逻辑结构);页大大小固定,由系统决定(固定的存储空间)。
- 段向用户提供二维地址空间;
- 页向用户提供的是一维地址空间。
- 段是信息的逻辑单位,便于存储保护和信息的共享,页的保护和共享受到限制。
(9)操作系统中进程调度策略有哪几种? 参考
- 先来先服务:谁先来谁干活(还有一种短作业优先,先运行作业时间最短的任务)。
- 优先级:为不同检测分配不同的优先级,先处理优先权高的任务。
- 时间片轮转:系统将所有就绪进程按照一定的服务顺序进行排列,每次调度时分配一定的时间片,时间片用完时由计时器中断,将当前进程排入队尾并进行下一个进程。
- 多级反馈:设置多个就绪队列,并为各个队列赋予不同的优先级。第一个队列的优先级最高,第二个队列次之,其余各队列的优先权逐个降低。该算法赋予各个队列中进程执行时间片的大小也各不相同,在优先权愈高的队列中,为每个进程所规定的执行时间片就愈小。
3、计算机网络
(1)OSI七层网络协议及其作用?
运用层:通过应用进程间的交互完成特定网络应用。DNS、HTTP、SMTP等。应用层交互的数据单元称为报文。
表示层:表示层为在应用过程之间传送的信息提供表示方法的服务,它只关心信息发出的语法和语义。
会话层:利用传输层提供的服务,使应用建立和维持会话,并能使会话获得同步。
运输层:负责向两台主机中进程之间的通信提供通用的数据传输服务(传输控制协议TCP [报文段]、用户数据报协议UDP协议 [用户数据报])。
网络层:将运输层产生的报文段或用户数据报(UDP)封装成分组(IP数据报)或包进行传送。另一任务是选择合适的路由,使主机运输层传下来的分组能够通过路由器找到合适的主机。
数据链路层:将网络交下来的IP数据报组装成帧,每一帧包括数据和必要的控制信息(同步信息、地址信息、差错控制)
物理层:机械、电子、定时接口通信信道上原始的比特传输(考虑如何传输、接收比特)。
TCP/IP四层模型。
应用层、运输层、网际层IP、网络接口层。
(2)TCP/UDP的区别
TCP(Transmission Control Protocol传输控制协议)、UDP(User Datagram Procotol用户数据报协议)都是OSI模型中的运输层协议。TCP提供可靠的通信传输;而UDP不需要先建立连接,常被用于广播和细节交给应用的通信传输。
- TCP面向连接;UDP面向非连接,即发送数据不需要建立连接;
- TCP提供可靠的服务(数据传输,无差错、不丢失、不重复、按序到达),UDP无法保证(尽最大努力交付);
- TCP面向字节流,UDP面向报文;
- TCP数据传输慢(TCP首部开销大,20字节),UDP数据传输快(首部开销小,8个字节)。
常见的应用、运用层协议、运输层协议
应用 | 运用层协议 | 运输层协议 |
---|---|---|
名字转换 | DNS(域名系统) | UDP |
IP地址配置 | DHCP(动态主机配置协议) | UDP |
IP电话 | 专用协议 | UDP |
流式多媒体通信 | 专用协议 | UDP |
多播 | IGMP(网际组管理协议) | UDP |
电子邮件 | SMTP(简单邮件传送协议) | TCP |
远程终端接入 | TELNET(远程终端协议) | TCP |
万维网 | HTTP(超文本传输协议) | TCP |
文件传输 | FTP(文件传输协议) | TCP |
(3) 说下了解的端口号及其对应的服务。
端口 | 服务 |
---|---|
21 | FTP(文件传输协议) |
22 | SSH(安全外壳协议) |
23 | TELENT(远程登录服务) |
25 | SMTP(简单邮件传输协议) |
53 | DNS域名服务器 |
80 | HTTP(超文本传输协议) |
443 | HTTPS(超文本传输安全协议) |
1080 | Sockets |
1521 | Orcale数据库默认端口 |
3306 | MySQL服务 |
(4)说下TCP的三次握手。
TCP连接建立过程中要解决以下问题:
- 要使一方能够明确知对方的存在;
- 要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量);
- 能够运输实体资源(如缓存大小、连接表中的项目)进行分配。
TCP的三次握手:(图源计算机网络(第七版))
- 第一次握手:建立连接,客户端(A)发送连接请求报文段,将SYN=1,seq=x;TCP规定SYN报文段不能携带数据,但是要消耗一个序列号;然后客户端激进型SYN-SENT(同步已发送)状态,等待服务器确认。
- 第二次握手:服务器(B)收到客户端的SYN报文段后,如果同意连接,则向A发送确认;SYN、ACK(标志位)位都置1,确认号ack=x+1(seq+1),同时为自己选择一个初始序号seq=y;这个报文段(即SYN+ACK报文段)也不能携带数据,但是消耗一个序号;此时B进入SYN-RCVD(同步收到)状态。
- 第三次握手:A收到B的确认后,还要给B发送确认,确认报文段ACK=1,确认号ack=y+1,而自己的序列号seq=x+1;向B发送ACK报文段之后(TCP规定,ACK报文段可以携带数据,如果不携带数据则不消耗序列号),A和B都进入了ESTABLISHED状态,完成三次握手。
(5)四次挥手 (参考,计算机网络(第七版))
与建立连接的“三次握手”类似,断开一个TCP连接则需要“四次握手”。
- 第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了(当然,在FIN包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可以接受数据(FIN=1,seq=u)。A进入FIN-WAIT-1(终止等待1)状态。
- 第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到ack=u+1(与SYN相同,一个FIN占用一个序号)。此时TCP连接处于half-close(半关闭)状态。
- 第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。A进入FIN-WAITE-2状态。
- 第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。
(6)有哪些保留(私有)IP地址?
A类:10.0.0.0、10.255.255.255
B类:172.16.0.0、172.31.255.255
C类:192.168.0.0、192.168.25.255
(7)IP地址分为哪几类?
IPv4地址共有32bit
类别 | 网络号 | 地址范围 | 网络号位数 | 主机号位数 |
---|---|---|---|---|
A类 | 0开头 | 1.0.0.0-127.255.255.255 | 8位(1-126) | 24位 |
B类 | 10开头 | 128.0.0.0-191.255.255.255 | 16位(128.1-191.255) | 16位 |
C类 | 110开头 | 192.0.0.0-223.255.255.255 | 24位(192.0.1-223.255.255) | 8位 |
D类 | 1110开头 | 前四位固定,后面为多播地址 | ||
E类 | 11110 | 前四位固定,后面保留今后使用 |
IPv6采用128bit,首部固定部分为40字节。
(8)在浏览器中输入网址之后执行会发生什么?
- 查找域名对应的IP地址。这一步会依次查找浏览器缓存,系统缓存,路由器缓存,ISPNDS缓存,根域名服务器
- 浏览器向IP对应的web服务器发送一个HTTP请求
- 服务器响应请求,发回网页内容
- 浏览器解析网页内容
(9)HTTP协议包括哪些请求?
- GET:对服务器资源的简单请求
- POST:用于发送包含用户提交数据的请求
- HEAD:类似于GET请求,不过返回的响应中没有具体内容,用于获取报头
- PUT:传说中请求文档的一个版本
- DELETE:发出一个删除指定文档的请求
- TRACE:发送一个请求副本,以跟踪其处理进程
- OPTIONS:返回所有可用的方法,检查服务器支持哪些方法
- CONNECT:用于ssl隧道的基于代理的请求
4、Linux
更多推荐
所有评论(0)