字节面试复盘
字节面试复盘
个人介绍
这一部分个人提前准备,展现技术栈和特点就好。
问题1:项目问题——@MultipartForm 原理解析
@MultipartForm
:用于解析多部分表单数据上传(基于JAX-RS框架)
框架会在接收到请求时检查 Content-Type 头是否为 multipart/form-data。如果是,它会解析请求体中的每个部分,并根据表单数据类(如 FileUploadForm)中的字段注入相应的数据。
问题2:断点续传的实现
断点续传是指在文件传输过程中发生中断后,能够恢复传输,并从上次中断的位置继续传输。
1、记录已经传输的文件位置:在每次传输过程中,记录已经成功传输的文件位置或字节数,以方便下次传输时从该位置开始。
2、传输过程的中断和恢复:在传输过程中,如果发生了中断,需要能够恢复传输,并从上次记录的位置继续传输。
技术选型:
1、RandomAccessFile:Java中的一个类,可以实现对文件的随机访问,适用于断点续传功能的实现。
2、HttpURLConnection:Java中用于处理HTTP请求的类,可以通过设置请求头部信息实现下载文件的断点续传。
1 | import java.io.IOException; |
问题3:JWT的字段3部分
Header(头部)
1 | { |
Payload(负载)
用来存放实际需要传递的数据
Signature(签名)
1 | HMACSHA256( |
问题4:JWT和Session的区别
session
用户输入其登录信息
服务器验证信息是否正确,并创建一个session,然后将其存储在数据库中
服务器为用户生成一个sessionId,将具有sesssionId的Cookie将放置在用户浏览器中
在后续请求中,会根据数据库验证sessionID,如果有效,则接受请求
一旦用户注销应用程序,会话将在客户端和服务器端都被销毁
JWT:
用户输入其登录信息
服务器验证信息是否正确,并返回已签名的token
token储在客户端,例如存在local storage或cookie中
之后的HTTP请求都将token添加到请求头里
服务器解码JWT,并且如果令牌有效,则接受请求
一旦用户注销,令牌将在客户端被销毁,不需要与服务器进行交互一个关键是,令牌是无状态的。后端服务器不需要保存令牌或当前session的记录。
数学题
如果在高速公路上30分钟内到一辆车开过的几率是0.95,那么在10分钟内看到一辆车开过的几率是多少()?
解答:
设10分钟内没有看到一辆车的概率为1-x,30分钟内没有看到一辆车看作连续事件
$$ ( 1 − x ) × ( 1 − x ) × ( 1 − x ) = 1 − 0.95 $$
解:
$$ x=1− \sqrt[3]{1-x}=1−0.368403=0.631596 $$
算法题:栈的出栈、入栈 序列
https://leetcode.cn/problems/validate-stack-sequences/description/
思路: 模拟栈
class Solution {
public boolean validateStackSequences(int[] pushed, int[] popped) {
Deque<Integer> stack = new ArrayDeque<>();
int n = pushed.length;
int j = 0;
for(int i=0 ;i < n ;i++){
stack.push(pushed[i]);
while(!stack.isEmpty() && stack.peek() == popped[j]){
stack.pop();
j++;
}
}
return stack.isEmpty();
}
}```