字节一面
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的名称及相对应的值,对于认证Cookie,Value值包括Web服务器所提供的访问令牌.
(2)Expires属性:设置Cookie的生存期。有两种存储类型的Cookie:会话性与持久性。Expires属性缺省时,为会话性Cookie,仅保存在客户端内存中,并在用户关闭浏览器时失效;持久性Cookie会保存在用户的硬盘中,直至生存期到或用户直接在网页中单击“注销”等按钮结束会话时才会失效.
(3)Path属性:定义了Web站点上可以访问该Cookie的目录.
(4)Domain属性:指定了可以访问该 Cookie 的 Web 站点或域。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.树处理排序更有利
创建索引的规则和考虑?
优先创建在外连接、where、order字段上
选择选择性高的字段
优先选择小字段,数字高于字符串,比较时消耗更小
不要建立太多索引
索引列不要有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的区别?
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,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-增加了大致答案,如有问题还请指教。