0. 为什么写这篇
- 面试爱考
- 自己可能知道那个概念是怎么一回事,但让我用术语描述,我就开始说外行话了
所以不定期更新,让自己的所掌握的概念都能对应到术语。
1. CSS
1.1 BFC
全称为Block Formatting Context,即块格式化上下文,是块级盒子布局发生的区域。以下情况会触发BFC:
<html>- 值不为
none的float元素 - 绝对定位元素
- 行内块元素
overflow不为visible的块元素flex元素grid元素
2. JS
待更新
3. Vue
待更新
4. React
待更新
5. 数据结构与算法
5.1 常用排序算法及时间复杂度
| 算法 | 最差情况 | 平均情况 | 是否稳定 | 空间复杂度 |
|---|---|---|---|---|
| 冒泡 | O(n**2) | O(n**2) | 是 | O(1) |
| 选择 | O(n**2) | O(n**2) | 否 | O(1) |
| 插入 | O(n**2) | O(n**2) | 是 | O(1) |
| 快排 | O(n*log n) | O(n**2) | 否 | O(n*log n) |
| 堆 | O(n*log n) | O(n*log n) | 否 | O(1) |
| 计数 | O(n) | O(n) | 是 | O(n) |
5.1.1 快排代码实现
由于我个人极力反对用JavaScript写算法,所以一般情况下写算法都是拿Python或者C++实现。不过考虑到我的读者大多是前端程序员,所以快排给出Python和JavaScript两版本。
#!/usr/bin/python3
# coding=utf-8
def quick_sort(arr):
if not arr: # 判空很有必要
return arr
# 选中靶点
pivot = arr[0]
# 构建两个数组left和right。这次直接用Python语法糖写
# left:用于存放比pivot小或等于的
# right: left不要的都要
left = [num for num in arr[1::] if num <= pivot]
right = [num for num in arr[1::] if num > pivot]
return quick_sort(left) + [pivot] + quick_sort(right)
// JS版本
function quicksort(arr) {
if(!arr.length)
return arr;
let pivot = arr[0];
let left = [], right = [];
for(let i = 1; i < arr.legnth; ++i)
arr[i] <= pivot ? left.push(arr[i]) : right.push(arr[i]);
return quicksort(left)
.concat([pivot])
.concat(quicksort(right));
}
5.2 链表相关题目
5.2.1 合并两个有序链表
#!/usr/bin/python3
# coding=utf-8
from sys import maxsize as MAX
class ListNode:
def __init__(self, val = 0):
self.value = val
self.next = None
def combineTwoLinks(link1, link2):
'''
:param link1: ListNode
:param link2: ListNode
:return: ListNode
'''
# 判空
if not link1:
return link2
if not link2:
return link1
# 构建结果链表
res = ListNode(MAX)
tmp = res # 用于添加节点
while link1 and link2:
if link1.value <= link2.value:
tmp.next = link1
link1 = link1.next
else:
tmp.next = link2
link2 = link2.next
tmp = tmp.next
if link1:
tmp.next = link1
elif link2:
tmp.next = link2
return res.next