8年前端总结和感想(转)~

我是牛奶,本文是我前端工作 8 年的一些总结和感想

主要记录下个人点滴、前端知识点、场景应用、未来的憧憬以及个人规划,供自己以后查漏补缺,也欢迎同道朋友交流学习。

自我介绍

我是一名工作在非知名公司的 8 年前端,双非普通本科,自动化专业(非计算机)。目前也在努力的提升自己,积极找工作状态。虽然工作已经 8 年了,但没待过超 10 人的前端团队,更没有开发过千万级、亿级流量的应用的经历,也是一种遗憾。

16 年才工作那会儿使用原生 JS 和 JQ 比较多,经常写 CSS 动画,主要做企业建站,自学了 PHPReactNative,还学过 krpano 的使用;17 年到 19 年,主要使用 reactReact Native做 H5 和 跨端开发,也维护过老 NG2.x 项目;19年到22年主要使用 vue、react 做hybrid APP及小程序,自学了electronnodeMongoDB;22 年至今主要从事 B 端的开发,C端也有部分,也主要是 reactvue 相关技术栈;

前端应用场景

前端是直面浏览器的,也可以说是直面用户的,我们的应用场景远广泛于后端,用到的 UI 组件库、插件、基础框架、基础语言也非常繁杂,所以在面试和自我学习提升的时候需要准备的东西非常多,有种学不动的感觉。

常见的应用场景就是 PC web 浏览器,需要我们掌握一些兼容不同版本和不同浏览器的知识点,一般采取渐进增强或者优雅降级去处理;当然现在很多公司已经不做IE的兼容了,复杂度降低很多;同时大部分新项目都会使用 postcss 去 autoprefixer,给 css 加兼容的前缀。其他的就是做后台的表单为主了,用的基本上都是 antd designelement ui。当然复杂点的要涉及到网页编辑器、Low Code、No Code等。

另一个主要场景就是手机浏览器和 APP 了,H5 WebAPP 会遇到 AndroidIOS的一些样式和行为需要兼容、列表和图片懒加载问题,还有调用原生的 SDK 进行地图、OCR、拍照、扫一扫等功能进行开发;为了更好的体验,还会选择 RN、flutter 进行跨端开发;复杂的处理场景一般涉及原生端,例如聊天室、直播等。

另一个场景就是小程序,其实还是写H5,主要是使用微信或者支付宝等相关 SDK 去实现,看官网就行了,文档也比较全。

还有一些是做 H5 小游戏,要求数学逻辑思维和算法更好点,初级一点的用 canvas+css3 去做,好一点的用游戏引擎去做,一般是 egretLayacreatejsthreejscocos

还有一些场景是做TV端的,有的是基于PC浏览器的,有些是套壳APP,一般使用 AntVecharts做图表数据展示,3D一般用 threejs去做。

还有一些做桌面应用的,一般来说桌面应用大多基于 C,但一些简单应用前端可以使用 electron 去进行桌面端开发,一般也用于大屏可视化,做数据展示的,当然我们熟悉的 vscode 也基于 electron 开发。

还有一些是做 ARVR3D全景图的,一般使用 WebGL3D引擎threejsbabylon.jsplaycanvas等,还可以用 css3d-enginekrpanopano2vr去做。

还有一些场景是做 web3DAPP(去中心化应用程序),大部分是做区块链和数字藏品的,推荐的技术是 Solidityweb3.jsEthers.js

前端网络

我们前端不管是开发 PC、 H5、小程序、 HyBrid App 还是其他应用,始终离不开是浏览器和 web-view,与浏览器交互就要了解基础的 HTTP、网络安全、 nginx方面的知识。

浏览器

浏览器的发展简史和市场份额竞争有空可以自行了解,首先我们要了解计算机架构:

  • 底层是机器硬件结构:简单的来说就是电脑主机+各种IO设备;复杂的来说有用于输入的鼠标键盘,用于输出的显示器、打印等设备,用于控制计算机的控制器和 CPU(核心大脑),用于存储的硬盘、内存,用于计算的CPU和GPU;
  • 中层是操作系统:常见的就是 WindowsMAC OSLinuxCentOS,手机就是安卓和 IOS(当然还有华为的鸿蒙);可以了解内存分配、进程和线程管理等方面知识。
  • 上层就是我们最熟悉的应用程序:有系统自带的核心应用程序、浏览器、各个公司和开发者开发的各种应用。

前端开发必要了解的就是chrome浏览器,可以说大部分开发基于此浏览器去做的。需要了解进程和线程概念、了解chrome多进程架构(浏览器主进程GPU进程网络进程渲染进程插件进程)。

其中最主要的是要了解主进程,包含多个线程:GUI渲染线程JS引擎线程(V8引擎)定时触发器线程事件线程异步HTTP请求线程。其中V8引擎又是核心,需要了解其现有架构:

了解 JS 编译成机器可以识别的机器码的过程:简单的说就是把 JS 通过 Lexer 词法分析器分解成一系列词法 tokens,再通过 Parser 语法分析为语法树 AST,再通过 Bytecode Generator 把语法树转成二进制代码 Bytecode,二进制代码再通过实时编译 JST 编译成机器能识别的汇编代码 MachineCode 去执行。

代码的执行必然会占用大量的内存,那如何自动的把不需要使用的变量回收就叫作 GC 垃圾回收,有空可以了解其算法和回收机制。

HTTP

对于Http,我们前端首先需要了解其网络协议分层: OSI七层协议TCP/IP四层协议五层协议,这有助于我们了解应用层和传输层及网络层的工作流程;同时我们也要了解应用层的核心 http1.0http1.1http2.0https 的区别;还要了解传输层的 TCPUDPwebSocket

  • 在前后端交互方面必须了解 GETPOST 的请求方式,以及浏览器返回状态 2003xx4xx5xx的区别;还有前后端通信传输的 request header 头、响应报文体 response body,通信的 sessioncookie

  • 网络安全方面需要了解 https,了解非对称算法 rsa 和对称算法 des,登录认证的 JWT(JSON Web Token);同时也需要了解怎么防范 XSSCSRFSQL注入URL跳转漏洞点击劫持OS命令注入攻击

Nginx

我们的网页都是存储在 web 服务器上的,公司一般都会进行 nginx 的配置,可以对资源进行 gzip 压缩,redirect 重定向,解决 CROS 跨域问题,配置 history 路由拦截。技术方面,我们还要了解其安装、常用命令、反向代理、正向代理和负载均衡。

前端三剑客

前端简单的说就是在写 htmlcssjs 的,一般来说 js 我们会更多关注,其实 html 和 css 也大有用处。

html

html 的历史可以自行了解,我们需要更关注 文档声明、各种 标签元素块级元素及非块级元素语义化src与href的区别WebStorageHTML5的新特性。复杂的页面和功能会更依赖于我们的 canvas

css

css 方面主要了解布局相关 盒子模型position伪类和伪元素css选择器优先级、 各种 水平垂直居中方法、 清除浮动CSS3新特性CSS动画响应式布局相关的 remflex@media。当然也有部分公司非常重视用户的交互体验和 UI 效果,那会更依赖我们 CSS3 的使用。

JS

js 在现代开发过程中确实是最重要的,我们更关心其底层原理、使用的方法、异步的处理及 ES6 的使用。

  • 在底层方面我们需要了解其 作用域及作用域链闭包this绑定原型和原型链继承和类、属性描述符 defineProperty 和事件循环 Event Loop

  • 在使用方面我们需要了解 值和类型 的判断、内置类型的 nullundefinedbooleannumberstringobjectsymbol,其中对象类型是个复杂类型,数组函数DateRegExp等都是一个对象;数组的各种 API 是我们开发中最常用的,了解 Dom操作 的API也是必要的。

  • ES6 方面要了解 let、const声明块作用域解构赋值箭头函数classpromiseasync awaitSetWeakSetMapWeakMapproxyReflect

  • TypeScript 在前端的使用越来越广泛,如果要搞 NodeJS 基本上是标配了,而且也是大厂的标配,还是有必要学习下的。要了解 TypeScript 的安装配置、基本语法、Type泛型<T>ClassInterfaceEnum命名空间模块

前端框架

我们在开发过程中直接操作 dom 已经不多了,有的公司可能还要部分维护 JQ,但大多都在使用 ReactVueAngular这三个基础前端框架,很多其他跨平台框架及 UI 组件库都基于此,目前来说国内React和Vue是决定的主流,我本人就更擅长React。

React

开发 react,也就是在写 all in js,或者说是 JSX,那就必须了解其底层 JSX 是如何转化成虚拟节点 VDom 的。在转换 jsx 转换成 VDom,VDom在转换成真实 Dom,react 的底层做了很多优化,其中大家熟悉的就是 Fiberdiff生命周期 以及 事件绑定

那我们写 react 都是在写组件化的东西, 组件通信的各种方式也是需要了解的;还要了解 PureComponentmemoforwardRef等组件类的方法;了解 createElementcloneElementcreateContext等工具类的方法;了解 useStateuseEffectuseMemouseCallbackuseRef等hooks的使用;还有了解 高阶组件HOC 及自定义 hooks

了解 react16react17react18做了哪些优化。

Vue

vue 方面,我们需要了解 MVVM 原理、 template的解析、数据的 双向绑定、vue2 和 vue3 的响应式原理、其数据更新的 diff 算法;使用方面要了解其生命周期组件通信的各种方式和 vue3 的新特性。

前端工程化

上面写到了前端框架,在使用框架开发的过程中,我们必不可少的在整个开发过程向后端看齐,工程化的思想也深入前端。代码提交时可以使用git的钩子hooks进行流水线的自动化拉取,然后使用 webpackrollupgulp以及 vite 进行代码编译打包,最后使用 jenkinsAWS阿里云效等平台进行自动化部署,完成整个不同环境的打包部署流程。

webpack

在代码编译打包这块儿, webpack是最重要的,也是更复杂的,所以我们有必要多了解它。

在基础配置方面,我们要了解 modeentryoutputloaderplugin,其中 loader 和 plugin 是比较复杂的,webpack 默认只支持 js,那意味着要使用 es6 就要用 babel-loader,css 方面要配置 css-loaderstyle-loaderless-loadersass-loader等,图片文件等资源还要配置 file-loader

plugin 方面要配置 antd 的相关配置、清空打包目录的 clean-webpack-plugin、多线程打包的 HappyPack、分包的 splitChunks 等等配置。

在不同环境配置方面要基于 cross-env 配置 devServersourcemap

在构建优化方面要配置按需加载hashcachenoParsegzip压缩tree-shakingsplitChunks等。

幸运的是,现在很多脚手架都自动的帮你配置了很多,并且支持你选择什么模版去配置。

环境部署

环境部署方面,第一家公司我用的软件 FileZilla 进行手动上传 FTP 服务器,虽然也没出过啥错,但不智能,纯依靠人工,如果项目多,时间匆忙,很容易部署错环境,而且还要手动备份数据。后面学了点终端命令,使用 SSH 远程上传文件,其实还没有软件上传来的直接,也容易出错。后面换了公司,也用上了 CI/CD 持续集成,其本质就是平台帮你自动的执行配置好的命令,有 git 拉取代码的命令、npm run build的打包命令,最后 SSH 远程存到服务器的目录文件,并重启 nginx 的 web 服务器。

CI/CD 可让持续自动化和持续监控贯穿于应用的整个生命周期(从集成和测试阶段,到交付和部署)。

后端服务

为了更好的完成整个应用,了解后端技术也是必要的,我们可以从nodejs、MongoDB、MySQL等入手。如果有余力,了解java、c#、c++也可以帮助我们更好的开发安卓和IOS应用。前后端都通了话,不管对于我们工作、面试、接活儿或者做独立开发者都是很必要的。

node

node 这方面,我们了解常用模块Event Loop 是必要的,框架可以选择 expresskoaegg

形而上学

了解完上面的文章,基本上你就了解了整个前端大体的开发流程、所需的知识点、环境的部署、线上网络安全。但如果需要进阶且不局限于前端和后端,我们需要了解数据结构设计模式算法英语

数据结构

常见的数据结构有8种: 数组队列链表散列表

设计模式

设计模式方面我们需要了解:

  • 六大原则: 单一职责原则开放封闭原则里氏替换原则依赖倒置原则接口隔离原则迪米特原则(最少知道原则)
  • 创建型设计模式: 单例模式原型模式工厂模式抽象工厂模式建造者模式
  • 结构型设计模式: 适配器模式装饰器模式代理模式外观模式桥接模式组合模式享元模式
  • 行为型设计模式: 观察者模式迭代器模式策略模式模板方法模式职责链模式命令模式备忘录模式状态模式访问者模式中介者模式解释器模式

算法

算法方面我们需要了解:

  • 基础概念: 时间复杂度空间复杂度
  • 排序方法:初级排序的 选择排序插入排序冒泡排序,高级排序的 快速排序归并排序堆排序
  • 搜索: 深���优先搜索广度优先搜索
  • 其他: 递归分治回溯动态规划贪心算法

英语

学生时代,觉得英语离我们挺远,进社会就用不到了。现在发现学好英语非常有用,我们可以入职福利待遇比较好的外企、可以更好的看懂文档、甚至起个文件名和变量名都好的多。最近我也在用多邻国学英语,目标是能进行简单的商务交流和国外旅游,还能在未来辅导下孩子英语作业。

前端未来

目前,初级前端确实饱和了,各个公司对前端已经不像我入职第一家公司那样简单就可以找到工作的了,尤其是在这个各种卷的环境里,我们不得不多学习更多前端方面的知识。对于初学者,我建议更多的了解计算机基础、js原理、框架的底层;对于已经工作一俩年想提升的,不妨多学点跨端、跨平台技术,还有后端的一些技术;对于工作多年想让未来路子更宽的,不得不内卷的学习更多的应用场景所需要的知识。

关于AI,我觉得并不是会代替我们的工具,反而缩小了我们和资深前端的距离。我们可以借助AI翻译国外的一些技术文档,学习更新的技术;可以帮我们进行代码纠错;还可以帮助我们实现复杂的算法和逻辑;善用 AI,让它成为我们的利器;

感想和个人规划

前端很复杂,并不是像很多后端所说的那么简单,处理的复杂度和应对多样的客户群都是比较大的挑战。资深的前端能很快的完成任务需求开发、并保证代码质量,并搭建更好的基础架构,但就业行情的不景气让我一度很迷茫,我们大龄程序员的出路在哪里,经验就不值钱了嘛?

对于未来,我会更多的学习英语、学习后端,向独立开发者转型。

敬以此文,献给未来的自己和同道中人!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/47606.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JMeter使用手册

安装 下载地址 https://jmeter.apache.org/download_jmeter.cgi 下载后解压到win的文件夹中 打开JMeter的bin文件夹&#xff0c;双击这个jar就启动了JMeter 启动 出现这样的界面 基本使用 添加变量 这个变量在使用的时候可以被引用 创建线程组 所有的请求都得基于…

Linux:Linux进程概念

目录 前言 1. 冯诺依曼体系结构 2. 操作系统 2.1 什么是操作系统 3. 进程 3.1 基本概念 3.2 描述进程——PCB 3.3 进程和程序的区别 3.4 task_struct-PCB的一种 3.5 task_struct的内容分类 4. 查看进程 4.1 通过系统文件查看进程 4.2 通过ps指令查看进程 4.3 …

lse:一款专为渗透测试和CTF设计的Linux枚举工具

关于linux-smart-enumeration linux-smart-enumeration是一款专为渗透测试和CTF设计的Linux枚举工具&#xff0c;该工具可以帮助广大研究人员收集与本地Linux系统安全相关的信息。 工具特性 该工具从2.0版本开始符合POSIX标准&#xff0c;并且经过了shellcheck和posh测试。它…

前端三大主流框架Vue React Angular有何不同?

前端主流框架&#xff0c;Vue React Angular&#xff0c;大家可能都经常在使用&#xff0c;Vue React&#xff0c;国内用的较多&#xff0c;Angualr相对用的少一点。但是大家有思考过这三大框架的不同吗&#xff1f; 一、项目的选型上 中小型项目&#xff1a;Vue2、React居多…

【数据结构-前缀和】力扣2550.统计范围内的元音字符串数

给你一个下标从 0 开始的字符串数组 words 以及一个二维整数数组 queries 。 每个查询 queries[i] [li, ri] 会要求我们统计在 words 中下标在 li 到 ri 范围内&#xff08;包含 这两个值&#xff09;并且以元音开头和结尾的字符串的数目。 返回一个整数数组&#xff0c;其中…

中文诗歌生成

用transformer在诗歌集上训练出的模型 import os os.environ["KERAS_BACKEND"] "tensorflow" # param ["tensorflow", "jax", "torch"] os.environ[TF_CPP_MIN_LOG_LEVEL] 2 os.environ[HF_ENDPOINT] https://hf-mirro…

IT程序员的黄金机遇

在这个数字化时代&#xff0c;IT程序员不仅是技术革新的推动者&#xff0c;更是全球经济的重要支柱。而对于拥有一技之长的IT人才来说&#xff0c;加拿大正敞开大门&#xff0c;提供一片充满机遇的热土。本文将为你揭示为何加拿大是IT程序员移民的不二之选&#xff0c;并提供实…

SecureCRT (mac or windows)解决中文显示乱码

中文乱码问题的方法主要包括设置SecureCRT的编码为UTF-8以及设置LANG环境变量为zh_CN.UTF-8。‌ 1.设置SecureCRT的编码为UTF-8&#xff1a;‌ 打开SecureCRT&#xff0c;‌进入Options -> Global Options -> Default Session -> Edit Default Settings-> Appear…

深入理解设计模式:六大经典模式解析

深入理解设计模式&#xff1a;六大经典模式解析 1. 单例模式&#xff08;Singleton Pattern&#xff09;1.1 概述1.2 示例场景1.3 实现要点 2. 工厂模式&#xff08;Factory Pattern&#xff09;2.1 简单工厂2.2 抽象工厂2.3 示例场景2.4 实现要点 3. 观察者模式&#xff08;Ob…

Idea配置远程开发

Idea配置远程开发 本篇博客介绍使用idea通过ssh连接ubuntu服务器进行开发 目录 Idea配置远程开发1.idae上点击file->Remote Development2.点击New Connection3.填写相关信息4.输入密码5.选择IDE版本和项目路径5.1 点击open an SSH terminal打开控制台5.2 依次执行命令 6.成…

竖版html网页简易抽奖系统

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>在线抽奖 随机选取 自动挑选</title> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <script src"htt…

初阶数据结构的实现1 顺序表和链表

顺序表和链表 1.线性表1.1顺序表1.1.1静态顺序表&#xff08;不去实现&#xff09;1.1.2动态顺序表1.1.2.1 定义程序目标1.1.2.2 设计程序1.1.2.3编写代码1.1.2.3测试和调试代码 1.1.2 顺序表的问题与思考 1.2链表1.2.1链表的概念及结构1.2.1.1 定义程序目标1.2.1.2 设计程序1.…

人工智能算法工程师(高级)课程4-图像生成项目之自编码生成模型与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(高级)课程4-图像生成项目之自编码生成模型与代码详解。自编码生成模型&#xff08;Autoencoder&#xff09;是一种无监督学习算法&#xff0c;旨在通过编码器和解码器学习数据的有效表示。本文将…

聊聊Hugging Face

概述 HuggingFace是一个开源社区&#xff0c;提供了开源的AI研发框架、工具集、可在线加载的数据集仓库和预训练模型仓库。HuggingFace提出了一套可以依照的标准研发流程&#xff0c;按照该框架实施工程&#xff0c;能够在一定程度上规避开发混乱、开发人员水平不一致的问题&a…

spring 5.3.x 、6.1.x、6.0.x 源码本地编译运行

参考大佬文章&#xff0c;完美完成本地idea spring源码编译和demo测试 参考链接&#xff08;spring5.3.x&#xff09; spring5.3.x源码阅读环境搭建 下面是spring6.0.x参考 spring6.0.x jdk调成17 idea 2022.2.4版本本地编译spring源码项目 spring6.0.x 分支 gradle-8…

ubuntu22.04 配置grpc(优化官方教程)

优化了官方教程&#xff0c;2024.7.17顺利打通。 一&#xff1a;添加环境变量 打开root文件夹下的 .bashrc 文件 编辑文件&#xff1a;滚动到文件的底部&#xff0c;然后添加以下行&#xff1a; export MY_INSTALL_DIR$HOME/.local mkdir -p "$MY_INSTALL_DIR" exp…

视觉巡线小车——STM32+OpenMV(三)

目录 前言 一、OpenMV代码 二、STM32端接收数据 1.配置串口 2.接收数据并解析 总结 前言 通过视觉巡线小车——STM32OpenMV&#xff08;二&#xff09;&#xff0c;已基本实现了减速电机的速度闭环控制。要使小车能够自主巡线&#xff0c;除了能够精准的控制速度之外&#xff0…

Hadoop3:MR程序处理小文件的优化办法(uber模式)

一、解决方案 1、在数据采集的时候&#xff0c;就将小文件或小批数据合成大文件再上传HDFS&#xff08;数据源头&#xff09; 2、Hadoop Archive&#xff08;存储方向&#xff09; 是一个高效的将小文件放入HDFS块中的文件存档工具&#xff0c;能够将多个小文件打包成一个HAR…

深入理解 Linux Zero-copy 原理与实现策略图解

用户态和内核态 一般来说&#xff0c;我们在编写程序操作 Linux I/O 之时十有八九是在用户空间和内核空间之间传输数据&#xff0c;因此有必要先了解一下 Linux 的用户态和内核态的概念。 从宏观上来看&#xff0c;Linux 操作系统的体系架构分为用户态和内核态&#xff08;或者…

SourceCodester v1.0 SQL 注入漏洞(CVE-2023-2130)

前言 CVE-2023-2130是一个影响SourceCodester Purchase Order Management System v1.0的SQL注入漏洞。此漏洞的存在是由于应用程序未能正确过滤和验证用户输入&#xff0c;使得攻击者可以通过SQL注入来执行任意SQL命令&#xff0c;从而对数据库进行未授权的访问和操作。 在利…