Rückblick auf die Programming Journey 2023

    I. Einleitung

  Um mir einen Blog-Experten zu geben, werde ich weiterhin Blogs schreiben. Um ehrlich zu sein, wenn ich nach der Arbeit CSDN zusammenfasse und technische Blogs schreibe und Experte oder so werden möchte, habe ich wirklich nicht genug Energie. Weil es so viel Zeug darin gibt, kann man es nicht vergleichen. Um dieses Ding zu schreiben, muss man gleichgültig gegenüber Ruhm und Reichtum sein, um gemächlich und zufrieden zu sein. Sie können schreiben, was Sie wollen, so viel Sie wollen. Das Schreiben solcher Dinge dient lediglich dazu, Sie frisch und sensibel für die Technologie zu halten. Sex, solange er nicht gegen die Regeln verstößt, machen Sie sich über diese falschen Dinge keine Sorgen.

  2. Rückblick auf die Programming Journey 2023       

1. Anwendungsentwicklung

       Im Jahr 2023 werde ich hauptsächlich ein kleines Programm-Mall entwickeln. Die allgemeine Architektur ist immer noch dieselbe wie beim SpringCloud-Familien-Bucket. Die zugrunde liegende Datenbank verwendet MySQL-, Clickhouse- und PG-Datenbanken. Die Middleware verwendet Redis, RocketMq und das OSS-Entwicklungsframework verwendet SpringBoot 3.0, Gateway, Eureka, Apollo, diese Komponenten, das im Front-End verwendete Vue-Framework, das Bereitstellungsframework verwendet hauptsächlich Nginx, Docker, die Softwareanwendungsschicht besteht hauptsächlich aus kleinen Programmen und H5 sowie mehreren Hintergrundverwaltungen Systeme.

     Meine Programmierung ist sehr einfach, da ich das Back-End-Framework von Springboot verwende. Ich habe selbst ein Tool zur Code-Reverse-Generierung entwickelt. Nachdem ich im Wesentlichen die Tabellenstruktur entworfen habe, kann ich den gesamten Microservice generieren. Er verfügt über grundlegende Codefunktionen zum Hinzufügen, Löschen, Überprüfen, Ändern und andere Funktionen. ist personalisierte Entwicklung.

Die Tabelle ist beispielsweise so gestaltet: acct_card

Beispiel für durch Reverse Engineering generierten Controller-Code:

 

/**
  * @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. Entwicklung von Schnittstellen

Neben der Entwicklung von Anwendungen werden wir im Jahr 2023 viel Zeit mit der Entwicklung von Schnittstellen verbringen. Der Hauptgrund dafür ist, dass unser Mini-Programmcenter mit externen Unternehmen zusammenarbeiten muss, um Datenverkehr auszutauschen, sodass viele Schnittstellen entwickelt werden müssen.

Für externe Schnittstellen verwenden wir weiterhin http.

Das Schnittstellen-Docking besteht im Wesentlichen aus mehreren Schritten

1. Bereitstellung einer Schnittstelle zum Erhalten von Token,

2. Verschlüsselung und Entschlüsselung von Schnittstellenparametern

3. Stellen Sie Geschäftsschnittstellen bereit

Schnittstellenübertragungsstandard:

Aufrufmethode (URL)

POST: Abhängig von der spezifischen Schnittstellendefinition müssen die POST-Anforderungsheader den Quellparameter enthalten . Der Wert ist 1

Anfragetyp (ContentType)

application/json

Antworttyp (ContentType)

application/json

Einige Beispiele für Schnittstellenparameter:

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

Einige Schnittstellen verfügen über relativ große Datenmengen und Parallelität. Für diejenigen mit geringen Echtzeitanforderungen verwenden wir mq. Eine Partei sendet Daten an mq und die andere Partei verbraucht sie von mq.

3. Anwendungswartung

Nachdem unser kleines Programm online gegangen ist, muss es regelmäßig gewartet werden, z. B. durch die Verarbeitung von Serveralarmen, die Archivierung von Systemprotokollen, Web-Sicherheitslücken usw. Diese Dinge nehmen viel Zeit in Anspruch. Manchmal muss die Anwendung aufgrund der Notwendigkeit, sich an Aktivitäten zu beteiligen, erweitert werden. Die Erweiterung ist relativ einfach. Unser System unterstützt eine unbegrenzte horizontale Erweiterung, die beste Skalierung liegt jedoch innerhalb von 100 Diensten. Wenn 100 Dienste überschritten werden, ist die Wartung sehr schwierig.

Die Alarme auf unserem Server umfassen hauptsächlich Alarme zur Bandbreitennutzung. Bei den CPU-, Speicher- und Festplattenalarmen gibt es fast keine Alarme pro Jahr. Die Festplattenalarme sind nur auf die große Anzahl von Protokolldateien zurückzuführen, die die Festplatte füllen. Die Protokolle werden in der Regel ein halbes Jahr lang aufbewahrt. Wenn es lange dauert, können Sie es löschen oder archivieren und woanders speichern. Dies ist die Hauptlösung. Was die Web-Sicherheitslücken betrifft, gibt es eine ganze Reihe davon. Im Allgemeinen gibt es Schwachstellen mit hohem Risiko und Schwachstellen mit mittlerem bis niedrigem Risiko. Wir haben im Grunde alle Schwachstellen mit hohem Risiko behoben, und einige Schwachstellen mit geringem Risiko wurden noch nicht behoben . Hier ist eine Liste einiger der Systemschwachstellen, die in diesem Jahr aufgetreten sind:

Apache Commons Text StringLookup Sicherheitslücke bei Remotecodeausführung ( 
Spel Cloud Gateway Spel Remotecodeausführung 
Apache Spark-Administratorhintergrund Unbefugter Zugriff auf
Spring Data MongoDB SpEL-Ausdrucksinjektionsschwachstelle 
fastjson <= 1.2.68 Deserialisierung Sicherheitslücke bei Remotecodeausführung
Apache Spark RPC-Protokoll Reverse Serialisierungsschwachstelle 
Spring Cloud Gateway-Spiel Remote-Codeausführung 
Apache POI <= 4.1.0 XSSFExportToXml XXE-Schwachstelle
Jackson Neueste Deserialisierungs-Schwachstelle (CVE-2019-14361 und CVE-2019-14439) [Versionserkennung]

Viele der oben genannten Schwachstellen werden durch die Aktualisierung der Komponentenversionen behoben, einige werden über Gateways gehandhabt und einige werden über Firewalls eingerichtet.

3. Die kreative Reise in csdn im Jahr 2023

Ich habe dieses Jahr mehr als 200 Blog-Beiträge zu csdn geschrieben. Der Hauptzweck besteht darin, einige bei der Arbeit aufgetretene Probleme aufzuzeichnen. Viele davon sind nicht in Form hervorragender Blog-Beiträge geschrieben. Ich denke, das ist nicht wichtig. Die Hauptsache ist um das Verständnis und die Aufrechterhaltung der Programmierung zu vertiefen. Frische, denn Sie müssen sich immer noch auf diese Fähigkeit verlassen, um zu überleben und Ihren Lebensunterhalt zu verdienen. Wenn Sie einen guten Blog schreiben, sind Ihre Energie und Belohnungen nicht direkt proportional. In diesem Jahr wurden mehr als 100 Yuan, die Sie mit CSDN verdient haben, für die Verteilung roter Umschläge verwendet. Vielen Dank an alle für Ihre Aufmerksamkeit und Unterstützung. 

4. Ich freue mich auf 2024

        Wer zurückblickt, muss auch nach vorne blicken, wie können wir sonst vorankommen? 10 Jahre lang zu programmieren ist wie Leben und Tod. Ich habe 2014 meinen Abschluss gemacht und bin dieses Jahr seit 10 Jahren in dieser Branche tätig. Man kann sagen, dass es bei meinem ersten Abschluss die Blütezeit der Entwicklung der Internetbranche war, und dann Es ging den ganzen Weg bergab. Ich habe es miterlebt. Man kann sagen, dass der Prozess des Übergangs des heimischen Internets vom Wohlstand zum Niedergang so ist, dass das Internet jetzt tot ist, wie ein Teich stehenden Wassers, der keine Wellen mehr bilden kann. Der Firmenname Facebook ist zur Meta geworden. Unternehmen wie Baidu wissen den ganzen Tag nicht, was sie tun sollen. In den Augen der Eltern spielt Tencent nur kleine Spielchen, um Teenagern zu schaden. Alibaba ist nicht mehr das Alibaba, das es einmal war. Huawei ist es Ich prahle nur. Verdammtes Huawei. Jetzt veröffentlicht nur noch Douyin den ganzen Tag Junk-Videos, um Chinesen, die ursprünglich nicht wohlhabend waren, zum Kauf von Waren zu verführen und damit ein wenig Geld zu verdienen. Das Einzige, was von 2023 bis 2024 einige Fortschritte machen wird, ist die Schaffung einiger großer Modelle, die jedoch nicht mehr im Rahmen des Internets liegen. Man kann sagen, dass die aktuelle Phase eine Zeit des Chaos ist. Es gibt kein klares zukünftiges Entwicklungsszenario. Alle bisherigen IT-Unternehmen arbeiten an Fahrzeugen mit neuer Energie, und dann haben sie das Gefühl, dass sie keinen Nutzen haben. Sie dienen nur der Emissionsreduzierung . Dasselbe könnte jedoch in Zukunft auch für Fahrzeuge mit neuer Energie gelten. Die größte Quelle der Umweltverschmutzung ist Strahlung. Ich persönlich denke, dass Roboter die nächste Revolution sein könnten. Am besten wäre es, wenn niemand zur Arbeit gehen und sich von Robotern ernähren lassen müsste.

Supongo que te gusta

Origin blog.csdn.net/dongjing991/article/details/135408970
Recomendado
Clasificación