笔试知识点总结
HTML
1. 常用标签
(1)<source>
source元素是HTML5中用于指定多个媒体资源的标签,常用于audio和video元素内部,可以为同一个媒体内容提供多个不同格式的资源文件,浏览器会自动选择第一个可以支持的格式进行播放。这使得我们可以为不同浏览器提供最优的媒体格式支持。
(2)<param>
用于为object或applet元素传递参数
(3)<object>
用于嵌入外部资源(如图片,音频,视频,PDF等)
(4)<picture>
用于为不同的显示/设备场景提供对应的图片资源,可以包含多个图片资源。
CSS
1. 视觉格式化模型
(1)BFC
(2)IFC
(3)Float
(4)Flex
(5) Grid
2. 属性值的计算过程
(1)确定声明值
(2)层叠
- 比较重要性
- 比较特定性
- 比较源代码次序
(3)继承
(4)使用默认值
(5)常用属性
position:static:默认值,普通文档流,不进行偏移。包含块是**最近的祖先元素的content盒relative:相对定位,相对于自身在文档流中的正常位置偏移,但仍然保留原来的位置占位。包含块是自身原来位置构成的矩形框。absolute:绝对定位,完全脱离文档流,寻找第一个不为static的祖先元素,并且祖先元素不是display:contents。则包含块为该祖先元素的padding盒fixed:固定定位,相对于视口定位,随屏幕滚动保持固定位置。大多数情况下,包含块是视口本身。但是在transform,filter,contain,perspective等触发新的定位上下文的祖先元素,则会以他们为包含块。sticky:粘性定位,根据用户滚动位置切换relative和fixed。包含块是最近的滚动容器的块盒祖先元素的padding盒。
display和visibility
visibility:hidden和display:none是CSS中两个常用的隐藏元素的属性,它们有着本质的区别。
A选项正确:使用visibility:hidden时,元素虽然在视觉上不可见,但仍然占据着原来的空间位置。这意味着其他元素的布局不会受到影响,只是该元素变成透明了。
B选项正确:使用display:none时,元素会从文档流中完全移除,不会占据任何空间。这会导致其他元素的位置发生变化,就像这个元素完全不存在一样。
C选项错误:两者是有本质区别的。visibility:hidden只是视觉上的隐藏,保留空间;而display:none则完全移除元素,不保留空间。这种区别会对页面布局产生不同的影响。
D选项错误:visibility:hidden只会触发repaint(重绘),因为元素位置没有改变,不需要重新计算布局。而display:none会同时触发reflow(回流)和repaint(重绘),因为需要重新计算其他元素的位置。
默认值
CSS规范中规定了div元素一些CSS属性的默认值。padding-top和margin-top的默认值确实为0,这是正确答案。
详细分析各选项:
C. padding-top: 正确。div元素的内边距padding-top默认值为0,除非显式设置。
D. margin-top: 正确。div元素的外边距margin-top默认值也是0,这与大多数块级元素的默认样式一致。
其他选项分析:
A. border-top-width: 错误。div元素的border-top-width默认值是medium而不是0。medium通常等价于3px。
B. outline-width: 错误。div元素的outline-width默认值是medium,与border-width类似。
补充说明:
\1. div是块级元素,其盒模型中padding和margin的所有方向(top、right、bottom、left)默认值都是0。
\2. 而border和outline相关的width属性默认都是medium。
\3. 这些默认值可以通过CSS显式设置来改变。
\4. 了解元素的默认样式对于CSS布局和样式重置都很重要。
(6) 通用值
| 值 | 作用简述 | 常见使用场景 |
|---|---|---|
inherit |
显式继承父元素该属性的值(哪怕该属性默认不继承) | 强制继承,比如 border, position |
initial |
恢复属性的初始值(即规范中的默认值) | 重置样式 |
unset |
如果该属性可继承,则等同于 inherit;否则等同于 initial |
通用性最强,常用于组件库重置样式 |
revert |
恢复为用户代理样式表(浏览器默认样式或作者样式表)中的默认样式 | 在你重置过样式后想“撤销”重置 |
好的!CSS 中的通用值(Global values / 通用关键字)是所有属性都可以使用的一些特殊值,用于控制继承、初始化或还原行为。最常见的通用值有以下 4 个:
✅ 一览表:CSS 通用值(Global Values)
| 值 | 作用简述 | 常见使用场景 |
|---|---|---|
inherit |
显式继承父元素该属性的值(哪怕该属性默认不继承) | 强制继承,比如 border, position |
initial |
恢复属性的初始值(即规范中的默认值) | 重置样式 |
unset |
如果该属性可继承,则等同于 inherit;否则等同于 initial |
通用性最强,常用于组件库重置样式 |
revert |
恢复为用户代理样式表(浏览器默认样式或作者样式表)中的默认样式 | 在你重置过样式后想“撤销”重置 |
🔍 逐个详细说明
✅ 1. inherit
- 含义:强制从父元素中继承该属性的值。
- 默认继承的属性:如
color,font,line-height等文本相关的属性会自动继承。 用处:让本来不会继承的属性也继承,例如:
1
2
3
4button {
position: inherit; /* 继承父元素的定位方式 */
border: inherit; /* 继承父元素的边框样式 */
}
✅ 2. initial
- 含义:将属性重置为其规范规定的初始值(default value defined in CSS spec)。
注意:不是浏览器样式、不是父元素的值,是 CSS 标准规定的值。
1
2
3
4p {
color: initial; /* 通常是黑色 */
display: initial; /* 对 p 元素来说是 block */
}
✅ 3. unset
- 含义:
- 如果该属性默认可继承 → 等价于
inherit - 如果该属性默认不可继承 → 等价于
initial
- 如果该属性默认可继承 → 等价于
✅ 优点:最灵活,适合用于组件库或 reset 样式中“全面清空”某个元素的状态。
1
2
3div {
all: unset; /* 清除所有继承和默认样式,非常常用于 reset */
}
✅ 4. revert(需要现代浏览器支持)
- 含义:撤销当前样式,恢复为用户代理(浏览器默认)或作者样式表中的默认样式。
不同于
initial是恢复 CSS 标准值,revert恢复的是浏览器对该元素设置的默认值。1
2
3input {
all: revert; /* 恢复浏览器默认的 input 样式 */
}
✅ 所有值对比小结表格
| 值 | 从父继承 | 设为初始值 | 恢复浏览器默认 | 说明 |
|---|---|---|---|---|
inherit |
✅ | ❌ | ❌ | 强制继承父属性 |
initial |
❌ | ✅ | ❌ | 设置为规范定义的初始值 |
unset |
✅ / ❌ | ✅ / ❌ | ❌ | 可继承属性→继承,否则设为初始值 |
revert |
❌ | ❌ | ✅ | 回退到浏览器或作者默认样式 |
3. 选择器
:nth-child(odd/even/具体数字/递推公式:an+b,从n=0开始)
:nth-of-type(odd/even/具体数字/递推公式:an+b,从n=0开始)
你的用法是正确的!让我详细解释这两个伪类选择器:
:nth-child() 用法
:nth-child() 基于元素在父元素中的位置来选择:
1 | /* 选择奇数位置的元素 */ |
:nth-of-type() 用法
:nth-of-type() 基于相同标签类型在父元素中的位置来选择:
1 | /* 选择奇数位置的p元素 */ |
两者的区别
1 | <div> |
更多用法
负数和复杂表达式:
1 | /* 选择倒数第2个元素 */ |
相关的伪类选择器:
1 | /* 最后一个子元素 */ |
实用示例:
1 | /* 表格斑马纹效果 */ |
这些选择器非常实用,特别是在创建表格样式、列表布局和响应式设计时。
4. 动画
JS
1. 正则表达式
- 尖号(^)匹配字符串的开头位置,例如^A表示匹配以A开头的字符串
- 美元符号($)匹配字符串的结尾位置,例如A$表示匹配以A结尾的字符串
- 反斜杠(\)用于转移特殊字符,使其失去特殊含义成为普通字符,例如要匹配字符”.”需要写成
\. - 问号(?)表示匹配前面的字符0次或1次
- 加号(+)表示匹配前面的字符1次或多次
- 星号(*)表示匹配前面的字符0次或多次
- 中括号
[]表示字符集合,比如[abc]匹配a或b或c中的任意一个 - 花括号
{}表示量词,用来指定前面那个元素(字符,字符集,分组)等重复出现的次数
2. 常用API
(1)数组:
原地修改的:
- push
- pop
- shift
- unshift
- splice
- sort
返回新值的
- map
- concat
(2)字符串
- search(regExp): 匹配成功返回首次匹配索引,否则返回-1
3. 严格模式和非严格模式
| 分类 | 区别描述 | 非严格模式行为 | 严格模式行为 | 示例代码 |
|---|---|---|---|---|
| 1. 变量声明 | 未声明变量直接赋值 | 自动变为全局变量 | 报 ReferenceError |
x = 10; // 非严格:OK 严格:ReferenceError |
2. this 指向 |
函数中默认 this |
指向全局对象 (window) |
undefined |
function f() { console.log(this); }f(); |
| 3. 函数参数 | 允许参数重名 | 允许 | 报 SyntaxError |
function sum(a, a, b) {} |
4. with 语句 |
是否允许使用 with |
允许 | 报 SyntaxError |
with (obj) { console.log(x); } |
| 5. 删除变量 | 是否能删除变量 | 静默失败 | 报 SyntaxError |
var x = 1; delete x; |
6. eval 作用域 |
定义的变量是否泄漏 | 泄漏到外部作用域 | 作用于自身作用域 | eval("var x = 10;"); console.log(x); |
| 7. 八进制字面量 | 0xx 形式是否合法 |
允许(但不推荐) | 报 SyntaxError |
var x = 010; |
| 8. 不可写属性赋值 | 修改只读属性 | 静默失败 | 报 TypeError |
Object.defineProperty(obj, "x", {value: 1, writable: false}); obj.x = 2; |
9. arguments.callee |
可否访问自身引用 | 允许 | 报 TypeError |
function f() { console.log(arguments.callee); } |
| 10. 保留字命名 | 能否使用 ES6 保留字 | 允许 | 报 SyntaxError |
var let = 10; |
| 11. 函数声明位置 | 可以在块级中声明函数 | 有兼容性问题(部分允许) | 报 SyntaxError |
if (true) { function test() {} } |
12. this 绑定 null |
this 传入 null |
自动绑定为全局对象 | 保持为 null |
function f() { console.log(this); } f.call(null); |
| 13. 设置只读属性失败 | 不可写属性赋值 | 静默失败 | 报 TypeError |
const obj = {}; Object.defineProperty(obj, "x", { value: 42, writable: false }); obj.x = 9; |
| 14. 对象字面量中重复属性 | 允许重复键名 | 允许(后面的覆盖前面) | 报 SyntaxError |
var obj = {x: 1, x: 2};(在 ES5 严格模式中非法) |
15. arguments 与参数同步 |
arguments[i] 是否与形参联动更新 |
联动:修改参数会影响 arguments,反之亦然 |
解耦:修改不再同步 | function f(a) { a = 99; console.log(arguments[0]); }f(1); // 非严格:99,严格:1function g(a) { arguments[0] = 77; console.log(a); }g(1); // 非严格:77,严格:1 |
4. 解构赋值
5. 数据类型操作
(1)Symbol

- Symbol的值是唯一的,用作对象属性的标识符
- Symbol值不能与其他类型进行运算
- Symbol属性不会出现在
for...in循环中,但是可以通过Reflect.ownKeys()获取 - Symbol.prototype.toString()可以显式地将Symbol转换为字符串。
(2)隐式转换规则
| 转换类型 | undefined |
null |
|---|---|---|
| Boolean | false | false |
| Number | NaN | 0 |
| String | “undefined” | “null” |
| Object | 抛错(直接访问) | 抛错(直接访问) |
| Object() | {} (空对象) |
{} (空对象) |
布尔值true和undefined在转换为字符串时会转换为"true"和"undefined"字符串。
(3)undefined和null
undefined 和 null 之间的宽松比较会被认为相等(undefined == null 为 true),这是特殊规则。
当 undefined 或 null 与其它非 undefined/null 类型进行宽松比较时,不会做类型转换,而是直接返回 false。
1 |
|
(4)逻辑运算
- JavaScript 中的逻辑运算符返回的是最后一个计算的操作数的值,而不一定是布尔值
- && 运算符优先级高于 ||
- 逻辑运算采用短路运算规则
- 数字1在逻辑运算中被视为真值
(5)数字类型

6. 原型和原型链
(1)继承方式
- 原型链继承
- 构造函数继承
- 组合继承
7. 代理与反射
Reflect.onwKeys(obj)可以获取到symbol属性。Object.keys(obj)和for...in都无法获取。
8. BOM和DOM API
(1)获取dom元素父节点
element.parentNode这是属性,不是方法。
(2)window.history对象
| 方法/属性 | 说明 | 示例代码 |
|---|---|---|
history.back() |
等同于点击浏览器后退按钮,加载历史记录中的上一页。 | history.back(); |
history.forward() |
等同于点击浏览器前进按钮,加载历史记录中的下一页。 | history.forward(); |
history.go(delta) |
加载历史堆栈中相对于当前页面的某个偏移量的页面。delta为整数,负数后退,正数前进,0刷新当前页。 |
history.go(-1); 后退一页history.go(2); 前进两页 |
history.length |
返回历史堆栈中条目总数(包括当前页) | console.log(history.length); |
history.pushState(state, title, url) |
向历史堆栈添加一个新的状态(不会刷新页面),允许修改当前 URL 显示,但不会真的跳转。state是与新历史记录关联的数据对象。 |
history.pushState({page:2}, "title 2", "/page2.html"); |
history.replaceState(state, title, url) |
修改当前历史记录的状态(不会新增记录,也不会刷新页面),修改 URL 及关联数据。 | history.replaceState({page:3}, "title 3", "/page3.html"); |
history.forward()相当于history.go(1)history.back()相当于history.go(-1),forward和back本身都不能传参数
(3)阻止默认行为
event.preventDefault()
(4)触摸事件
| 事件类型 | 说明 |
|---|---|
touchstart |
手指触摸屏幕时触发 |
touchmove |
手指在屏幕上滑动时持续触发 |
touchend |
手指从屏幕移开时触发 |
touchcancel |
系统中断触摸事件时触发(如来电、切换应用) |
(5) 冒泡和捕获
常见的时间都能冒泡,少数不能冒泡。
妈妈不让你浪费
mouseenter,mouseleave,blur,resize,unload,load,focus。
9.执行上下文和this绑定
10.词法环境和闭包
11. Node文件查找顺序
首先查找核心模块(CORE MODULES)
Node.js会优先检查是否是内置的核心模块,如fs、http等。其次查找当前目录下的模块文件(B选项路径)
在当前目录下查找othermodule.js文件。然后查找当前目录的node_modules目录(A选项路径)
在当前目录的node_modules文件夹中查找othermodule模块。最后逐级向上查找node_modules目录(D选项路径)
如果在当前目录没找到,就会往上一级目录查找其node_modules。
12. 事件循环
13. 运算符优先级
+优先于?

14. 常用全局对象
Date
日期字符串如何转为毫秒数

15. Script标签
1 |
|
上述代码在浏览器中运行的输出是下面这样:

在浏览器中,如果抛出未捕获的错误,则会停止当前script标签内的脚本的执行。
其他script脚本不受影响。
常用API
数组
.unshift()方法如果有多个参数,会直接像数组一样加在最前面。比如[1,2,3].unshift(5, 6)的结果是[5, 6, 1, 2, 3]。
计算机网络
cookie
- 如果不给cookie设置过期时间则默认是会话级别,会话结束时过期。
AJAX
XMLHttpRequest

HTTP报文

操作系统
数据结构与算法
设计模式
数据库
编译原理
数字规律
只有美团考这玩意。
思考顺序:
- 相邻项差值
- 差值的差值
- 每个数位求和(平方和)
- 循环模式
- 斐波那契
数学
1. P问题,NP问题,NP-hard问题,NPC问题
| 名称 | 全称 | 定义 | 举例 | 特点 |
|---|---|---|---|---|
| P | Polynomial Time | 在多项式时间内能被确定性图灵机求解的问题。 | 排序、最短路径(Dijkstra)、最大流(Ford-Fulkerson) | 解决和验证都很快。 |
| NP | Non-deterministic Polynomial Time | 在多项式时间内能被非确定性图灵机解决(即猜测答案+快速验证),或者说可在多项式时间内验证的决策问题。 | 旅行商问题(TSP决策版)、数独是否有解、哈密顿回路 | 不一定能快速解决,但能快速验证答案。 |
| NP-hard | NP Hard(困难) | 至少与NP中最难问题一样难。不一定是决策问题,也不一定在NP中。 | TSP求最短路径、国际象棋求解、Halting Problem | 无法验证是否为NP;解决很难、甚至不可判定。 |
| NP-complete(NPC) | NP Complete | 同时满足:① 属于NP,② 比NP中任何问题都至少一样难(NP-hard)。 | SAT(布尔可满足性问题)、3-SAT、哈密顿回路是否存在 | 是NP中最难的问题。若某个NPC问题能在P中解决,则P=NP。 |



