【前端面试】前端面试题300道~~熬夜吐血整理,2024百度前端面试题及答案

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
img

正文

}

8、unix中常用的命令行


虽然上过linux课,但是命令忘得差不多了 尴尬。。。

9、OSI模型,HTTP,TCP,UDP分别在哪些层


这个可以参考我另一个博客:

http://blog.csdn.net/qq_22944825/article/details/78160659

OSI:物理层-数据链路层-网络层-传输层-会话层-表现层-应用层

这里写图片描述

10、解释平衡二叉树,以及在数据结构中的应用(红黑树)


11、快排的时间复杂度和空间复杂度


一个特别好的总结的博客:

12、手写一个jQuery插件


1、$.extend(src)

该方法就是将src合并到jquery的全局对象中去,如:

$.extend({

hello:function(){alert(‘hello’);}

});

2、$.fn.extend(src)

该方法将src合并到jquery的实例对象中去,如:

$.fn.extend({

hello:function(){alert(‘hello’);}

});

13、在jquery方法和原型上面添加方法的区别和实现,以及jquery对象的实现


参考上一个问题答案~

使用jquery的第一件事就是要使用jquery对象,jquery对象和javascript中的DOM对象是不同的。

什么是jquery对象?jquery将一个DOM对象转化为jquery对象后就可以使用jquery类库提供的各种函数。可以将jquery对象理解为一个类,并且封装了很多的方法,而且可以动态的通过加载插件扩展这个类,类似于C#中的分布类partial class。

除了jQuery工具函数,jQuery的操作都是从jQuery对象开始。比如:

attr(key,value)

my photo

$(“#myphoto”).attr(“src”,“/pic/1.jpg”);

jQuery对象是一个特殊的集合对象。即使只有一个元素,jQuery对象仍然是一个集合。说其特殊是因为实际上jQuery对象是包含一个集合对象和各种函数的类。

14、手写一个递归函数


function fact(num) {

if (num <= 1) {

return 1;

} else {

return num * fact(num - 1);

}

}

以下代码可导致出错:

var anotherFact = fact;

fact = null;

alert(antherFact(4)); //出错

由于fact已经不是函数了,所以出错。

用arguments.callee可解决问题,这是一个指向正在执行的函数的指针,arguments.callee返回正在被执行的对现象。

新的函数为:

function fact(num) {

if (num <= 1) {

return 1;

} else {

return num * arguments.callee(num - 1); //此处更改了。

}

}

var anotherFact = fact;

fact = null;

alert(antherFact(4)); //结果为24.

15、对前端路由的理解?前后端路由的区别?


前端的路由和后端的路由在实现技术上不一样,但是原理都是一样的。在 HTML5 的 history API 出现之前,前端的路由都是通过 hash 来实现的,hash 能兼容低版本的浏览器。

http://10.0.0.1/

http://10.0.0.1/#/about

http://10.0.0.1/#/concat

服务端路由:每跳转到不同的URL,都是重新访问服务端,然后服务端返回页面,页面也可以是服务端获取数据,然后和模板组合,返回HTML,也可以是直接返回模板HTML,然后由前端JS再去请求数据,使用前端模板和数据进行组合,生成想要的HTML。

前端路由:每跳转到不同的URL都是使用前端的锚点路由,实际上只是JS根据URL来操作DOM元素,根据每个页面需要的去服务端请求数据,返回数据后和模板进行组合,当然模板有可能是请求服务端返回的,这就是 SPA 单页程序。

在js可以通过window.location.hash读取到路径加以解析之后就可以响应不同路径的逻辑处理。

history 是 HTML5 才有的新 API,可以用来操作浏览器的 session history (会话历史)。基于 history 来实现的路由可以和最初的例子中提到的路径规则一样。

H5还新增了一个hashchange事件,也是很有用途的一个新事件:

当页面hash(#)变化时,即会触发hashchange。锚点Hash起到引导浏览器将这次记录推入历史记录栈顶的作用,window.location对象处理“#”的改变并不会重新加载页面,而是将之当成新页面,放入历史栈里。并且,当前进或者后退或者触发hashchange事件时,我们可以在对应的事件处理函数中注册ajax等操作!

但是hashchange这个事件不是每个浏览器都有,低级浏览器需要用轮询检测URL是否在变化,来检测锚点的变化。当锚点内容(location.hash)被操作时,如果锚点内容发生改变浏览器才会将其放入历史栈中,如果锚点内容没发生变化,历史栈并不会增加,并且也不会触发hashchange事件。

16、介绍一下webpack和gulp,以及项目中具体的使用


17、你对es6的了解


参见阮大大的博客

http://es6.ruanyifeng.com/

18、解释一下vue和react,以及异同点


异同点:vue官网给过答案

https://cn.vuejs.org/v2/guide/comparison.html

只简单的用过vue,用vue写了一个日程表,请赐教哦~

https://yyywwwqqq.coding.me/schedule/dist/

源码地址:

https://coding.net/u/yyywwwqqq/p/schedule/git

19、关于平衡二叉树


平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树,同时,平衡二叉树必定是二叉搜索树,反之则不一定。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。 最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,可以参考Fibonacci(斐波那契)数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量。

20、前后端分离的意义以及对前端工程化的理解


21、使用css实现一个三角形


利用border去画~

先看一下border的布局,如图:

这里写图片描述

所以三角形:

1.设置宽度、高度为0

这里写图片描述

2.不设置border-top

这里写图片描述

3.设置左右border颜色为transparent–透明

这里写图片描述

22、用promise手写ajax


function getJson(url){

return new Promise((resolve, reject) =>{

var xhr = new XMLHttpRequest();

xhr.open(‘open’, url, true);

xhr.onreadystatechange = function(){

if(this.readyState == 4){

if(this.status = 200){

resolve(this.responseText, this)

}else{

var resJson = { code: this.status, response: this.response }

reject(resJson, this)

}

}

}

xhr.send()

})

}

function postJSON(url, data) {

return new Promise( (resolve, reject) => {

var xhr = new XMLHttpRequest()

xhr.open(“POST”, url, true)

xhr.setRequestHeader(“Content-type”, “application/x-www-form-urlencoded”);

xhr.onreadystatechange = function () {

if (this.readyState === 4) {

if (this.status === 200) {

resolve(JSON.parse(this.responseText), this)

} else {

var resJson = { code: this.status, response: this.response }

reject(resJson, this)

}

}

}

xhr.send(JSON.stringify(data))

})

}

getJSON(‘/api/v1/xxx’) // => 这里面是就try

.catch( error => {

// dosomething // => 这里就是catch到了error,如果处理error以及返还合适的值

})

.then( value => {

// dosomething // 这里就是final

})

23、手写一个类的继承,并解释一下


继承的形式有很多中,js高程里面归纳了其中,我简单说一下前三种。

1.原型继承

function Parent(){

this.name = “parent”;

}

Parent.prototype.getName = function(){

return this.name;

}

function Child(){

this.name = “child”;

}

//继承parent

Child.prototype = new Parent();

2.构造函数继承

function Animal(name){

this.name = name;

this.eat = function(){

consoel.log(this.name + “吃饭”);

}

}

var cat = new Animal(“maomi”);

cat.name;

cat.eat();

缺点是:

3.组合继承

24、解释一下call函数和apply函数的作用,以及用法


改变this的指向。

this的指向问题,在你不知道的js这本书中(神书)做了四点归纳:

1.默认绑定 (指 直接调用 foo(), this指向window)

2.隐式绑定(obj.foo(), this指向obj 这里会出现很多坑,下面的问题应该会有解答)

3.显示绑定(利用call、apply、bind改变this)

4.new(var cat = new Animal() , this指向cat对象)

25、你说自己抗压能力强,具体表现在哪里?


26、对前端前景的展望,以后前端会怎么发展


27、手写第一次面试没有写出来的链表问题,要求用es6写


28、平时是怎么学技术的?


29、平时大学里面时间是怎么规划的?


30、接下来有什么计划?这个学期和下个学期的计划是?


31、项目中遇到的难点,或者你学习路上的难点


32、你是通过什么方法和途径来学习前端的


33、手写一个简单遍历算法


34、解释一下react和vue,以及区别


35、你在团队中更倾向于什么角色?


36、对java的理解


37、介绍node.js,并且介绍你用它做的项目


38、手写一个js的深克隆


function deepCopy(obj){

//判断是否是简单数据类型,

if(typeof obj == “object”){

//复杂数据类型

var result = obj.constructor == Array ? [] : {};

for(let i in obj){

result[i] = typeof obj[i] == “object” ? deepCopy(obj[i]) : obj[i];

}

}else {

//简单数据类型 直接 == 赋值

var result = obj;

}

return result;

}

39、for函数里面setTimeout异步问题


40、手写归并排序


<1>.长度为n(n>1),把该输入序列分成两个长度为n/2的子序列;

<2>.对这两个子序列分别采用归并排序,直到长度n小于2;

<3>.将两个排序好的子序列合并成一个最终的排序序列。

function mergeSort(arr) {

var len = arr.length;

if(len < 2) {

return arr;

} else {

middle = Math.floor(len / 2);

var left = arr.slice(0, middle);

var right = arr.splice(middle);

return merge(mergeSort(left), mergeSort(right));

}

}

function merge(left, right) {

var result = [];

while(left.length && right.length) {

left[0] > right[0] ? result.push(right.shift()): result.push(left.shift());

}

if(left.length) {

result = result.concat(left);

}

if(right.length) {

result = result.concat(right);

}

return result;

}

41、介绍自己的项目


42、实现两个排序数组的合并


参考42题中的merge函数。

43、手写一个原生ajax


ajax:一种请求数据的方式,不需要刷新整个页面;

ajax的技术核心是 XMLHttpRequest 对象;

ajax 请求过程:创建 XMLHttpRequest 对象、连接服务器、发送请求、接收响应数据;

一个在stackoverflow的高分回答结合上面的代码,给出get和post的两种不同请求方法:

var ajax = {};

ajax.x = function () {

if (typeof XMLHttpRequest !== ‘undefined’) {

return new XMLHttpRequest();

}

var versions = [

“MSXML2.XmlHttp.6.0”,

“MSXML2.XmlHttp.5.0”,

“MSXML2.XmlHttp.4.0”,

“MSXML2.XmlHttp.3.0”,

“MSXML2.XmlHttp.2.0”,

“Microsoft.XmlHttp”

];

var xhr;

for (var i = 0; i < versions.length; i++) {

try {

xhr = new ActiveXObject(versions[i]);

break;

} catch (e) {

}

}

return xhr;

};

ajax.send = function (url, method, data, success,fail,async) {

if (async === undefined) {

async = true;

}

var x = ajax.x();

x.open(method, url, async);

x.onreadystatechange = function () {

if (x.readyState == 4) {

var status = x.status;

if (status >= 200 && status < 300) {

success && success(x.responseText,x.responseXML)

} else {

fail && fail(status);

}

}

};

if (method == ‘POST’) {

x.setRequestHeader(‘Content-type’, ‘application/x-www-form-urlencoded’);

}

x.send(data)

};

ajax.get = function (url, data, callback, fail, async) {

var query = [];

for (var key in data) {

query.push(encodeURIComponent(key) + ‘=’ + encodeURIComponent(data[key]));

}

ajax.send(url + (query.length ? ‘?’ + query.join(‘&’) : ‘’), ‘GET’, null, success, fail, async)

};

ajax.post = function (url, data, callback, fail, async) {

var query = [];

for (var key in data) {

query.push(encodeURIComponent(key) + ‘=’ + encodeURIComponent(data[key]));

}

ajax.send(url,‘POST’, query.join(‘&’), success, fail, async)

};

使用方法:GET

ajax.get(‘/test.php’, {foo: ‘bar’}, function(response,xml) {

//success

},

function(status){

//fail

});

POST

ajax.post(‘/test.php’, {foo: ‘bar’}, function(response,xml) {

//succcess

},function(status){

//fail

});

44、手写一个promise版的ajax


45、手写实现一个promise


46、手写实现requireJS模块实现


47、手写实现jquery里面的insertAfter


48、react和vue的介绍以及异同


49、AMD和CMD,commonJS的区别


50、介绍一下backbone


51、了解过SEO吗?

52、低版本浏览器不支持HTML5标签怎么解决?

53、用js使低版本浏览器支持HTML5标签 底层是怎么实现的?

54、实现一个布局:左边固定宽度为200,右边自适应,而且滚动条要自动选择只出现最高的那个

55、画出盒子模型,要使谷歌浏览器的盒子模型显示得跟IE浏览器一致(让谷歌跟ie一致,不是ie跟谷歌一致),该怎么做?

56、手写JS实现类继承,讲原型链原理,并解释new一个对象的过程都发生了什么

57、Array对象自带的方法,一一列举

58、若干个数字,怎么选出最大的五个

59、Array对象自带的排序函数底层是怎么实现的?

60、常用的排序算法有哪些,介绍一下选择排序

61、了解navigator对象吗?

62、手写一个正则表达式,验证邮箱

63、link和@import引入CSS的区别?

64、刚才说有些浏览器不兼容@import,具体指哪些浏览器?

65、介绍一下cookie,localstorage,sessionstorage,session

66、jquery绑定click的方法有几种

67、你的优点/竞争力

68、移动端适配问题

69、react的难点在哪里

70、做过css动画吗

71、如何优化网站

72、以后的规划

73、你做过最困难的事情是啥?

74、css3 html5新特性

75、闭包,ES6,跨域

76、问做过啥项目,用到什么技术,遇到什么困难

77、兼容性

78、盒子模型

79、Array的unshift() method的作用是什么?如何连接两个Array?如何在Array里移除一个元素?

80、用纸笔写一个Closure,任意形式和内容

81、知不知道Array-like Object?

82、如何用Native JavaScript来读写Cookie?

83、知不知道CSS Box-model?

84、如何做一个AJAX Request?

85、Cross-domain access有没有了解?

86、前端安全方面有没有了解?XSS和CSRF如何攻防?

87、HTTP Response的Header里面都有些啥?

88、知不知道HTTP2?

89、输入URL后发生了什么?

90、new operator实际上做了什么?

91、面向对象的属性有哪些?

92、做一个两栏布局,左边fixed width,右边responsive,用纸笔手写

93、讲一下AJAX Request

94、讲一下Cross-domain access

95、介绍一下做过的项目

96、问到了多个服务器怎么弄,架构之类的

97、angular的渲染流程

98、脏检查

99、nodejs的架构、优缺点、回调

100、css 盒模型

101、css 布局,左边定宽右边自适应

102、冒泡和捕获,事件流哪三个阶段?

103、实现事件代理

104、原型链

105、继承的两种方法

106、ajax,原生ajax的四个过程

107、闭包,简单说一个闭包的应用,然后闭包的主要作用是什么

108、css:两个块状元素上下的margin-top和margin-bottom会重叠。啥原因?怎么解决?

109、js:写一个递归。就是每隔5秒调用一个自身,一共100次

110、cookie和session有什么区别

111、网络分层结构

112、你的不足是什么?

113、做了那么多项目,有没有自己的归纳总结

114、工程怎么进行文件管理

115、less和sass掌握程度

116、Cookie 是否会被覆盖,localStorage是否会被覆盖

117、事件代理js实现

118、Css实现动画效果

119、Animation还有哪些其他属性

120、Css实现三列布局

121、Css实现保持长宽比1:1

122、Css实现两个自适应等宽元素中间空10个像素

123、requireJS的原理是什么

124、如何保持登录状态

125、浮动的原理以及如何清除浮动

126、Html的语义化

127、原生js添加class怎么添加,如果本身已经有class了,会不会覆盖,怎么保留?

128、Jsonp的原理。怎么去读取一个script里面的数据?

129、如果页面初始载入的时候把ajax请求返回的数据存在localStorage里面,然后每次调用的时候去localStorage里面取数,是否可行。

130、304是什么意思?有没有方法不请求不经过服务器直接使用缓存

131、http请求头有哪些字段

132、数组去除一个函数。用arr.splice。又问splice返回了什么?应该返回的是去除的元素。

133、js异步的方法(promise,generator,async)

134、Cookie跨域请求能不能带上

135、最近看什么开源项目?

136、commonJS和AMD

137、平时是怎么学习的?

138、为什么要用translate3d?

139、对象中key-value的value怎么再放一个对象?

140、Get和post的区别?

145、Post一个file的时候file放在哪的?

146、说说你对组件的理解

147、组件的html怎么进行管理

148、js的异步加载,promise的三种状态,ES7中的async用过么

149、静态属性怎么继承

150、js原型链的继承

151、jquery和zepto有什么区别

152、angular的双向绑定原理

153、angular和react的认识

154、MVVM是什么

155、移动端是指手机浏览器,还是native,还是hybrid

156、你用了移动端的什么库类和框架?

157、移动端要注意哪些?

158、适配有去考虑么,retina屏幕啊?

159、rem是什么?em是什么?如果上一层就是根root了,em和rem等价么?

160、怎么测试的?会自动化测试么?

161、你觉得你什么技术最擅长?

162、你平时有没有什么技术的沉淀?

163、单向链表怎么查找有没有环?

164、怎么得到一个页面的a标签?

165、怎么在页面里放置一个很简单的图标,不能用img和background-img?

166、正则表达式判断url

167、怎么去除字符串前后的空格

168、实现页面的局部刷新

169、绝对定位与相对定位的区别

170、js轮播实现思路

171、使用js画一个抛物线,抛物线上有个小球随着抛物线运动,有两个按钮能使小球继续运动停止运动

172、java五子棋,说下实现思路

173、如何让各种情况下的div居中(绝对定位的div,垂直居中,水平居中)?

174、display有哪些值?说明他们的作用

175、css定义的权重

176、requirejs实现原理

177、requirejs怎么防止重复加载

178、ES6里头的箭头函数的this对象与其他的有啥区别

179、tcp/udp区别

180、tcp三次握手过程

181、xss与csrf的原理与怎么防范

182、mysql与 MongoDB的区别

183、w3c事件与IE事件的区别

184、有没有上传过些什么npm模块

185、IE与W3C怎么阻止事件的冒泡

186、gulp底层实现原理

187、webpack底层实现原理

188、gulp与webpack区别

189、vuejs与angularjs的区别

190、vuex是用来做什么的

191、说下你知道的响应状态码

192、ajax的过程以及 readyState几个状态的含义

JavaScript 和 ES6

在这个过程你会发现,有很多 JS 知识点你并不能更好的理解为什么这么设计,以及这样设计的好处是什么,这就逼着让你去学习这单个知识点的来龙去脉,去哪学?第一,书籍,我知道你不喜欢看,我最近通过刷大厂面试题整理了一份前端核心知识笔记,比较书籍更精简,一句废话都没有,这份笔记也让我通过跳槽从8k涨成20k。

JavaScript部分截图

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
手机浏览器,还是native,还是hybrid

156、你用了移动端的什么库类和框架?

157、移动端要注意哪些?

158、适配有去考虑么,retina屏幕啊?

159、rem是什么?em是什么?如果上一层就是根root了,em和rem等价么?

160、怎么测试的?会自动化测试么?

161、你觉得你什么技术最擅长?

162、你平时有没有什么技术的沉淀?

163、单向链表怎么查找有没有环?

164、怎么得到一个页面的a标签?

165、怎么在页面里放置一个很简单的图标,不能用img和background-img?

166、正则表达式判断url

167、怎么去除字符串前后的空格

168、实现页面的局部刷新

169、绝对定位与相对定位的区别

170、js轮播实现思路

171、使用js画一个抛物线,抛物线上有个小球随着抛物线运动,有两个按钮能使小球继续运动停止运动

172、java五子棋,说下实现思路

173、如何让各种情况下的div居中(绝对定位的div,垂直居中,水平居中)?

174、display有哪些值?说明他们的作用

175、css定义的权重

176、requirejs实现原理

177、requirejs怎么防止重复加载

178、ES6里头的箭头函数的this对象与其他的有啥区别

179、tcp/udp区别

180、tcp三次握手过程

181、xss与csrf的原理与怎么防范

182、mysql与 MongoDB的区别

183、w3c事件与IE事件的区别

184、有没有上传过些什么npm模块

185、IE与W3C怎么阻止事件的冒泡

186、gulp底层实现原理

187、webpack底层实现原理

188、gulp与webpack区别

189、vuejs与angularjs的区别

190、vuex是用来做什么的

191、说下你知道的响应状态码

192、ajax的过程以及 readyState几个状态的含义

JavaScript 和 ES6

在这个过程你会发现,有很多 JS 知识点你并不能更好的理解为什么这么设计,以及这样设计的好处是什么,这就逼着让你去学习这单个知识点的来龙去脉,去哪学?第一,书籍,我知道你不喜欢看,我最近通过刷大厂面试题整理了一份前端核心知识笔记,比较书籍更精简,一句废话都没有,这份笔记也让我通过跳槽从8k涨成20k。

JavaScript部分截图

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-GTWQwCpD-1713050931493)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值