秋招八股文合集基础篇

线程和进程:

  1. 总结:进程是资源分配的最小单位,线程是CPU调度的最小单位(进程和线程都是一个时间段的描述,是CPU工作时间段的描述。)

  2. 什么是进程:程序的一次执行过程。cpu会为进程开辟空间(CPU、内存)专门执行任务。

  3. 什么是线程:CPU上真正运行的是线程。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈)

  4. 区别:(1)进程拥有自己的资源空间,每启动一个进程,系统就会为它分配地址空间;
    (2)而线程与CPU资源分配无关,多个线程共享同一进程内的资源,使用相同的地址空间。一个进程可以包含若干个线程(至少有一个)。

  5. 优劣
    (1)线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式进行。
    (2)线程的调度与切换比进程快很多,同时创建一个线程的开销也比进程要小很多。
    (3)多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

  6. 进程间通信:
    (1)匿名管道:| 仅支持父子进程使用。一种半双工的通信方式,数据只能单向流动
    (2)命名管道:FIFO 也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
    (3)消息队列:把消息放在消息队列里,可随时存取。选择接收消息,不像FIFO只能默认接收。避免阻塞,不用进程同步。但是太大的数据量处理不行。
    (4)共享内存:最快的通信方式。共享内存由一个进程创建,但多个进程都可以访问。(多进程需要同步)
    (5)信号量:一个计数器。控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
    (6)套接字:针对不同主机之间
    (7)信号:有点难,面试官会不懂

  7. 进程同步:(协调进程之间的先后顺序)
    (1)临界区(临界区是进程的一段代码):某段时间内只允许一个进程使用的资源称为临界资源(比如共享变量)
    临界资源与共享资源的区别:
    临界资源是指某段时间内只允许一个进程使用的资源。(比如打印机)
    共享资源是指某段时间内允许多个进程同时使用的资源。(比如磁盘,公用队列等,可以多个进程同时读取数据,但不能同时修改)
    (2)同步与互斥:
    同步:多个进程因为合作产生的直接制约关系,使得进程有一定的先后执行关系。
    互斥:多个进程在同一时刻只有一个进程能进入临界区。
    (3)信号量:pv操作,一般不问
    (4)管程:使用信号量机制实现的生产者消费者问题需要客户端代码做很多控制,管程把控制的代码独立出来,不仅不容易出错,也使得客户端代码调用更容易。在一个时刻只能有一个进程使用管程。进程在无法继续执行的时候不能一直占用管程,否则其它进程永远不能使用管程。

http 和https:

  1. GET 和 POST 的区别
    ·get 提交的数据会放在 URL 之后,并且请求参数会被完整的保留在浏览器的记录里,由于参数直接暴露在 URL 中,可能会存在安全问题,因此往往用于获取资源信息。而 post 参数放在请求主体中,并且参数不会被保留,相比 get 方法,post 方法更安全,主要用于修改服务器上的资源。
    ·get 请求只支持 URL 编码,post 请求支持多种编码格式。
    ·get 只支持 ASCII 字符格式的参数,而 post 方法没有限制。
    ·get 提交的数据大小有限制(这里所说的限制是针对浏览器而言的),而 post 方法提交的数据没限制
    ·get 方式需要使用 Request.QueryString 来取得变量的值,而 post 方式通·过 Request.Form 来获取。
    ·get 方法产生一个 TCP 数据包,post 方法产生两个(并不是所有的浏览器中都产生两个)。

  2. http和HTTPS的区别:
    HTTP 协议以明文方式发送内容,数据都是未加密的,安全性较差。HTTPS 数据传输过程是加密的,安全性较好。
    HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是 80 端口,后者是 443 端口。
    HTTPS 协议需要到数字认证机构(Certificate Authority, CA)申请证书,一般需要一定的费用。
    HTTP 页面响应比 HTTPS 快,主要因为 HTTP 使用 3 次握手建立连接,客户端和服务器需要握手 3 次,而 HTTPS 除了 TCP 的 3 次握手,还需要经历一个 SSL 协商过程。

  3. 网址输入的过程

① DNS 解析:当用户输入一个网址并按下回车键的时候,浏览器获得一个域名,而在实际通信过程中,我们需要的是一个 IP 地址,因此我们需要先把域名转换成相应 IP 地址。【具体细节参看问题 16,17】

② TCP 连接:浏览器通过 DNS 获取到 Web 服务器真正的 IP 地址后,便向 Web 服务器发起 TCP 连接请求,通过 TCP 三次握手建立好连接后,浏览器便可以将 HTTP 请求数据发送给服务器了。【三次握手放在传输层详细讲解】

③ 发送 HTTP 请求:浏览器向 Web 服务器发起一个 HTTP 请求,HTTP 协议是建立在 TCP 协议之上的应用层协议,其本质是在建立起的TCP连接中,按照HTTP协议标准发送一个索要网页的请求。

④ 处理请求并返回:服务器获取到客户端的 HTTP 请求后,会根据 HTTP 请求中的内容来决定如何获取相应的文件,并将文件发送给浏览器。

⑤ 浏览器渲染:浏览器根据响应开始显示页面,首先解析 HTML 文件构建 DOM 树,然后解析 CSS 文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。

⑥ 断开连接:客户端和服务器通过四次挥手终止 TCP 连接

  1. HTTP 状态码
    服务器返回的 响应报文 中第一行为状态行,包含了状态码以及原因短语,用来告知客户端请求的结果。
    状态码 类别 含义
    1XX Informational(信息性状态码) 接收的请求正在处理
    2XX Success(成功状态码) 请求正常处理完毕
    3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
    4XX Client Error(客户端错误状态码) 服务器无法处理请求
    5XX Server Error(服务器错误状态码) 服务器处理请求出错
  2. Cookie
    是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器之后向同一服务器再次发起请求时被携带上,用于告知服务端两个请求是否来自同一浏览器。
  3. cookie和session
    Cookie 只能存储 ASCII 码字符串,而 Session 则可以存储任何类型的数据,因此在考虑数据复杂性时首选 Session;
    Cookie 存储在浏览器中,容易被恶意查看。如果非要将一些隐私数据存在 Cookie 中,可以将 Cookie 值进行加密,然后在服务器进行解密;
    对于大型网站,如果用户所有的信息都存储在 Session 中,那么开销是非常大的,因此不建议将所有的用户信息都存储到 Session 中。

tcp和udp:

  1. 三次握手
    在这里插入图片描述

首先客户端向服务器发送一个 SYN 包,并等待服务器确认
服务器接收到客户端发来的 SYN 包后,对该包进行确认后结束 LISTEN 阶段,并返回一段 TCP 报文,
客户端接收到发送的 SYN + ACK 包后,明确了从客户端到服务器的数据传输是正常的,从而结束 SYN-SENT 阶段。并返回最后一段报文。
证明双方的接收都没问题。

  1. 四次挥手
    在这里插入图片描述
    首先客户端向服务器发送一段 TCP 报文表明其想要释放 TCP 连接。

服务器接收到客户端请求断开连接的 FIN 报文后,结束 ESTABLISHED 阶段,进入 CLOSE-WAIT 阶段并返回一段 TCP 报文。

服务器端在发出 ACK 确认报文后,服务器端会将遗留的待传数据传送给客户端,待传输完成后即经过 CLOSE-WAIT 阶段,便做好了释放服务器端到客户端的连接准备,再次向客户端发出一段 TCP 报文。

客户端收到从服务器发来的 TCP 报文,确认了服务器已经做好释放连接的准备,于是结束 FIN-WAIT-2 阶段,进入 TIME-WAIT 阶段,并向服务器发送一段报文。

TCP 和 UDP 的区别

UDPTCP
无连接面向连接
不可靠传输,不使用流量控制和拥塞控制可靠传输,使用流量控制和拥塞控制
支持一对一,一对多,多对一和多对多交互通信只能是一对一通信
面向报文面向字节流
首部开销小,仅8字节首部最小20字节,最大60字节
适用于实时应用(IP电话、视频会议、直播等)适用于要求可靠传输的应用,例如文件

MySQL:

  1. 事务:
    事务指的是满足 ACID 特性的一组操作,可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚。

  2. 隔离级别
    ·未提交读(READ UNCOMMITTED)
    事务中的修改,即使没有提交,对其它事务也是可见的。
    ·提交读(READ COMMITTED)
    一个事务只能读取已经提交的事务所做的修改。换句话说,一个事务所做的修改在提交之前对其它事务是不可见的。
    ·可重复读(REPEATABLE READ)
    保证在同一个事务中多次读取同一数据的结果是一样的。
    ·可串行化(SERIALIZABLE)
    强制事务串行执行,这样多个事务互不干扰,不会出现并发一致性问题。该隔离级别需要加锁实现,因为要使用加锁机制保证同一时间只有一个事务执行,也就是保证事务串行执行。

  3. 范式

  4. 第一范式 (1NF)
    属性不可分。

  5. 第二范式 (2NF)
    每个非主属性完全函数依赖于键码。

  6. 第三范式 (3NF)
    非主属性不传递函数依赖于键码。

  7. 索引
    ·底层数据结构:b+树(多叉平衡树+叶子节点的链表存储 )
    ·适用于全键值、键值范围和键前缀查找,其中键前缀查找只适用于最左前缀查找。如果不是按照索引列的顺序进行查找,则无法使用索引。

  8. 常见数据库类型
    innoDB(默认),myisam,memory

比较

事务:InnoDB 是事务型的,可以使用 Commit 和 Rollback 语句。
并发:MyISAM 只支持表级锁,而 InnoDB 还支持行级锁。
外键:InnoDB 支持外键。
备份:InnoDB 支持在线热备份。
崩溃恢复:MyISAM 崩溃后发生损坏的概率比 InnoDB 高很多,而且恢复的速度也更慢。
其它特性:MyISAM 支持压缩表和空间数据索引。

  1. InnoDB 的 B+Tree 索引分为主索引和辅助索引。主索引的叶子节点 data 域记录着完整的数据记录,这种索引方式被称为聚簇索引。因为无法把数据行存放在两个不同的地方,所以一个表只能有一个聚簇索引。
    ·辅助索引的叶子节点的 data 域记录着主键的值,因此在使用辅助索引进行查找时,需要先查找到主键值,然后再到主索引中进行查找。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值