面试常用题目分类
计算机网络http1与http2的区别?http状态码在浏览器输入一个网址的请求过程三次握手与四次挥手常见的网络安全socket相关RESTFUL APIRPC数据库原理什么是事务?事务的特性事务的隔离级别什么情况下会发生死锁,死锁的原因及解决方法索引的原理,联合索引最左匹配原则原因数据库引擎原理慢查询优化mysql聚簇索引回表查询分库分表索引未命中的情...
·
详情参考:https://github.com/BigFishhhh/GetOffer
计算机网络
- http1与http2的区别?
多路复用、队头阻塞
HTTP/1.1相比HTTP/1.0性能上的改进:
使用TCP长连接的方式改善了HTTP/1.0短连接造成性能开销
支持管道(pipeline)网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间
HTTP/1.1 自身的性能瓶颈:
请求/响应头部(Header)未经压缩就发送,首部信息越多延迟越大。只能压缩Body的部分
发送冗长的首部。每次互相发送相同的首部造成的浪费较多
服务器是按请求的顺序响应的,如果服务器响应慢,会招致客户端一直请求不到数据,也就是队头阻塞
没有请求优先级控制
请求只能从客户端开始,服务器只能被动响应
HTTP/2相比HTTP/1.1性能上的改进:
HTTP/2会压缩头(Header),如果你同时发送多个请求,他们的头是一样的或者是相似的,那么协议会帮你消除重复的部分。
HTTP/2不再像HTTP/1.1里的纯文本的报文,而是全面采用了二进制格式。头信息和数据体都是二进制,并且统称为帧(frame):头信息帧和数据帧。
HTTP/2的数据包不是按顺序发送的,同一个连接里面连续的数据包,可能属于不同的回应。客户端还可以指定数据流的优先级。
HTTP/2的连接可以并发多个请求(多路复用),而不用按照顺序一一对应。移除了HTTP/1.1中的串行请求,不需要排队等待,不会再出现「队头阻塞」问题。
比如:在一个TCP连接里,服务器收到了客户端A和B的两个请求,如果发现A处理过程非常耗时,于是就回应A请求已经处理好的部分,接着回应B请求,完成后,再回应A请求剩下的部分。
服务器推送,HTTP/2在一定程度上改善了传统的「请求-应答」工作模式,服务不再是被动地响应,也可以主动向客户端发送消息。
比如:在浏览器刚请求HTML的时候,就提前把可能用到的JS、CSS文件等静态资源主动发给客户端,减少延时的等待,也就是服务器推送(Server Push,也叫Cache Push)
TTP/2有哪些缺陷?HTTP/3做了哪些优化?
HTTP/2主要的问题在于:多个HTTP请求在复用一个TCP连接,下层的TCP协议是不知道有多少个HTTP请求。所以一旦发生了丢包现象,就会触发TCP的重传机制,这样在一个TCP连接中的所有的HTTP请求都必须等待这个丢了包被重传回来。(区别:HTTP/1.1 的管道传输中,如果有一个请求阻塞,那么队列请求也统统被阻塞住了)
HTTP/3 把HTTP下层的TCP协议改成了UDP
- http状态码
1××
1××类状态码属于提示信息,是协议处理中的一种中间状态,实际用到的比较少。
2××
2××类状态码表示服务器成功处理了客户端的请求,也就是我们最愿意看到的状态。
「200 OK」是最常见的成功状态码,表示一切正常。如果是非HEAD请求,服务器返回的响应头都会有body数据。
「204 No Content」也是常见的成功状态码,与200OK基本相同,但是响应头没有body数据。
「206 Partial Content」是应用于HTTP分块下载或断电续传,表示响应返回的body数据并不是资源的全部,而是其中的一部分,也是服务器处理成功的状态。
3××
3××类状态状态码表示客户端请求的资源发生了变动,需要客户端用新的URL重新发送请求获取资源,也就是重定向。
「301 Moved Permanently」表示永久重定向,说明请求的资源已经不存在了,需改用新的URL再次访问。
「302 Moved Temporarily」表示临时重定向,说明请求的资源还在,但暂时需要用另一个URL来访问。
301和302都会在响应头里面使用字段Location,指明后续需要跳转的URL,浏览器会自动重定向新的URL.
「304 Not Modified」不具有跳转的含义,表示资源未修改,重定向已存在的缓冲文件,也称缓存重定向,用于缓存控制。
4××
4××类状态码表示客户端发送的报文有误,服务器无法处理。
「400 Bad Request」表示客户端请求的报文有错误,但只是个笼统的错误。
「403 Forbidden」表示服务器禁止访问资源,并不是客户端的请求错误。
「404 Not Found」表示请求的资源在服务器器上不存在或未找到,所以无法提供给客户端。
5××
5××类状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务器端的错误码。
「500 Internal Server Error」与400类型,是个笼统通用的错误码,服务器发生了什么错误,我们并不知道。
「501 Not Implemented」表示客户端请求的功能还不支持,类似“即将开业,敬请期待”的意思。
「502 Bad Gateway」通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。
「503 Service Unavailabe」表示服务器当前很忙,暂时无法响应服务器,类似“网络服务很忙,请稍后重试”的意思。
- 在浏览器输入一个网址的请求过程
- 三次握手与四次挥手
- 常见的网络安全
- socket相关
- RESTFUL API
以资源为基础 :资源可以是一个图片、音乐、一个XML格式、HTML格式或者JSON格式等网络上的一个实体,除了一些二进制的资源外普通的文本资源更多以JSON为载体、面向用户的一组数据(通常从数据库中查询而得到)。
统一接口: 对资源的操作包括获取、创建、修改和删除,这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。换言而知,使用RESTful风格的接口但从接口上你可能只能定位其资源,但是无法知晓它具体进行了什么操作,需要具体了解其发生了什么操作动作要从其HTTP请求方法类型上进行判断。具体的HTTP方法和方法含义如下:
GET(SELECT):从服务器取出资源(一项或多项)。
POST(CREATE):在服务器新建一个资源。
PUT(UPDATE):在服务器更新资源(客户端提供完整资源数据)。
PATCH(UPDATE):在服务器更新资源(客户端提供需要修改的资源数据)。
DELETE(DELETE):从服务器删除资源。
- RPC
通信协议、序列化协议
数据库原理
- 什么是事务?事务的特性
- 事务的隔离级别
- 什么情况下会发生死锁,死锁的原因及解决方法
- 索引的原理,联合索引最左匹配原则原因
- 数据库引擎原理
- 慢查询优化
- mysql聚簇索引
- 回表查询
- 分库分表
- 索引未命中的情况
- 使用pg的好处
- 乐观锁和悲观锁
- explain查询语句时file sort,temp file等等是什么意思
数据结构和算法
排序
- 插入排序实现及复杂度
- 冒泡排序及复杂度
链表
- 链表是否有环,并找出环入口
- 字符串中寻找只出现一次的第一个字符
- 反转列表,反转m-n部分
栈、队列和堆
- 两个队列实现栈的功能(两个栈实现队列的功能)
二叉树和二叉查找树
- 二叉树深度遍历(前中后序),(非递归),广度遍历
- 二叉树之字形打印
- 二叉查找树第k小的节点
- 如何判断一个二叉树是不是平衡搜索树
二分查找
递归、回溯和分治
- 台阶问题
哈希表和字符串
1.字符串不含重复字符的最长字串
动态规划
贪心算法
- 硬币
- 强盗
- 糖果
设计模式
- 状态模式
- 单例模式
- 观察者模式
- 代理模式
- 工厂模式
- 装饰器模式
操作系统
- 线程的状态
常用组件
Redis
-
redis的整体架构
-
redis常见的存储结构
-
redis常用用途
-
有序集合(zset)的使用及底层结构
-
redis处理快的原因
-
采用单进程的原因
-
redis备份机制
-
redis过期策略
-
redis的发布订阅
-
哨兵如何选主
-
redis一致性如何保证
Rabbitmq
Nginx
- 正向代理和反向代理区别
- 配置文件有哪些模块
Kafka
- 是否会丢数据,如何保证数据安全
Zookeeper
- 选举机制
ElasticSearch
- 实现原理
- 分词
Tomcat
Python基础
- GIL以及python的多线程是否有必要
- 装饰器、带参数的装饰器、类装饰器的实现
- 生成器和迭代器的区别及实现
- 协程的理解及实现
- 浅拷贝及与深拷贝的区别
- 垃圾回收
- python和java的区别
- 单例模式的实现方式
Java基础
- 乐观锁与悲观锁
- JVM内存模型
- 垃圾回收
- ConcurrentHashMap和普通的HashMap有何区别,ConcurrentHashMap如何实现线程安全的
- 类加载机制
web框架
Flask
- flask有哪些组件
- flask上下文原理
- flask优缺点
Spring
更多推荐
已为社区贡献1条内容
所有评论(0)