查看原文
其他

编程之路无捷径!「编程杂感」第 3 期

Guide哥 JavaGuide 2022-03-15
拍摄于去往上海的路上

这张图片拍摄于去往上海的路上。这次去上海主要是为了陪学姐参加公考,顺便也可以感受一下这个大都市。

国内的一些旅游景点倒是去过很多,但是像上海这种量级的大都市倒是还没有去过。

整个行程大概 4 个多小时,偷闲,我玩了几把王者荣耀,卡的实在不行。于是,便在车上写下了这篇文章。

这是一篇比较轻松的文章,我会简单总结一下近期的思考,分享一些“有价值”的东西。

废话不多说!希望下面的分享对你能有启发。

坚持原创不易,有帮助的话,欢迎点赞分享鼓励~爱你们~

思考

编程之路,没有捷径

我发现有很多人经常会问我一些不切实际的问题,比如:“如何 1/2/3 个月之内快速精通 Java?”、“如何在 1/2/3 个月快速上岸大厂?”…… 。我个人对于提这些问题的人是有偏见的,第一印象是觉得这种人有点不太适合程序员这个行业。

所以,碰到这种问题,我往往也会简单回一个:“编程没有捷径,踏踏实实才是王道”。并且,还会以我的方式简单 “diss” 一下这类人。这里的“diss” 并不是指不尊重,而是指出你认为别人存在问题的地方。

好话大家都会说,但是,让你成长的往往是那些不太好听的话。

面对 “diss”, 质疑的话就勇敢正面刚!千万不要因为别人一两句 diss 就崩溃了,觉得生活没有爱了,开始怀疑自己了。

还有很多人,仗着自己各种“高级”的理论知识比较丰富,出口就是高并发、分布式、微服务各种“高大上”的名词。

然后,人家就对写 CRUD 的业务代码不屑一顾啊!结果,自己领了一个简单的任务卡,拖了很久没做完,做完之后一测试,一堆 Bug,还有各种编码不规范的问题。

我相信,我上面列举的两个例子大家都遇到过。

其实,像高并发、分布式、微服务这些东西,随便给一个有经验的工程师,学两三个星期,基本是可以把大部分重要的 理论知识 走一遍。

但是,像你的编码能力、业务理解能力、解决问题的能力,这些真不是能在短时间内掌握的。

所以,平时工作中一定要多学习、多思考,要走的路很长。自信要有,但是在技术上一定要谦虚一点,不要自我感觉自己技术已经非常厉害了。

我发现我身边一些技术巨佬比如 Apache 顶级项目 commiter 都是非常谦虚的,经常会让我误以为他们很菜(当然了,这是我的错觉)。

编程之路没有捷径!但是,我们可以找到一个属于自己的学习方法/套路。可以借鉴别人的经验,但是不要生拿硬套在自己身上。

不要把自己局限在技术上

技术作为我们程序员的核心竞争力,毋庸置疑,非常重要!但是,不要把自己的“束缚”在“技术”上,被“技术”绑架。

技术本身往往不会产生价值,必须依托于产品才能体现。 比如你是一个提供技术服务的公司,你创造的技术产品有人买单或者有人使用。再比如你是一个普通的互联网公司,你们通过技术创造了某个热门 App 为公司创造了营收。

但是,我们大多数人喜欢在技术上自嗨,这当然也包括我自己。

拿我自己来说,我觉得在技术之外,我还需要提高自己的产品设计能力、演讲能力、理财能力……。

产品设计能力,一是为以后自己可能独立做产品做下铺垫,二是这个在日常工作中也会用到。

演讲能力和理财能力就不用多说了吧!当代社会必备的能力。

往美好的方向讲,技术是为了让人们的生活更好。现实来说,技术就是为了帮助公司创造更多利润。

另外,技术更新换代太快,但是,底层技术比如数据结构和算法、计算机组成原理、操作系统的内容其实一直没怎么改变的。就那些东西。

当自己年龄上来之后或者成家之后,自己投入在技术上的时间一定是会减少的。为了避免自己未来产生“技术焦虑” ,还是要把这些底层东西给吃透啊!

技术

聊聊最近遇到的一些有价值的东西。

对开发人员有用的定律、理论、原则和模式

Github 上有一个叫做 hacker-laws-zh 开源项目就总结了对开发人员有用的定律、理论、原则和模式。非常有价值的内容,一定要看看。

原仓库地址:https://github.com/nusr/hacker-laws-zh 。
中文翻译版地址:https://github.com/nusr/hacker-laws-zh。

相关阅读:有哪些编程定律/原则是程序员必须了解的?

Swagger 增强方案

Swagger 就是一套基于 OpenAPI 规范构建的开源工具,可以帮助我们设计、构建、记录以及使用 Rest API。前后端分离的情况下,一份 Rest API 文档将会极大的提高我们的工作效率。但是,Swagger 原生提供的界面使用体验比较差。

常用的增强 Swagger 的方案有下面两种:

  1. YApi :YApi 是一个可本地部署的、打通前后端及 QA 的、可视化的接口管理平台。可以帮助我们让 swagger 页面的体验更加友好,目前很多大公司都在使用这个开源工具。项目地址:https://github.com/YMFE/yapi 。使用方法:当 Swagger 遇上 YApi,瞬间高大上了!

  2. Knife4jSwagger 生成 Api 文档的增强解决方案,前身是 swagger-bootstrap-ui 。官方文档:https://xiaoym.gitee.io/knife4j/documentation/ 。

分布式事务

数据库事务可以保证多个对数据库的操作(也就是 SQL 语句)构成一个逻辑上的整体。构成这个逻辑上的整体的这些数据库操作遵循:要么全部执行成功,要么全部不执行

但是,微服务架构下,一个系统被拆分为多个小的微服务。每个微服务都可能存在不同的机器上,并且每个微服务可能都有一个单独的数据库供自己使用。这种情况下,一组操作可能会涉及到多个微服务以及多个数据库。

这个时候单单依靠数据库事务就不行了!我们就需要引入 分布式事务 这个概念了!

实际上,除了我们上面提到的服务拆分(微服务)的场景,像 数据库水平拆分(分库分表) 这种场景的话也是需要引入分布式事务的。

一言蔽之,分布式事务的终极目标就是保证系统中多个数据库中的数据的一致性!

分布式事务的解决方案有很多,比如:2PC3PCTCC本地消息表MQ 事务Saga 等等。

针对分布式事务,业内比较不错的开源项目:

  1. ByteTCC   : ByteTCC 是基于 Try-Confirm-Cancel(TCC)机制的分布式事务管理器的实现。相关阅读:关于如何实现一个 TCC 分布式事务框架的一点思考
  2. Seata :Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。
  3. Hmily  : 金融级分布式事务解决方案

搞懂了理论之后,可以研究一下以上项目的源码实现。

扫描下方二维码回复“PDF”即可获取图解计算机基础+个人原创的 Java 面试手册。

最近写的一些干货,每篇都很用心,欢迎各位小伙伴阅读/点赞/分享:

  1.  一份热乎的 SpringBoot 前后端分离后台管理系统分析!分模块开发、RBAC权限控制...

  2.  读者秋招上岸百度客户端开发经验分享(下)

  3.  同事自研了一款操作系统—「编程杂感」第 2 期

  4.  3种缓存读写策略都不了解?面试很难让你通过啊兄弟!


我是Guide哥,Java后端开发,会一点前端知识,喜欢烹饪,自由的少年。一个三观比主角还正的技术人。我们下期再见!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存