总访问量
Power:Hexo Theme:Coder

记录遇到的笔记题目

2021-04-13 23:00:37

前言

主要记录下面试遇到的题目,方便有空复习下。久不用就会忘,面试又要考../(ㄒ o ㄒ)/~~

HTML

CSS

css 选择器主要分为五大类

  1. ID 选择器(#id)
  2. 类选择器(.class)
  3. 属性选择器([attr])
  4. 元素选择器(p)
  5. 伪类选择器(:hover)
  6. 派生选择器
    1. 后代选择器(body li)
    2. 子元素选择器(h1 > h2)
    3. 相邻兄弟选择器(h1 + h2)
    4. 后续兄弟选择器(h1 ~ h2)
  7. 通配选择器(*)

优先级

选择器的优先级由四个部分相加,可以认为是个十百千的四位数

  1. 千位(行内样式 style)
  2. 百位(ID 选择器)
  3. 十位(类选择器,属性选择器,伪类选择器)
  4. 个位(元素、伪元素)

计算结果越大优先级越高,在进行计算时不允许进位,例如:20 个类选择器只是 20 个十位,不能视为两个百位。

继承

子元素继承父元素

Javascript

302: 重定向,当响应码为 302 时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头 Location,它指定了新请求的 URL 地址

304: 是缓存机制中,服务器判断出内容没变化,未修改,继续试用本地缓存时的一个状态码

*扩展阅读《HTTP 状态码详解》

// es6
Class Animal {
constructor (name) {
this.name = name
}
}

Class Cat extends Animal {
constructor (name) {
super(name)
}
say () {
return this.name
}
}


  \*_摘抄自《[es6 class 类 与普通构造函数的区别](https://blog.csdn.net/glorydx/article/details/103251475)》_

- ## instanceof 和 typeof 的区别

  先说说官方理解

  typeof 操作符返回一个字符串,表示未经计算的操作数的类型。
  instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。

  1. 首先可以看出判断的原理不一样。typeof 的原理是根据数据的二进制存储前三位判断的;而 instanceof 是根据原型对象去判断的,
  2. typeof 判断原理导致它的结果是不够精准的,对象、数组、null 类型判断都会返回`object`,其他类型判断精准;instanceof 的原理导致只能判断一个实例的对象(2 instanceiof Number === false; new Nember(2) instanceof Number === true;因为数字 2 是没有原型连的,对象 new Number(2)才有),但可以使用 instanceof 判断是否数组,是精准的,同样 instanceif 也不能精准判断 null 类型,因为 null 并不是对象。

  扩展阅读:其他判断类型的方法

  1. `constructor`

  ```javascript
  (2).constructor === Number
  (true).constructor === Boolean
  ('str').constructor === String
  ([]).constructor === Array
  (functiong () {}).constructor === Function
  ({}).constructor === Object
  // (null).constructor === Object //TypeError: Cannot read property 'constructor' of null
  // (undefined).constructor === Object // TypeError: Cannot read property 'constructor' of undefined

可以看出就算是constructor也是不能判断nullundefined类型的。
constructorinstaceof都有个缺点,更改了对象的原型后,就不可靠了

  function Fn() {}
  Fn.prototype = new Array()
  var f = new Fn()
  f.constructor === Fn // false
  f.constructor === Array //true
  f instanceof Function // false
  f instanceof Array // true
  1. Object.prototype.toString.call()

    Object.prototype.toString.call()是唯一个能精准判断所有类型的方法

    const a = Object.prototype.toString
    a.call(2) // [object Number]
    a.call(true) // [object Bollean]
    a.call('str') // [object String]
    a.call([]) // [object Array]
    a.call(function () {}) // [object Function]
    a.call({}) // [object Object]
    a.call(underfined) // [object Undefined]
    a.call(null) // [object Null]
    a.call(new Date()) // [object Date]
    a.call(Math) // [object Math]

    *参考资料《JS 中数据类型的判断( typeof,instanceof,constructor,Object.prototype.toString.call() )》

斐波那契数列的迭代算法和递归算法

斐波那契数列: 0、1、1、2、3、5、8、13、21、34、……

迭代算法

function fibonacci(number) {
  // number 数组下标
  const fibonacciArry = []
  for (let i = 0; i <= number; i++) {
    if (i === 0) fibonacciArry.push(0)
    else if (i === 1) fibonacciArry.push(1)
    else {
      fibonacciArry.push(fibonacciArry[i - 1] + fibonacciArry[i - 2])
    }
  }
  return fibonacciArry
}

迭代算法

function fibonacciValue(number) {
  // number 数组下标
  if (number <= 0) return 0
  else if (number === 1) return 1
  else {
    return fibonacciValue(number - 2) + fibonacciValue(number - 1)
  }
}