前端面试题记录

68 阅读2分钟
  1. Vue的设计模式有哪些?

    1)工厂模式:传入参数即可创建实例

    2)订阅-发布模式:发布订阅模式的核心是一对多的关系,一个发布者发起事件,所有的订阅者都会执行

    发布订阅模式是由统一的调度中心调用,发布者和订阅者不知道对方的存在。

    3)观察者模式:响应数据原理

    目标对象和观察者对象是相互依赖的

    4)单例模式:整个程序有且仅有一个实例

    5)装饰模式:(@装饰器的用法)在不改变原对象的基础上,通过对其添加属性或方法来进行包装拓展,使得原有对象可以动态具有更多功能。

    Actions是一个装饰器,它包裹Mutations使之可以异步使用。对于store对象,使用Actions可以异步改变状态;不用Actions也能使用Mutations来同步改变状态;使用Actions也不会改变State、Getters、Mutations的用法、结构

    6)策略模式:指对象有某个行为,但是在不同的场景中,该行为有不同的实现方案

    let strategy = {
       'A': function (bonus) {
         return bonus * 4
       },
       'B': function (bonus) {
         return bonus * 3
       }
     }
     function fn (level, bonus) {
       return strategy[level](bonus)
     }
     let result = fn('A', 4000)
     console.log(result, 'result')
    
    
  2. Vue项目要部署到二级目录,要怎么做?

    假设二级目录名为h5

    1)在vue.config.js中修改publicPath的配置为'/h5/'

iHaier20230413-161750.jpg

2)在router.js中修改mode为'history'base改为'/h5/'

iHaier20230413-161558.jpg

3)nginx配置修改

location /h5/ {
    try_files $uri $uri/ /h5/index.html;
}

5. Vue怎么引入第三方库

1) 作为一个全局变量,挂载到window对象上。
entry.js
  window._ = require('lodash');
myComponent.vue
  export default{created() {console.log(_.isEmpty()?'lodash everywhere':'oh')}}

2) 在每个文件中引入,用import
此方式比较繁琐,若项目不再依赖这个库,需要找到所有的引用并删除
3) 优雅的方式,将其代理到Vue原型 对象上去,例如Moment库的引入
entry.js
import moment from 'moment';
Object.defineProperty(Vue.prototype,'$moment', { value: moment });
由于所有组件都会从vue的原型对象上继承他们的方法,因此所有的组件/实例中都可以通过this.$moment的方式访问Moment
4) 

7. px与pt的区别?

pt (point,磅): 是一个物理长度单位,指的是72分之一英寸。

px (pixel,像素): 是一个虚拟长度单位,是计算机系统的数字化图像长度单位,如果px要换算成物理长度,需要指定精度DPI(Dots Per Inch,每英寸像素数),在扫描打印时一般都有DPI可选。

  1. 冒泡排序怎么实现?还知道其他排序方式吗? 两层循环,外层循环每执行一次,内层循环比较出最大或最小的数。复杂度O(N2) 其他排序方式还有快速排序,归并排序,希尔排序