字节一面-分享(增加部分答案)

IT知识
346
0
0
2022-04-11

字节一面

HTTP

http请求状态码:201、403、301、302?

101 - 切换协议,如升级为websocker连接

201 - 已创建,成功请求并创建了新的资源

202 - 已接受,但未处理完成

301 - 永久移动,请求的资源已被永久移动到新URI,返回信息包含新URI,浏览器会自动重定向到新URI

302 - 暂时移动,请求的资源临时被移动,客户端应该继续使用原URI

403 - 服务器拒绝该请求

401 - 无权限

408 - 请求超时

502 - 无效响应

503 - 系统超载,无法处理

504 - 网关超时

505 - http协议版本不支持

| 1** | 信息,服务器收到请求,需要请求者继续执行操作 |

| 2** | 成功,操作被成功接收并处理 |

| 3** | 重定向,需要进一步的操作以完成请求 |

| 4** | 客户端错误,请求包含语法错误或无法完成请求 |

| 5** | 服务器错误,服务器在处理请求的过程中发生了错误 |

来自 <<https://www.runoob.com/http/http-status-codes.html>>*

post和put得区别?

PUT POST 幂等 非幂等 多次请求,结果不变 多次请求,结果不同 更新指定资源 创建指定资源 由客户端决定资源URI 由服务器决定资源URI 响应结果为新数据具体信息 返回抽象结果,如需校验需要通过get重新获取

参考连接:www.guru99.com/put-vs-post.html#:~....

keep-alive得作用?

Keep-Alive 是一个通用消息头,允许消息发送者暗示连接的状态,还可以用来设置超时时长和最大请求数。

参数:

timeout:指定了一个空闲连接需要保持打开状态的最小时长(以秒为单位)。需要注意的是,如果没有在传输层设置 keep-alive TCP message 的话,大于 TCP 层面的超时设置会被忽略。

• max:在连接关闭之前,在此连接可以发送的请求的最大值。在非管道连接中,除了 0 以外,这个值是被忽略的,因为需要在紧跟着的响应中发送新一次的请求。HTTP 管道连接则可以用它来限制管道的使用。

来自 <https://note.wyzda.com/cf92d3941eec1edf5be4f9c12aeccfa8>

cookie作用域?

(1)Name/Value:设置Cookie的名称及相对应的值,对于认证CookieValue值包括Web服务器所提供的访问令牌.

(2)Expires属性:设置Cookie的生存期。有两种存储类型的Cookie:会话性与持久性。Expires属性缺省时,为会话性Cookie,仅保存在客户端内存中,并在用户关闭浏览器时失效;持久性Cookie会保存在用户的硬盘中,直至生存期到或用户直接在网页中单击“注销”等按钮结束会话时才会失效.

(3)Path属性:定义了Web站点上可以访问该Cookie的目录.

(4)Domain属性:指定了可以访问该 CookieWeb 站点或域。Cookie 机制并未遵循严格的同源策略,允许一个子域可以设置或获取其父域的 Cookie。当需要实现单点登录方案时,Cookie 的上述特性非常有用,然而也增加了 Cookie受攻击的危险,比如攻击者可以借此发动会话定置攻击。因而,浏览器禁止在 Domain 属性中设置.org、.com 等通用顶级域名、以及在国家及地区顶级域下注册的二级域名,以减小攻击发生的范围.

(5)Secure属性:指定是否使用HTTPS安全协议发送Cookie。使用HTTPS安全协议,可以保护Cookie在浏览器和Web服务器间的传输过程中不被窃取和篡改。该方法也可用于Web站点的身份鉴别,即在HTTPS的连接建立阶段,浏览器会检查Web网站的SSL证书的有效性。但是基于兼容性的原因(比如有些网站使用自签署的证书)在检测到SSL证书无效时,浏览器并不会立即终止用户的连接请求,而是显示安全风险信息,用户仍可以选择继续访问该站点。由于许多用户缺乏安全意识,因而仍可能连接到Pharming攻击所伪造的网站.

(6)HTTPOnly 属性 :用于防止客户端脚本通过document.cookie属性访问Cookie,有助于保护Cookie不被跨站脚本攻击窃取或篡改。但是,HTTPOnly的应用仍存在局限性,一些浏览器可以阻止客户端脚本对Cookie的读操作,但允许写操作;此外大多数浏览器仍允许通过XMLHTTP对象读取HTTP响应中的Set-Cookie头.

来自 <https://baike.baidu.com/item/cookie/1119?fr=aladdin>

cookie和session的作用和区别?

Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;

Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。

来自 <https://www.zhihu.com/question/19786827>

分布式session?

1.粘性session共享机制:

session存储在服务器中,通过redis或者memcached备份,如果服务器挂掉,通过session id从备份中获取

2.非粘性session共享

服务器本身不存储session,读写都通过redis或者memcached进行

https://www.cnblogs.com/daofaziran/p/10933221.html

3.客户端cookie存储session数据(不安全,容量小)

4.JWT实现

包含三部分 - 标头.有效何在.签名

https://zhuanlan.zhihu.com/p/86937325

http长连接如何确认数据接受完毕?

content-length确定报文长度

数据库相关

索引为什么使用B+树?

1.降低树的高度,减少读盘次数

2.叶子节点存储数据通过双向链表关联方便范围查找

3.减少中间节点大小,内存页可获取更多索引信息

4.树处理排序更有利

创建索引的规则和考虑?

优先创建在外连接、whereorder字段上

选择选择性高的字段

优先选择小字段,数字高于字符串,比较时消耗更小

不要建立太多索引

索引列不要有null

联合索引?

最左原则

当只获取联合索引信息可不回表

explain的字段意义?

id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra

概要描述:

id:选择标识符

select_type:表示查询的类型。

table:输出结果集的表

partitions:匹配的分区

type:表示表的连接类型

possible_keys:表示查询时,可能使用的索引

key:表示实际使用的索引(这个侧重问了)

key_len:索引字段的长度

ref:列与索引的比较

rows:扫描出的行数(估算的行数)

filtered:按表条件过滤的行百分比(这个侧重问了)

Extra:执行情况的描述和说明

来自 <https://www.cnblogs.com/tufujie/p/9413852.html>

数据库ACID?

1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。

2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。

3、隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。

4、持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

隔离级别?

MySQL事务隔离级别

事务隔离级别 是否会产生脏读 是否会产生不可重复读 是否会产生幻读 读未提交(read-uncommitted) 是 是 是 不可重复读(read-committed) 否 是 是 可重复读(repeatable-read) 否 否 是 串行化(serializable) 否 否 否

可重复读实现原理?

通过数据多版本控制实现,根据隔离级别获取对应版本数据

https://www.cnblogs.com/lmj612/p/10598971.html

redis

redis基本类型?

String,List,Set,Hash,SortSet

sortSetes实现方式

数量小于512且为数字时为有序数组

其他情况为跳表

TCP

tcp和udp的区别?

1TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

2TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付

3TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的

UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)

4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

5TCP首部开销20字节;UDP的首部开销小,只有8个字节

6TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

来自 <https://www.cnblogs.com/williamjie/p/9390164.html>

tcp如何确保消息送达?

1.校验和

2.请求序号和ack

3.超时重传

堵塞避免?

1.慢启动 - 初始发送cwnd为1,收到ack则加cwnd++,过一个rtt,则cwnd = cwnd*2,到达sshthresh,进入拥塞避免

2.拥塞避免 - 收到一个ack,则cwnd=cwnd+1/cwnd,每过一个rtt,则cwnd++

3.快重传 - ack超时时,cwnd = cwnd /2,sshthresh = cwnd,进入快恢复

4.快速恢复 - cwnd = sshthresh + 3 * MSS (3的意思是确认有3个数据包被收到了)

如果再收到 duplicated Acks,那么cwnd = cwnd +1

如果收到了新的Ack,那么,cwnd = sshthresh ,进入拥塞避免

https://www.jianshu.com/p/42dbcd39c3e7

算法

单向链表k组反转?

https://leetcode-cn.com/problems/reverse-nodes-in-k-group/

golang

gc原理?

三色标记法

gorounite使用完是否会销毁,销毁流程?

堆栈小于2k的gorounite会重用,大于2k的销毁

https://medium.com/a-journey-with-go/go-how-does-go-recycle-goroutines-f047a79ab352

还是需要加强基础学习,加油!

2021-04-30-增加了大致答案,如有问题还请指教。