自主項目面試點總結

1、許苑–OJ判題系統

技術棧:Spring Boot+Spring Cloud Alibaba+Redis+Mybatis+MQ+Docker
項目地址: https://github.com/xuyuan-upward/xyoj-backend-microservice

1.1、項目介紹:

一個基于微服務的OJ系統,具備能夠根據管理員預設的題目用例對用戶提交的代碼進行執行和評測的能力。此外,還自主實現了代碼沙箱,可作為獨立服務供其他開發者調用。

1.2、主要工作:

1、為?持多種代碼沙箱的創建,使?靜態??模式實現對代碼沙箱調?的擴展,提高了系統可擴展性和可維護性。

1.1、通過靜態工廠模式實現了遠程代碼沙箱或者本地代碼沙箱調用
在這里插入圖片描述

2、采用了策略模式封裝判題邏輯,以解決不同判題模式的差異,提高系統的靈活性。

2.1、根據獲取到的代碼沙箱返回的配置信息以及輸出結果進行使用Java策略算法判斷還是其他語言判斷代碼的正確性
在這里插入圖片描述
2.2、根據不同語言選擇算判題策略在這里插入圖片描述

3、 使? Java Runtime類的exec?法編譯和執?Java代碼,通過Process類獲取結果。

3.1、Runtime類進行命令的創建以及命令執行:
在這里插入圖片描述
3.2、Process獲取結果 :在這里插入圖片描述在這里插入圖片描述

4、為確保宿主機安全,利?Docker Java庫創建隔離的容器環境執行代碼。

4.1、引入docker庫依賴

   <dependency><groupId>com.github.docker-java</groupId><artifactId>docker-java</artifactId><version>3.3.0</version></dependency>

4.2、獲取Docker客戶端實例

DockerClient dockerClient = DockerClientBuilder.getInstance("unix:///var/run/docker.sock").build();

通過DockerClientBuilder創建一個Docker客戶端實例,用于與Docker守護進程通信。
unix:///var/run/docker.sock是Docker守護進程的Unix套接字路徑。

4.3、拉取Docker鏡像

if (!isPullImag) {PullImageCmd pullImageCmd = dockerClient.pullImageCmd(Image);PullImageResultCallback pullImageResultCallback = new PullImageResultCallback(){@Overridepublic void onNext(PullResponseItem item) {System.out.println("下載鏡像" + item.getStatus());super.onNext(item);}};pullImageCmd.exec(pullImageResultCallback).awaitCompletion();isPullImag = true;
}

如果鏡像尚未拉取,則通過pullImageCmd拉取指定的Docker鏡像。
PullImageResultCallback用于監聽鏡像拉取的進度和狀態。
awaitCompletion()確保鏡像拉取完成后才繼續執行后續代碼。

4.4、創建并啟動Docker容器

CreateContainerCmd containerCmd = dockerClient.createContainerCmd(Image);
HostConfig hostConfig = new HostConfig();
hostConfig.withMemory(150 * 1000 * 1000L); // 限制內存為150MB
hostConfig.withMemorySwap(0L); // 禁用交換內存
hostConfig.withCpuCount(1L); // 限制CPU核數為1
hostConfig.setBinds(new Bind(userCodeParentPath, new Volume("/app"))); // 綁定主機目錄到容器
CreateContainerResponse createContainerResponse = containerCmd.withHostConfig(hostConfig).withNetworkDisabled(true) // 禁用網絡.withReadonlyRootfs(true) // 只讀文件系統.withAttachStdin(true) // 綁定標準輸入.withAttachStderr(true) // 綁定標準錯誤.withAttachStdout(true) // 綁定標準輸出.withTty(true) // 啟用TTY.exec();
String containerId = createContainerResponse.getId();
dockerClient.startContainerCmd(containerId).exec();

創建容器時,配置了資源限制(內存、CPU)和安全性(禁用網絡、只讀文件系統)。
setBinds將主機目錄綁定到容器內的/app目錄,用于存放用戶代碼。
containerCmd.exec() 創建 Docker 容器,并通過createContainerResponse獲取容器ID,然后通過dockerClient.startContainerCmd(containerId).exec(); 啟動容器。

4.5、在容器中執行用戶代碼

String[] cmdArray = ArrayUtil.append(new String[]{"java", "-cp", "/app", "Main"}, inputArgsArray);
ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(containerId).withCmd(cmdArray) // 設置執行的命令.withAttachStderr(true) // 綁定標準錯誤.withAttachStdin(true) // 綁定標準輸入.withAttachStdout(true) // 綁定標準輸出.exec();

構造執行命令,例如java -cp /app Main <inputArgs>

通過execCreateCmd在容器中創建執行命令,并獲取命令的ID。

4.6、 捕獲執行結果

ExecStartResultCallback execStartResultCallback = new ExecStartResultCallback() {@Overridepublic void onNext(Frame frame) {StreamType streamType = frame.getStreamType();if (StreamType.STDERR.equals(streamType)) {errorMessage[0] = new String(frame.getPayload()); // 捕獲錯誤輸出} else {message[0] = new String(frame.getPayload()); // 捕獲標準輸出}}
};
dockerClient.execStartCmd(execId).exec(execStartResultCallback).awaitCompletion(TIME_OUT, TimeUnit.SECONDS);

通過ExecStartResultCallback 監聽命令執行的輸出:

  • 如果是 STDERR,表示發生錯誤,捕獲錯誤信息。
  • 如果是 STDOUT,捕獲程序正常輸出。

4.7、監控內存使用

StatsCmd statsCmd = dockerClient.statsCmd(containerId);
ResultCallback<Statistics> statisticsResultCallback = statsCmd.exec(new ResultCallback<Statistics>() {@Overridepublic void onNext(Statistics statistics) {maxMemory[0] = Math.max(statistics.getMemoryStats().getUsage(), maxMemory[0]); // 獲取內存使用峰值}
});

通過statsCmd監控容器的內存使用情況,記錄內存使用的峰值。

4.8、刪除容器

dockerClient.stopContainerCmd(containerId).exec();
dockerClient.removeContainerCmd(containerId).exec();

執行完成后,停止并刪除容器,釋放資源。

5、為減少判題與服務模塊之間的耦合,通過使?Rabbitmq技術進?解耦。

5.1、原因
原因:由于判題操作是一個比較重的服務(需要調用代碼沙箱)然后判題服務監聽到該隊列的消息并進行判題處理,并且異步更改題目的判題狀態。改造后的業務流程:用戶提交題目時,由題目服務發送一條消息到隊列
這樣做的好處!

  • 對用戶來說:不需要在前端同步等待,優化了體驗。
  • 對系統來說:解耦了題目服務和判題服務,兩者不需要相互調用。
    使判題服務繁忙或宕機,題目服務依然可以發送判題任務到隊列,等判題服務恢復后繼續處理

5.2、過程
1、首先進行Rabbitmq初始化交換機與隊列根據路由鍵進行綁定,并創建成Spring的一個 bean 對象
在這里插入圖片描述
2、在提交題目那里調用生產者進行發送消息
在這里插入圖片描述
生產者發送消息:
在這里插入圖片描述
進行消費者監聽對應的隊列,然后調用判題方法:
在這里插入圖片描述

6、為保護服務同時簡化客戶端調用,項目通過Spring Cloud Gateway聚合路由服務。

在第7點下面的gateway

7、微服務體現,以及nacos配置中心。

7.1、引入對應的SpringBoot SpringCloud SpringCloud Alibaba版本依賴管理

 <dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2021.0.5</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

7.2、引入nacos依賴

        <!--nacos 配置和注冊管理--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>

7.3、進行引入SpringCloud的gateway依賴,以及微服務下knife4j的聚合

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><!--用來實現knife4j文檔聚合--><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-gateway-spring-boot-starter</artifactId><version>4.3.0</version></dependency>

7.4、路由配置規則的設定
在這里插入圖片描述

2、許苑刷題閣

技術棧:Spring Boot+ElasticSearch+Mybatis+Nacos+Hotkey+SaToken+Sentinel
項目地址: https://github.com/xuyuan-upward/mianshiyuan

2.1、項目介紹:

一個在線刷題平臺,平臺?持管理員創建題庫、批量管理題目,用戶可以通過高效
的搜索引擎進?題目檢索,在線做題。項目核?圍繞性能優化、數據一致性和高并發場景進?
設計, 確保用戶的刷題體驗流暢且穩定。

2.2、主要工作:

1、為實現用戶刷題記錄功能,基于Redis BitMap+Redisson實現用戶年度刷題記錄的統

計,相?數據庫存儲節約?百倍空間。
1.1、使用Bitmap 位圖,是一種使用位(bit)來表示數據的 緊湊 數據結構。每個位可以存儲兩個值:0 或 1,常用于表示某種狀態或標志.。

優點:
1.節約內存空間:因為每個位僅占用1位內存,特別在大規模存儲二值數據(如布爾值)時,節約效果明顯。
2.查詢效率高:通過位運算(如與、或、非等),可以快速判斷某個元素是否存在。這使得查找操作非常高效,時間復雜度為 O(1)。

代碼(簽到):

// 獲取 Redis 的 BitMap// RBisSet是Redisson庫中的一種數據類型,它對應Redis中的位圖RBitSet signInBitSet = redissonClient.getBitSet(key);// 獲取當前日期是一年中的第幾天,作為偏移量(從 1 開始計數)int offset = date.getDayOfYear();// 查詢當天有沒有簽到if (!signInBitSet.get(offset)) {// 如果當前未簽到,則設置signInBitSet.set(offset, true);}

代碼(獲取某年某個用戶的簽到信息):

   // 獲取 Redis 的 BitSetRBitSet signInBitSet = redissonClient.getBitSet(key);// 加載 BitSet 到Java內存中,避免后續讀取時發送多次請求BitSet bitSet = signInBitSet.asBitSet();// 統計簽到的日期List<Integer> dayList = new ArrayList<>();// 從索引 0 開始查找下一個被設置為 1 的位int index = bitSet.nextSetBit(0);while (index >= 0) {dayList.add(index);// 繼續查找下一個被設置為 1 的位index = bitSet.nextSetBit(index + 1);}
2、為提高題目搜索性能,采?Elasticsearch替代MySQL進?模糊查詢,并通過定時任務,實現增量同步,保持數據一致性。

2.1、引入依賴

<!-- elasticsearch-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

并通過注入elasticsearchRestTemplate即可進行Elasticsearch的操作

@Resource
private ElasticsearchRestTemplate elasticsearchRestTemplate;

2.2、集成類似操作數據庫的 Dao 實體類一樣
在這里插入圖片描述
2.3、繼承ElasticsearchRepository,此時可以類似mybatis那樣操作 es 了

public interface    QuestionEsDao extends ElasticsearchRepository<QuestionEsDTO, Long> {List<QuestionEsDTO> findByUserId(Long userId);

2.4、并通過實現CommandLineRunner接口,項目啟動時,實現MySQL全量同步到 ES。

2.5、開啟定時任務,每分鐘進行對5分中之前修改的數據進行增量數據同步
在這里插入圖片描述

3、為防止高并發下瞬時流量擊垮數據庫,接?Hotkey緩存熱?題目,提高性能和安全性。

3.1、工作流程:
JD HotKey 是京東提供了一個輕量級通用的熱 key 探測中間件。

首先在 dashboard 中配置了熱點 key的規則,并部署 worker 用于統計 key 的訪問數量,在后端項目中引入jd client 上報熱點 key 的訪問給 worke進行統計訪問數量,一旦達到指定的熱點 key 規定閾值,worker 會推送熱點 key 到client jar包的后端,后端進行caffeine本地緩存。

主要代碼:

 String key = "bank_detail_" + id;// 如果是熱點keyif (JdHotKeyStore.isHotKey(key)) {// 從本地緩存中獲取緩存值Object cacheQuestionBankVO = JdHotKeyStore.get(key);if (cacheQuestionBankVO != null) {return ResultUtils.success((QuestionBankVO) cacheQuestionBankVO);}}// 查詢數據庫QuestionBankVO questionBankVO = questionBankService.getQuestionBankVO(questionBank, request);// 設置本地緩存 如果是熱點key了才會設置對應的緩存 否則不做任何處理JdHotKeyStore.smartSet(key, questionBankVO);

分析:基于isHotKey該方法會返回該 key 是否是熱 key,如果是返回 true,如果不是返回 false,并且會將 key 上報到探測集群進行數量計算。該方法通常用于判斷只需要判斷 key 是否熱、不需要緩存 value 的場景,如刷子用戶、接口訪問頻率等。并基于get方法獲取緩存,熱key返回緩存,不是熱key返回null。沒有緩存通過此smartSet方法給熱 key 賦值 value,如果是熱 key,該方法才會賦值,非熱 key,什么也不做。

本地緩存淘汰策略:

  1. 基于大小的淘汰
    最大緩存大小:緩存可以配置最大條目數。一旦條目數超過限制,(LRU)最少使用次數的條目將被淘汰。
  2. 基于時間的淘汰
    過期:緩存條目可以在一定時間后過期。這確保了過時、未使用的緩存條目會被自動移除。例如,可以將條目的過期時間配置為 10 分鐘。
  3. 基于引用的淘汰
    弱引用或軟引用:此策略基于內存壓力淘汰條目,當 JVM 需要更多內存時,會移除不再被強引用的緩存條目。

黑馬Redis教學圖例:在這里插入圖片描述

3.2、該JD Hotkey框架組成部分:

1、etcd集群
etcd作為一個高性能的配置中心,可以以極小的資源占用,提供高效的監聽訂閱服務。主要用于存放key規則配置,各worker的ip地址等。

2、client端jar包
就是在服務中添加的引用jar,引入后,就可以以便捷的方式去判斷某key是否熱key。同時,該jar完成了key上報、監聽etcd里key的rule變化、以及拉取worker的ip、對熱key進行本地caffeine緩存等。

3、worker端集群
worker端是一個獨立部署的Java程序,啟動后會連接etcd,并定期上報自己的ip信息,供client端獲取地址并進行長連接。之后,主要就是對各個client發來的待測key進行累加計算,當達到etcd里設定的rule閾值后,將熱key推送到各個client。

4、dashboard控制臺
控制臺是一個帶可視化界面的Java程序,也是連接到etcd,之后在控制臺設置各個APP的key規則,譬如2秒出現20次算熱key。然后當worker探測出來熱key后,會將key發往etcd,dashboard也會監聽熱key信息,進行入庫保存記錄。同時,dashboard也可以手工添加、刪除熱key,供各個client端監聽。

4、為保護系統,通過Sentinel限流和熔斷保護題庫接口,異常時返回緩存數據。

4.1、什么是熔斷?什么是限流?

  1. 熔斷:熔斷是指當調用的下游服務出現故障時,切斷對該服務的調用,防止系統出現連鎖故障。
    工作原理:
    • 健康檢查:熔斷器監控系統會檢查與其他服務的連接情況,當調用某個服務頻繁失敗時,它會進入 打開 狀態。
    • 打開狀態:當熔斷器處于打開狀態時,所有對該服務的請求會切斷,不會繼續向故障的服務發送請求,從而避免進一步加重服務負擔。
    • 恢復狀態:熔斷器會在一段時間后進入 半開 狀態,允許少量請求通過,如果這些請求成功,熔斷器會重新恢復到 關閉 狀態,恢復正常調用。如果失敗,熔斷器會重新進入 打開 狀態,繼續拒絕請求。
    • 關閉狀態:在沒有問題時,熔斷器保持關閉狀態,正常傳遞請求。
  2. 限流:限流是指限制單位時間內對某個資源或服務的訪問次數。
  3. 總結:熔斷與限流可以同時使用,熔斷器用于處理服務不可用的情況,而限流用于控制請求頻率,保證系統的穩定運行。

4.2、項目示例運用:
Sentinel控制臺部署
在這里插入圖片描述
接入客戶端用于和Sentinel進行通訊,引入依賴(SpringCloud Alibaba已經整合)

<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-sentinel -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>2021.0.5.0</version>
</dependency>

通過注解對listQuestionBankVOByPage資源進行保護定義:
在這里插入圖片描述

 @SentinelResource(value = "listQuestionBankVOByPage",blockHandler = "handleBlockHandler",fallback = "handleFallback")public BaseResponse<Page<QuestionBankVO>> listQuestionBankVOByPage(@RequestBody QuestionBankQueryRequest questionBankQueryRequest,HttpServletRequest request)

(1)value = "listQuestionBankVOByPage"
定義資源名稱,Sentinel 會監控 listQuestionBankVOByPage 方法的調用情況。因為題庫是經常訪問的,故將它定義為保護資源
可以在 Sentinel 控制臺 配置 限流、熔斷、降級規則。
(2)blockHandler = "handleBlockHandler"
當觸發限流或熔斷時,會執行 handleBlockHandler 方法,而不是直接拋出異常。
這個 handleBlockHandler 方法需要和原方法的參數一致,并且返回類型相同。
該方法不能和 listQuestionBankVOByPage 方法定義在不同的類中(除非是 static 方法)。
(3)fallback = "handleFallback"
當方法發生異常(例如超時、空指針等)時,會執行 handleFallback 方法,提供降級處理邏輯。
handleFallback 方法也需要和 listQuestionBankVOByPage 方法的參數列表一致,返回值類型相同。

5、為防止不同客?端賬號共享,通過UserAgent識別設備,Sa-Token檢測同端登錄沖突。

在這里插入圖片描述

這行代碼的作用是 用戶登錄 并將當前用戶與指定的設備進行綁定,實現同一用戶在不同設備上的登錄互斥。

StpUtil.login(user.getId(), DeviceUtils.getRequestDevice(request));

這行代碼的作用是 將用戶的登錄狀態存儲到當前會話中,方便后續通過會話獲取和使用用戶信息。

StpUtil.getSession().set(USER_LOGIN_STATE, user);
6、為防止內容盜取,設計分級反爬?策略:使?Redis統計訪問題目頻率,超限時?動報警

和封禁用戶。
getQuestionVOById次數進行限制。10拋出訪問頻繁,20次踢下線。

3、許苑園–尋找共同興趣的伙伴

技術棧:Spring Boot+Redis+Mybatis+WebSocket+ChatGPT+Vue3
項目地址: https://github.com/xuyuan-upward/xuyuan-matching

3.1、項目介紹:

一個實時的社交聊天平臺,致力于為用戶尋找共同興趣的學習伙伴。基于目的
實現了伙伴交流聊天室、按共同興趣愛好標簽檢索伙伴、推薦相似伙伴、組隊,聊天,
ChatGPT問答等功能。

3.2、主要工作:

1、為解決用戶和群聊之間消息傳輸的延時性和滯后性,利?WebSocket全雙?通信技術,實現了低延遲消息傳遞,保證了用戶聊天之間的及時性。
2、為解決集群間登錄態同步問題,使?Redis實現分布式Session,保證登錄態同步。
3、為解決多用戶出現的多線程問題,使?Redisson分布式鎖保證線程安全。
4、為解決?次訪問系統主?加載過慢的問題,使? Spring Scheduler 定時任務來實現緩存預熱,并通過分布式鎖保證多機部署時定時任務不會重復執?。
5、為提高智能化交流,通過接?ChatGPT接?技術,實現了智能化回答?成。

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

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

相關文章

12.推薦系統的前沿技術

接下來我們將學習推薦系統的前沿技術。推薦系統是一個快速發展的領域&#xff0c;許多新技術和新方法不斷涌現&#xff0c;進一步提升了推薦系統的性能和效果。在這一課中&#xff0c;我們將介紹以下內容&#xff1a; 圖神經網絡&#xff08;GNN&#xff09;在推薦系統中的應用…

【py】python安裝教程(Windows系統,python3.13.2版本為例)

1.下載地址 官網&#xff1a;https://www.python.org/ 官網下載地址&#xff1a;https://www.python.org/downloads/ 2.64版本或者32位選擇 【Stable Releases】&#xff1a;穩定發布版本&#xff0c;指的是已經測試過的版本&#xff0c;相對穩定。 【Pre-releases】&#…

CEF132 編譯指南 MacOS 篇 - depot_tools 安裝與配置 (四)

1. 引言 在 CEF132&#xff08;Chromium Embedded Framework&#xff09;的編譯過程中&#xff0c;depot_tools 扮演著舉足輕重的角色。這套由 Chromium 項目精心打造的腳本和工具集&#xff0c;專門用于獲取、管理和更新 Chromium 及其相關項目&#xff08;包括 CEF&#xff…

1312:【例3.4】昆蟲繁殖

1312&#xff1a;【例3.4】昆蟲繁殖 時間限制: 1000 ms 內存限制: 65536 KB 提交數:60386 通過數: 29787 【題目描述】 科學家在熱帶森林中發現了一種特殊的昆蟲&#xff0c;這種昆蟲的繁殖能力很強。每對成蟲過xx個月產yy對卵&#xff0c;每對卵要過兩個月長成成蟲…

Linux防火墻設置

目錄 Ubuntu防火墻&#xff08;UFW&#xff09;常用設置 1. 查看防火墻狀態 2. 開啟/關閉防火墻 3. 管理端口 4. 管理IP地址 5. 服務管理 CentOS防火墻&#xff08;firewalld&#xff09;常用設置 1. 查看防火墻狀態 2. 啟動/關閉防火墻 3. 設置開機啟動 4. 管理端口…

Git 日志查看與版本回溯

引言 在軟件開發的漫漫長路中&#xff0c;代碼就如同我們搭建軟件大廈的基石&#xff0c;而 Git 則是一位默默守護并精心管理這些基石的 “管家”。它不僅能記錄代碼的每一次變動&#xff0c;還提供了強大的日志查看和版本回溯功能&#xff0c;這些功能就像是給開發者配備了一…

針對Prompt優化的深入分析

一、針對Prompt優化的深入分析 1. 結構化設計 技術原理&#xff1a; 大語言模型&#xff08;LLMs&#xff09;本質是基于概率的序列生成器&#xff0c;結構化模板通過顯式定義輸出框架&#xff08;如角色、段落數、連接詞&#xff09;&#xff0c;利用模型的模式匹配能力&…

fps動作系統9:動畫音頻

文章目錄 動畫音頻創建音頻藍圖cue音量乘數 音效衰減衰減空間 綁定到動畫動畫序列軌道 動畫音頻 創建音頻藍圖 cue 音量乘數 音量大小 音效衰減 空間音效 衰減 空間 綁定到動畫 動畫序列 軌道 橫著的方向是有不同的軌道的&#xff0c;陰影的就是。

TensorRT【詳解】

文章目錄 1、 1、 參考&#xff1a; 1、nVidia TensorRT pytorch Docker 下載&#xff1a;https://catalog.ngc.nvidia.com/orgs/nvidia/containers/pytorch/tags 2、nVidia TensorRT pytorch Docker 版本講解&#xff1a;https://docs.nvidia.com/deeplearning/frameworks/py…

解決QTimer報“Timers cannot be started from another thread“錯誤

今天在Qt編程時&#xff0c;將QTimer在子線程里執行start()函數&#xff0c;遇到“Timers cannot be started from another thread”問題&#xff0c;使用了如下AI工具&#xff0c;進行查詢&#xff1a; ? ? 提示詞A&#xff1a;“C QTimer 如何跨線程” ? ? 提示詞B&#…

【AI知識點】苦澀的教訓 The Bitter Lesson by Rich Sutton(2019)

【AI論文解讀】【AI知識點】【AI小項目】【AI戰略思考】【AI日記】【讀書與思考】【AI應用】 “The Bitter Lesson” 是由 Richard Sutton&#xff08;強化學習領域的先驅之一&#xff09;提出的一個概念&#xff0c;指的是機器學習領域在長期發展過程中&#xff0c;尤其是在強…

單片機上SPI和IIC的區別

SPI&#xff08;Serial Peripheral Interface&#xff09;和IC&#xff08;Inter-Integrated Circuit&#xff09;是兩種常用的嵌入式外設通信協議&#xff0c;它們各有優缺點&#xff0c;適用于不同的場景。以下是它們的詳細對比&#xff1a; — 1. 基本概念 SPI&#xff0…

SQL Server安裝流程

SQL Server 2022在安全性、可用性和性能方面不斷創新&#xff0c;是現在最支持Azure的SQL Server版本。 SQL Server發展史 SQL Server的歷史始于1989年&#xff0c;當時是由微軟與Sybase合作的產品&#xff0c;旨在為Windows NT操作系統提供一個高性能的數據庫解決方案。隨著…

VSOMEIP ROUTING應用和CLIENT應用之間交互的消息

#define VSOMEIP_ASSIGN_CLIENT 0x00 // client應用請求分配client_id #define VSOMEIP_ASSIGN_CLIENT_ACK 0x01 // routing應用返回分配的client_id #define VSOMEIP_REGISTER_APPLICATION 0x02 // client應用注冊someip應用 #…

jvm 線程監控調試

文章目錄 前言一、使用JDK工具轉儲線程文件(如jstack)1. 找到Java進程的PID:2. 使用jstack生成線程轉儲文件:3.驗證生成的線程轉儲文件:二、分析文件1.使用在線工具進行分析上傳thread-dump文件,等待解析完成2.查看分析結果總結前言 提示:使用jdk自帶工具轉儲線程監控文…

從零開始認識大語言模型(LLM)

“AI小美好——聚焦科技、商業、職場。前沿資訊&#xff0c;實用干貨&#xff0c;邂逅更美好的自己&#xff01;” 在當今數字化時代&#xff0c;語言不僅是人類交流的工具&#xff0c;更是信息傳遞的核心。隨著人工智能技術的飛速發展&#xff0c;大語言模型逐漸走進了我們的…

安裝OpenJDK21(linux、macos)

文章目錄 安裝OpenJDK21java21linux下安裝配置mac下安裝 安裝OpenJDK21 java21 封神&#xff01;Java 21正式發布了&#xff0c;迎來了史詩級新特性&#xff0c;堪稱版本最強&#xff01;&#xff01;&#xff01; 視頻鏈接&#xff1a;https://www.bilibili.com/video/BV1E8…

idea插件開發,如何獲取idea設置的系統語言

手打不易&#xff0c;如果轉摘&#xff0c;請注明出處&#xff01; 注明原文&#xff1a;https://zhangxiaofan.blog.csdn.net/article/details/145578160 版本要求 大于 2024.3 錯誤用法 網上有的說使用&#xff1a;UIUtil com.intellij.util.ui.UIUtil 代碼示例&#xf…

Linux | 系統調用

文章目錄 Linux | 系統調用open 系統調用功能頭文件和函數原型參數解釋返回值示例代碼 其他常用系統調用read 系統調用write 系統調用close 系統調用lseek 系統調用stat 系統調用 Linux | 系統調用 前言&#xff1a;在Linux系統中&#xff0c;系統調用是用戶空間程序與內核進行…

郭羽沖IOI2024參賽總結

非常榮幸能代表中國參加第 36 36 36 屆國際信息學奧林匹克競賽&#xff08; I O I 2024 IOI2024 IOI2024&#xff09;。感謝 C C F CCF CCF 為我們提供競賽的平臺&#xff0c;感謝隨行的老師們一路上為我們提供的幫助與支持。 在每場比賽的前一個晚上&#xff0c;領隊、副領…