前端面试总结,持续更新中...

HTML 篇

页面导入样式时,link 与 @Import 有什么区别

  • link 属于 XHMTL 标签,除了加载 css 外,还能用于定义 RSS,定义 ref 连接属性等作用;而 @import 是 css 提供的,只能用于加载 css
  • 页面加载时,link 会同时加载,而 @import 引用的 css 会等页面加载完之后再加载
  • @import 是 css 2.1 提出的,只在 IE5 以上才能被识别,而 link 是 XHTML 标签,无兼容问题

常见的浏览器内核

  • Trident 内核:IE,MaxThon,360,搜狗浏览器等
  • Gecko 内核:Netscape6 及以上版本
  • Presto 内核:Opera 7 及以上,【Opera 内核原为:Presto,现为:Blink】
  • Webkit 内核:Safari,chrome 等【Chrome的:Blink(Webkit的分支)】

重绘 与 回流

  • 回流(Reflow):当 render tree 中部分或全部元素的尺寸、结构或某些属性发生改变时,浏览器重新渲染部分或全部文档的过程称为回流。(页面首次渲染,浏览器窗口大小改变,元素尺寸、位置发生改变,添加或删除可见 DOM 元素、激活 css 伪类等会导致回流)
  • 重绘(Repaint):当页面中元素样式的改变并不影响它在文档流中的位置时,浏览器会将新样式赋予元素并重新绘制它,这个过程称为重绘。

css 篇

实现水平垂直居中

  • 方法一:使用 flex 布局
.parent { display: flex }
.child { margin: auto }
  • 方法二:使用 flex 布局
.parent { 
  // parent css
  display: flex; 
  justify-content: center; 
  align-items: center; 
}
.child {
 // child css
}
  • 方法三:使用 position + margin (已知子 div 宽高)
.parent {
  position: relative;
}
.child {
  width: 200px;
  height: 200px;
  position: absolute;
  left: 50%;
  right: 50%;
  margin-left: -100px;  // 宽度的一半
  margin-top: -100px;  // 高度的一半
}
  • 方法四:使用 position + transform:translate() (未知子 div 宽高)
.parent {
  // parent css
  position: relative;
}
.child {
  // child css
  position: absolute;
  left: 50%;
  right: 50%;
  transform: translate(-50%, -50%)
}

js(包括 es6) 篇

Promise 的理解

Promise 是一种为了避免回调地狱的异步解决方案。Promise 是一种状态机制:pending(进行中)、fulfilled(已成功)和 rejected(已失败),只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态

回调地狱

回调函数中嵌套回调函数的情况就叫做回调地狱。
回调地狱就是为了实现代码顺序执行而出现的一种操作,它会造成我们的代码可读性非常差,后期不好维护

箭头函数与普通函数的区别

  • 箭头函数没有 this,通常需要通过查找作用域链来确定this 的值。
  • 箭头函数没有自己的 arguments 对象,但是可以访问外部函数的 arguments 对象
  • 不能通过 new 关键字调用,同样也没有 new.target 值和原型

ES6 特性

  • let 【定义变量,变量声明不提升,块级作用域,不能重复声明】
  • const 【定义常量,变量声明不提升,块级作用域,不能重复声明,初始化必须有值】
  • 箭头函数: () => {}
  • 解构赋值:let [a, b, c] = [1, 2, 3]
  • 【…】展开/收集运算符:let a = […obj, 4, 5, 6]

实现继承的几种方式

  • 原型链继承
function Person(name) {
  this.name = name
}

function Woman() {}
Woman.prototype = new Person()
Woman.prototype.name = 'haixia'
let womanObj = new Woman()
  • 借用构造函数继承
function People() { 
  this.name = 'Marry'
}
function Wonman() {
  People.call(this)
  this.name = name || 'renbo'
}
let womanObj = new Woman() // womanObj.name == 'rando'
  • 实例继承
function People() {
  this.name = 'Marry'
  this.age = 23
  this.sayName = name => {
    console.log(name || this.name)
  }
}

function Woman(name) {
  let instance = new People()
  instance.name = name || 'xiaoxiao'
  return instance
}

let womanObj = new Woman()  // womanObj.sayName() 'xiaoxiao'

null 和 undefined 的区别

  • undefined 表示一个变量没有被声明,或者被声明了但没有被赋值(未初始化),一个没有传入实参的形参变量为 undefined,如果一个函数什么都没返回,则该函数默认返回 undefinednull 则表示“什么都没有”,即“空值”。
  • javascript 将未赋值的变量默认设为 undefined;javascript 从来不会将变量设成 null

call apply bind 的区别

  • apply 方法:
    apply 接受两个参数,第一个是 this,第二个是函数接受的参数,以数组的形式传入,且当第一个参数为 null、undefined 的时候,默认指向 window(浏览器中),使用 apply 方法改变 this 指向后原函数会立即执行,且此方法只是临时改变 this 指向一次。
  • call 方法:
    call 接受两个参数,第一个是 this,第二个是参数列表。当一个参数为 null 或 undefined 的时候,表示指向 window(浏览器中),与 apply 一样, call 方法也只是临时改变一次 this 指向,并立即执行。
  • bind 方法:
    bind 方法和 call 方法类似,第一个参数为 this,后面的参数为参数列表(bind 的第二个参数列表可以分多次传入,call 方法则必须一次性传入所有参数),但是它改变 this 指向后不会立即执行,而是返回一个永久改变 this 指向的函数。

vue 篇

react 篇

webpack 篇

前端页面优化

防抖 与 节流

  • 防抖
    防抖就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间。
// 防抖
// 使用场景:1.搜索框,2.表单提交,3.手机号,邮箱验证
function debounce(fn, delay = 200) {
  let timer;
  return function() {
  	const th= this, args = arguments;
  	if(timer) clearTimeout(timer);
  	timer = setIimeout(() => {
	  timer = null;
	  fn.apply(th, args)
	], delay );
  }
}

// 调用
debounce(async function() {
  // do sth
  await fn()
}, 200)
  • 节流
    节流是指连续触发事件但在 n 秒中只执行一次函数(节流会稀释函数的执行频率)
// 节流
// 1.滚动加载,2.搜索框
function throttle(fn, delay = 200) {
  let timer, last
  return function() {
	const th = this, args = arguments, now = new Date()
	if(last && now - last < delay) {
	  clearTimeout(timer)
	  timer = setTimeout(() => {
	    last = now
	    fn.apply(this, args)
	  }, delay)
	}else {
	  last = now 
	  fn.apply(this, args)
	}
  }
}

// 调用
throttle(async function() {
  // do sth
  await fn()
}, 200)

HTTP 与 TCP/IP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值