前端开发两年,你有没有觉得很吃力?,自学web前端开发

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

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

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

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

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

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

正文

  • 预加载技术

  • 小程序分包、预下载等。

利用缓存(空间换时间)

  • CDN 内容分发:获取更近网络节点缓存下来的静态资源

  • 浏览器缓存(自带)

  • 部分资源保存在LocalStorage或者APP缓存中(手动操作)

其他

  • SSR 服务端渲染:解决SPA框架带来JS动态渲染页面带来的延迟和白屏问题。

这些都可以去实践的,难度不大。难度大的地方可能是 dom 节点成千上万的时候渲染的性能问题。这个场景遇到的很少,方案很多。不同人有不同解决方案,有功夫可以自己去尝试尝试。

上面提到很多点都可以深入到很深。由于篇幅原因,点到即止。

纯粹是把一些我以前走过的弯路掰直了再分享给大家。毕竟不是《前端入门到精通》哈哈哈

六、学习移动端web开发

=======================================================================

前端现在为什么这么火?各个公司都还挺缺优秀的前端。原因在于技术红利。

移动端web流行起来之后,特别是H5和小程序,带动了多少前端就业,前端迅速取代了安卓和iOS 的大量岗位。

回到正题:所以作为前端人,移动web一般是都要接触的。不同于PC 端。

移动端有哪些东西呢?不需要全部懂,差不多知道就行了。要用的时候再去学。

  • 绝对单位换相对单位:px => rem / vw / rpx

  • 弹性布局:使用flex、grid布局

  • hairline (1px的粗线处理):使用伪元素 + transform: scale(倍数) 缩放线框

  • WebView 环境了解下

  • 安卓iOS 兼容踩坑:点击延迟、穿透、滚动不流畅、安全区域等等。

  • 小程序开发相关踩坑

  • JSBridge: H5 与App 通信

  • H5动画制作

  • 跨平台框架:react native、weex、flutter 等等

  • 简单的说移动web 就是:html/css/js 跑在手机app 里面的WebView(web运行环境)。

小程序/公众号就是在这个基础上,将自己APP里面的WebView 租售给其他人使用。

微信APP ----- 提供SDK ----> 微信webview ----- 提供运行环境-----> 公众号h5 / 小程序

为什么微信可以容纳几乎无限的H5/小程序页面呢?

因为公众号/小程序的代码都存储在云端,通过不同的路由就可以给几乎无数的开发者使用。

使得微信成为一个运行环境+入口的存在。

七、做前端我有没有觉得吃力?

=========================================================================

**刚做时前端不吃力。**因为我是软件工程专业,学前端之前,学过 C/C++、Java、PHP、.net 成绩还不错基本都是90多分。感觉自己干后端也不吃力。实验室里面的项目都是前后都写。最爱 PHP,当时最崇拜鸟哥。本以为以后就走上PHP后端工程师的道路了,成为鸟哥那样的大神。

由于项目需要的原因,后来渐渐开始学起学 HTML、CSS、JavaScript 这些语法相关的东西。刚接触时没有感觉太大难度。

当时就想着怎么把页面搞好看,搞各种动画炫技。写一个小球从下面弹出来的效果,换各种姿势弹出。当时觉得前端真的有意思,就入了前端的坑。入坑前,以为前端就是搞各种漂亮的页面,各种特性惊艳别人。

随着接触的越来越深。接触到了 AJAX, jQuery ,Bootstrap,前端开始注重体验。各种框架横空出世 backbone => Angular => React => Vue 眼花缭乱。

折腾了 JQuery 开始折腾 backbone 觉得前端还能这样玩。有些迷茫了,感觉脑袋快要炸了,那段时间特别焦虑,疯狂看书写代码,怎么这么多东西要学啊。

JavaScript 也不精通,到原型就不理解了,虽然有C++,JAVA面向对象的知识,但JavaScript 你怎么和别人玩的不是一个套路啊。当时就都用ES6了, 行,学。都用Sass了,行,学。不学也可以,看不懂别人的代码呀。

**毕业前为准备校招前端工程师,真的很吃力。**就怕校招面试时,自己啥都不懂。

功夫不负有心人,校招时候顺利拿到了自己满意的Offer。记得当时和面试官对答入流,好像找到知音一样。面试官也是过来人,基本能问的都问了。

拿到Offer之后就去了实习。实习第一个任务:将一个ES6的后台管理系统重构成 Vue2.0 全家桶的项目。有个导师带,但是她和我是不同项目,出了架构以外代码都是自己写。

这个阶段还是收获了很多:

  • git 命令特别熟练。commit、stash、merge/rebase、cherry-pick、push/pull/fetch、reset等等基本都敲都特别多了

  • 严格了代码规范。Eslint、prettier 都用起来了

  • 会自己写业务组件,会封装高级组件、写常规页面了。基本上大部分不是特别复杂的交互都ok。难一点多找下资料可以做出来。

  • 学会管理API了。自己尝试封装了 axios。统一处理错误和弹窗。

  • 会抽取公共css、JavaScript 函数,编写CSS 变量和JavaScript 常量了

  • webpack 能看懂配置文件了。

实习过后顺利转正。转正之后,换了另外一个导师带,加入到项目组作为一个比较大的项目的核心开发。基本不再做管理系统了。主要做一个saas 平台。涉及比较难的富文本编辑,UI 拖拽生产文章,数据可视化生产报表等等。还写了几个谷歌浏览器插件。

  • 开始提升写页面效率,写的比较快了。

  • 研究 webpack 的插件打包编译效率

  • 研究 babel 编译原理

  • 研究了 Vue 编译的一些原理

  • 研究了 一些图表的使用,多半使用的echart。常规图表基本都用过。

  • CI & CD 自己去搭建。学了一些 shell 脚本开发。研究了 docker 相关的东西。

  • 尝试去写基础组件,搭建基础组件库。

  • 学习 React 相关的语法。

  • 研究富文本编辑,图片压缩裁剪原理等等

  • 写一个简单的微信公众号,接触到了 H5 开发。

工作第一年,基本上主战场在PC 端。**前半年挺吃力,后半年熟练后游刃有余。**会怼产品,会喷设计,会和后端兄弟配合默契。和团队感情也很深了。

无奈项目由于某些原因终止,团队解散,调到新团队。在老东家工作一年多后,由于个人原因离开去了一家新的的公司,主战场从PC 到了手机。开始接触移动H5、hybrid 开发。

八、学习吃力的原因肯定是学习方法不太正确

===============================================================================

总结下一般怎么才能真正学到东西

  • 详略得当:前端知识太多,抓重点学,不要像背字典一样。

  • 不要急着写代码,先理清流程(以一个函数为单位,可以先写注释)再写代码。

  • 看视频看讲解是会误以为自己会了,其实并没有。

  • 学会总结:一句话可以讲清楚的事情,不要多说一句。减少心智负担。

  • 不介意复制代码,但是要知道这个代码里面大致实现原理。感兴趣自己重写一个。

  • 较大的项目,不要急着看代码。可以先把项目跑起来。通过改代码里面的参数来理解里面的核心流程。

  • demo 式编程。对于新框架,参考demo来上手更快更容易理解。

  • 渐进式编程。对于比较复杂的功能/需求。不要想着一气呵成。先实现一个核心,每次往上面加细节,有点像绘画。

  • 断点单步调试很有用,定位bug会更快。当然有些不易调试的应用选择打log。一次打 log 要多打点,免得打完log,有得再加。

  • 黑盒太多的项目,实在找不到bug原因。发给同事帮忙看。可能很快就能看出来。当局者迷,旁观者清。(很多时候是拼写的问题)

九、最后

===============================================================

我总结一下前端面试的知识点,希望能对即将面试和未来面试的小老弟们,有所帮助!skr~~skr(面试题完整文档划到文末直接免费领取。)

HTML


  • HTML5新特性,语义化

  • 浏览器的标准模式和怪异模式

  • xhtml和html的区别

  • 使用data-的好处

  • meta标签

  • canvas

  • HTML废弃的标签

  • IE6 bug,和一些定位写法

  • css js放置位置和原因

  • 什么是渐进式渲染

  • html模板语言

  • meta viewport原理

CSS


  • 盒模型,box-sizing

  • CSS3新特性,伪类,伪元素,锚伪类

  • CSS实现隐藏页面的方式

  • 如何实现水平居中和垂直居中。

  • 说说position,display

  • 请解释*{box-sizing:border-box;}的作用,并说明使用它的好处

  • 浮动元素引起的问题和解决办法?绝对定位和相对定位,元素浮动后的display值

  • link和@import引入css的区别

  • 解释一下css3的flexbox,以及适用场景

  • inline和inline-block的区别

  • 哪些是块级元素那些是行级元素,各有什么特点

  • grid布局

  • table布局的作用

  • 实现两栏布局有哪些方法?

  • css dpi

  • 你知道attribute和property的区别么

  • css布局问题?css实现三列布局怎么做?如果中间是自适应又怎么做?

  • 流式布局如何实现,响应式布局如何实现

  • 移动端布局方案

  • 实现三栏布局(圣杯布局,双飞翼布局,flex布局)

  • 清除浮动的原理

  • overflow:hidden有什么缺点?

  • padding百分比是相对于父级宽度还是自身的宽度

  • css3动画,transition和animation的区别,animation的属性,加速度,重力的模拟实现

  • CSS 3 如何实现旋转图片(transform: rotate)

  • sass less

  • 对移动端开发了解多少?(响应式设计、Zepto;@media、viewport、JavaScript 正则表达式判断平台。)

  • 什么是bfc,如何创建bfc?解决什么问题?

  • CSS中的长度单位(px,pt,rem,em,ex,vw,vh,vh,vmin,vmax)

  • CSS 选择器的优先级是怎样的?

  • 雪碧图

  • svg

  • 媒体查询的原理是什么?

  • CSS 的加载是异步的吗?表现在什么地方?

  • 常遇到的浏览器兼容性问题有哪些?常用的hack的技巧

  • 外边距合并

  • 解释一下“::before”和“:after”中的双冒号和单冒号的区别

JS


  • js的基本类型有哪些?引用类型有哪些?null和undefined的区别。

  • 如何判断一个变量是Array类型?如何判断一个变量是Number类型?(都不止一种)

  • Object是引用类型嘛?引用类型和基本类型有什么区别?哪个是存在堆哪一个是存在栈上面的?

  • JS常见的dom操作api

  • 解释一下事件冒泡和事件捕获

  • 事件委托(手写例子),事件冒泡和捕获,如何阻止冒泡?如何组织默认事件?

  • 对闭包的理解?什么时候构成闭包?闭包的实现方法?闭包的优缺点?

  • this有哪些使用场景?跟C,Java中的this有什么区别?如何改变this的值?

  • call,apply,bind

  • 显示原型和隐式原型,手绘原型链,原型链是什么?为什么要有原型链

  • 创建对象的多种方式

  • 实现继承的多种方式和优缺点

  • new 一个对象具体做了什么

  • 手写Ajax,XMLHttpRequest

  • 变量提升

  • 举例说明一个匿名函数的典型用例

  • 指出JS的宿主对象和原生对象的区别,为什么扩展JS内置对象不是好的做法?有哪些内置对象和内置函数?

  • attribute和property的区别

  • document load和document DOMContentLoaded两个事件的区别

  • === 和 == , [] === [], undefined === undefined,[] == [], undefined == undefined

  • typeof能够得到哪些值

  • 什么是“use strict”,好处和坏处

  • 函数的作用域是什么?js 的作用域有几种?

  • JS如何实现重载和多态

  • 常用的数组api,字符串api

  • 原生事件绑定(跨浏览器),dom0和dom2的区别?

  • 给定一个元素获取它相对于视图窗口的坐标

  • 如何实现图片滚动懒加载

  • js 的字符串类型有哪些方法? 正则表达式的函数怎么使用?

  • 深拷贝

  • 编写一个通用的事件监听函数

  • web端cookie的设置和获取

  • setTimeout和promise的执行顺序

  • JavaScript 的事件流模型都有什么?

  • navigator对象,location和history

  • js的垃圾回收机制

  • 内存泄漏的原因和场景

  • DOM事件的绑定的几种方式

  • DOM事件中target和currentTarget的区别

  • typeof 和 instanceof 区别,instanceof原理

  • js动画和css3动画比较

  • JavaScript 倒计时(setTimeout)

  • js处理异常

  • js的设计模式知道那些

  • 轮播图的实现,以及轮播图组件开发,轮播10000张图片过程

  • websocket的工作原理和机制。

  • 手指点击可以触控的屏幕时,是什么事件?

  • 什么是函数柯里化?以及说一下JS的API有哪些应用到了函数柯里化的实现?(函数柯里化一些了解,以及在* 函数式编程的应用,最后说了一下JS中bind函数和数组的reduce方法用到了函数柯里化。)

  • JS代码调试

面试题完整文档划到文末直接免费领取。


框架


  • 使用过哪些框架?

  • zepto 和 jquery 是什么关系,有什么联系么?

  • jquery源码如何实现选择器的,为什么$取得的对象要设计成数组的形式,这样设计的目的是什么

  • jquery如何绑定事件,有几种类型和区别

  • 什么是MVVM,MVC,MVP

  • Vue和Angular的双向数据绑定原理

  • Vue,Angular组件间通信以及路由原理

  • react和vue的生命周期

  • react和vue的虚拟dom以及diff算法

  • vue的observer,watcher,compile

  • react和angular分别用在什么样的业务吗?性能方面和MVC层面上的区别

  • jQuery对象和JS的Element有什么区别

  • jQuery对象是怎么实现的

  • jQuery除了它封装了一些方法外,还有什么值得我们去学习和使用的?

  • jQuery的$(‘xxx’)做了什么事情

  • 介绍一下bootstrap的栅格系统是如何实现的

浏览器相关


  • 跨域,为什么JS会对跨域做出限制

  • 前端安全:xss,csrf…

  • 浏览器怎么加载页面的?script脚本阻塞有什么解决方法?defer和async的区别?

  • 浏览器强缓存和协商缓存

  • 浏览器的全局变量有哪些

  • 浏览器同一时间能够从一个域名下载多少资源

  • 按需加载,不同页面的元素判断标准

  • web存储、cookies、localstroge等的使用和区别

  • 浏览器的内核

  • 如何实现缓存机制?(从200缓存,到cache到etag再到)

  • 说一下200和304的理解和区别

  • 什么是预加载、懒加载

  • 一个 XMLHttpRequest 实例有多少种状态?

  • dns解析原理,输入网址后如何查找服务器

  • 服务器如何知道你?

  • 浏览器渲染过程

  • ie的某些兼容性问题

  • session

  • 拖拽实现

  • 拆解url的各部分

面试题完整文档划到文末直接免费领取。

ES6


  • 谈一谈 promise

  • 所有的 ES6 特性你都知道吗?如果遇到一个东西不知道是 ES6 还是 ES5, 你该怎么区分它

  • es6的继承和es5的继承有什么区别

  • promise封装ajax

  • let const的优点

  • es6 generator 是什么,async/await 实现原理

  • ES6和node的commonjs模块化规范区别

  • 箭头函数,以及它的this

计算机网络


  • HTTP协议头含有哪些重要的部分,HTTP状态码

  • 网络url输入到输出怎么做?

  • 性能优化为什么要减少 HTTP 访问次数?

  • Http请求的过程与原理

  • https(对是https)有几次握手和挥手?https的原理。

  • http有几次挥手和握手?TLS的中文名?TLS在哪一网络层?

  • TCP连接的特点,TCP连接如何保证安全可靠的?

  • 为什么TCP连接需要三次握手,两次不可以吗,为什么

  • 为什么tcp要三次握手四次挥手?

  • tcp的三次握手和四次挥手画图(当场画写ack 和 seq的值)?

  • tcp与udp的区别

  • get和post的区别?什么情况下用到?

  • http2 与http1 的区别?

  • websocket

  • 什么是tcp流,什么是http流

数据结构与算法

这一块在笔试、面试的代码题中考核较多,其中常考的数据结构主要有:数组、链表、队列、栈、Set、Map、哈希表等,不同数据结构有不同的方法以及储存原理,这些算是技术岗的必备知识。算法部分主要分为两大块,排序算法与一些其他算法题

排序算法根据考频高低主要有:快速排序、归并排序、堆排序、冒泡排序、插入排序、选择排序、希尔排序、桶排序、基数排序、Timsort这十种,这类考核点要么是算法的时间、空间复杂度、稳定度,要么是直接手写代码,故在理解算法原理的同时,对JS语言版的排序算法代码也要加强记忆。

  • 二叉树层序遍历
  • B 树的特性,B 树和 B+树的区别
  • 尾递归
  • 如何写一个大数阶乘?递归的方法会出现什么问题?
  • 把多维数组变成一维数组的方法
  • 知道的排序算法 说一下冒泡快排的原理
  • Heap 排序方法的原理?复杂度?
  • 几种常见的排序算法,手写
  • 数组的去重,尽可能写出多个方法
  • 如果有一个大的数组,都是整型,怎么找出最大的前 10 个数
  • 知道数据结构里面的常见的数据结构
  • 找出数组中第 k 大的数组出现多少次,比如数组【1,2, 4,4,3,5】第二大的数字是 4,出现两次,所以返回 2
  • 合并两个有序数组
  • 给一个数,去一个已经排好序的数组中寻找这个数的位 置(通过快速查找,二分查找)

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

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

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
复杂度、稳定度,要么是直接手写代码,故在理解算法原理的同时,对JS语言版的排序算法代码也要加强记忆。

  • 二叉树层序遍历
  • B 树的特性,B 树和 B+树的区别
  • 尾递归
  • 如何写一个大数阶乘?递归的方法会出现什么问题?
  • 把多维数组变成一维数组的方法
  • 知道的排序算法 说一下冒泡快排的原理
  • Heap 排序方法的原理?复杂度?
  • 几种常见的排序算法,手写
  • 数组的去重,尽可能写出多个方法
  • 如果有一个大的数组,都是整型,怎么找出最大的前 10 个数
  • 知道数据结构里面的常见的数据结构
  • 找出数组中第 k 大的数组出现多少次,比如数组【1,2, 4,4,3,5】第二大的数字是 4,出现两次,所以返回 2
  • 合并两个有序数组
  • 给一个数,去一个已经排好序的数组中寻找这个数的位 置(通过快速查找,二分查找)

[外链图片转存中…(img-FQvHcSpY-1713475755854)]

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值