2023 年のプログラミングの旅を振り返る

    I.はじめに

  ブログエキスパートを目指してブログを書き続けますが、正直、CSDNのまとめをしたり、仕事が終わってから技術ブログを書いたりして、エキスパートなどになりたいと思ったら、本当に体力が足りません。「内容が多すぎるので、比較することはできません。これをゆっくりと満足して書くためには、名声や財産に無関心でなければなりません。好きなものを、好きなだけ書いてください。」このようなことを書くのは、純粋にあなたを新鮮に保ち、テクノロジーに敏感に保つためです。セックスについては、ルールに違反しない限り、これらの誤ったことを心配する必要はありません。

  2. 2023 年のプログラミングの旅の振り返り       

1. アプリケーション開発

       2023年は主に小規模なプログラムモールを開発します. 一般的なアーキテクチャはまだspringCloudファミリーバケットと同じです. 基盤となるデータベースはmysql、clickhouse、およびpgデータベースを使用します. ミドルウェアはredis、rocketMqを使用します、OSS開発フレームワークはspringBootを使用します3.0、ゲートウェイ、eureka、apollo、これらのコンポーネント、フロントエンドで使用される vue フレームワーク、主に nginx、docker を使用するデプロイメント フレームワーク、ソフトウェア アプリケーション層は主に小さなプログラムと H5 の形式、およびいくつかのバックグラウンド管理システム。

     Springboot のバックエンド フレームワークを使用しているため、プログラミングは非常に簡単です。コード逆生成ツールを自分で開発しました。基本的にテーブル構造を設計した後、マイクロサービス全体を生成できます。追加、削除、チェックや修正などの機能をカスタマイズした開発です。

たとえば、テーブルは次のように設計されています: acct_card

リバース エンジニアリングによって生成されたコントローラー コードの例:

 

/**
  * @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. トークンを取得するためのインターフェースを提供します。

2. インターフェースパラメータの暗号化と復号化

3. ビジネスインターフェースの提供

インターフェース伝送規格:

呼び出しメソッド(URL)

POST、特定のインターフェイス定義に応じて、POST リクエスト ヘッダーはソースパラメーターを運ぶ必要があります。値は 1 です。

リクエストタイプ(ContentType)

アプリケーション/json

レスポンスタイプ(ContentType)

アプリケーション/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 リモート コード実行の脆弱性 ( 
Spel Cloud Gateway spel リモート コード実行 
Apache Spark 管理者の
Spring Data MongoDB へのバックグラウンド不正アクセス SpEL 式インジェクションの脆弱性 
fastjson <= 1.2.68 逆シリアル化のリモート コード実行の脆弱性
Apache Spark RPC プロトコルの逆シリアル化の脆弱性 
Spring Cloudゲートウェイ spel リモート コード実行 
Apache POI <= 4.1.0 XSSFExportToXml XXE 脆弱性
Jackson 最新の逆シリアル化脆弱性 (CVE-2019-14361 および CVE-2019-14439) [バージョン検出]

上記の脆弱性の多くはコンポーネントのバージョンをアップグレードすることで解決されますが、ゲートウェイを介して処理されるものや、ファイアウォールを介して設定されるものもあります。

3. 2023 年の csdn におけるクリエイティブな旅

今年、私は csdn に 200 以上のブログ投稿を書きました。主な目的は、仕事で遭遇した問題を記録することです。その多くは、優れたブログ投稿の形で書かれていません。これは重要ではないと思います。重要なことは次のとおりです。プログラミングの理解と維持を深めるため、新鮮さ、なぜなら生きて生計を立てるためには依然としてこのスキルに頼らなければならないからです。良いブログを書いても、エネルギーと報酬は比例しませんが、今年は CSDN から得た 100 元以上が赤い封筒の配布に使われました。皆様のご注目とご支援に感謝いたします。 

4. 2024 年に向けて

        過去を振り返ることができるなら、必ず将来も見据えなければなりません。そうでなければ、どうやって進歩できるでしょうか? 10年間のプログラミングは生死のようなものです 私は2014年に卒業し、今年でこの業界に携わって10年目になります 私が卒業した頃はインターネット業界の発展の全盛期だったと言えますが、その後は国内インターネットの隆盛から衰退の過程は、もはや波紋も立てられなくなった澱んだ水のプールのように、インターネットは死滅したと言える。フェイスブックの社名はメタになった 百度のような企業は一日中何をしていいのか分からない 親たちの目にはテンセントは十代の若者に危害を加える小さなゲームをしているだけだ アリババはかつてのアリババではない ファーウェイはただの自慢だ、ファーウェイなんて。今ではDouyinだけが一日中ジャンク動画を投稿して、もともと裕福ではない中国人に商品を買わせるよう誘惑し、少しは稼げるようになっています。2023 年から 2024 年にかけて何らかの進歩が見られる唯一のことは、いくつかの大きなモデルの作成ですが、これはもはやインターネットの範囲内ではありません。現段階は混乱の時期と言える。明確な将来の発展シナリオはない。これまでのIT企業は皆、新エネルギー車に取り組んでいるが、それは役に立たないと感じている。排出削減だけを目的としている。 . しかし、将来の新エネルギー車にも同じことが当てはまるかもしれません. 最大の汚染源は放射線です. 私は個人的にはロボットが次の革命になるかもしれないと考えています. 誰も仕事に行かなくて済み、ロボットに食事を与えられれば一番いいのですが。

おすすめ

転載: blog.csdn.net/dongjing991/article/details/135408970