选择题 1:

以下哪些是解决哈希冲突的手段?
A. 拉链
B. 开放地址
C. 再散列
D. 滑动窗口

答:ABC 数据结构。

哈希冲突是什么?

当需要将一个值存入哈希表时,其哈希计算的位置已经有了值,不能直接存入,这就是哈希冲突。

拉链法: 在冲突的存入位置创建单链表,在链表中存入值。

开放地址法:既然对应位置有值了,就继续往下探测空的位置。

再散列:既然当前哈希计算的位置有了值,就再次计算,直到位置不冲突。

选择题 2:

建立 TLS1.2 连接需要几次握手?
A. 3
B. 4
C. 6
D. 7

答 D (TCP3次+TLS4次)

参考资料

3.3 HTTPS RSA 握手解析 | 小林coding (xiaolincoding.com)

选择题3

以下哪些是 CSS 块级元素的特性?
A. 宽度默认由其中的内容决定
B. 高度默认由其中的内容决定
C. 可以被分拆到多行
D. 可以通过 height 属性指定高度

答:BD CSS常识 可以通过下面这段对比效果感受一下,

行内元素的宽度由内容决定,可以被分拆到多行,CSS指定宽度高度无效

块级元素的默认宽度就是占满整个空间,而高度默认由内容决定,可以通过CSS指定宽度高度

<span style="background-color: #f8888">行内元素</span>
<div style="background-color: #bbb">块级元素</div>
<span style="background-color: #f8888;width: 200px;height: 100px;">行内元素</span>
<div style="background-color: #bbb;width: 200px;height: 100px;">块级元素</div>

选择题 4:

以下关于跨域说法错误的是?
A. http://example.com/a.html  https://example.com/b.html 是相同的域名,属于同源
B. 跨域资源共享规范中规定了除了 GET 之外的 HTTP 请求,或者搭配某些 MINE 类型的 POST 请求,浏览器都需要先发一个 OPTIONS 请求。
C. CSS 中通过 @font-face 使用字体也会有跨域问题
D. Cookie,LocalStorage 和 IndexedDB 都会受到同源策略的限制

答 A 同源策略

A 协议/端口/主机 B OPTIONS是跨域检测 C 跨域资源都会有问题 D Cookie、LocalStorage本地存储不能跨域共享,IndexedDB遵循同源策略,不允许跨域访问。

选择题5

MySQL 数据库中是通过以下哪种日志实现 MVCC 机制的?
A. Undo Log
B. Redo Log
C. Binary Log
D. Slow Log

答 A

MVCC是什么?

这是InnoDB为了解决多事务并发执行发生读写、写读、读读时产生线程冲突问题。实现原理主要是依靠undo_log、生成版本链、read_view,让事务并发执行变为向不同快照版本的查询,使得并发执行不会互相干扰。

参考资料:

一文详解脏读、不可重复读、幻读 (qq.com)

选择题 6:

关于排序算法以下结论正确的是?
A. 归并排序任何情况下都能保持时间复杂度为 O(n*log n)
B. 插入排序时间复杂度为 O(n*n),所以在任何情况下都比快速排序慢
C. 快速排序的最坏情况下的时间复杂度为 O(n*n)
D. 希尔排序任何情况下都比插入排序更快

答 : A C 复杂度有点忘 这里记个时空表吧

/ 时间最好 时间最坏 时间平均 辅助存储 稳定性 复杂性
直接插入 O(N) O(N^2) O(N^2) O(1) 稳定 简单
希尔排序 O(N) O(N^2) O(N^1.3) O(1) 不稳定 复杂
直接选择 O(N) O(N^2) O(N^2) O(1) 不稳定 简单
堆排序 O(Nlog2N) O(Nlog2N) O(Nlog2N) O(1) 不稳定 复杂
冒泡排序 O(N) O(N^2) O(N^2) O(1) 稳定 简单
快速排序 O(Nlog2N) O(N^2) O(Nlog2N) O(Nlog2N) 不稳定 复杂
归并排序 O(Nlog2N) O(Nlog2N) O(Nlog2N) O(N) 稳定 复杂
基数排序 O(d(r+N)) O(d(r+N)) O(d(r+N)) O(r+N) 稳定 复杂

选择题7

下列哪些可以实现浏览器存储数据?
A. cookie
B. localStorage
C. session
D. sessionStorage

答: ABD

这里问的是在浏览器上存储数据,也就是哪些选项是在本地存储

cookie:很明显是本地存储,服务端发送cookie给到客户端,客户端携带cookie进行请求,服务端效验cookie是否有效。

localStorage: 顾名思义,就是本地存储,而且这是客户端的API,生命周期永久,客户端根据这项存储持久化UI,例如这篇博客的暗色模式设置,设置一次以后,下次再打开就是默认为暗色。

session: 上面说的服务端效验cookie,其实就是在效验cookie中包含的session,所以它虽然也是在本地存储,但却是存储在cookie中的一小段,并没有作为主体存储在客户端上。

sessionStorage: 和loaclStorage一样,都是客户端的API,但是生命周期只有当前页面(会话),当客户端关闭(关闭标签页)就会被清除。

选择题8

对以下代码说法正确的是
let arr = [1,2,3,4,5];
let arr2 = [1, , 3];
A. 执行 arr.length = 3此时数组为 [1,2,3]
B. 执行 arr[10] = 11此时 arr.length  6
C. 执行 delete arr[2]此时 arr.length  4数组为 [1,2,4,5]
D. arr2.length 的长度为 2

答:A

这里一堆迷惑性代码…. 还是稍微分析一下,

A. length在其他语言中显然是not write的属性,但在奇葩的js确实可以。甚至可以用arr.length=0直接清空数组。

B. arr[10]=11, 此时length是按定义10的,所以length=11

C. delete是js的操作符,相当于手动GC吧,这里delete arr[2]并没有把arr重置,只是删除了指向值。所以长度是没有变的,应该是[1,2, , 4,5]。

D.很明显不是

选择题9

以下哪些是 RDBMS 跟常见的对象存储系统的不同点?
A. 数据库支持事务
B. 数据库向用户暴露 put/get 接口
C. RDBMS 一般存储结构化数据
D. 数据库里的数据不能修改,只能删除后重新写入

答:AC

主要考证存储系统差异,PUT/GET,数据不能修改是NOSQL、Elasticsearch这类非结构化系统的特征,和RDBMS无关。

选择题10

常见的存储系统 IO 性能优化方式有哪些?
A. 尽可能多设计随机读写逻辑
B. 预读
C. 减少 IO 路径上的内存拷贝
D. batch 写入

答:BCD

从应用角度,目前业界有四种基本的I/O优化策略:

避免从存储设备上IO。最好的选择是完全避免或尽可能减少存储介质访问频率。这可以通过文件内存缓存来实现。预读擅长于将小的读请求转换为大的读请求,这有效地减少了存储介质访问的数量,从而降低了高昂的查找成本。具体的例子是众所周知的Linux VFS(虚拟文件系统)挂载选项noatime和relatime,用于消除由mtime更新触发的不必要的向存储设备的写操作。

顺序化。顺序访问能支持顺序预读并最大化磁盘性能利用率。对于并发顺序访问,预读在将交错的小I/O聚合为大I/O方面起着至关重要的作用。对于非顺序访问,通过使用智能磁盘布局管理、通知式预读、I/O排队和调度等技术,将磁盘寻址延迟最小化。举几个通过顺序化进行性能优化的例子:SCSI磁盘的TCQ(标记命令队列)和SATA磁盘的NCQ(本机命令队列);ext4/xfs的延迟分配和预分配;xfs中的回写集群等。

异步化。异步访问通过流水线化处理器和磁盘操作,隐藏应用程序的I/O延迟的方式来提高I/O效率。AIO、非阻塞I/O、回写和预读是异步I/O的常用工具。

并行化。聚合多个磁盘的容量和带宽可提升整体IO性能已经是分布式存储的共识。在传统的RAID层之外,以zfs和btrfs为例的新兴文件系统可以自己管理大型磁盘池。另一方面,在SSD内部使用了设备级并发处理。例如,英特尔在其SATA固态硬盘中开辟了10个并行的NAND闪存通道,可提供高达500MB/s的读取带宽和50000以上的 IOPS。并发I/O请求和并行数据传输是上述并行系统的I/O吞吐量的关键。主动预读在这个领域中扮演着重要的角色:它们通常需要大型的异步预读I/O来填充并行数据通道。

参考:

存储性能加速引擎之预读 - 腾讯云开发者社区-腾讯云 (tencent.com)

选择题10

在 css 选择器当中,优先级排序正确的是?
A. id选择器>标签选择器>类选择器
B. 标签选择器>类选择器>id选择器
C. 类选择器>标签选择器>id选择器
D. id选择器>类选择器>标签选择器

答:D

按照我对HTML的理解,一直遵循一个原则:越具体的样式声明,反馈在页面上的优先级越高

选择题11

如以下代码所示,给 body 绑定两个事件后,
调用 document.body.click() 输出的结果是?
document.body.addEventListener('click', () => {
Promise.resolve().then(() => console.log(1))
console.log(2);
}, false);
document.body.addEventListener('click', () => {
Promise.resolve().then(() => console.log(3))
console.log(4);
}, false);
A. 2, 4, 1, 3
B. 2, 1, 4, 3
C. 1, 2, 3, 4
D. 1, 3, 2, 4

答:A

这是俩个异步方法,所以先后执行顺序是 2->4->异步输出1->异步输出3

选择题12

关于 MD5 以下哪些说法是正确的?
A. MD5 可以用于加密密码
B. MD5 不可逆
C. 对于不同的输入, MD5 一定输出不一样的结果
D. 对于不同长度的输入,MD5 一定输出相同长度的结果

答: BD

MD5一直有个误区,由于经常运用于登录效验,虽然不可逆但MD5是哈希碰撞里风险较高的,并不安全,其次算法加密必须要有对应的解密算法,而md5是信息摘要算法,所以并不能称为加密算法,