日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Java Web技术经验总结(二)

發(fā)布時(shí)間:2025/7/14 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java Web技术经验总结(二) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

該系列的第一篇在此:Java Web技術(shù)經(jīng)驗(yàn)總結(jié)一,主要包含我在日常工作中的經(jīng)驗(yàn)和心得體會(huì)(如有不足之處歡迎指出)。

  • Maven的使用經(jīng)驗(yàn)

    • 依賴的scope有test、provided、compile等。test:一般是單元測(cè)試場(chǎng)景使用,在編譯環(huán)境加入classpath,但打包時(shí)不會(huì)加入,如junit等;provided:表示容器或者JDK已經(jīng)提供該依賴,打包時(shí)不需要打包入war;compile:默認(rèn)范圍,在工程環(huán)境的classpath(編譯環(huán)境)和打包(如果是WAR包,會(huì)包含在WAR包中)時(shí)候都有效。
  • JVM相關(guān)參考資料

    • Minor gc vs Major gc vs Full gc
    • JDK內(nèi)置工具的使用:JDK內(nèi)置工具的使用和例子
  • JVM觀察和調(diào)試相關(guān)的命令

    • 排查full gc問(wèn)題,可以通過(guò)命令jstat -gccause java_pid 1s查看gc發(fā)生的原因
    • 觀察gc.log的時(shí)候:(1)GC開頭的都是Young GC;(2)CMS-initial-mark標(biāo)識(shí),且沒(méi)有full字樣的,是old區(qū)的GC;(3)帶full字樣的是fgc(例外情況:-XX:+ExplicitGCInvokesConcurrent,這個(gè)參數(shù)會(huì)把full gc轉(zhuǎn)成cms gc,因此gc.log中不會(huì)有full gc字樣)。
    • 查看JVM進(jìn)程:ps -ef|grep java
    • 查看JVM內(nèi)存占用信息:
      sudo -u admin /opt/taobao/java/bin/jstat -gccause ${PID} 1000 1000
    • dump內(nèi)存:
      sudo -u admin /opt/taobao/java/bin/jmap -F -dump:live,file=/home/admin/heap.bin ${PID}
  • 線上機(jī)器每隔一個(gè)小時(shí)full gc問(wèn)題排查

    • 參考文章
      • 1. tomcat 7.0中full gc頻繁
      • 2. JVM中的ExplicitGCInvokesConcurrent選項(xiàng)
    • 排查思路
      • 首先,懷疑jdk版本問(wèn)題,升級(jí)之后依然存在,排除
      • 第二,懷疑tomcat版本問(wèn)題,由7.0.26.1升級(jí)到7.0.54.1之后消失
      • 分析gc.log,每隔一小時(shí)出現(xiàn)一次cms收集,最開始認(rèn)為這不是full gc;后查詢資料發(fā)現(xiàn)ExplicitGCInvokesConcurrent選項(xiàng)會(huì)將full gc轉(zhuǎn)換成cms gc,因此gc.log中沒(méi)有“full gc”字樣;然后根據(jù)參考文章1和參考文章2定位問(wèn)題。
    • 結(jié)論:tomcat 7.0.26.1版本中的JreMemoryLeakPreventionListener,該監(jiān)聽器每隔一個(gè)小時(shí)會(huì)觸發(fā)一次System.gc()。根據(jù)tomcat官方的bug fix報(bào)告可知,在7.0.28版本將該間隔fix成Long.MAX_VALUE了。
  • 在單元測(cè)試中加載配置文件

    • 在spring項(xiàng)目中,使用Mockito+JUnit測(cè)試業(yè)務(wù)邏輯時(shí),有時(shí)需要讀取一些外部配置文件(例如biz.properties),可以參考Spring下的單元測(cè)試(JUnit)--加載配置文件。
    • 可以考慮使用@Properties定位配置文件、使用@Value注入配置屬性;不過(guò)在這種情況下,需要解決不同環(huán)境下的屬性配置問(wèn)題;
    • 可以考慮通過(guò)暴露set接口,在單元測(cè)試中設(shè)置對(duì)應(yīng)的屬性,從而避免處理外部配置文件的先關(guān)技術(shù)。
  • Mockito + Spring + AssertJ是Spring項(xiàng)目中寫單元測(cè)試的最佳組合,優(yōu)點(diǎn)有:輕量、簡(jiǎn)潔、可以測(cè)試web層(攔截器、過(guò)濾器等)、可以測(cè)試異常分支。

  • log4j中的日志級(jí)別有:DEBUG、INFO、WARN、ERROR(級(jí)別依次變高),在生產(chǎn)環(huán)境中一般采用ERROR級(jí)別、在開發(fā)環(huán)境中使用DEBUG級(jí)別。如果日志級(jí)別為DEBUG級(jí)別 ,則代碼中的logger.debug()、logger.info()、logger.warn()和logger.error()等日志都會(huì)打印;如果日志級(jí)別為WARN,則只會(huì)打印WARN和ERROR日志。參考:日志級(jí)別的選擇

  • 給Controller的@RequestMapping方法加日志,通過(guò)AOP不容易加(有解決方案),一個(gè)比較迂回的方法是,讓Controller使用一個(gè)Service代理(包含一個(gè)process方法),攔截這個(gè)process方法比較容易。

  • Java Web的最佳實(shí)踐:Spring Boot + Thymeleaf,基礎(chǔ)技術(shù)包括:Spring + HTML + CSS。JSP,Velocity和FreeMarker,那是上一代的模板引擎,應(yīng)該嘗試一下新的東西。參考:Thymeleaf官網(wǎng)

  • 數(shù)據(jù)庫(kù)部分,企業(yè)級(jí)Java Web要求的知識(shí)架構(gòu)很多,后端就包括數(shù)據(jù)技術(shù),最常用的是關(guān)系型數(shù)據(jù)庫(kù)MySQL,可以閱讀下列文章補(bǔ)充一點(diǎn)知識(shí)點(diǎn)。當(dāng)然,最常用、最有效的參考資料是官方文檔。

    • 如果有人問(wèn)你數(shù)據(jù)庫(kù)的原理,叫他看這篇文章
    • MySQL加鎖處理分析
    • caoz的“如何應(yīng)對(duì)并發(fā)”系列
  • 常用概念,PV:請(qǐng)求次數(shù)/day;UV:不同uuid的個(gè)數(shù)/day。對(duì)于自己負(fù)責(zé)的業(yè)務(wù),有兩個(gè)日志是必須的:BI日志和業(yè)務(wù)監(jiān)控日志——BI日志用于計(jì)算業(yè)務(wù)指標(biāo),可以指導(dǎo)運(yùn)營(yíng)和產(chǎn)品的動(dòng)作、業(yè)務(wù)日志用于研發(fā)同學(xué)監(jiān)控自己服務(wù)的穩(wěn)定性、機(jī)器的使用率、接口的QPS等指標(biāo)。

  • 服務(wù)的穩(wěn)定性,需要良好的監(jiān)控保障,主要包括幾個(gè)方面:系統(tǒng)監(jiān)控、應(yīng)用監(jiān)控(JVM)、業(yè)務(wù)監(jiān)控(PV/UV/RT)和調(diào)用鏈路監(jiān)控等。



  • 總結(jié)

    以上是生活随笔為你收集整理的Java Web技术经验总结(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。