入职第一天,看了公司代码,牛马沉默了

科技   2024-08-13 18:43   浙江  
来源:https://juejin.cn/post/7371986999164928010
作者:小红帽的大灰狼


入职第一天就干活的,就问还有谁,搬来一台N手电脑,第一分钟开机,第二分钟派活,第三分钟干活,巴适。。。。。。

打开代码发现问题不断


  1. 读取配置文件居然读取两个配置文件,一个读一点,不清楚为什么不能一个配置文件进行配置

一边获取WEB-INF下的配置文件,一边用外部配置文件进行覆盖,有人可能会问既然覆盖,那可以全在外部配置啊,问的好,如果全用外部配置,咱们代码获取属性有的加上了项目前缀(上面的两个put),有的没加,这样配置文件就显得很乱不可取,所以形成了分开配置的局面,如果接受混乱,就写在外部配置;不能全写在内部配置,因为

prop_c.setProperty(key, value);

value获取外部配置为空的时候会抛出异常;properties底层集合用的是hashTable

public synchronized V put(K key, V value) {    // Make sure the value is not null    if (value == null) {        throw new NullPointerException();    } }

2.很多参数写死在代码里,如果有改动,工作量会变得异常庞大,举例权限方面伪代码

role.haveRole("ADMIN_USE")

3.日志打印居然sout和log混合双打

先不说双打的事,对于上图这个,应该输出包括堆栈信息,不然定位问题很麻烦,有人可能会说e.getMessage()最好,可是生产问题看多了发现还是打堆栈好;还有如果不是定向返回信息,仅仅是记录日志,完全没必要catch多个异常,一个Exception足够了,不知道原作者这么写的意思是啥;还是就是打印日志要用logger,用sout打印在控制台,那我日志文件干啥;

4.提交的代码没有技术经理把关,下发生产包是个人就可以发导致生产环境代码和本地代码或者数据库数据出现不一致的现象,数据库数据的同步是生产最容易忘记执行的一个事情;比如我的这家公司上传文件模板变化了,但是没同步,导致出问题时开发环境复现问题真是麻烦;

5.随意更改生产数据库,出不出问题全靠开发的职业素养;

6.Maven依赖的问题,Maven引pom,而pom里面却是另一个pom文件,没有生成的jar供引入,是的,我们可以在dependency里加

<type>pom</type>

来解决这个问题,但是公司内的,而且实际也是引入这个pom里面的jar的,我实在不知道这么做的用意是什么,有谁知道;求教

以上这些都是我最近一家公司出现的问题,除了默默接受还能怎么办;

那有什么优点呢:

  1. 不用太怎么写文档

  2. 束缚很小

  3. 学到了js的全局调用怎么写的(下一篇我来写,顺便巩固一下)


解决之道


怎么解决这些问题呢,首先对于现有的新项目或升级的项目来说,spring的application.xml/yml 完全可以写我们的配置,开发环境没必要整外部文件,如果是生产环境我们可以在脚本或启动命令添加

nohup java -Dfile.encoding=UTF-8 -Dspring.config.location=server/src/main/config/application.properties -jar xxx.jar &

来告诉jar包引哪里的配置文件;也可以加上动态配置,都很棒的,

其次就是规范代码,养成良好的规范,跟着节奏,不要另辟蹊径;老老实实的,如果原项目上迭代,不要动源代码,追加即可,没有时间去重构的;

我也曾是个快乐的童鞋,也有过崇高的理想,直到我面前堆了一座座山,脚下多了一道道坑,我。。。。。。!


推荐

看了这个作者的文章,Hollis表示既同情又无奈,还是那句话“代码是写给人读的,其次是写给机器运行的”,所以,可读性很重要,可维护性很重要。

推荐几本可以帮你写好代码的书:《代码整洁之道》、《Effective Java》、《重构:改善既有代码的设计》。

最后,我个人觉得我写的代码还不错(bushi ,如果大家想围观我的代码,从中学习一些奇技淫巧,可以加入最近正在做的项目实战课。

(分割线)



这个项目用到了目前市面上最主流的 SpringCloudAlibaba 的技术栈,用到的框架都是目前的最新版+稳定版。项目详细介绍

后端主要用到了像 JDK 21、Spring 6.1、SpringCloud 2023、Nacos、Sentinel、Dubbo、Redis、XXL-JOB、RocketMQ、ShardingJDBC、Druid、MySQL、EslasticSearch、Canal、 Seata、SaToken 等中间件及技术,还用到了像 Hutool、Logback、Caffeine、Mybatis、MybatisPlus、FastJson2等常用的开源框架。

在技术方案上,主要涉及到了各种分布式、微服务、高并发、高可用等相关技术列表。(项目详细介绍

项目给大家交付的内容包括了代码+视频+文档+答疑


这个项目目前还在更新中,预计会在接下来的3个月左右时间完成代码的开发、文档和视频的更新。(主干功能已完成,项目可完整运行起来)

更新完之后,有效代码行数应该在3万行左右,视频和文档都在200集左右。文档总字数大概20万字左右,视频的总时长大概在2000分钟左右。

这个项目因为目前刚刚推出,还是一个首发价,当前的价格是179,这个价格不是一年的价格,是永久的。

项目详细介绍:高并发、大流量的项目实战课上线了!

购买的方式目前大家可以通过下方的二维码下单,下单后会有短信提示,然后你就可以根据提示操作,申请代码、视频、文档的权限了。

(一定要仔细阅读短信提示内容)


这个项目是一个微服务的技术栈,所以其实内容还是挺多的,想要学明白,还是有一定的门槛的,所以,对于0基础的人不适合!

除了0基础以外,其他人都能学,因为项目中我有很多模块,不同的模块遇到的挑战、用到的技术都不一样,你可以按照我划分的难度进行选择性学习。

Hollis
Hollis,一个对Coding有着独特追求的人。《Java工程师成神之路》系列作者、《程序员的三门课》联合作者,本公众号专注分享Java相关技术干货!
 最新文章