[學成在線]23-面試題總結

1. 詳細說說你的項目吧

從以下幾個方面進行項目介紹:

  1. 項目的背景,包括: 是自研還是外包、什么業務、服務的客戶群是誰、誰去運營等問題。
  2. 項目的業務流程
  3. 項目的功能模塊
  4. 項目的技術架構
  5. 個人工作職責
  6. 個人負責模塊的詳細說明,包括模塊的設計,所用到的技術,技術的實現方案等

例子:

  1. 我最近參與的項目是我們公司自研的專門針對成人職業技能教育的網絡課堂系統,網站提供了成人職業技能培訓的相關課程,如: 軟件開發培訓、職業資格證書培訓、成人學歷教育培訓等課程。
  2. 項目基于B2B2C的業務模式,培訓機構可以在平臺入駐、發布課程,我們公司作為運營方由專門的人員對發布的課程進行審核,審核通過后課程才可以發布成功,課程包括免費和收費兩種形式,對于免費課程普通用戶可以直接選課學習,對于收費課程在選課后需要支付成功才可以繼續學習。
  3. 本項目包括三個端: 用戶端(學生端)、機構端、運營端。核心模塊包括:內容管理、媒資管理、課程搜索、訂單支付、選課管理、認證授權等。
  4. 本項目采用前后端分離架構,后端采用SpringBoot、SpringCloud技術棧開發,數據庫使用了MySQL,還使用的Redis、消息隊列、分布式文件系統、Elasticsearch等中間件系統。
  5. 劃分的微服務包括:內容管理服務、媒資管理服務、搜索服務、訂單支付服務、學習中心服務、系統管理服務認證授權服務、網關服務、注冊中心服務、配置中心服務等。
  6. 我在這個項目中負責了內容管理、媒資管理、訂單支付模塊的設計與開發。
  7. 內容管理模塊,是對平臺上的課程進行管理,課程的相關信息比較多, 在數據庫設計了課程基本信息表、課程營銷表、課程計劃、課程師資表進行存儲,培訓機構要發布一門課程需要填寫課程基本信息、課程營銷信息、課程計劃信息、課程師資信息,填寫完畢后需要提交審核,由運營人員進行課程信息的審核,整個審核過程是程序自動審核加人工確認的方式,通常24小時審核完成。課程審核通過即可發布課程,課程的相關信息會聚合到課程發布表中,這里不僅要將課程信息寫到課程發布表還要將課程信息寫到索引庫、分布式文件系統中,所以這里存在分布式事務的問題,項目使用本地消息表加任務調度的方式去解決這里的分布式事務,保存數據的最終一致性。

2.Git沖突怎么處理

出現沖突的原因是因為本地文件的版本與遠程文件的版本不一致, 且同一行代碼內容不同時, Git工具就無法自動合并文件, 解決代碼沖突可以使用圖形化工具或者手動處理沖突, , 本質都是一樣的, 就是對沖突代碼進行人工取舍或修改, 圖形化工具比較方便, 處理完成后點擊apply進行應用就行了, 手動處理的話, 要自己提交暫存區并push文件

3.你在哪個分支開發

一般都是在獨立的開發分支進行開發, 開發完成后合并到主分支

4.maven的常用命令

mwn clean //清除target目錄中的生成結果

myn compile //編譯源代碼

mvn test //執行單元測試

mvn package //打包

myn install //打包并把打好的包保存到本地倉庫

mvn deploy //打包并把打好的包上傳到遠程倉庫

5.mavne依賴版本沖突怎么處理

maven依賴版本沖突一般是由于間接依賴導致一個jar包即有多個不同的版本,比如:A依賴了B的1.0版本,C依賴了B的2.0版本,項目依賴A和C從而間接依賴了B的1.0和2.0版本,此時B有兩個版本引入到了項目中,當存在版本沖突時可能會出現 ClassNotFoundException、NoSuchMethodError等錯誤。

處理版本沖突可以使用以下方法:

1、使用exclusions 排除依賴

比如: 我們只依賴B的1.0版本,此時可以在依賴C時排除對B的賴。

2、使用dependencyManagement鎖定版本號:

通常在父工程對依賴的版本統一管理。

比如: 我們只依賴B的1.0版本,此時可以在父工程中限定B的版本為1.0.

6.MySql常見的儲存引擎及區別

  1. InnoDB

支持事務

使用的鎖顆粒度默認為行級鎖, 可以支持更高的并發; 也支持表鎖

支持外鍵約束; 外鍵約束其實降低了表的查詢速度, 增加了表之間的耦合度

  1. MyISAM

不提供事務支持

只支持表級鎖

不支持外鍵

  1. memory

數據存儲在內存中

總結

MyISAM管理非事務表,提供高速存儲和檢索以及全文搜索能力,如果在應用中執行大量select操作,應該選擇MyISAM

InnDB用于事務處理,具有ACID事務支持等特性,如果在應用中執行大量insert和update操作,應該選擇InnoDB

7.mysql建表時要注意什么

MYSQL建表的經驗有很多,下邊列舉一些:

  1. 注意選擇存儲引擎,如果要支持事務需要選擇InnoDB:
  2. 注意字段類型的選擇,

對于日期類型: 如果要記錄時分秒建議使用datetime,只記錄年月日使用date類型,

對于字符類型的選擇,固定長度字段選擇char,不固定長度的字段選擇varchar,varchar比char節省空間但速度沒有char快;

對于內容介紹類的長廣文本字段使用text或longtext類型;

如果存儲圖片等二進制數據使用blob或longblob類型;

對金額字段建議使用DECIMAL;

對于數值類型的字段在確保取值范圍足夠的前提下盡量使用占用空間較小的類型,

  1. 主鍵字段建議使用自然主鍵,不要有業務意義,建議使用int unsigned類型,特殊場景使用bigint類型
  2. 如果要存儲text、blob字段建議單獨建一張表,使用外鍵關聯。
  3. 盡量不要定義外鍵,保證表的獨立性,可以存在外鍵意義的字段。
  4. 設置字段默認值,比如:狀態、創建時間等。
  5. 每個字段寫清楚注釋。
  6. 注意字段的約束,比如:非空、唯一、主鍵等

8.SpringBoot接口開發注解有哪些

@Controller 標記此類是一個控制器,可以返回視圖解析器指定的html頁面,通過@ResponseBody可以將結果返回json、xml數據。

@RestController 相當于@ResponseBody加 @Controller,實現rest接口開發,返回json數據,不能返回html頁面。

@RequestMapping定義接口地址,可以標記在類上也可以標記在方法上,支持http的post、put、get等方法

@PostMapping定義post接口,只能標記在方法上,用于添加記錄,復雜條件的查詢接口。@GetMapping定義get接口,只能標記在方法上,用于查詢接口的定義。

@PutMapping定義put接口,只能標記在方法上,用于修改接口的定義。

@DeleteMapping定義delete接口,只能標記在方法上,用于除接口的定義。

@RequestBody定義在方法上,用于將ison串轉成iava對象。

@PathVarible 接收請求路徑中占位符的值.

@ApiOperation swagger注解,對接口方法進行說明。

@Apiwagger注解,對接口類進行說明。

@Autowired 基于類型注入。

@Resour 基于名稱注入,如果基于名稱注入失敗轉為基于類型注入。

9.你項目的開發流程是什么

1、產品人員設計產品原型。

2、討論需求。

3、分模塊設計接口。

4、出接口文檔。

5、將接口文檔給到前端人員,前后端分離開發。

6、開發完畢進行測試。

7、測試完畢發布項目,由運維人員進行部署安裝。

10.Mybatis分頁插件的原理?

首先分頁參數放到ThreadLocal中,攔截執行的sql,根據數據庫類型添加對應的分頁語句重寫sql,例如:(select* from table where a) 轉換為 (select count(*) from table where a)和(select * from table where a limit ,)

計算出了total總條數、pageNum當前第幾頁、pagesize每頁大小和當前頁的數據,是否為首頁,是否為尾頁,總頁數等。

11.MyBatis的ResultType和ResultMap的區別?

ResultType:指定映射類型,只要查詢的字段名和類型的屬性名匹配可以自動映射。

ResutMap:自定義映射規則,當查詢的字段名和映射類型的屬性不匹配時可以通過ResultMap自定義映射規則, 也可以實現一對多、一對一映射。

12.樹型表的標記字段是什么? 如何查詢MySQL樹型表?

  1. 樹型表的標記字段是parentid即父結點的id。
  2. 查詢一個樹型表的方法:

1) 當層級固定時可以用表的自鏈接進行查詢。

2) 如果想靈活查詢每個層級可以使用mysql遞歸方法,使用with RECURSIVE 實現。

13.#{} 和 ${} 有什么區別?

#{}是標記一個占位符,可以防止sql注入。

${}用于在動態 sql中拼接字符串,可能導致sql注入。

14.系統如何處理異常?

我們自定義一個統一的異常處理器去捕獲并處理異常。

使用控制器增加注解@ControllerAdvice和異常處理注解@ExceptionHandler來實現。

1.處理自定義異常

程序在編寫代碼時根據校驗結果主動拋出自定義異常類對象,拋出異常時指定詳細的異常信息,異常處理器捕獲異常信息記錄異常日志并響應給用戶。

2.處理未知異常

接口執行過程中的一些運行時異常也會由異常處理器統一捕獲,記錄異常日志,統一響應給用戶500錯誤在異常處理器中還可以針對某個異常類型進行單獨處理。

15.請求參數的合法性校驗如何做?

使用基于ISR303的校驗框架實現,SpringBoot提供了JSR-303的支持,它就是spring-boot-starter-validation,它包括了很多校驗規則,只需要在模型類中通過注解指定校驗規則,在controller方法上開啟校驗。

16.什么情況下Spring事務會失效?

  1. 在方法中捕獲異常沒有拋出去
  2. 非事務方法調用事務方法
  3. 事務方法內部調用事務方法
  4. @Transactional標記的方法不是public
  5. 拋出的異常與rollbackFor指定的異常不匹配,默認rollbackFor指定的異常為RuntimeException
  6. 數據庫表不支持事務,比如MySQL的MyISAM
  7. Spring的傳播行為導致事務失效,
  • 比如: ROPAGATION NEVER、PROPAGATION NOT SUPPORTED
  • PROPAGATION REQUIRED- 支持當前事務,如果當前沒有事務,就新建一個事務。這是最常見的選擇,
  • PROPAGATION SUPPORTS-支持當前事務,如果當前沒有事務,就以非事務方式執行。
  • PROPAGATION MANDATORY--支持當前事務,如果當前沒有事務,就拋出異常。
  • PROPAGATION REQUIRES NEW - 新建事務,如果當前存在事務,把當前事務掛起。
  • PROPAGATION_NOT_SUPPORTED-以非事務方式執行操作,如果當前存在事務,就把當前事務掛

起。

  • PROPAGATION NEVER -以非事務方式執行,如果當前存在事務,則拋出異常。
  • PROPAGATION NESTED-如果當前存在事務,則在嵌套事務內執行。如果當前沒有事務,則與PROPAGATION REOUIRED類似的操作。

17.斷點續傳怎么實現的?

我們是基于分塊上傳的模式實現斷點續傳的需求,當文件上傳一部分斷網后前邊已經上傳過的不再上傳。

  1. 前端對文件分塊。
  2. 前端使用多線程一塊一塊上傳,上傳前給服務端發一個消息校驗該分塊是否上傳,如果已上傳則不再上傳。
  3. 等所有分塊上傳完畢,服務端合并所有分塊,校驗文件的完整性。

因為分塊全部上傳到了服務器,服務器將所有分塊按順序進行合并,就是寫每個分塊文件內容按順序依次寫入一個文件中。使用字節流去讀寫文件。

  1. 前端給服務傳了一個md5值,服務端合并文件后計算合并后文件的md5是否和前端傳的一樣,如果一樣則說文件完整,如果不一樣說明可能由于網絡丟包導致文件不完整,這時上傳失敗需要重新上傳。

18.分塊文件清理問題?

上傳一個文件進行分塊上傳,上傳一半不傳了,之前上傳到minio的分塊文件要清理嗎?怎么做的?

1、在數據庫中有一張文件表記錄minio中存儲的文件信息。

2、文件開始上傳時會寫入文件表,狀態為上傳中,上傳完成會更新狀態為上傳完成。

3、當一個文件傳了一半不再上傳了說明該文件沒有上傳完成,會有定時任務去查詢文件表中的記錄,如果文件未上傳完成則刪除minio中沒有上傳成功的文件目錄。

19.xxl-job的工作原理是什么?xxl-job是什么怎么工作?

XXL-J0B分布式任務調度服務由調用中心和執行器組成,調用中心負責按任務調度策略向執行器下發任務,執行器負責接收任務執行任務。

1)首先部罷并啟動xxl-job調度中心。(一個java工程)

2)首先在微服務添加xx1-job依賴,在微服務中配置執行器

3)啟動微服務,執行器向調度中心上報自己。

4)在微服務中寫一個任務方法并用xxl-job的注解去標記執行任務的方法名稱。5)在調度中心配置任務調度策略,調度策略就是每隔多長時間執行還是在每天或每月的固定時間去執行,比如每天0點執行,或每隔1小時執行一次等。

6)在調度中心啟動任務。

7)調度中心根據任務調度策略,到達時間就開始下發任務給執行器。

8)執行器收到任務就開始執行任務。

20.如何保證任務不重復執行?

1)調度中心按分片廣播的方式去下發任務

2)執行器收到作業分片廣播的參數:分片總數和分片序號,計算 任務id 除以 分片總數得到一個余數,如果余數等于分片序號這時就去執行這個任務,這里保證了不同的執行器執行不同的任務。

3)配置調度過期策略為"忽略”,避免同一個執行器多次重復執行同一個任務

4)配置任務阻塞處理策略為“丟棄后續調度”,注意:丟棄也沒事下一次調度就又可以執行了

5)另外還要保證任務處理的冪等性,執行過的任務可以打一個狀態標記已完成,下次再調度執行該任務判斷該任務已完成就不再執行

21.任務冪等性如何保證?

它描述了一次和多次請求某一個資源對于資源本身應該具有同樣的結果。冪等性是為了解決重復提交問題,比如:惡意刷單,重復支付等。解決冪等性常用的方案:

1)數據庫約束,比如:唯一索引,主鍵。同一個主鍵不可能兩次都插入成功。

2)樂觀鎖,常用于數據庫,更新數據時根據樂觀鎖狀態去更新。

3)唯一序列號,請求前生成唯一的序列號,攜帶序列號去請求,執行時在redis記錄該序列號表示以該序列號的請求執行過了,如果相同的序列號再次來執行說明是重復執行。這里我們在數據庫視頻處理表中添加處理狀態字段,視頻處理完成更新狀態為完成,執行視頻處理前判斷狀態是否完成,如果完成則不再處理。

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

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

相關文章

C++編程語言:標準庫:標準庫概觀(Bjarne Stroustrup)

第30章 標準庫概觀(Standard-Library Overview) 目錄 30.1 引言 30.1.1 標準庫設施 30.1.2 設計約束 30.1.3 描述風格 30.2 頭文件 30.3 語言支持 30.3.1 對initializer_list的支持 30.3.2 對范圍for的支持 30.4 異常處理 30.4.1 異常 30.4.1…

spring5.x講解介紹

Spring 5.x 是 Spring Framework 的重要版本升級,全面擁抱現代 Java 技術棧,其核心改進涵蓋響應式編程、Java 8支持、性能優化及開發模式創新。以下從特性、架構和應用場景三個維度詳細解析: 一、核心特性與架構改進 Java 8 全面支持 Spring …

【C++進階】第2課—多態

文章目錄 1. 認識多態2. 多態的定義和實現2.1 構成多態的必要條件2.2 虛函數2.3 虛函數的重寫或覆蓋2.4 協變(了解)2.5 析構函數的重寫2.6 override和final關鍵字2.7 重載、重寫、隱藏對比 3. 純虛函數和抽象類4. 多態原理4.1 虛函數表指針4.2 多態的實現4.3 靜態綁定和動態綁定…

Dive into LVGL (1) —— How LVGL works from top to down

0.briefly speaking 由于工作原因,最近開始接觸到一些圖形圖像處理相關的知識,在這個過程中逐漸接觸到了LVGL。作為一個開源的圖形庫,LVGL可以高效地為MCU、MPU等嵌入式設備構建美觀的UI界面。我的手頭也正好有一塊集成了Vivante 2.5D GPU的…

【HarmonyOS 5】鴻蒙中進度條的使用詳解

【HarmonyOS 5】鴻蒙中進度條的使用詳解 一、HarmonyOS中Progress進度條的類型 HarmonyOS的ArkUI框架為開發者提供了多種類型的進度條,每種類型都有其獨特的樣式,以滿足不同的設計需求。以下是幾種常見的進度條類型: 線性進度條(…

OpenHarmony 開源鴻蒙南向開發——linux下使用make交叉編譯第三方庫——gmp

準備工作 請依照這篇文章搭建環境 OpenHarmony 開源鴻蒙南向開發——linux下使用make交叉編譯第三方庫——環境配置_openharmony交叉編譯-CSDN博客 下載 wget https://gmplib.org/download/gmp/gmp-6.3.0.tar.xz 解壓 tar -xf gmp-6.3.0.tar.xzcd gmp-6.3.0/ 環境變量 e…

量化交易策略的運行

? 什么是“策略的運行”? 在量化交易系統中,“策略的運行”并不一定意味著“每個策略對應一個線程”,但在大多數實際實現中,確實會使用線程、任務、協程或進程等形式來實現每個策略的獨立調度與執行。 “運行”意味著策略開始生…

開平機:從原理到實踐的全面技術剖析

一、開平機核心模塊技術解析 1. 校平輥系的力學建模與輥型設計 校平機精度核心在于輥系設計,需通過彈塑性力學模型計算變形量。典型校平輥配置參數: 輥徑比:校平輥直徑(D)與板材厚度(t)需滿足…

2、實驗室測控系統 - /自動化與控制組件/lab-monitoring-system

76個工業組件庫示例匯總 實驗室測控系統開發組件 這是一個專為實驗室設備數據采集與分析設計的可視化測控系統組件。采用工業風格界面設計,提供了豐富的動態數據展示與分析功能,可應用于各類實驗室環境中的設備監控和數據處理。 功能特點 多設備管理…

在 Kotlin 中什么是委托屬性,簡要說說其使用場景和原理

在 Kotlin 中,屬性委托和類委托是兩種通過 by 關鍵字實現的強大特性,它們通過“委托”機制將行為或實現邏輯委托給其他對象,從而實現代碼的復用和解耦。 1 屬性委托 定義: 允許把屬性的 get 和 set 方法的具體實現委托給另一個對…

AI星智協腦:智能驅動的高效協作管理平臺全解讀

前言 想象一下:早上剛開電腦,十幾條未讀消息如機關槍般掃射而來,各路任務像隕石雨一樣砸向你,會議排得比熱播劇還密集,文檔版本堪比宮斗劇劇情反轉,同事圍著你轉圈追KPI,活脫脫一場《職場大逃殺…

Web 架構之數據讀寫分離

文章目錄 一、引言二、數據讀寫分離原理2.1 基本概念2.2 工作流程 三、數據讀寫分離的實現方式3.1 基于中間件實現3.2 應用程序層面實現 四、常見問題及解決方法4.1 數據一致性問題4.2 從數據庫負載均衡問題4.3 主從復制故障問題 五、思維導圖六、總結 一、引言 在 Web應用的開…

【軟件設計師:數據結構】1.數據結構基礎(一)

一 線性表 1.線性表定義 線性表是n個元素的有限序列,通常記為(a1,a2,…,an)。 特點: 存在惟一的表頭和表尾。除了表頭外,表中的每一個元素均只有惟一的直接前驅。除了表尾外,表中的每一個元素均只有惟一的直接后繼。2.線性表的存儲結構 (1)順序存儲 是用一組地址連續…

實踐005-Gitlab CICD全項目整合

文章目錄 環境準備環境準備集成Kubernetes Gitlab CICD項目整合項目整合整合設計 后端Java項目部署后端Java項目靜態檢查后端Java項目鏡像構建創建Java項目部署文件創建完整流水線 前端webui項目部署前端webui項目鏡像構建創建webui項目部署文件創建完整流水線 構建父子類型流水…

鴻蒙開發:dialog庫做了一些優化

前言 本文基于Api13 dialog庫是我去年5月份開發了一個便捷彈窗庫,主打一個使用簡單,一經推出,在dialog領域下載量穩居在前,可以說是非常受歡迎的;但是,之前的版本仍然有著可優化的空間,比如彈窗…

Windows 10 無法啟動或黑屏的修復指南(適用于更新失敗或磁盤故障)

Windows 10 無法啟動或黑屏的修復指南(適用于更新失敗或磁盤故障) 當 Windows 10 突然無法啟動(黑屏、無限重啟、更新失敗后斷電等情況),很可能是由于啟動引導程序損壞或系統映像異常(如系統磁盤出現壞道&…

MCP開發入門

MCP開發入門 官方文檔: https://modelcontextprotocol.io/introduction 入門教程: https://github.com/liaokongVFX/MCP-Chinese-Getting-Started-Guide 本文源代碼:https://github.com/youngqqcn/mcp-server-demo 什么是MCP? 模型上下文協議&#xff…

PX4開始之旅(二)通過自定義 MAVLink 消息與 QGroundControl (QGC) 通信

核心知識點:通過自定義 MAVLink 消息與 QGroundControl (QGC) 通信 1. 通俗易懂的解釋 想象一下,MAVLink 就像是無人機(飛控)和地面站(QGroundControl)之間約定好的一種“語言”。這種語言有很多標準的“…

AI視頻智能分析網關打造社區/工廠/校園/倉庫智慧消防實現精準化安全管控

一、背景 隨著社區、商業場所對消防安全要求日益提升,傳統消防系統已難以滿足智能化、精細化管理需求。智能分析網關融合物聯網與人工智能技術,具備強大的數據處理與分析能力,可全面升級消防系統。將其融入消防系統各層級,搭建智…

深度學習基礎--目標檢測常見算法簡介(R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN、SSD、YOLO)

博主簡介:努力學習的22級本科生一枚 🌟?;探索AI算法,C,go語言的世界;在迷茫中尋找光芒?🌸? 博客主頁:羊小豬~~-CSDN博客 內容簡介:常見目標檢測算法簡介?&#x1f…