一份来自一年前端开发经验的面试经历

324 阅读6分钟

15.jpg

引言:先说说个人的一个基本情况吧:毕业于2021年6月,2021年3月开始参加的实习,所以到现在算是一年的工作经验。以下均为个人2022年3月份的真实的面试经历(初衷在于个人记录,最近也很忙所以还没有时间去整理排版以及答案,所以呢,先将就着看嘿嘿...)。 题外话:我虽菜,但也好学!

A公司

1.路由懒加载

 2.export default 与export的区别

  • export与export default均可以导出常量、函数、文件、模块等
  • 在一个文件或者模块中,export、import可以有多个,export default仅有一个
  • 通过export方式导出,在导入的时候需要加{},export deault则不需要(因为这是模块指定默认输出,则不需要知道索要加载模块的变量名)

   这样来说其实很多时候export与export default可以实现同样的目的,只是用法有些区别。下面举个简单的例子

var name="李四";
export { name }
//import { name } from "/.a.js" 
可以写成:
var name="李四";
export default name
//import name from "/.a.js" 这里name不需要大括号

3.项目慢难点 

4.es6有用到什么新特性 

5.webpack常用的loader与plugin 

6.性能优化 

7.vue中路由的模式有哪几种,你都用过那些 

8.移动端的适配你是怎么进行的 

9.有用过vue3吗 

10.什么情况下需要进行路由懒加载,什么时候不需要 

11.路由守卫,是怎么判断token的,还有就是数据持久化是怎么实现的 

12.通过什么方式去判断页面项目的加载速度的,通过什么工具吗还是?有没头用到什么优化的判断页面加载的api 

13.action和mutation的区别 

14.watcher和computed的区别 

15.v-if和v-for为什么不能用还是使用?那我要是有这样的需求应该怎么实现呢?不在computed方式还可以有其他方式实现吗? 

16.对于uni-app多端开发的兼容性你是如何解决的 

17.数据的流加载是怎么实现的,有了解过虚拟渲染吗?

 18.less与sass的区别,有使用过变量吗?有了解过@mixin吗 

    sass中的变量是以$开头即表示边框,而less则是以@开头,用法如下:

18.2 @mixin定义的是一个混入,通过@mixin指令来定义

1.定义混入

@mixin important-text {  color: red;  font-size: 25px;  font-weight: bold;  border: 1px solid blue;}

2.使用混入:Sass @include 混入语法:

selector {@include mixin-name;}

19.有用过过滤器吗?比如要在模板中使用单位之类的,你是怎么进行过滤的 

21.有用过promise?有哪几种状态,状态是否可逆?你用过promise的哪些方法?all和rece的场景是怎么样的? 

22.组件之间的通信有哪些?父子之间,兄弟之间,祖子比较深的之间的通信你有用过吗?bus那个有没有用过,还有有没有用过比较高级pridiver的通信方式?

  1. 通过props传递
  2. 通过$emit触发自定义事件
  3. 使用ref
  4. EventBus
  5. parent或者parent或者root
  6. attrs与listeners
  7. Provide与Inject
  8. Vuex

下面对上上面的通信进行选择性介绍

3.ref

  • 父组件在使用子组件的时候设置ref
  • 父组件通过$refs来获取数据

4.EventBus

  • 使用场景:兄弟组件传值
  • 创建伊特中央事件总线EventBus
  • 兄弟组件通过emit触发自定义事件,emit触发自定义事件,emit第二个参数为传递的数值
  • 另外一个兄弟组件通过$on监听自定义事件

Bus.js

// 创建一个中央时间总线类  
class Bus {  
  constructor() {  
    this.callbacks = {};   // 存放事件的名字  
  }  
  $on(name, fn) {  
    this.callbacks[name] = this.callbacks[name] || [];  
    this.callbacks[name].push(fn);  
  }  
  $emit(name, args) {  
    if (this.callbacks[name]) {  
      this.callbacks[name].forEach((cb) => cb(args));  
    }  
  }  
}  
  
// main.js  
Vue.prototype.$bus = new Bus() // 将$bus挂载到vue实例的原型上  
// 另一种方式  
Vue.prototype.$bus = new Vue() // Vue已经实现了Bus的功能  

Children1.vue\

this.$bus.$emit('foo') 

Children2.vue\

this.$bus.$on('foo', this.handle)  

5.parent或者parent或者root

  • 通过共同祖辈parent或者parent或者root搭建通信桥梁

兄弟组件:

this.$parent.on('add',this.add)

另一个兄弟组件\

this.$parent.emit('add')

6.attrsattrs与listeners

  • 使用场景:祖先传递数据给子孙
  • 设置批量向下传属性attrsattrs和listeners
  • 包含了父级作用域中不作为prop被识别(且获取)的特性绑定(class和style除外)
  • 可以通过v-bind="$attrs"传入内部组件

7.provide与inject

7.1 概念

成对出现:provide和inject是成对出现的

作用:用于父组件向子孙组件传递数据

使用场景: 由于vue有$parent属性可以让子组件方父组件,但是孙组件想要访问祖先组件式比较困难的,通过provide/inject可以轻松实现跨级访问父组件的数据

简单来说

provider/inject就是在父组件通过provide来提供变量,然后在子组件总通过inject来注入变量,需要注意的是这里不论组件有多深,只要调用了inject那么就可以注入provider中的数据,而不是局限只能从当前父组件prop属性来获取数据

  • 在祖先组件定义provide属性,返回传递的值
  • 在后代通过inject接收组件传递过来的值

祖先组件

provide(){  
    return {  
        foo:'foo'  
    }  
}  

后代组件:

inject:['foo'] // 获取到祖先组件传递过来的值  

23.防抖优化说一下 

24.封装通用组件你主要封装了哪一些,怎么实现的? 

25.权限控制是怎么实现的?有没有使用过自定义指令的方式? 

26.本地开启跨域的原理是什么?devserve 

27.如果使用ref绑定元素,最后获取的时候会返回什么类型的数据? 数组类型

28.一般用什么来判断数据类型,如果没有知道确切的类型的时候应该如何判断

  使用Object.prototype.toString.call()---这种情况下当你不知道数据类型的时候也可以准确判断

Object.prototype.toString.call('') ;   // [object String]Object.prototype.toString.call(1) ;    // [object Number]Object.prototype.toString.call(true) ; // [object Boolean]Object.prototype.toString.call(Symbol()); //[object Symbol]Object.prototype.toString.call(undefined) ; // [object Undefined]

29.有了解过插槽吗?插槽有哪几种方式

  • 默认插槽:匹配没有name属性的solt
  • 具名插槽:通过solt的name属性
  • 作用域插槽:在组件内部通过slot关键字将数据源教导外部的插槽中

30.数据持久化你做过吗,并且说一下你是怎么做的,localstorage和sessionstorage的区别

 我使用的是vuex-persist持久化插件

 B公司

初面(过了)

0.给定一个住呢各式各样nums和一个目标值terget,请你在该数组中找到和为目标值的哪两个整数,并返回他们的数组下标,你可以假设每种输入只会对应一个答案,但是,数组中同一个元素不能使用两遍。

实例: /* 给定nums =[2,7,11,15],target=9 因为nums[0]+nums[1]=2+7=9 所以返回[0,1] */

1.实现数组去重 (多种方法)

2.已知有两个已经排序好的数组,如何实现将这两个数组进行合并并且也是排序好的 (多种方法)

3.watcher和computed的区别 

4.let const与var的区别

5.数组有哪些方法,他们的作用分别是什么?

6.介绍一下vuex 

7.组件之间的通信有哪些? 

8.vue中双向数据绑定的原理 

9.vue中set的作用 

10.nextTick的工作原理 

11.事件循环机制,哪一些是红任务,哪一些是微任务,promise是微任务还是宏任务

12.作用域链的理解 

13.闭包的理解,会有什么缺点 

14.原型链的最终指向是什么 :null

15.防抖与节流的区别,并且他们的应用场所  

16.对vue生命周期的理解?在created和mounted这两个生命周期中请求数据有什么区别呢?

17.vue中key的原理,说说你对它的理解

复试(就很迷,面我的那个面试官跟我说对我挺满意的说已经向上汇报了,然后有下文咱也不知道该说啥...)

image.png

C公司(已过)

初面

1.h5端的打包优化有没有做过

2.由于微信小程序打包有一定的限制,如果出现这种情况,你会怎么去解决?

3.页面传递参数你数如何实现的?

4.css3你用过哪些属性?兼容性问题你是怎么处理的

5.有没有想过自己封装tabbar导航栏?

6.你主要封装过哪些组件?怎么实现的?

7.看到你项目中引入高德地图,你是怎么实现引入的?

8.项目从0-1开始搭建,你是如何实现的?开始时你会注意哪些问题?

9.组件之间的通信有哪些?evenBus和$emit的区别你有了解过吗?

10.你有用过哪些布局

11.你觉得Vue和uni-app上有什么区别

  • uni-app是基于vue进行开发的,继承勒Vue的而特性和语法
  • uni-app中没有Vue-router
  • 使用的标签不一样,在uni-app中通常使用的是view、image、text
  • 生命周期也不一样

12.你有注意过安全性的问题吗?比如一些全局的id之类的,还有就是当数据需要全局使用的时候你一般是怎么处理的?存在localstorage和vuex中有什么区别?和全局挂在又有什么区别?

13.SSR解决了什么问题?有做过SSR吗?你是怎么做的?

14.怎么理解ES6中 Promise?使用场景?

15.

复试+终面(这里忘记录音了,想起来记录的时候已经忘记了....)

D公司(小公司)(已过)

1.es6的新语法

2.class用过吗

3.情景反应:主要是支付方面(这方面讲了很多)

4.pormise了解过吗?应用场景

5.......

E公司:

这是笔试(没过,然后我就没有进入二面)

1.在html页面中如何控制页面的加载顺序,比如有左右中三个布局,如何使得在中部分加载完毕之后左右布局才能加载

2.现在有a,b,c三个对象,如何使得a继承b的方法和a继承c的方法

3.提取url后面的参数,返回键值对的对象形式

4给出一个字符串,使用正则表达式对其识别

5.有些题我也没拍下来,记不太住了..

F公司(已过)

0.首先事笔试---大概有5-6页的纸,也是我面试以来做过最多的题目一次

  • 有一道很长的关于宏任务和微任务执行顺序的题目(占一页纸不夸张)
  • 10+道选择题(我看到面试官的改卷似乎很多我都作对了,不过没拍下来,这里就不写了)
  • 两道算法题,做出了一个(是求两数之和等于某个值,返回这两个数在数组中的下表---funtion sum(num,target)
  • 一个是光折射问题,我没怎么刷算法题没做出来
  • 3-6道的简答题

           1.css sipte图是什么?作用

           2.一个是安全性能的问题,即什么是XSS和CSRF攻击,如何防御?‘

           3.前端优化性能有哪些?

           4.什么是跨域?解决跨域的方法有哪些?

           5.http和https常见的状态码有哪些?loalhost和127:0:0:1与本地ip有什么区别?

           6.

*上面是笔试题,以下是问答题

1.说说你的第一个项目你从0开始觉得做的不错的地方

2.es6新语法特性,而且在其中你最常用的有哪些?

3.图片懒加载是什么?怎么实现的

4.跨域了解吗?你是怎么解决跨域的,nignx代理解决跨域做过没有?

5.登录验证是怎么做的?数据怎么保存的?

6.本地缓存有哪些?有没有使用过cooike?刷新的时候数据丢失怎么解决?

7.es6中暂时性死区是什么?

8.function fn(name){var name=3;console.log(name)===>fn(1),最终那么输出什么?3,因为参数name,实质是var name=undefine

9.css的flex布局了解吗?(虽然我用了很多特性都知道,但是没有组织好自己的语言嘿嘿,记得看一下)

10.css中为什么不用float浮动了,是有什么缺点吗?

11.如果浮动,怎么清除浮动?

12.var、let、const之间的区别

13.有了解过vue3吗,知道其和vue2的区别吗?

14.Vue组件生命周期,还有父子组件生命周期的执行过程?

15.Vue中的$nextTick有什么作用?

16.Vue项目中有封装过axios吗?主要是封装哪方面的

17.new操作符具体干了什么?

18.你对事件循环的理解

19.什么是防抖和节流?有什么区别?如何实现?

G公司(初面+终面都已过)

  • 2022.3.27面试的,2022.4.16才想起来整理记录,可想而知,我是没有记住问的什么了...