计算机网络/操作系统相关

(一)计算机网络

1. TCP 超详解 一文搞定TCP面试知识

2. HTTP 超详解 一文搞定HTTP面试知识

3. HTTPS 超详解 一文搞定HTTPS面试知识

4. 跨域方案

5. 用户从输入url到显示页面这个过程发生了什么?

  • DNS解析

  • TCP连接

  • 发送HTTP请求

  • 服务器处理请求并返回HTTP报文

  • 浏览器解析渲染页面

  • 连接结束

6. DNS

(1)基本原理

DNS就是域名系统,是因特网中的一项核心服务,是用于实现域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。

域名结构解析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fw2lENWP-1588311162920)(C:\Users\lin\AppData\Roaming\Typora\typora-user-images\1588309574553.png)]

域名结构是树状结构,树的最顶端代表根服务器,根的下一层就是由我们所熟知的.com、.net、.cn等通用域和.cn、.uk等国家域组成,称为顶级域。网上注册的域名基本都是二级域名,比如http://baidu.comhttp://taobao.com等等二级域名,它们基本上是归企业和运维人员管理。接下来是三级或者四级域名…最多127级域名。这里不多赘述。总体概括来说域名是由整体到局部的机制结构。

(2)DNS解析流程

打开浏览器地址栏中输入某个域名,回车后:

  • 浏览器缓存

    浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有,解析结束。同时域名被缓存的时间也可通过TTL属性来设置。

  • 系统缓存

    若上面没有查找到,则会自动检查用户计算机系统Hosts文件DNS缓存是否有该域名对应IP;

  • 本地区域名服务器

    若上面没有查找到,向本机配置的本地区DNS域名服务器(LDNS)发起请求,进行查询。

  • 根域名服务器

    若上面没有找到,则进入根服务器进行查询。根域名收到请求后会查看区域文件记录,若无,则将其管辖范围内顶级域名(如.com)服务器IP告诉本地DNS服务器;

  • 顶级域名服务器

    顶级域名服务器收到请求后查看区域文件记录,若无,则将其管辖范围内主域名服务器的IP地址告诉本地DNS服务器;

  • 主域名服务器

    主域名服务器接受到请求后查询自己的缓存,如果没有则进入下一级域名服务器进行查找,并重复该步骤直至找到正确纪录;

  • 保存结果至缓存

    本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时将该结果反馈给客户端,客户端通过这个IP地址与web服务器建立链接。

7. cdn原理

CDN的全称是Content Delivery Network,即内容分发网络。CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应。

CDN的基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

8. 关于Ajax和websocket的区别以及使用场景

(1)Ajax是什么?

Ajax,即异步JavaScript和XML,是一种创建交互式网页应用的网页开发技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新,这意味着可以在不重新加载整个网页的情况下,对网页的部分进行加载更新。

Ajax 的优点在于它在浏览器与web服务器之间使用异步数据传输(HTTP请求),不阻塞用户,核心对象是XMLHTTPRequest。通过这个对象, js可在不重新加载页面的情况下与web服务器交换数据 。

(2) websocket是什么?

websocket是HTML5一种新的协议,实现了浏览器与服务器全双工通信。其本质是:先通过HTTP/HTTPS协议进行握手后创建一个用于交换数据的TCP连接,服务端与客户端通过此TCP连接进行实时通信。

websocket最大的优点在于——服务器和浏览器可以在给定的时间范围内的任意时刻,互相推送消息。在建立连接之后,服务器可以主动传送数据给浏览器。

(3) Ajax轮询和websocket的区别

实现浏览器与服务器的实时数据交互,可以通过建立websocket,也可以通过Ajax轮询的方式。

  • 本质不同
    ajax,即异步JavaScript和XML,是一种创建交互式网页应用的网页开发技术;
    webSocket是HTML5一种新的协议,实现了浏览器与服务器全双工通信。其本质是先通过HTTP/HTTPS协议进行握手后创建一个用于交换数据的TCP连接,服务端与客户端通过此TCP连接进行实时通信。
  • 生命周期不同
    websocket建立的是长连接,在一个会话中一直保持连接;而ajax是短连接,数据发送和接收完成后就会断开连接。
  • 适用范围不同
    websocket一般用于前后端实时数据交互;而ajax前后端非实时数据交互。
  • 发起人不同
    ajax技术需要客户端发起请求;而websocket服务器和客户端可以互相实时推送信息。
  • 用法不同

websocket和Ajax的应用场景有哪些
https://blog.csdn.net/weixin_34255793/article/details/88729150

9. XSS 和 CSRF 原理、具体场景及其防范

(1)XSS

XSS ,跨站脚本攻击。是指攻击者在网站上注入恶意的客户端代码,对客户端网页进行篡改,从而在用户浏览网页时,对用户浏览器进行控制或者获取用户隐私数据的一种攻击方式。

XSS攻击可以分为3类:反射型(非持久型)、存储型(持久型)、基于DOM。

XSS攻击的防范

  • HttpOnly 防止劫取 Cookie:浏览器将禁止页面的Javascript 访问带有 HttpOnly 属性的Cookie。

    攻击者可以通过注入恶意脚本获取用户的 Cookie 信息。通常 Cookie 中都包含了用户的登录凭证信息,攻击者在获取到 Cookie 之后,则可以发起 Cookie 劫持攻击。所以,严格来说,HttpOnly 并非阻止 XSS 攻击,而是能阻止 XSS 攻击后的 Cookie 劫持攻击。

  • 输入检查:不要相信用户的任何输入。 对于用户的任何输入要进行检查、过滤和转义。建立可信任的字符和 HTML 标签白名单,对于不在白名单之列的字符或者标签进行过滤或编码。

  • 输出检查:用户的输入会存在问题,服务端的输出也会存在问题。一般来说,除富文本的输出外,在变量输出到 HTML 页面时,可以使用编码或转义的方式来防御 XSS 攻击。

(2) CSRF

CSRF,跨站请求伪造。攻击者借助受害者的 Cookie 骗取服务器的信任,可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击服务器,从而在并未授权的情况下执行在权限保护之下的操作。

CSRF 攻击的防范

  • 验证码:CSRF 攻击往往是在用户不知情的情况下发起了网络请求。而验证码会强制用户必须与应用进行交互,才能完成最终请求。因此通常情况下,验证码能够很好地遏制 CSRF 攻击。
  • Referer Check:根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。通过 Referer Check,可以检查请求是否来自合法的”源”。
  • 添加 token 验证(token==令牌):CSRF 攻击之所以能够成功,是因为攻击者可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于 Cookie 中,因此攻击者可以在不知道这些验证信息的情况下直接利用用户自己的 Cookie 来通过安全验证。要抵御 CSRF,关键在于在请求中放入攻击者所不能伪造的信息,并且该信息不存在于 Cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。

10. cookie

(1)基本概念

Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。

HTTP协议本身是无状态的。什么是无状态呢,即服务器无法判断用户身份。Cookie实际上是一小段的文本信息(key-value格式)。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。

当用户第一次访问并登陆一个网站的时候,cookie的设置以及发送会经历以下4个步骤:

  • 客户端发送一个请求到服务器
  • 服务器发送一个HttpResponse响应到客户端,其中包含Set-Cookie的头部
  • 客户端保存cookie,之后向服务器发送请求时,HttpRequest请求中会包含一个Cookie的头部
    服务器返回响应数据
  • 在客户端(document.cookie)添加或修改cookie

参考于:深入理解Cookie

(2)Cookie 字段及其应用
  • name字段:为一个cookie的名称。
  • value字:段为一个cookie的值。
  • domain字段:为可以访问此cookie的域名。
  • path字段:为可以访问此cookie的页面路径。 比如domain是abc.com,path是/test,那么只有/test路径下的页面可以读取此cookie。
  • expires/Max-Age 字段:为此cookie超时时间。若设置其值为一个时间,那么当到达此时间后,此cookie失效。不设置的话默认值是Session,意思是cookie会和session一起失效。当浏览器关闭(不是浏览器标签页,而是整个浏览器) 后,此cookie失效。
  • Size字段:此cookie大小。
  • http字段: cookie的httponly属性。若此属性为true,则只有在http请求头中会带有此cookie的信息,而不能通过document.cookie来访问此cookie。它会禁止javascript脚本来访问cookie。
  • secure 字段: 设置是否只能通过https来传递此条cookie
(3)cookie + sessionId 登陆过程

Cookie和Session实现保存登录状态免登录

11. token

Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

什么是token及怎样生成token

token的使用及原理

12. 为什么用socket.io

node.js提供了高效的服务端运行环境,但是由于浏览器端对HTML5的支持不一,为了兼容所有浏览器,提供卓越的实时的用户体验,并且为程序员提供客户端与服务端一致的编程体验,于是socket.io诞生。

socket.io设计的目标是支持任何的浏览器,任何Mobile设备。目前支持主流的PC浏览器 (IE,Safari,Chrome,Firefox,Opera等),Mobile浏览器(iphone Safari/ipad Safari/android WebKit/WebOS WebKit等)。

socket.io基于node.js并简化了WebSocket API,统一了通信的API。它支持:WebSocket, Flash Socket, AJAX long-polling, AJAX multipart streaming, Forever IFrame, JSONP polling。

socket.io解决了实时的通信问题,并统一了服务端与客户端的编程方式。启动了socket以后,就像建立了一条客户端与服务端的管道,两边可以互通有无。

13. ipv4 和 ipv6比较?

IPv6和IPv4都属于“互联网协议”。

相对IPv4,IPv6具有如下优点:

  • 更大的地址空间:IPv4中规定IP地址长度为32,即有232-1个地址;而IPv6中IP地址的长度为128,即有2128-1个地址。
  • 更小的路由表:IPv6的地址分配一开始就遵循聚类(Aggregation)的原则,这使得路由器能在路由表中用一条记录(Entry)表示一片子网,大大减小了路由器中路由表的长度,提高了路由器转发数据包的速度。
  • 增强的组播(Multicast)支持以及对流的支持(Flow-control):这使得网络上的多媒体应用有了长足发展的机会,为服务质量(QoS)控制提供了良好的网络平台。
  • 加入了对自动配置(Auto-configuration)的支持:这是对DHCP协议的改进和扩展,使得网络(尤其是局域网)的管理更加方便和快捷。
  • 更高的安全性:在使用IPv6网络中用户可以对网络层的数据进行加密并对IP报文进行校验,这极大的增强了网络安全。

更多详细区别:

IPV4与IPV6的区别(史上最详细)

(二)操作系统

1. 进程和线程

进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。

线程,是进程的一部分,一个没有线程的进程可以被看作是单线程的。线程有时又被称为轻权进程或轻量级进程,也是 CPU 调度的一个基本单位。

2. 进程和线程区别

  • 进程是具有一定独立功能的程序,他是系统进行资源分配调度的一个独立单位。
  • 线程是进程的一个实体,是cpu调度分派的基本单位,线程之间基本上不拥有系统资源
  • 一个程序至少有一个进程,一个进程至少有一个线程,资源分配给进程,同一个进程下所有线程共享该进程的资源

3. 进程间通信

  • 无名管道:半双工的通信方式,数据只能单向流动且只能在具有亲缘关系的进程间使用
  • 有名管道,:也是半双工的通信方式,但是允许没有亲缘进程之间的通信
  • 消息队列:消息队列是有消息的链表,存放在内核中,并由消息队列标识符标识,消息队列克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限的缺点
  • 信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问,它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源,
  • 共享内存:共享内存就是映射一段能被其他进程所访问的内存。这段共享内存由一个进程创建,但是多个进程可以访问,共享内存是最快的IPC 方式,往往与其他通信机制配合使用
  • 套接字:可用于不同机器之间的进程通信

4. 线程的哪些资源共享,哪些资源不共享

(1)共享的资源
  • 堆:由于堆是在进程空间中开辟出来的,所以它是理所当然地被共享的;因此new出来的都是共享的(16位平台上分全局堆和局部堆,局部堆是独享的)
  • 全局变量:它是与具体某一函数无关的,所以也与特定线程无关;因此也是共享的
  • 静态变量:虽然对于局部变量来说,它在代码中是“放”在某一函数中的,但是其存放位置和全局变量一样,存于堆中开辟的.bss和.data段,是共享的
  • 文件等公用资源:这个是共享的,使用这些公共资源的线程必须同步。Win32 提供了几种同步资源的方式,包括信号、临界区、事件和互斥体。
(2)独享的资源
  • 栈:栈是独享的
  • 寄存器: 这个可能会误解,因为电脑的寄存器是物理的,每个线程去取值难道不一样吗?其实线程里存放的是副本,包括程序计数器PC
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值