入职一段时间了,之前找工作面试的我认为技术含量较多的面试题。之前就写好了,今天才想起来发布。。。共同进步吧!!!
整理的有点乱。好多是我自己的总结,可能有不对的地方,仅供参考。
甜**娱
- vue的常用特性:常用指令有哪些
https://www.jianshu.com/p/c4a87e1b4ef7
v-model、v-show,v-on v-if ,v-else, v-else-if, v-bind,v-text, v-html, v-once ,v-pre, v-clock - v-clock
这个指令是用来保持在元素上直到关联实例结束时进行编译
<div id="app" v-cloak>
<div>
{{message}}
</div>
</div>
<script type="text/javascript">
new Vue({
el:'#app',
data:{
message:'hello world'
}
})
</script>
加载的时候先闪烁显示{{message}}
,然后再显示hello world
<div>
{{message}}
</div>
- v-pre
v-pre主要用来跳过这个元素和它的子元素编译过程。可以用来显示原始的Mustache标签。跳过大量没有指令的节点加快编译。
<div id="app">
<span v-pre>{{message}}</span> //这条语句不进行编译
<span>{{message}}</span>
</div>
最终仅显示第二个span的内容
- v-if 与v-show的区别
- vue生命周期
- jquery将原生js转换成jq对象(使用$符号)
- jquery选择器有哪些:选择兄弟元素有哪些
- if-else与switch-case区别(switch-case执行效率比if-else高)
- js的引用类型(object,array)
- let,var,const区别
- 两个div的margin值是10px,则上下两个盒子之间距离是多少(margin值叠加问题)
- 深拷贝与浅拷贝
- 盒子垂直居中的方法有哪些
jq的选择器有哪些?有哪些兄弟选择器
jQuery 元素选择器
jQuery 使用 CSS 选择器来选取 HTML 元素。
$("p") 选取 <p> 元素。
$("p.intro") 选取所有 class="intro" 的 <p> 元素。
$("p#demo") 选取所有 id="demo" 的 <p> 元素。
jQuery 属性选择器
jQuery 使用 XPath 表达式来选择带有给定属性的元素。
$("[href]")
选取所有带有 href 属性的元素。
$("[href='#']")
选取所有带有 href 值等于 “#” 的元素。
$("[href!='#']")
选取所有带有 href 值不等于 “#” 的元素。
$("[href$='.jpg']")
选取所有 href 值以 “.jpg” 结尾的元素。
jQuery CSS 选择器
jQuery CSS 选择器可用于改变 HTML 元素的 CSS 属性。
下面的例子把所有 p 元素的背景颜色更改为红色:
$("p").css("background-color","red");
jq遍历方法
- 祖先
parent()
parents()
parentsUntil() - 后代元素
children() // 直接子元素
find() // 可以找到任意后代元素。一路向下直到最后一个后代。 - 兄弟元素
siblings()// 返回被选元素的所有同胞元素。 $("h2").siblings();返回 <h2> 的所有同胞元素:
next()
nextAll()
nextUntil()// 返回介于两个给定参数之间的所有跟随的同胞元素。$("h2").nextUntil("h6");返回介于 <h2> 与 <h6> 元素之间的所有同胞元素:
prev()
prevAll()
prevUntil()//
- 过滤遍历
first()//被选元素的首个元素。$(“div p”).first();
last()
eq()//返回被选元素中带有指定索引号的元素。索引号从0开始
filter()//不匹配这个标准的元素会被从集合中删除,匹配的元素会被返回。
not() //返回不匹配标准的所有元素。
注意querySelector和querySelectorAll()是HTML5的API。不是Jquery中的方法。
js的基本类型和引用类型
基本类型:undefined、null、string、number、boolean、symbo(ES6)
普通基本类型:undefined、null、symbol(ES6)
特殊基本包装类型:string、number、boolean
引用类型:Object、Array、RegExp、Date、Function
区别:引用类型值可添加属性和方法,而基本类型值则不可以。
基本类型
基本类型的变量是存放在**栈内存(Stack)**里的
基本数据类型的值是按值访问的
基本类型的值是不可变的
基本类型的比较是它们的值的比较
引用类型
引用类型的值是保存在**堆内存(Heap)**中的对象(Object)
引用类型的值是按引用访问的
引用类型的值是可变的
引用类型的比较是引用的比较
外边距塌陷的问题和margin合并问题
1.外边距塌陷的问题
<style>
.box1 {
width: 200px;
height: 200px;
background-color: red;
/* border: 1px solid #cccccc; */
/*也可以解决*/
/* overflow: hidden; */
/*最好的解决办法就是在此处加上overflow:hidden */
}
.box2 {
margin-top: 20px;/*这时候父盒子和子盒子都会距离上面20px。很显然我们只想要子盒子距离父盒子20px*/
width: 100px;
height: 100px;
background-color: blue;
}
</style>
<div class="box1">
<div class="box2"></div>
</div>
当box1包含box2时,也就是box1和box2是父子级关系时,父盒子会塌陷20px。
解决办法:只要给父盒子加一个overflow: hidden;就可以解决外边距塌陷
解决外边距塌陷的其他方法
1、给父级设置一个border
2、给父级设置padding
3、设置float
4、设置padding
5、给子级设置display:inline-block
当然最好用的是overflow: hidden;因为其他方法多多少少会带来一点副作用,相对来说overflow: hidden;的副作用最小,几乎不影响其他布局。
2.margin合并问题
<style type="text/css">
.box1 {
margin-bottom: 30px;
background-color: red;
width: 200px;
height: 200px;
}
.box2 {
margin-top: 40px;
background-color: blue;
width: 200px;
height: 200px;
}
</style>
<body>
<div class="box1"></div>
<div class="box2"></div>
</body>
以上第一个盒子的margin-bottom和一个第二个盒子的margin-top值如果一样都是20px。的时候。这时候浏览器实际显示的就是20px,而不是40px.如果两个值不一样的话,取最大的值。(例如一个是40px,一个是20px。浏览器实际显示的距离就是40px)
2.27锅圈面试
- v-show与v-if区别
- babel编译的过程做了哪些事情?
- vue页面之间的跳转和刷新是怎么实现的
- arr数组中有哪些常用的api方法
- vue中有哪些新的数组的api方法
- 说一下页面的防抖和节流是如何实现的
- vue双向绑定原理
- uni-app 有没有用过
- 如何实现权限分配的
- 按钮权限是如何实现的?权限之间按钮之间是如何联系到一起的?按钮是怎么做的?按钮没有封装成一个组件?直接使用el-button工作量会很大
- vue的服务端渲染
- 项目是你一个人做的还是合作?后端有几个人?前端有几个人
- rem实现布局你是怎么做的。其中之间的转换数值时怎么转换的?
- 数据统计模块是怎么做的?
- 嗨美妆APP使用到了哪些技术栈?使用什么做的?
- http状态码有哪些?303/304/305、有什么含义与区别
- vuex做状态管理是怎么做的
- LocalStroge与SessionStrorage区别
- 小程序的页面目录结构?
- 在线咨询是怎么做的?
- 优惠券是怎么做的?有满减吗
- 小程序请求后台接口使用的api是什么?有哪些参数?
- token你是怎么实现的?
babel编译的过程做了哪些事情?
为什么要用babel转换代码
我们之前做一些兼容都会都会接触一些 Polyfill 的概念,比如如果某个版本的浏览器不支持 Array.prototype.find 方法,但是我们的代码中有用到 Array 的 find 函数,为了支持这些代码,我们会人为的加一些兼容代码
if (!Array.prototype.find) {
Object.defineProperty(Array.prototype, 'find', {
// todo someting
})
}
对于这种情况做兼容也很好实现,引入一个 Polyfill 文件就可以了,但是有一些情况我们使用到了一些新语法,或者一些其他写法
// 箭头函数
var a = () => {}
// jsx
var component = () => <div />
这种情况靠 Polyfill,因为一些浏览器根本就不识别这些代码,这时候就需要把这些代码转换成浏览器识别的代码。 babel就是做这个事情的。
为了转换我们的代码, babel做了三件事:
Parser 解析我们的代码转换为 AST。
Transformer 利用我们配置好的 plugins/presets把 Parser生成的 AST转变为新的 AST。
Generator 把转换后的 AST生成新的代码
从图上看 Transformer 占了很大一块比重,这个转换过程就是 babel中最复杂的部分,我们平时配置的 plugins/presets就是在这个模块起作用。
三个步骤分别作了什么
Parser 解析
解析步骤接收代码并输出 AST,这其中又包含两个阶段词法分析和语法分析。词法分析阶段把字符串形式的代码转换为 令牌(tokens) 流。语法分析阶段会把一个令牌流转换成 AST 的形式,方便后续操作。
Generator 生成
代码生成步骤把最终(经过一系列转换之后)的 AST 转换成字符串形式的代码,同时还会创建源码映射(source maps)。代码生成其实很简单:深度优先遍历整个 AST,然后构建可以表示转换后代码的字符串。
babel的核心内容
看起来 babel的主要工作都集中在把解析生成的 AST经过 plugins/presets然后去生成 新的AST这上面了。
AST抽象语法树(AbstractSyntaxTree)
我们想象一下要表示上述代码应该是什么样子,首先必须有东西可以表示这些具体的 声明, 变量, 常量的具体信息,比如
var a = 1 + 2
一个声明语句,声明类型是var,左侧是变量,右侧是表达式。有了这些信息我们就可以还原这个程序,这也是把代码解析成 AST时候所做的事情,对应上面我们说的 词法分析 和 语法分析
节点
看这个文档时候我们可以看到说明大多是类似这种
interface Node {
type: string;
loc: SourceLocation | null;
}
这里提到 interface这个我们在其他语言中是比较常见的,比如 Node规定了 type和 loc属性,如果其他节点继承自 Node,那么它也会实现 type和 loc属性就是说继承自 Node的节点也会有这些属性,基本所有节点都继承自 Node,所以我们基本可以看到 loc这个属性 loc表示个一些位置信息
节点遍历
babel拿到抽象语法树后会使用 babel-traverse进行递归的树状遍历,对于每一个节点都会向下遍历到尽头,然后向上遍历退出分支去寻找下一个分支。这样确保我们能找到任何一个节点,也就是能访问到我们代码的任何一个部分。可是我们要怎么去完成修改操作呢, babel给我们提供了下面这两个概念。
如何写一个plugin
visitor
我们已经知道 babel会遍历节点组成的抽象语法树,每一个节点都会有自己对应的 type,比如变量节点 Identifier等。我们需要给 babel提供一个 visitor对象,在这个对象上面我们以这些节点的 type做为 key,已一个函数作为值,类似如下:
const visitor = {
Identifier: {
enter() {
console.log(
'traverse enter a Identifier node!'
)
},
exit() {
console.log(
'traverse exit a Identifier node!'
)
}
}
}
这样在遍历进入到对应到节点时候, babel就会去执行对应的 enter函数,向上遍历退出对应节点时候, babel就会去执行对应的 exit函数,接着上面的代码我们可以做一个测试
const MyVisitor = {
visitor
}
const result = babel.transform(code, {
plugins: [
MyVisitor
]
})
console.log(result.code)
Paths
visitor在遍历到对应节点执行对应函数时候会给我们传入 path参数。它传入的 path参数看起来是这样的:
{
"parent": {
"type": "VariableDeclarator",
"id": {...
},
....
},
"node": {
"type": "Identifier",
"name": "..."
}
}
从上面我们可以看到 path 表示两个节点之间的连接,通过这个对象我们可以访问到节点、父节点以及进行一系列跟节点操作相关的方法。
babel为了方便我们开发,在每一个环节都有很多人性化的定义也提供了很多实用性的工具,比如之前我们在定义 visitor时候分别定义了 enter, exit函数,可很多时候我们其实只用到了一次在 enter的时候做一些处理就行了。所以我们如果我们直接定义节点的 key为函数,就相当于定义了 enter函数。
const visitor = {
Identifier: {
enter(path) {
// todo
}
}
}
// 等同于
const visitor = {
Identifier() {
// todo
}
}
vue页面之间的跳转和刷新是怎么实现的
vue路由
- 声明式导航:通过点击链接实现导航的方式,叫做声明式导航
router-link(默认会被渲染为 a 标签 )
router-view
添加路由填充位(将来通过路由规则匹配到的组件,将会被渲染到 router-view 所在的位置 ) - 编程式导航:编程式导航:通过调用JavaScript形式的API实现导航的方式,叫做编程式导航 例如:普通网页中的 location.href
- this.$router.push(‘hash地址’)
- this.$router.go(n)实现前进和后退
// 字符串(路径名称)
router.push('/home')
// 对象
router.push({ path: '/home' })
// 命名的路由(传递参数)
router.push({ name: 'user', params: { userId: 123 }})
// 带查询参数,变成 /register?uname=lisi
router.push({ path: '/register', query: { uname: 'lisi' }})
vue跳转的时候并刷新
参考文章https://blog.csdn.net/yangxiaodong88/article/details/81387672
什么会有这篇文章
1 用vue-router 重新路由的时候到当前页面的时候是不进行刷新的
2 采用window.reload() 或者router.go(0) hisory.go(0) 刷新的时候整个浏览器进行刷新加载, 但是页面闪烁, 体验不好
解决办法
方式一
先新建一个空白页面, 先跳到空白页面, 然后再从空白页面跳转回来 history.go(-1) 这样的方式 在我这里测试不成功
方式二
直接刷新, 整体页面刷新 history(0) this.$router.push(“path”)
this.$router.push(’/personal_base’);
1
方式三
比较终极解决办法, 页面闪烁是不存在的, 几乎没有啥毛病。
provide /inject 组合
作用是: 允许一个祖先组件向其所有子孙后代注入一个依赖, 无论组件层次有多深,并在其上下游关系成立时间里始终生效。
App.vue 文件中 修改文件 整个配置如此:
<template>
<div id="app" class="fillcontain">
<router-view v-if="isRouterAlive"></router-view>
</div>
</template>
<script>
export default {
name: 'App',
provide(){
return{
reload:this.reload
}
},
data(){
return {
isRouterAlive:true,
}
},
methods:{
reload(){
this.isRouterAlive = false;
this.$nextTick(function () {
this.isRouterAlive = true
});
},
},
}
</script>
<style lang="less">
@import './style/common';
</style>
在页面应用
inject: ['reload'],
this.reload();
新加的配置标记如下:
应用
具体原因知识 简单介绍
provide /injext
provide: 选项应该是一个对象或者返回一个对象的函数。 该对象包含可注入其子孙的属性。
inject : 一个字符串数组或者一个对象,对象的 key 是本地的绑定名
提示:provide和inject绑定并不是可响应的。这是刻意为之的。如果你传入了一个可监听的对象,那么其对象的属性还是可响应的。
arr数组中有哪些常用的api方法
- 属性 .length .prototype
- 方法
+ from
+ isArray
+ concat
+ every()判断数组中的所有元素是否都通过测试,都通过返回true,否则false
+ fill() 固定值填充一个数组中从起始索引到终止索引内的全部元素。不包括终止索引。array1.fill(0, 2, 4) 用0填充索引从2开始到4中间的位置
+ filter
+ find
+ findIndex
+ flat
+ flatMap
+ forEach
+ indexOf
+ join
+ map
+ pop
+ push
+ reduce
+ shift
+ unshift
+ some() 方法测试数组中是不是至少有1个元素通过了被提供的函数测试。它返回的是一个Boolean类型的值。
+ sort
+ splice
+ toString
+ values
vue 中新增(变异)的数组方法:
Vue 将被侦听的数组的变异方法进行了包裹,所以它们也将会触发视图更新。也就是实时更新。这些被包裹过的方法包括:
push()
pop()
shift()
unshift()
splice()
sort()
reverse()
非变异 (non-mutating method) 方法,例如 filter()、concat() 和 slice() 。它们不会改变原始数组,而总是返回一个新数组。当使用非变异方法时,可以用新数组替换旧数组:
vue服务端渲染
简介服务端渲染
一:
什么是服务端渲染,简单理解是将组件或页面通过服务器生成html字符串,再发送到浏览器,最后将静态标记"混合"为客户端上完全交互的应用程序。 于传统的SPA(单页应用)相比,服务端渲染能更好的有利于SEO,减少页面首屏加载时间,当然对开发来讲我们就不得不多学一些知识来支持服务端渲染。同时服务端渲染对服务器的压力也是相对较大的,和服务器简单输出静态文件相比,通过node去渲染出页面再传递给客户端显然开销是比较大的,需要注意准备好相应的服务器负载。
二:
Vue.js是构建客户端应用程序的框架,默认情况下,可以在浏览器中输出vue组件,进行生成Dom和操作DOM, 然而,也可以将同一个组件渲染成为服务端的字符串,将他们直接发送到浏览器,最后将这些静态标记“激活”为客户端上完全可以交互的应用程序。也就是你先在前端写好组件页面,然后交到服务端,服务端需要通过他自家的某个程序插件,然后将客户端的组件生成对应的html字符串,最后发送给浏览器。然后浏览器响应出来页面。
const Vue = require('vue')
const express = require('express')();
const renderer = require('vue-server-renderer').createRenderer();
//创建vue实例
const app = new Vue({
template:'<div>hello vue</div>'
})
//服务器渲染的核心就在于:
//通过vue-server-renderer插件的renderToString()方法,将vue实例转化为字符串插入到html中
express.get('/',(req,res)=>{
renderer.renderToString(app, (err,html)=>{
if(err){
return res.state(500).end('运行错误')
}
//返回给浏览器一串html字符串
res.send(`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>服务端渲染</title>
</head>
<body>
${html}
</body>
</html>`)
})
})
express.listen(8888, ()=>{
console.log('服务器已经启动')
})
测试,发现响应回来的文件里面有内容,这样也说明了服务端渲染是对SEO引擎比较好的
小结:我们使用服务端渲染是为了弥补单页面应用SEO能力不足的问题,实际上我们第一次在浏览器地址栏输入地址的时候,并且得到返回页面之后,所有的操作仍然是单页面应用在控制的,我们所做的服务端渲染,只是在平时返回单页面应用hml上增加了对应路由的页面信息,让爬虫好爬取到。
所以项目可以分为客户端渲染和服务端渲染。
https://blog.csdn.net/u012757419/article/details/98974693
亚信
- dom是如何渲染的
- css盒模型
- cookie与session区别
- 跨域问题解决。后端解决的话是如何解决的
- 闭包 一般哪些地方用到了闭包?
- 作用域问题
- css选择器的优先级,内嵌样式与样式文件之间的优先级
- js基本类型,引用类型。object属于什么类型?
- c3有哪些属性?
- 项目中页面样式你是怎么实现的,是你自己设计的吗?
- 堆和栈的区别
- 浏览器有哪些对象?
- display属性都有哪些值?
- new关键字的作用(对象实例化的过程?)
一般哪些地方用到了闭包?
用到的地方很多。如:类的声明。还有是一个很常见的 用FOR来绑定事件 :
var li = document.getElementsByTagName("li");
for (var i = 0, l = li.length; i < l; i++) {
(function(o, i) {
o.onclick = function() {
alert(i);
};
})(x[i], i);
}
像这样。。上面的代码执行后。单击对应的对像。值都会不同
如果你把代码换成这样。
var li=document.getElementsByTagName('li');
for(var i=0,l=li.length;i<l;i++){
o.onclick=function (){
alert(i);
}
};
您好,javascript中的闭包常用于:类的声明,用FOR来绑定事件: var 。
比如做一个随机抽题功能、选项卡、幻灯片等。一般用setInterval的地方用的比较多。
js的基本类型与引用类型?object属于什么类型?
基本类型:undefined、null、string、number、boolean、symbo(ES6)
普通基本类型:undefined、null、symbol(ES6)
特殊基本包装类型:string、number、boolean
引用类型:Object、Array、RegExp、Date、Function
区别:引用类型值可添加属性和方法,而基本类型值则不可以。
基本类型
基本类型的变量是存放在栈内存(Stack)里的
基本数据类型的值是按值访问的
基本类型的值是不可变的
基本类型的比较是它们的值的比较
引用类型
引用类型的值是保存在堆内存(Heap)中的对象(Object)
引用类型的值是按引用访问的
引用类型的值是可变的
引用类型的比较是引用的比较
浏览器有哪些对象?
window
navagator
document
lacation
history
screen
堆和栈的区别
动态数据区一般就是“堆栈”。“栈(stack)”和“堆(heap)”是两种不同的动态数据区,栈是一种线性结构,堆是一种链式结构
dom是如何渲染的?
浏览器是如何加载(渲染)html的?
浏览器在加载html的时候是自上而下渲染的,具体的步骤如下:
(1) 解析HTML结构。
(2) 加载外部脚本和样式表文件。
(3) 解析并执行脚本代码。
(4) 构造HTML DOM模型。//js:DOMContentLoaded; jq:ready
(5) 加载图片等外部文件。
(6) 页面加载完毕。//js:onload; jq:load
dom渲染流程:
1、浏览器解析html源码,然后创建一个DOM树。
在DOM树中,每一个HTML标签都有一个对应的节点(元素节点),并且每一个文本也都有一个对应的节点(文本节点)。DOM树的根节点就是documentElement,对应的是html标签。
2、浏览器解析CSS代码,计算出最终的样式数据。
对CSS代码中非法的语法它会直接忽略掉。解析CSS的时候会按照如下顺序来定义优先级:浏览器默认设置,用户设置,外联样式,内联样式,html中的style(嵌在标签中的行间样式)。
3、创建完DOM树并得到最终的样式数据之后,构建一个渲染树。
渲染树和DOM树有点像,但是有区别。DOM树完全和html标签一一对应,而渲染树会忽略不需要渲染的元素(head、display:none的元素)。渲染树中每一个节点都存储着对应的CSS属性。
4、当渲染树创建完成之后,浏览器就可以根据渲染树直接把页面绘制到屏幕上。
渲染树和Dom树的关系
渲染对象和Dom元素相对应,但这种对应关系不是一对一的,不可见的Dom元素不会被插入渲染树,例如head元素。另外,display属性为none的元素也不会在渲染树中出现(visibility属性为hidden的元素将出现在渲染树中)。
还有一些Dom元素对应几个可见对象,它们一般是一些具有复杂结构的元素,无法用一个矩形来描述。例如,select元素有三个渲染对象——一个显示区域、一个下拉列表及一个按钮。同样,当文本因为宽度不够而折行时,新行将作为额外的渲染元素被添加。另一个多个渲染对象的例子是不规范的html,根据css规范,一个行内元素只能仅包含行内元素或仅包含块状元素,在存在混合内容时,将会创建匿名的块状渲染对象包裹住行内元素。
一些渲染对象和所对应的Dom节点不在树上相同的位置,例如,浮动和绝对定位的元素在文本流之外,在两棵树上的位置不同,渲染树上标识出真实的结构,并用一个占位结构标识出它们原来的位置。
display属性都有哪些?
none(元素不会被显示);
block(元素将显示为块级元素,元素前后会带有换行符);
inline(元素会被显示为内联元素,元素前后没有换行符);
inline-block(行内块元素。CSS2.1新增的值);
table(元素会作为块级表格来显示,类似
table-row(元素会作为一个表格行显示,类似);
table-cell(元素会作为一个表格单元格显示,类似
<td>
和
<th>
)。
new关键字的作用(对象实例化的过程?)
1.在构造函数代码开始执行之前,创建一个空对象
2.修改this的指向,把this指向创建出来的空对象
3.执行函数的代码
4.在函数完成之后,返回this-即创建出来的对象
文思。。
- vuex中怎么取值
- js的基本数据类型?引用类型?
- undefined与null的区别?
- js中如何合并数组
- const 与let的区别?
- vue-router路由拦截守卫?
- 组件之间的相互传值
- webpack打包的时候,需不需要做什么修改?
- 响应式布局原理?
- 响应式布局和自适应布局有什么区别?
- vue中双向数据绑定?
- 跨域问题如何解决?
- js中如何检验数据类型?
- uniapp想要开发多段运行,哪些端?
- MVVM和MVC区别?
- 有没有写过函数是的组件?
- 怎么去解决跨域问题?
- 在浏览器中属于一个百度的网址,他内部的流程?
- 页面中有一个js文件,下载这个文件的过程是异步的还是同步的?
亚信
- 上个公司有多少人?主要干啥的?
- 强制缓存与协商缓存
- 在网络传输层面你有没有做过什么性能优化?
- vue中操作dom 可以使用什么?
- http,http2,https区别?
- vue父子组件传值?
- vue Router原理是什么?
- webpack 安装插件和安装一些loader是如何安装和配置的?你能举例说说最常用的安装包和loader加载器吗?
- 你做过哪些性能优化?
- node你了解多少?
- 你是如何进行学习的?你最近在学习什么?·············`······
- 你想进什么样的公司?
- 项目中你遇到过的对你来说比较难的一个项目或者一个问题是什么?
- vue生命周期
- 你知道什么是页面的重绘吗?
- jquery的原理比如 .css .html 底部原理是什么你知道吗?
- 你怎么看待加班的?
面试官最后问你,你还有哪些问题想要问的吗?
面试官其实想要了解的是你对当前的岗位有哪些认识或者说你对你自己的职业规划?
- 不要问小白问题,就是哪些在百度上搜一下就可以知道的问题。
- 不要问和工作无关的事情。例如:公司女生多吗?会让人觉得你无法为公司带来价值
- 不要问让人无法回答的问题
- 不要问有关薪资的问题或者福利等问题假期等问题。
最适合问的问题:
- 这个职位的未来发展空间是怎样的呢
- 公司对于员工是怎样考核的?
- 未来几个月内,您最想让我实现什么样的目标?
体温这种与自己职业发展相关的问题可以体现面试者是一个职业规划和长远目标的人,并不是一时兴起来面试,而是对岗位非常期待的。