学习前端三年了,感觉有点迷茫,学习没有重心,感觉什么都会点,又感觉自己什么都不会,真的有点难受,希望各路大佬给我提点建议。
javascipt
不太好说,调用堆栈,this的工作原理.作用域(函数作用域, 块级作用域和词法作用域)闭包。立即执行函数, 模块化, 命名空间。面向对象编程,原型,原型继承,原型链,Class。函数式编程,数组的一些方法map,forEach等。偏函数,currying in javascript,bind。异步编程,promise,async,generator.
后续:
继续看书,js不错的书挺多的。
1.前端框架 vue.js && react
了解代码的大体流程,熟悉每个特性的用法,可以不知道源码是如何执行的,但要知道每一个特性出现的意义。如为什么vue里面会有computed,为什么要出现这个东东?简单说就是达到灵活运用的程度.
后续:
(1):框架出现的目的是什么,解决了哪些实在的问题,有没有一些写起来不舒服的地方,提出一些自己的想法
(2):写一些通用的‘好用’的组件,如react中的'高阶组件'
(3):读源码,一些特性具体是如何实现的,源码的整体架构流程
(4):尝试模拟的写出一个类似的框架
2.状态管理容器 redux or vuex
以redux为例,上手很容易,只有少数的api,运用起来很方便,需要理解redux的实现机制,redux的中间件实现原理,redux源码.
3.node
理解common.js,require模块机制。node.js error代码的捕捉方法。event loop.HTTP建立一个web服务。node的内存管理,垃圾回收机制,buffer,Stream,Readline。异步api,nexttick/setImmediate.process,cluster,进程间通信。
后续:
(1):单元测试
(2):C++写一些扩展模块
(3):cluster保证负载均衡,理解守护进程,进程相关问题.
4.后端框架 express or koa
应用express or koa 搭建一个node服务,配置路由,理解后端渲染,理解cookie+session。理解next,use,router.
后续:
(1):理解express和koa中间件机制的差异。
(2):koa如何应用async,await
5.计算机一些底层的东西(编译原理,操作系统)
操作系统方面,理解线程和进程的概念,js中的异步代码,事件队列,内部涉及到了线程间通信。理解同步,异步,阻塞,非阻塞的区别,了解那几种IO模型,nodejs的异步io的内部机制要想搞清楚,这些概念要理清。
编译原理方面:
对于编译型语言如C语言,词法分析(状态机)->语法分析(抽象语法树AST)->中间代码(类似于java中的.class字节码)->目标代码(汇编)->二进制机器码()
对于解释性语言如javascript,词法分析(状态机)->语法分析(抽象语法树AST)->中间代码()---->黑盒子(如java的虚拟机))-->运行结果。
理解编译型语言和解释的区别在于,编译型语言直接拿到的是二进制文件去执行,解释型语言是从源码去执行。
感觉作为一个前端工程师,也应该去写一些�编译型的编程语言,最好是C语言,这样可以更好的理解编译型语言和解释型语言的区别,也会更容易的接受typescript的出现。
后续:
webkit的js引擎的一些优化的技术,如JIT
V8引擎的机制
6.网络协议
- 目前理解的是OSI的7层协议
- 物理层,通过媒介(光纤,电磁波)传入bit.
- 数据链路层(交换机),将比特组装成帧和点到点的传递.
- 网络层(ip协议)。数据包的传递.
- 运输层(TCP,UDP),抱文传输,TCP,三次握手四次挥手,断点续传等,可靠。UDP,直接传过去,不管对方有没有接收到,不可靠。
- 会话层(建立、管理和终止会话,会话协议数据单元 SPDU).
- 表示层(对数据进行翻译、加密和压缩).
- 应用层(FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS).网络通信的大体流程了解。
- 理解HTTP协议,熟知请求头和响应头的结构,大部分常用的header, status的含义。
后续:
深入学习TCP协议,基于socket编程。
7.对数据结构的理解程度
理解数组,链表,双向链表,栈,队列,字符串,哈希表,二叉树的基础,平时自己实现相对复杂的东西如前端路由,promise实现,应用的就是树(DFS/BFS)和链表等,感觉图在前端领域目前应用的不多,如果不是计算机专业出身,感觉‘暂时’可以不需要会。
后续:
(1):堆 (最大堆,最小堆)
(2):优先队列
(3):字典树,AVL树,红黑树
(4):图,有向图和无向图
8.对算法的理解程度
感觉前端应用更多的还是排序算法,冒泡排序,插入排序,选择排序,快速排序。查找算法,二分查找。树的深度遍历,广度遍历。字符串的KMP算法,正则表达式匹配。
后续:
稍微复杂一点的算法,堆排序,归并排序,希尔排序。
9.mysql / redis
用过,基本的增删改查。
**后续: **
继续学习
10.nginx
配置反向代理,别的都不太懂。
后续:
继续学习
11.代码能力
目前可以实现一些单一的功能,如自己实现一个前端路由,实现一个promise,但自己模拟去写一个前端框架,力有不逮。
多思考,多写一些不一样的代码,多看一些别人的代码。
12.解决问题的能力
求解答
网友评论