面试拼多多前端开发岗,已拿到offer,这些知识点该放出来了

一面:

CSS

1.盒模型

2.css文件中开头加*号/上下盒子重叠问题(为正值如何/负值如何)

3.伪类和伪元素的了解,伪类有什么作用

JS

4.原型链

5.继承

6.为什么3.tostring()会报错

7.var先使用会怎样

8.函数表达式和函数声明有什么区别

9.高阶函数了解过吗

10.对ES6新属性用过哪些

11.var 和function声明时的不同

12.class的用处

13.改写reduce函数

14.数组改写flat函数,怎么做到拉伸

15.数组将重复的元素进行输出

16.输入汉字的多少多少万转成数字

17.promise的api

18.三个promise完成之后怎么判断

19.把方法直接写到原型上有什么坏处

20.判断是对象上的方法还是原型上的方法

Vue

21.父子组件通信

22.vue指令中v-if/v-show的区别

23.vue的声明周期

jQuery

24.jQuery的api方法

25.jQuery做过动画没有

26.jQuery

27.取到某id下面所有的某个class

HTTP请求头

28.请求的时候怎么设置不缓存

编程题:

29.spacify('hello world') // => 'h e l l o w o r l d'怎么转化

怎么实现这个'hello world'.spacify();

二面:

1.做题

2.不定高的标签,在父元素中居中-

3.写一个promise,怎么实现执行后面第二个then的第二个参数

4.reduce方法,及参数还可以是什么,

5.sort方法,返回类型可以返回布尔值吗

6.原生js添加事件,

7.map和foreach的区别,map返回的和原数组的长度一样吗

8.类数组对象转数组

9.创建dom节点

10.如何实现深拷贝

11.webpack优化

三面

1.组件平台有哪些功能?

2.实现一个 redux

3.用 ts 实现一个 redux

只记得这些了......

小节

一面的时候其实我自己感觉答得不是特别好,当时面下来感觉要凉了,平时写样式的时间确实太少了。

很幸运的时候还是给我过了,二面面试官我觉得面得很专业,基本都是从浅入深的考察知识的深度,我感觉答得还可以,因为我是属于那种会的就尽量深一点,暂时不用的就很少花时间,所以我目前知识的广度很有欠缺,对于 node、ssr、移动端、小程序这些方面我的能力都很薄弱,但是面试的时候如果你不熟悉,直接说不熟悉就行,他就不会面了。

我准备面试之前对我自己的要求就是,我会的尽量不会很快就被问倒,所以我重点复习了我擅长的知识,并且到网上刷了很多拼多多面试题,做了一个整理,现在分享给大家,算是一个感恩回馈吧。

JavaScript

(由于内容过多,我就挑重点的讲了,部分内容会简略,如有兴趣阅读全文,可以【点击我】无偿获取。)

  • 数据类型
说说 JavaScript 中的基本类型有哪些?以及各个数据类型是如何存储的?

javaScript 的数据类型包括原始类型和引用类型(对象类型)。
原始类型包括以下 6 个:
String
Number
Boolean
null
undefined
Symbol
引用类型统称为 Object 类型,如果细分的话,分为以下 5 个:
Object
Array
Date
RegExp
Function

1、数据类型的存储形式

栈(Stack)和堆(Heap),是两种基本的数据结构。Stack 在内存中自动分配内存空间的;Heap 在内存中动态分配内存空间的,不一定会自动释放。一般我们在项目中将对象类型手动置为 null 原因,减少无用内存消耗。
原始类型是按值形式存放在栈中的数据段,内存空间可以自由分配,同时可以按值直接访问。

var a = 10;
var b = a;
b = 30;
console.log(a); // 10值
console.log(b); // 30值

引用类型是存放在堆内存中,每个对象在堆内存中有一个引用地址,就像是每个房间都有一个房间号一样。引用类型在栈中保存的就是这个对象在堆内存的引用地址,我们所说的“房间号”。通过“房间号”可以快速查找到保存在堆内存的对象。

var obj1 = new Object();
var obj2 = obj1;
obj2.name = "zhizhi";
console.log(obj1.name); // zhizhi

2、Null
面试官:为什么 typeof null 等于 Object?
不同的对象在底层原理的存储是用二进制表示的,在 javaScript中,如果二进制的前三位都为 0 的话,系统会判定为是 Object类型。null的存储二进制是 000,也是前三位,所以系统判定 null为 Object类型。
扩展:
这个 bug 个第一版的 javaScript留下来的。俺也进行扩展一下其他的几个类型标志位:
000:对象类型。

  • 1:整型,数据是31位带符号整数。
  • 010:双精度类型,数据是双精度数字。
  • 100:字符串,数据是字符串。
  • 110:布尔类型,数据是布尔值。

3、数据类型的判断

typeof 与 instanceof 有什么区别?

typeof 是一元运算符,同样返回一个字符串类型。一般用来判断一个变量是否为空或者是什么类型。

除了 null 类型以及 Object 类型不能准确判断外,其他数据类型都可能返回正确的类型。

typeof undefined // 'undefined'
typeof '10'      // 'String'
typeof 10        // 'Number'
typeof false     // 'Boolean'
typeof Symbol()  // 'Symbol'
typeof Function  // ‘function'
typeof null      // ‘Object’
typeof []        // 'Object'
typeof {}        // 'Object'

既然 typeof 对对象类型都返回 Object 类型情况的局限性,我们可以使用 instanceof 来进行判断某个对象是不是另一个对象的实例。返回值的是一个布尔类型。

var a = [];
console.log(a instanceof Array) // true

instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性,如果对原型链不怎能了解,后边俺会具体的写到,这里大体记一下就 OK。
我们再测一下 ES6 中的 class 语法糖是什么类型。

class A{}
console.log(A instanceof Function) // true

注意:原型链中的prototype 随时可以被改动的,改变后的值可能不存在于 object的原型链上,instanceof返回的值可能就返回 false。

4、类型转换

类型转换通常在面试笔试中出现的比较多,对于类型转换的一些细节应聘者也是很容易忽略的,所以俺整理的尽量系统一些。javaScript是一种弱类型语言,变量不受类型限制,所以在特定情况下我们需要对类型进行转换。

「类型转换」分为显式类型转换和隐式类型转换。每种转换又分为原始类型转换和对象类型转换。

显式类型转换就是我们所说强制类型转换。

其他数据类型转字符串类型!

对于原始类型来说,转字符串类型会默认调用 toString() 方法。

String(123);      // "123"
String(true);     // "true"
String(null);     // "null"
String(undefined);// "undefined"
String([1,2,3])   // "1,2,3"
String({});       // "[object Object]"
其他数据类型转布尔类型!

除了特殊的几个值 ‘’、 undefined、 NAN、 null、 false、 0 转化为 Boolean 为 false 之外,其他类型值都转化为 true。

Boolean('')         // false
Boolean(undefined)  // false
Boolean(null)       // false
Boolean(NaN)        // false
Boolean(false)      // false
Boolean(0)          // false
Boolean({})         // true
Boolean([])         // true
转化为数字类型!

Number(10);        // 10 
Number('10');      // 10 
Number(null);      // 0  
Number('');        // 0  
Number(true);      // 1  
Number(false);     // 0  
Number([]);        // 0 
Number([1,2]);     // NaN
Number('10a');     // NaN
Number(undefined); // NaN
对象类型转原始类型!

对象类型在转原始类型的时候,会调用内置的 valueOf()和 toString() 方法,这两个方法是可以进行重写的。
转化原始类型分为两种情况:转化为字符串类型或其他原始类型。

  • 如果已经是原始类型,不需要再进行转化。
  • 如果转字符串类型,就调用内置函数中的 toString()方法。
  • 如果是其他基本类型,则调用内置函数中的 valueOf()方法。
  • 如果返回的不是原始类型,则会继续调用 toString() 方法。
  • 如果还没有返回原始类型,则报错。

5、四则运算
隐士类型转化是不需要认为的强制类型转化,javaScript 自动将类型转化为需要的类型,所以称之为隐式类型转换。
加法运算符是在运行时决定,到底是执行相加,还是执行连接。运算数的不同,导致了不同的语法行为,这种现象称为“重载”。

  • 如果双方都不是字符串,则将转化为数字字符串
    • Boolean + Boolean会转化为数字相加。
    • Boolean + Number 布尔类型转化为数字相加。
    • Object + Number 对象类型调用 valueOf,如果不是 String、Boolean或者 Number类型,则继续调用 toString()转化为字符串。

true + true  // 2
1 + true     // 2
[1] + 3      // '13'
  • 字符串和字符串以及字符串和非字符串相加都会进行连接
1 + 'b'     // ‘1b’
false + 'b' // ‘falseb’

其他运算

其他算术运算符(比如减法、除法和乘法)都不会发生重载。它们的规则是:所有运算子一律转为数值,再进行相应的数学运算。
1 * '2'  // 2
1 * []   // 0

6、逻辑运算符

逻辑运算符包括两种情况,分别为条件判断和赋值操作。

条件判断

  • && :所有条件为真,整体才为真。
  • || :只有一个条件为真,整体就为真。
true && true   // true
true && false  // false
true || true   // true
true || false  // true

赋值操作

A && B
首先看 A 的真假, A 为假,返回 A 的值, A 为真返回 B 的值。(不管 B 是啥)

console.log(0 && 1) // 0
console.log(1 && 2) // 2

A || B
首先看 A 的真假, A 为真返回的是 A 的值, A 为假返回的是 B 的值(不管 B 是啥)

console.log(0 || 1) // 1
console.log(1 || 2) // 1

7、比较运算符
比较运算符在逻辑语句中使用,以判定变量或值是否相等。

== 和 === 的区别?

对于 === 来说,是严格意义上的相等,会比较两个操作符的类型和值。
如果 X 和 Y 的类型不同,返回 false ;
如果 X 和 Y 的类型相同,则根据下方表格进一步判断

而对于 ==来说,是非严格意义上的相等,先判断两个操作符的类型是否相等,如果类型不同,则先进行类型转换,然后再判断值是否相等。

  • 如果 X 和 Y 的类型相同,返回 X == Y 的比较结果;
  • 如果 X 和 Y 的类型不同,根据下方表格进一步判断;
     

  • this
  • new
  • 闭包
    闭包面试中的重点,但是对于很多初学者来说都是懵懵的,所以俺就从最基础的作用域讲起,大佬请绕过。
什么是作用域?什么是作用域链?

规定变量和函数的可使用范围叫做作用域。只看定义,挺抽象的,举个例子:

function fn1() {let a = 1;
}function fn2() {let b = 2;
}

声明两个函数,分别创建量两个私有的作用域(可以理解为两个封闭容器),fn2 是不能直接访问私有作用域 fn1 的变量 a 的。同样的,在 fn1 中不能访问到 fn2 中的 b 变量的。一个函数就是一个作用域。

每个函数都会有一个作用域,查找变量或函数时,由局部作用域到全局作用域依次查找,这些作用域的集合就称为作用域链。 如果还不是很好理解,俺再举个例子​:

let a = 1
function fn() {function fn1() {function fn2() {let c = 3;console.log(a);}// 执行 fn2fn2();}// 执行 fn1fn1();
}
// 执行函数
fn();

虽然上边看起来嵌套有点复杂,我们前边说过,一个函数就是一个私有作用域,根据定义,在 fn2 作用域中打印 a,首先在自己所在作用域搜索,如果没有就向上级作用域搜索,直到搜索到全局作用域,a = 1,找到了打印出值。整个搜索的过程,就是基于作用域链搜索的。

什么是闭包?闭包的作用?闭包的应用?

很多应聘者喜欢这样回答,“函数里套一个函数”,但是面试官更喜欢下面的回答,因为可以继续为你挖坑。

函数执行,形成一个私有的作用域,保护里边的私有变量不受外界的干扰,除了保护私有变量外,还可以保存一些内容,这样的模式叫做闭包。

闭包的作用有两个,保护和保存。

保护的应用

团队开发时,每个开发者把自己的代码放在一个私有的作用域中,防止相互之间的变量命名冲突;把需要提供给别人的方法,通过 return 或 http://window.xxx 的方式暴露在全局下。
jQuery 的源码中也是利用了这种保护机制。
封装私有变量。

保存的应用

选项卡闭包的解决方案。

循环绑定事件引发的索引什么问题?怎么解决这种问题?
// 事件绑定引发的索引问题
var btnBox = document.getElementById('btnBox'),inputs = btnBox.getElementsByTagName('input')
var len = inputs.length;
for(var i = 0; i < 1en; i++){inputs[i].onclick = function () {alert(i)}
}

整理的知识点除了上文我详细讲述的,还有下面我简要概述的,如果全部陈述会导致文章篇幅过长,如有兴趣可以【点击我】领取。

  • 原型和原型链
  • 继承
    1.经典继承
    2.组合继承
    3.原型继承
    4.寄生式继承
  • 垃圾回收机制
    1.两种垃圾回收策略
    2.标记清除法
    3.引用计数法
    4.如何管理内存
    5.深拷贝和浅拷贝
  • 异步编程
    1.执行上下文
    2.执行栈
    3.宏任务
    4.微任务
    5.运行机制

ES6

  • 变量提升
  • var、let、const
  • map、filter、reduce
    1.map
    2.filter
    3.reduce
  • Proxy字面量定义
    1.ES6 中的 Class 定义
    2.Object.definedProperty()
    3.Proxy 代理
  • ES6/7 的异步编程
    1.Generator 生成器
    2.Promise
    3.async 及 await
  • 模块化方式一:函数
    方式二:立即执行函数
    方式三:CommonJS
    方式四:AMD 和 CMD
    方式五:ES6 Moudle
    小结
  • 有需要的朋友可以戳此传送门即可获取完整版的 PDF 哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/216573.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MistralAI发布全球首个MoE大模型-Mixtral 8x7B,创新超越GPT-4

引言 MistralAI&#xff0c;一家法国的初创企业&#xff0c;近期在AI界引发了轰动&#xff0c;刚刚发布了全球首个基于MoE&#xff08;Mixture of Experts&#xff0c;混合专家&#xff09;技术的大型语言模型——Mistral-8x7B-MoE。这一里程碑事件标志着AI技术的一个重要突破…

第一次提交代码到git仓库

本地搭建VUE项目&#xff0c;相关配置后&#xff0c;需要把项目代码推到github仓库上。 领导建好仓库后&#xff0c;在vscode执行以下命令&#xff0c;把项目推上去。 git init // 1. 初始化项目文件夹git add . // 2. 将所有文件添加到暂存区git commit -m "first co…

flex布局,换行的元素上下设置间距

要生成的效果图如下&#xff1a; display:flexflex-direction: row;flex-wrap: wrap;当我们使用弹性盒子布局后&#xff0c;默认元素是没有外边距的&#xff0c;紧挨着样式就有点丑&#xff0c;如果想使换行后&#xff0c;元素的外边距有个距离&#xff0c;可以用如下方法解决…

【无标题】树莓派 4B 多串口配置

0. 实验准备以及原理 0.1 实验准备 安装树莓派官方系统的树莓派 4B&#xff0c;有 python 环境&#xff0c;安装了 serial 库 杜邦线若干 屏幕或者可以使用 VNC 进入到树莓派的图形界面 0.2 原理 树莓派 4B 有 UART0&#xff08;PL011&#xff09;、UART1&#xff08;mini UAR…

散点图,何须图,折线图混放在一个echarts

散点图&#xff0c;何须图&#xff0c;折线图混放在一个echarts option {tooltip: {trigger: axis,axisPointer: {type: cross,crossStyle: {color: #999}}},legend: {data:[盒须图1,盒须图2,折线图,散点图]},xAxis: [{type: category,data: [周一,周二,周三,周四,周五,周六…

【Linux】tmux简单使用

它允许你在一个终端窗口中创建多个终端会话&#xff0c;并在它们之间进行切换。以下是tmux的一些主要用途和功能&#xff1a; 多窗口&#xff1a; Tmux允许你在一个终端中创建多个窗口。每个窗口可以包含一个或多个终端会话&#xff0c;你可以轻松地在这些窗口之间切换。面板分…

学习数据结构第一步(必看)——初识集合框架

一&#xff0c;学习数据结构前置知识 目录 一&#xff0c;学习数据结构前置知识 二&#xff0c;什么是数据结构&#xff1f; 1.什么是数据结构&#xff1f; 2.容器背后对应的数据结构 3.相关Java知识 4.什么是算法&#xff1f; 三&#xff0c;什么是集合&#xff1f; …

【lombok】从easyExcel read不到值到cglib @Accessors(chain = true)隐藏的大坑

背景: 在一次使用easyExcel.read 读取excel时&#xff0c;发现实体类字段没有值&#xff0c;在反复测试后&#xff0c;发现去掉Accessors(chain true)就正常了&#xff0c;为了验证原因&#xff0c;进行了一次代码跟踪 由于调用链路特别长&#xff0c;只列举出部分代码&#x…

Halcon参考手册语义分割和边缘提取知识总结

1.1 语义分割和边缘提取介绍 通过语义分割&#xff0c;我们使用深度学习(DL)网络将输入图像的每个像素分配给一个类。 图(1)语义分割示例 在图(1)中&#xff0c;输入图像的每个像素都被分配给一个类&#xff0c;但是苹果的三个不同实例和橘子的两个不同实例都不是可区分的对象…

Canal实时同步MySQL数据到ES

一、canal简介 canal主要用途是对MySQL数据库增量日志进行解析&#xff0c;提供增量数据的订阅和消费&#xff0c;简单说就是可以对MySQL的增量数据进行实时同步&#xff0c;支持同步到MySQL、Elasticsearch、HBase等数据存储中去。 早期阿里巴巴因为杭州和美国双机房部署&…

typescript个人学习笔记

https://ts.xcatliu.com/basics/primitive-data-types.html 深受启发 1.剑谱第一页&#xff0c;初始化ts outDir表示把ts编译成js文件&#xff0c;文件编译后存放的位置 2.类型声明 undefined可以赋值给其他类型

企业电子招投标采购系统源码之鸿鹄电子招投标系统+电子招投标的组成

鸿鹄招投标系统的功能描述 1、门户管理&#xff1a;用户可通过门户页面查看所有公告信息及相关通知信息&#xff0c;包括招标公告、非招标公告、系统通知和政策法规等板块。 2、立项管理&#xff1a;企业用户可以对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0…

【Cisco Packet Tracer】路由器实验 静态路由/RIP/OSPF/BGP

本教程讲解路由器的静态IP配置、RIP、OSPF、BGP等实验内容。 一、基本设置 绘制以下拓扑结构&#xff1a; PC0设置&#xff1a; PC1设置&#xff1a; Router0端口0设置&#xff1a; Router0端口1设置&#xff1a; Router1端口0设置&#xff1a; Router1端口1设置&#xff1a…

LAMP安装部署网站

目录 什么是LAMP? 实验&#xff08;搭建一个论坛&#xff09; 一&#xff0c;安装apache 1.关闭防火墙&#xff0c;将安装Apache所需软件包传到/opt目录下 2.安装环境依赖包 3.配置软件模块 4.编译及安装 5.优化配置文件路径&#xff0c;并把httpd服务的可执行程序文件…

跨国企业在跨境数据传输时需要注意的几点

对于跨国企业而言&#xff0c;跨境数据传输是一个极为关键的组成部分。这不仅涉及到数据的安全性、合规性和效率&#xff0c;还直接关系到企业的竞争力和未来发展前景。因此&#xff0c;在进行跨境数据传输时&#xff0c;企业需要特别关注以下几个关键点&#xff0c;并采取相应…

Geotrust中的dv ssl证书

DV SSL数字证书是入门级的数字证书&#xff0c;Geotrust的子品牌RapidSSL旗下的SSL数字证书产品都是入门级的SSL数字证书——DV基础型单域名SSL证书和DV基础型通配符SSL证书。今天就随SSL盾小编了解Geotrust旗下的DV SSL证书。 1.Geotrust旗下的DV基础型单域名SSL证书能够保护…

浪涌Surge整改的意义与分析?|深圳比创达电子EMC

浪涌Surge是指电器开关或突变引起的短暂电流过高的现象。当电器设备在开关、中断或突变的瞬间&#xff0c;电流会剧烈变化&#xff0c;造成电压的瞬时上升&#xff0c;这就是浪涌Surge。 在日常生活中&#xff0c;浪涌Surge可能会导致电器设备的损坏&#xff0c;或者对人身安全…

【Proteus仿真】【STM32单片机】定时智能插座开关

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使LCD1602液晶&#xff0c;DS18B20温度传感器、按键、蜂鸣器、继电器开关、HC05蓝牙模块等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602…

js 生成分享码或分享口令

代码 function getShareToken(length) {var characters ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789;var shareToken ;for (var i 0; i < length; i) {var randomIndex Math.floor(Math.random() * characters.length);var randomChar character…

python实战演练之迎接冬至的第一场雪

写在前面 WINTER IS COMING Python实现大雪纷飞的效果&#xff0c;完整代码在文末哦~ 准备开始 WINTER IS COMING Python是一种高级编程语言&#xff0c;Turtle是Python的一个图形化模块&#xff0c;它可以帮助学习者更好地理解编程概念&#xff0c;同时可以进行图形化编程。 …