zoukankan      html  css  js  c++  java
  • 前端面试题

    1.es6的性特性有哪些?

    ES6的性特性有:

      1).模板字符串``:可以将字符串中存在的变量动态替换,比如

    var uname=document.getElementById("uname");
    btn.onclick=()=>{
        var str=`uname=${uname.value}`;//这里将uname的属性值动态填入${}中
        console.log(str)
    }

    ``中可以执行js语句,但不能执行结构性程序(for,switch等);模板字符串中的语句可以支持换行。

      2).let声明元素:用于形成块级作用域,净化作用域:在一个块级作用域内,let 声明 的变量只会在该区域内存续,否则会报错;let声明的变量不存放在Window中,极好地避免的污染;变量名只有声明后才可以使用,避免了声明提前的问题,提高代码的可读性。

    可以使用for+let形成闭包

     1 //0,1,2,3,4  setTimeout执行一次调用一次for存储的i
     2 for(let i=0;i<5;i++){
     3     setTimeout(()=>{
     4         console.log(i)
     5     },100)
     6 }
     7
     8 //5,5,5,5,5,主程序执行完,跳出循环,再执行setTimeout函数体,此时j已经累加到5
     9 for(var j=0;j<5;j++){
    10     setTimeout(()=>{
    11         console.log(j)
    12     },100)
    13 }

      3).数组新增的API(forEach/map/reduce/filter)、

      4).箭头函数:箭头函数的内外this指向相同;箭头函数解决了函数的声明提前问题

    var fun=()=>{
       ...函数体
    }
    //在程序执行过程中,js将fun当作变量提前,而函数的赋值还在原本的位置。解决了函数的声明提前问题;
    function fun(){
      ...函数体
    }
    //函数的声明提前是将函数整个提前
    

      

      5).Promise:Promise是一种解决回调地狱的问题的构造函数,可以通过Promise传递Promise对象函数将异步操作队列化,有resolve(成功执行前者才能执行后者)和reject(前者执行发生错误用,执行reject中的函数体)两个参数。比如在发送ajax请求(异步操作)时,页面同时在渲染,页面数据需要从后台获取通过ajax返回,这时候就要等待ajax请求拿到数据才能去渲染页面。

      前者Promise执行完毕,执行.then紧邻的Promise函数,形成链式调用。

    在ES6中的错误捕捉是:在执行完Promise链的最后,加.catch()捕捉其中出错的环节抛出的错误;

    在ES7中彻底摆脱了嵌套的问题:try{Promise函数调用链}catch(err){...}

      6).解构:ES6允许按照某种模式,提取出数组或对象中的值,为变量赋值

    var user={uname:"tom",age:16,gender:"男"};
    let {uname,age,gender}=user;
    //这样就同时声明了uname,age,gender3个变量,在不使用let/var/const声明时,要写成({uname,age,gender}=user)

      7).for...of:for..of是ES6新增的位遍历对象的API,当遍历的对象不要求顺序/步长,只与属性有关时使用for...of、

      8).剩余参数问题...:

        ①在函数中参数个数不确定的时候,为使函数仍然顺利执行,可以用...数组将其中的参数收集起来存起来。

    类似于arguments,但是arguments是类数组对象,无法使用数组的API,而使用...arr(arr是函数作用于中可以使用的存放参数的数组)之后,可以使用数组API操作其中的参数;

    在只有部分参数起作用,与其匹配形参后,多余的参数会被收集

    function fn(...arr){
    	console.log(arr)
    }
    fn(1,2,4,9)//[1, 2, 4, 9]
    

     ②...可以用来拼接数组或者对象

    var user={uname:"tom",age:16,gender:"男"};
    var user1={city:"北京",tall:180};
    var tom={...user,...user1};
    //{uname: "tom", age: 16, gender: "男", city: "北京", tall: 180}

      9).用class创建并管理管理类

    class Father{
    	constructor(name,age) {
    		 this.name=name;
    		this.age=age;
    //constructor存放构造函数的属性
    	}
    //构造函数的方法直接写  如↓
    	fn(){
    		console.log(this.name,this.age)
    	}
    }
    var hmm=new Father("hanmeimei",12);
    hmm.fn()
    class Child extends Father{
    	constructor(name,age,grade){
    		super(name,age);
    //super表示其中的属性继承方法与父类型方法一致;需要注意的是,子类型继承自父类型的属性还是要写在constructor里面
    		this.grade=grade;
             }
    	intro(){
    		console.log(`I'm ${this.name} and ${this.grade} years old`)
    	}
    }
    var ll=new Child("lilei",23,10);
    ll.intro();
    //这里的ll可以用自己class中的方法,也可以使用来自父类型中fn方法

      

    2.this的用法

     1).构造函数中的this指向新创建实例中的对象;

     2).函数执行时,指向函数的作用域对象(存在),若不存在该对象,this会从函数内部向外扩展

     3).用apply,bind,call时,可以改变this所指

     4).调用函数时,this指向window

    3.vue的生命周期

     create(beforeCreate/created):Vue实例初始化前、后(data创建出来了),此阶段不能获得DOM元素

     mount(beforeMount/mounted):DOM树加载前、后,可以在mounted中发送异步请求

     update(beforeUpdate/updated):更新前、后,页面数据发生变化

     destroy(beforeDestroy/destroyed):组件销毁前、后,定时器没在组件销毁后销毁会造成内存泄漏

    4.MVVM简述

    M:数据模型  V:视图    VM:视图模型

    简单来说,就是用vm将前后台数据变化进行同步。

    MVVM的绑定原理有:(1).响应系统:将vue实例中有变化的数据存放在data属性中,并未其创建get/set访问器属性 

    (2).虚拟DOM树:将vue实例上的数据添加到一个虚拟DOM树上,当前台或后台数据有发生变化的时候,利用封装的DOM操作,将其中变化的部分同步到后台/前台。虚拟DOM树极好地提高了页面的执行效率,因为这里只存储变化的部分,静态的数据不在此列,因而查找速度较快

    5.前端的优化

     1).能用css实现的,优先用css,否则用js

     2).查找的优化:getElementByXXX和querySelector的差别:getElementByXXX查找的是动态的集合,首次查找效率高,但不实际存储对象和属性值,再次用到会反复查找DOM树;querySelector是在第一次查找的时候就将查找的结果存起来了,这就导致了首次查找效率较低;当查找条件比较复杂时,优先使用querySelector.

     3).对页面的修改,能用一句话解决的就尽量一句话解决,避免重排重绘,减少操作DOM树的次数

     4).尽量减少事件监听的个数,利用冒泡的原理(事件模型包括:捕获、触发、冒泡;从最外层开始向内逐级记录每级父元素绑定的事件,但不触发,当某级元素事件被触发时,会从当前向外层逐级触发父元素上的事件,这就是冒泡原理)。

    5).将页面需要显示的图片进行处理,使其在不改变分辨率的情况下占用更少的内存。

    6.ES6中Promise的用法

    Promise是一个构造函数用来解决回调地狱的问题,将函数执行的顺序规范化,构造函数接收一个函数形式的参数。当前面的Promise函数执行成功后,才执行.then后面紧跟的Promise函数。函数在执行到某一步失败后会直接执行.catch中错误捕捉的函数。

    优点:进行一些互相有依赖的异步操作,将嵌套执行的函数体变的扁平可读.

    在es7中,解决了函数嵌套执行的问题,使用async和await的格式来进行执行

     7.小程序的生命周期

      小程序的生命周期有:①onLoad(options)页面加载,options中存放前一组件传过来的数据项       ② onReady()页面初次渲染完成      ③onShow()页面显示   ④onHide()页面隐藏      ⑤onUnload()页面卸载 

    8.vue常见指令

    v-show,v-if:控制一个元素的显示和隐藏,v-show利用css控制,v-if通过操作DOM树来控制显示和隐藏;

    v-once:只在首次加载该组件的时候渲染一次,比如获取用户当天登录的时间,这个时间只有一次(以后登入的时候才会有一次)

    v-model:通常用于对input等表单元素进行数据绑定,做到前后数据同步

    v-bind:绑定元素的属性或方法,属性可以写成:属性,方法:@操作=""

    v-cloak:斗篷-配合display:none,使用,解决在数据渲染过程中出现的用{{}}包裹的数据短暂出现{{}}的尴尬情况

    v-text:与v-cloak应用场景相同,不适用display:none;来控制,与其不同的是,cloak是变量所在的整个元素会在数据加载后同时显示,v-text只有变化的不会在加载完成时显示,与其在一起的其他文字正常显示

    v-html:操控显示一段html语句的内容

    9.HTML5新增标签

    1)、结构标签

      h5新增了很多语义化标签,在原本布局只有div的情况下,出现了section/aside/header/footer/nav等具有可读性的布局标签:
    (1)section:独立内容区块,可以用h1~h6组成大纲,表示文档结构,也可以有章节、页眉、页脚或页眉的其他部分;
    (2)article:特殊独立区块,表示这篇页眉中的核心内容;
    (3)aside:标签内容之外与标签内容相关的辅助信息;
    (4)header:某个区块的头部信息/标题;
    (5)hgroup:头部信息/标题的补充内容;
    (6)footer:底部信息;
    (7)nav:导航条部分信息
    (8)figure:独立的单元,例如某个有图片与内容的新闻块。

    2)、表单标签

      表单元素中type添加了不同的属性值,对于需要的数据属性有了简单的验证功能,但是具体的数据合法性还是要进行判断
    (1)email:必须输入邮件;
    (2)url:必须输入url地址;
    (3)number:必须输入数值;
    (4)range:必须输入一定范围内的数值;
    (5)Date Pickers:日期选择器;
             a.date:选取日、月、年
             b.month:选取月、年
             c.week:选取周和年
             d.time:选取时间(小时和分钟)
             e.datetime:选取时间、日、月、年(UTC时间)
             f.datetime-local:选取时间、日、月、年(本地时间)
    (6)search:搜索常规的文本域;
    (7)color:颜色

    3)、媒体标签
    (1)video:视频
    (2)audio:音频
    (3)embed:嵌入内容(包括各种媒体),Midi、Wav、AU、MP3、Flash、AIFF等。

    4)、其他功能标签
    (1)mark:标注(像荧光笔做笔记)
    (2)progress:进度条;<progress max="最大进度条的值" value="当前进度条的值">
    (3)time:数据标签,给搜索引擎使用;发布日期<time datetime="2014-12-25T09:00">9:00</time>更新日期<time datetime="2020- 01-23T04:00" pubdate>4:00</time>
    (4)ruby和rt:对某一个字进行注释;<ruby><rt>注释内容</rt><rp>浏览器不支持时如何显示</rp></ruby>
    (5)wbr:软换行,页面宽度到需要换行时换行;
    (6)canvas:使用JS代码做内容进行图像绘制;
    (7)command:按钮;
    (8)deteils :展开菜单;
    (9)dateilst:文本域下拉提示;
    (10)keygen:加密;

    10.v-for中的:key的作用是什么

    v-for是快速生成一系列结构相同的vue指令,为其中元素添加:key是为了能在数据发生变化时,快速找到该元素并执行DOM操作,如果不加:key,则在数据发生变化时,重新在vue实例中查找该对象,效率较低。

    11.跨域问题

       实现跨域有3中方案:Cors跨域、jsonP跨域和后台代理

      cors跨域是在后台引入cors模块将前端支持的域名地址更换添加进去,即可对支持的地址域名访问实现跨域

      JSONP实现跨域请求的原理简单的说,就是动态创建<script>标签,然后利用<script>的src 不受同源策略约束来跨域获取数据。

    12.cookie中的内容是否会存储在磁盘中?cookie和storage的适用场景

    当cookie设置了过期时间失效后,会存在磁盘中;当当前会话结束时,会将其存放在内存中

    浏览器通过http协议与服务器端进行cookie交互(cookie记录客户与服务器端的交互信息)

    存储大小:cookie<storage

    数据有效期:session在当前窗口关闭前有效;local存放在本地,始终有效,可以手动删除;在设置cookie的有效期前都是有效的,即使关闭窗口。

    作用域:session不在不同浏览器功效内容,即使是一个页面;而local和cookie在所有同源窗口都是共享的;

    web storage支持事件通知机制,可以将发生变化的数据更新给监听者;cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递。

    cookie存放在浏览器(客户端)session存放在服务器磁盘

    cookie一般是用来存储身份验证信息或者id;

    通常把一些通用的、频繁存取的、小数据量的跟用户相关的数据放入SEESION,如登录状态,用户身份信息,个性配置与权限列表还有通用数据(购物车信息之类的)

     13.前后联调的问题

        参数(前端作为主导,因为前端需要渲染页面,必须得先约定数据格式,避免重复让后端改格式影响后端开发效率,也同时避免影响整个项目的开发效率。),约定参数格式,比如:为某个帖子点赞的用户收集其id集合需要存放在数组中返回给前台,这样可以让后台形成自己管理格式的习惯,也方便数据取用

       模版语言用的不熟的问题,velocity、handlebars、underscore等

    14.js中异步操作有哪些

     1).定时器都是异步操作                 2).ajax请求              3).vuex中actions是异步操作方法          

  • 相关阅读:
    HRMSYS项目源码分析(二)
    HRMSYS项目源码分析(一)
    SQL类型转换以及自动在前面补0满足10位工号标示法
    android—资源文件(res)的引用
    SQL serve创建与调用存储过程
    .wsdl文件生成.cs文件
    android 文件操作类简易总结
    android EncodingUtils
    FTP创建与操作
    如何调试框架中的app
  • 原文地址:https://www.cnblogs.com/qingsui/p/12299042.html
Copyright © 2011-2022 走看看