什么是面试中最遗憾的事情?答曰:明明知道这个知识点,换个问法就懵了,回头google一下才恍然大悟,后悔不已!究其根本乃是对知识点了解的不够深入,工作中实践的少。
什么是最有效的学习方法?答曰:问题驱动。知识点一定是为了解决问题而存在的,带着问题去学习,可以事半功倍。比起填鸭式的死记硬背要记得更牢,理解的更深入。
本着以上原则,将会在本篇文章中引入大量的例题,也是本文最大的特点,让各位同学能够充分的掌握各知识点,不会被面试时灵活的问法问懵。
题目分为HTML/CSS类、JS类、框架类、算法类,其中HTML/CSS基本上就是一带而过的基础知识,JS是重中之重,框架和算法属于附加题,加分项。我们先从简单的开始,热个身。
这部分知识属于前端基础,由于Bootstrap、Ant-Design、Material-UI、Element-UI等UI框架已经解决了绝大多数UI问题,此处的知识点相对来说已经没有那么繁杂了。面试者需要知道,至少是听说过上面提到的UI框架,至少要使用过一种,优先推荐Ant-Design。这里画下重点,Form表单部分是各框架中最复杂,也是最常用的部分,值得投入精力去学习。
请各举出3个块元素和行内元素,并说出他们的特点
盒子模型宽高如何计算?什么是边界塌陷?
如图所示,屏幕正中间有个元素A, 随着屏幕宽度的增加,始终需要满足以下条件:
请用 html及css 实现
用尽量少的html元素和CSS,实现下面图形(纯色即可)
如何适配移动端?
什么是BFC?它主要解决什么问题?
多个inline-block之间为什么会有间隙?如何去除?
什么是重绘和重排?
js是前端最核心、最重要、最基础、最复杂、考点最多、最……的部分。ES6的语法要熟练运用,原理也要清楚,这里再强调一下原理,一定要深入到原理层去理解。这才是看似麻烦,实则最快的捷径,正所谓“明道若昧,进道若退,夷道若颣。 ”
模块化
深拷贝
判断变量类型,instanceof,typeof
static,function(){},()=>{}在class中的区别?
JS的基本类型有哪些?基本类型和引用类型的区别?
函数中的 arguments 是数组吗?若不是,如何将它转化为真正的数组
请说出以下代码打印的结果
if ([] == false) {console.log(1);};
if ({} == false ) {console.log(2);};
if ([]) {console.log(3);};
if ([1] == [1]) {console.log(4);};
以下代码的结果是什么?请解释你的答案。
var fullname = 'John Doe';
var obj = {
fullname: 'Colin Ihrig',
prop: {
fullname: 'Aurelio De Rosa',
getFullname: function () {
return this.fullname;
}
}
};
console.log(obj.prop.getFullname());
var test = obj.prop.getFullname;
console.log(test());
请说出以下代码打印的结果
async function async1() {
console.log('async1 start');
await async2();
console.log('async1 end');
}
async function async2() {
console.log('async2');
}
console.log('script start’);
setTimeout(function() {
console.log('setTimeout');
}, 0);
async1();
new Promise(function(resolve) {
console.log('promise1');
resolve();
}).then(function() {
console.log('promise2');
});
console.log('script end');
以最小的改动解决以下代码的错误(可以使用es6)
const obj = {
name: " jsCoder",
skill: ["es6", "react", "angular"],
say: function () {
for (var i = 0, len = this.skill.length; i < len; i++) {
setTimeout({
console.log('No.' + i + this.name);
console.log(this.skill[i]);
console.log('--------------------------');
}, 0);
console.log(i);
}
}
};
obj.say();
/*
期望得到下面的结果:
1
2
3
No.1 jsCoder
es6
--------------------------
No.2 jsCoder
react
--------------------------
No.3 jsCoder
angular
--------------------------
*/
实现Function.prototype.bind方法, 使得以下程序最后能输出'success'
function Animal(name, color) {
this.name = name;
this.color = color;
}
Animal.prototype.say = function () {
return `I'm a ${this.color} ${this.name}`;
};
const Cat = Animal.bind(null, 'cat');
const cat = new Cat('white');
if (cat.say() === 'I\'m a white cat' && cat instanceof Cat && cat instanceof Animal) {
console.log('success');
}
请用JS实现throttle(函数节流)函数。函数节流解释: 对函数执行增加一个控制层,保证一段时间内(可配置)内只执行一次。此函数的作用是对函数执行进行频率控制,常用于用户频繁触发但可以以更低频率响应的场景
Vue如何实现双向绑定的?
Virtual Dom如何diff ?
什么是DNS?
什么是TCP三次握手?四次握手?HTTP和HTTPS的区别和联系?常见状态码?RESTfull API
websocket是什么?与HTTP的关系?
HTTP的response和request分别包含几个部分?是什么?
重绘与重排?
你工作中是否遇到过跨域问题?请问是如何解决的?
请列举出几个常用的http状态码及它们的意义
XSS和CSRF分别是什么?如何预防?
cookies、sessionStorage、localStorage的区别?
大厂多多少少都会考一些算法题,答不出来很正常,要知道这里想要考察你分析问题的能力,重要的是过程,结果反而是次要的。一定要把自己的思路说出来,想到什么说什么,通常面试官会根据你说的内容去引导你,你要是什么都不说,那面试官想帮你也无能为力了。
请实现斐波那契数列,注意性能
如何实现一个双链表
请用算法实现,从给定的无序、不重复的数组data中,取出n个数,使其相加和为sum。并给出算法的时间/空间复杂度 。(不需要找到所有的解,找到一个解即可)