回顾2023编程之旅

news2025/1/11 0:41:41

    一、前言

  看在给了我一个博客专家的份上就继续写写博客,实事求是的讲如果是工作之余去总结csdn写写技术博客,还想混个专家什么的,真的是精力不够。因为里面的灌水的实在太多,比不过的,写这个玩意必须得淡泊名利才能悠然自得,想写啥就写啥,想写多少是多少,写这种东西纯粹是保持对技术的新鲜度和敏感性,只要不违规就好,不必在乎这些虚的东西。

  二、回顾2023编程之旅       

1、应用的开发

       2023年我主要在开发一个小程序商城,通用的架构还是springCloud全家桶那一套的东西,底层数据库使用了mysql ,clickhouse ,pg 这些数据库,中间件 使用了redis ,rocketMq ,OSS 开发框架使用的是springBoot 3.0 , gateway ,  eureka, apollo 这些组件,前端使用的vue框架,部署框架主要使用nginx, docker ,软件应用层主要是小程序和H5的形式,还有后台管理系统几个。

     我的编程非常简单,因为使用的是springboot的后端框架,我自研了代码逆向生成工具,基本设计好表结构,就能生成整个微服务,基本的增删查改的代码功能都有,其他的是个性化开发。

比如设计好了表: acct_card

逆向工程生成的controller代码示例:

 

/**
  * @Description: 卡账户主账户Controller
  * @Date: 2023-12-19
  */
@RestController
@RequestMapping("acctCard")
@Slf4j
public class AcctCardController {

    @Autowired
    private AcctCardService acctCardService;
    
	@ApiOperation(value = "分页查询卡账户主账户列表", notes = "分页查询卡账户主账户列表")
    @PostMapping("pageList")
    public ResponseData<PageUtils> queryPage(@RequestBody Map<String, Object> param) {
        PageUtils pageUtils = acctCardService.queryPage(param);
        return ResponseData.success(pageUtils);
    }
	
	
	/**
	 * 查询所有卡账户主账户列表
	 * @param  
	 * @return
	 */
	@ApiOperation(value = "查询所有卡账户主账户列表", notes = "查询所有卡账户主账户列表")
    @PostMapping("searchAll")
    public ResponseData<List<AcctCard>> searchAll() {
		List<AcctCard> acctCardList = acctCardService.list();
    	if(!CtgUtils.isCollectionNull(acctCardList)) {
        	return  ResponseData.success(acctCardList);
    	}else {
    		log.info(AcctCardConstant.NOT_EXIST);
    		return  ResponseData.success(acctCardList);
    	}
    }
	
	/**
	 * 保存卡账户主账户
	 * @param acctCard
	 * @return
	 */
	@ApiOperation(value = "保存卡账户主账户", notes = "保存卡账户主账户")
    @PostMapping("save")
    public ResponseData<String> save(@RequestBody AcctCard acctCard) {
    	boolean res = acctCardService.save(acctCard);
    	if(res) {
        	return ResponseData.success(AcctCardConstant.SAVE_SUCCESS);
    	}else {
    		log.error(AcctCardConstant.SAVE_FAILED);
    		return ResponseData.error(AcctCardConstant.SAVE_FAILED);
    	}
    }
	
	/**
	 * 删除卡账户主账户
	 * @param acctCard
	 * @return
	 */
	@ApiOperation(value = "删除卡账户主账户", notes = "删除卡账户主账户")
    @PostMapping("delete")
    public ResponseData<String> delete(@RequestBody AcctCard acctCard) {
    	boolean res = acctCardService.removeById(acctCard);
    	if(res) {
        	return ResponseData.success(AcctCardConstant.DELETE_SUCCESS);
    	}else {
    		log.error(AcctCardConstant.DELETE_FAILED);
    		return ResponseData.error(AcctCardConstant.DELETE_FAILED);
    	}
    }
	
	/**
	 * 根据主键ID更新卡账户主账户
	 * @param acctCard
	 * @return
	 */
	@ApiOperation(value = "根据主键ID更新卡账户主账户", notes = "根据主键ID更新卡账户主账户")
    @PostMapping("update")
    public ResponseData<Boolean> update(@RequestBody AcctCard acctCard) {
		boolean res = acctCardService.updateById(acctCard);
    	if(res) {
        	return  ResponseData.success(true);
    	}else {
    		log.error(AcctCardConstant.UPDATE_FAILED);
    		return  ResponseData.error(AcctCardConstant.UPDATE_FAILED);
    	}
    }
	
	/**
	 * 批量删除卡账户主账户
	 * @param acctCardList
	 * @return
	 */
	@ApiOperation(value = "批量删除卡账户主账户", notes = "批量删除卡账户主账户")
    @PostMapping("deleteList")
    public ResponseData<String> deleteList(@RequestBody List<AcctCard> acctCardList) {
    	boolean res = acctCardService.removeByIds(acctCardList);
    	if(res) {
        	return ResponseData.success(AcctCardConstant.DELETE_SUCCESS);
    	}else {
    		log.error(AcctCardConstant.DELETE_FAILED);
    		return ResponseData.error(AcctCardConstant.DELETE_FAILED);
    	}
    }

	/**
	* 根据主键ID查找卡账户主账户
	*/
	@ApiOperation(value = "根据主键ID查找卡账户主账户", notes = "根据主键ID查找卡账户主账户")
	@PostMapping("searchById")
	public ResponseData<AcctCard> searchById (@RequestBody AcctCard acctCard) {
		AcctCard acctCardRes = acctCardService.getById(acctCard.getId());
		if (ObjectUtil.isNotEmpty(acctCardRes)) {
			return ResponseData.success(acctCardRes);
		}else {
			log.error(AcctCardConstant.QUERY_FAILED);
			return ResponseData.error(AcctCardConstant.QUERY_FAILED);
		}
	}
 
}

2.接口的开发

除了开发应用,在2023年中很多时间都在开发接口,主要就是我们的小程序商城需要和外部企业进行合作,进行流量互到,所以有很多接口需要开发。

对于外部接口我们还是使用http的方式

接口对接主要是几个步骤

1、提供一个获取token的接口、

2、接口参数的加解密

3、提供业务接口

接口传输标准:

调用方式(url)

POST,视具体接口定义,POST请求头(headers)需要携带 source参数,值为1

请求类型(ContentType)

application/json

响应类型(ContentType)

application/json

部分接口参数示例:

{
    "code": 200,
    "message": "成功",
    "data": {
        "openId": null,
        "sessionKey": null,
        "userId": "6636b27895f80e3b23159",
        "oneId": null,
        "state": 1,
        "token": null,
        "isAuthorPhone": "0",
        "isRegUser": null,
        "userInfo": null
    },
    "encrypt": false
}

有的接口数据量和并发量比较大,对于实时性要求不高的我们才有走mq的形式,一方将数据发送到mq,另一方从mq进行消费。

3.应用维护

我们的小程序上线以后,就需要经常维护,比如服务器告警的处理,系统日志的归档,web安全漏洞等等,这些东西就占用了比较多的时间。有时候由于需要搞活动,还需要给应用进行扩容。对于扩容还比较简单,我们的系统支持横向无限扩容,但是最好规模是在100个服务以内,超过100个服务,那维护起来也是很麻烦的。

我们服务器的告警主要有带宽使用的告警,至于CPU,内存,磁盘这些告警,一年下来几乎没有,磁盘的告警也只是由于日志文件较多,占满了磁盘,日志一般保留半年就行。时间长的可以删除或者归档存储到其他地方去,这是主要的解决方案。至于web安全漏洞,就出现的比较多,一般有高危的和中低危的,高危的我们基本都修复了 ,有些低危的没有修复。下面列一下今年出现的部分系统漏洞

Apache Commons Text StringLookup 远程代码执行漏洞( 
Spring Cloud Gateway spel 远程代码执行 
Apache Spark 管理员后台未授权访问
Spring Data MongoDB SpEL表达式注入漏洞 
fastjson <= 1.2.68 反序列化远程代码执行漏洞
Apache Spark RPC协议反序列化漏洞 
Spring Cloud Gateway spel 远程代码执行 
Apache POI <= 4.1.0 XSSFExportToXml XXE漏洞
Jackson 最新反序列化漏洞(CVE-2019-14361和CVE-2019-14439)【版本检测】

上面的很多漏洞都是通过升级组件版本解决的 有些是通过网关 进行处理,也有些通过防火墙进行设置。

三、2023在csdn的创作之旅

今年在csdn上写了200多篇博文吧,主要还是记录工作中遇到的一些问题,很多都没按照优秀博文的形式进行编写,我觉得这并不重要,主要还是加深对编程的理解和保持新鲜度,因为还是要靠这个技能活下去,混口饭吃。博客写的好,精力和回报也成不了正比,今年在csdn收入的100多块钱都拿来发红包了。谢谢各位大佬的关注和抬爱。 

四、展望2024

        有回顾就要有展望,要不然这怎么进步呀。编程10年,真是10年生死两茫茫,2014年毕业的我,今年正好在这个行业混迹了10年,可以说我刚毕业的时候是互联网行业发展的鼎盛时期,然后一路走下坡路,可谓见证了国内互联网由盛转衰的过程,可以说如今互联网已死,犹如一潭死水,再也荡不起什么涟漪。脸书公司名都变成了meta,百度这样的公司也不知道整天再搞些什么东西,腾讯在家长眼中只会搞点小游戏祸害青少年,阿里也不是以前的阿里,华为也只是会吹牛逼的华为。现在就只有抖音整天在发布些垃圾视频,勾引原本不富裕的国人买货,能赚一点是一点。 2023年到2024年唯一有点进步的是搞了点大模型,但这已经不属于互联网的范围。可以说现在的阶段是混沌期,没有一个可以明确的未来发展场景,各个以前的IT公司都在搞新能源汽车,然后感觉没什么卵用,无非就是为了减排,但是以后的新能源汽车可能也是最大的污染源,辐射源,个人觉得机器人可能会才能下一次革命吧。最好是所有的人都不用上班,让机器人来养活我们。

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

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

相关文章

ACL16_S 系列 低成本物联网安全芯片,可应用物联网认证、 SIM、防抄板和设备认证等产品上

ACL16_S 芯片是针对物联网认证、 SIM、防抄板和设备认证需求推出的高安全芯片。芯片采用 32 位 ARMCortex™-M0 系列内核&#xff0c;片内集成多种安全密码模块&#xff0c;包括 RSA/ECC DES/TDES、 SHA-1/-256、 AES-128/-192/-256 等国际安全算法&#xff0c;支持真随机数发…

Arcgis像元统计数据

目录 单幅影像统计多幅影像统计 单幅影像统计 现有一幅NDVI影像&#xff0c;如何知道影像中NDVI的分布情况呢&#xff1f; 先栅格转点&#xff0c;然后在属性表中查看汇总情况 还有一种方法就是在ENVI中打开&#xff0c; -0.3-0.338占据了99% 多幅影像统计 现有多幅NDVI影…

网络协议与攻击模拟_01winshark工具简介

一、TCP/IP协议簇 网络接口层&#xff08;没有特定的协议&#xff09; 物理层&#xff1a;PPPOE宽带拨号&#xff08;应用场景&#xff1a;宽带拨号&#xff0c;运营商切网过来没有固定IP就需要拨号&#xff0c;家庭带宽一般都采用的是拨号方式&#xff09;数据链路层网络层…

uniapp中组件库的Textarea 文本域的丰富使用方法

目录 #平台差异说明 #基本使用 #字数统计 #自动增高 #禁用状态 #下划线模式 #格式化处理 API #List Props #Methods #List Events 文本域此组件满足了可能出现的表单信息补充&#xff0c;编辑等实际逻辑的功能&#xff0c;内置了字数校验等 注意&#xff1a; 由于…

基于微信小程序的热院成都味道系统的设计与实现

互联网的普及彻底颠覆了人们的生活&#xff0c;一直以来人们都是通过到餐厅就餐来满足自己的口腹之欲&#xff0c;而在工作学习繁忙的时候只能通过方便食品来进行充饥。而外卖订餐的出现则为这些人群提供了一个兼顾美食与工作学习的解决方案&#xff0c;因此已经有越来越多的人…

全视通发表“物联网赋能智慧医院建设”主题演讲获关注

邕州山河&#xff0c;神州沃壤。近日&#xff0c;备受瞩目的“2024广西医院和实验室建设学术年会暨净化专业委员会成立六周年庆典”在广西南宁圆满召开。作为智慧医康养整体方案提供商&#xff0c;全视通受邀参会并发表了主题为“物联网赋能智慧医院建设”的演讲&#xff0c;深…

在macos上查看当前进程的栈信息

概述 在调试程序时&#xff0c;如cpu莫名的高或低&#xff0c;一个常用的方式就是打印当前进行的调用栈&#xff0c;然后确认各线程的执行函数是否有异常。 在linux系统中可以使用pstack命令&#xff0c;直接打印各线程的栈信息&#xff0c;可惜在macos上没有该命令。一种解决…

利用人工智能和机器人技术实现复杂的自动化任务!

这篇mylangrobot项目由neka-nat创建&#xff0c;本文已获得作者Shirokuma授权进行编辑和转载。 https://twitter.com/neka_nat GitHub-mylangrobot &#xff1a;GitHub - neka-nat/mylangrobot: Language instructions to mycobot using GPT-4V 引言 本项目创建了一个使用GPT-4…

MySQL运维实战(3.1) MySQL官方客户端使用介绍

作者&#xff1a;俊达 引言 MySQL是MySQL安装包默认的客户端&#xff0c;该客户端程序通常位于二进制安装包的bin目录中&#xff0c;或者通过rpm安装包安装mysql-community-client&#xff0c;是数据库管理系统的重要组成部分。MySQL客户端不仅仅是一个简单的软件工具&#x…

【数据库原理】(15)数据关系模式与规范

在数据库系统设计中&#xff0c;数据模式的设计是至关重要的。这涉及到如何将现实世界的复杂结构和关系有效地转化为适宜的数据模式。关系模式&#xff0c;得益于其坚实的数学理论基础&#xff0c;不仅能以二维表的形式清晰地表达实体&#xff0c;还能描述实体之间的相互关系&a…

使用STM32和MPU6050实现基于手势的室内导航系统

基于STM32和MPU6050的基于手势的室内导航系统是一个创新而具有挑战性的项目。在本文中&#xff0c;我们将介绍如何利用STM32微控制器和MPU6050传感器实现基于手势的室内导航系统&#xff0c;并提供相应的代码示例。 1. 系统概述 基于手势的室内导航系统旨在通过手势识别的方式…

使用Adobe Acrobat Pro DC给pdf文件填加水印

前言 GPT4的官方售价是每月20美元&#xff0c;很多人并不是天天用GPT&#xff0c;只是偶尔用一下。 如果调用官方的GPT4接口&#xff0c;就可以按使用量付费&#xff0c;用多少付多少&#xff0c;而且没有3个小时内只能提问50条的使用限制。 但是对很多人来说调用接口是比较麻烦…

自动驾驶轨迹预测

目录 神经网络轨迹预测综述&#xff1a; 比较新的轨迹预测网络 Uber&#xff1a;LaneRCNN[5] Google&#xff1a;VectorNet[6] Huawei&#xff1a;HOME[7] Waymo&#xff1a;TNT[8] Aptive&#xff1a;Covernet[9] NEC&#xff1a;R2P2[10] 商汤&#xff1a;TPNet[11]…

小H靶场笔记:DC-6

DC-6 January 6, 2024 12:06 PM Tags: nmap提权&#xff0c;WordPress Owner&#xff1a;只惠摸鱼 信息收集 apr-scan和nmap探测主机后&#xff0c;发现靶机ip&#xff1a;192.168.199.136&#xff0c;端口22和80开放 扫描端口服务、版本、操作系统、默认脚本扫描 扫描开…

Dora-rs 机器人框架学习教程(3)——利用yolo实现目标检测

文章目录 1 安装pytroch环境1.1 nvidia驱动1.2 安装cuda1.3 在conda中安装pytorch GPU版本1.4 检验pytroch是否安装正确 2 编写程序代码2.1 object_detection.py文件内容如下&#xff1a;2.2 dataflow.yml 文件内容如下&#xff1a; 3 运行参考资料 目标&#xff1a;在dora框架…

Hyperledger Fabric Docker 方式多机部署生产网络

规划网络拓扑 3 个 orderer 节点&#xff1b;组织 org1 , org1 下有两个 peer 节点&#xff0c; peer0 和 peer1; 组织 org2 , org2 下有两个 peer 节点&#xff0c; peer0 和 peer1; 因为我只有 3 台虚拟机资源所以没法实现完全的多机部署&#xff0c;资源使用规划如下&#…

各种锁的概述

乐观锁与悲观锁 悲观锁指对数据被外界修改持保守态度&#xff0c;认为数据很容易就会被其他线程修改&#xff0c;所以在数据被处理前先对数据进行加锁&#xff0c;并在整个数据处理过程中&#xff0c;使数据处于锁定状态。 悲观锁的实现往往依靠数据库提供的锁机制&#xff0…

react antd 计算公式 (+-*/)运算,回显

计算器的源码计算器触发事件源码 import { DictValueEnumObj } from /components/DictTag; import { getDeptTree, getFormulaListAll, getListAll } from /services/Energy/Metering;import { getListAllInfo, getDepartmentName } from /services/Energy/Calculation; import…

带前后端H5即时通讯聊天系统源码

带有前后端的H5即时通讯聊天系统源码。该源码是一个开源的即时通信demo&#xff0c;需要前后端配合使用。它的主要目的是为了促进学习和交流&#xff0c;并为大家提供开发即时通讯功能的思路。尽管该源码提供了许多功能&#xff0c;但仍需要进行自行开发。该项目最初的开发初衷…