python做網(wǎng)站缺點(diǎn)品牌推廣策劃方案
文章目錄
- 注意!!!
- 1、多模塊開(kāi)發(fā)(后端)
- (1).Maven依賴(lài)
- (2)swagger配置
- 2、判題機(jī)開(kāi)發(fā)
- (1)docker
??前言:大二剛開(kāi)始接手了本學(xué)院的oj,并管理了一段時(shí)間,后來(lái)老師給我說(shuō)我可以開(kāi)發(fā)一個(gè) oj 用來(lái)當(dāng)做畢設(shè)。
??我:嗯…(知道開(kāi)發(fā)一個(gè)比較困難)
??來(lái)來(lái)回回最終下定決心開(kāi)始了 oj 的開(kāi)發(fā),由于我都是略懂一點(diǎn)(這個(gè)最難受了),所以做起來(lái)比較困難,也沒(méi)有什么人可以請(qǐng)教,只能自己一點(diǎn)一點(diǎn)的找網(wǎng)上的。
??在我管理的 oj 中,使用 php 開(kāi)發(fā)的,但是但是,我學(xué)的主要的是 java 因此想寫(xiě)一個(gè) java 版本的。在之前,學(xué)長(zhǎng)接手的時(shí)候?qū)τ诒緦W(xué)院 oj 項(xiàng)目的記錄可以說(shuō)是為零,雖然在我接手的時(shí)候不敢說(shuō)是一片空白,但是也差不多 (>_<) ,經(jīng)歷了一個(gè)學(xué)期,基本摸清了項(xiàng)目的主要結(jié)構(gòu),并對(duì)項(xiàng)目的一些 bug 進(jìn)行修改,比如:限制同一賬號(hào)同時(shí)登錄多個(gè);補(bǔ)充了對(duì)于用戶(hù)的刪除(徹底的),后面的修改 id(這個(gè)是 primary key)還沒(méi)有寫(xiě),準(zhǔn)備帶著下一屆的學(xué)弟開(kāi)發(fā)(因?yàn)槲乙惨D(zhuǎn)手了)。
不足的:
還沒(méi)有了解他的判題機(jī)制(當(dāng)時(shí)也是 十分茫然、無(wú)助。。。。)
還可以的:
對(duì)項(xiàng)目主要結(jié)構(gòu)寫(xiě)了自認(rèn)為可以的解析文檔,對(duì)以后的開(kāi)發(fā)確定的大致的方向,并留下一些開(kāi)發(fā)經(jīng)驗(yàn)
繼續(xù)說(shuō)本項(xiàng)目:
??在此之前聽(tīng)了 dl 學(xué)長(zhǎng)的建議使用 docker
進(jìn)行環(huán)境的部署,經(jīng)過(guò)好長(zhǎng)時(shí)間的嘗試,還是在 win11
中進(jìn)行了安裝,因?yàn)橛昧撕瞄L(zhǎng)時(shí)間,工具比較全,也不想在去弄?jiǎng)e的了。注:Win11 家庭版可以安裝 docker !!! 簡(jiǎn)單使用還是可以的(對(duì)我目前的需求來(lái)講)
使用主要工具:
idea 2023
docker 25.0.6
(win版)
vsCode
使用主要框架
springBoot 2.6.11
注意!!!
在進(jìn)行Maven引用或注解引用的時(shí)候,一定考慮版本適配問(wèn)題(剛開(kāi)始沒(méi)注意springboot版本適配問(wèn)題,一直報(bào)錯(cuò))
1、多模塊開(kāi)發(fā)(后端)
如何使用多模塊開(kāi)發(fā),可以自己參考其他的
(1).Maven依賴(lài)
<dependencies><!-- 郵箱驗(yàn)證碼依賴(lài) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency><!-- lvrdqmmdvfgcbdcc--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.32</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.github.oshi</groupId><artifactId>oshi-core</artifactId><version>6.4.0</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.35</version></dependency><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.3.2</version></dependency><!--druid--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.16</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.26</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.6</version></dependency><!-- docker-java--><!-- <dependency>--><!-- <groupId>com.github.docker-java</groupId>--><!-- <artifactId>docker-java</artifactId>--><!-- <version>3.2.13</version>--><!-- </dependency>--><!-- <dependency>--><!-- <groupId>com.github.docker-java</groupId>--><!-- <artifactId>docker-java-core</artifactId>--><!-- <version>3.2.13</version>--><!-- </dependency>--><!-- <dependency>--><!-- <groupId>com.github.docker-java</groupId>--><!-- <artifactId>docker-java-transport-httpclient5</artifactId>--><!-- <version>3.2.13</version>--><!-- </dependency>--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.25.Final</version></dependency><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.10.3</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency><dependency><groupId>org.dom4j</groupId><artifactId>dom4j</artifactId><version>2.1.4</version></dependency><dependency><groupId>org.json</groupId><artifactId>json</artifactId><version>20220924</version></dependency><!-- 集成redis依賴(lài) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><exclusion><groupId>redis.clients</groupId><artifactId>jedis</artifactId></exclusion><exclusion><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId></exclusion></exclusions></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId></dependency><!-- weka--><dependency><groupId>nz.ac.waikato.cms.weka</groupId><artifactId>weka-stable</artifactId><version>3.8.6</version></dependency><!-- minio--><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.2.2</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version></dependency></dependencies>
(2)swagger配置
剛開(kāi)始可以只寫(xiě)一個(gè)空的Swagger2Config
類(lèi),注意在啟動(dòng)類(lèi)上加上@EnableSwagger2 @EnableWebMvc
注解
對(duì)于 swagger 的使用可以自行學(xué)習(xí)
接口文檔地址:http://localhost:8080/swagger-ui/index.html#/
(注意本項(xiàng)目的根路徑為 /
)
@Configuration
@EnableSwagger2
@EnableWebMvc
public class Swagger2Config {@Beanpublic Docket api() {return new Docket(DocumentationType.SWAGGER_2).enable(true).groupName("判題測(cè)試接口").tags(new Tag("judge相關(guān)接口", "ee")).select().apis(RequestHandlerSelectors.any()).paths(PathSelectors.ant("/judge/**")).build();}@Beanpublic Docket api01(){return new Docket(DocumentationType.SWAGGER_2).enable(true) .groupName("user管理接口").tags(new Tag("用戶(hù)管理相關(guān)接口","Test01Controller")).select().apis(RequestHandlerSelectors.any()).paths(PathSelectors.ant("/user/**")).build();}// //構(gòu)建 api文檔的詳細(xì)信息函數(shù)
// private ApiInfo apiInfo() {
// return new ApiInfoBuilder()
// //頁(yè)面標(biāo)題
// .title("XX平臺(tái)API接口文檔")
// //創(chuàng)建人
// .contact(new Contact("馮冬冬", "http://www.javachat.cc",
// "3049352171@qq.com"))
// //版本號(hào)
// .version("1.0")
// //描述
// .description("系統(tǒng)API描述")
// .build();
// }
}
2、判題機(jī)開(kāi)發(fā)
主要是使用docker
鏡像拉取環(huán)境,每次判題的時(shí)候新建容器,結(jié)束后刪除容器
(1)docker
鏡像配置:
{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"features": {"buildkit": true},"registry-mirrors": ["https://do.nark.eu.org","https://dc.j8.work","https://docker.m.daocloud.io","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn"]
}