日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java Web技术经验总结(二)

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

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

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

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

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

    • 排查full gc問題,可以通過命令jstat -gccause java_pid 1s查看gc發(fā)生的原因
    • 觀察gc.log的時候:(1)GC開頭的都是Young GC;(2)CMS-initial-mark標識,且沒有full字樣的,是old區(qū)的GC;(3)帶full字樣的是fgc(例外情況:-XX:+ExplicitGCInvokesConcurrent,這個參數(shù)會把full gc轉(zhuǎn)成cms gc,因此gc.log中不會有full gc字樣)。
    • 查看JVM進程: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}
  • 線上機器每隔一個小時full gc問題排查

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

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

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

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

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

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

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

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



  • 總結

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

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