面试题总结

138 阅读5分钟

🌏【前言】

这是我在b站看到的总结,准备自己慢慢来学习总结,自己的面试经验很薄弱,一点点更新

🌟html

1.flex的布局 用法 属性 

2.定位,粘性定位

3.选择器的表达式

4.清除浮动

5.heade标签有哪些

6.script标签有哪些属性

7.canvas使用

🌟css

1.元素显示disply:none,visibility:hidden 区别以及他们是否会触发重绘以及重排

2.元素垂直居中的问题

3.盒子模型 两个盒子模型,区别 使用场景

🌟js

1.闭包

2.继承相关问题 原理 手写

3.原型链 链的过程 原型怎么访问

        /*
        函数有prototype && __proto__ prototype也就是原型,
            原型也是一个对象,所以原型也有__proto__
        对象只有__proto__
        */
        function user(){
        }
        console.dir(user);//_proto_(_proto_) prototype (_proto_)
        
        let v = {};
        console.dir(v);//_proto_
        console.log(user.__proto__.__proto__==user.prototype.__proto__);//true

        /*
        实例的__proto__指向构造函数的prototype
        */
       let arr = [];//构造函数为Array
       console.log(arr.__proto__ == Array.prototype)//true
        console.log(arr.__proto__.__proto__ == Object.prototype)//true

通过对象找到原型--通过原型的constructor找到构造函数---通过构造函数创建对象 所以construcor不可以丢掉

 function User(name){
            this.name = name;
            this.show = function(){
                console.log(this.name);
            }
        }
        let lily = new User('lily');
        console.log(lily);

        function createByObject(obj,...args){
        // .getprototype 通过对象找到原型 .constructor通过constructor找到构造函数
           const constructor = Object.getPrototypeOf(obj).constructor;
           return new constructor(...args);
        }
        let ln = createByObject(lily,'ln');
        ln.show();

4.let const var 变量提升 作用域

5.基本数据类型,手写类型判断

instanceof 通过原型链查找prototype判断 适用于引用数据类型 但是对数组和函数还是判断不出来

6.数组自身被改变的方法

改变自身值的方法一共有9个,分别为pop、push、reverse、shift、sort、splice、unshift,以及两个ES6新增的方法copyWithin 和 fill。

7.判断数组的方法,数组循环的方法

8.parseInt的原理和第二个参数

parseInt() 函数可解析一个字符串,并返回一个整数。
parseInt(string, radix)
string :必需。要被解析的字符串。
radix :可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。如果省略该参数或其值为 0,
则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。
如果该参数小于 2 或 者大于 36 ,则 parseInt() 将返回 NaN。

9.es6新语法

10.模块化

11.垃圾回收机制

  1. 标记清除
  2. 引用计数

12.map weakmap set weakset

WeakMap与Map类似,但有几点区别:

1、WeakMap只接受对象作为key,如果设置其他类型的数据作为key,会报错。

2、WeakMap的key所引用的对象都是弱引用,只要对象的其他引用被删除,垃圾回收机制就会释放该对象占用的内存,从而避免内存泄漏。

3、由于WeakMap的成员随时可能被垃圾回收机制回收,成员的数量不稳定,所以没有size属性。

4、没有clear()方法

WeakSet和Set类似,但有几点区别:

1、WeakSet和set一样存放数据,但是和Set的区别:

2、: WeakSet只能存储对象引用,Set任何数据都可以

3、成员都是弱引用,可以被垃圾回收机制回收,不能被遍历

🌟八股文

1.http1 1.1 2之间的区别

http1 和http1.1区别:

  • 长连接
  • 节约带宽 header 100 401 if(100)->request body
  • HOST域

http1.1和http2区别:

  • 多路复用 :做到同一个连接并发处理多个请求
  • 数据压缩 :HTTP2.0使用HPACK算法对header的数据进行压缩
  • 服务器推送

HTTP 发展历史

HTTP/0.9

  • 只有一个命令GET
  • 响应类型: 仅 超文本
  • 没有header等描述数据的信息
  • 服务器发送完毕,就关闭TCP连接

HTTP/1.0

  • 增加了很多命令(post HESD )
  • 增加status codeheader
  • 多字符集支持、多部分发送、权限、缓存等
  • 响应:不再只限于超文本 (Content-Type 头部提供了传输 HTML 之外文件的能力 — 如脚本、样式或媒体文件)

HTTP/1.1

  • 持久连接。TCP三次握手会在任何连接被建立之前发生一次。最终,当发送了所有数据之后,服务器发送一个消息,表示不会再有更多数据向客户端发送了;则客户端才会关闭连接(断开 TCP)
  • 支持的方法: GET , HEAD , POST , PUT ,DELETE , TRACE , OPTIONS
  • 进行了重大的性能优化和特性增强,分块传输、压缩/解压、内容缓存磋商、虚拟主机(有单个IP地址的主机具有多个域名)、更快的响应,以及通过增加缓存节省了更多的带宽

HTTP2

  • 所有数据以二进制传输。HTTP1.x是基于文本的,无法保证健壮性,HTTP2.0绝对使用新的二进制格式,方便且健壮
  • 同一个连接里面发送多个请求不再需要按照顺序来
  • 头信息压缩以及推送等提高效率的功能

HTTP3

  • QUIC“快速UDP互联网连接”(Quick UDP Internet Connections)

HTTP3 的主要改进在传输层上。传输层不会再有我前面提到的那些繁重的 TCP 连接了。现在,一切都会走 UDP。

HTTP3详细介绍

2.浏览器缓存的全过程

3.强缓存 协商缓存 字段 优先级

4.http状态码 

5.h5和cookie的区别

6.js css文件阻塞

7.async defer 异步下载的区别

8.浏览器输入url后的全过程

juejin.cn/post/693523…

9.tcp udp的区别

10.队头阻塞

11.promise的常见方法,API 

12.promise.all promise.race他的手写

13.history hash他们两个的原理 区别

14.跨域 CORS JSONP 怎么解决

15.webpack打包问题,plugin babel loader之间的区别和用法

16.plugin自己写过吗

🌟代码必会

1.原生AJAX发送请求手写

2.promise封装ajax

3.深拷贝实现手写

4.手写new操作符

5.解析url的参数

6.apply和call和bind的手写

//apply🌰一:
let ln = {
            data:[1,2,3,32,34,56,7,16],
        };
        //Object.getPrototypeOf() 方法用于获取指定对象的原型对象(也就是__protp__的指向)
        // Object.setPrototypeOf(),为现有对象设置原型,返回一个新对象接收两个参数:第一个是现有对象,第二是原型对象。
        Object.setPrototypeOf(ln,{
            max(){
                return this.data.sort((a,b)=>b-a)[0];
            }
        })
        console.log(ln.max());//56
        let xj = {
            lessons:{
                js:96,
                vue:89,
                node:99,
                linux:80
            },
        get data(){
            return Object.values(this.lessons)
        }
    };

    console.log(ln.max.apply(xj));//99
//apply🌰二:
let hd = {
        data:[1,2,12,3,4,34]
        };
    console.log(Math.max.apply(null,hd.data));

🌟算法 www.programmercarl.com/