前端面试题(面试碰到的一些)(一)

1、浏览器的存储方式都有哪些?

  •      cookie:  优点——兼容性好,请求头自带cookie方便  。缺点——大小只有4k, 请求头加入          cookie 浪费流量(多用于记录登录状态)
  •      localStorage:  优点—— 操作方便,永久性存储,大小有 5M
  •      sessionStorage:  会话级别的储存方法,关闭页面会被清理 (仅在当前窗口有效)
  •     indexedDB: 它是NoSQL数据库,用键值对进行存储,可以进行快速读取操作

2、优化前端的方法:

        减少请求数量 (比如: 合并、减少重定向、使用缓存、尽量用字体图标)

        减小资源大小 (比如:css压缩,图片压缩等)

        优化网络链接 (比如: 使用DNS预解析、并行连接等)

        优化资源加载 (比如: 加载位置,加载时机,懒加载和预加载等)

         DOM 优化 (比如: Dom 读写分离、节流[throttle]或防抖[debounce]等) 

        webpack优化(比如:动态导入和按需加载、剔除无用代码、长缓存优化等)      

3、git 的常用操作

        git add (添加到暂存区)、git clone(下载项目)、git status(查看当前仓库状态)、git commit(提交暂存区到本地仓库)、git push(上传合并)、git pull(下载代码)

4、常见的代码规范

        命名规范(语义化、cssBEM 命名法,变量名采用小驼峰等)

        变量规范(尽量用let const 定义)

        字符串(统一用单引、用字符模板)

        函数(尽量使用箭头函数等)

        数组(用... 做浅拷贝)

5、前端解决跨域的方法

      5.1 jsonp   缺点: 只能发送get 请求

1、
$.ajax({
    url: 'http://www.domain2.com:8080/login', 
    type: 'get', 
    dataType: 'jsonp', // 请求方式为jsonp 
    jsonpCallback: "handleCallback", // 自定义回调函数名 
    data: {} 
 });
2、
this.$http = axios;
this.$http.jsonp('http://www.domain2.com:8080/login', {
    params: {},
    jsonp: 'handleCallback'
}).then((res) => {
    console.log(res); 
})

        5.2 CORS 跨域资源共享

        5.3 nginx代理跨域(修改webpack.config.js 文件)

          

6、v-for 中为什么要用key? 

   key 主要用于DOM  diff 算法 ,标志组件的唯一性,为了高效的更新虚拟DOM,

   如果不使用 key  默认使用 ‘’就地复用‘’策略  

   注: 尽量不使用index 作为key ,要用唯一标识的值

7、遍历数组的几种方法?

         for()

        while

        forEach()

        every()是否都符合某条件,全部符合就返回true

        some()是否存在符合某条件,存在就返回true

        filter()过滤数组,返回满足条件的新数组

        map() 遍历每一项,对每一项进行操作,并返回新数组

        reduce()  常用于初始化一个值

        for.. in ... 本意是用来迭代对象,数组也属于特殊对象,所以也可以遍历数组但不推荐

        for... of ...  也可以迭代对象。支持return 和break

8、类型

        js类型

            基本类型:字符串,数字,布尔,null,undefined,symbol (es6 新引用的类型,标识独一无二的值)

            引用数据类型: 对象,数组,函数

扩展: 基本类型传递的是值,引用类型传递的是地址,所以引用类型才需要做深拷贝。(地址是可以共享一块内存的,值不可以共享一块内存)

      ts 类型

            字符,数字,布尔,数组,对象,元组(tuple),枚举(enum),任意(any),null, undefined,void, never , interface(接口)(加粗为ts 新增)

9、css 水平垂直居中的方法有哪些?

       1.flex

        {display: flex;justify-content:center;align-items:center } 或者{父元素设置display:fliax.子元素设置 margin:auto}

     优点: 不需要固定居中元素的宽高。

      2.grid 

        父元素设置 display: grid. 子元素{justify-self:center;align-self:center} 或者子元素设置 {margin: auto}

       缺点: 比flex 方法兼容性差一点。优点:不需要固定宽高

    3.absolute(定位) (absolute+transform)(absolute+calc)(absolute+ 负margin )(absolute + margin:auto)

      {position:absolute;left:50%;top:50;transform:translate(-50%,-50%) }

      {position:absolute;left:0;top:0;right:0;bottom:0;margin:auto }

    

10、vue的组件通讯有哪些?

      props(父-子) /  $emit(子-父)  /ref (子-父)  /eventBus (兄弟) / $parent或者$root (兄弟)/vuex / $attrs 和 $listeners (祖先-子孙)

11、浅拷贝和深拷贝的实现?区别?

     浅拷贝:只是进行一层复制,深层的引用还是共享,所以原对象和拷贝对象还是会互相影响

                 实现:赋值、Object.assign()(当对象只有一层是为深拷贝)、展开运算符、

     深拷贝: 无限层级的复制,所以原对象和拷贝对象不会互相影响。

                实现: 手动复制、object.assign()(只有一层才可用)、转成json 再转回来(最常用JSON.parse(JSON.stringify(obj1)))

12、js 闭包

    什么是闭包: 闭包是指有权访问另一个函数作用域里中变量的函数

    创建方法: 在一个函数内,创建另一个函数,创建的函数可以访问到当前函数的局部变量

    优点:缓存变量,避免变量全局污染

    缺点: 会造成内存泄漏

    特点: 封闭性(外界无法访闭包内部的数据)、持久性(在外部函数被调用之后,闭包结构仍然存在)

13、js 原型链

14、js继承

15、em 和 rem 的区别

       em 相对于父元素

       rem 相对于根元素

16、隐藏元素的方式

      display:none(不占据空间,页面重新渲染,性能消耗大)/visibility:hidden(占据空间,但是不能触发点击事件,性能消耗较少)/opacity:0(间距空间,并能触发点击事件,性能消耗较少)

17、 

18、动画

19、bfc

20、

21、http1.0和2.0的区别

22、同源策略限制内容有哪些

      不能读写浏览器缓存、js 无法获取dom 树、不能发送请求

23、vue 和react 的区别(https://worktile.com/kb/ask/19606.html

      响应式原理不同:react 主要通过setStart()方法来更新状态,状态更新后组件也会重新渲染

      监听数据变化的原理不同:vue 是

      组件写法不同

      diff 算法不同

      框架本质不同: vue 是 mvvm 由mvc 发展来。react 是前端组件化框架,有后端组件化发展而来。

24、vue 渲染机制

25、箭头函数的优缺点

      优点:语法简洁、隐式返回减少代码量、解决了this指向问题(原生的写法,this指向调用者,箭头函数this 绑定的是定义时的那个对象)

     缺点: 箭头函数是匿名函数,不能作为构造函数、箭头函数中没有arguments 对象、

     跟普通函数的区别:this永远指向其父级对象的this        

26、xss 攻击

27、vue 中的data 属性的理解

       vue组件中,data 是一个函数,因为组件是复用的,所以每次调用都是一个新的data函数,自己管理自己的数据,互不影响

28、vue 双向绑定原理

        vue2 : 使用的是obeject.difineproperty() 中的 set和get 实现数据劫持+ 发布订阅模式

        vue3: 使用的是proxy 代理(优点: 直接监听对象、返回的是一个新的对象,有13种拦截方法)

29、兼容问题

     不同浏览器标签默认的内外边距不同  解决方法:初始化样式 *{margin:0,padding: 0} 等

     图片加a标签,在ie9 中会有边框  解决方法: 设置boder: none 

      ul li 浮动后,显示在div 外  解决方法:清除浮动clear:both

      兼容前缀:谷歌chrome(-webkit-) 火狐(-moz-)ie(-ms-)opera(-o-)

30、w3c 标准的理解

    一系列规范和技术标准

31、== 和=== 的区别

     == 只要值相同就为true (少用 == 因为没有类型限制,不严格)

    === 严格等于,值,类型都相等才可以。(建议一般用=== 更可靠,)

32、let const var 区别

      var: 函数作用域,没有块级的概念,可以垮块访问,不能垮函数

      let : 块级作用域,不能跨块,也不能跨函数

      const: 块级作用域,不能跨块,并且不能修改

33、const 定义的数组可以修改吗

       不可以。因为const 用于常量声明,表示该值不可修改

34、es6 新特性

       太多了。需要单独出一篇文章。列举一些常用的

        let  const,  symbol.模板字符串,includes()字符串新方法、解构赋值、...对象扩展符,箭头函数等 

      

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蘑菇0629

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值