赞
踩
今天给朋友们分享一到三年前端最全的面试题(其中包括HTML,CSS,JS,React,Vue,NodeJS,版本仓库的使用,互联网基础知识)。
请看此链接:笔者个人选择工作的经验分享
请看此链接:面试流程以及面试技巧全分析(不管你有几年经验看了以后都会提高你的面试成功几率)
请讲一下HTML5的特点。
答案:https://www.h5course.com/a/2015050292.html
html5新特性:
答案:https://www.w3cschool.cn/html5/html5-intro.html
你知道的语义化的标签有哪些?
答案:这个链接里不仅讲了几个常见的H5新的语义化元素,还在最下方介绍了如何使不兼容这些标签的浏览器还能够按照我们预期的样子进行展示【如果要看更多的语义化标签请自行百度】:https://www.runoob.com/html/html5-semantic-elements.html
为什么要使用HTML5的语义化标签?
答案:去掉或样式丢失的时候能让页面保留基本样式呈现清晰的结构。利于SEO。减少团队差异化。
CSS3新增了哪些特性?
答案:CSS新特性详细讲解
请讲一下CSS3动画的优点。
答案:代码比较简单,再就是性能好,浏览器会对其进行优化。
如何写宽高自适应的APP?
答案:请访问:前端项目自适应屏幕的技巧
一个页面上有大量的图片(大型电商网站),加载很慢,你有哪些方法优化这些图片的加载,给用户更高的体验。
答案:使用精灵图,将小规格的图片整合为一张精灵图,减少浏览器请求次数。【http2.0可以不考虑此问题】
使用图片懒加载:【笔者感觉这篇文章写的不错:】https://zhuanlan.zhihu.com/p/55311726
图片懒加载原理?
答案:没有在展示区域的图片不给他设置src属性,即将展示那个图片的时候去设置它的src属性。
CSS中可以通过哪些属性,使得一个DOM元素不显示在浏览器的可视范围内?
答案:
display: none;
visibility: hidden;
opacity: 0;
还有其他的很多思路:
比如使用定位移出可视界面外然后overflow:hidden起来。
再比如translate改变XYZ轴位置隐藏等等。
rgba()和opacity的透明效果有什么不同?
答案:opacity透明子元素会跟着透明(继承),rgba()的透明子元素则不会继承。
请描述display:none;visibility:hidden;opacity:0;三者的区别;
答案:
你知道的css让元素垂直水平居中的方法有哪些?
答案:请访问:元素垂直水平居中的方法
请讲一下盒模型。
答案:css盒模型分俩种:IE盒子模型和标准盒子模型。
在 标准盒子模型中,width 和 height 指的是内容区域的宽度和高度。增加内边距、边框和外边距不会影响内容区域的尺寸,但是会增加元素框的总尺寸。
IE盒子模型中,width 和 height 指的是内容区域+border+padding的宽度和高度。
BFC是什么?【个人感觉过时了,但是面字节被问到了】
答案:BFC是指浏览器中创建了一个独立的渲染区域,并且拥有一套渲染规则,他决定了其子元素如何定位,以及与其他元素的相互关系和作用。
你开发过程中遇到过最棘手的html与css问题是什么?
参考答案:可随意举例:
比如:做左侧sidebar导航,具体可看:左侧sidebar和整体分开滚动,并在X轴正常显示二级菜单
比如:安卓和ios兼容问题
HTML/CSS页面重绘与回流
答案:https://www.cnblogs.com/leetom/archive/2011/01/20/2845920.html
最终效果:
typeof xx === 'object' && !xx
typeof xx === 'object' && Boolean(xx.forEach)
typeof xx === 'object' && Boolean(xx.getDate)
1 == '1'
'1' + 1
'1' - 1
parseInt(str,radix)/parseFloat(str,radix)/Number()
转变成数字。Boolean(param)
转变成布尔值subString()
转变成字符串详细关于JS数据类型转换的内容请观看:一篇文章搞懂JS转换规则
6. “ == ” 和 “ === ” 还有 “ != ” 和 “ !== ”的区别?
答:“ == ” 和 “ != ”会做数据隐式类型转换,转换完数据类型在做比较。而“ === ” 和 “ !== ”会先判断数据类型,如果俩者的数据类型不一致直接返回false就不会再去做值的比较了。
7. 讲一讲“ || ” 和 “ && ”。
答案:请访问:彻底了解"||“和”&&"
8. “ i++ ” 和 “ ++i ”的区别。
答案:i++是先引用i的值而后将i递增1。
++i是先将i的值加1而后引用它的值。
9. break,renturn,continue三者的区别
答案:return、break与continue的区别
10. 请讲一讲递归。
函数自身调用自身。 详细请看:
①递归
②用递归实现遍历迭代
11. 请讲一下JavaScript的闭包。有什么特点?对页面有什么影响?
答案:JS闭包的理解
12. 你知道哪些算法?
答案:请访问:JS算法小总结
13. 你一般如何调试bug?
答案:请访问:前端调试bug的方法
14. 数组的常用API你知道哪些?
答案:请访问:数组的常用API详解
15. 请讲将数组与伪数组的区别。
答案:请访问:伪数组是什么?伪数组与数组的区别
16. 请讲讲你对面向对象编程的理解。
答案:请访问:面向对象编程(OOP)的概念
17. 请讲讲原型链。
答案:JS原型知识整理
18. 请讲讲继承的方法。
答案:JS继承的六种方法
19. 请讲讲JavaScript作用域。
答案:JS作用域与声名提升
20. 请讲讲变量的声明提升
答案:JS作用域与声名提升
21. 创建对象的方法有哪些?
答案:https://blog.csdn.net/weixin_43606158/article/details/94912023
22. 请讲讲ECMAScript的内置对象。
答案:https://blog.csdn.net/weixin_43606158/article/details/94912023
23. Array在ES5新增遍历的API它们每个的用法,返回值,参数。
答案:数组ES5新增遍历迭代的方法及其区别
24. ES5/ES6新增的哪些东西是你平时开发中常用到的?
答案:ES5/6新特性
25. 列举浏览器对象模型BOM里常用的至少四个对象,并列举window对象的常用方法至少五个。
答案:BOM内容的小整理
26. 请讲一下你知道的性能优化的方法。
答案:提高JS性能的12个技巧
27. 性能指标有哪些
28. 如何发现性能瓶颈
29. 性能调优的常见手段
30. 说说你在项目中如何进行性能优化
31. 事件绑定和普通事件有什么区别?
答案:事件绑定和普通事件的区别
32. IE和其他浏览器事件流的区别。
答案:IE浏览器是事件冒泡,其他浏览器是事件捕获(标准DOM事件流)。
33. IE的标准下有哪些兼容性的写法?
答案:javascript之IE兼容篇
34. 请讲一下this的指向问题。
答案:this的指向
35. 更改this指向的方法有哪些?
答案:更改this指向的方法及其区别
36. 请讲一下bind(),call(),apply()三者的区别。
答案链接同上
37. 手写call方法。
38. 事件委派/事件委托是什么?
答案:事件委派的使用及作用
39. 如何阻止事件冒泡和浏览器默认事件?
答案:浏览器事件默认行为介绍与阻止的方法
JS事件流介绍与阻止事件冒泡
40. 添加,删除,替换,插入到某个节点的方法。
DOM知识详细整理
41. document.load和jquery.ready的区别。
答案:加载页面之前的方法介绍
42. 请讲一下JavaScript的同源策略。
答案:JavaScript的同源策略
43. 请说出你知道的跨域的方法有哪些?最常用的是哪个?怎么使用的?
答案:前端跨域的六种解决方法
44. JavaScript是一门什么样的语言?它有哪些特点?
答案:弱类型语言,类型会做隐式转换,作用域,声名提升。。。
45. 正则表达式构造函数var reg = new RegExp(‘xxx’)与正则表达式字面量var reg = /xxx/有什么不同?
答案:当使用RegExp()构造函数的时候,不仅需要转义引号(即 \’ 表示 ’ ),并且还需要双反斜杠才能表示一个反斜杠。所以我们使用正则表达式字面量的效率更高。
46. JavaScript中callee和caller的作用?
答案:JavaScript中callee和caller的区别
47. 简述JavaScript的DOM里document获取节点的方法,并说出对应作用。
答案:DOM知识详细整理
48. 简述创建函数的几种方式。
答案:JS函数介绍
49. 把script标签放在body结束标签之前和结束标签之后有什么区别?浏览器会怎么解析它们?
答案:如果说放在body的封闭之前,将会阻塞其他资源的加载。如果放在body封闭标签之后,不会影响到body内元素的加载。
50. 请描述iframe的优缺点。
答案:Iframe介绍
51. 请谈谈cookie、localStorage和SessionStorage的区别和特点。
答案:客户端缓存的方法详细介绍
52. JS延迟加载的方式有哪些?
答案:1.script标签的defer和async属性。2.动态创建DOM方式(创建script,插入到DOM中,加载完毕之后callback)。3.按需异步载入js
53. 哪些操作会造成内存泄漏?
答案:内存泄漏指任何对象在您不再拥有或需要它的时候它仍然存在。
会引发内存泄露的情况:1.setTimeout的第一个参数使用字符串而非函数的话,会导致内存泄露。2.闭包。3.控制台日志。4.循环(在俩个对象彼此引用且彼此保留时,就会产生一个循环)。
54. 请说一下JavaScript中的垃圾回收机制。
答案:垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。如果一个对象的引用数量为0(没有其他对象引用过该对象),或对该对象的唯一引用是循环的,那么该对象的内存即可回收。
55. 在js中0.1+0.2等于多少?如何让它得到正确答案?
答案:等于0.30000000000000004。原因是因为浮点数运算中产生的误差。
最完善的解决方法:
不管是加减乘除都有这个问题,所以我们可以在传递一个额外的参数然后里面加一个switch判断使用什么计算,这样就是一个通用的计算器了。
function add(param1, param2) {
return parseFloat((param1 + param2).toFixed(10));
}
add(0.1, 0.2); // 0.3
关于浮点数加减乘除的问题解决方法请看:https://wudi98.blog.csdn.net/article/details/105530637
56. 你用过axios么?
答案:axios的使用
57. async,promise,settimeout的执行顺序
答案:一篇文章彻底搞懂异步,同步,setTimeout,Promise,async
58. 前端开发这么久了你知道哪些常用的网站?
答案:前端开发应知网站
59. 你写过哪些前端工具(功能)函数?
答案:前端开发常用功能函数总结
60. async/await 和 promise 的区别。
答案:
async/await 是建立在 Promise上的,不能被使用在普通回调以及节点回调
async/await 和 Promises 很像,不阻塞
async/await 代码看起来像同步代码。
Promise代码完全都是Promise的API(then、catch等等),操作本身的语义反而不容易看出来
61. 节流和防抖
答案:JS的节流和防抖实际应用
62. Event Loop,事件循环是什么?
答案:一篇文章彻底搞懂异步,同步,setTimeout,Promise,async【文章末尾做了event loop总结】
nodejs与普通js的Event Loop:https://juejin.im/post/5b8f76675188255c7c653811
63. 如何中断一个请求?
64. for(var i = 0; i <= 5; i++) {console.log(i)}的执行结果,for(var i = 0; i <= 5; i++) {setTimeout(() => {console.log(i)}, 1000)}的执行结果
答案:
普通的循环里面的输出0,1,2,3,4,5
在计时器里面的输出:6,6,6,6,6,6
因为计时器会把每一次执行的函数放到异步队列里面,等到时间到的时候去输出i的时候i已经执行到了6(退出循环时的值)的时候,所以在执行这些function的时候每次都是输出6了。
补充:如果想在计时器当中输出0~5的话,那就用let声明
因为for循环头部的let不仅将i绑定到for循环中,事实上它将其重新绑定到循环体的每一次迭代中,确保上一次迭代结束的值重新被赋值。setTimeout里面的function()属于一个新的域,通过var定义的变量是无法传入到这个函数执行域中的,通过使用let来声明块变量能作用于这个块,所以function就能使用i这个变量了。
由于内容过多,于是笔者单独整理了一篇文章,请点击链接: React一到三年面试题总结以及进阶题
由于内容过多,于是笔者单独整理了一篇文章,请点击链接: Vue一到三年面试题总结
答案:
1.用户输入
当用户输入关键字并按下回车之后,这意味着当前页面即将要被替换成新的页面,不过在这个流程继续之前,浏览器还给了当前页面一次执行beforeunload事件的机会,beforeunload事件允许页面在退出之前执行一些数据清理操作,还可以询问用户是否要离开当前页面。
2.url请求过程
首先会查找本地hosts文件看是否有缓存,如果没有那么浏览器都会开启一个线程来处理这个请求,同时在远程DNS服务器上启动一个DNS查询。这能使浏览器获得请求对应的IP地址。
浏览器与Web服务器通过TCP三次握手协商来建立一个TCP/IP连接。该握手包括一个同步报文,一个同步-应答报文和一个应答报文,这三个报文在浏览器和服务器之间传递。该握手首先由客户端尝试建立起通信,而后服务器应答并接受客户端的请求,最后由客户端发出该请求已经被接受的报文。
一旦TCP/IP连接建立,浏览器会通过该连接向远程服务器发送HTTP的GET请求。远程服务器找到资源并使用HTTP响应返回该资源,值为200的HTTP响应状态表示一个正确的响应。
此时,Web服务器提供资源服务,客户端开始下载资源。
3.准备渲染阶段
默认情况下,chrome会为每个页面分配一个渲染进程,也就是说,每打开一个新页面就会配套创建一个新的渲染进程。
4.渲染阶段
文件解码成功后会开始渲染流程,先会根据HTML创建DOM树,有CSS的话会去构建CSSOM树。如果遇到script标签的话,会判断是否存在async或者defer,前者会并行进行下载并执行js,后者会先下载文件,然后等待HTML解析完成后顺序执行。
如果以上都没有,就会阻塞住流程直到js执行完毕。
CSSOM树和DOM树构建完成后会开始生产Render树,这一步就是确定页面元素的布局、样式等等诸多方面的东西。
在生成Render树的过程中,浏览器就开始调用GPU绘制,合成图层,将内容显示在屏幕上了。
【参考雅虎优化规则】
- 减少http请求【精灵图,合理缓存,资源合并、压缩】,图片懒加载
- 将外部js文件置底
- 将css放在页面最上面
- 避免在CSS中使用Expressions
- 减少关键资源的个数和大小(webpack拆/合包,懒加载等)
- 减少关键资源RTT【往返时延】的时间(Gzip压缩,边缘节点CDN)
- JS代码不可占用主线程太久,与首屏无关的脚本加上延后处理(async/defer)属性,与无关的交给Web Worker。
- CSS用对选择器(尽可能绑定Class或Id),否则会遍历多次。
持续更新中。。。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。