面试常见问题

一、操作系统

  1. 线程和进程

1)一个进程有一个或多个线程。
2)资源分配给进程,同一个进程的所有线程共享该进程所有资源。
3)CPU分配给线程,在处理器运行的是线程。
4)线程在执行过程中需要协作同步。
5)进程是最基本的资源拥有单位和调度单位。

  1. 进程间的通信方式

1)消息传递。
2)共享存储。
3)管道通信。

  1. 线程间的通信方式

1)使用volatile关键字。
2)object类的wait()和notify()方法。
3)使用JUC工具类CountDownLatch。
4)基本LockSupport实现线程间的阻塞和唤醒。

  1. cookies和session区别

1)cookies和session都是会话技术,cookies运行在客户端,session运行在服务器端。
2)cookies有大小限制以及浏览器在存cookies的个数业有限制,session是没有大小限制,其和服务器的内存大小有关。
3)cookies有安全隐患,通过拦截或本地文件找到cookies后可以进行攻击。
4)session是保存在服务器端上,会存在一段时间才会消失,如果session过多会增加服务器的压力。

  1. 内核线程和用户线程

1)用户线程:不用内核支持,在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调用和管理线程的函数来控制用户线程,不需要用户态/核心态切换,速度快,操作系统内核不知道多线程的存在,因此一个线程阻塞将使整个进程阻塞,由于这里处理器时间片分配是以进程为基本单位,所以每个线程执行时间相对减少。
优点:
(1)线程的调度不需要内核直接参与,控制简单。
(2)可以在不支持线程的操作系统中实现。
(3)创建和销毁线程、线程切换代价等线程管理的代价比内核线程少得多。
(4)允许每个进程定制自己的调度算法,线程管理比较灵活。
(5)线程能够利用的表空间和堆栈空间比内核线程多。
(6)同一个进程中只能有一个线程在运行。
缺点:
(1)资源调度按照进程进行,多个处理机下,同一进程中的线程只能在同一处理机下分时复用。
(2)一个线程阻塞将使整个进程阻塞。
2)内核线程:有操作系统内核创建和撤销,内核维护进程以及线程的上下文信息以及线程切换,一个内核线程由于I/O操作而阻塞不会影响其他线程的运行。
优点:
(1)当有多个处理机时,一个进程的多个进程可以同时进行。
(2)如果进程中一个线程被阻塞,内核可调度同一个进程中的另一个进程。
缺点:
(1)由内核进行调度,花销大。

  1. 线程池

一种线程使用模式,线程过多会带来调度开销,进而影响缓存局部性和整体性能。线程池维护着多个线程,等待着监督管理者分配可并发执行的任务,避免了在处理短时间任务时创建和销毁线程的代价。线程池不仅能保证内核的充分利用,还能防止过分调度。
线程池模式:
(1)HS/HA半同步/半异步模式:生产者消费模式,分为同步层、队列层、异步层三层。同步层的主线程处理工作任务并存入工作队列,工作线程从工作队列取出任务进行处理,如果工作队列为空,则取不到任务的工作线程进入挂起状态,此模式不适用于大数据量交换的场合。
(2)L/F领导者和跟随者模式:线程有三种状态:领导者leader、跟随者follower和工作者processor。任何时刻线程池只有一个领导者线程,领导者负责事件消息分离,从追随者中选择一个来当继任者,然后将自身设置为工作者状态去处理该事件,完毕后成为追随者。

  1. 多进程和多线程

1)多进程:
(1)共享复杂,需要IPC,同步简单。
(2)占用内存多,切换复杂,CPU利用率低。
(3)创建、销毁复杂,速度慢。
(4)编程简单,调试简单。
(5)进程之间不会相互影响。
(6)适用于多核、多机分布。
(7)如果目标子功能交互少,资源和性能许可,进程适用。
2)多线程:
(1)共享简单,同步复杂。
(2)占用内存少,切换简单,CPU利用率高。
(3)创建、销毁简单,速度快。
(4)编程复杂,调试复杂。
(5)一个线程挂掉将导致整个进程挂掉,没有内存隔离。
(6)适用于存在大量I/O网络等耗时操作,或需和用户交互时,多线程有利于提高系统的并行性和用户界面快速响应,从而提高友好性。
3)使用场景:
(1)频繁创建销毁,用线程。
(2)大量计算用线程。
(3)强相关用线程,弱相关用进程。
(4)可能扩展到多机分布的用进程,多核分布用线程。

  1. 大小端

1)大端:较高的有效字节存储在较低的存储器地址;较低的有效字节存储在较高的存储器地址。
2)小端:较高的有效字节存储在较高的存储器地址;较低的有效字节存储在较底的存储器地址。
大端的地址由小向大增加,数据从高向低存放,与阅读习惯相同;小端高地址部分权值高,低地址部分权值低,与逻辑方法一致。

二、计算机网络

  1. TCP/IP:FTP、SMTP、TCP、UDP、IP

1)应用层:Telent、FTP、SMTP
2)传输层:UDP、TCP
3)网络层:ICMP、IP、IGMP
4)数据链路层:ARP、RARP

  1. TCP三次握手

1)client向sever发送SYN(同步请求)。
2)sever向client回复SYN和ACK(同步请求应答)。
3)client向sever回复ACK确认收到请求。

  1. TCP四次挥手

1)client向sever发送FIN,用来关闭client到sever的数据传送,client进入FIN_WAIT_1状态。
2)sever收到FIN后,发送ACK给client,确认序号为收到序号+1,server进入CLOSE_WAIT状态,client收到确认信息后,进入FIN_WAIT_2状态。
3)sever发送一个FIN给client,用来关闭server到client的数据传送,server进入LAST_ACK状态。
4)client收到FIN后,进入TIME_WAIT状态,接着发送一个ACK给server,确认序号为收到序号+1,server进入CLOSED状态。
四次挥手的原因:TCP 是全双工通信,两个方向的连接需要单独断开。

  1. 为什么要三次握手

为了防止已失效的连接请求报文段突然又传送到了服务端因而产生错误,主要防止资源的浪费。

  1. TIME_WAIT作用

1)确保最后一个确认报文能够到达。
2)可能存在“已失效的请求报文段”,为了防止这种报文段出现在本次连接外,要等待一段时间。

  1. TCP和UDP区别

1)报头不同:UDP数据报最大长度为1472 byte,TCP数据报最大长度为1460 byte。
2)特点不同:
UDP:无连接;不可靠;面向数据报;数据接收不够灵活,但能明确区分两个数据包,避免粘包问题。
TCP:面向连接;可靠传输;面向字节流;存在粘包问题。
3)协议不同:
UDP:NFS、TFTP、DHCP、BOOTP、DNS。
TCP:HTTP、HTTPS、SSH、Telnet、FTP、SMTP。

  1. UDP实现可靠连接

1)添加seq/ACK机制,确保数据发送到对端。
2)添加发送和接收缓冲区,主用于用户超时重传。
3)添加超时重传机制。
PS:目前RUDP、RTP和UDT实现了可靠传输

  1. 网络分层

1)物理层:该层是网络通信的数据传输介质,由连接不同结点的电缆与设备共同构成。主要功能是:利用传输介质为数据链路层提供物理连接,负责处理数据传输并监控数据出错率,以便数据流的透明传输。
2)数据链路层:在物理层提供的服务基础上,在通信的实体间建立数据链路连接,传输以“帧”为单位的数据包,并采用差错控制与流量控制方法,使有差错的物理线路变成无差错的数据链路。
3)网络层:为数据在结点之间传输创建逻辑链路,通过路由选择算法为分组通过通信子网选择最适当的路径,以及实现拥塞控制、网络互联等功能。
4)传输层:向用户提供可靠的端到端(End-to-End)服务,处理数据包错误、数据包次序,以及其他一些关键传输问题。传输层向高层屏蔽了下层数据通信的细节,因此,它是计算机通信体系结构中关键的一层。
5)会话层:负责维护两个结点之间的传输链接,以便确保点到点传输不中断,以及管理数据交换等功能。
6)表示层:用于处理在两个通信系统中交换信息的表示方式,主要包括数据格式变换、数据加密与解密、数据压缩与恢复等功能。
7)应用层:为应用软件提供了很多服务,例如文件服务器、数据库服务、电子邮件与其他网络软件服务。

  1. HTTP状态码

1)1**:消息。100(continue);101(switch protocols);102(processing)
2)2**:成功。200(OK);201(created);202(accept)
3)3**:重定向。300(multiple choice);301(move permanently);302(move temporaily)
4)4**:请求错误。400(语义错误);401(要用户验证);403(forbidden);404(not found);405(method not allowed);406(not acceptable);408(request timeout)
5)5**:服务器错误。500(internal sever error);501(不支持请求的某个功能);502(接收到无效的响应);503(无法处理当前请求);504(请求超时);505(服务器不支持)

  1. 在浏览器输入一个URL后的流程

1)DNS域名解析系统对输入的网址进行解析。
2)建立TCP连接(三次握手)。
3)客户端发送HTTP请求,服务器端响应请求。
4)浏览器解析渲染画面。
5)连接结束(四次挥手)。

  1. DNS解析域名过程

DNS是建立在分布式数据库上的分层命名系统,该系统将域名转换为IP地址,并可以将域名分配给Internet组资源和用户,无论实体的物理位置如何。
1)客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
2)当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该项纪录,则本地的域名服务器直接把查询结果返回。
3)如果本地的缓存没有该项纪录,则本地域名服务器直接把请求发送到根域名服务器,然后根域名服务器再返回本地域名服务器一个所查询的主域名服务器的地址。
4)本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该项纪录,则返回相关的下级域名服务器地址。
5)重复4),直到查到正确的记录。
6)本地域名服务器把返回来的结果保存到缓存,以备下次使用,同时将结果返回给客户机。

  1. Get、Post的区别

1)Get侧重获取数据,Post侧重提交数据。
2)get把参数放在url中,post则把参数写在request body中。
3)get提交数据大小一般为1024字节,post理论上没有限制,前者与浏览器、服务器和操作系统有关,后者与服务器的设置和内存大小有关。
4)get请求可以被缓存,post不可以。
5)get请求保留在浏览器历史记录中,post不会。
6)get请求可以被存为书签,post不可以。
7)get请求不可以处理敏感数据,post可以。

  1. HTTP、HTTPS区别

1)HTTPS要CA申请证书,一般要收费。
2)HTTP是超文本传输协议,信息是明文传输,HTTPS是具有安全性的SSL加密传输协议。
3)HTTP和HTTPS使用完全不同的连接方式,用的端口也不同,前者是80,后者是443.
4)HTTP连接简单,无状态的,HTTPS是SSL+HTTP协议构建的可进行加密传输,身份认证的网络协议,比HTTP安全。
加密方法:对称加密,非对称加密。
HTTPS=HTTP+SSL/TLS
SSL:安全套接字
TLS:传输层安全

  1. HTTPS 过程

1)客户发送它支持的算法列表以及一个不重数。不重数就是在协议的生存期只使用一次的数,用于防止重放攻击,每个 TCP 会话使用不同的不重数,可以使加密密钥不同,重放记录无法通过完整性检查。
2)服务器从该列表中选择一种对称加密算法(例如 AES),一种公钥

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值