第一场电话面试:
- 先自我介绍了一下
- 介绍一下自己做过的项目用到哪些技术和栈
- 讲下js数据基本类型
- 介绍下ES6有哪些新方法
- 讲下let const的区别
- 问到Hubuilder可以一转三的原理是什么?
- watched和computed的区别
- 问道小程序和Hbuilder区别
- vue的生命周期
- 什么时候用到bedforeDestory?
- 在beforeCreated中发出请求合适吗?会出现什么问题?
- 问到JOSNP原理,后台返回什么?什么时候出现跨域?
- vue父组件和子组件怎么通信
我自己整理的答案:
1. JavaScript 数据基本类型
JavaScript 有七种基本数据类型:
-
Undefined:变量声明但未初始化时的默认值。
-
Null:表示空对象引用。
-
Boolean:用于表示 true 和 false。
-
Number:用于表示整数和浮点数。
-
String:用于表示文本。
-
Symbol:ES6 新增,用于创建唯一值。
-
BigInt:用于表示大整数。
此外,还有 Object 作为引用类型。理解这些数据类型的区别以及如何转换对于编写可靠的 JavaScript 代码非常重要。
2. ES6 新特性介绍
ES6(ECMAScript 2015)带来了许多新特性,以下是其中一些最常用的:
-
let 和 const:用于声明变量,
let
有块级作用域,而const
用于声明常量。 -
箭头函数:简化了函数的定义,具有词法作用域的
this
。 -
模板字符串:使用反引号 ```` 和
${}
插值,简化字符串拼接。 -
解构赋值:可以从数组和对象中提取值并赋给变量。
-
展开运算符:用
...
来展开数组或对象的属性。 -
Promise:用于处理异步操作,提供更清晰的链式调用。
-
类 (Class):引入面向对象编程的类语法糖。
-
模块化:使用
import
和export
实现模块之间的引入和导出。
3. let 和 const 的区别
-
let:用于声明变量,有块级作用域,允许后续重新赋值。
-
const:用于声明常量,值不能被重新赋值,且具有块级作用域。
let
和 const
都避免了 var
带来的变量提升问题,并限制了变量在块级作用域中的访问。
4. HBuilder 一转三的原理是什么?
HBuilder 的 "一转三" 指的是使用一次代码编写,可以输出多端应用,包括 H5、Android、iOS。这是通过 HBuilder 对代码进行跨平台编译,实现原生应用的能力来做到的。其背后利用了跨平台技术栈,如基于 HTML、CSS、JavaScript 的原生渲染引擎,类似于 React Native 或 Flutter,通过中间层将前端代码翻译成原生代码。
5. watch 和 computed 的区别
在 Vue.js 中:
-
watch:用于监听某个数据的变化并执行回调。适合需要在数据变化时执行异步或复杂逻辑的场景。
-
computed:用于计算属性,是基于依赖的响应式数据,只有当依赖的属性变化时才会重新计算。适合对多个数据进行依赖性处理的场景,且具有缓存功能。
6. 小程序和 HBuilder 的区别
-
小程序:一种轻量级的应用形式,运行在微信等超级 App 内部,使用特定框架如微信小程序框架开发,使用 WXML、WXSS 等技术。
-
HBuilder:是一个用于开发多端应用的 IDE,结合 uni-app 可以输出小程序、H5、Android、iOS 应用。
7. Vue 的生命周期
Vue 实例的生命周期分为多个阶段,主要包括:
-
beforeCreate:实例初始化之前,数据观察和事件都没有配置。
-
created:实例创建后,数据观察已经完成,无法访问 DOM。
-
beforeMount:模板编译结束,挂载之前。
-
mounted:实例挂载完成,可以访问 DOM。
-
beforeUpdate:数据变化,进入重新渲染前。
-
updated:更新完成。
-
beforeDestroy:实例销毁前。
-
destroyed:实例销毁后。
8. beforeDestroy 的使用场景
beforeDestroy
适合在组件即将销毁时执行一些清理操作,比如清除定时器、解绑事件监听等,以避免内存泄漏。
9. beforeCreated 中请求数据的合适性
在 beforeCreated
阶段,由于实例尚未完全创建,数据观察和事件系统还未初始化,因此在此阶段进行请求操作可能会导致一些问题,无法绑定请求结果到响应式数据,通常不建议这样做。
10. JSONP 原理,后台返回什么,何时出现跨域?
JSONP 是一种解决跨域请求的方法。其原理是利用 <script>
标签不受跨域限制的特性,通过传递一个回调函数的名字,后台返回 JavaScript 格式的数据并调用该回调函数。跨域问题通常在浏览器进行 AJAX 请求 时出现,因为浏览器安全策略(同源策略)限制了不同域之间的数据请求。
11. Vue 父子组件通信
Vue 中父子组件之间的通信方式有:
-
父组件通过 props 向子组件传递数据。
-
子组件通过 $emit 向父组件发送事件,以传递数据。
-
使用 Vuex 或一个事件总线(EventBus)进行跨层级的通信。
第二场腾讯会议视频面试(顺序可能打乱了,记不住)
- 自我介绍
- 介绍自己影响比较深的项目
- 地址栏输入地址回车直到渲染的整个过程(详细讲下页面渲染过程
- HTML parser --> DOM Tree
- 标记化算法,进行元素状态的标记
- dom 树构建
- CSS parser --> Style Tree
- 解析 css 代码,生成样式树
- attachment --> Render Tree
- 结合 dom树 与 style树,生成渲染树
- layout: 布局
- GPU painting: 像素绘制页)
- HTML parser --> DOM Tree
- 服务器怎么解析这个地址和ip地址怎么查找的
- 三次握手是怎么过程,服务器怎么识别握手是同一个客户端的
- 进程和多线程讲一下,有什么关系
- js的类和c++、java的类有什么区别?
- 浏览器单线程怎么优化的?
- vue项目怎么优化的,提到gzip被虐
- 跨域怎么解决的?cors后台是怎么写的?讲了一下xss
- 对于小程序里面的权限是怎么做安全校验的
- 事件流,事件委托讲了下
- 原型和原型链讲了下
- let const var区别,怎么手写一个函数实现const的功能
- 单线程和异步怎么使用到和体现的
- 解释一下settimeout的原理
- promise的认识
- promise和async 和区别
- 浏览器的安全问题有哪些详细介绍一下
- http和Https去区别,为什么https比http安全?ssl优点