2023年工作初体验

23年终于正式入职,参与了正式上线的电商平台、crm平台等项目的研发,公司规模较小,气氛融洽,没有任何勾心斗角、末位淘汰,几乎没什么压力。虽然是我的第一家公司,但实际是个适合养老的公司(笑
总结下今年工作学到的实践经验

交流方面

多交流、多沟通,老员工知道哪个地方有现成的接口。重点还有多与需求方沟通,不要觉得自己刚来不好意思交流。
刚来在业务流程上的问题尤其要大胆说,说错了也没问题,新人本来就不熟悉业务,说出一个错误选项让师兄或业务部排除,比自己去看不熟悉的代码要省时间。
一定要会砍需求!我tm直接砍砍砍!其实和运营部门和产品经理关系还挺好的。网上互怼的段子也有不少。如果不砍需求做了无用功,还是自己吃亏,绩效也受影响。

工作流程

公司使用阿里云效进行需求管理,类似gitlab
用github比喻的话,“需求/任务”对应issue;可以在对应的需求/issue上建立有对应编号的分支;
提交到自己分支,然后在jenkins测试环境选中自己的分支构建,就可以让需求的提出者/测试人员也线上测试效果了;

测试通过的话就可以提交到master分支。同github相同,新建请求合并(pr)时可以选择评审人,由评审人负责code review

经验方面

idea 提取函数;比起复制粘贴老代码,还是提取为函数,方便以后统一修改(dry原则,don’t repeat yourself,避免同一功能重复使用);如果只记得修改一个地方,那其他几处就成了bug;
代码风格:给我做code review的这位,指出了使用stream 和 lambda表达式代替for循环赋值hashmap的问题。过去我比较喜欢朴素的写法,今后要保持风格一致。

性能

在遍历中最好不要有跨服务、跨接口、数据库的操作。我曾写过一个在遍历中调用dubbo远程接口查询订单的程序,耗时非常长;可以利用缓存"空间换时间"的思路,把数据取过来缓存在hashMap中。
之前开发的时候我只知道在For循环里查询数据库可能会对性能造成影响,现在知道了参与微服务开发后,在循环里遍历远程接口同样会对性能造成压力;而且接口都是设置了超时时限的,可能导致调用失败。

数据库

谨慎添加新字段。我刚入职添加了好多新字段,因为当时临近节假日,技术经理又放婚嫁去了,时间紧任务重,又是个性格内向的新人,进来没有好好了解需求和曾经的表结构。导致在数据库里加了不少多余字段(另一位师兄也很忙来不及细看)。一定要认真和产品经理(或类似提需求的职位,本文统称产品经理)好好交流那些内容需要哪些不需要;另外也要早点儿熟悉公司代码和表结构,有些冗余字段其实没必要加,可以用多表查询,同其他表的字段保持一致。

测试

公司唯一的测试妹子离职了,现在是自测+产品经理测,很多时候我这个不熟悉业务的新人测不出问题\bad
在实践中终于学会了打断点,并且再断点中改变数据进行测试。

postman测试

请求头中content type以填写的请求体为准,不能更改,要去选请求体的格式

测试的直接把验证码相关的校验给我注释起来口牙!

本地与开发环境配置

虽然.gitignore文件可以使git忽略一些文件,但在环境方面却有些难用,比如刚修改.gitignore后git默认还会追踪之前的那些文件;开发者本地开发时需要修改本地/测试/开发环境配置文件中的信息(比如有的开发者不会把开发环境放在本机127.0.0.1或是常用端口),需要提交时忽略这些更改,但此时的.gitignore确是公有库中大家都在使用的,不论是新增忽略文件、暂时忽略某些配置文件都挺难办;
师兄的解决办法是每次提交时在idea手动忽略;
我的办法是在idea的启动参数中指定环境,那里优先级高,覆盖掉配置文件的内容;这样每次启动时就会用本地环境,而且不用动任何文件;
在这里插入图片描述

规范与习惯

git提交消息:以需求编号开头
跟随前人的习惯写:项目新老代码交替,代码风格和技术栈多变。有的导出Excel功能用poi,有的用easyExcel;有的判空用==null三元表达式,有的用Objects.isNull(),还有的写if/else。我们代码好用==的三元表达式,那用同一个文件里统一用,不要一会if/else一会儿三元表达式。

不要用魔数,不要写这么复杂,有Objects.nonNull这个方法

    public boolean equals(Object obj) {if (obj instanceof Integer) {return value == ((Integer)obj).intValue();}return false;}

instanceof是不会空指针的

interface中定义常量

contains用List不如Set

分布式事务

找一个中间的一致性管理?成本和复杂性太高,金融之类的强制要求可能需要

A调用B,B也有事务,A还没提交,B只能读老数据
要么A搞个接口让B读,也挺麻烦
要是改隔离级别,可能产生脏数据。
可以搞个job晚上自动核对数据,甚至发个报警让人工处理。每天几千笔极小交易的公司也是这么处理。
多表的update保持一致要加事务,但是分布式事务成本很高,所以用消息队列?主要还是为了异步吧,事务该被拆开还是拆开了。

测试环境和生产环境的不同

除了分支不同、jenkins构建的分支不同之外,有些参数也不同。
mq延时消息,延时级别对应的延时时长,测试环境数据库里的时间比较短,方便测试。正式环境比较长。

身体

身体是编程的本钱。曾有一次感冒发烧,39°C,代码是点进一层调用忘一层,第二天只能请假。一定要保证身体。

24年规划

  • 坚持写博客。今年没有打算争抢博客之星,倒是白白没落了几篇好文章啊
  • 加入某个权威性的计算机组织。(大不了趁三月打折买个CCF会员doge)
  • 尝试发表论文、同高校教师合作。虽然两年考研失败、一年忙于工作,几乎断了考研路,但还是有一小丢丢的科研♥呢。只能说体验体验吧

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

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

相关文章

双击shutdown.bat关闭Tomcat报错:未设置关闭端口~

你们好,我是金金金。 场景 当我startup.bat启动tomcat之后,然后双击shutdown.bat关闭,结果报错了~ 排查 看报错信息很明显了,未配置关闭端口,突然想起来了我在安装的时候都选的是默认的配置,我还记得有这…

快速批量运行命令

Ansible 是 redhat 提供的自动化运维工具,它是 Python编写,可以通过 pip 安装。 pip install ansible 它通过任务(task)、角色(role)、剧本(playbook) 组织工作项目,适用于批量化系统配置、软件部署等需要复杂操作的工作。 但对于批量运行命…

简单罗列一下jdk常见的垃圾收集器

1. Serial Collector 类型:单线程收集器。工作模式:使用标记-压缩算法进行老年代的垃圾收集,标记-复制算法进行年轻代的垃圾收集。特点:简单高效,适用于单核处理器或小型堆内存。在进行垃圾收集时,会暂停所…

nginx日志目录详解

Nginx 默认会打印访问日志(access log)和错误日志(error log)。这些日志对于监控和调试网站非常有用。以下是关于如何配置和查看 Nginx 日志的一些基本信息: 配置 Nginx 日志 访问日志(Access Log&#xf…

宝塔部署nuxt3项目问题解决

使用宝塔部署nuxt3项目一直没成功,网站502,要不就是资源加载不出来 测试使用宝塔版本8.0.4 添加node项目方式失败,项目更目录设置到server,无法设置运行目录为public, 导致网站资源加载不出来,设置到.output目录,会提…

继电器组开发控制

也是通过树莓派IO口的控制来实现继电器组的开发 继电器组有四根信号线,2根电源线。 通过gpio readall 查看树莓派各个端口的信息选择26 27 28 29 作为信号端口 编程可能会遇到的一些问题 1、通过键盘输入指令的时候,如果用scanf 会有bug,导…

JavaScript高级程序设计读书记录(一):语言基础,语法,变量,数据类型

1. 语法 很大程度上借鉴了 C 语言和其他类 C 语言,如 Java 和 Perl. 1.1 区分大小写 1.2 标识符 第一个字符必须是一个字母、下划线(_)或美元符号($); 剩下的其他字符可以是字母、下划线、美元符号或数…

排除启动类故障----三大实验

目录 一、模拟破坏mbr和分区表然后修复 二、修复grub引导故障 三、遗忘root用户密码 一、模拟破坏mbr和分区表然后修复 1、mbr处于第一块磁盘的第一个物理扇区,总共512个字节,前446个字节是grub程序,后面64个字节是分区表 2、故障原因&a…

Linux 进程(九) 进程等待

子进程退出,父进程如果不管不顾,就可能造成‘僵尸进程’的问题,进而造成内存泄漏,所以父进程回收子进程是必然要做的。 另外,进程一旦变成僵尸状态,那就刀枪不入,“杀人不眨眼”的kill …

JS新手入门笔记整理:JS引入方式

JavaScript&#xff0c;简称JS。是一种嵌入到HTML页面中的编程语言&#xff0c;由浏览器一边解释一边执行&#xff0c;控制着网页的行为。 引入方式 外部JavaScript 语法 <head><!--1.在head中引入--><script src”index.js”></script> </head&g…

googlecode.log4jdbc慢sql日志,格式化sql

前言 无论使用原生JDBC、mybatis还是hibernate&#xff0c;使用log4j等日志框架可以看到生成的SQL&#xff0c;但是占位符和参数总是分开打印的&#xff0c;不便于分析&#xff0c;显示如下的效果: googlecode Log4jdbc 是一个开源 SQL 日志组件&#xff0c;它使用代理模式实…

day06、SQL语言之概述

SQl 语言之概述 6.1 SQL语言概述6.2 SQL语言之DDL定义数据库6.3 SQL语言之DML操纵数据库 6.1 SQL语言概述 6.2 SQL语言之DDL定义数据库 6.3 SQL语言之DML操纵数据库

mac m1 goland调试模式踩坑记录

背景&#xff1a;在使用 m1 芯片的 mac &#xff0c;进行 go 项目开发时&#xff0c;发现 debug 模式无法正常调试。 版本环境 go: 1.20.1 goland: 2021.1.3 无法使用调试模式 mac m1 环境下启动 goland 后&#xff0c;发现无法正常使用 debug 模式&#xff0c;接口请求后会…

2024.1.4

今天学了些什么呢&#xff1f;回忆下&#xff1a;主要搞了一下 指针的进阶&#xff0c;指针数组和数组指针&#xff0c;这大抵是相当抽象的东西&#xff0c;确实很难学啊&#xff0c;绕来绕去的&#xff0c;但是不必多言——为什么要攀登珠穆朗玛峰&#xff1f;因为它就在那儿&…

感染了后缀为.360勒索病毒如何应对?数据能够恢复吗?

引言&#xff1a; 随着科技的进步&#xff0c;网络犯罪的威胁也逐渐演变&#xff0c;.360勒索病毒便是其中一种具有破坏性的恶意软件。本文将深入剖析.360勒索病毒的特征、传播途径&#xff0c;以及在数据遭到加密后的恢复方法&#xff0c;并提供一些建议来有效预防这一威胁。…

BLE Mesh蓝牙组网技术详细解析之Foundation Model Layer基础模型层(七)

目录 一、什么是BLE Mesh Foundation Model Layer基础模型层&#xff1f; 二、模型 2.1 配置模型 2.2 健康模型 三、状态 3.1 Composition Data 四、资料获取 一、什么是BLE Mesh Foundation Model Layer基础模型层&#xff1f; BLE Mesh Foundation model Layer是蓝牙…

redis服务迁移数据工具--RDM

一、背景&#xff1a; 在日常的运维工作经常遇见各种数据迁移工作&#xff0c;例如mysql数据库迁移、redis数据库迁移、minio数据迁移等等工作。这里介绍一下redis数据库的迁移过程。 二、迁移思路&#xff1a; redis服务/集群的数据迁移思路是需要新建一个配置、密码一样的re…

【Leetcode】2487. 从链表中移除节点

文章目录 题目思路代码 题目 2487. 从链表中移除节点 思路 1、递归移除节点&#xff1a; 如果头节点为空&#xff0c;直接返回空。递归调用函数处理下一个节点 head->next。在递归返回后&#xff0c;判断当前节点的值是否小于之前记录的最大值 maxVal。如果小于 maxVal…

洛谷p1829(莫比乌斯反演)

思路&#xff1a; 代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<cstring> #include<cmath> using namespace std; const double eps 1e-8; const int N 1e710; const long long mod 20101009…

【鸿蒙】安装DevEco Studio运行HarmonyOS第一个APP(小白必看)

文章目录 前言一、DevEco Studio是什么&#xff1f;二、DevEco Studio安装运行1. 下载DevEco Studio2. 安装DevEco Studio3. 启动DevEco Studio4. 运行APP5. 修改代码 三、DevEco Studio调试注意事项总结 前言 鸿蒙OS是华为公司开发的一款基于微内核、耗时10年、4000多名研发人…