實習文檔背誦

實習內容:

1.定時任務與數據補全:基于 XXL-JOB 實現分布式定時任務調度,補全近半年歷史操作日志數據,有效解決因網絡異常導致的數據缺失問題。

業務場景;集團的4a日志半年內沒有同步,這邊需要把日志數據同步到集團上

首先先評估每天的數提量,因為我配照的是開發環境,所有的據量不全,讓運維的同事宣詢一下每天的數據量是多少?差不多是3.6w日志,那么據總量軟是180*3.6=650w號數據知道數據的大概范圍認后效開始確認調用天數,循環執行、最終根據實際情況,每15天循環一次,然后添加xx1-job注解。從job平臺項用,補全數據樸全過程中斷怎么辦,可以通過Redis記錄處理日期,重啟后跳過,同時處理期間增加道暫間隔,減少數據庫壓大

合井數據庫文件

 //將操作日志數據同步到4A平臺上,根據選取的日期,往前推15天,@XxlJob("syncLog4AJobNew")public void JobHandlerNew() throws IOException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date curTime = null;Date endTime = null;try {curTime = sdf.parse("2024-12-10 00:00:00");endTime = sdf.parse("2025-05-08 22:00:00");} catch (ParseException e) {throw new RuntimeException(e);}// 每次間隔的時間,單位mslong interval = 24 * 60 * 60 * 1000;int num = 1;while (curTime.before(endTime)) {Date nextTime = new Date(curTime.getTime() + interval);log.info("syncLog4AJobNew-4A日志同步任務:"+nextTime);String curFileName = null;BufferedWriter bufferedWriter = null;try {// 讀取需要發的日志數據//List<OperateLogDto> logs = opLogService.queryOperateLog4ANew();List<OperateLogDto> logs = opLogService.queryOperateLog4ANew(nextTime);//填加時間范圍log.info("syncLog4AJobNew-4A待發送日志查詢成功,獲取日志信息數為:" + logs.size());if (CollectionUtils.isEmpty(logs)) {XxlJobHelper.log("無需要同步數據.");curTime = nextTime;//修改continue;}// 寫入文件流int length = 0;int startId = 0, endId = 0;for (OperateLogDto logDto : logs) {if (StringUtils.isBlank(logDto.getUserCode()))continue;if (curFileName == null)curFileName = logConfig.getResourceCode() + "_" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".xml";if (bufferedWriter == null) {bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(ftpConfig.getLocalPath() + curFileName), "UTF-8"));bufferedWriter.write("<?xml version='1.0' encoding='UTF-8' ?><ROOT>");}if (startId == 0)startId = logDto.getOperateLogId();String generateLog = log4AUtil.generateLog(logDto.getToken(), logDto.getOperateLogId().toString(), logDto.getDoneDate(),logDto.getUserCode(), logDto.getOperateTypeName(), logDto.getOperateTypeId(),logDto.getOperateResult(), logDto.getModuleId(), logDto.getModuleName(),logDto.getIp(), logDto.getOperateName());bufferedWriter.write(new String(generateLog.getBytes("UTF-8"), "UTF-8"));endId = logDto.getOperateLogId();// 每個文件控制在5M到10M之間length += generateLog.getBytes(StandardCharsets.UTF_8).length;//當文件長度大于5則傳送數據if (length > fileLength) {bufferedWriter.write("</ROOT>");bufferedWriter.flush();// 發送本地文件到4Aboolean ss = this.sendSftp(curFileName);if (ss) {opLogService.updateLog4A(startId, endId);log.info("syncLog4AJobNew-4A日志同步任務成功,上傳SFTP成功,傳輸數據范圍為:" + startId + "-" + endId);} else {XxlJobHelper.log("4A日志同步任務失敗。上傳SFTP失敗。");XxlJobHelper.handleFail();return;}// 初始化寫入curFileName = null;bufferedWriter = null;length = 0;startId = 0;}}//最后收尾,存在數據沒有發送if (bufferedWriter != null) {bufferedWriter.write("</ROOT>");bufferedWriter.flush();// 發送本地文件到4Aboolean ss = this.sendSftp(curFileName);if (ss) {opLogService.updateLog4A(startId, endId);log.info("syncLog4AJobNew-4A日志同步任務成功,上傳SFTP成功,傳輸數據范圍為:" + startId + "-" + endId);} else {XxlJobHelper.log("4A日志同步任務失敗。上傳SFTP失敗。");XxlJobHelper.handleFail();}}XxlJobHelper.handleSuccess("4A日志同步任務成功");} catch (Exception e) {log.error("4A日志同步任務失敗。" + e);XxlJobHelper.log("4A日志同步任務失敗。" + e.getMessage());XxlJobHelper.handleFail();} finally {if (bufferedWriter != null)bufferedWriter.close();}curTime = nextTime;log.info("======SyncLog4AJob.JobHandlerNew()," + num + "," + sdf.format(curTime));num++;}}

2.數據安全與合規控制:通過 SpringAOP 自動脫敏敏感字段,結合 SpringSecurily+ 數據權限注解 實現細粒度訪問控制,確保數據隔離與合規性。

aop切面

package com.asiainfo.osm.aop;import com.asiainfo.osm.common.result.ResultObject;
import com.asiainfo.osm.common.result.ResultPage;
import com.asiainfo.osm.common.user.dto.UserDTO;
import com.asiainfo.osm.system.dto.UserExtDTO;
import com.asiainfo.osm.system.dto.UserInfoDTO;
import com.asiainfo.osm.utils.DesensitizationUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;import java.util.List;
import java.util.stream.Collectors;/*** 脫敏切面** @author renhx* @createDate 2025/5/9 19:29**/
@Aspect
@Component
public class SensitiveDataAspect {@Around("execution(* com.asiainfo.osm.system.web.UserController.getUsers(..)) || " +"execution(* com.asiainfo.osm.system.web.UserController.getUserInfo(Integer)) ||" +"execution(* com.asiainfo.osm.system.web.UserController.queryUserInfo(Integer))")public Object around(ProceedingJoinPoint joinPoint) throws Throwable {Object result = joinPoint.proceed();return processSensitiveData(result);}private Object processSensitiveData(Object obj) {if (obj == null) {return null;}// 人員信息下拉列表出參if (obj instanceof UserInfoDTO) {UserInfoDTO user = (UserInfoDTO) obj;user.setUserName(DesensitizationUtils.chineseName(user.getUserName()));user.setEmail(DesensitizationUtils.email(user.getEmail()));return user;}// 用戶詳情出參if (obj instanceof UserDTO) {UserDTO user = (UserDTO) obj;user.setUserName(DesensitizationUtils.chineseName(user.getUserName()));user.setPhone(DesensitizationUtils.mobilePhone(user.getPhone()));user.setEmail(DesensitizationUtils.email(user.getEmail()));return user;}// 用戶列表出參if (obj instanceof UserExtDTO) {UserExtDTO user = (UserExtDTO) obj;user.setUserName(DesensitizationUtils.chineseName(user.getUserName()));user.setPhone(DesensitizationUtils.mobilePhone(user.getPhone()));user.setEmail(DesensitizationUtils.email(user.getEmail()));return user;}if (obj instanceof List) {List<?> list = (List<?>) obj;return list.stream().map(this::processSensitiveData).collect(Collectors.toList());}if (obj instanceof ResultPage) {ResultPage<?> resultPage = (ResultPage<?>) obj;List<?> pageData = resultPage.getPageData().stream().map(this::processSensitiveData).collect(Collectors.toList());return ResultPage.instance(resultPage.getTotal(),pageData);}if (obj instanceof ResultObject) {ResultObject<?> resultObject = (ResultObject<?>) obj;Object data = processSensitiveData(resultObject.getData());ResultObject<Object> resultObjectNew = new ResultObject<>();resultObjectNew.setCode(resultObject.getCode());resultObjectNew.setName(resultObject.getName());resultObjectNew.setMessage(resultObject.getMessage());resultObjectNew.setData(data);return resultObjectNew;}return obj;}
}

脫敏規則

package com.asiainfo.osm.utils;import org.apache.commons.lang.StringUtils;/*** 脫敏工具** @author renhx* @createDate 2025/5/10 8:19**/
public class DesensitizationUtils {// 姓名脫敏 (兩字: 張* | 三字: 張*三 | 多字: 張**...三)public static String chineseName(String fullName) {if (StringUtils.isBlank(fullName)) {return "";}int length = fullName.length();if (length == 1) {return fullName; // 單字名不做處理}if (length == 2) {// 兩字名: 張*return fullName.charAt(0) + "*";}if (length == 3) {// 三字名: 張*三return fullName.charAt(0) + "*" + fullName.charAt(2);}// 多字名: 張**...三return fullName.charAt(0) +StringUtils.repeat("*", length - 2) +fullName.charAt(length - 1);}// 手機號脫敏 (保留前3后4)public static String mobilePhone(String phone) {if (StringUtils.isBlank(phone)) {return "";}return phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");}// 郵箱脫敏 (保留@前3位和域名)public static String email(String email) {if (StringUtils.isBlank(email)) {return "";}int index = email.indexOf("@");if (index <= 1) {return email;}String head = "";if (index <= 3) {head = email.substring(0,index);} else {head = email.substring(0,3);}return head + "*********" + email.substring(index);}
}

越權規則

3.數據庫性能優化:定位高負載場景下的慢 SOL 問題,通過重構索引和優化子查詢,將關鍵 SOL 執行時間從 703、秒降至毫秒級,顯著提升系統響應速度。

4.JVM 性能調優: 利用 ArthaS+MAT 分析定位內存問題,優化年輕代內存配置,使 YGC耗時從 20s 降至 3s,任務執行效率提升 12%,系統卡頓減少33%。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/92134.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/92134.shtml
英文地址,請注明出處:http://en.pswp.cn/web/92134.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

分布式CAP定理

CAP 定理在一個分布式系統中&#xff0c;以下三個特性不可能同時完全滿足&#xff0c;最多只能滿足其中兩個&#xff1a;C&#xff08;Consistency&#xff0c;一致性&#xff09;&#xff1a;所有節點在同一時間看到的數據是完全一致的&#xff08;即更新操作成功并返回后&…

PHP-Casbin:現代化 PHP 應用的權限管理引擎

在當今復雜的Web應用中&#xff0c;精細化的權限管理是保障系統安全的關鍵環節。PHP-Casbin 作為Casbin生態的PHP實現&#xff0c;憑借其靈活的模型支持和強大的擴展能力&#xff0c;已成為PHP開發者實現訪問控制的首選工具。 超越傳統權限模型 PHP-Casbin 基于PERM&#xff…

FastDeploy2.0:環境變量的說明

一、執行# 設置日志目錄 export FD_LOG_DIR/workspace/models/log# 指定使用的 GPU 設備 export CUDA_VISIBLE_DEVICES0,1,2,3# 創建日志目錄&#xff08;如果不存在&#xff09; mkdir -p "$FD_LOG_DIR"# 定義日志文件路徑 LOG_FILE"$FD_LOG_DIR/fastdeploy_se…

C語言:指針(1-2)

5. 指針運算指針的基本運算有三種&#xff0c;分別是&#xff1a;指針-整數指針-指針指針的關系運算5.1 指針運算在上面&#xff0c;我們知道&#xff0c;數組在內存中是連續存放的&#xff0c;只要知道第一個元素的地址&#xff0c;順藤摸瓜就能找到后面的所有元素。那么&…

【多模態】DPO學習筆記

DPO學習筆記1 原理1.0 名詞1.1 preference model1.2 RLHF1.3 從RLHF到DPOA.解的最優形式B. DPO下參數估計C. DPO下梯度更新D. DPO訓練的穩定性2 源代碼2.1 數據集構成2.2 計算log prob2.3 DPO loss1 原理 1.0 名詞 preference model&#xff1a;對人類偏好進行建模&#xff0…

2025最新、UI媲美豆包、DeepSeek等AI大廠的AIGC系統 - IMYAI源碼部署教程

IMYAI 系統部署與使用手冊 一、系統演示 &#x1f539; 快速體驗 前端演示地址&#xff1a;https://super.imyaigc.com后臺演示地址&#xff1a;https://super.imyaigc.com/settings &#x1f539; 技術架構 前端&#xff1a;Vite Vue3 NaiveUI TailwindCSS Plyr后端&…

【關于Java的反射】

在 Java 編程中&#xff0c;反射&#xff08;Reflection&#xff09; 是一個非常強大的工具&#xff0c;它允許你在運行時動態地獲取類的信息、創建對象、調用方法和訪問字段。雖然反射功能強大&#xff0c;但它也有一些局限性和性能開銷&#xff0c;因此需要謹慎使用。一、什么…

Gitee推出“移動軟件工廠“解決方案 解決嵌入式與涉密場景研發困局

Gitee推出"移動軟件工廠"解決方案 破解嵌入式與涉密場景研發困局 隨著數字化轉型浪潮的推進&#xff0c;軟件開發正面臨著前所未有的復雜環境挑戰。特別是在嵌入式系統、FPGA開發以及涉密信息系統等特殊場景下&#xff0c;研發團隊往往需要在高安全要求與有限網絡環境…

低功耗16*8位四線串行8*4按鍵陣矩LED驅動專用電路

概述&#xff1a;PC0340是占空比可調的LED顯示控制驅動電路。由16根段輸出、8根位輸出、數字接口、數據鎖存器、顯示存儲器、鍵掃描電路及相關控制電路組成了一個高可靠性的單片機外圍LED驅動電路。串行數據通過4線串行接口輸入到PC0340&#xff0c;采用LQFP44L的封裝形式。本產…

通過自定義注解加aop切面實現權限控制

前言&#xff1a;自定義注解&#xff0c;通過aop切面前置通知&#xff0c;對請求接口進行權限控制1&#xff0c;創建枚舉類package org.springblade.sample.annotationCommon;import lombok.AllArgsConstructor; import lombok.Getter;import java.util.Arrays; import java.ut…

IDS知識點

在網絡安全工程師、系統運維工程師等崗位的面試中&#xff0c;??IDS&#xff08;Intrusion Detection System&#xff0c;入侵檢測系統&#xff09;?? 是高頻考點&#xff0c;尤其是對網絡安全防護、安全監控類崗位。以下是IDS的核心考點和必須掌握的知識點&#xff0c;按優…

Adobe Analytics 數據分析平臺|全渠道客戶行為分析與體驗優化

Adobe Analytics 是業界領先的數據分析平臺&#xff0c;幫助企業實時追蹤客戶行為&#xff0c;整合多渠道數據&#xff0c;通過強大的分析與可視化工具深入分析客戶旅程&#xff0c;優化數字體驗。結合 Adobe Experience Cloud&#xff0c;Adobe Analytics 成為推動數字化增長和…

【輪播圖】H5端輪播圖、橫向滑動、劃屏效果實現方案——Vue3+CSS position/CSS scroller

文章目錄定位實現滑屏效果前置知識CSS: touch-action屬性CSS: transform屬性觸摸事件forEach回調占位符準備階段實現移動效果實現跟手效果觸摸結束優化完整代碼滾動實現滑屏效果前置知識CSS: scroll-snap-type屬性準備階段實現滑動效果實現吸附效果滾動條隱藏存在問題完整代碼s…

忘記了WordPress管理員密碼的找回方法

WordPress管理員密碼找回方法 如果您忘記了WordPress管理員密碼&#xff0c;可以通過以下幾種方法找回或重置&#xff1a; 方法1&#xff1a;通過電子郵件重置(最簡單) 訪問您的WordPress登錄頁面(通常是wodepress.com/wp-admin或wodepress.com/wp-login.php) 點擊”忘記密…

RAFT:讓語言模型更聰明地用文檔答題

RAFT&#xff1a;讓語言模型更聰明地用文檔答題 作者注&#xff1a; 本文旨在面向零基礎讀者介紹 UC Berkeley 提出的 RAFT&#xff08;Retrieval-Augmented Fine-Tuning&#xff09;方法。它是一種訓練語言模型的新方式&#xff0c;讓模型更好地利用“外部知識”——比如文檔、…

【緊急預警】NVIDIA Triton推理服務器漏洞鏈可導致RCE!

2025 年 8 月 4 日消息&#xff0c;NVIDIA 旗下的 Triton 推理服務器&#xff08;一款支持 Windows 和 Linux 系統、用于大規模運行 AI 模型的開源平臺&#xff09;被曝出一系列安全漏洞。這些漏洞一旦被利用&#xff0c;攻擊者有可能完全接管存在漏洞的服務器。 Wiz 安全公司…

基于深度學習的醫學圖像分析:使用PixelCNN實現醫學圖像生成

前言 醫學圖像分析是計算機視覺領域中的一個重要應用&#xff0c;特別是在醫學圖像生成任務中&#xff0c;深度學習技術已經取得了顯著的進展。醫學圖像生成是指通過深度學習模型生成醫學圖像&#xff0c;這對于醫學研究、疾病模擬和圖像增強等任務具有重要意義。近年來&#x…

React ahooks——副作用類hooks之useDebounceFn

useDebounceFn 是 ahooks 提供的用于函數防抖的 Hook&#xff0c;它可以確保一個函數在連續觸發時只執行最后一次。一、基本用法import { useDebounceFn } from ahooks; import { Button } from antd;const Demo () > {const { run } useDebounceFn(() > {console.log(…

【機器學習深度學習】 知識蒸餾

目錄 前言 一、什么是知識蒸餾&#xff1f; 二、知識蒸餾的核心意義 2.1 降低算力與成本 2.2 加速推理與邊緣部署 2.3 推動行業應用落地 2.4 技術自主可控 三、知識蒸餾的本質&#xff1a;大模型的知識傳承 四、知識蒸餾的“四重紅利” 五、DeepSeek的知識蒸餾實踐 …

Python高級編程與實踐:Python高級數據結構與編程技巧

高級數據結構&#xff1a;掌握Python中的高效編程技巧 學習目標 通過本課程&#xff0c;學員將深入了解Python中的高級數據結構&#xff0c;包括列表推導式、字典推導式、集合推導式和生成器表達式。學員將學習如何利用這些結構來編寫更簡潔、更高效的代碼&#xff0c;并了解它…