sql慢查詢
經過優化,sql慢查詢已經由最多的5000條/日下降到100條/日,解決了99%的慢查詢。_
java.lang.NoClassDefFoundError ClassNotFoundException區別?
ClassNotFoundException:當程序試圖根據字符串名稱加載一個類但沒有找到對應類觸發。
Class.forName("xxx");
this.getClass().getClassLoader().findSystemClass("xxx");
this.getClass().getClassLoader().loadClass("xxx");
NoClassDefFoundError:當JVM虛擬機或ClassLoader試圖加載類定義時(import引入的類),但無法找到類。
NoClassDefFoundError發生在項目成功編譯,但是在運行時無法找到對應jar包,引發問題的原因是對應jar包沒有被加載;ClassNotFoundException發生在項目運行時反射調用某個類,但該類實際并不存在導致的。
NoClassDefFoundError是一個Error(JVM虛擬機無法發現本來應該發現的類),JVM無法啟動程序;ClassNotFoundException是一個Exception,因為反射沒有編譯期檢測,所以完全有可能出現各種問題,出現問題后程序是可以繼續運行的。
Java封裝對象比較 equals VS ==
Java中的基本類型,int/long/float...引用及值,所以可以直接使用"=="比較;其他包裝對象請一定一定一定要使用equals方法。
看一個包裝類型引發的bug:
lowAuditor屬性是Long類型,語句首先判斷該值不為空,然后比較是否相等;
private static class LongCache {
private LongCache(){}
static final Long cache[] = new Long[-(-128) + 127 + 1];
static {
for(int i = 0; i < cache.length; i++)
cache[i] = new Long(i - 128);
}
}
在Long處于-128~127之間時,由于Long緩存機制, == 是成立的;但是一旦lowAuditor大于127,那么即使兩個Long對象值相等,== 也是不成立的;所以為了避免出現這種緩存問題,請在比較包裝類是務必調用equals方法而不是==。
高效使用公司工具
上上周看了阿里的<盡在雙11>,發現阿里有很多工具,比如鷹眼(監控日志),報警平臺...其實我們58也是有很多通用工具,比如DB平臺,可以監控DB訪問量,查看慢查詢等;監控平臺可以查看應用訪問情況;數據分析平臺可以對數據進行多維度的分析。
仔細想想,工作中遇到的問題,大概率已經被別人遇到并且解決;與其自己思考如何解決,不如看看其他人事如何解決的;找找看公司是不是有現成的解決方案,這樣才能更好、更快的解決問題,避免重復造輪子。
Worktile
部門一直在用worktile來做需求管理,但一直沒有深入了解worktile,今天抽了個空,好好看了下worktile都有什么隱藏功能。
- 話題:worktile可以就某個問題進行討論。
- 文件版本:上傳文件可能會多次修改,在我修改文件時會記錄文件歷史記錄方便對比不同版本文件區別。
- 文檔:支持MarkDown語法,但是還可以使用石墨文檔這個大殺器。
石墨
?墨?檔,可多?實時協作的?檔和表格;還可以討論、查看歷史記錄。