第1章 項目背景(學成在線),項目介紹,環境搭建

1.項目背景

1.1 在線教育市場環境

以下內容摘自https://report.iresearch.cn/content/2021/01/358854.shtml

在線教育行業是一個有著極強的廣度和深度的行業,從校內到校外;從早幼教到職業培訓;從教育工具到全信息化平臺等等。

2020年的新冠疫情外生沖擊,讓在線教育再次站在聚光燈下。疫情下教育領域獲融資最多,而其中在線教育最受資本青睞。據艾瑞咨詢統計,2020年教育行業累計融資1164億元,其中在線教育融資金額1034億元,占比89%。與此同時,在行業處于困境的情況下,會加速洗牌,資源向好的企業集中。2020年資源向頭部集中趨勢明顯,中小型機構生存更加困難。2020年資本向在線教育行業累計輸送的1034億元中,80%都流向了頭部的5家公司。

To C市場:面向個人

  • 據艾瑞咨詢統計核算,2020年中國在線教育行業市場規模2573億元,過去4年的CAGR達34.5%,其中低幼及素質教育賽道、K12學科培訓賽道在線化進程加快是在線教育市場快速增長的最主要貢獻因素。疫情影響下,低幼及素質教育領域的在線化范圍持續縱深,職業教育領域的在線化進程也在不斷加速,新的供給和需求不斷產生。但同時,2020年疫情外生沖擊加快了2020年的在線教育進程,將會透支一部分2021年的增速,艾瑞預計2021年在線教育行業同比增速將回落到20%左右。
    在這里插入圖片描述

To B 市場:面向企業

  • 疫情也加速了整個教育產業鏈的進化,to B機構快速成長起來,扮演著賦能者的角色,課程內容、招生、師訓、直播系統、管理系統等產品及服務大量涌現。隨著云服務發展成熟以及疫情對直播課需求的催化,大量提供直播授課系統等PaaS/SaaS服務的機構迅速成長起來,成為各種會展上的主力軍。
    在這里插入圖片描述

1.2 IT培訓市場規模

中國IT人才供給報告(https://new.qq.com/rain/a/20210831A01JI600
IT人才總體供不應求,高中低人才分別占比8%、41%、51%,詳見下圖:
在這里插入圖片描述

IT服務是貫穿IT應用系統全生命周期的各項服務的統稱,下圖是IT服務產品圖譜,本項目屬于IT培訓產業。
在這里插入圖片描述

下圖是IT培訓市場規模:
在這里插入圖片描述

1.3 學成在線項目背景

學成在線項目是本公司自研的一個專門針對成人職業技能教育的網絡課堂系統,網站提供了成人職業技能培訓的相關課程,如:軟件開發培訓、職業資格證書培訓、成人學歷教育培訓等課程。項目基于B2B2C的業務模式,培訓機構可以在平臺入駐、發布課程,運營人員對發布的課程進行審核,審核通過后課程才可以發布成功,課程包括免費和收費兩種形式,對于免費課程可以直接選課學習,對于收費課程在選課后需要支付成功才可以繼續學習。

什么是B2B2C?

B2B2C是一種電子商務類型的網絡購物商業模式,B是Business的簡稱,C是Consumer的簡稱,第一個B指的是商品或服務的供應商,第二個B指的是從事電子商務的企業,C則是表示消費者。

B2B的定義:企業跟企業之間的電子商務運作方式。
B2C的定義:企業跟消費者之間的電子商務運作方式。

2.項目介紹

下邊分別從業務和技術兩個方式介紹項目。

2.1 項目業務介紹

本項目包括了用戶端、機構端、運營端。

核心模塊包括:內容管理、媒資管理、課程搜索、訂單支付、選課管理、認證授權等。

下圖是項目的功能模塊圖:
在這里插入圖片描述

下邊介紹業務流程:

  • 1)課程編輯與發布流程如下:
    在這里插入圖片描述

  • 2)課程發布后學生登錄平臺進行選課、在線學習

    • 免費課程可直接學習,收費課程需要下單購買。
    • 學生選課流程如下:在這里插入圖片描述

2.2 項目技術架構

本項目采用前后端分離架構,后端采用SpringBoot、SpringCloud技術棧開發,數據庫使用了MySQL,還使用的Redis、消息隊列、分布式文件系統、Elasticsearch等中間件系統。

劃分的微服務包括:內容管理服務、媒資管理服務、搜索服務、訂單支付服務、 學習中心服務、系統管理服務、認證授權服務、網關服務、注冊中心服務、配置中心服務等。

下圖是項目的技術架構圖:
在這里插入圖片描述

各層職責說明如下:

名稱功能描述
用戶層用戶層描述了本系統所支持的用戶類型包括:pc用戶、app用戶、h5用戶。pc用戶通過瀏覽器訪問系統、app用戶通過android、ios手機訪問系統,H5用戶通過h5頁面訪問系統。
CDNCDN全稱Content Delivery Network,即內容分發網絡,本系統所有靜態資源全部通過CDN加速來提高訪問速度。系統靜態資源包括:html頁面、js文件、css文件、image圖片、pdf和ppt及doc教學文檔、video視頻等。
負載均衡系統的CDN層、UI層、服務層及數據層均設置了負載均衡服務,上圖僅在UI層前邊標注了負載均衡。 每一層的負載均衡會根據系統的需求來確定負載均衡器的類型,系統支持4層負載均衡+7層負載均衡結合的方式,4層負載均衡是指在網絡傳輸層進行流程轉發,根據IP和端口進行轉發,7層負載均衡完成HTTP協議負載均衡及反向代理的功能,根據url進行請求轉發。
UI層UI層描述了系統向pc用戶、app用戶、h5用戶提供的產品界面。根據系統功能模塊特點確定了UI層包括如下產品界面類型: 1)面向pc用戶的門戶系統、學習中心系統、教學管理系統、系統管理中心。 2)面向h5用戶的門戶系統、學習中心系統。 3)面向app用戶的門戶系統、學習中心系統。
微服務層微服務層將系統服務分類三類:業務服務、基礎服務、第三方代理服務。 業務服務:主要為學成在線核心業務提供服務,并與數據層進行交互獲得數據。 基礎服務:主要管理學成在線系統運行所需的配置、日志、任務調度、短信等系統級別的服務。 第三方代理服務:系統接入第三方服務完成業務的對接,例如認證、支付、視頻點播/直播、用戶認證和授權。
數據層數據層描述了系統的數據存儲的內容類型,關系性數據庫:持久化的業務數據使用MySQL。 消息隊列:存儲系統服務間通信的消息,本身提供消息存取服務,與微服務層的系統服務連接。 索引庫:存儲課程信息的索引信息,本身提供索引維護及搜索的服務,與微服務層的系統服務連接。 緩存:作為系統的緩存服務,作為微服務的緩存數據便于查詢。 文件存儲:提供系統靜態資源文件的分布式存儲服務,文件存儲服務器作為CDN服務器的數據來源,CDN上的靜態資源將最終在文件存儲服務器上保存多份。

流程說明

  1. 用戶可以通過pc、手機等客戶端訪問系統進行在線學習。
  2. 系統應用CDN技術,對一些圖片、CSS、視頻等資源從CDN調度訪問。
  3. 所有的請求全部經過負載均衡器。
  4. 對于PC、H5等客戶端請求,首先請求UI層,渲染用戶界面。
  5. 客戶端UI請求服務層獲取進行具體的業務操作。
  6. 服務層將數據持久化到數據庫。

2.3 項目技術棧

學成在線按照技術分層的基礎上,需要對主要層次使用具體的技術作說明。下面是學成在線技術棧結構圖。

在這里插入圖片描述

2.4 項目演示

下邊在測試環境演示系統的核心業務流程,本項目主要包括三類用戶角色:學生、教學機構的老師、平臺運營人員,核心業務流程包括課程發布流程、選課學習流程。

課程發布流程:

  1. 教學機構的老師登錄教學管理平臺,編輯課程信息,發布自己的課程。
  2. 平臺運營人員登錄運營平臺審核課程、視頻等信息,審核通過后課程方可發布。

流程圖如下:
在這里插入圖片描述

課程發布后學生登錄平臺進行選課、在線學習。
免費課程可直接學習,收費課程需要下單購買。

學生選課學習流程如下:
在這里插入圖片描述

2.5 面試

詳細說說你的項目吧

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

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

一個例子:

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

3.環境搭建

3.1 安裝開發工具

項目基于JDK1.8環境開發,使用Mavne構建項目工程,首先安裝開發工具,安裝及配置步驟參考:學成在線項目開發環境配置。

學完第一章要求JDK、IDEA、Maven、Git、MySQL環境安裝完成。

提示:如果虛擬機環境沒有很快安裝成功可先將MySQL數據庫安裝在本機,因為第二章的內容剛開始就要使用MySQL數據庫。

MySQL8下載地址:https://dev.mysql.com/downloads/

3.2 Git環境

3.2.1 拉取代碼

本項目使用Git進行版本控制,在gogs上創建一個個人使用的git倉庫:http://192.168.101.65:10880/xuecheng-plus-group402/xuecheng-plus-project.git,如果gogs安裝有問題也可自行選擇一個公網的Git倉庫,比如:gitee、github,注冊自己的賬號并創建倉庫。

使用git拉取遠程倉庫。

打開IDEA,從版本控制創建工程。
在這里插入圖片描述

輸入倉庫地址,并選擇工程路徑。
在這里插入圖片描述

創建成功:
在這里插入圖片描述

添加.gitignore文件,編輯內容如下:

說明:因為是要用git管理,有很多的文件不需要提交到遠程倉庫,所以配置忽略的文件。

Java
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**
!**/src/test/**### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
logs/### VS Code ###
.vscode/

提交代碼到git倉庫。
在這里插入圖片描述

執行push:
在這里插入圖片描述

如果是首次向該git倉庫提交代碼需要輸入賬號和密碼:
在這里插入圖片描述

可以輸入默認的賬號和密碼:gogs/gogs
如果賬號密碼輸入錯誤報異常:Incorrect username or password (access token)
在這里插入圖片描述

如果沒有權限訪問此倉庫則報403錯誤:
在這里插入圖片描述

此時就需要在倉庫成員管理界面將賬號添加到此倉庫即可。
如果忘記密碼,此時可以先修改gogs中的密碼,再修改windows憑據的密碼,
在這里插入圖片描述

在此界面中找到遠程倉庫的記錄,修改密碼。
如果在windows憑據中找不到指定記錄可以設置IDEA不記錄密碼

在這里插入圖片描述

3.2.2 創建開發分支

通常不會在主分支進行開發,本項目在dev開發分支進行開發,下邊創建開發分支。
新建一個分支,點擊IDEA右下角的分支標識:

在這里插入圖片描述

在這里插入圖片描述

輸入分支名稱:這里演示每天創建一個分支
在這里插入圖片描述

點擊:Create
創建成功,右下角已經顯示了dev分支
在這里插入圖片描述

打開Git Log:
在這里插入圖片描述
可以切換分支:查看每天分支的代碼。
在這里插入圖片描述

當前只是本地有分支,遠程沒有分支。

在這里插入圖片描述

下邊將dev分支提交到遠程倉庫:
在這里插入圖片描述

在這里插入圖片描述

push成功,查看遠程git倉庫界面顯示了dev分支:
在這里插入圖片描述

接下來我們就在dev分支進行開發,開發完成后將合并到主分支。
要求:學生在練習每天老師布置的作業前都創建一個新分支進行。

3.3 基礎工程搭建

3.3.1 工程結構關系

學成在線使用 Maven 來進行項目的管理和構建。整個項目分為三大類工程:父工程、基礎工程 和 微服務工程。
在這里插入圖片描述

每一種類的工程都有不同的作用,下面是對其功能進行說明:

  • 父工程

    • 對依賴包的版本進行管理
    • 本身為Pom工程,對子工程進行聚合管理
  • 基礎工程

    • 繼承父類工程
    • 提供基礎類庫
    • 提供工具類庫
  • 微服務工程

    • 分別從業務、技術方面劃分模塊,每個模塊構建為一個微服務。
    • 每個微服務工程依賴基礎工程,間接繼承父工程。
    • 包括:內容管理服務、媒資管理服務、搜索服務、訂單支付服務等。

3.3.2 構建父工程

父工程的職責是對依賴包的版本進行管理,本小節創建父工程分兩步,第一創建父工程,第二在pom.xml編輯依賴管理。

1、首先創建父工程

為了對代碼更好的進行權限管理,這里我們單獨創建父工程。

使用idea打開工程目錄,進入工程結構界面。

點擊File–>Project Structure:
在這里插入圖片描述

進入Project Structure,首先檢查jdk是否配置正確,并進行配置。
在這里插入圖片描述

進入Modules界面,新建模塊
在這里插入圖片描述

進入新建模塊界面,選擇Spring Initializr,填寫模塊的信息。xuecheng-plus-parent
注意:這里Server URL默認是start.spring.io,如果連接不上可換為start.aliyun.com。
在這里插入圖片描述

創建成功,刪除多余文件

在這里插入圖片描述

選擇要刪除的文件,進行刪除
在這里插入圖片描述

刪除成功
在這里插入圖片描述

到此父工程創建完成。

2、依賴管理定義
下邊開始編輯xuecheng-plus-parent父工程的依賴管理 。

父工程中沒有代碼,不用去依賴其它的包,它的作用是限定其它子工程依賴包的版本號,即在dependencyManagement 中去編輯即可。

1)確定父工程為一個pom工程,在pom.xml中添加如下內容:

<packaging>pom</packaging>

2)編輯依賴的包的版本號、打包插件等。
pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.xuecheng</groupId><artifactId>xuecheng-plus-parent</artifactId><version>0.0.1-SNAPSHOT</version><name>xuecheng-plus-parent</name><description>xuecheng-plus-parent</description><packaging>pom</packaging><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.3.7.RELEASE</spring-boot.version><spring-cloud.version>Hoxton.SR9</spring-cloud.version><org.mapstruct.version>1.3.1.Final</org.mapstruct.version><spring-cloud-alibaba.version>2.2.6.RELEASE</spring-cloud-alibaba.version><org.projectlombok.version>1.18.8</org.projectlombok.version><javax.servlet-api.version>4.0.1</javax.servlet-api.version><fastjson.version>1.2.83</fastjson.version><druid-spring-boot-starter.version>1.2.8</druid-spring-boot-starter.version><mysql-connector-java.version>8.0.30</mysql-connector-java.version><mybatis-plus-boot-starter.version>3.4.1</mybatis-plus-boot-starter.version><commons-lang.version>2.6</commons-lang.version><minio.version>8.4.3</minio.version><xxl-job-core.version>2.3.1</xxl-job-core.version><swagger-annotations.version>1.5.20</swagger-annotations.version><commons-lang3.version>3.10</commons-lang3.version><okhttp.version>4.8.1</okhttp.version><swagger-spring-boot-starter.version>1.9.0.RELEASE</swagger-spring-boot-starter.version><elasticsearch.version>7.12.1</elasticsearch.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</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><!-- lombok,簡化類的構建--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${org.projectlombok.version}</version></dependency><!-- mapstruct 代碼生成器,簡化java bean之間的映射 --><dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct-jdk8</artifactId><version>${org.mapstruct.version}</version></dependency><dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct-processor</artifactId><version>${org.mapstruct.version}</version></dependency><dependency><groupId>io.swagger</groupId><artifactId>swagger-annotations</artifactId><version>${swagger-annotations.version}</version></dependency><!-- Servlet 容器管理 --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>${javax.servlet-api.version}</version><scope>provided</scope></dependency><!-- fastjson ,json解析工具 --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></dependency><!-- druid 連接池管理 --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>${druid-spring-boot-starter.version}</version></dependency><!-- mySQL數據庫驅動包管理 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql-connector-java.version}</version></dependency><!-- mybatis plus 集成Spring Boot啟動器 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus-boot-starter.version}</version></dependency><!-- mybatis plus 代碼生成器 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>${mybatis-plus-boot-starter.version}</version></dependency><!-- 工具類管理 --><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>${commons-lang.version}</version></dependency><!-- 分布式文件系統 minIO的客戶端API包 --><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>${minio.version}</version></dependency><!--google推薦的一套工具類庫--><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>25.0-jre</version></dependency><!--分布式任務調度--><dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>${xxl-job-core.version}</version></dependency><!--Spring boot單元測試--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>${spring-boot.version}</version><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>${okhttp.version}</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>${commons-lang3.version}</version></dependency><dependency><groupId>com.spring4all</groupId><artifactId>swagger-spring-boot-starter</artifactId><version>${swagger-spring-boot-starter.version}</version></dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>${elasticsearch.version}</version></dependency><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>${elasticsearch.version}</version></dependency></dependencies></dependencyManagement><build><finalName>${project.name}</finalName><!--編譯打包過慮配置--><resources><resource><directory>src/main/resources</directory><filtering>true</filtering><includes><include>**/*</include></includes></resource><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource></resources><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><!--指定項目源碼jdk的版本--><source>1.8</source><!--指定項目編譯后的jdk的版本--><target>1.8</target><!--配置注解預編譯--><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${org.projectlombok.version}</version></path></annotationProcessorPaths></configuration></plugin><!--責處理項目資源文件并拷貝到輸出目錄,如果有額外的資源文件目錄則需要配置--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.3.0</version><configuration><encoding>utf-8</encoding><!--使用默認分隔符,resource中可以使用分割符定義過慮的路徑--><useDefaultDelimiters>true</useDefaultDelimiters></configuration></plugin></plugins></build></project>

3.3.3 構建基礎工程

基礎工程的職責是提供一些系統架構所需要的基礎類庫以及一此工具類庫。

1、首先創建基礎工程xuecheng-plus-base。
創建的過程同父工程的創建過程,如下圖:
在這里插入圖片描述

刪除多余的文件
在這里插入圖片描述

這里需要注意的是xuecheng-plus-base的父工程為xuecheng-plus-parent,xuecheng-plus-base的pom.xml的如下:

注意:父級項目和子項目是平級時,如何指定父子繼承關系。

在這里插入圖片描述

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!--父工程的坐標--><parent><groupId>com.xuecheng</groupId><artifactId>xuecheng-plus-parent</artifactId><version>0.0.1-SNAPSHOT</version><!--因為這2個項目是平級關系的方式創建的,所以可以使用此標簽找到父項目pom文件--><relativePath>../xuecheng-plus-parent</relativePath></parent><artifactId>xuecheng-plus-base</artifactId><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency><!-- fast Json --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId></dependency><!-- servlet Api 依賴 --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><scope>provided</scope></dependency><!-- 通用組件 --><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.11</version></dependency><dependency><groupId>io.swagger</groupId><artifactId>swagger-annotations</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency><!--根據擴展名取mimetype--><dependency><groupId>com.j256.simplemagic</groupId><artifactId>simplemagic</artifactId><version>1.17</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.3</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.3.3</version></dependency><dependency><groupId>com.fasterxml.jackson.module</groupId><artifactId>jackson-module-parameter-names</artifactId></dependency><dependency><groupId>com.fasterxml.jackson.datatype</groupId><artifactId>jackson-datatype-jdk8</artifactId></dependency><dependency><groupId>com.fasterxml.jackson.datatype</groupId><artifactId>jackson-datatype-jsr310</artifactId></dependency></dependencies></project>

基礎工程中的內容待需要時在進行開發。
至此父工程和基礎工程創建完成,最后提交至git。
在這里插入圖片描述

最后push到遠程倉庫

在這里插入圖片描述

在這里插入圖片描述

3.3.4 面試-Git相關問題

1、Git代碼沖突怎么處理?

我們在使用Git時難免會出現代碼沖突的問題,出現沖突的原因是因為當本地文件的版本與目標分支中文件的版本不一致時當存在同一行的內容不同時在進行合并時會出現沖突。

代碼沖突—般發生在以下情況:

  • 多個分支向主分支合并時

  • 同一個分支下pull或push操作時。

發生了沖突需要手動合并代碼,選擇最終的版本,可以通過圖形界面,如下:
在這里插入圖片描述
點擊Merge
在這里插入圖片描述
選擇版本后,點擊Apply,提交代碼并push到遠程倉庫。

不通過圖形化界面處理沖突,當出現沖突后在代碼中自動添加了版本標識,如下:
在這里插入圖片描述
手動修改代碼如下:
在這里插入圖片描述

將文件添加到暫存區,提交文件,push到遠程倉庫即可。

2、你是在哪個分支開發?

我們不是直接在主分支開發,由技術經理創建獨立的開發分支,我們是在獨立的開發分支中進行開發,最后由技術經理將開發分支合并到主分支。

3.3.5 面試-Maven相關問題

maven的常用命令

  • mvn clean //清除target目錄中的生成結果
  • mvn compile //編譯源代碼
  • mvn test //執行單元測試
  • mvn package //打包
  • mvn install //打包并把打好的包上傳到本地倉庫
  • mvn deploy //打包并把打好的包上傳到遠程倉庫

maven依賴版本沖突怎么處理?

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

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

  • 使用exclusions排除依賴
    • 比如:我們只依賴B的1.0版本,此時可以在依賴C時排除對B的依賴。
  • 使用dependencyManagement鎖定版本號。
    • 通常在父工程對依賴的版本統—管理。
    • 比如:我們只依賴B的1.0版本,此時可以在父工程中限定B的版本為1.0。

3.4 導入內容管理模塊數據庫

  • 創建數據庫:xc402_content
    在這里插入圖片描述
  • 導入內容管理模塊的sql腳本
    在這里插入圖片描述
    在這里插入圖片描述

3.5 面試-MySql存儲引擎及區別

一、InnoDB

  1. 支持事務。
  2. 使用的鎖粒度默認為行級鎖,可以支持更高的并發;也支持表鎖。
  3. 支持外鍵約束;外鍵約束其實降低了表的查詢速度,增加了表之間的耦合度。

二、MyISAM

  1. 不提供事務支持
  2. 只支持表級鎖
  3. 不支持外鍵

三、memory

  1. 數據存儲在內存中

總結:

  • MyISAM管理非事務表,提供高速存儲和檢索以及全文搜索能力,如果在應用中執行大量select操作,應該選擇MyISAM
  • lnnoDB用于事務處理,具有ACID事務支持等特性,如果在應用中執行大量insert和update操作,應該選擇lnnoDB

3.6 面試-MySql建表注意哪些

MySQL建表的經驗有很多,下邊列舉—些:

  1. 注意選擇存儲引擎,如果要支持事務需要選擇InnoDB。
  2. 注意字段類型的選擇,對于日期類型如果要記錄時分秒建議使用datetime,只記錄年月日使用date類型,對于字符類型的選擇,固定長度字段選擇char,不固定長度的字段選擇varchar,varchar比char節省空間但速度沒有char快;對于內容介紹類的長廣文本字段使用text或longtext類型;如果存儲圖片等二進制數據使用blob或
    longblob類型;對金額字段建議使用DECIMAL;對于數值類型的字段在確保取值范圍足夠的前提下盡量使用占用空間較小的類型.
  3. 主鍵字段建議使用自然主鍵,不要有業務意義,建議使用int unsigned類型,特殊場景使用bigint類型。
  4. 如果要存儲text、blob字段建議單獨建—張表,使用外鍵關聯。
  5. 盡量不要定義外鍵,保證表的獨立性,可以存在外鍵意義的字段。
  6. 設置字段默認值,比如:狀態、創建時間等。
  7. 每個字段寫清楚注釋。
  8. 注意字段的約束,比如:非空、唯一、主鍵等。

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

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

相關文章

用Excel處理數據圖像,出現交叉怎么辦?

一、問題描述 用excel制作X-Y散點圖&#xff0c;意外的出現了4個交叉點&#xff0c;而實際上的圖表數據是沒有交叉的。 二、模擬圖表 模擬部分數據&#xff0c;并創建X-Y散點圖&#xff0c;數據區域&#xff0c;X軸數據是依次增加的&#xff0c;因此散點圖應該是沒有交叉的。…

linux centos 安裝niginx并且添加ssl(https)模塊

文章目錄 前言一、nginx安裝教程1.流程步驟 總結 前言 一、nginx安裝教程 1.流程步驟 代碼如下&#xff08;示例&#xff09;&#xff1a; 1.先下載linux安裝包 2.解壓安裝命令 sudo tar -zxvf nginx-1.20.1.tar.gz3.進入解壓后的目錄 sudo cd nginx-1.20.14.安裝 sudo y…

歡迎加入國家智能網聯汽車創新中心OS開發訓練營大家庭

歡迎加入國家智能網聯汽車創新中心OS開發訓練營大家庭。&#x1f680; 導學階段啟動 在正式開營之前&#xff0c;我們特別設置了導學階段&#xff0c;旨在幫助大家更好地迎接頗具挑戰性的項目實戰。導學階段包括一系列精心準備的視頻課程和配套習題。github鏈接&#xff1a;htt…

使用c++進行大規模的矩陣運算

算法通過分塊矩陣乘法和多線程并行計算實現了大規模矩陣乘法的高效計算 #include <iostream> #include <vector> #include <thread> #include <cmath>class LargeMatrixMultiplier { private:const int BLOCK_SIZE 64; // 分塊大小// 輔助函數&…

vue偵聽器watch()

偵聽器watch&#xff08;&#xff09; 偵聽器偵聽數據變化&#xff0c;我們可以使用watch 選項在每次響應式屬性變化時觸發一個函數。 <template><h3>偵聽器watch</h3><hr> <p>{{nessage}}</p> <button click"exchage">…

基于YOLOv10+YOLOP+PYQT的可視化系統,實現多類別目標檢測+可行駛區域分割+車道線分割【附代碼】

文章目錄 前言視頻效果必要環境一、代碼結構1、 訓練參數解析2、 核心代碼解析1.初始化Detector類2. torch.no_grad()3. 復制輸入圖像并初始化計數器4. 調用YOLOv10模型進行目標檢測5. 提取檢測結果信息6. 遍歷檢測結果并在圖像上繪制邊界框和標簽7. 準備輸入圖像以適應End-to-…

MySQL使用LIKE索引是否失效的驗證

1、簡單的示例展示 在MySQL中&#xff0c;LIKE查詢可以通過一些方法來使得LIKE查詢能夠使用索引。以下是一些可以使用的方法&#xff1a; 使用前導通配符&#xff08;%&#xff09;&#xff0c;但確保它緊跟著一個固定的字符。 避免使用后置通配符&#xff08;%&#xff09;&…

【致知功夫 各隨分限】成長需要時間,助人須考慮對方的承受程度

幫助他人需考慮各人的分限所能及的&#xff0c;初學圣學需時間沉淀&#xff0c;存養心性 任何人都應該受到教育&#xff0c;不應受到貧富、貴賤的差異而排除在教育之外&#xff0c;對于不同材質的學生&#xff0c;需要因材施教&#xff1b; 每天都有新的認知&#xff0c;大我…

STL—容器—string類【對其結構和使用的了解】【對oj相關練習的訓練】

STL—容器—string類 其實string類準確來說并不是容器&#xff0c;因為他出現的時間比STL要早&#xff0c;但是也可以說是容器吧。 1.為什么要學習string類&#xff1f; 1.1C語言當中的字符串 C語言中&#xff0c;字符串是以’\0’結尾的一些字符的集合&#xff0c;為了操作…

CTFShow的RE題(三)

數學不及格 strtol 函數 long strtol(char str, char **endptr, int base); 將字符串轉換為長整型 就是解這個方程組了 主要就是 v4, v9的關系&#xff0c; 3v9-(v10v11v12)62d10d4673 v4 v12 v11 v10 0x13A31412F8C 得到 3*v9v419D024E75FF(1773860189695) 重點&…

Windows ipconfig命令詳解,Windows查看IP地址信息

「作者簡介」&#xff1a;冬奧會網絡安全中國代表隊&#xff0c;CSDN Top100&#xff0c;就職奇安信多年&#xff0c;以實戰工作為基礎著作 《網絡安全自學教程》&#xff0c;適合基礎薄弱的同學系統化的學習網絡安全&#xff0c;用最短的時間掌握最核心的技術。 ipconfig 1、基…

Android Studio Run窗口中文亂碼解決辦法

Android Studio Run窗口中文亂碼解決辦法 問題描述&#xff1a; AndroidStudio 編譯項目時Run窗口中文亂碼&#xff0c;如圖&#xff1a; 解決方法&#xff1a; 依次打開菜單&#xff1a;Help--Edit Custom VM Options&#xff0c;打開studio64.exe.vmoptions編輯框&#xf…

計算機專業怎么選擇電腦

現在高考錄取結果基本已經全部出來了&#xff0c;很多同學都如愿以償的進入到了計算機類專業&#xff0c;現在大部分同學都在為自己的大學生活做準備了&#xff0c;其中第一件事就是買電腦&#xff0c;那計算機類專業該怎么選擇電腦呢&#xff1f; 計算機專業是個一類學科&…

網絡中的網絡 NiN

一、全連接層問題 1、卷積層的參數&#xff1a;輸入的通道數乘以輸出的通道數再乘以窗口的高寬 2、全連接層的參數就是輸入的元素個數乘以輸出的元素個數&#xff0c;也就是輸入的通道數乘以輸入的高寬&#xff0c;再乘以輸出的通道數乘以輸出的高寬&#xff0c;賊大的量級 …

NLP簡介

自然語言處理( Natural Language Processing, NLP)是計算機科學領域與人工智能領域中的一個重要方向。它研究能實現人與計算機之間用自然語言進行有效通信的各種理論和方法。自然語言處理是一門融語言學、計算機科學、數學于一體的科學。因此&#xff0c;這一領域的研究將涉及自…

【算法】(C語言):冒泡排序、選擇排序、插入排序

冒泡排序 從第一個數據開始到第n-1個數據&#xff0c;依次和后面一個數據兩兩比較&#xff0c;數值小的在前。最終&#xff0c;最后一個數據&#xff08;第n個數據&#xff09;為最大值。從第一個數據開始到第n-2個數據&#xff0c;依次和后面一個數據兩兩比較&#xff0c;數值…

關于用戶咨詢華為擎云L410筆記本安裝Windows系統的說明

同樣也是單位購買的華為擎云L410 KLVU-WDU0筆記本電腦&#xff0c;國產UOS系統某些軟件用著不是很方便&#xff0c;用戶咨詢是否能夠安裝Windows10或者Windows7&#xff1f; 帶著種種疑問也做了一些查詢&#xff0c;之前也給一些國產設備更改過操作系統&#xff0c;之前的國產設…

計算機網絡淺談—什么是 OSI 模型?

開放系統通信&#xff08;OSI&#xff09;模型是一個代表網絡通信工作方式的概念模型。 思維導圖 什么是 OSI 模型&#xff1f; 開放系統互連 (OSI) 模型是由國際標準化組織創建的概念模型&#xff0c;支持各種通信系統使用標準協議進行通信。簡單而言&#xff0c;OSI 為保證…

智能交通(3)——Learning Phase Competition for Traffic Signal Control

論文分享 https://dl.acm.org/doi/pdf/10.1145/3357384.3357900https://dl.acm.org/doi/pdf/10.1145/3357384.3357900 論文代碼 https://github.com/gjzheng93/frap-pubhttps://github.com/gjzheng93/frap-pub 摘要 越來越多可用的城市數據和先進的學習技術使人們能夠提…

Laravel框架詳解及使用方法

Laravel是一款開源的PHP Web應用程序框架&#xff0c;它基于MVC&#xff08;模型-視圖-控制器&#xff09;架構&#xff0c;以其簡單易學、靈活性強、安全性高和強大的社區支持而廣受開發者喜愛。以下是對Laravel框架的詳細解析及使用方法&#xff1a; 一、Laravel框架簡介 1…