整理下我所遇到的前端面试题

整理下我在面试的时候所遇到的一些问题,想到哪里就更新到哪里.(ps:不定期更新~)

Q1.请说出css选择器ul>li+li表示的含义,并写出选择前5个li

表示选择除了第一个li的所有li
ul>li:not(:nth-of-type(n+5))

Q2.请说出html5的常用标签,分别应用于什么情景

header(页眉),footer(页尾),nav(导航),article(独立的文章内容),section(章节,对页面的内容进行分块,模块),aside(侧边栏,广告),hgroup(标题或标语的组合),address(地址),menu(菜单)

Q3. 请说下CSS3里transitions, transforms和animation的区别

Transitions作用:平滑的改变CSS的值.无论是点击事件,焦点事件,还是鼠标hover,只要值改变了,就是平滑的,就是动画 eg: transition: background-color 0.3s ease;
transitions属性: transition-property ://指定过渡的性质,比如transition-property:backgrond 就是指backgound参与这个过渡 transition-duration://指定这个过渡的持续时间
transition-delay:
//延迟过渡时间
transition-timing-function:*//指定过渡类型,有ease(越来越慢) | linear(匀速运动) | ease-in(先慢后快) | ease-out (先快后慢)| ease-in-out(先慢后快再慢) | cubic-bezier(贝塞尔曲线)
transform 变换,使用过photoshop的人应该知道里面的Ctrl+T自由变换。transform就是指的这个东西,拉伸(skew deg),压缩(scale %),旋转(rotate deg),偏移(translate px) eg:.trans_skew { transform: skew(35deg); }
animation 动画 @keyframes name{不同时间段样式规则 0-100%} ,animation:名字, 播放时间,效果,开始时间

Q4. 行内元素,块状元素,都有哪些?

行内元素:a,abbr,b,br,em,font,i,img,input,s,select,span,strong,sub,sup,tr,u,textarea
块状元素:address,div,center,dl,form,h1-h6,hr,menu,ol,p,pre,table,ul

Q5. 说下div的盒模型

标准盒子所占位置:border+padding+margin+width
IE盒子的大小:border+padding+width
IE盒子所占位置:margin+width
标准盒子的大小 :width
改变盒模型用 box-sizing:border-box/content-box/padding-box
border-box border+padding+width
content-box: width
padding-box:padding+width

Q6. img的格式有哪些,

gif格式 : 支持256种颜色,支持文件背景透明,支持动画 ;一般文件小下载快
jpg格式 : 不支持文件透明,不支持动画效果,有损压缩格式,但图像颜色品质高(精度高),一般用于数码相片。位图(由一个一个像素像素点组成);一般文件大、下载快
png格式:无损压缩格式.矢量图,支持文件背景透明(png8 - 256色,适合单一颜色的logo icon. png24 - 颜色更丰富,色彩更鲜艳)
gif, svg,webp(谷歌开发的一种旨在加快图片加载速度的图片格式,体积只有jpeg的2/3)

Q7. 垂直居中都有哪些办法

  1. 利用position 和 负边距(transform:translateY(-50%) )
  2. display:tabel-cell; vertaical-align:middle
  3. display:flex; justify-content:center; aligin-items:center
  4. line-height ,height

Q8, 用css写出: 2个div并列并且全屏,已知左侧固定宽度,右边自适应宽度,有几种解决办法

  1. 父级display:flex, 子级:flex:200px;flex:1
  2. 第一个div左侧定位,第二个div padding-left:200px;
  3. float:left; 第二个div float:left; width:calc(100%-200px)
  4. 最外层div display:table.border-collapse:separate(边框独立) 中间层div display: table-row, 最里面的div display:table-cell (让div以单元格显示)

Q9. xhtml html 和 xml 的区别

HTML,超文本标记语言,是语法较为松散的、不严格的Web语言;
XML,可扩展标记语言,主要用于存储数据和结构,可扩展;
XHTML,可扩展超文本标记语言,基于XML,作用与HTML类似,但语法更严格。

Q10.谈下你对表现与数据分离的看法

注意标签的使用,多用语义化的标签,结构清晰,表现应该由CSS来控制,结构应该由html来控制,javascript控制数据填充 . 数据的获取与数据的显示分离

Q11.谈谈你是如何对css 和 js 进行优化的

  1. 减少http请求, 把多个JS请求合并为一个JS请求,把多个CSS请求合并为一个CSS请求。从而减少从客户端向服务器端的请求数。
  2. 压缩组件,不使用@import,会影响文件加载速度
  3. 将样式表放在顶部 ,将脚本放在底部,
  4. 移除重复脚本与css,正确使用css样式
  5. 遵守盒模型规则

Q12. href 和 src 的区别

href 表示超文本引用,在link 和 a等元素上使用,是引用.
src 表示 来源地址,在 img,script,iframe 等元素上使用,是引入,

Q13.css都有哪些选择器?

基础: (通用选择器) E(标签选择器) .(class) #(id)
组合: E,F //同时匹配 , E F //后代选择器 , E>F //匹配所有E的子元素F , E+F //匹配所有紧随E元素之后的同级元素F , E~F //匹配任何在E元素之后的同级F元素
属性选择器 :
E[att] //匹配所有具有att属性的E元素
E[att="val"] //匹配所有具有val属性的E元素
E[att~="val"] //匹配所有att属性具有多个空格分隔的值,其中一个值等于val
E[att|="val"] //匹配所有att属性具有多个连字号分隔符的值,其中一个值以val 开头的E元素
E[attr^="val"] //以val开头的元素
E[att$="val"] //以val 结尾的元素
E[att
="val"] //包含val的元素
伪类 E:first-child //第一个子元素 , E:focus //获取当前焦点 , E:lang(c) //匹配属性等于c的
伪元素: E:first-line //第一行 , E:first-letter //第一个字母 , E:before //之前生成的 , E:after //之后生成的
与用户界面相关的伪类E:enabled //匹配表单中激活的元素 , E:disabled //匹配禁用的元素 , E:checked //被选中的元素 , E:selection //当前选中的元素
结构伪类 E:root //匹配文档的根元素 , E:nth-child(n) //第n个 , E:nth-last-child(n) //匹配倒数第n个 , E:nth-of-type(n) //同类标签 , E:only-child //仅有的一个子元素 , E:empty //不包含任何子元素的元素 , E:only-of-type //使用同一个标签的唯一一个子元素 , E:not(s) //匹配不符合当前选择器的任何元素 , E:target //匹配文档中特定id点击后的效果

Q14. display:none与visibility:hidden的区别是什么?

display : 隐藏对应的元素但不挤占该元素原来的空间。HTML元素(对象)的宽度、高度等各种属性值都将“丢失”
visibility: 隐藏对应的元素并且挤占该元素原来的空间。HTML元素(对象)仅仅是在视觉上看不见(完全透明),而它所占据的空间位置仍然存在。

Q15. sass.less 的区别

动态的样式语言,是CSS预处理器,CSS上的一种抽象层。他们是一种特殊的语法/语言而编译成CSS。
变量符不一样,less是@,而Sass是$;
Sass支持条件语句,可以使用if{}else{},for{}循环等等。而Less不支持;
Sass是基于Ruby的,是在服务端处理的,而Less是需要引入less.js来处理Less代码输出Css到浏览器

Q16. js操作数组有哪些方法

方法: 转换方法: toLocaleString(),toString(),valueOf()
添加 ,arr.push(val) // 将val 追加到数组的最后一项,length自动加1 ,
arr.join(',') //将数组中的各项以逗号拼接成一个字符串返回
arr.unshift(val) // 个或多个新元素添加到数组的开始,数组中的元素自动后移
删除 : arr.pop() //删除数组中的最后一项,length自动减1. arr.shift() //移除最前一个元素,病返回该元素的值,
操作数组 arr.concat(ar1,ar2,...arn) //将arr1数组与arr数组合并成一个新的数组返回,原数组不变
位置.indexOf() //从数组的开头向后查找, lastIndexOf() 从数组的末尾开始向前查找
arr.slice() //基于当前数组中的一或多个项创建的一个新数组(一个参数时,返回从该参数指定位置开始到当前数组末尾的所有项,2个参数时,返回起始和结束位置之间的项,但不包括结束位置的项)
arr.splice() //a 删除,可以删除任意数量的项,需指定两个参数,即(要删除的第一项的位置,要删除的项数) b 插入,(起始位置,要删除的个数,要插入的项) c 替换 (起始位置,要删除的个数,要插入的数量)

Q17.数组去重怎么写

var arr=[3,3,3,4,4,true,false,'3', '22'];
function noRepeat(arr){
var resArr = [] ;
var obj = {};
for(var i=0; i< arr.length; i++){
if(!(obj[arr] ){
resArr.push(arr[i]);
obj[ arr[i] + typeof arr[i] ] =1;
}
}
return resArr;
}
var res = noRepeat(arr);

Q18.字符串去掉前后空格怎么写?

string.prototype.trim = function(){
var reg = /^\s + |\s+S/g;
return this.replace(reg,'');
}

Q19. 一个数组如{abcdefg} 如何变成 {ab_cd_efg}

var str= str+'';
for(var i=1; i<re(str).length,i++){
tmp += re(res)[i-1];
if(i%2 ==0 && i!re(str).length)
{ tmp+='_'}
}

Q20.ajax是什么? ajax的交互模型?

ajax全称是asychronous javascript and xml,可以说是已有技术的组合,主要用来实现客户端与服务器端的异步通信效果,实现页面的局部刷新.
基于web标准(standards-basedpresentation)XHTML+CSS的表示;
使用 DOM(DocumentObject Model)进行动态显示及交互;
使用 XML 和 XSLT 进行数据交换及相关操作;
使用 XMLHttpRequest 进行异步数据查询、检索;
使用 JavaScript将所有的东西绑定在一起。
ajax的交互模型: 同步 阻塞的 浏览器向服务器请求数据,服务器比较忙,浏览器一直等着(页面白屏),直到服务器返回数据,浏览器才能显示 (整个页面都刷新)
异步 非阻塞的 浏览器向服务器请求数据,服务器比较忙,浏览器可以自如的干原来的事情(显示页面),服务器返回数据的时候通知浏览器一声,浏览器把返回的数据再渲染到页面,只刷新ajax部分

Q21. ajax跨域的方法

Q23. json 和 jsonp的区别

json 是一种轻量级的数据交互格式,可读性强
jsonp 是用来解决跨域获取数据的一种解决方案

ajax的核心是通过XmlHttpRequest获取非本页内容,而jsonp的核心则是动态添加<script>标签来调用服务器提供的js脚本。

Q24. 什么是闭包,什么是作用域

function(){} 和 fn(), fn函数在执行的时候会产生一个封闭的作用域, 这个封闭的作用域就是闭包.能够读取其他函数内部变量的函数。
;(function(){})(); 是闭包的一种应用.好处是避免变量冲突,
缺点:如果闭包中有引用类型的数据被占用,那么闭包无法释放,占用内存.
作用域:指对某一变量和方法具有访问权限的代码空间

Q25.cookie的机制有哪两种

1关闭浏览器消失,2,定时

Q26.session 和 cookie的区别

cookie机制采用的是在客户端保持状态的方案, 数据存放在客户的浏览器上, 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。其他信息如果需要保留,可以放在COOKIE中
session机制采用的是在服务器端保持状态的方案。数据存放在服务器上, 更安全些,将登陆信息等重要信息存放为SESSION

Q27. 希望获取到页面中所有的checkbox,用js怎么实现?

var oput = document.getElementsByTagName('input');
var len = oput.length;
var checkBoxList =[];
for(var i=0; i<len; i++){
if(oput[i].type == 'checkbox'){
checkBoxList.push(oput[i]);
}
}
alert(checkBoxList.length);

Q28. 将字符串"<tr><td>{$id}</td><td>{$name}</td></tr>" 中的{$id}体会成10,{$name}替换成tony,(请使用正则表达式)

'<tr><td>{$id}</td><td>{$name}</td></tr>'.replace(/{$id}/g,'10').replace(/{$name}/g,'tony');

Q29. 原声js的window.onload 和 jquery的$(document).ready(function(){}) 有什么不同?

window.onload()方法是必须等到页面内包括图片的所有元素加载完毕后才能执行。
$(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕。

Q30. innerHTML 和 innerText 的区别

ans: innerHTML 设置或获取位于对象起始和结束标签内的 HTML
outerHTML 设置或获取对象及其内容的 HTML 形式
innerText 设置或获取位于对象起始和结束标签内的文本
outerText 设置(包括标签)或获取(不包括标签)对象的文本

Q31.输出今天的日期,以YYYY-MM-DD的方式

function convertDate(date, formate) {
const year = date.getFullYear();
const month = date.getMonth() + 1;
const day = date.getDate();
const hour = date.getHours();
const minute = date.getMinutes();
const second = date.getSeconds();
return formate
.replace(/Y+/, year)
.replace(/M+/, month)
.replace(/D+/, day)
.replace(/h+/, hour)
.replace(/m+/, minute)
.replace(/s+/, second);
}
调用:convertDate(this.state.time,'yyyy-mm-did')

Q32. 给你一个数组,找出最大值和最小值的位置

Math.max.apply(null,str)
Math.min.apply(null,str)

Q33. js中typeof返回的类型有哪些?

string,null,undefined,object,Boolean, number

Q34. 事件绑定和普通绑定的区别?

普通绑定的方法不支持添加多个事件,最下面的事件会覆盖上面的,而事件绑定(addEventListener)方式添加事件可以添加多个。

Q35. 列举3种强制类型转换和2种隐式类型转换

强制类型转换 : toString() , Number() , JSON.parse() , parseInt()
隐式类型转换 !!abc , +ture

Q36. 如何阻止事件冒泡和默认事件

e.stopPropagation();
e.preventDefault();
e.nativeEvent.stopImmediatePropagation();

Q37. 添加 删除 替换 插入节点的方法

添加: appendChild 删除: removeChild 替换:replaceChild 插入:insertBefore

Q38. IE和DOM事件流的区别

IE是冒泡流,DOM事件流是捕获流,

Q39. ajax请求的时候post和get的区别

1.get请求需注意缓存问题,post请求不需担心这个问题
2.post请求必须设置Content-Type值为application/x-form-www-urlencoded
3.发送请求时,因为get请求的参数都在url里,所以send函数发送的参数为null,而post请求在使用send方法时,却需赋予其参数

Q40.如何添加html元素的事件,有几种方法?

通过HTML元素属性, 通过对象属性, 通过W3C监听方式(标准方式)或者IE专属的中间模型添加事件

Q41. 写一个获取非行间样式的函数

function getStyle(obj,attr){
if(obj.currentStyle){
return obj.currentStyle[attr];
}else{
return getComputedStyle(obj,false)[attr];
};
};

Q42. js 斐波那契数列实现

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

Q43. js如何实现面向对象中的继承实现?

Q44. split()和join()的区别

join 将数组中所有原有元素按照某个字符连接成一个字符串。把数组拼接为字符串。
split 将一个字符串按照某个字符拆分为数组。将字符串按某个字符或者其他分割。返回数组

Q45. 解释jsonp的原理,以及为什么不是真正的ajax

动态创建script标签,回调函数
ajax是页面无刷新请求数据操作

Q46. ajax请求时,如何解释json数据

使用eval parse鉴于安全性考虑,使用parse更靠谱

Q47. prototype 和_proto_的关系

对象有属性_proto_ , 指向该对象的构造函数的原型对象。 创建这个对象的函数 隐式原型
prototype指向该方法的原型对象。显式原型

Q48. setTimeout()和setInterval()方法的区别

setTimeout(表达式,延时时间)在执行时,是在载入后延迟指定时间后,去执行一次表达式,记住,次数是一次
setInterval(表达式,交互时间)则不一样,它从载入后,每隔指定的时间就执行一次表达式

Q49.call和apply的区别

obj.call(this,obj1,obj2,obj3)
obj.apply(this,arguments)

Q50. "==" 和"==="的区别

== 会自动转换类型, === 不会,恒等

Q51.清除浮动的几种方式

1.使用空标签清除浮动,clear:both (能清除任何标签,增加无意义的标签)

  1. 使用after伪元素,(用于非ie)
杂七杂八的问题

Q1.谈谈你对node.js 的理解

node 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm,是全球最大的开源库生态系统

Q2.谈谈你对vue.js 的理解

vue 渐进式JavaScript框架,易用,灵活(简单小巧的核心,渐进式技术栈,),高效(16kbmin+gzip的运行大小,超快虚拟DOM,最省心的优化)
Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用。
Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

Q3. 谈谈你对SEO的理解

Meta标签优化 主要包括主题(Title),网站描述(Description),和关键词(Keywords)

Q4.http常见的状态码有那些?分别代表是什么意思?

200 - 请求成功
301 - 资源(网页等)被永久转移到其它URL
400 - 客户端请求有语法错误
403 - 服务器收到请求,但是拒绝提供服务
404 - 请求的资源(网页等)不存在
500 - 内部服务器发生不可预期的错误
503 - 服务器当前不能处理客户端请求

Q5. 模块开发怎么做?

ans: 模块化开发模式:浏览器端requirejs,seajs;服务器端nodejs;ES6模块化;fis、webpack等前端整体模块化解决方案;grunt、gulp等前端工作流的使用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容