你好呀,我是wangly,一名下班摸鱼的前端老倒霉蛋了。受疫情影响,今年初中级岗位广泛少了好多,此时的我已经抱着手机留下了悲痛的泪水。先来讲下个人故事吧。而后在总结下对线复盘。javascript
我是今年2020届的专科应届生,已经有实习一年的经历,大厂进不去,小厂压价格,在如今公司15我的的Team担任前端工程师,对公司项目进行协同开发和独立完成。天天下班都会在想之后的发展,原本已经作好的跳槽计划也被一只蝙蝠的故事给打乱了。 之因此萌生跳槽的想法是由于如今公司的业务和个人成长到达了一个须要寻找突破的时候,再加上自己城市并非互联网很是发达,经济也不是很是景气。慢慢的接触了一些电话面试,可无奈于本身专科的学历,并无多少好的机会。个人目标很简单,找一家有本身产品的,有经营计划的公司。可无奈于现实就是如此,不是你不够优秀,而是还优秀不到让别人注意到你。 2020年的目标是: 在一线找一家有本身产品的公司稳定下来,沉淀本身。css
总体都在追问或者被追问的状况下。面试精心动魄。像极了当年的Ryu被丝血反杀。对线时长2个小时15分钟,白嫖水三杯,糕点一盘。html
面试过程分为笔试和面试两个阶段,笔试考察一些手写代码和理解,面试考察了一些业务场景和怼项目。很是的细致,前端
笔试题目很简单,无非就是一些基础的手写代码和常识问题。但若是没有系统过很是容易挂科。java
// DOM 结构
<div class="container">
<div class="aside">left</div>
<div class="section">right</div>
</div>
// Style样式
.container {
display: flex;
}
.container .aside {
flex: 0 0 200px;
}
.container .section {
flex: 1;
}
复制代码
// DOM结构
<div class="container">
<div class="box"></div>
</div>
// 方案一:flex方案
.container {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.container .box {
background: red;
min-width: 100px;
min-height: 100px;
}
// 方案二:position方案
.container {
width: 100%;
height: 100%;
position: relative;
}
.container .box {
background: red;
min-width: 100px;
min-height: 100px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
复制代码
// 考察了css伪类的使用
// DOM
<ul class="list">
<li class="item">1</li>
<li class="item">2</li>
<li class="item">3</li>
<li class="item">4</li>
<li class="item">5</li>
</ul>
// Style
.list > .item:not(:first-child):not(:last-child) {
/* ... style */
}
复制代码
答:JavaScript钟分为基础类型和引用类型,分别是:ios
// @function foo
function foo(i) {
try {
if (i === 1) {
return i
}
} catch (error) {
return 0
} finally {
++i
return i
}
}
// @console
console.log(foo(1))
复制代码
答:2git
原始数组:[1, 4, 10, 2, 5, 18, 14] 答:github
// @function bubble
function bubble(arr, state) {
const len = arr.length
let template
for (let i = 0; i < len; i++) {
for (let j = i + 1; j < len; j++) {
if (state === 'up') {
if (arr[i] < arr[j]) {
template = arr[i]
arr[i] = arr[j]
arr[j] = template
}
}
if (state === 'down') {
if (arr[i] > arr[j]) {
template = arr[i]
arr[i] = arr[j]
arr[j] = template
}
}
}
}
return arr
}
// @console
console.log(bubble([1, 4, 10, 2, 5, 18, 14], 'down'))
复制代码
var name = 'zangsan';
(function () {
console.log(name)
name = 'Lisi'
console.log(window.name)
var name = 'wangwu'
console.log(name)
})();
复制代码
答: undefined > zangsan > wangwuweb
答:面试
// @promise function
function speed() {
return new Promise(resolve => {
setTimeout(resolve, 3000)
})
}
// @async function
async function foo() {
let mySpeed = speed()
await mySpeed
await mySpeed
await mySpeed
await speed()
await speed()
await speed()
}
foo()
复制代码
答:约等于12S,可是时间超出12S。
答:
// @function shake
function shake(fun, time) {
let timeController = null
return (...args) => {
timeController !== null && clearTimeout(timeController)
timeController = setTimeout(() => {
fun.apply(this, args)
}, time)
}
}
// @test function
function myText() {
console.log('text......')
}
// @output
shake(myText, 3000)
复制代码
答: 它们都是用来作数据持久化的存储方式,
打完题后,仔细看了一遍。确保无明显问题后,就交给旁边的HR了。估计是拿去技术部作评估。我的以为其实笔试挺坑的。真正开发中对于一些笔试题基本毫无接触。所以每次面试都须要花大量时间去过一遍知识点,查缺补漏。过了差很少5~6分钟后,人事小改改就带我去一个独立的办公室进行面试。里面已经坐了两我的,一个看上去是经理一个应该是前端。我坐下后,他们手里已经拿了个人简历。估计是已经看过了。随着小改改出去关上门后(全军出击),对线开始:
自我介绍其实不多去看,大体上我也是按照一些点来去说一些不犯错误的废话。
自我介绍后,就开始提问对线了。
答:
const
来定义个人变量,只有涉及变量赋值时,我才会将其声明为 let
。+
和 toString
来去作一些字符串的拼接,如 URL
。这样拼接后可读性很是的差。当ES6模板字符串出现后我就立马在项目中使用起来了。methods
仍是 computd
中都会涉及大量的 data
响应式变量读取,那么我就能够将Vue的 this
解构出来,将须要使用的 data
methods
...解构出来,能够避免代码中存在大量的 this.XXX
避免这种糟糕的代码风格。function
的书写,通常做用在 callback
中,能够快速的进行函数调用。如 foreach
, map
等方法。key
value
,这样后台返回给个人值,我能够经过Map将其填充成键值对后在表格渲染出来。由于Map的 key
存储的数据类型很是的棒。而Object则作不到这点。获取是说的有点久了,否则这个东西还能说一个小时。我就说,ES6的更新有点多,我就挑了一些有表明性的特性讲了下。可能面试官也以为本身问的太宽泛了。也及时赞成,开始了下一题。
答:
答: 上一题好像忘记说了(尴尬),这个方法我并非很经常使用。它的做用是作一个并发的比较,并发N个Promise当有一个返回告终果,它就结束了。谁先执行完,它的结果就是那个Promise的返回值。参数和Promise.all是同样的的。
答: Axios自己实际上是一个Promise,能够经过Promise.all 的方式去执行多个Axios请求。Axios内部也提供Axios.all方法,使用方式和Promise.all相同。
答: 我我的倾向于使用CORS方案,CORS标准新增了一组头部字段,容许服务器声明哪些源站有权限访问哪些资源。这个须要后端来进行配合。另外一种就是使用Nginx代理转发了。
这一块我回答的不是很好,小伙伴若是不懂能够去复习下浏览器跨域方案。
答: v-if指令会在渲染View视图中,主动去忽略绑定的DOM,它不会被加载到虚拟DOM,天然在ViewDOM中也不会去显示。 v-show指令会给绑定的DOM添加一个 display: none
的style样式,来达到实现隐藏和显示功能。
答: computed是一个单独的属性,不能和methods / data 中的值名称重复。它存在缓存性,当你依赖的计算值没有发生改变时,computed会保持当前的值不变化。不支持异步 watch只能观测 data
中的值,且一个函数只能监视一个。主要用于对某个值进行一个监听操做。
答:
答:
答: 有两种路由模式,分别是 hash
history
,
#
号,history没有。答: 经过export 导出模块,设置 namespaced: true
来开启命名空间,这样模块就拥有本身的模块归属了,如:A模块中有一个action名称为test,则咱们就能够经过 a/test
来找到它,避免Vuex的模块产生冲突。
答: Mutation主要是用来改变state当中的数据,所以它主要做为一个中间人。它不支持异步,这样就能够被Vue监听,devtools就能够同步到它的记录。若是它是异步的,那么就极可能致使devtools没法同步它究竟何时发生改变。而咱们经常使用的方式是经过Action来提交Mutation,由于Action是一个异步的过程,因此这样作既保证了逻辑的异步调用,同时不破坏Mutation的记录良好。方便开发者调试。其实就是一个数据的交换过程。
激动人心的怼项目环节, 有些内容有点私密,就不会全写出去。这一块其实都是看本身的项目理解。我这里就挑选几个对话做为参考吧。
后续我就不讲公司项目了,其实就是一个问答环节,本身作的模块本身应该清楚的。(●'◡'●),后面问了我我的项目,这却是没有啥隐瞒的。
如下省略掉后面都是在看项目,以为有意思就问下一些东西。
整体面试其实不像文章中描述的平淡无奇,其实还有好多紧张,卡顿得地方。省略了一些问题,由于没有带录音笔,因此不少都是凭借记忆复盘的。放假在家恰好喝了点鸡汤,补充了下身体。就作一个总结,但愿对还在求职的你有一个帮助。今年找工做确实难,尤为是像我这种学历低,经验少的童鞋,是真的心累。但我仍是会坚持下去的,咱们一块儿加油哦。 你们在面试结束后,其实有个套路不知道大家有没有发现:
面试时一直怼你,甚至问炸的状况下,拿offer的概率越大,反之,一路平坦,聊了几下技术就一直聊家长里短的反而是了无音讯。
虽然最后结果是过了,可是我目标仍是毕业后去一线城市,可能只是为了避免让本身碌碌而为吧。 好了,各位看官都看得差很少了,以为有用就点个赞吧。顺便给我我的UI库点赞赞哦。
欢迎内推我上岸:
个人github: 当即跳转
UI组件库: 当即跳转中文站点