28岁开始零基础学前端,这些血的教训你一定要避免

133 阅读8分钟

学习经历

由于我是高中毕业,并且 28 岁才开始学习编程,所以起点比一般人差很多,完全是零基础,需要学习的知识也特别多。

在找工作前,我花了五个月时间自学编程。

第一个月学的 C 语言,结果发现 C 语言不好找工作。第二个月转学 python,学了一个月发现招聘岗位很少,又放弃了。第三个月,痛定思痛,我决定先去网上搜一下什么语言好找工作再做决定,最后选了前端做为学习的方向。

接下来前端学习了三个月,HTML 和 CSS 是在 w3school 上学的,JavsSciprt 则是看的 《JavaScript 高级程序设计第三版》。在学习的同时,还做了一些项目来巩固和提升技术。三个月后开始找工作,2019年2月找到了第一份工作,终于转行成功。

接下来的三年学习经历可分为前端和计算机理论知识两个方面来讲。

前端

关于前端学习,我的宗旨是:

  1. 基础知识为主,库、框架为辅。
  2. 理论与实践结合,学习更高效。
  3. 时常写文章总结,将学到的知识消化了再写出来(费曼学习法)。

库、框架都是工具,基础打好了,学习第三方工具才能事半功倍。

基础知识(JavaScript、CSS、HTML)

在这三年里,我看了大量的前端书籍,具体如下:

  • 你不知道的JavaScript(上)
  • 你不知道的JavaScript(中)
  • 你不知道的JavaScript(下)
  • JavaScript高级程序设计(第三版)
  • 高性能JavaScript
  • ES6标准入门
  • JavaScript语言精粹
  • JavaScript DOM编程艺术 第2版
  • CSS揭秘
  • 高性能网站建设指南
  • 高性能网站建设进阶指南
  • Web性能权威指南

功夫不负有心人,看书和做练习让我的技术水平得到了极大的提升,以至于后面对 Vue 源码的学习起到了很大的作用。

库、框架

关于第三方库的学习,我只对 JQuery 和 Vue 进行了深入学习,其他的库都是看文档按需使用。 深入学习 JQuery 的成果:写了两个组件。 深入学习 Vue 的成果:

  1. 写了一个 Vue 动态表单组件,发布到 NPM上。
  2. 模仿 Vue1.0 版本写了一个 MiniVue,这让我对 Vue 的理解达到了源码级别。
  3. 写了几篇关于 Vue 的文章。

计算机理论知识

计算机理论知识决定了一个程序员的天花板(在国内还得加上英语)。

数据结构与算法

算法看了《剑指offer题解》、《Leetcode 题解》这两本书,还是挺有用的,也有刷到的题面试正好碰上了的。

编译原理、计算机原理

由于编译原理和计算机原理是看的同一本书《计算机系统要素》,所以就放一起说了。

这是本神书,内容通俗易懂,涉及计算机原理、编译原理、部分操作系统知识,每一章后面都有对应的练习,需要你写代码完成。

如果完成了本书所有的项目,你将会获得以下成就:

  • 构建出一台计算机(在模拟器上运行)
  • 实现一门语言和相应的语言标准库
  • 实现一个简单的编译器

而且,这本书的门槛非常低,只要你能熟练运用一门编程语言即可。

操作系统

操作系统看了《操作系统导论》以及《深入理解计算机系统》(这本书更像是计算机导论)。

计算机网络

计算机网络看了《计算机网络--自顶向下》《计算机网络--谢希仁版》,实验是按《计算机网络--自顶向下》做的。另外还深入学习了 HTTP,HTTPS,HTTP2,看的是《HTTP 权威指南》《HTTP2基础教程》。

总结

计算机理论知识值得每个程序员都去认真学习。不过,持续学习并不是一件容易的事,需要你有坚定的目标和强大的自驱力。如果不想学习,可以看电影玩游戏放松一下,注重劳逸结合,不过也要警惕玩游戏上瘾,这都是血的教训总结出来的。 下面是我花了将近一个月的时间整理的一份面试题库。这些面试题,包括我本人自己去面试遇到的,还有在面试之前刷过的题目,我都统一的整理了一下,希望对大家有用。

HTML

  • 浏览器页面有哪三层构成,分别是什么,作用是什么?
  • HTML5的优点与缺点?
  • Doctype作用? 严格模式与混杂模式如何区分?它们有何意义?
  • HTML5有哪些新特性、移除了哪些元素?
  • 你做的网页在哪些浏览器测试过,这些浏览器的内核分别是什么?
  • 每个HTML文件里开头都有个很重要的东西,Doctype,知道这是干什么的吗?
  • 说说你对HTML5认识?(是什么,为什么)
  • 对WEB标准以及W3C的理解与认识?
  • ......

CSS

  • 解释一下CSS的盒子模型?
  • 请你说说CSS选择器的类型有哪些,并举几个例子说明其用法?
  • 请你说说CSS有什么特殊性?(优先级、计算特殊值)
  • 常见浏览器兼容性问题与解决方案?
  • 列出display的值并说明他们的作用?
  • 如何居中div, 如何居中一个浮动元素?
  • 请列举几种清除浮动的方法(至少两种)?
  • block,inline和inlinke-block细节对比?
  • 什么叫优雅降级和渐进增强?
  • 说说浮动元素会引起的问题和你的解决办法
  • 你有哪些性能优化的方法?
  • ......

JavaScript

  • js的各种位置,比如clientHeight,scrollHeight,offsetHeight ,以及scrollTop, offsetTop,clientTop的区别?
  • js拖拽功能的实现
  • 异步加载js的方法
  • js的防抖与节流
  • 说一下闭包
  • 说说你对作用域链的理解
  • JavaScript原型,原型链 ? 有什么特点?
  • 请解释什么是事件委托/事件代理
  • Javascript如何实现继承?
  • 函数执行改变this
  • babel编译原理
  • 函数柯里化
  • 说一下类的创建和继承
  • 说说前端中的事件流
  • 如何让事件先冒泡后捕获
  • 说一下图片的懒加载和预加载
  • js的new操作符做了哪些事情
  • 改变函数内部this指针的指向函数(bind,apply,call的区别)
  • Ajax解决浏览器缓存问题
  • ......

Vue

  • Vue中 key 值的作用
  • Vue 组件中 data 为什么必须是函数?
  • vuex的State特性是?
  • 介绍一下Vue的响应式系统
  • computed与watch的区别
  • 介绍一下Vue的生命周期
  • 为什么组件的data必须是一个函数
  • 组件之间是怎么通信的
  • Vue.cli中怎样使用自定义的组件?有遇到过哪些问题吗?
  • Vue如何实现按需加载配合webpack设置
  • 简单描述每个周期具体适合哪些场景
  • scss是什么?在Vue.cli中的安装使用步骤是?有哪几大特性?
  • 聊聊你对Vue.js的template编译的理解?
  • Vue 路由跳转的几种方式
  • Vue如何实现按需加载配合webpack设置?
  • Vue的路由实现:hash模式和history模式
  • Vue与Angular以及React的区别?
  • Vue路由的钩子函数
  • 什么是Vue的计算属性?
  • ......

React

  • 介绍一下react
  • React单项数据流
  • react生命周期函数和react组件的生命周期
  • react和Vue的原理,区别,亮点,作用
  • reactJs的组件交流
  • 有了解过react的虚拟DOM吗,虚拟DOM是怎么对比的呢
  • 项目里用到了react,为什么要选择react,react有哪些好处
  • 怎么获取真正的dom
  • 选择react的原因
  • react的生命周期函数
  • setState之后的流程
  • react高阶组件知道吗?
  • React的jsx,函数式编程
  • react的组件是通过什么去判断是否刷新的
  • 如何配置React-Router
  • 路由的动态加载模块
  • Redux中间件是什么东西,接受几个参数
  • redux请求中间件如何处理并发

浏览器

  • 跨标签页通讯
  • 浏览器架构
  • 浏览器下事件循环(Event Loop)
  • 从输入 url 到展示的过程
  • 重绘与回流
  • 存储
  • Web Worker
  • V8垃圾回收机制
  • 内存泄露
  • reflow(回流)和repaint(重绘)优化
  • 如何减少重绘和回流?
  • 一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?
  • localStorage 与 sessionStorage 与cookie的区别总结
  • ......

服务端与网络

  • HTTPS和HTTP的区别
  • HTTP版本
  • 从输入URL到页面呈现发生了什么?
  • HTTP缓存
  • 缓存位置
  • 强缓存
  • 协商缓存
  • 缓存的资源在那里
  • 用户行为对浏览器缓存的影响
  • 缓存的优点
  • 不同刷新的请求执行过程
  • ......

算法与数据结构

  • 二叉树层序遍历
  • B树的特性,B树和B+树的区别
  • 尾递归
  • 如何写一个大数阶乘?递归的方法会出现什么问题?
  • 把多维数组变成一维数组的方法
  • 说一下冒泡快排的原理
  • Heap排序方法的原理?复杂度?
  • 几种常见的排序算法,手写
  • 数组的去重,尽可能写出多个方法
  • 如果有一个大的数组,都是整型,怎么找出最大的前10个数

完整版面试题资料免费分享,只需你点赞支持,动动手指点击此处就可免费领取了