面试=实录

2021-3-26面试真题

css做三角形–CSS做三角形
思路:border属性是一个个三角形构成的,把一个box的width和height设置为0,border设置为较大的值

	#out{
				width: 0px;
				height: 0px;
				border-width: 100px;
				border-style: solid;
				border-color: red magenta blue yellow;
				/* position: relative; */
			}

效果
在这里插入图片描述
只需要把其他三个边框宽度设置为透明–transparent,即可实现三角形

#out{
				width: 0px;
				height: 0px;
				border-width: 100px;
				border-style: solid;
				border-color: transparent transparent yellow;
				/* position: relative; */
			}

效果
在这里插入图片描述
如果实现一个带边框的三角形呢,思路是三角形的重叠,即一个大三角形里面装一个稍小的三角形

	#out{
				width: 0px;
				height: 0px;
				border-width: 100px;
				border-style: solid;
				border-color: transparent transparent blue ;
				position: relative;
			}
			#in{
				width: 0px;
				height: 0px;
				border-width: 0 90px 90px;
				border-style: solid;
				border-color: transparent transparent orange;
				position: absolute;
				top: 6px;
				left: -90px;
			}

效果
在这里插入图片描述
那么要 实现一个三角形箭头呢,思路是把里面的三角形继续往下移,再把里面三角形的颜色设置为白色(PS:白色不等于透明)

	#out{
				width: 0px;
				height: 0px;
				border-width: 100px;
				border-style: solid;
				border-color: transparent transparent blue ;
				position: relative;
			}
			#in{
				width: 0px;
				height: 0px;
				border-width: 0 90px 90px;
				border-style: solid;
				border-color: transparent transparent white;
				position: absolute;
				top: 15px;
				left: -90px;
			}

效果
在这里插入图片描述
若要绘制其他角度的三角形

#out{
				width: 0px;
				height: 0px;
				border-width: 100px 100px 100px 0;
				border-style: solid;
				border-color: transparent transparent red;
				position: relative;
			}

在这里插入图片描述

1.形如rgb(255,255,255)到十六进制(FFFFFF)
2.大驼峰到—下划线TodoItem变成todo-item

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
	</body>
	<script type="text/javascript">
		function toSnakeCase(str){
			//把字符串转换成一个数组
			var arr = Array.from(str)
			//循环这个数组,
			for(i = 0;i<arr.length;i++){
				//如果是大写转换成小写的
				if(IsUpper(arr[i])){
					let  lcode = arr[i].toLowerCase()
					arr[i] = lcode
					if(i>0){
						//在下标i处删除0个元素并且插入一个'-'
					arr.splice(i,0,"-")	
					}
				}	
			}
			var last=''
			for( j =0;j<arr.length;j++){
				//字符串的拼接
			    last +=arr[j]
			}
			console.log(last)
		}	
	//判断这个字母是不是大写的
	function IsUpper(code){
		return code === code.toUpperCase()
 }
toSnakeCase("TodoItem")
	</script>
</html>

最重要的是判断一个字母是不是大写 自定义了一个方法

function IsUpper(code){
		return code === code.toUpperCase()
 }

3.输入日期哪天到哪天返回一个数组 里面的元素是中间的那些天数 2019-03-12这样的看这个就够了
输入:开始时间:“2021-03-27”;结束时间:“2021-04-01”;思路是先把字符串转换成对应的日期,
通过getTime()方法判断两者之间的时间关系

	<script type="text/javascript">
		 var startTime = "2021-03-27"
		 var endTime = "2021-04-01"
        //把给定的日期字符串格式转换成对应的时间
		 function manageTime(str){
			 var timeArray = str.split('-')
			 //console.log(timeArray)
			 // var t= new Date()
			 // var sTime = t.setFullYear(timeArray[0],timeArray[1],timeArray[2]) 
			 //创建日期对象和设置时间有什么不同?---创建的对象可以用那些设置 获得日期的方法,设置时间就很单一????
			 var sTime = new Date(timeArray[0],timeArray[1],timeArray[2]) 
			 return sTime
		 }
		 var start = manageTime(startTime)
		 var end = manageTime(endTime)
		 //console.log(start.getFullYear())
		 var dateArr = []
		while(start<end){
			//console.log(55)
		    var y = start.getFullYear()
			var m = start.getMonth().toString().length<2?m ="0"+ start.getMonth():start.getMonth()
			var d = start.getDate().toString().length<2?m ="0"+ start.getDate():start.getDate()
			//console.log(y+"-"+m+"-"+d)
			dateArr.push(y+"-"+m+"-"+d)
			start.setDate(start.getDate() + 1)
			 //console.log(start)
		}
		console.log(dateArr)
		</script>

vuex
vue缺点和好处
mvvm

  1. 简述 MVVM
    MVVM 是 Model-View-ViewModel 的缩写。MVVM 是一种设计思想。Model 层代表数据模型,也可以在 Model 中定义数据修改和操作的业务逻辑;View 代表 UI 组件,它负责将数据模型转化成 UI 展现出来,ViewModel 是一个同步 View 和 Model 的对象。
    在 MVVM 架构下,View 和 Model 之间并没有直接的联系,而是通过 ViewModel 进行交互,Model 和 ViewModel 之间的交互是双向的, 因此 View 数据的变化会同步到 Model 中,而 Model 数据的变化也会立即反应到 View 上。
    ViewModel 通过双向数据绑定把 View 层和 Model 层连接了起来,而View 和 Model 之间的同步工作完全是自动的,无需人为干涉,因此开发者只需关注业务逻辑,不需要手动操作DOM, 不需要关注数据状态的同步问题,复杂的数据状态维护完全由 MVVM 来统一管理。

作者:养乐多__
链接:https://www.jianshu.com/p/bcad6a5a6b9c
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
防抖节流
居中的方法
守卫
项目中做了什么
访问后台的方法自己封装过没有
vue组件传值
vue操作DOM
ES6
let const
箭头函数
解构赋值
…扩展运算符
Promise
语法同class类

2021-3-29线上面试

vue父子组件传值
vuex
介绍自己项目中的东西 做了什么事
路由守卫
冒泡
请求 响应包含了哪些重要字段
vue组件复用的例子
学校获得的奖励
自己的学习途径 看视频?
nodejs
cookie localstorage sessionstorage 说说这些东西

2021-3-31面试

第一家
第二家(笔试10道,说我不符合要求让走了)

1.一道css 题 判断背景色是什么颜色

<style type="text/css">
   		.100{
   			height: 10px;
   			background-color: green;
   		}
   	 	#200{
   			height: 10px;
   			
   			background-color: red;
   			
   		} 
   	
   	</style>
   </head>
   <body>
   	<div class="100" id="200" >good</div>
   </body>

问背景色 是什么颜色?我答:显示颜色;红色 因为我觉得id选择器的优先级高于class ,但是实际上是不显色;因为 id和class不能用数字开头来命名
2.行内元素有哪些?块级元素有哪些?
行内元素11个:a b span input i strong em select textarea label img button
块元素9个:div p h1-h6 ol ul dl li dt dd blockquote
3.cookie sessionstorage localstorage区别
详细阐述,都是作为浏览器缓存的,cookie存放数据大小限制在4kb,条数为20条,参与与服务器的通信,可以设置过期时间,在HTTP发送请求的时候作为响应头的一部分,优点:具有极高的扩展性和可用性,缺点是数量和存数据大小的限制,安全性问题,如果cookie被拦掉了,就会被盗取session信息,cookie具有路劲的概念,可以将其限制在某个路劲下,sessionstorage:大小为5M,不参与和服务器的通信,数据仅仅保存在页面存在的未关闭的这一段时间,具有方法clear()、getItem()、setItem()、removeItem()、key(index)localstorage;存数据量大5M,不参与和服务器的通信,同样拥有那几个方法,一直到永久有效,除非removeItem删除。
在这里插入图片描述
作用域不同:sessionstorage不在不同的窗口共享;local storage在所有同源窗口共享;cookie也是在所有同源窗口共享;
cookie包括名字 值 过期时间 路劲和域
4.vue生命周期函数 哪个阶段完成DOM渲染
11个:boforeCreate、created、beforeMount、mounted、beforeUpdate、updated、activated、deactivated、beforeDestroy、destroyed、errorCaptured;mounted后完成DOM渲染
5.vue双向绑定的原理,改变数组元素的一个值怎么改的?
vue双向绑定是通过数据劫持结合发布者-订阅者模式实现的。其核心是Obejict.defineProperty()方法。有3个参数(obj,pro,des)分别表示当前对象,当前对象的属性名,具体的操作,当obj.por时调用了他的get方法,当obj.pro="lisi"时调用了里面的set方法。
在这里插入图片描述

6.vue父子组件传值
父传子:子组件的props里接收;子传父 子组件通过this. e m i t ( " b u s e v e n t " , a ) 发 送 时 间 名 和 数 据 父 组 件 通 过 @ b u s e v e n t 来 接 收 数 据 7. v u e 的 emit("busevent",a)发送时间名和数据父组件通过@busevent来接收数据 7.vue的 emit("busevent",a)@busevent7.vuenextTick是啥–nextTick
简单说:就是需要DOM更新后才能执行的函数,Vue 实现响应式并不是数据发生变化之后 DOM 立即变化,而是按一定的策略进行 DOM 的更新。简单来说,Vue 在修改数据后,视图不会立刻更新,而是等同一事件循环中的所有数据变化完成之后,再统一进行视图更新。

//改变数据
vm.message = 'changed'

//想要立即使用更新后的DOM。这样不行,因为设置message后DOM还没有更新
console.log(vm.$el.textContent) // 并不会得到'changed'

//这样可以,nextTick里面的代码会在DOM更新后执行
Vue.nextTick(function(){
    console.log(vm.$el.textContent) //可以得到'changed'
})

showsou(){
  this.showit = true
  this.$nextTick(function () {
    // DOM 更新了
    document.getElementById("keywords").focus()
  })
}

理解:nextTick()是将回调函数延迟在下一次dom更新数据后调用,即当数据更新了在DOM中渲染后自动执行该函数**。因为Vue中DOM更新是异步的**

<div class="app">
  <div ref="msgDiv">{{msg}}</div>
  <div v-if="msg1">Message got outside $nextTick: {{msg1}}</div>
  <div v-if="msg2">Message got inside $nextTick: {{msg2}}</div>
  <div v-if="msg3">Message got outside $nextTick: {{msg3}}</div>
  <button @click="changeMsg">
    Change the Message
  </button>
</div>
--js
new Vue({
  el: '.app',
  data: {
    msg: 'Hello Vue.',
    msg1: '',
    msg2: '',
    msg3: ''
  },
  methods: {
    changeMsg() {
      this.msg = "Hello world."
      this.msg1 = this.$refs.msgDiv.innerHTML
      this.$nextTick(() => {
        this.msg2 = this.$refs.msgDiv.innerHTML
      })
      this.msg3 = this.$refs.msgDiv.innerHTML
    }
  }
})

结果
点击前
在这里插入图片描述
点击后
在这里插入图片描述
如果想要操作一个DOM,比如获得DOM元素的高宽内容等,必须放在$nextTick()里,因为这个函数代表DOM更新后才会执行。
8.sass 绑定两个颜色 一个显示亮度 一个显示透明度
??????不懂什么意思。。。。。
9.1px 1rem 1vh 1vw 1em代表什么?
1px是像素单位,相对于屏幕分辨率而言
1rem相对根元素html,一般做法是给根元素字体设置一个大小(默认是16px),那么5rem就代表80px(5rem x 16)
1vh 1vw viewport视窗;1vh 代表占1%的屏幕高度,50vh表示高度是屏幕的50%
1em相对于父元素字体大小,width、height、margin、padding相对于本身的大小,意思是如果父元素字体是30px;那么10em表示300px;如果这个元素本身设置了字体大小是20px;那么10em表示的是200px.
10. vue的修饰符各代表什么?
事件修饰符
.stop–<a v-on:click.stop="doThis"></a>阻止单击事件继续传播
.prevent–<form v-on:submit.prevent="onSubmit"></form>提交事件不再重载页面
.once–<a v-on:click.once="doThis"></a>点击事件之会触发一次
.capture–<div v-on:click.capture="doThis">...</div>添加事件监听器时使用事件捕获模式,内部元素触发的事件先在此处理,然后才交由内部元素处理。
.self–<div v-on:click.self="doThat">...</div>只当在event.target是当前元素自身时触发处理函数,即事件不是从内部元素触发的。
.passive–<div v-on:scroll.passive="onScroll">...</div> 滚动事件的默认行为(滚动行为)将会立即触发,而不会等待onScroll完成,尤其能够提升移动端的性能。此外还有案件按键修饰符、系统修饰符等

2021-4-2面试

你觉得自己的优势在哪里?
jQuery请求到数据怎么渲染?
登录界面 管理员和普通用户 用路由实现 两个切换
computed和watch区别
路由守卫方面的
元素居中
jQuery的字符串拼接
vue双向绑定原理 2.0 和3.0
另一个面试问 增加功能怎么增加 他说开个插槽就行。

2021-4-7面试

上机做了一个网页,然后开始面试
响应式布局
分三步:1、页面的<head>里面有个<meta>标签。一般vscode都自己加上了 。这里面的代码 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">2、设计你的css。3、. 通过媒介查询来设置样式 Media Queries @media screen and (max-width: 980px) { #head { … } #content { … } #footer { … } }
小写怎么转大写–两种方式
toUpperCase()、toLocaleLowerCase()
字符串变成一个数组
split() 另外数组变成字符串 join()
数组排序
sort() 但有问题是 23 比 100大 因为默认排序顺序为按字母升序。解决办法是写一个比对函数
升序

var points = [40,100,1,5,25,10];
points.sort(function(a,b){return a-b});
输出结果--1,5,10,25,40,100

降序

var points = [40,100,1,5,25,10];
points.sort(function(a,b){return b-a});
输出结果--100,40,25,10,5,1

css动画–说出里面的属性
animation-name
animation-duration
animation-iterration-count:3 (infinite)
animation-direction --normal or reverse or alternate alternate-reverse

性能优化

第一次加载后以后加载变快是为什么?浏览器缓存的几种
变量提升 函数提升
在ES6之前 函数作用域就是没有块作用域一说。只有全局作用域和函数作用域。引擎在加载JS时分为两个步骤:第一步是读取JS代码,把变量声明和函数声明提升到全局作用域的顶端,即所谓的变量提升和函数提升。重点是只是提升声明而不会赋值。第二部:从上往下执行代码。函数提升优先变量提升,所以同名的函数和变量。函数在上面。

console.log(fs)
		console.log(fs())
	
		var fs = 9
		function fs () {
			var a
			console.log(a)
			a = 10
			console.log(a)
		}

结果是
在这里插入图片描述
解释:函数提升优先于变量提升。所以这里打印的fs是函数题 而不是 9 接着在console.log(fs())先执行fs()依次打印undefined 和 10 接着打印 console.log(fs())由于函数没有return 即没有返回值 。所以 打印结果undefined
如果

	console.log(fs)
		console.log(fs())
	
		var fs = 9
		function fs () {
			var a
			console.log(a)
			a = 10
			console.log(a)
			return 90--有返回值 
		}

结果
在这里插入图片描述

苹果新的图片格式,优缺点
HR
离职原因
工作强度大不大 压力大不大 未来规划 公司几个前端

2021-4-8面试

这个面试很快扑街–
组件的继承
什么是节点
什么是dom
插槽是啥
一个组件封装后,怎么跟其他的区分开来
vue的component是什么组成的。script里面可以干嘛 数据放在哪里的
怎么找到一个节点
script为什么放在后面?放在前面会怎么样?

2021-4-13面试真题

微信支付功能 前端有个签名
地图功能
省市区 三级联动官方博客
这篇可以实现,上面的报错
针对vue项目里,通过Element-ui来实现这个功能
步骤:
1.安装 element-ui 和插件

npm i  vue-area-linkage area-data 
yarn add vue-area-linkage area-data

2.在main.js里依赖注入

import VueArealinkage from 'vue-area-linkage';
Vue.use(VueArealinkage);

3.在需要的.vue文件了

<template>
  <div>
    <div class="test">
      <div class="area">
        <area-select
          type="all"
          :placeholders="placeholders"
          :level="2"
          @change="gg"
          v-model="selected"
          :data="pcaa"
        >
        </area-select>
      </div>
    </div>
  </div>
</template>
<script>
// 根据需要按需引入数据
import "vue-area-linkage/dist/index.css";
import { AreaSelect } from "vue-area-linkage";
import AreaData from "area-data";
import {pcaa} from "area-data";
export default {
  component: {
    AreaSelect,
  },
  data() {
    return {
      pcaa: pcaa,
      placeholders: [" ", " ", " "],
      selected: [],
    };
  },
  methods: {
    gg() {
      console.log(this.selected);
    },
  },
};
</script>

最终效果
在这里插入图片描述

三级菜单
bootstrap 的版本 维护需要
跨域
vue跨域怎么处理参考
三种方法:
1.后台更改header
header(‘Access-Control-Allow-Origin:*’);//允许所有来源访问
header(‘Access-Control-Allow-Method:POST,GET’);//允许访问的方式
2.使用JQuery提供的jsonp (注:vue中引入jquery,自行百度)
methods: {
getData () {
var self = this
$.ajax({
url: ‘http://f.apiplus.cn/bj11x5.json’,
type: ‘GET’,
dataType: ‘JSONP’,
success: function (res) {
self.data = res.data.slice(0, 3)
self.opencode = res.data[0].opencode.split(’,’)
}
})
}
}
3.脚手架项目里
使用http-proxy-middleware 代理解决(项目使用vue-cli脚手架搭建)
例如请求的url:“http://f.apiplus.cn/bj11x5.json”

1、打开config/index.js,在proxyTable中添写如下代码:

proxyTable: { 
  '/api': {  //使用"/api"来代替"http://f.apiplus.c" 
    target: 'http://f.apiplus.cn', //源地址 
    changeOrigin: true, //改变源 
    pathRewrite: { 
      '^/api': 'http://f.apiplus.cn' //路径重写 
      } 
  } 
}

使用axios请求数据时直接使用“/api”:

getData () { 
 axios.get('/api/bj11x5.json', function (res) { 
   console.log(res) 
 })

通过这中方法去解决跨域,打包部署时还按这种方法会出问题。解决方法如下:

let serverUrl = '/api/'  //本地调试时 
// let serverUrl = 'http://f.apiplus.cn/'  //打包部署上线时 
export default { 
  dataUrl: serverUrl + 'bj11x5.json' 
}

vue全家桶有哪些
vue + vuex + axios + vue-router + element-ui
vuex是啥 哪些数据用到了
es6
canvas
echarts
计算属性computed和侦听属性的区别watch
计算属性是依赖的值改变会重新执行函数,计算属性是取返回值作为最新结果,所以里面不能异步的返回结果。不能写异步逻辑。
侦听属性是侦听的值改变会重新执行函数,将一个值重新赋值作为最新结果,所以赋值的时候可以进行一些异步操作;watch函数适用于,当数据发生变化时,执行异步操作或较大开销操作的情况
小程序生命周期、
vue生命周期
和模型 怪异盒模型
CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实际内容
不幸的是,IE5.X 和 6 在怪异模式中使用自己的非标准模型。这些浏览器的 width 属性不是内容的宽度,而是内容、内边距和边框的宽度的总和。
前端还要验证token的真实性
webpack的配置
权限控制

jQuery熟练吗
小程序里做了哪些页面、
缓存的三大 cookie有效时间 local storage安全吗
当浏览器关闭(不是浏览器标签页,而是整个浏览器) 后,此cookie失效。到现在为止,所有的cookie都是单会话cookie,即浏览器关闭后这些cookie将会丢失;expiress设置过期时间
兼容性怎么做的 兼容ie几?
响应式布局 她提到弹性盒
简历我写的github问 熟练吗 我说用的是码云

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值