面试官常问的Web前端问题大全

HTML和CSS基础
1. 盒模型(Box Model)
内容(content):实际的内容大小,比如文本、图片等。
内边距(padding):内容与边框之间的空间。
边框(border):围绕在内边距外的线。
外边距(margin):元素与其他元素之间的空间。

2. 响应式设计(Responsive Design)
媒体查询(@media queries):根据不同的设备屏幕尺寸适配样式。
弹性布局(Flexbox):提供一种更高效的方式来布局、对齐和分配容器空间。
网格布局(Grid Layout):二维布局系统,适用于大型界面设计。
3. 语义化标签

<header>、<footer>、<article>、<section>、<nav> 等标签的使用,提高代码可读性和SEO友好度。
JavaScript基础
1. 事件代理(Event Delegation)
使用一个事件监听器在父级元素上,来管理子元素的事件。
2. 闭包(Closure)
闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包的常见方式就是在一个函数内部创建另一个函数。
3. 原型链(Prototype Chain)
JavaScript中的对象通过原型链实现继承,每个对象都有一个指向其原型对象的内部链接。
框架和库
1. React优势
组件化:代码复用和维护变得简单。
虚拟DOM:提高应用性能。
单向数据流:使得应用状态可预测。
2. Vue特点
易上手:API简洁,易于学习。
双向数据绑定:简化了状态管理和DOM操作。
3. Angular概念
MVC架构:分离关注点,提高代码质量。
依赖注入:减少代码耦合,增强测试性。
性能优化
1. 减少HTTP请求
合并CSS/JS文件,利用雪碧图,合理使用缓存。
2. 懒加载(Lazy Loading)
按需加载图片或脚本,减少首屏加载时间。
3. 代码分割(Code Splitting)
Webpack等工具可以分割代码,实现按需加载。
安全性问题
1. XSS攻击预防
对用户输入进行转义,使用HTTP头部的ContentSecurityPolicy。
2. CSRF攻击防御
使用AntiCSRF令牌,确保请求来自合法源。
Web APIs和标准
1. Fetch API
提供了一种现代、异步的方式去发起网络请求,替代传统的XMLHttpRequest。
2. Web Storage
本地存储(LocalStorage)和会话存储(SessionStorage)用于在浏览器端存储键值对数据。
相关问题与解答
Q1: CSS中如何实现一个自适应的正方形?
A1: 可以通过设置元素的宽高相等,并利用paddingtop或paddingbottom以百分比的形式来实现。
.square {
width: 20%; /* 可以是任何相对单位 */
paddingtop: 20%; /* 与宽度相同,创建1:1的宽高比 */
position: relative; /* 为了子元素能使用绝对定位 */
}
.square > * {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
Q2: JavaScript中如何检测变量的类型?
A2: JavaScript中可以使用typeof运算符来检测基本类型(如number、string、boolean、function、undefined),对于null值,typeof null返回"object",这是一个历史遗留问题,对于数组和对象,通常需要额外的判断逻辑,或者使用Object.prototype.toString.call()方法来获取更准确的类型信息。
console.log(typeof 'hello'); // "string"
console.log(typeof 123); // "number"
console.log(typeof true); // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof {}); // "object"
console.log(typeof []); // "object" (但它是一个数组)
console.log(Object.prototype.toString.call([])); // "[object Array]"