2018.06.06
工作內(nèi)容:
1.嘗試解決前端開發(fā)手冊,開發(fā)新功能薪铜,已經(jīng)全局安裝了gulp但是不能啟動問題桃纯;嘗試本地安裝弄砍,重新全局安裝,未解決撼唾;卸載gulp廉邑,重新安裝gulp,依然不能啟動,未解決鬓催;
2.嘗試搭建后端開發(fā)手冊肺素,測試與集成恨锚;按照流程搭建宇驾,能夠通過http://localhost:8000/訪問到正常界面;但是manager-service服務(wù)一直連不上數(shù)據(jù)庫猴伶,啟動不成功课舍;重新拉取鏡像,重新初始化數(shù)據(jù)庫他挎,能啟動所有服務(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.參與平臺培訓(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中任意對象都通過Lable進(jìn)行標(biāo)識拦英;
2.Docker
相關(guān)概念;
1)鏡像(Image)苞俘,鏡像是靜態(tài)的/可以被用戶分享的文件,只能pull或者push龄章;
2)容器(Container)吃谣,可以理解為鏡像的動態(tài)狀態(tài);
3)倉庫(Repository)做裙,Docker中的倉庫很像git的代碼倉庫岗憋。
基本操作:查看鏡像 docker images 獲取鏡像 docker pull 啟動容器 docker-compose up,
從docker進(jìn)入mysql docker exec -it mysql /bin/bash锚贱,
3.后端開發(fā)流程熟悉
1)infa層
DO類--》對應(yīng)數(shù)據(jù)庫中的具體類
mapper--》mapper接口類和mapper.xml
2)domain層
entity類--》對應(yīng)DO類
convertor類--》用于E仔戈。DTO。DO三者之間轉(zhuǎn)換
Repository--》對數(shù)據(jù)庫進(jìn)行操作,有對應(yīng)接口和實(shí)現(xiàn)類
service--》進(jìn)行業(yè)務(wù)操作
3)app層 應(yīng)用層
4)api層 展現(xiàn)層
DTO--》封裝用戶請求
controll--》是對一個具體的DTO資源進(jìn)行處理
2018.06.07
工作內(nèi)容:
1.前端開發(fā)手冊--》開發(fā)新功能--》開發(fā)新模塊监徘,按照流程走晋修,不能啟動gulp,切換nodejs版本凰盔,重新全局安裝gulp不能解決墓卦;咨詢前端同事,demo文件夾為空户敬,加入相關(guān)文件落剪,gulp能夠運(yùn)行。
2.后端開發(fā)手冊--》集成與測試尿庐,服務(wù)啟動報錯忠怖,刪除現(xiàn)有鏡像,新建文件夾重新拉瘸凡泣;所有服務(wù)都能啟動成功,但是不能訪問loaclhost:8000皮假,logs發(fā)現(xiàn)不能啟動manager-service服務(wù)鞋拟;改為從github上下載項(xiàng)目本地運(yùn)行,啟動服務(wù)成功钞翔;但是不能在eureka上顯示严卖,給啟動類加上@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接口,獲取一個基于線程池的TaskExecutor庵佣,@EnableAsync開啟對異步的支持歉胶,@Async聲明異步
4.this 1)表示構(gòu)造函數(shù)傳遞,this(a,b) 2)在類的非static成員內(nèi)部使用巴粪,表示這個類本身或者對象類型
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ā)新功能通今,需要改動的小細(xì)節(jié)已經(jīng)發(fā)到群里粥谬;
2.重新搭建后端開發(fā)手冊--》測試與集成部分,能啟動所有服務(wù)辫塌,手動配置路由漏策,能進(jìn)入到http://localhost:8963/swagger-ui.html頁面。
學(xué)習(xí)內(nèi)容:
1.spring-retry是針請求超時情況采取一下重試操作
1)添加maven依賴 org.springframework.retry 2)在啟動項(xiàng)添加重試配置 @EnableRetry 3)@Retryable 標(biāo)注此注解的方法在發(fā)生異常時會進(jìn)行重試
2.zuul主要功能是路由轉(zhuǎn)發(fā)和過濾器臼氨;路由功能是將外部請求轉(zhuǎn)發(fā)到具體的微服務(wù)上掺喻;過濾器是對請求處理的過程進(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)級別的一些參數(shù)配置巢寡,這些參數(shù)一般是不會變動的喉脖。
application.yml 可以用來定義應(yīng)用級別的
5.@Order控制配置類的加載順序
2018.06.11
學(xué)習(xí)內(nèi)容:
1.spring基礎(chǔ)學(xué)習(xí)
Spring IOC容器椰苟,Spring BaenFactory/ApplicationContext,Spring依賴注入树叽,基于構(gòu)造器注入和set方法注入/自動裝配等舆蝴。
2.學(xué)習(xí)springboot+mybatis,用注解方式實(shí)現(xiàn)题诵,能夠正常訪問洁仗;用配置文件方式,報錯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一直啟動不成功怎棱;
報錯:[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)備重新升級系統(tǒng)。
2.訪問404錯誤
將@Countller改為@RestController或者加上@ResponseBody谬运;
1)@responseBody注解的作用是將controller的方法返回的對象通過適當(dāng)?shù)霓D(zhuǎn)換器轉(zhuǎn)換為指定的格式之后隙赁,寫入到response對象的body區(qū),通常用來返回JSON數(shù)據(jù)或者是XML
2)@RestController是@ResponseBody + @Controller合體梆暖,當(dāng)你在這個controller中方法只是想返回一個頁面時伞访,就不能用@RestController,因?yàn)樗鼤涯愕姆祷刂诞?dāng)作數(shù)據(jù)返回,而不是頁面名字式廷,所以這時候就只能用@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錯誤
為該次請求修改請求頭里的 Content-Type ,修正為 application/json;charset=UTF-8
2)status 401錯誤
在HTTP管理頭添加對應(yīng)的Jwt_Token。
2018.06.13
用jmeter對gilab-service進(jìn)行測試蝗肪;
1)一直status 415錯誤袜爪,即使添加了Content-Type = application/json,刪掉http管理薛闪,重新添加或者刪除Content-Type重新添加辛馆;
2)status 403或者其他,都是參數(shù)未傳遞正確豁延。
2018.06.14
1.git解決分支沖突昙篙,兩個分支都對同一個文件進(jìn)行了提交,對這兩個分支進(jìn)行合并會失敗诱咏,手動更改進(jìn)行合并苔可;分支合并時加上--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 將請求體寫入某個對象。
5.Java 8中的[Optional<T>]以包含非空值的容器對象砌梆,在 [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)建一個Optional,如果指定的值為null诉儒,則返回一個空的Optional
6.java Patter.matches https://www.cnblogs.com/ggjucheng/p/3423731.html
7.projectDO.getStatusCode().is2xxSuccessful()
1)ResponseEntity<T>是Spring對HTTP請求響應(yīng)的封裝葡缰,包括了幾個重要的元素,如響應(yīng)碼忱反、contentType泛释、contentLength、響應(yīng)消息體等;
2)getStatusCode()方法取得HttpStatus對象温算;getBody();getHeaders();等
3)is2xxSuccessful();判斷狀態(tài)嗎是否是2開頭
https://blog.csdn.net/u012702547/article/details/77917939
8.Class<T>以及Class<?>的理解
Class<T>在實(shí)例化的時候怜校,T要替換成具體類
Class<?>它是個通配泛型,?可以代表任何類型
9.lambda () -> 5 不需要參數(shù),返回值為 5
2018.06.19
1注竿、給所有api都加上對應(yīng)的角色茄茁;
2魂贬、IDEA中pom.xml報錯project上Failed to read artifact descriptor for
1)去庫文件夾中查詢對應(yīng)的jar文件,刪除文件裙顽,重新下載付燥;
2)在m2文件夾下放入setting.xml文件,清理項(xiàng)目重新加載愈犹;
2018.06.20-2018.06-22
1键科、從業(yè)務(wù)角度測試所有api角色是否添加正確;
2漩怎、mvn pacakge項(xiàng)目報錯勋颖,找不到指定的jar文件,spring-cloud和spring-boot版本要配套勋锤,從官網(wǎng)或者對應(yīng)版本饭玲,解決;
3怪得、搭建eureka咱枉,eureka-sever能夠正常啟動卑硫;但是eureka-client不能注冊到server徒恋,一直報錯,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 是一個高可用的分布式數(shù)據(jù)管理與協(xié)調(diào)框架硝拧【斗ぃ基于對ZAB算法的實(shí)現(xiàn),該框架能夠很好地保證分布式環(huán)境中數(shù)據(jù)的一致性障陶。也是基于這樣的特性滋恬,使得 ZooKeeper 成為了解決分布式一致性問題的利器。
2018.06.25
1抱究、優(yōu)化開發(fā)(DEV)恢氯、測試(QA)、運(yùn)維(OPS)的流程鼓寺,開發(fā)運(yùn)維一體化勋拟,通過高度自動化工具與流程來使得軟件構(gòu)建、測試妈候、發(fā)布更加快捷敢靡、頻繁和可靠。
里面兩個核心點(diǎn)是:持續(xù)集成與持續(xù)交付
1)持續(xù)集成:
CI是一種將被測代碼頻繁集成到項(xiàng)目穩(wěn)定分支的做法苦银。所謂的”被測代碼”啸胧,指的是單獨(dú)分支上開發(fā)的功能赶站,因此這部分的代碼會被測試然后集成在主線上。
持續(xù)集成是指軟件個人研發(fā)的部分向軟件整體部分交付纺念,頻繁進(jìn)行集成以便更快地發(fā)現(xiàn)其中的錯誤亲怠。
2)持續(xù)交付:
持續(xù)交付在持續(xù)集成的基礎(chǔ)上,將集成后的代碼部署到更貼近真實(shí)運(yùn)行環(huán)境的「類生產(chǎn)環(huán)境」(production-like environments)中柠辞。持續(xù)交付優(yōu)先于整個產(chǎn)品生命周期的軟件部署团秽,建立在高水平自動化持續(xù)集成之上。
3)持續(xù)部署:
持續(xù)部署是指當(dāng)交付的代碼通過評審之后叭首,自動部署到生產(chǎn)環(huán)境中习勤。持續(xù)部署是持續(xù)交付的最高階段。這意味著焙格,所有通過了一系列的自動化測試的改動都將自動部署到生產(chǎn)環(huán)境图毕。
4)“開發(fā)人員提交代碼,持續(xù)集成服務(wù)器獲取代碼眷唉,執(zhí)行單元測試予颤,根據(jù)測試結(jié)果決定是否部署到預(yù)演環(huán)境,如果成功部署到預(yù)演環(huán)境冬阳,進(jìn)行整體驗(yàn)收測試蛤虐,如果測試通過,自動部署到產(chǎn)品環(huán)境肝陪,全程自動化高效運(yùn)轉(zhuǎn)驳庭。”
https://www.cnblogs.com/zhuwenlubin/p/5888498.html
2氯窍、1)Optional.of(T value)
饲常,該方法通過一個非 null
的 value 來構(gòu)造一個 Optional
,返回的 Optional
包含了 value 這個值狼讨。對于該方法贝淤,傳入的參數(shù)一定不能為 null
,否則便會拋出 NullPointerException
政供。
2)Optional.ofNullable(T value)
播聪,該方法和 of
方法的區(qū)別在于,傳入的參數(shù)可以為 null
—— 但是前面 javadoc 不是說 Optional
只能包含非 null
值嗎鲫骗?我們可以看看 ofNullable
方法的源碼:
原來該方法會判斷傳入的參數(shù)是否為 null
犬耻,如果為 null
的話,返回的就是 Optional.empty()
执泰。
3)Optional.empty()
枕磁,該方法用來構(gòu)造一個空的 Optional
,即該 Optional
中不包含值 —— 其實(shí)底層實(shí)現(xiàn)還是 如果 Optional
中的 value 為 null
則該 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.一個接口有兩個實(shí)現(xiàn)類沦寂,
1) @Resource(name = "manImpl")//注意是manImpl不是ManImpl学密,因?yàn)槭褂聾Service,容器為我們創(chuàng)建bean時默認(rèn)類名首字母小寫
2)@Autowired @Qualifier("manImpl")
5.Mybatis動態(tài)SQL Parameter 'name' not found. Available parameters are [arg1, arg0, param1, param2]
1)將語句中的具體參數(shù)名稱改為param1传藏,param2即可腻暮。
- 采用map傳遞參數(shù)parameterType="Map"