在阿里的這些天

第一天

  • 上午九點到下午三點左右,入職活動結(jié)束,被帶到工位。

  • 安裝環(huán)境,

    • jdk 1.8 64位
    • maven這邊工程通過maven構(gòu)建,推薦使用maven3以上版本
    • IDEA 下載。idea自帶maven插件,但需要在默認(rèn)的settings.XML文件中添加內(nèi)部的maven遠(yuǎn)程倉庫地址
    • git下載安裝,代碼寄存在gitlab。
    • 所有安裝環(huán)境部署完畢之后,了解工具的使用
  • 熟悉團(tuán)隊的各位成員,相互認(rèn)識和學(xué)習(xí)

      • 注意事項:
      • 每周三晚上八點之前提交周報:寫這一周的學(xué)習(xí)內(nèi)容,遇到的問題,解決的方法,什么收獲
      • 每天的學(xué)習(xí)中遇到的問題記下來,晚上找時間向師傅請教。做到當(dāng)天的問題當(dāng)天解決。

第二天

  • 學(xué)習(xí)阿里的代碼編程規(guī)范
    • 根據(jù)規(guī)范中總結(jié)的經(jīng)驗,結(jié)合自己之前編碼中的個人習(xí)慣進(jìn)行反思,發(fā)現(xiàn)自己存在之前存在很多編碼不規(guī)范的地方,對這些地方進(jìn)行重點總結(jié)(規(guī)范內(nèi)容較多,后續(xù)還會繼續(xù)看)
  • 了解spring boot。由于內(nèi)網(wǎng)資料看不到,自己在外網(wǎng)搜一下相關(guān)教程,并使用spring boot搭建一個hello world程序。

第三天

  • 熟悉信用證基本概念,了解國內(nèi)跟單流程

  • java基礎(chǔ)復(fù)習(xí):

    • jvm類加載機(jī)制

      • 類加載器
      類加載器類型 名稱 負(fù)責(zé)加載 加載的類
      Bootstrap ClassLoader 引導(dǎo)類加載器 核心java class 所有java.開頭的類
      Extension ClassLoader 擴(kuò)展類加載器 擴(kuò)展的java class javax.開頭的、放在ext目錄下面的
      System ClassLoader 系統(tǒng)類加載器 用戶程序自身的class 系統(tǒng)中配置的環(huán)境變量classpath路徑下面的類
      • 類加載機(jī)制
        • 全盤負(fù)責(zé):當(dāng)一個classLoader加載一個類的時候,該class所依賴的所有class 也由這個classloader負(fù)責(zé)載入。除非是顯示的使用另一個classLoader載入。
        • 雙親委托:先讓父類的加載器加載,如果父類加載器無法加載的話,再該類的加載器進(jìn)行加載。
    • 垃圾回收

    • 內(nèi)存模型

    • 基礎(chǔ)集合類

    • jdk 8 新特性

    • servlet

      • 生命周期:
        • 初始化:servlet容器會在啟動時初始化一些servlet,如果在web.xml中的servlet標(biāo)簽之間加入load-startup 1
  • maven工具學(xué)習(xí),重點關(guān)注如下問題

    • 如何解決jar沖突

      • 在項目中的pom文件中將沖突依賴排除,具體寫法:比如我們要講一個依賴中的相應(yīng)jar包排除

        <dependency>
           <groupId>com.xxx.xx</groupId>
           <artifactId>xxx</artifactId>
           <version>x</version>
           <exclusions>
               <exclusion>
                   <artifactId>com.springsource.slf4j.org.apache.commons.logging</artifactId>
                   <groupId>org.slf4j</groupId>
               </exclusion>
           </exclusions>
        </dependency>
        

        ?

      ?

第四天

  • START

    • 之前有過java web開發(fā)經(jīng)驗,對于servlet的生命周期以及基本開發(fā)過程有了解,但對于filter和listener了解不是很深。對這些盲點進(jìn)行逐一攻破
    • 對web.xml的所有常用的配置深入掌握(規(guī)范、原理),對不常用的標(biāo)簽要有所了解
    • 能夠準(zhǔn)確描述出servlet、filter、listener各自發(fā)揮的作用、生命周期、加載順序等
    • 使用filter、servlet、listener編寫一個動態(tài)網(wǎng)頁小demo
    • filter servlet listener:
    • 初始化順序:listener -》filter -》servlet
    • 銷毀順序:servlet- 》filter-》listener(和初始化順序相反)
  • web.xml

    ?

  • filter

    • 定義:過濾器,對web服務(wù)器所管理的web資源:例如jsp、servlet、靜態(tài)文件等進(jìn)行攔截。例如實現(xiàn)URL級別的權(quán)限訪問、過濾敏感詞匯
    • 主要用于對httpServletRequest進(jìn)行預(yù)處理,也可以對httpServletResponse進(jìn)行后處理。
    • 完整流程:FIlter對用戶請求預(yù)處理--》servlet對請求進(jìn)行做出相應(yīng)--》FIlter在對相應(yīng)進(jìn)行后處理

    filer和servlet請求響應(yīng)圖

    • filter鏈:在一個web應(yīng)用中,可能會有多個filter,這些filter 組合起來稱作filter鏈。filter的執(zhí)行順序根據(jù)filter在web.xml中定義的順序一致

    • filer 生命周期:和servlet一樣,filter的創(chuàng)建和銷毀由web容器負(fù)責(zé),當(dāng)web容器啟動時,將創(chuàng)建filter實例對象,調(diào)用init方法。filer對象只會創(chuàng)建一次,故filer是單例的。在多線程情況下會存在線程安全性問題,故不要在file類中定義屬性變量,最好是無狀態(tài)的,如果非要使用,一定要使用線程安全的類。比如并發(fā)包中的類。

    • filer的四種攔截方式:REQUEST 、FORWORD、 INCLUDE、ERROE

    • REQUEST:直接訪問目標(biāo)資源

    • FORWORD:轉(zhuǎn)發(fā)

    • INCLUDE:例如:<jsp:include>

    • ERROR:web.xml中配置error-page時

      可以在filter-mapping中添加多個dispatch子元素

    • filer用在哪:權(quán)限檢查、編碼過濾

    • 如何使用filer:實現(xiàn)javax.servlet.Filer接口,并覆蓋doFilter方法

    public class MyFilfer implements Filer{
      @Override
      public void doFilter(ServletRequest srep, ServletResponse sresp, FilterChain fc) {
         //TODO   
      }
    }
    

    在web.xml中添加filter

    <filter>
      <filter-name>myFilter</filter-name>
      <filer-class>MyFilfer</filer-class>
    </filter>
    <filter-mapping>
       <filter-name>myFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    

    ?

  • servlet

    • 生命周期:servlet實例的創(chuàng)建有兩個時機(jī):
    • 客戶端第一次請求某個servlet時,系統(tǒng)創(chuàng)建servlet的實例
    • web應(yīng)用啟動時立刻創(chuàng)建servlet 實例,需要在web.xml中配置<load-on-startup>1(或大于1)</load-on-startup>
    • 容器中只存在一個servlet實例。單例多線程的。故也是線程不安全
  • Demo :使用servlet 和 filter 實現(xiàn)登錄小程序

    1. filter 對用戶請求進(jìn)行攔截,驗證是否登錄。如果session有用戶信息,則放過。否則redirect到登錄頁面
    2. servlet 對登錄請求進(jìn)行處理,將用戶信息保存到session中

    git分支地址:http://gitlab.alibaba-inc.com/shixu.sx/user_login/tree/master

  • 問題解決

    • JVM性能調(diào)優(yōu)監(jiān)控常用命令

    • jps :列出jvm中正在運(yùn)行的進(jìn)程信息

      -q 不輸出類名、Jar名和傳入main方法的參數(shù)
      -m 輸出傳入main方法的參數(shù)
      -l 輸出main類或Jar的全限名
      -v 輸出傳入JVM的參數(shù)
      
      shixu.sx@$ jps -l
      9520 sun.tools.jps.Jps
      17924 org.apache.catalina.startup.Bootstrap
      9812 org.jetbrains.jps.cmdline.Launcher
      14184
      14440 org.jetbrains.idea.maven.server.RemoteMavenServer
      
    • jstack: 主要用來查看某個java線程堆棧信息

      場景:找出某個java 進(jìn)程中最耗費cpu的java線程,并定位堆棧信息

      方案:

      1. 首先找出該java進(jìn)程的進(jìn)程id,比如要找bootstrap進(jìn)程,

        1. 在windows環(huán)境下,命令行輸入:jps | findstr "bootstrap"
        2. linux環(huán)境下,輸入:jps | grep "bootstrap"
      2. 根據(jù)進(jìn)程id,找出該進(jìn)程內(nèi)最耗費資源的線程信息

        命令行輸入:top -Hp 進(jìn)程id, 然后根據(jù)列出的線程信息找到time最長的線程id

        1. 將線程id轉(zhuǎn)化為十六進(jìn)制,然后在命令行輸入

          jstack 進(jìn)程id | grep 線程id對應(yīng)的十六進(jìn)制數(shù),根據(jù)打印出來的堆棧信息可以知道是哪個線程的問題

    • jmap: 用來查看堆內(nèi)存使用情況

      使用jmap -heap pid查看進(jìn)程堆內(nèi)存使用情況。

    • jstat:jvm統(tǒng)計監(jiān)測工具

      圖片

      S0C、S1C、S0U、S1U:Survivor 0/1區(qū)容量(Capacity)和使用量(Used)
      EC、EU:Eden區(qū)容量和使用量
      OC、OU:年老代容量和使用量
      PC、PU:永久代容量和使用量
      YGC、YGT:年輕代GC次數(shù)和GC耗時
      FGC、FGCT:Full GC次數(shù)和Full GC耗時
      GCT:GC總耗時
      堆內(nèi)存 = 年輕代 + 年老代 + 永久代
      年輕代 = Eden區(qū) + 兩個Survivor區(qū)(From和To)
      

    • 查看網(wǎng)絡(luò)端口命令:

    • windows:

      • 查看所有端口占用:netstat -ano
      • 查看指定端口占用:netstat -ano | findstr "端口號"
    • linux:

      • 查看所有端口占用:netstat -anp
      • 查看指定端口占用:netstat -anp | grep "端口號"
    • ?

第五天

  • 9點半到10點半,學(xué)習(xí)代碼規(guī)約

    • 問題:

      1. 規(guī)約中一條:避免在有鎖的代碼塊中調(diào)用RPC方法,為什么?

        A:一般情況下,鎖的粒度要越小越好,調(diào)用RPC本身就是一種粗粒度的處理,所以不建議放在同步代碼塊中。其次,RPC遠(yuǎn)程調(diào)用不確定性太多,比如運(yùn)行時間長、超時、事務(wù)回滾等,如果RPC方法需要運(yùn)行很長時間,那么該鎖會一直被占用,導(dǎo)致其他線程等待時間過長。

  • jvm

    • jvm內(nèi)存區(qū)域
    • pc寄存器:程序計數(shù)器,線程私有,保存當(dāng)前線程執(zhí)行的字節(jié)碼地址,唯一一個沒有規(guī)定任何OOM的區(qū)域
    • 虛擬機(jī)棧:線程私有,每個線程被創(chuàng)建時都會同時創(chuàng)建一個對應(yīng)的虛擬機(jī)棧,棧中存放著棧幀,每一個棧幀對應(yīng)一個方法調(diào)用。棧幀中保存局部變量表、操作數(shù)棧、動態(tài)鏈接等
    • 方法區(qū):線程共享,大小可以動態(tài)調(diào)整,主要存放:類信息(名稱、方法、字段等元信息)、靜態(tài)變量。(注:jdk 8 之后方法區(qū)已經(jīng)不存在,取而代之的是metaspace,一塊本地內(nèi)存,由于類的元數(shù)據(jù)分配在本地內(nèi)存中,元空間的最大可分配空間就是系統(tǒng)可用內(nèi)存空間。)
    • java堆:對象和數(shù)組都在這里分配空間。線程共享。垃圾回收的主要區(qū)域
    • 垃圾回收算法回顧
    • 遇到的問題
    1. 在JVM規(guī)范中規(guī)定,如果線程執(zhí)行的是非native方法,則程序計數(shù)器中保存的是當(dāng)前需要執(zhí)行的指令的地址;如果線程執(zhí)行的是native方法,則程序計數(shù)器中的值是undefined。為什么是undefined?如果是undefined的話,那么當(dāng)cpu再次切換執(zhí)行到該本地方法是,怎么找到要代碼行的地址?
    2. ?
  • maven 定義和相關(guān)命令回顧

    • 項目管理和構(gòu)建自動化工具

    • maven倉庫:

    • 本地倉庫:第一次運(yùn)行maven構(gòu)建,會自動下載所有依賴的jar文件到本地倉庫中。它避免了每次構(gòu)建都引用遠(yuǎn)程倉庫的依賴文件

    • 中央倉庫:maven社區(qū)提供,不需要配置。

    • 遠(yuǎn)程倉庫:如果maven在中央倉庫也找不到依賴的文件,會從用戶提供的遠(yuǎn)成倉庫中查找

    • maven依賴搜索順序:1. 本地倉庫 2. 中央倉庫 3. 遠(yuǎn)程倉庫 4. 都找不到,報錯編譯失敗

    • 創(chuàng)建工程:

    命令:mvn archetype:generate -DgroupId=com.companyname.helloworld -DartifactId=helloworld Dpackage=com.company.helloworld -Dversion=1.0-SNAPSHOT

    • 構(gòu)建程序:

    命令:mvn package

    • 安裝工程:

    命令:mvn install

    (安裝到本地后,在本地倉庫會有該工程,其他的項目可以依賴該工程)

    • 生成文檔

    命令:mvn site

    • spring

      • 控制翻轉(zhuǎn)和依賴注入:

      • bean作用域

      • bean生命周期

      • 依賴注入方式

      • 基于set方法

      • 基于構(gòu)造方法

        (二者優(yōu)劣)

      • AOP原理,代理模式(動態(tài)代理cglib和jdk代理區(qū)別)

      • 事務(wù)管理(編程式事務(wù)和聲明式事務(wù))

      • demo小程序

  • 總結(jié):

    • 今天主要是對spring的基礎(chǔ)知識和核心概念,以及常用的配置等進(jìn)行了復(fù)習(xí)?;仡欉^程中發(fā)現(xiàn),很多知識點停留在會用的水平,對底層實現(xiàn)不了解。比如注解這一塊,jvm在加載類的時候遇到注解該怎么處理、注解是如何引入相應(yīng)的功能的,對這些問題了解以后,還要思考如何自己定義一個注解。周末要對這一點進(jìn)行深入剖析。同時對于spring boot進(jìn)行系統(tǒng)學(xué)習(xí)。

第六天

  • 上午和師傅以及徐瀟師兄一起探討了在瀏覽器輸入www.alibaba.com,之后發(fā)生的一切,結(jié)合自己對這個問題的認(rèn)識,發(fā)現(xiàn)自己對阿里整個網(wǎng)絡(luò)體系以及服務(wù)架構(gòu)了解很不夠。

    • 域名解析:瀏覽器dns緩存、本地dns緩存、本地host文件、請求根dns服務(wù)器解析(查詢dns根域,自頂向下進(jìn)行查詢)
    • http連接:TCP三次握手,建立連接,客戶端與服務(wù)器
    • 到達(dá)阿里負(fù)載均衡層(F5或者LVS,F(xiàn)5是硬件實現(xiàn)負(fù)載均衡,LVS針對傳輸層TCP\IP)
    • VIPserver\vip
    • 統(tǒng)一接入(HTTPS解密成HTTP,這是一個CPU密集型任務(wù),在這里進(jìn)行處理可以降低下游服務(wù)器壓力)
    • Tengin\apach\NGINX(負(fù)載均衡,應(yīng)用層負(fù)載均衡)
    • 感想:對阿里的整體網(wǎng)絡(luò)架構(gòu)了解還很不夠,比如VIP和VIPserver在其中的具體作用,CDN等如何實現(xiàn)加速,怎么更快解析DNS,如果找到一條更短的路由,等等,這些點以后要一一弄明白。
  • spring boot start

    今天學(xué)習(xí)了spring boot,看了springboot的一些視頻,對spring boot有了一定的初步的認(rèn)識,初步了解了spring boot的一些基本理念,如可以替換之前給予xml的配置,可以選用@configuration 和application.properties和application.yml來進(jìn)行配置spring bean。了解到了spring starters ,通過這個可以減少maven依賴中的版本不匹配問題。

    spring boot的學(xué)習(xí)中,通過運(yùn)行demo,加深了對spring boot的理解,demo中集成了JPA。接下來會將springboot中加入其它start比如:mybatis、tddl等,進(jìn)行學(xué)習(xí)。

    感想:基于之前學(xué)習(xí)spring的基礎(chǔ),spring boot的學(xué)習(xí)整體順利。但目前對spring boot的理解更多的是在spring boot的使用上,并理解相關(guān)的看到的一些注解,對spring boot的一些原理的還需要后面繼續(xù)深入。

    • 三種啟動方式:
      • main方法中啟動
      • mvn:spring-boot:run
      • mvn install 然后:java -jar 。。
    • controller的使用
      • @Controller:處理http請求
      • @RestController = @Controller + @ResponseBody:Spring4之后新加的注解,原來返回json需要@ResponseBody配合@Controller
      • @RequestMapping:配置url映射
    • 獲取參數(shù)
      • @PathVariable:獲取URL中的數(shù)據(jù)
      • @RequestParam:獲取請求參數(shù)中的值
      • @GetMapping@PostMapping:組合注解

第七天

  • 今天主要對HSF進(jìn)行了學(xué)習(xí)。

在系統(tǒng)越來越復(fù)雜的情況下,傳統(tǒng)的架構(gòu)會存在如下的問題:

  • 各個模塊耦合度過高,導(dǎo)致升級更新困難,一處變處處變
  • 擴(kuò)展性差
  • 團(tuán)隊開發(fā)困難
  • 分布式部署非常困難

而HSF是一個遠(yuǎn)程RPC調(diào)用框架。面向服務(wù),降低耦合性

  • HSF:

通過配置provider和consumer的bean就ok。

provider暴露自己提供服務(wù)的接口,consumer根據(jù)接口進(jìn)行調(diào)用。

返回的對象序列化后,通過網(wǎng)絡(luò)傳輸。

感想:關(guān)于hsf,今天學(xué)習(xí)的內(nèi)容主要是對基本原理和基本概念進(jìn)行學(xué)習(xí),然后運(yùn)行了一個小demo,對服務(wù)的發(fā)布和服務(wù)的消費進(jìn)行了簡單的實現(xiàn)。接下來還會更深入的學(xué)習(xí)。

  • OCR識別的結(jié)果亂碼問題:

針對ocr識別的結(jié)果中文亂碼的問題,我進(jìn)行了單元測試,最后通過將亂碼內(nèi)容用iso-8859-1編碼方式轉(zhuǎn)化為字節(jié),然后再用utf-8解碼,解決了這個問題。iso-8859-1編碼方式是不支持中文的,所以當(dāng)對含有中文的內(nèi)容使用這種編碼方式進(jìn)行編碼的時候,再次解碼肯定會出現(xiàn)亂碼。

因為java本身是跨平臺的語言, 亂碼問題在java開發(fā)中非常常見,比如java的IO操作、數(shù)據(jù)庫、內(nèi)存、jav web等多種場景,而最終的問題就是出現(xiàn)在字節(jié)和字符的轉(zhuǎn)換上面。

第八天

  • 繼續(xù)學(xué)習(xí)HSF框架

通過看文檔,理解關(guān)于服務(wù)提供和服務(wù)的消費過程:

  • 服務(wù)提供者將提供的服務(wù)和自己的IP注冊至注冊中心ConfigServer
  • ConfigServer會將服務(wù)提供者的IP列表推送至服務(wù)消費者
  • 服務(wù)消費者發(fā)起調(diào)用時,直接從ConfigServer推送過來的服務(wù)提供者的IP列表中選擇一個IP發(fā)起遠(yuǎn)程調(diào)用

標(biāo)準(zhǔn)的service方式RPC:

  • service 定義:基于OSGI的service定義方式
  • 底層通信方式:萬變不離tcp\ip ,io方面使用異步NIO,并使用長連接

Provider和Consumer的啟動和處理過程

  • 初識TDDL

問題:單一數(shù)據(jù)庫無法滿足性能要求

  • 數(shù)據(jù)切分
  • 讀寫分離
  • 系統(tǒng)容災(zāi)和主備切換以及運(yùn)維等問題

TDDL提供用戶訪問和數(shù)據(jù)庫之前的隔離,實現(xiàn)透明操作

1.直接提供分庫分表,讀寫分離、主從備份等解決數(shù)據(jù)庫擴(kuò)展問題的功能.

2.基于配置模型構(gòu)建的包括數(shù)據(jù)庫在線擴(kuò)容、準(zhǔn)實時數(shù)據(jù)同步服務(wù)、運(yùn)維平臺等支撐系統(tǒng)。

核心設(shè)計:

  • SQL解釋器 :語法樹、查詢匹配規(guī)則、分庫分表
  • 查詢優(yōu)化器
  • 執(zhí)行器

HSF原理

HSF架構(gòu)

81c9daf90bf2cdaf81edd7575ed29850.png
81c9daf90bf2cdaf81edd7575ed29850.png

HSF服務(wù)架構(gòu)主要幾塊組成:

  • ConfigServer: 用于服務(wù)的注冊與發(fā)現(xiàn),server通過向ConfigServer注冊自己的服務(wù),會在ConfigServer注冊自己的服務(wù)信息,如服務(wù)地址,發(fā)布的接口,服務(wù)版本等內(nèi)容。client端可以從ConfigServer訂閱自己想要的服務(wù),之后ConfigServer就會把訂閱的服務(wù)的信息發(fā)送給client,之后client和server就可以建立連接,進(jìn)行RPC調(diào)用了。
  • Diamond: 主要用于一些動態(tài)的配置內(nèi)容,例如ConfigServer的地址,路由匹配,動態(tài)負(fù)載等配置。這些配置內(nèi)容,可以通過在HSF服務(wù)治理網(wǎng)站上進(jìn)行配置。
  • Redis:負(fù)責(zé)存儲HSF的元數(shù)據(jù),consumer和provider隔一段時間會將調(diào)用信息進(jìn)行上報,同時存儲了應(yīng)用名和服務(wù)映射等信息。

服務(wù)注冊發(fā)現(xiàn)流程

HSF的基本架構(gòu)和服務(wù)調(diào)用方調(diào)用服務(wù)所需要需要經(jīng)過的流程。
HSF的基本架構(gòu)和服務(wù)調(diào)用方調(diào)用服務(wù)所需要需要經(jīng)過的流程。
  1. Provider從Diamond中獲取Configserver的地址、類型等信息。
  2. Provider在Configserver上注冊自己的IP地址、端口號、服務(wù)名、版本號、Group號信息。
  3. Provider定期將元數(shù)據(jù)(調(diào)用次數(shù)、服務(wù)狀態(tài)等等)上報給Redis,用于服務(wù)治理。
  4. Consumer從Diamond中獲取Configserver的地址、類型等信息。
  5. Consumer根據(jù)服務(wù)名、版本號、Group號信息向Configserver訂閱Provider服務(wù)。
  6. Consumer定期將元數(shù)據(jù)(調(diào)用次數(shù)、服務(wù)狀態(tài)等等)上報給Redis,用于服務(wù)治理。
  7. Configserver推送Provider的IP地址列表給Consumer。
  8. Consumer選擇一個IP地址,與該P(yáng)rovider建立長連接、通過RpcRequest和RpcResponse進(jìn)行調(diào)用。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,500評論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,253評論 6 342
  • 從三月份找實習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍(lán)閱讀 42,747評論 11 349
  • 此篇翻譯的是Spring Boot官方指南 Part III. 使用 Spring Boot (Using Spr...
    K天道酬勤閱讀 6,935評論 0 21
  • 昨天下午兩點半到的巴黎戴高樂機(jī)場。坐了有史以來最熱的地鐵,巴黎地鐵沒有空調(diào),32℃的天曬著太陽坐輕軌,還經(jīng)歷了同伴...
    小easy閱讀 314評論 2 3

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