前端工程师学习路线(给大家整理了HTML,CSS,JavaScript等等全套学习资料)
一、入门前端三剑客
1、HTML
html 学起来还是挺简单的,无论你是否有编程基础,我觉得都可以快速入门,对于新手,我推荐找个入门的视频看一下,然后跟着视频打代码就可以了,入门教程随便在网上找个免费的视频就可以了,随便搜索「html入门」即可,或者看菜鸟教程的一个入门教程也行。
看完视频,也可以看一下文字版的教程,不知道大家有没有看过阮一峰写过的教程,我觉得他写的教程都很棒,所以这里我也推荐下大家看一下阮一峰写的这份 HTML 入门教程,可以让你理解的更加透彻:HTML 教程
大家切勿眼高手低,一定要跟着视频或者书籍上的案例打代码,写代码的编辑器,我推荐 VS-Code,反正选一款你喜欢的编辑器就行,现在这些编辑器都有很多插件,像 VS-Code 这些编辑器,用好一款就可以写各种语言的代码了。
2、CSS
没啥好说的,和 HTML 相辅相成,你在学习 HTML 的过程中,其实也一直都在接触 CSS,所以你学了 HTML 之后,感觉几个小时就可以学完 CSS 了,还是一样,推荐找个视频快速入门,不多说。
html 是一门标签语言,里面有各种各样的标签,很多初学者学了之后可能就把这些标签忘了,有人可能会问,老是忘了怎么办?
忘了就忘了,没事的,不需要强行记住这些标签,你需要的是:脑子里有个印象,当你这实现某个功能的时候,你知道 HTML 有某个标签可以实现这样的功能就可以了,然后翻开对应的教程,你能够根据教程使用这个标签即可。
用的次数多了,也就记住了,所以学完 HTML 和 CSS,一定要多多实践,随便打开一个网页,对着葫芦画瓢,自己写一个和它类似的就可以了。
3、JavaScript
比起 HTML 和 CSS,JavaScript 会难一些,不过如果你有其他编程语言基础,例如学过 C 语言,Python 或者 Java 啥的,那学起 JavaScript 也是分分钟的事。
前面的 HTML 和 CSS,我的推荐大家找个视频快速入门即可,但是对于 JavaScript,假如你时间不是很紧,那么我推荐你用书籍系统学一下,有些知识,趁着有时间,一定要系统学,这样可以打下很深的底子,如果你觉得难的话,也可以先用视频快速入门,之后再回过头来钻研书籍,系统过一遍,通过系统学习,你会明白很多原理,学到很多设计思想,我看过一本《高性能JavaScript-中文版》,感觉还好,就推荐这一本吧。
学了 JavaScript 之后,可以学一学 ES6,面试貌似也经常会问到,可以看一看阮一峰写的一份入门教程:ES6 教程
二、框架
目前前端用的比较多的主要有 Vue 和 React ,在学习框架之前,一定要先用 HTML + CSS + JavaScript 这些做一些项目,因为这些框架的底层实现,其实就是 JavaScript 实现的,然而,居然还有人知道如何使用 Vue,但没学过 JavaScript,这显然不合适,只有你体验过 HTML + CSS + JavaScript ,你才能更好着明白 Vue 和 React 的好处。
不过对于初学者,可以先学习 Vue,Vue 可能更好入门一些,之前实习的时候,被迫学习了几天的 vue。你可以去B站找一些课程或者购买
不过你看了课程之后,你去做项目的话,其实还是会遇到好多问题的,特别是在网络请求那块,在解决问题的过程中,你就能更加理解一些原理了。
学到什么程度?
对于初学者,我的一半建议就是,跟着一份教程,过一遍,然后做对应的项目即可,之后遇到啥,就去搜索啥,不用纠结这个学到什么程度。
Vue 和 React 随便选一个重点学习即可,我推荐 vue,不过学了 Vue 之后,有时间的话,我建议可以了解下 React,快入通过视频了解,感觉几个小时或者一两天就够了。
三、数据结构
无论你是走什么岗位,数据结构都是必须学习的一门课程,从面试的角度来讲,面试基本比问,特别是校招;从个人的提升上来看,学好数据结构与算法,可以让你走的更远。
但是,数据结构与算法这玩意,可深可浅,不过我觉得至少得掌握如下基础知识:
1、时间复杂度、空间复杂度
2、链表、队列、栈
3、树:初级:二叉树,查找二叉树,进阶:AVL树,红黑树等,至少掌握初级吧。
4、图(图有好多种算法,深度/广度搜索,最短路径、最小生存树等),对于图,其实无论是面试还是工作,都挺少用到,学起来也有一定难度,假如你时间不多,我觉得可以先不学。
不过如果你是科班的,那么这些我觉得你大一第二学期把这些都学完是最好的了,没学完也问题不大,有些人可能是先教《离散数学》这本课,为数据结构与算法做铺垫。
书籍推荐:你学过 JavaScript,所以可以用 Javascript 来写这些数据结构,至于书籍,其实我也不知道推荐啥,网上根据目录找一本:
把基础数据结构学了之后,我觉得你要保持刷题,这个还是挺重要的,例如可以每天保持刷一两道,刚开始刷会挺吃力,但后面熟练了,就会快很多,不过很多人在吃力的那会,就放弃了,所以也就有了人与人之间的差距。
我觉得至少把《剑指 offer》刷完吧,刷完之后,可以去把 leetcode 中 top 100 的热门题做了。
当然,如果你想更加系统着学习算法,可以看我之前写的算法学习路线:谈一谈算法学习之路
四、计算机网络
无论是前端开发还是后端开发,说到底都是数据通过网络在多台主机之间的交互,而且对于前端,计算机网络的知识,用的可能比后端还多,特别是 HTTP 这块,所以呢,计算机网络必须好好学,而且还得重点学。
五、浏览器工作原理
学前端,基本天天和浏览器打交道,因为网页上的各种界面,都是由浏览器来渲染的,所以还是非常有必要学习一下浏览器相关的知识。
如果你在浏览器按 F12,会出现一个「调试」的界面
里面有很多东西,例如各种网络请求数据,各种脚本数据,感兴趣的话,可以去研究研究。
那么具体要学习哪些呢?
我觉得至少得了解一下本地 cookie ,localStorage,SessionStorage 存储吧,还有就是,如何查看一个 http 的请求状态,浏览器关闭后会做哪些处理之类的。
总的来说,就是,从我们发起一个 http 请求,到页面展示如初,浏览器都经历了哪些逻辑处理?
六、进阶
学完了上面这些,可以学一些帮助我们更好着构建一个前端项目的工具,比较常见的有如下几种:
Node.js:这个必须学,主要就是可以帮助我们很快着构建出一个 web 项目,一条命令就搞定了,入门可以在B站/腾讯课堂看视频。
进阶或者更甚层次了解,一般都得看书,自己网上搜一本吧。
Webpack:不同浏览器对 JavaScript 的特性支持的不一致,可以通过构建工具把 JavaScript 代码转换成浏览器能支持的。使用构建工具也能够做到性能优化,比如压缩代码,这个 webpack 可以了解一下,在以后做项目的过程中,还是经常用到 node.js 和 webpack 的,我觉得刚开始会使用就好,后面遇到问题了,在通过问题驱动的方式去深入了解。
七、学习顺序问题
这里讲一下学习顺序的问题,就是说学习了 html + css + javascript 之后,我是先学习前端的一些框架好啊,还是学习数据结构与算法好啊,还是学习计算机网络,浏览器工作原理好呢?
我觉得这个和你时间有关,假如你还是大一大二的话,学校会有数据结构,计算机网络的课程,我觉得跟着学校的顺序学就行,然后的话,像刷题,我觉得有些东西同时做并不会存在矛盾,例如我就建议刷题这个时期,长期保持,然后一边做其他的。
总的来说,我觉得也可以按照我说的这个学习顺序来学,然后算法那一块,当你学习了 Javascript 之后,就可以穿拆整个过程了。
1339页前端面试模块笔记
主要内容:JavaScript、Css、ES6、Vue2、Vue3、React、Node.JS、小程序、HTTP、TypeScript、Webpack、Git、Linux、算法与数据结构、设计模式等
JavaScript面试题
- 什么是防抖和节流?有什么区别?如何实现?
- 如何判断一个元素是否在可视区域中?
- 什么是单点登录?如何实现?
- 如何实现上拉加载,下拉刷新?
- 说说你对正则表达式的理解?应用场景?
- 说说你对函数式编程的理解?优缺点?
- web常见的攻击方式有哪些?农如何防御?
- 说说JavaScript中内存泄漏的几种情况?
- Javascript如何实现继承?
- 说说Javascript数字精度丢失的问题,如何解决?
- 举例说明你对尾递归的理解,有哪些应用场景
Css面试题
- css3新增了哪些新特性?
- css3动画有哪些?
- 介绍一下grid网格布局
- 说说flexbox (弹性盒布局模型),以及适用场景?
- 说说设备像素、css像素、设备独立像素、dpr、ppi之间的区别?
- 说说em/px/rem/vh/vw区别?
- 让Chrome支持小于12px的文字方式有哪些?区别?
- 怎么理解回流跟重绘?什么场景下会触发?
- 说说对Css预编语言的理解?有哪些区别?
- 如果要做优化,Css提高性能的方法有哪些?
ES6面试题
- 说说var、let、const之间的区别
- ES6中数组新增了哪些扩展?
- 函数新增了哪些扩展?
- 对象新增了哪些扩展?
- 你是怎么理解ES6中Promise的?使用场景?
- 你是怎么理解ES6中Module的?使用场景?
- 你是怎么理解ES6中Generator的?使用场景?
- 你是怎么理解ES6中Decorator的?使用场景?
- 你是怎么理解ES6新增Set、Map两种数据结构的?
- 你是怎么理解ES6中Proxy的?使用场景?
Vue2面试题
- Vue项目中有封装过axios吗?主要是封装哪方面的?
- 是怎么处理vue项目中的错误的?
- 你了解axios的原理吗?有看过它的源码吗?
- vue要做权限管理该怎么做?
- 说说你对keep-alive的理解是什么?
- 你对SPA单页面的理解,它的优缺点分别是什么?如何实现sPA应用呢
- SPA首屏加载速度慢的怎么解决?
- vue项目本地开发完成后部署到服务器后报404是什么原因呢?
- SSR解决了什么问题?有做过SSR吗?你是怎么做的?
- vue3有了解过吗?能说说跟vue2的区别吗?
Vue3面试题
- Vue3.0所采用的Composition Api 与Vue2.x使用的Options Api有什么不同?
- vue3.0的设计目标是什么?做了哪些优化
- 用vue3.0写过组件吗?如果想实现一个Modal你会怎么设计?
- vue3.0性能提升主要是通过哪几方面体现的?
- Vue3.0里为什么要用Proxy API替代defineProperty API?
- 说说Vue 3.0中Treeshaking特性?举例说明一下?
React面试题
- 说说React diff的原理是什么?
- 说说对React Hooks的理解?解决了什么问题?
- 说说你是如何提高组件的渲染效率的?在React中如何避免不必要的render?
- 说说React性能优化的手段有哪些?
- 说说你对React Router的理解?常用的Router组件有哪些?
- 说说React Router有几种模式?实现原理?
- 你在React项目中是如何使用Redux的?项目结构是如何划分的?
- 说说对Redux中间件的理解?常用的中间件有哪些?实现原理?
- 说说你对immutable的理解?如何应用在react项目中?
- 说说React服务端渲染怎么做?原理是什么?
Node.JS面试题
- 说说对Node中的process的理解?有哪些常用方法?
- 说说Node中的EventEmitter?如何实现一个EventEmitter?
- 说说Node文件查找的优先级以及Require方法的文件查找策略?
- 说说Node有哪些全局对象?
- 说说对中间件概念的理解,如何封装node中间件?
- 说说对Nodejs中的事件循环机制理解?
- Node性能如何进行监控以及优化?
- 如何实现文件上传?说说你的思路
- 如何实现jwt鉴权机制?说说你的思路
- 如果让你来设计一个分页功能,你会怎么设计?前后端如何交互?
小程序面试题
- 说说你对微信小程序的理解?优缺点?
- 说说微信小程序的生命周期函数有哪些?
- 说说微信小程序的登录流程?
- 说说微信小程序中路由跳转的方式有哪些?区别?
- 说说微信小程序的发布流程?
- 说说微信小程序的支付流程?
- 说说微信小程序的实现原理?
- 说说提高微信小程序的应用速度的手段有哪些?
HTTP面试题
- 说说HTTP常见的请求头有哪些?作用?
- 说说HTTP常见的状态码有哪些,适用场景?
- 什么是HTTP?HTTP和HTTPS的区别?
- 说说HTTP1.0/1.1/2.0的区别?
- 为什么说HTTPS比HTTP安全?HTTPS是如何保证安全的?
- 如何理解CDN?说说实现原理?
- DNS协议是什么?说说DNS完整的查询过程?
- 说说对WebSocket的理解?应用场景?
- 说说地址栏输入URL敲下回车后发生了什么?
TypeScript面试题
- 说说你对TypeScript中高级类型的理解?有哪些?
- 说说你对TypeScript中接口的理解?应用场景?
- 说说你对TypeScript中类的理解?应用场景?
- 说说你对TypeScript中枚举类型的理解?应用场景?
- 说说你对TypeScript中函数的理解?与JavaScript 函数的区别?
- 说说你对TypeScript中泛型的理解?应用场景?
- 说说你对TypeScript装饰器的理解?应用场景?
- 说说对TypeScript中命名空间与模块的理解?区别?
- 说说如何在React项目中应用TypeScript?
- 说说如何在Vue项目中应用TypeScript?
Webpack面试题
- 说说你对webpack的理解?解决了什么问题?
- 说说webpack的热更新是如何做到的?原理是什么?
- 说说webpack的构建流程?
- 说说webpack proxy工作原理?为什么能解决跨域?
- 说说webpack中常见的Loader?解决了什么问题?
- 说说webpack中常见的Plugin?解决了什么问题?
- 说说Loader和Plugin的区别?编写Loader,Plugin的思路?
- 如何提高webpack的构建速度?
- 说说如何借助webpack来优化前端性能?
- 与webpack类似的工具还有哪些?区别?
Git面试题
- 说说你对版本管理的理解?常用的版本管理工具有哪些?
- 说你对Git的理解?
- 说说Git常用的命令有哪些?
- 说说Git中HEAD、工作树和索引之间的区别?
- 说说git发生冲突的场景?如何解决?
- 说说Git中fork,clone,branch这三个概念有什么区别?
- 说说对git pull和git fetch的理解?有什么区别?
- 说说你对git rebase和git merge的理解?区别?
- 说说你对git reset和git revert的理解?区别?
- 说说你对git stash的理解?应用场景?
Linux面试题
- 说说你对操作系统的理解?核心概念有哪些?
- 说说什么是进程?什么是线程?区别?
- 说说你对shell的理解?常见的命令?
- 说说你对linux用户管理的理解?相关的命令有哪些?
- 说说linux系统下文件操作常用的命令有哪些?
- 说说linux系统下文本编辑常用的命令有哪些?
- 说说你对输入输出重定向和管道的理解?应用场景?
算法与数据结构面试题
- 说说你对图的理解?相关操作有哪些?
- 说说常见的排序算法有哪些?区别?
- 说说你对冒泡排序的理解?如何实现?应用场景?
- 说说你对二分查找的理解?如何实现?应用场景?
- 说说你对快速排序的理解?如何实现?应用场景?
- 说说你对选择排序的理解?如何实现?应用场景?
- 说说你对插入排序的理解?如何实现?应用场景?
- 说说你对分而治之、动态规划的理解?区别?
- 说说你对归并排序的理解?如何实现?应用场景?
- 说说你对贪心算法、回溯算法的理解?应用场景?
设计模式面试题
- 说说对设计模式的理解?常见的设计模式有哪些?
- 说说你对工厂模式的理解?应用场景?
- 说说你对单例模式的理解?如何实现?
- 说说你对策略模式的理解?应用场景?
- 说说你对发布订阅、观察者模式的理解?区别?
- 说说你对代理模式的理解?应用场景?