当前位置: 首页 > 面试经验 >

腾讯面经

优质
小牛编辑
168浏览
2023-03-28

腾讯面经

H5新特性

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

HTML5 是下一代的 HTML。

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

2. sessionStorage、localStorage和indexedDB加强本地存储;
3. 离线web应用;
4. 表单新增功能;
5. CSS3;
6. 地理定位。

java和js的特性和区别

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

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

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

Java应用程序可以在任何虚拟机(JVM)或Web浏览器中运行,执行时会使用更多内存。而JavaScript代码仅在浏览器上运行,因为JavaScript是仅针对浏览器开发的。它运行时只需要很少的内存,因此它可以在网页中被使用。
4. 定位不同;
Java是一种完全面向对象的OOP编程语言,我们想要运用Java写东西就必须先设计好对象;而,JavaScript不同,它是基于对象的一种OOP脚本语言,它为开发者提供了自带的很多内部对象,要更为简易省时。

5. 联编方式不同;

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

6. 并发方法不同。

怎么理解弱类型

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

js怎么实现继承的

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

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

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

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

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

事件循环

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

https://juejin.cn/post/7002037475874963493

宏任务和微任务的区别

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

对node.js有了解吗

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

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

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

es6有用过哪些

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

let, const和var的区别

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

变量提升

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

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

暂时性死区

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

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

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

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

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

介绍一下vue的优缺点

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

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

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

缺点:
1.不利于SEO优化.
2.首屏加载速度慢.加载时,将所有的css,js文件进行加载.
3.不支持IE678

#面经#
 类似资料: