感觉凉凉 一场体验不太好的面试
罗列一下需要改进的问题:自我介绍时间较短,然后顺序也比较模糊。下次面试开始,先从学历->专业-专业课->开始学习前端->项目经历->实习经历。这样来,获奖情况和成绩在专业课那里提一提。
- 内存页面置换算法有哪些?
- 最佳页面置换算法:只存在于理论,选择未来最久不会使用的页面进行替换。
- 先进先出算法:按照页面进入内存的顺序来替换,简单,缺页率高。
- 最近最久未使用算法:替换掉最长时间未被访问的页面。利用局部性原理,假设近期使用的页面在未来也会被使用。
- 时钟页面置换算法:将页面看做一个环形队列,使用指针跟踪最近使用情况。指针指向的页面如果没有被使用,则被替换;如果被使用,则将其标记为未使用但不替换,移动指针到下一个页面。
- 最不常用算法:根据页面被访问的频率在决定替换掉哪一个页面,访问次数最低的页面将被替换。
- HTTP协议怎么实现
断点续传和文件分块上传?
HTTP协议实现文件断点续传主要依赖于HTTP/1.1对部分内容请求的支持,具体步骤:
- 建立连接:客户端和服务端之间通过TCP或UDP协议建立连接;
- 发送请求:当下载过程中因网络问题或其他原因中断时,客户端可以通过在HTTP请求头中添加
Range字段来请求从特定位置继续下载。例如,Range: bytes=500-表示希望从第500字节开始下载。 - 服务器响应:服务器接受到带有Range请求头的请求后会检查请求的有效性,如果请求的范围有效,服务器将返回状态码
206 Partial Content,并在响应头中包含Content-Range字段,指明返回的数据范围。例如,Content-Range: bytes 500-999/1234表示返回的是文件的第500到999字节,文件总大小为1234字节。 - 数据传输:服务器将指定范围的文件内容发送回客户端。客户端在接收到这些数据后,将其附加到已下载的文件末尾,从而实现断点续传。
- 记录下载进度:为了支持断点续传,客户端通常会记录已成功下载的字节数或块信息,以便下次继续下载时跳过已完成的部分。
HTTP协议实现文件分块上传的过程可以通过以下几个步骤详细描述:
-
客户端准备:
-
在上传之前,客户端需要将待上传的文件分成若干个固定大小的块。通常,客户端会记录每个块的状态(例如已上传或未上传)。
-
发送请求:
-
客户端向服务器发送HTTP请求,通常是使用
POST方法。上传时,客户端在请求头中可以包含一些必要的信息,例如: -
Content-Range: 指定当前上传块的数据范围。 -
Content-Length: 每个块的大小。
示例请求头:
POST /upload HTTP/1.1
Host: example.com
Content-Range: bytes 0-499/1234
Content-Length: 500
-
服务器处理:
-
服务器接收到请求后,将根据
Content-Range信息来确定当前上传的块。服务器保存已上传数据的状态,并在接收完一个块后返回响应,通常会包括: -
状态码:如
200 OK或206 Partial Content表示成功。 -
Content-Range: 返回已接收的范围信息,确认已成功接收的字节数。 -
示例响应头:
HTTP/1.1 206 Partial Content
Content-Range: bytes 0-499/1234
-
继续上传
- 一旦一个块上传完成,客户端便可以继续上传下一个块。此过程将重复进行,直到所有块都被成功上传。
-
上传完成
- 当所有块上传完毕后,客户端可向服务器发送一个完成通知请求,以告知服务器文件上传已经结束。服务器则可以对所有已上传的块进行合并,形成完整的文件。
- webRTC服务详细介绍?
这是一个围绕着客户经理和商户远程音视频的业务,那么我做的是根据行内的远程音视频SDK,配合客户端app和后台搭建一个稳定且加密的远程通信(我相当于客户经理的节点)。
搭建过程主要是:
- 收集和索要pc端的麦克和摄像头权限
- 分别采集音视频
- 基于Promise定义错误信息检测、提示和重新创建本地音视频的轨道对象
- 后台创建频道,加入频道并发布收集到的音视频数据,并且对媒体流进行加密(256 位 AES 加密,GCM 模式,加盐。)
- 客户端订阅即可进行通话。
- 根据通话信息的变化,在页面中创建通话窗口界面并显示巡检流程的提示信息。每10s钟会进行音频的截图,上传到指定的服务器,通话整体音视频也会存储在本地,在巡检反馈页面进行上传。
- 详细讲讲制作富文本编辑器会遇到的技术难点?
- 使用浏览器原生的contentEditable属性,可以直接在一个div或span标签上启用富文本编辑功能。
- 降低DOM操作频率,通过控制组件的状态来控制内容,依赖React自身的虚拟DOM技术和React.memo或React.pureComponent可以减少不必要的DOM更新;
- 对于用户的键盘输入和复制粘贴等用户输入事件,使用节流控制事件的触发频率,减轻压力;
- 在进行复杂的UI更新时,可以使用requestAnimationFrame来优化渲染批次,只需要传入一个回调函数,该函数在下次浏览器重绘之前被调用。这意味着所有的 DOM 操作和动画更新都可以在重绘之前集中处理,从而减少了重绘次数,提高了性能。
- 对于图片等外部资源,使用异步加载的方式,确保不会阻塞主线程;
算法题:验证IP地址和一道字符串的DP
早知道复习一下正则了hhh 自己写遍历被恶心坏了。
class Solution {
public:
string validIPAddress(string queryIP) {
regex ipv4("(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])");
regex ipv6("(([0-9a-fA-F]{1,4}):){7}([0-9a-fA-F]{1,4})");
if (regex_match(queryIP, ipv4))
return "IPv4";
else if (regex_match(queryIP, ipv6))
return "IPv6";
else
return "Neither";
}
};