學(xué)習(xí)記錄

2018.06.06
工作內(nèi)容:
1.嘗試解決前端開發(fā)手冊,開發(fā)新功能,已經(jīng)全局安裝了gulp但是不能啟動(dòng)問題;嘗試本地安裝,重新全局安裝,未解決;卸載gulp,重新安裝gulp,依然不能啟動(dòng),未解決;
2.嘗試搭建后端開發(fā)手冊,測試與集成;按照流程搭建,能夠通過http://localhost:8000/訪問到正常界面;但是manager-service服務(wù)一直連不上數(shù)據(jù)庫,啟動(dòng)不成功;重新拉取鏡像,重新初始化數(shù)據(jù)庫,能啟動(dòng)所有服務(wù);但是訪問http://localhost:8000/出現(xiàn) EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.未解決;
3.學(xué)習(xí)了解k8s、docker、后端開發(fā)流程,git常用指令;
4.參與平臺(tái)培訓(xùn)。
學(xué)習(xí)內(nèi)容:
1.k8s組件
是基于容器技術(shù)的分布式架構(gòu)領(lǐng)先方案,是容器集群管理系統(tǒng)。
1)master是集群管理節(jié)點(diǎn),負(fù)責(zé)管理集群;
2)Node是集群架構(gòu)中運(yùn)行pod的服務(wù)節(jié)點(diǎn);
3)Pod 運(yùn)行于Node節(jié)點(diǎn)上,若干相關(guān)容器的組合;
4)Replication Controller管理Pod的副本,保證集群中存在指定數(shù)量的Pod副本;
5)Service定義了Pod的邏輯集合和訪問策略;
6)Label在k8s中任意對(duì)象都通過Lable進(jìn)行標(biāo)識(shí);
2.Docker
相關(guān)概念;
1)鏡像(Image),鏡像是靜態(tài)的/可以被用戶分享的文件,只能pull或者push;
2)容器(Container),可以理解為鏡像的動(dòng)態(tài)狀態(tài);
3)倉庫(Repository),Docker中的倉庫很像git的代碼倉庫。
基本操作:查看鏡像 docker images 獲取鏡像 docker pull 啟動(dòng)容器 docker-compose up,
從docker進(jìn)入mysql docker exec -it mysql /bin/bash,
3.后端開發(fā)流程熟悉
1)infa層
DO類--》對(duì)應(yīng)數(shù)據(jù)庫中的具體類
mapper--》mapper接口類和mapper.xml
2)domain層
entity類--》對(duì)應(yīng)DO類
convertor類--》用于E。DTO。DO三者之間轉(zhuǎn)換
Repository--》對(duì)數(shù)據(jù)庫進(jìn)行操作,有對(duì)應(yīng)接口和實(shí)現(xiàn)類
service--》進(jìn)行業(yè)務(wù)操作
3)app層 應(yīng)用層
4)api層 展現(xiàn)層
DTO--》封裝用戶請求
controll--》是對(duì)一個(gè)具體的DTO資源進(jìn)行處理

2018.06.07
工作內(nèi)容:
1.前端開發(fā)手冊--》開發(fā)新功能--》開發(fā)新模塊,按照流程走,不能啟動(dòng)gulp,切換nodejs版本,重新全局安裝gulp不能解決;咨詢前端同事,demo文件夾為空,加入相關(guān)文件,gulp能夠運(yùn)行。
2.后端開發(fā)手冊--》集成與測試,服務(wù)啟動(dòng)報(bào)錯(cuò),刪除現(xiàn)有鏡像,新建文件夾重新拉取;所有服務(wù)都能啟動(dòng)成功,但是不能訪問loaclhost:8000,logs發(fā)現(xiàn)不能啟動(dòng)manager-service服務(wù);改為從github上下載項(xiàng)目本地運(yùn)行,啟動(dòng)服務(wù)成功;但是不能在eureka上顯示,給啟動(dòng)類加上@EnableEurekaClient,成功顯示;但是不能訪問http://localhost:8963/swagger-ui.html,重新初始化數(shù)據(jù)庫,配置路由,訪問成功。

學(xué)習(xí)內(nèi)容:spring boot
1.Profile,在不同環(huán)境下使用不同配置@Profile("dev"/"prod")
2.事件(Application Event)為Bean與Bean之間的消息傳遞提供了支持;步驟,定義事件,定義監(jiān)聽,容器發(fā)布
3.多線程,實(shí)現(xiàn)AsyncConfigurer接口,獲取一個(gè)基于線程池的TaskExecutor,@EnableAsync開啟對(duì)異步的支持,@Async聲明異步
4.this 1)表示構(gòu)造函數(shù)傳遞,this(a,b) 2)在類的非static成員內(nèi)部使用,表示這個(gè)類本身或者對(duì)象類型
super 1)調(diào)用父類構(gòu)造方法 2)調(diào)用父類的protected方法
5.spring boot配置文件 https://blog.csdn.net/lpfsuperman/article/details/78287265

2018.06.08
工作內(nèi)容:
1.跟據(jù)文檔搭建前端開發(fā)手冊--》開發(fā)新功能,需要改動(dòng)的小細(xì)節(jié)已經(jīng)發(fā)到群里;
2.重新搭建后端開發(fā)手冊--》測試與集成部分,能啟動(dòng)所有服務(wù),手動(dòng)配置路由,能進(jìn)入到http://localhost:8963/swagger-ui.html頁面。

學(xué)習(xí)內(nèi)容:
1.spring-retry是針請求超時(shí)情況采取一下重試操作
1)添加maven依賴 org.springframework.retry 2)在啟動(dòng)項(xiàng)添加重試配置 @EnableRetry 3)@Retryable 標(biāo)注此注解的方法在發(fā)生異常時(shí)會(huì)進(jìn)行重試
2.zuul主要功能是路由轉(zhuǎn)發(fā)和過濾器;路由功能是將外部請求轉(zhuǎn)發(fā)到具體的微服務(wù)上;過濾器是對(duì)請求處理的過程進(jìn)行干預(yù);@EnableZuulProxy開啟服務(wù)
3.Eureka服務(wù)注冊發(fā)現(xiàn)
server
1)添加依賴 <artifactId>spring-cloud-starter-eureka-server</artifactId>
2)application.yml配置
security:
basic:
enabled: true #開啟認(rèn)證
eureka:
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://user:password@localhost:8761/eureka
3)主程序入口添加 @EnableEurekaServer//開啟Eureka Server
Clients  
同上,application.yml配置:
eureka:
client:
serviceUrl:
defaultZone: http://user:123456@localhost:8761/eureka #注冊 中心已經(jīng)開啟認(rèn)證
鏈接:https://www.cnblogs.com/brant/p/6298342.html
4.bootstrap與application
1)bootstrap.yml先加載 application后加載
2)bootstrap.yml 可以理解成系統(tǒng)級(jí)別的一些參數(shù)配置,這些參數(shù)一般是不會(huì)變動(dòng)的。
application.yml 可以用來定義應(yīng)用級(jí)別的
5.@Order控制配置類的加載順序

2018.06.11
學(xué)習(xí)內(nèi)容:
1.spring基礎(chǔ)學(xué)習(xí)
Spring IOC容器,Spring BaenFactory/ApplicationContext,Spring依賴注入,基于構(gòu)造器注入和set方法注入/自動(dòng)裝配等。
2.學(xué)習(xí)springboot+mybatis,用注解方式實(shí)現(xiàn),能夠正常訪問;用配置文件方式,報(bào)錯(cuò)org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.scptest.springbootmybatisdemo1.mapper.UserMapper.getUserById,修改配置文件,修改mapper文件,未解決;修改application.yml文件,解決。

2018.06.12
1.Docker for windows一直啟動(dòng)不成功;
報(bào)錯(cuò):[Docker for Windows error: “Hardware assisted virtualization and data execution protection must be enabled in the BIOS” [closed]]
https://stackoverflow.com/questions/39684974/docker-for-windows-error-hardware-assisted-virtualization-and-data-execution-p,解決方法都嘗試了一遍,未解決;win10
一直不能開啟hyper-v虛擬機(jī),準(zhǔn)備重新升級(jí)系統(tǒng)。
2.訪問404錯(cuò)誤
將@Countller改為@RestController或者加上@ResponseBody;
1)@responseBody注解的作用是將controller的方法返回的對(duì)象通過適當(dāng)?shù)霓D(zhuǎn)換器轉(zhuǎn)換為指定的格式之后,寫入到response對(duì)象的body區(qū),通常用來返回JSON數(shù)據(jù)或者是XML
2)@RestController是@ResponseBody + @Controller合體,當(dāng)你在這個(gè)controller中方法只是想返回一個(gè)頁面時(shí),就不能用@RestController,因?yàn)樗鼤?huì)把你的返回值當(dāng)作數(shù)據(jù)返回,而不是頁面名字,所以這時(shí)候就只能用@Controller。
3.Establishing SSL connection without server's identity verification
解決:在mysql連接上加上?&useSSL=true&useUnicode=true&characterEncoding=utf8
4.git checkout master
error: pathspec 'master' did not match any file(s) known to git.
解決:git checkout -b master
https://blog.csdn.net/wankui/article/details/53328369
5.jmeter學(xué)習(xí)
1)status 415錯(cuò)誤
為該次請求修改請求頭里的 Content-Type ,修正為 application/json;charset=UTF-8
2)status 401錯(cuò)誤
在HTTP管理頭添加對(duì)應(yīng)的Jwt_Token。

2018.06.13
用jmeter對(duì)gilab-service進(jìn)行測試;
1)一直status 415錯(cuò)誤,即使添加了Content-Type = application/json,刪掉http管理,重新添加或者刪除Content-Type重新添加;
2)status 403或者其他,都是參數(shù)未傳遞正確。

2018.06.14
1.git解決分支沖突,兩個(gè)分支都對(duì)同一個(gè)文件進(jìn)行了提交,對(duì)這兩個(gè)分支進(jìn)行合并會(huì)失敗,手動(dòng)更改進(jìn)行合并;分支合并時(shí)加上--no-ff 禁用Fast forward模式,可以從歷史上看出分支信息。
2、@ApiOperation不是spring自帶的注解是swagger里的
@ApiOperation(value = “接口說明”, httpMethod = “接口請求方式”, response = “接口返回參數(shù)類型”, notes = “接口發(fā)布說明”;
@ApiParam(required = “是否必須參數(shù)”, name = “參數(shù)名稱”, value = “參數(shù)具體描述”)
3、地址①http://localhost:8989/SSSP/emps?pageNo=2
地址②http://localhost:8989/SSSP/emp/7
如果想獲取地址①中的 pageNo的值 ‘2’ ,則使用 @RequestParam ,
如果想獲取地址②中的 emp/7 中的 ‘7 ’ 則使用 @PathVariable
4、@RequestBody 注解則是將 HTTP 請求正文插入方法中,使用適合的 HttpMessageConverter 將請求體寫入某個(gè)對(duì)象。
5.Java 8中的[Optional<T>]以包含非空值的容器對(duì)象,在 [Stream API]中很多地方也都使用到了Optional。
1)Optional<SomeType> someValue = someMethod();
if (someValue.isPresent()) { // check
someValue.get().someOtherMethod(); // retrieve and call
}
2)orElseThrow如果有值則將其返回,否則拋出supplier接口創(chuàng)建的異常
3)map如果返回值不為null,則創(chuàng)建包含mapping返回值的Optional作為map方法返回值,否則返回空Optional
4)ofNullable 指定的值創(chuàng)建一個(gè)Optional,如果指定的值為null,則返回一個(gè)空的Optional
6.java Patter.matches https://www.cnblogs.com/ggjucheng/p/3423731.html
7.projectDO.getStatusCode().is2xxSuccessful()
1)ResponseEntity<T>是Spring對(duì)HTTP請求響應(yīng)的封裝,包括了幾個(gè)重要的元素,如響應(yīng)碼、contentType、contentLength、響應(yīng)消息體等;
2)getStatusCode()方法取得HttpStatus對(duì)象;getBody();getHeaders();等
3)is2xxSuccessful();判斷狀態(tài)嗎是否是2開頭
https://blog.csdn.net/u012702547/article/details/77917939
8.Class<T>以及Class<?>的理解
Class<T>在實(shí)例化的時(shí)候,T要替換成具體類
Class<?>它是個(gè)通配泛型,?可以代表任何類型
9.lambda () -> 5 不需要參數(shù),返回值為 5

2018.06.19
1、給所有api都加上對(duì)應(yīng)的角色;
2、IDEA中pom.xml報(bào)錯(cuò)project上Failed to read artifact descriptor for
1)去庫文件夾中查詢對(duì)應(yīng)的jar文件,刪除文件,重新下載;
2)在m2文件夾下放入setting.xml文件,清理項(xiàng)目重新加載;

2018.06.20-2018.06-22
1、從業(yè)務(wù)角度測試所有api角色是否添加正確;
2、mvn pacakge項(xiàng)目報(bào)錯(cuò),找不到指定的jar文件,spring-cloud和spring-boot版本要配套,從官網(wǎng)或者對(duì)應(yīng)版本,解決;
3、搭建eureka,eureka-sever能夠正常啟動(dòng);但是eureka-client不能注冊到server,一直報(bào)錯(cuò),There was a problem with the instance info replicator com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server.嘗試更換spring-boot和cloud版本,未解決。
4、ZooKeeper典型應(yīng)用場景
ZooKeeper 是一個(gè)高可用的分布式數(shù)據(jù)管理與協(xié)調(diào)框架。基于對(duì)ZAB算法的實(shí)現(xiàn),該框架能夠很好地保證分布式環(huán)境中數(shù)據(jù)的一致性。也是基于這樣的特性,使得 ZooKeeper 成為了解決分布式一致性問題的利器。

2018.06.25
1、優(yōu)化開發(fā)(DEV)、測試(QA)、運(yùn)維(OPS)的流程,開發(fā)運(yùn)維一體化,通過高度自動(dòng)化工具與流程來使得軟件構(gòu)建、測試、發(fā)布更加快捷、頻繁和可靠。
里面兩個(gè)核心點(diǎn)是:持續(xù)集成與持續(xù)交付
1)持續(xù)集成:
CI是一種將被測代碼頻繁集成到項(xiàng)目穩(wěn)定分支的做法。所謂的”被測代碼”,指的是單獨(dú)分支上開發(fā)的功能,因此這部分的代碼會(huì)被測試然后集成在主線上。
持續(xù)集成是指軟件個(gè)人研發(fā)的部分向軟件整體部分交付,頻繁進(jìn)行集成以便更快地發(fā)現(xiàn)其中的錯(cuò)誤。
2)持續(xù)交付:
持續(xù)交付在持續(xù)集成的基礎(chǔ)上,將集成后的代碼部署到更貼近真實(shí)運(yùn)行環(huán)境的「類生產(chǎn)環(huán)境」(production-like environments)中。持續(xù)交付優(yōu)先于整個(gè)產(chǎn)品生命周期的軟件部署,建立在高水平自動(dòng)化持續(xù)集成之上。
3)持續(xù)部署:
持續(xù)部署是指當(dāng)交付的代碼通過評(píng)審之后,自動(dòng)部署到生產(chǎn)環(huán)境中。持續(xù)部署是持續(xù)交付的最高階段。這意味著,所有通過了一系列的自動(dòng)化測試的改動(dòng)都將自動(dòng)部署到生產(chǎn)環(huán)境。
4)“開發(fā)人員提交代碼,持續(xù)集成服務(wù)器獲取代碼,執(zhí)行單元測試,根據(jù)測試結(jié)果決定是否部署到預(yù)演環(huán)境,如果成功部署到預(yù)演環(huán)境,進(jìn)行整體驗(yàn)收測試,如果測試通過,自動(dòng)部署到產(chǎn)品環(huán)境,全程自動(dòng)化高效運(yùn)轉(zhuǎn)?!?br> https://www.cnblogs.com/zhuwenlubin/p/5888498.html
2、1)Optional.of(T value),該方法通過一個(gè)非 nullvalue 來構(gòu)造一個(gè) Optional,返回的 Optional 包含了 value 這個(gè)值。對(duì)于該方法,傳入的參數(shù)一定不能為 null,否則便會(huì)拋出 NullPointerException
2)Optional.ofNullable(T value),該方法和 of 方法的區(qū)別在于,傳入的參數(shù)可以為 null —— 但是前面 javadoc 不是說 Optional 只能包含非 null 值嗎?我們可以看看 ofNullable 方法的源碼:
原來該方法會(huì)判斷傳入的參數(shù)是否為 null,如果為 null 的話,返回的就是 Optional.empty()。
3)Optional.empty(),該方法用來構(gòu)造一個(gè)空的 Optional,即該 Optional 中不包含值 —— 其實(shí)底層實(shí)現(xiàn)還是 如果 Optional 中的 valuenull 則該 Optional 為不包含值的狀態(tài),然后在 API 層面將 Optional 表現(xiàn)的不能包含 null 值,使得 Optional 只存在 包含值不包含值 兩種狀態(tài)。
3.matches() 方法用于檢測字符串是否匹配給定的正則表達(dá)式。
調(diào)用此方法的 str.matches(regex) 形式與以下表達(dá)式產(chǎn)生的結(jié)果完全相同:
Pattern.matches(regex, str)
4.一個(gè)接口有兩個(gè)實(shí)現(xiàn)類,
1) @Resource(name = "manImpl")//注意是manImpl不是ManImpl,因?yàn)槭褂聾Service,容器為我們創(chuàng)建bean時(shí)默認(rèn)類名首字母小寫
2)@Autowired @Qualifier("manImpl")
5.Mybatis動(dòng)態(tài)SQL Parameter 'name' not found. Available parameters are [arg1, arg0, param1, param2]
1)將語句中的具體參數(shù)名稱改為param1,param2即可。

  1. 采用map傳遞參數(shù)parameterType="Map"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容