jisuanke面经

jisuanke面经


CSS



手写一个布局


用float写出来了。

那用flex怎么实现?

不会(囧)


BootStrap用过吗?有什么特点?用BootStrap写一个三列的div。你知道BootStrap的网格布局是怎么实现的吗?


答:响应式,组件化。col-md-3。使用百分比


为什么有的网站一到移动端就不自适应了?就是尺寸什么的都不对(不知道怎么表达)……


答:没加那个标签


用过less或者sass吗?


看过less的文档,没真正用过


你觉得这类CSS预处理语言有什么特点?


支持变量和函数式书写样式(嵌套)


input(type)的默认值(就是那种灰色的字)怎么实现,如果用脚本呢?


用placeholder那个属性


大概想了一下,思路是onload的时候给一个初始值,然后onfocus清空,onblur的时候检测一下文本值,如果是空的,那么再赋值初始值,如果不是空的那么不用改动

JS



怎样理解闭包?

老生常谈,不罗嗦了……


前端性能优化?

一方面,自动化处理工具、插件;另一方面,代码规范


知道循环事件吗 loopEvents?


不知道(囧),

很重要

,不知道的小伙伴快去看一下


https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/EventLoop


看不懂就看这个视频(2014JSConf上的一个小哥,深入浅出)


http://2014.jsconf.eu/speakers/philip-roberts-what-the-heck-is-the-event-loop-anyway.html


说一下bower, yeoman, grunt, webpack的区别?


bower是包管理工具,yeoman算是一个工具箱吧,帮助快速构建项目搭建“地基”,grunt/gulp的话算是标准意义上的自动化工具,提供的插件挺多,功能blahblah……webpack/browserify的话就是帮你分析静态资源之间的依赖关系然后进行整合。


介绍一下ES6的新特性?你用什么来写ES6?


箭头函数、块级作用域、模块依赖import/export、Promise对象……


Babel。


IE和其他浏览器的监听事件的方法有什么不同?那怎么在脚本中判断用哪种方法呢?


IE用的是attachEvent(),其他用的是addEventListener()


当时想的是用window的navigator对象获取浏览器的版本信息,但是其实只用一条简单的兼容测试就好了(好蠢,这都忘了):


if(this.attachEvent)


以下代码会输出什么?

var foo = function () {
for (var i = 0; i < 10000; i++) {}
console.log(1)
}
var bar = function () {
console.log(2)
}
setTimeout(foo, 0)
setTimeout(bar, 0)
//1, 2

答成2,1了,因为不知道Eventloop所以没答上来,其实foo和bar是在一个queue里的,只能顺序执行,其他的命令默认是在stack里


以下代码有何不同?

var a = b = 2;
// ———————————
var a = 2;
var b = 2;

一开始回答没区别,后来面试官提示b的作用域,答案是第一种写法的b有全局作用域


可以看一下stackoverflow上这个问题,挺有意思的:


http://stackoverflow.com/questions/27329444/why-a-is-undefined-while-b-is-3-in-var-a-b-3/27329477


如何实现一个每次被调用时会返回被调用次数的函数?

// foo() // return 1

// foo() // return 2

function foo () {
var count = 0;
return function () {
return ++count;
};
}
var bar = foo();
bar();    //1
bar();    //2

考察用闭包保存count的值。


foo的函数我写出来了 但是使用的时候一定要先赋值给一个变量bar,否则会每次都刷新count,这样是不对的:

//Wrong!
foo()();//1
foo()();//1


写一个times函数,使调用 (n).times( func ) 时可以循环执行该函数 n 次?(写法固定,必须这么写)


想到了用this,但是没想出来怎么取得前面n的值,而且这个还牵扯到基本类型原型绑定函数,看来自己还是NAIVE

function times (fn) {
var count = this.valueOf();
//也可以这么写
//var count = parseInt(this);
for (var i = 0; i < count; i++) {
fn();
};
}
Number.prototype.times = times;    //绑定


如何实现类和继承?


不详细说了,反正就是组合继承那一套,先在子类的构造函数里用apply调用父类的构造函数然后再把父类的实例复制给子类的原型。


```


function Parent () {


//constructor


}


function Child () {


//constructor


Parent.apply(this);


}


Child.prototype = new Parent();


```


那怎么在子类中实现重载?(先调用父类的方法然后调用自己的新方法)


我是这么想的:

//子类里(Child)
function Child(){
this.foo = function () {
Parent.foo.apply(this);
//自己的新方法
...
}
}

好像不对?


数据结构/算法:


1.介绍一下你知道的数据结构。线性表、链表、队列、栈、图、树blahblah


2.链表比线性表有什么好处?插入和删除元素只需要改动两个指针


3.怎么在JS中模拟队列和栈?栈:push pop 队列:shift unshift


4.反转字符串


```


function reverseStr (str) {


var strArr = str.split(“”);


var newArr = [];


for (var i = strArr.length - 1; i >= 0; i—) {


newArr.push(strArr[i]);


}


var newStr = newArr.join(“”);


return newStr;


}


```


这个主要考察字符串操作,之前在CodeWar做过一个类似的,所以很快就写出来了。


5.斐波那契数列


悔得我肠子都绿了,光记得用递归,然后具体竟然忘了怎么写……

function fibonacci (n) {
if(n === 1 || n === 2) {
return 1;
}
return fibonacci(n-1) + fibonacci(n-2);
}

肠子都绿了啊!!!!!


React相关的:


1.介绍一下React


大体提了一下核心概念,V的一个框架,VirtualDOM,props,state…


2.知道什么是单项数据流吗?


一开始听错了,还以为是双向绑定什么之类的。


后来答出来了,就是React里props的单向传递


3.你说到了Virtual DOM,那你知道Virtual DOM有什么好处吗?


性能优化(具体到有利于后端进行页面渲染没答出来,这个真不知道)

其他



HTTP协议的request包含什么内容?


请求行,RequestHeader和body


HTTP的状态码有哪些?304知道吗?


只知道404和5XX,304不知道(有缓存,内容暂未修改)


1XX 提示信息 - 表示请求已被成功接收,继续处理


2XX 成功 - 表示请求已被成功接收,理解,接受


3XX 重定向 - 要完成请求必须进行更进一步的处理


4XX 客户端错误 - 请求有语法错误或请求无法实现


5XX 服务器端错误 - 服务器未能实现合法的请求


HTTP方法有哪些?有什么区别?


GET,POST,PUT,DELETE


区别:GET:查询;POST:改动、更新;PUT:增加;DELETE:删除


https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html


什么是语义化?你说到了有利于SEO优化,你做过这方面的优化吗?


机器理解的html标签,有利于SEO优化。


没做过(囧)


事后查了一下:


title:只强调重点即可,重要关键词出现不要超过2次,而且要靠前,每个页面title要有所不同。


description:把网页内容高度概括到这里,长度要合理,不可过分堆砌关键词,每个页面description要有所不同


重要内容不要用JS输出。爬虫不会读取JS里的内容,所以重要内容必须放在HTML里。


尽少使用iframe框架。搜索引擎不会抓取到iframe里的内容,重要内容不要放在框架中。


为图片加上alt属性。


http://uxc.360.cn/archives/984.html


那你知不知道你谷歌结果的标题为什么是这个?


不知道,回来看了一下其实就是里的内容


接触过函数式编程吗?建议你去学一下


大体了解,没自学过…@.@


怎样判断两个矩形是否存在重合部分(考虑旋转)


这个问题当时没答出来,可能是因为时间比较紧而且有点紧张。


其实两个矩形存在重合部分的充要条件就是“其中一个矩形的有至少一个顶点在另外一个矩形内”


剩下的问题就是怎么判断一个点是不是在矩形内了,考虑到有旋转所有牵扯到坐标系转换的问题,用三角函数就OK了。

总结

面试官是从知乎上认识的一个前端的前辈,敬仰已久,聊了一个半小时,对我的评价是还需要加强基础和算法……哎,一直觉得自己基础还行,然后今天啪啪打脸了……回来之后拿出了那本尘封已久的《权威指南》,继续加油吧



你可能感兴趣的:(jisuanke面经)