• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

面试题

互联网 diligentman 2周前 (04-08) 7次浏览

面试题

  • vue
    • vue的特点是什么?
    • vue中父子组件是如何传值的?
      • 组件传值–父组件向子组件传值
      • 子组件通过事件调用向父组件传值
    • v-show和v-if指令的共同点和不同点?
    • 说出几种vue当中的指令和它的用法?
      • 1.v-model双向数据绑定
      • 2.v-for循环
      • 3.v-show 显示与隐藏
      • 4.v-on事件
      • 5.v-once只绑定一次
    • vue-loader是什么? 使用它的用途有哪些?
    • axios是什么? 怎么使用?
    • 单页面应用和多页面应用区别及优缺点
    • 简述一下vue常用的修饰符和作用?
    • 谈谈你对MVVM开发模式的理解
    • 前端如何优化网站性能?
    • vue中样式绑定语法
    • 写出3个使用this的典型应用
      • 1)、在htm|元素事件属性中使用,如: .
      • 2)、构造函数
      • 3)、input点击, 获取值
    • 简述vue中每个生命周期具体适合哪些场景?
    • 如何避免毁掉地狱?
    • 使用NPM有哪些好处?
    • 请描述一下cookies, sessionStorage 和localStorage的区别?
    • 跳转页面
  • css
    • 介绍一下标准的CSS的盒子模型? 与低版本IE的盒子模型有什么不同的?
    • CSS选择器有哪些?哪些属性可以继承?
    • CSS3有哪些新特性?
    • js 字符串操作函数?
    • 怎样添加、移除、移动、复制、创建和查找节点?
      • 1)创建新节点
      • 2)添加、移除
      • 3)查找
    • GET和POST的区别,何时使用POST?
    • 正则表达式
  • js
    • JavaScript 的typeof返回哪些数据类型?
    • 例举至少3种强制类型转换和2种隐式类型转换?
      • 1.强制类型转换:
      • 2.隐式类型转换:
    • JavaScript的事件流模型都有什么?
    • 请简述AJAX及基本步骤?
    • HTTP 状态消息200 302 304 403 404 500分别表示什么?

vue

vue的特点是什么?

1.国人开发的一个轻量级框架。

2.双向数据绑定,在数据操作方面更为简单。

3.视图,数据,结构分离,不需要进行逻辑代码的修改,只需要操作数据就能完成相关操作。

4.组件化,方便封装和复用

5.虚拟DOM: dom操作是非常耗费性能的,不再使用原生的dom操作节点, 极大解放dom操作

vue中父子组件是如何传值的?

组件传值–父组件向子组件传值

第一步:父组件 在引用子组件时,通过属性绑定(v-bind:)的形式,把需要传递给子组件的数据,传递到子组件内部,供子组件使用 

第二步:把父组件传递过来的数据, 在 props数组 中定义一下

组件中的 所有props 中的数据,都是通过父组件传递给子组件的

 props 中的数据都是只读的,无法重新赋值

第三步:在该子组件中使用props数组 中定义好的数据

子组件通过事件调用向父组件传值

在子组件中,利用  $emit  触发 父组件传递过来的方法的时候,可以将子组件的数据当做参数传递给父组件

详情请点击

v-show和v-if指令的共同点和不同点?

共同点:都能控制元素的显示和隐藏。

不同点:实现本质方法不同。
v-show本质就是通过控制css中的display设置为none,控制隐藏,只会编译一次;
v-if是动态的向DOM树内添加或者删除DOM元素,若初始值为false, 就不会编译了。而且v-if不停的销毁和创建比较消耗性能。

说出几种vue当中的指令和它的用法?

1.v-model双向数据绑定

<input type="text" v-model="msg"/>

2.v-for循环

<div id="box">

    <ul>

            <li v-for="item in arr">

                <span>{item.name}</span>

                <span>{item.age}</span>

            </li>

    </ul>

</div>

<script src="text/JavaScript">

    new Vue({

            el:"#box",

            data(){

                return(){

                    arr:[

                                {"name":"yifengchun","age":18},

                                 {"name":"yifengchun","age":18},

                                 {"name":"yifengchun","age":18},

                                 {"name":"yifengchun","age":18}

                            ]

                }

            }

    })

</script>

3.v-show 显示与隐藏

<div id="box">

    <div style="width:100px;height:100px;border:1px solid red;display:none" v-show="show"></div>

</div>

<script>

    new Vue({

            el: "#box",

            data(){

                return {

                    show: true

                }

            }

        })

</script>

4.v-on事件

<div id="box">

    <button v-on:click="say">按钮</button>

</div>按钮-->

<script>

new Vue({

        el: "#box",

        data(){

            return {}

        },

        methods: {

            say() {

                alert(111);

            }

        }

    })

</script>

5.v-once只绑定一次

vue-loader是什么? 使用它的用途有哪些?

vue文件的一个加载器,将template/js/style转换成js模块。
 用途: js可以写es6、 style样式可以scss或less、template可以加jade

axios是什么? 怎么使用?

答:请求后台资源的模块。
npm install axios -save装好,js中使 用import进来,然后.get或.post。返回在.then函数中如果成功,失败则是在.catch函数中。
详情

单页面应用和多页面应用区别及优缺点

答:页面应用(SPA) ,通俗一点说就是指只有一个项面的应用,浏览器一开始要加载所有必须的html, js,css。所有的页面内容都包含在这个所谓的主页面中。但在写的时候,还是会分开写(页面片段),然后在交互的时候由路由程序动态载入。

多页面(MPA) ,就是指一个应用中有多个页面,页面跳转时是整页刷新。

页面的优点:用户体验好,快,内容的改变不需要重新加载整个页面,基于这一点spa对服务 器压力较小;前后端分离;页面效果会比较炫酷(比如切换页面内容时的专场动画)。

单页面缺点:不利于seo; 导航不可用,如果一定要导航需要自行实现前进、后退。

简述一下vue常用的修饰符和作用?

.stop:等同于JavaScript中的event.stopPropagation(防止事件冒泡);

.prevent:等同于JavaScript中的event.preventDefault), 防止执行预设的行为(如果事件可取消,则取消该事件,不停止事件的进一步传播) ;

.capture: 与事件冒泡的方向相反,事件捕获由外到内;

.self:只会触发自己范围内的事件,不包含子元素;

.once:只会触发一次。

谈谈你对MVVM开发模式的理解

MVVM分为Model、View、 ViewModel三者。

●Model: 代表数据模型,数据和业务逻辑都在Model层中定义; .

●View: 代表U|视图,负责数据的展示; .

●ViewModel: 负责监听Model中数据的改变并且控制视图的更新,处理用户交互操作;

Model和View并无直接关联,而是通过Vi ewModel来进行联系的,Model和ViewModel之间有着双向数据绑定的联系。因此当Mode1中的数据改变时会触发Vi ew层的刷新,View中由于用户交互操作而改变的数据也会在Model中同步。

这种模式实现了Model和View的数据自动同步,因此开发者只需要专注对数据的维护操作即可,而不需要自己操
作dom。

MVC全名是Model View Controller,模型(Model)、视图(View)和控制器(Controller)

前端如何优化网站性能?

1、减少HTTP请求数量

在浏览器与服务器进行通信时,主要是通过HTTP 进行通信。浏览器与服务器需要经过三次握手,每次握手需要花费大量时间。而且不同浏览器对资源文件并发请求数量有限(不同浏览器允许并发数), 一-旦HTTP 请求数量达到一定数量,资源请求就存在等待状态,这是很致命的,因此减少HTTP 的请求数量可以很大程度上对网站性能进行优化

可以通过精灵图、合并css和js文件、 懒加载等方式来减少http请求。
CSS Sprites

国内俗称CSS精灵,这是将多张图片合并成一张图片达到减少HTTP请求的一种解决方案,可以通过CSS的background属性来访问图片内容。这种方案同时还可以减少图片总字节数。

合并CSS和JS文件

现在前端有很多工程化打包工具,如: grunt、gulp、webpack等。 为了减少HTTP 请求数量,可以通过这些工具再发布前将多个CSS或者多个JS合并成一个文件。

采用lazyLoad

俗称懒加载,可以控制网页上的内容在一开始无需加载, 不需要发请求,等到用户操作真正需要的时候立即加载出内
容。这样就控制了网页资源一次性请求数量。

2、控制资源文件加载优先级

浏览器在加载HTML内容时,是将HTML内容从上至下依次解析,解析到link或者script标签就会加载href或者src对应链接内容,为了第一时间展示页面给用户,就需要将CSS提前加载,不要受JS加载影响。一般情况下都是CSS在头部,JS在底部。

3、利用浏览器缓存

浏览器缓存是将网络资源存储在本地,等待下次请求该资源时,如果资源已经存在就不需要到服务器重新请求该资源,
直接在本地读取该资源。

4、减少DOM操作(vue这种减少操作DOM)
5、图标使用IconFont替换image标签

vue中样式绑定语法

1.对象方法v-bind:class="{' orange' :isRipe, ' green' :isNotRipe}"

2.数组方法v-bind:class=" [class1,class2]"

3.行内v-bind:style=" {color :color , fontsize:fontsize+'px'}"

写出3个使用this的典型应用

1)、在htm|元素事件属性中使用,如: .

<input type=“button” οnclick=”showInfo(this);”value=“点击一下”/>

2)、构造函数

function Animal(name, color) {
this.name = name;
this.color = color ;

3)、input点击, 获取值

<input type="button"  id="text" value="点击一下" />
<script type="text/javascript">
var btn = document . getElementById("text");
btn. onclick = function() {}
</script>

简述vue中每个生命周期具体适合哪些场景?

beforeCreate: 在new一个vue实例后,只有一 些默认的生命周期钩子和默认事件,其他的东西都还没创建。在beforeCreate生命周期执行的时候, data和methods中的数据都还没有 初始化。不能在这个阶段使用data中的数据和methods中的方法

created: data和methods都已经被初始化好了,如果要调用methods中的方法,或者操作data中的数据,最早可以在这个阶段中操作

beforeMount:执行到这个钩子的时候,在内存中已经编译好了模板了,但是还没有挂载到页面中,此时,页面还是旧的

mounted:执行到这个钩子的时候,就表示Vue实例已经初始化完成了。此时组件脱离了创建阶段,进入到了运行阶段。如果我们想要通过插件操作页面上的DOM节点,最可以在和这个阶段中进行

beforeUpdate:|当执行这个钩子时,页面中的显示的数据还是旧的,data中的数据是更新后的,页面还没有和最新的数据保持同步
updated :页面显示的数据和data中的数据已经保持同步了,都是最新的

beforeDestory Vue实例从运行阶段进入到了销毁阶段,这个时候上所有的data和methods,指冷,过滤器…都是处于可用状态。还没有真正被销毁

destroyed这个时候上所有的data和methods,指令,过滤器…都是处于不可用状态,组件已经被销毁了。

如何避免毁掉地狱?

●模块化:将回调函数转换为独立的函数

●使用流程控制库,例如[aync]

●使用Promise

●使用aync/await

使用NPM有哪些好处?

1、通过NPM,你可以安装和管理项目的依赖,并且能够指明依赖项的具体版本号。

2、对于Node应用开发而言,你可以通过package. json文件来管理项目信息,配置脚本,以及指明依赖的具体版本

3、npm install xx -S和npm install -D的命令含义

4、npm uninstall xx是什么意思

5、项目转换的时候,不会把node_ modules包发过去,那么你拿到没有nodeModules目录的项目怎么让它跑起来
(npm install安装所有的依赖)

请描述一下cookies, sessionStorage 和localStorage的区别?

cookie是网站为了标示用户身份而储存在用户本地终端(Client Side). 上的数据(通常经过加密)。

cookie数据始终在同源的http请求中携带(即使不需要),记会在浏览器 和服务器间来回传递。

sessionStorage和1ocalStorage不会自动把数据发给服务器,仅在本地保存。

存储大小:
cookie数据大小不能超过4k.

sessionStorage和localStorage虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。
有期时间:
localStorage
存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;

sessionStorage数据 在当前浏览器窗口关闭后自动删除。

cookie
设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭

跳转页面

1:router-link跳转

<!-- 直接跳转 -->
<router-link to='/testDemo'>
 <button>点击跳转2</button>
</router-link>
  
<!-- 带参数跳转 -->
<router-link :to="{path:'testDemo',query:{setid:123456}}">
 <button>点击跳转1</button>
</router-link>
  
<router-link :to="{name:'testDemo',params:{setid:1111222}}">
 <button>点击跳转3</button>
</router-link>

2:this.$router.push()

<template>
 <div id='test'>
 <button @click='goTo()'>点击跳转4</button>
 </div>
</template>
<script>
 export default{
 name:'test',
 methods:{
 goTo(){
 //直接跳转
 this.$router.push('/testDemo');
  
 //带参数跳转
 this.$router.push({path:'/testDemo',query:{setid:123456}});
 this.$router.push({name:'testDemo',params:{setid:111222}});
 }
 }
 }
</script>

详情

css

介绍一下标准的CSS的盒子模型? 与低版本IE的盒子模型有什么不同的?

标准盒子模型:宽度=内容的宽度(content) + border + padding + margin

低版本IE盒子模型:宽度=内容宽度(content+ border+padding) + margin

用来控制元素的盒子模型的解析模式,默认为content -box

context -box: W3C的标准盒子模型,设置元素的height /width属性指的是content部分的高/宽

border-box: IE传统盒子模型。设置元素的hei ght/wi dth属性指的是border + padding + content部分的高/宽

CSS选择器有哪些?哪些属性可以继承?

CSS选择符: id选择器( #myid)、类选择器( . myclassname)、标签选择器(div, h1,p)、 相邻选择器(h1 +p)、子选择器(ul > li)、
后代选择器(li a)、通配符选择器 (*)、属性选择器 (a[rel=“external”]) 、伪类选择器(a: hover,li :nth-child)

可继承的属性: font-size,font-family, color

不可继承的样式: border ,padding, margin, width,height

优先级(就近原则):!important>[id>class>tag]
! important比内联优先级高

CSS3有哪些新特性?

background-image background-origin(content -box/ paddingbox/bor der-box) background-size

background-repeat

word-wrap (对长的不可分割单词换行) word-wrap: break-word 

文字阴影: text-shadow:
5px 5px 5px #FF0000; (水平阴影,垂直阴影,模糊距离,阴影颜色)

font-face属性:定义自己的字体

圆角(边框半径) : border-radius属性用于创建圆角

边框图片: border-image: url(border.png) 30 30 round

盒阴影: box-shadow: 10px 10px 5px #888888

媒体查询:定义两套css,当浏览器的尺寸变化时会采用不同的属性

js 字符串操作函数?

concat()-将两个或多个字符的文本组合起来,返回一个新的字符串。

indexOf)-返回字符串中一个子串第一处出现的索引。 如果没有匹配项,返回-1。

charAt)-返回指定位置的字符。

lastlndexOf()-返回字符串中一个子串最后一处出现的索引, 如果没有匹配项,返回-1。

substr()函数-返回从string的startPos位置,长度为length的字符串

slice()-提取字符串的一部分,并返回一个新字符串。

replace()-用来查找匹配一个正则表达式的字符串,然后使用新字符串代替匹配的字符串。

split()-通过将字符串划分成子串,将一个字符串做成一 个字符串数组。

length-返回字符串的长度,所谓字符串的长度是指其包含的字符的个数。

toLowerCase()-将整个字符串转成小写字母。

toUpperCase()-将整个字符串转成大写字母。

详情

怎样添加、移除、移动、复制、创建和查找节点?

1)创建新节点

createElement() //创建一个具 体的元素

2)添加、移除

appendChild() /添加
removeChild() //移除

3)查找

document.getElementsByTagName() //通过标签名称获取的是数组

document.getElementsByName() //通过元素的Name属性的值

document.getElementByld) //通过元素ld,唯-性

document.querySelector(#id')查找元素唯一性

document.querySelectorAl( #id)查找元素获取的是数组

GET和POST的区别,何时使用POST?

GET和POST的区别:

GET: 一般用于查询数据,使用URL传递参数,由于浏览器对地址栏长度有限制,所以对使用get方式所发送信息的数量有限制,同时浏览器会记录(历史记录,缓存)中会保留请求地址的信息,包括地址后面的数据。
get 只能发送普通格式(URL 编码格式)的数据。

POST: 一般用于向服务器发送数据,对所发送的数据的大小理论上是没有限制,浏览器会缓存记录地址,但是不会记录post提交的数据。post 可以发送纯文本、URL编码格式、 二进制格式的字符串,形式多样。

在以下情况中,请使用POST请求:
1.以提交为目的的请求(类似语义化, get 示请求, post 表示提交) ; .
2.发送私密类数据(用户名、密码) (因为浏览器缓存记录特性) ;
3.向服务器发送大量数据(数据大小限制区别) ;
4.上传文件图片时(数据类型区别) ;
面试题

正则表达式

详情

js

JavaScript 的typeof返回哪些数据类型?

alert(typeof null); // object

alert(typeof undefined);  // undefined

alert( typeofNaN); // number

alert(NaN == undefined);// false

alert(NaN == NaN);// false

var str ="123abc"
alert(typeof str++); // number

alert(str); // NaN

例举至少3种强制类型转换和2种隐式类型转换?

1.强制类型转换:

明确调用内置函数,强制把一种类型的值转换为另-种类型。强制类型转换主要有:
Boolean、Number、String、 parselnt、 parseFloat

2.隐式类型转换:

在使用算 术运算符时,运算符两边的数据类型可以是任意的,比如,一个字符串可以和数字相加。之所以不同的数据类型之间可以做运算,是因为JavaScript引擎在运算之前会悄悄的把他们进行了隐式
类型转换。隐式类型转换主要有: +、一、==、 !

JavaScript的事件流模型都有什么?

事件流描述的是从页面中接收事件的顺序。DOM 结构是树形结构,页面中的某一个元素触发了某个一 个事件,事件会从最顶层的window对象开始,向下传播到目标元素,途径的祖先节点都会触发对应的事件,如果当前节点的该事件绑定了事件处理函数的话,则会执行该函数当事件达到目标元素并执行绑定函数(如果有绑定的话)后,事件又会向.上传播到window元素,途径的祖先节点都会触发对应的事件(如果绑定事件处理函数的话)

事件流包含三个阶段:
●事件捕捉阶段
●处于目标阶段
●事件冒泡阶段
事件捕捉阶段:事件开始由顶层对象触发,然后逐级向下传播,直到目标的元素;
处于目标阶段:处在绑定事件的元素上;
事件冒泡阶段:事件由具体的元素先接收,然后逐级向上传播,直到不具体的元素;|

请简述AJAX及基本步骤?

建议回复:
简述AJAX: AJAX即"Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

AJAX基本步骤:
1.初始化ajax对象
2.连接地址,准备数据
3.发送请求
4.接收数据(正在接收,尚未完成)
5.接收数据完成
//初始化ajax对象var xhr =new XMLHttpRequest(); //连接地址,准备数据; xhr . open("方式”,"地址”,是否为异步); //接收数据完成触发的事件 xhr . onload =function(){}~//发送数据“xhr .send();

HTTP 状态消息200 302 304 403 404 500分别表示什么?

●200:请求已成功,请求所希望的响应头或数据体将随此响应返回。

●302:请求的资源临时从不同的URI响应请求。由于这样的重定向是临时的,户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。

●304:如果客户端发送了一个带条件的GET请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。304响应禁止包含消息体,因此始终以消息头后的第一个空行结尾。

●403: 服务器已经理解请求,但是拒绝执行它。

●404:请求失败,请求所希望得到的资源未被在服务器上发现。

●500:服务器遇到了-个未曾预料的状况,导致了它无法完成对请求的处理。一 般来说,这个问题都会在服务器端的源代码出现错误时出现。


程序员灯塔
转载请注明原文链接:面试题
喜欢 (0)