跳至主要內容
The name of your blog

The name of your blog

You can put your slogan here

project name
project detailed description
link name
link detailed description
book name
Detailed description of the book
article name
Detailed description of the article
friend name
Detailed description of friend
custom item
custom item
Detailed description of this custom item
企业级Web后端工程生命周期

学习核心

  • 需求管理
  • 需求开发
  • 测试
  • 部署
  • 运维(测试(DEV\SIT\UAT)、生产(PROD))
  • 安全

学习参考

开发规范

1.需求管理

​ 基于PaaS平台结合线上线下进行Web开发的生命周期管理:

  • 需求评审:构建需求Story进行评审,随后开发人员构建开发子任务(创建开发相关Story)进行相应的业务开发
  • 开发联调:开发完成与前端组员进行项目联调(本地自测、DEV联调)
  • 项目提测:基于CI/CD流水线部署,进行自测 ->冒烟测试(开发侧)-> SIT测试(提测)-> UAT测试(转测),随后交由产品验收
  • 上线发布:上线准备(文档准备、环境准备、流程疏通)-> 项目发布

holic-x...大约 4 分钟碎片化碎片化
数据批量操作篇

前情提要

​ 在MySQL原理学习中,经常需要用到一些大数据量的表来支撑理论学习,因此不免会陷入"造数据"的烦恼,虽然可以借助一些函数或者程序设计(例如hutool工具类)的方式来动态生成一些可用的数据,但还需要进一步满足对大数据量处理的需求,从一开始的1w、10w、100w的数据测试过程会发现可能批量插入几万条数据借助存储过程可能就几分钟忍忍就过去了,但是对于更大的数据量批量插入操作却直接断层拉开时间成本,可能需要更长的时间去完成批量操作

  • MySQL服务环境:MySQL8.0.21(核心测试)、MySQL5.7.44(辅助对照)
  • IDEA(JAVA程序构建,用于批量生成数据)
  • 客户端环境:Navicat、Windows 10(16G)

holic-x...大约 33 分钟碎片化碎片化
Java线上问题排查流程&方案

系统运行一段时间后很慢如何排查?

​ 如果说程序上线一段时间后运行特别慢,则考虑是否同一时间段出现大量请求导致阻塞(❌如果是在请求正常的情况下)

​ 排除思路:由外到内,结合系统日志跟踪,排除外部原因,然后跟踪内部因素

​ 可以结合实际业务场景从多个维度去思考:关注点:监控排查、代码排查、数据库分析、系统资源、外部依赖、应用架构

  • 性能监控和排查(linux指令查看系统运行、宝塔面板查看):查看程序的CPU、内存、磁盘I/O和网络使用情况,随后跟踪线上日志定位异常信息

holic-x...大约 16 分钟碎片化碎片化
Java系统出现内存飙升的常见情况及处理

Java 系统内存飙升可能是由以下几种情况导致的:

(1)内存泄漏(Memory Leak):程序中已分配的内存没有被释放,导致可用内存逐渐减少

(2)大对象分配:程序创建了大型对象,导致内存不足分配新对象

(3)垃圾回收问题(GC Pause or Stall):垃圾回收器无法及时回收内存,或者回收效率低,导致内存长期被占用

(4)错误的内存管理:程序代码中存在不当的内存分配和释放策略,导致内存使用不当


holic-x...大约 2 分钟碎片化碎片化
HashMap的底层实现原理

HashMap是Java集合框架中的一个类,它实现了Map接口。JDK1.7中HashMap内部是通过数组+链表实现的,并且可以接受null键和值。在JDK1.8之后,当链表长度超过阈值(默认为8)时,链表将转换为红黑树以提高查询效率(即数组+链表+红黑树)。

以下是HashMap的一些关键属性:

  • DEFAULT_INITIAL_CAPACITY:默认初始容量,必须是2的幂。
  • MAXIMUM_CAPACITY:最大容量,必须是2的幂,且小于2^30。
  • DEFAULT_LOAD_FACTOR:默认负载因子,用于计算自动扩容的阈值。
  • TREEIFY_THRESHOLD:当链表长度超过这个值会转换为红黑树。
  • UNTREEIFY_THRESHOLD:当红黑树的节点数少于这个值会转换回链表。
  • table:存储数据的数组,每个元素是一个链表的头节点。
  • sizeHashMap包含的键值对数量。
  • threshold:扩容的阈值,等于容量乘以负载因子

holic-x...大约 5 分钟碎片化碎片化
Da-API平台-项目部署

前后端分离部署:原生部署、宝塔方式部署、Docker部署、工作流部署

  • 前端:npm run build项目打包

  • 后端:

    backend 项目:web 项目,部署 spring boot 的 jar 包(对外的)

    gateway 网关项目:web 项目,部署 spring boot 的 jar 包(对外的)

    interface 模拟接口项目:web 项目,部署 spring boot 的 jar 包(不建议对外暴露的)

    关键:网络必须要连通


holic-x...大约 30 分钟项目Da-API平台
Da-API平台-分布式改造&RPC

1.RPC框架引入

网关业务逻辑梳理

问题:网关项目比较纯净,没有操作数据库的包、并且还要调用之前项目写过的代码,复制粘贴维护麻烦。

理想:直接请求到其他项目的方法(调用)

​ 目前网关项目遇到一个问题,就是网关项目比较纯净,没有涉及数据库操作的包,但同时需要调用之前编写过的代码。尽管复制粘贴一开始并不麻烦,但是随着次数增多以及未来的修改维护,就变得相当繁琐了。(考虑系统迭代的可维护性和可扩展性)

​ 因此,理想情况就是希望能够直接请求 api-platform-backend 项目中的 invokeCount 方法,此处引入一个概念:远程过程调用(RPC)


holic-x...大约 23 分钟项目Da-API平台
Da-API平台-接口发布、在线调用

1.接口发布下线

【1】接口管理(发布、下线)

概念设计

(1)流程设计

​ 基于现有接口管理模块开发一个用于发布和下线接口的功能。本质上来说,就是改变每条接口数据的状态。在设计接口信息表时,之前已经预留了一个状态字段status。其中,关闭和开启分别对应接口的下线和上线。只有状态为 1 的接口才可以被用户调用,否则将无法调用。(优先后台接口开发,后续完善页面设计)

(2)功能设计

​ 开发发布接口和下线接口(仅管理员可操作这两个接口,防止用户越权操作)。大致规划一下思路:

​ 发布接口:这个接口需要执行哪些任务呢?首先需要验证接口是否存在,然后判断接口是否可调用,否则访问接口都是 404,影响用户体验。如果接口可以调用,需要修改数据库中该接口的状态为 1,表示接口已经被发布,状态默认为 0(关闭)。


holic-x...大约 22 分钟项目Da-API平台

This is a blog home page demo.

To use this layout, you should set both layout: BlogHome and home: true in the page front matter.

For related configuration docs, please see blog homepageopen in new window.