Posts 我的2021年终总结
Post
Cancel

我的2021年终总结

avatar

1.前言

  首先回顾下2020年终总结中的新年展望的完成情况

  • 补充下 Linux 相关知识 (已经掌握常用的 Linux 命令, 现在开发环境已经完全是在 ubuntu 上了)
  • 学会 CI 自动化的一些东西 (熟练使用 Github Action 的 CI/CD)
  • 学会使用Docker (熟悉了常用的 Docker 命令, 并且能使用 Docker 来搭建开发环境)
  • 学习后端知识 (熟悉了 SQL, Node.js, TypeScript. 掌握了 Express, MongoDB, Redis 的使用)

  总的来说,我对自己在 2020 新年期望的完成状况打个 80 分的. 没有满分的原因是因为对于后端的数据库, 微服务以及分布式系统相关的知识,我还没有深入的研究. 这其中有一些客观原因和主观原因. 因为我并不知道需要做些什么东西能让我去实践这些东西.感觉只有在实际工作中才能够很好的理解这些东西.

2. 2021 年收获总结

  2021 年其他的一些收获和成果的, 在这 2021 年里,看完的书不算多只有 《深入浅出Node.js》 《Javascript 设计模式与开发实践》 和《TypeScript 编程》, 还有正在看《Redis 设计与实现》.

  简单谈谈 《深入浅出Node.js》 读后感, 这本书让我对 Node.js 有了一个全面的了解.让我对 Node.js 有了一个全新的了解, 以前 Node.js 经常被诟病说性能问题,在我看来在非 CPU 密集的业务中(其实大部分业务都是数据库I/O和网络I/O), Node.js 性能并不差,而且天生的异步 I/O 模型导致其能很高效的利用 CPU, 而且 Node.js 的 cluster 模块也能让机器的多核 CPU 都得到利用, 而且 在 Node.js 12.11.0, worker_threads 模块正式进入稳定版, worker_threads 补齐了 Node.js CPU 密集操作性能不佳的短板. 当然在 TypeScript 没有出现前,在后端没有数据类型被认为是非常危险的,而 TypeScript 的出现也解决了这个问题.虽然我还算挺喜欢 Node.js 的但是如果不考虑要找工作的话, 我还是挺想去学习 Go 和 Rust 的.

  《Javascript 设计模式与开发实践》 这本书给我印象不是很深,我只是熟悉了下常见的设计模式.可能以后进入比较大的工程后会有更深的体会吧.

  《TypeScript 编程》 这本书说时候并不算一本好书,因为我发现这本书上讲的内容大部分我已经知道了或者一些开发中并不常用的知识.

  《Redis 设计与实现》 这本书我现在只看完了 Redis 底层数据结构的实现, 只能感叹下.数据解构的设计能给性能带来极大的提升.

  接下来介绍下我的一些项目成果. 2021 年让我最开心的事情就是: 第一次把我自己的 idea 通过自己的努力用代码实现了出来.

  FetchBingDailyImage 这个项目是当时手痒,总想用 Node.js 做后端练练手.这个项目只是一个简单的程序, 每天去获取 Bing 图片的每日一图, 并且将图片保存到我的数据库里面.这个项目虽然简单, 但是我觉得更让我花时间的是怎么让我这个项目每天自动化去获取图片.不知道为什么,让程序自动化起来总是能让人非常开心.如果你有服务器,自动化起来是很方便,但是我当时并没有自己的服务器.所以为了技术性白嫖还是花了一点时间去折腾.首先是我因为没有服务器只能部署到 Heroku(部署完成后, Heroku 会运行 npm start 启动服务), 当然这里有用了别人的 Git Action 实现了自动化部署.在用自动化部署的 Git Action 的我发现只需要更新下 repo 中的文件就能触发自动化部署, 然后我就想到了每天自动化更新 Readme 文件来触发自动化部署, 所以我又自己写了一个 Git Action (github-update-readme)来自动更新 Readme 文件. 然后 Git Action 可以定时为每天执行, 这样就能每天触发自动化部署,最终达到在没有自己的服务器也能每天执行我的定时任务.

  Ours-Album 这个项目只是因为想把抓取的 Bing 每天图片展示出来而且,这是一个全栈项目. 这个项目的后端工程可以算是一个比较完整的 Node.js 后端项目,也算是我第一个入门 Node.js 后端的工程. 在开发这个项目中使用 MongoDB 的时候, 因为算是我第一次使用 MongoDB, 所以在写 MongoDB 的 query 的时候不是很熟练, 于是我就写了一个工具: sql-in-mongodb, 这个工具可以把我在SQL翻译成 MongoDB 的 query. 举个例子

1
2
3
4
5
6
7
// for commonjs:  const SQLParser = require('sql-in-mongodb');
import SQLParser from 'sql-in-mongodb';
// database data: {a: 1, b: 2}
const sqlQuery = `where a = 1`; // you also can use: `select * from tablename where a = 1`
const parser = new SQLParser();
const data = await TestModel.find(parser.parseSql(sqlQuery));
console.log(JSON.stringify(data)); // output [{a: 1, b: 2}]

  当时以为写完这个工具可以很省事,这样就不需要看 MongoDB 文档怎么写 query 了, 但是写完这个工具发现,我已经熟悉怎么写 MongoDB query 了…

  不过今年最大的收获还是交了一个女朋友 😊.感情经历一波三折,希望能走到最后吧.

   2021 年 12月初的时候我辞职了.因为今年一年里我的工作感觉毫无挑战又没有深度.所以还是想跳出舒适圈,出来找了一份后端的工作. 当时还是特地选了一家创业公司, 以为可以从 0 到 1 去熟悉整个后端项目的开发流程. 这样我能学到的东西很多, 但是入职后发现. 说好的 Code Reivew 没有,说好的 CI/CD 和单元测试也没有. 我就想, 没有的话我来帮忙构建下这些基础设施. 结果天天被拉去写业务代码而没有时间搞这些. 坚持了一个月想看看有什么转变. 结果发现并没有. 我实在无法认识忍受没有 CI/CD 和单元测试的工作环境,这简直让我感觉回到了我的第一份工作的样子, 那些开发中遇到的问题历历在目, 想想就恐怖. 其实没有 Code Reivew 也挺难受的, 这样就少了很多技术和经验的交流. 我还是期望待在有技术交流的团队里. 这份工作经历时长 1 个月后我就提出了离职.不过呢,在公司各位领导的劝说下,并且 CTO 也决定给我资源让我来来把团队的开发规范起来,以及团队中的其他问题解决掉.所以我还是决定了留下来.

3.新年的展望

  我希望在接下来的 2022 年能先把团队带上规范的道路吧, 这份工作我希望能稳定 3 年,让我能在后端领域有一定的技术深度和经验的积累. 如果以后有创业的打算, 也能够独当一面,扛起大旗. 2022 Fighting!

This post is licensed under CC BY 4.0 by the author.

基于 Redis 的分布式锁的实现方案

重新理解 Node.js 事件循环