oldCode

V1

2022/09/25阅读:26主题:雁栖湖

腾讯面试经历,附带真题和解析

1H5新特性

H5是移动网站的一个名称,手机上各种能够被浏览器打开的网页都可以被笼统的称作H5。

HTML5 是下一代的 HTML。

新特性:

  1. 新语义元素(新增标签和属性),有利于代码可读性和SEO;

  2. sessionStorage、localStorage和indexedDB加强本地存储;

  3. 离线web应用;

  4. 表单新增功能;

  5. CSS3;

  6. 地理定位。

2java和js的特性和区别

  1. Java是强类型语言,而JavaScript是弱类型语言;

Java是强类型语言,使用变量前必须首先在程序中声明;在Java中,在编译时会检查变量的类型。而,JavaScript是弱类型语言,具有更宽松的语法和规则。

  1. 数据类型不同;
  2. 执行环境不同;

Java应用程序可以在任何虚拟机(JVM)或Web浏览器中运行,执行时会使用更多内存。而JavaScript代码仅在浏览器上运行,因为JavaScript是仅针对浏览器开发的。它运行时只需要很少的内存,因此它可以在网页中被使用。

  1. 定位不同;

Java是一种完全面向对象的OOP编程语言,我们想要运用Java写东西就必须先设计好对象;而,JavaScript不同,它是基于对象的一种OOP脚本语言,它为开发者提供了自带的很多内部对象,要更为简易省时。

  1. 联编方式不同;

Java采用静态联编,是一种静态类型语言。Java的对象引用必须在编译时就进行,编译器需要实现强类型检查。而JavaScript不同,它采用动态联编,是一种动态类型语言,它的对象引用可以在运行时检查。

  1. 并发方法不同。

3怎么理解弱类型

在javascript中,弱类型是指数据类型可以被忽略,一个变量可以赋不同数据类型的值。javascript是一种弱类型语言,它允许变量类型的隐式转换,允许强制类型转换等,如字符串和数值可以自动转化;而强类型语言一般不允许这么做。

4js怎么实现继承的

1、原型链继承

将父类的实例作为子类的原型

function Cat()
}
Cat.prototype = new Animal();
Cat.prototype.name = 'cat';

// Test Code
var cat = new Cat();
console.log(cat.name);
console.log(cat.eat('fish'));
console.log(cat.sleep());
console.log(cat instanceof Animal); //true 
console.log(cat instanceof Cat); //true

2、构造继承

使用父类的构造函数来增强子类实例,等于是复制父类的实例属性给子类(没用到原型)

function Cat(name){
  Animal.call(this);
  this.name = name || 'Tom';
}

// Test Code
var cat = new Cat();
console.log(cat.name);
console.log(cat.sleep());
console.log(cat instanceof Animal); // false
console.log(cat instanceof Cat); // true

5闭包,以及闭包用来解决什么样的问题

闭包是有权限访问其他函数作用域的局部变量的一个函数

闭包的作用:

  1. 一个是可以读取函数内部的变量;
  2. 变量私有化,避免全局污染
  3. 延续局部变量的寿命 (也可能变成缺点)

闭包的缺点

  1. 导致变量不会被垃圾回收机制回收,造成内存消耗,解决需手动删除
  2. 不恰当的使用闭包可能会造成内存泄漏的问题

6事件循环

事件循环(eventLoop)是单线程的JavaScript在处理异步事件时进行的一种循环过程,具体来讲,对于异步事件它会先加入到事件队列中挂起,等主线程空闲时会去执行事件队列中的事件。

https://juejin.cn/post/7002037475874963493

7宏任务和微任务的区别

  1. 宏任务:当前调用栈中执行的代码成为宏任务。(主代码快,定时器等等)
  2. 微任务: 当前(此次事件循环中)宏任务执行完,在下一个宏任务开始之前需要执行的任务,可以理解为回调事件。(promise.then,proness.nextTick等等)。
  3. 宏任务中的事件放在callback queue中,由事件触发线程维护;微任务的事件放在微任务队列中,由js引擎线程维护。

8对node.js有了解吗

Node.js 是一个开源与跨平台的 JavaScript 运行时环境

在浏览器外运行 V8 JavaScript 引擎(Google Chrome 的内核),利用事件驱动、非阻塞和异步输入输出模型等技术提高性能

可以理解为 Node.js 就是一个服务器端的、非阻塞式I/O的、事件驱动的JavaScript运行环境

9es6有用过哪些

  1. 解构赋值
  2. 模板字符串
  3. 默认参数
  4. 箭头函数
  5. Promises 解决异步问题

10let, const和var的区别

三者都是用来声明变量的,let,var常用来声明变量,const声明常量

  1. var声明的变量会挂载在window上,而let和const声明的变量不会
  2. var声明变量存在变量提升,let和const不存在变量提升
  3. let和const声明形成块作用域
  4. 同一作用域下let和const不能声明同名变量,而var可以

11变量提升

JavaScript是单线程语言,所以执行肯定是按顺序执行。但是并不是逐行的分析和执行,而是一段一段地分析执行,会先进行编译阶段然后才是执行阶段。

js在编译阶段的时候,会搜集所有的变量声明并且提前声明变量,而其他的语句都不会改变他们的顺序,因此,在编译阶段的时候,第一步就已经执行了,而第二部则是在执行阶段执行到该语句的时候才执行。

12暂时性死区

ES6 规定,如果区块中存在 let 和 const 命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”

13箭头函数和普通函数的区别

  1. 语法更加简洁、清晰
  2. 箭头函数没有 prototype (原型),所以箭头函数本身没有this
  3. call | apply | bind 无法改变箭头函数中this的指向
  4. 箭头函数不能作为构造函数使用

14如果调用箭头函数使用了call,apply会怎么样

call | apply | bind方法可以用来动态修改函数执行时this的指向,但由于箭头函数的this定义时就已经确定且永远不会改变。所以使用这些方法永远也改变不了箭头函数this的指向。

15介绍一下vue的优点

优点: 1、vue两大特点:响应式编程、组件化。

2、vue的优势:轻量级框架、简单易学、双向数据绑定、组件化、数据和结构的分离、虚拟DOM、运行速度快。

3、vue是单页面应用,使页面局部刷新,不用每次跳转页面都要请求所有数据和dom,这样大大加快了访问速度和提升用户体验。而且他的第三方ui库很多节省开发时间。

缺点: 1、vue两大特点:响应式编程、组件化。

2、vue的优势:轻量级框架、简单易学、双向数据绑定、组件化、数据和结构的分离、虚拟DOM、运行速度快。

3、vue是单页面应用,使页面局部刷新,不用每次跳转页面都要请求所有数据和dom,这样大大加快了访问速度和提升用户体验。而且他的第三方ui库很多节省开发时间。

Part1最后

欢迎关注公众号:oldCode ;回复:面试 获取面试资料

分类:

前端

标签:

前端

作者介绍

oldCode
V1

分享面试经历和前端技术