返回

面试官的“套路”:HTML/CSS/Javascript/ES面试题深度剖析

前端

前端开发面试:HTML/CSS/JavaScript/ES 知识点详解

作为一名即将参加春招的前端开发工程师,精通 HTML/CSS/JavaScript/ES 无疑是面试中至关重要的。这些看似简单的基础知识,往往成为面试官检验你真才实学的试金石。掌握好这些知识点,能让你在面试中游刃有余,大幅提升拿到 offer 的几率。

标准盒模型与怪异盒模型

浏览器在渲染元素时,会根据不同的盒模型来计算元素的总宽度和高度。其中,标准盒模型是 W3C 制定的盒模型规范,而怪异盒模型则是 IE 浏览器独有的盒模型。

在标准盒模型中,元素的总宽度和高度等于元素的 content 区域的宽度和高度,加上元素的 paddingborder 的宽度。而在怪异盒模型中,元素的总宽度和高度等于元素的 content 区域的宽度和高度,加上元素的 paddingbordermargin 的宽度。

盒模型 总宽度和高度
标准盒模型 content 区域 + padding + border
怪异盒模型 content 区域 + padding + border + margin

示例代码:

<div style="width: 100px; padding: 10px; border: 1px solid #000;"></div>
  • 在标准盒模型中,该 div 的总宽度为 120px(content 区域 100px + padding 10px + border 1px * 2)。
  • 在怪异盒模型中,该 div 的总宽度为 130px(content 区域 100px + padding 10px + border 1px * 2 + margin 0px)。

box-sizing 属性

box-sizing 属性允许我们指定元素的盒模型。默认情况下,元素采用标准盒模型。但是,我们可以通过设置 box-sizing: border-box 来切换到怪异盒模型。

在设置 box-sizing: border-box 后,元素的 content 区域的内边距为 0。这意味着元素的 content 区域的宽度和高度等于元素的总宽度和高度减去元素的 paddingborder 的宽度。

示例代码:

<div style="width: 100px; padding: 10px; border: 1px solid #000; box-sizing: border-box;"></div>

在该示例中,由于设置了 box-sizing: border-boxdivcontent 区域的宽度和高度为 80px(总宽度 100px - padding 10px * 2 - border 1px * 2)。

CSS 选择器

CSS 选择器是用来选择 HTML 元素的工具。CSS 选择器有很多种类型,包括:

  • 元素选择器: 选择特定元素,如 divp
  • 类选择器: 选择具有特定类名的元素,如 .example
  • ID 选择器: 选择具有特定 ID 的元素,如 #example
  • 后代选择器: 选择父元素中特定类型的后代元素,如 div p
  • 子元素选择器: 选择父元素中的直接子元素,如 div > p
  • 相邻元素选择器: 选择与特定元素相邻的元素,如 p + span
  • 通配符选择器: 选择页面中的所有元素,如 *

示例代码:

/* 选择所有 div 元素 */
div {
  color: red;
}

/* 选择类名为 "example" 的所有元素 */
.example {
  background-color: blue;
}

/* 选择 ID 为 "example" 的元素 */
#example {
  font-size: 20px;
}

/* 选择所有 div 元素的 p 子元素 */
div p {
  margin-bottom: 10px;
}

JavaScript 数据类型

JavaScript 数据类型主要分为两种:基本数据类型和引用数据类型。

基本数据类型:

  • Number:数字类型。
  • String:字符串类型。
  • Boolean:布尔类型。
  • Null:空值类型。
  • Undefined:未定义类型。

引用数据类型:

  • Object:对象类型。
  • Array:数组类型。
  • Function:函数类型。

基本数据类型的值直接存储在内存中,而引用数据类型的值存储在内存中的地址,地址指向实际的值。

ES6 新特性

ES6 是 JavaScript 的第 6 个版本,引入了许多新特性,包括:

  • 箭头函数: 一种简洁的函数语法。
  • 类: 用于创建对象和封装数据的结构。
  • 模块: 用于组织和封装代码。
  • Promise: 用于异步操作的处理。
  • Generator: 用于创建迭代器。

示例代码:

// 箭头函数
const sum = (a, b) => a + b;

// 类
class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
}

// 模块
import { sum } from './math.js';

// Promise
const promise = new Promise((resolve, reject) => {
  // 异步操作
});

// Generator
function* fibonacci() {
  let [a, b] = [0, 1];
  while (true) {
    yield a;
    [a, b] = [b, a + b];
  }
}

解决跨域问题

跨域问题是由于浏览器的同源策略造成的。同源策略规定,来自不同源的脚本不能互相访问。跨域问题可以通过使用 CORS(跨域资源共享)机制来解决。CORS 机制允许来自不同源的脚本互相访问,只要服务器端设置了相应的 CORS 头信息。

示例代码:

服务器端代码:

// 设置 CORS 头信息
response.setHeader('Access-Control-Allow-Origin', '*');

客户端代码:

// 发送 CORS 请求
fetch('https://example.com/api/v1/users', {
  mode: 'cors',
  headers: {
    'Content-Type': 'application/json',
  },
})
.then(response => {
  // 处理响应
});

提高网站性能

网站性能是影响用户体验的重要因素。可以通过以下几种方法来提高网站性能:

  • 优化 HTML 和 CSS 代码: 删除不必要的代码、合并文件。
  • 减少 HTTP 请求的次数: 合并图像、使用 CSS 精灵。
  • 使用缓存: 利用浏览器缓存、服务器缓存。
  • 使用 CDN: 将静态文件分发到多个服务器。
  • 优化服务器端代码: 使用高效的数据库查询、优化服务器配置。

结论

掌握 HTML/CSS/JavaScript/ES 的基础知识是前端开发工程师面试中的重中之重。通过深入理解这些知识点,你将能够在面试中游刃有余,为拿到心仪的 offer 打下坚实的基础。

常见问题解答

  1. Q:标准盒模型和怪异盒模型有什么区别?
    A: 标准盒模型仅计算 content 区域的宽度和高度,而怪异盒模型还计算 paddingbordermargin 的宽度。

  2. Q:设置 box-sizing: border-box 后,content 区域的内边距是多少?
    A: 0

  3. Q:有哪些类型的 CSS 选择器?
    A: 元素选择器、类选择器、ID 选择器、后代选择器、子元素选择器、相邻元素选择器、通配符选择器等。

  4. Q:JavaScript 中的基本数据类型有哪些?
    A: Number、String、Boolean、Null、Undefined

  5. Q:如何解决跨域问题?
    A: 使用 CORS(跨域资源共享)机制。