最近一直在多看基础的书多码代码准备找实习, 在网上也搜罗了不少面经, 现在把搜罗到的实习生面试题自己整理一下.
最近开始了几次面试, 虽然还不知道结果如何, 但是还是要记录下来进行一个总结, 同样也希望对正在准备面实习生的童鞋们有所帮助~
JavaScript
addEventListener 最后一个参数是做什么用的?
答: 规定事件是冒泡还是捕获. false 表示在冒泡阶段调用事件处理程序, true 表示在捕获阶段调用事件处理程序.(removeEventListener() 一样的)
什么是冒泡, 什么是捕获 ?
答: 冒泡是当一个元素触发了一个事件之后就会像上层传递直至 document(由最具体的元素接受, 然后逐级向上传播到较为不具体的节点 (文档)). 捕获是不太具体的节点 (文件 document) 更早接收到事件, 而具体的节点最后接收到事件.
所有的事件都可以冒泡么?
答: 不是, blur,focus,load,unload,abort 不可冒泡 (每个 event 都有一个 event.bubbles 属性, 可以知道它可否冒泡. 详情可看浏览器中有哪些事件会冒泡?)
怎么取消事件冒泡
答: 我这儿的答案错了, 谢谢大神指正, 大家不要搞混啦
eve.preventDefault(取消事件默认行为, 若 cancelable 是 true, 则可以使用这个方法, cancelable 属性表明是否可以取消事件的默认行为).eve.stopPropagation() 用于取消事件的进一步捕获或冒泡, bubbles 为 true 时, 可以使用这个方法.
怎么判断是不是数组
答: a instanceof Array Array.isArray(a) 他问我还有么~
所以我说试一下 Array 的内置函数, 可以使用是 Array 不可以则不是, 其实还有 Object.prototype.toString.call(a)=== '[object Array]'
怎么把一个类数组对象转化为数组
答: Array.prototype.slice.call(arrayLike);
讲一下继承
答: 继承是代码重用的一种形式, 可以显著得减少软件开发成本. 在 JavaScript 中, 继承有三种方法: 类式继承 (主要), 原型式继承 (主要) 和掺元类.
类式继承: 首先要创建一个构造函数, 在构造函数中调用超类的构造函数, 并把参数传递给它. 下一步再设置原型链, 手工将子类的 prototype 设置为超类的一个实例 (Author.prototype = new Person()), 然后把子类的 prototype 的 constructor 属性重新设为子类 (Author.prototype.constructor = Author).
原型式继承: 不需要用类来定义对象的结构, 只需要直接创建一个原型对象, 这个对象随后可以被新的对象重用. 主要是对超类进行一个浅负责或者说是克隆, 这个克隆函数如下
- functon clone(o){
- function F(){}
- F.prototype = o;
- return new F();
- }
克隆超类后, 就可以重定义该克隆中的方法和属性, 可以修改超类中提供的默认值, 也可以添加新的属性和方法 . 但是这个方法对于从原型对象继承而来的成员, 其读和写具有内在的不对等性. 具体请参照 JavaScript 继承 https://segmentfault.com/a/1190000006864933
Array 都有哪些方法呀?
答: concat,join,pop,push,reverse,shift,slice,sort,splice,unshift.(《JavaScript 语言精粹》一书中总结了数组, 函数, 数字, 正则表达式, 字符串常用的方法)
sort 方法工作原理是什么样的?
答: 默认的比较函数把要排序的元素都视为字符串, 在比较数字都时候, 会把数字都转化为字符串再进行比较.
那如果想要 sort 排序数字怎么办?
答: n.sort(function (a,b) {return a-b;}) 升序
String 有哪些方法呀?
答: concat charAt slice substr substring 等等 (其实现在觉得应该加一句说 string 是基本数据类型, 没有方法, string 的方法是 String 构造函数创建的引用类型的方法~)
那 replace 方法怎么用的呀?
答: string.repalce(searchValue,replaceValue), 对 string 进行查找和替换操作并返回一个新的字符串, 参数 searchValue 可以是字符串或正则表达式对象, 如果它是一个字符串, 那么 searchValue 只会在第一次出现的地方被替换. 如果 searchValue 是一个正则表达式并且带有 g 标识, 则会替换所有匹配.
鼠标滑过一个元素出现一个弹出层
答: 就 dom 0 级来举例子的话是 onmouseover dispaly:block
鼠标滑的快不让他出现怎么办
答: 设置一个 setTimeout 当鼠标在上面停留的时间小于设定的时间的话他还没有出来事件就被取消掉了
那 setTimeout 应该设置多久的时间呢? 这个我不知道有什么约定俗成的时间设置, 如果是我的话, 应该回去试一下, 看那个时间合适
现在我想要这个元素在页面下方是弹出层在上方显示, 元素在上方时弹出层在下方显示? 判断元素距离页面底端的位置, 位置大于弹出层的高度的话就在下方弹出, 否则在上方弹出
如果我现在想把他做成一个工具给别人用要怎么做? 呃~ 首先使用模块化, 注意不要和其他的方法什么的有冲突, 然后子啊里面设置方法出入所需的参数, 比如那个元素, 什么事件, 弹出层的大小等等
那想做一个好的工具参数肯定很多, 你怎么能方便别人使用呢? 毕竟参数这么多别人会记不住的 呃~ 我可能会设置成一个对象, 传入对象的属性, 这样就方便记住了.
事件代理
答: 详情见 JavaScript 事件代理和委托 https://segmentfault.com/a/1190000006899384
什么是冒泡什么是捕获
答: 详情见 JavaScript 事件代理和委托 https://segmentfault.com/a/1190000006899384
C++
jQuery 取到的元素和原生 JS 取到的元素有什么区别
jQuery 获取到的元素返回的是一个 jQuery 对象, 它是一个类数组对象, 属性 0,1,2... 中存着查找到的 DOM 对象, 这个 jQuery 对象有 length 属性, 表示查到的 DOM 的数量. JS 取到的元素是 DOM 元素.
Doctype 的作用
答:<!DOCTYPE> 是声明文档的解析类型 (document.compatMode), 指示 web 浏览器关于页面使用哪个 html 版本进行编写的指令, 避免浏览器的怪异模式. 详情见: 关于 DOCTYPE https://segmentfault.com/a/1190000007124134
响应式 我只答了 @media
setTimeout 和 setInterval 的区别
详情见: setTimeout() 和 setInterval() https://segmentfault.com/a/1190000007124563
setTimeout 时间设为 0 是否立即执行, 为什么?
不一定, 因为 JavaScript 是一个单线程的解释器, 因此一定时间内只能执行一段代码. 为了控制要执行的代码, 就有一个 JavaScript 任务队列. setTimeout 时间设为 0, 是告诉 JavaScript 在 0 毫秒后把当前任务添加到任务队列中. 如果队列是空的, 则添加的代码会立即执行; 如果队列不是空的, 则它要等前面的代码执行完后再执行.
构造函数的运行机制
this 的绑定
call() 和 apply() 的区别
JS 继承有哪些? 原型继承是什么样的
解释一下模块化, 举例模块化的方法
GET 和 POST 的区别
函数声明和函数字面量的区别
jQuery 的联级有什么好处
渐进增强 优雅降级
CSS:
float 高度塌陷解决方案:
clearfix:after{clear:both;content:".";height:0;display:block;visibility:hidden;}(给自己挖了个坑 after 是伪元素不是伪类, 我说错了~)
line-height 像素单位和百分比的单位的计算方法: length 设置固定的行间距. 单位 em,px,pt 等等. 百分比 %
, 基于当前字体尺寸的百分比行间距.(我觉得我答得是对的, 但是他有重复了一遍: 我说的是 line-height)
一个 ul 里有若干个 li, 想要每个 li 都有一个 border-bottom, 最后一个 li 不想要 boder-bottom 要怎么做:(ul:last-child{border-bottom:none;} 或者给最后一个 li 加一个 class 选择器设置 border:none;(他说还有, 查了一下什么加载 jQuery 可之类的~)
CSS 选择器过长怎么判断他的优先级: 行内样式 1000 -- id100 -- 类, 伪类, 属性选择器 10 --
类型选择器, 伪元素选择器 1 通过相加计算大的优先级高, 值相等的话后声明的优先级高.
一个 div 怎么垂直居中呀? 饿了么说过了~
css3 你常用的属性有什么呀? 动画的 transform transmation border-radious box-sizing box-shadow
很长一段话要进行截取, 超过之后是三个点怎么做? 不考虑兼容的话 CSS3 有 text-overflow:ellipsis 然后或者 overfloww:hidden 再在边框前侧加入一个三个点的 span 或者用伪元素: after{content:"..."} 之类的吧
position 定位
dom 操作元素
两列布局
inline-block 空隙怎么解决
如何平铺一张背景图? CSS 方法: 设置一张图片 {position: absolute; top: 0; left: 0; bottom: 0; right: 0; z-index: -1;} JS 方法: 判断浏览器高度, 设置图片的高度
如果让图片按比例放大缩小呢? 用 JS 来判断宽高, 然后按比例放大 (面试官说屏幕壁板都是横屏, 所以 width 设置为 100% 就可以了)
CSS hack
条件注释
dispaly 的值
css3 动画的性能优化你知道什么? 我只答了最好不要使用 all
BFC,haslayout 是什么, 怎么触发
HTML
什么是语义化
html5 语义化的标签
HTTP
http 状态码都知道那些
算法 (一个都没答上来):
优先队列
堆
快速排序
数组去重
怎么构造一棵树
十进制数判断有多少位二进制码
项目
css3 翻书是怎么做的呀? 巴拉巴拉讲了一堆
你这个翻页有个 bug 呀, 什么原因怎么改呀? z-index 的问题, 怎么改布吉岛~
canvas 绘图怎么做的呀? 巴拉巴拉讲了一堆
你这个绘制有 bug 呀, 什么原因怎么改呀? 滚动条的问题, 怎么改又布吉岛...(加上滚动条的距离, 面试官告诉我的~)
版本控制
了解版本控制器么? 了解一些 GitHub
基本操作会么? 我都用的 Windows 的图形界面进行操作的 (面试官心中可能有一万只草泥马在奔腾....)
GitHub 的工作原理是什么呀?
我把我的代码上传到 GitHub 的仓库上, 然后别人可以下载进行代码添加然后上传更新仓库, 我可以再下载更新过的继续进行添加修改
那如果你们两个修改同一份代码发生冲突怎么办? 我知道的方法只有回滚, 就是和队友交流看谁的代码更重要, 然后进行一个回滚操作.
只能这样么, 必须有一个人牺牲么?
我了解到 GitHub 的功能其实非常强大, 所以肯定有更好的方法吗, 只是我现在对 GitHub 的使用仅限于自己代码的存储以及一些小的修改, 所以并不了解更好的方法....
其他
你常用的代码编写工具是什么? Sublime text
你要修改很多相同的地方怎么办? 选中一个 按 Ctrl+D 选取多个 然后一起改
Photoshop 怎么样? 可以进行简单的 psd 页面图的 ps 不会人物风景的美化
想要导出一个文件提及比较小的 PNG 怎么做 存储为 Web 所用格式...(应该不对~)
性能优化了解多少
项目 (这里聊了很久)
给我介绍一下你都做过哪些项目吧? 巴拉巴拉一堆没有什么特定答案~
你是怎么进行团队项目的合作呢? 巴拉巴拉一堆没有什么特定答案~
你现在在学些什么呀? Linux 下 Qt 开发~~ 巴拉巴拉~
做前端有用不到 C++, 你学他有什么用呀? 我不只是一个写前端的, 我还是一个程序员, C 和 C++ 是这些语言的基础, 所以巴拉巴拉~
你最满意的 C++ 程序讲一下? Qt 呀, 类呀~ 什么的~
你觉得淘宝首页有哪些技术优势?
页面很大, 要承载的东西也很多, 但是可以让用户清晰明了的找到想要找的东西证明布局做的非常好, 然后里面包括图片轮播呀个中点击事件呀什么的事件也很多, 所以避免事件冲突也很腻害~
那你觉的你用多久可以写出淘宝首页? 呃~ 一个星期吧 (这个可真的不知道什么样的答案合适)
你为什么想来淘宝技术部? 因为技术牛, 而且有很多大牛在这个团队里, 如果我有机会的成为其中一员的话就业可以学到更多的东西啦~
你觉得你有什么优势可以来淘宝技术部? 嘿嘿, 就不告诉你我是怎么答得~~
来源: http://www.bubuko.com/infodetail-3486486.html