【面试】前端名词解释

261 阅读2分钟

0. 为什么写这篇

  • 面试爱考
  • 自己可能知道那个概念是怎么一回事,但让我用术语描述,我就开始说外行话了

所以不定期更新,让自己的所掌握的概念都能对应到术语。

1. CSS

1.1 BFC

全称为Block Formatting Context,即块格式化上下文,是块级盒子布局发生的区域。以下情况会触发BFC:

  • <html>
  • 值不为nonefloat元素
  • 绝对定位元素
  • 行内块元素
  • 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

References

  1. 块格式化上下文 - Web 开发者指南 | MDN (mozilla.org)
  2. 10 分钟理解 BFC 原理 - 知乎 (zhihu.com)