編碼過程中,我們會遇到各種問題。
借助搜索引擎,可以解決大部分問題,但總會遇到沒法解決的坑,也許它會困擾幾天或者更長時間。
要解決各種疑難雜症,成為高手,就要學會查一手資料。
什么是一手資料?
- 最直接的一手資料就是源代碼,看懂了源碼,一切問題迎刃而解
- 官方文檔與譯文(大部分官方文檔都是英文的,需要我們培養良好的英文閱讀能力)
- 優秀源碼的注釋也可能找到想要的答案
- 官方社區里的問題交流(關注官網與社區,能讓我們保持對產品特性的把握和未來發展的一些預判,提高職業素養。遇到問題順着思路就可以猜想到根源大概在哪)
優秀的源碼的設計一般都很復雜,需要根據官方文檔和一些專門的書籍,鳥瞰各功能模塊的作用、設計思路和代碼實現。
一開始讀源碼,都會雲里霧里,但是堅持每梳理一遍,就會 "對為什么這樣使用類庫有更深刻地體會"。
掌握了優秀的源碼的設計模式,能提高自己代碼的質量和擴展性。
閱讀源碼要我們有一定的代碼基礎、對源碼的設計思路有一定了解。Java 方面,可以了解一下
- 如何閱讀JDK的源碼?
- 如何用 IDE + maven 閱讀框架和各種類庫的源碼?
搜索引擎,建議使用 google。
個人感覺,google 搜索引擎更懂編程人員,總體來看它提供的結果更精准,更接近我想要的。
附一些 Java 方面常用的官網:
- Java www.oracle.com/technetwork/java/index.html
- OpenJDK openjdk.java.net
- w3c(萬維網聯盟) www.w3.org
- apache(開源項目非盈利組織) www.apache.org
- Oracle www.oracle.com/index.html
- MySQL www.mysql.com
- mongoDB(分布式文件存儲的數據庫) www.mongodb.com
- redis(key-value數據庫) redis.io
- zookeeper(分布式應用程序協調服務) zookeeper.apache.org
- spring spring.io
- hibernate(對象關系映射框架) hibernate.org
- mybatis(數據持久層框架) mybatis.org/mybatis-3
- nacos(動態服務發現、配置和服務管理組件) nacos.io
- apollo(攜程框架部門研發的分布式配置組件) github.com/ctripcorp/apollo
- Disconf(分布式系統配置管理組件) disconf.readthedocs.io
- kafka(構建實時數據管道和數據流組件) kafka.apache.org
- ELK(elasticsearch、logstash、kibana,實時日志系統) www.elastic.co
- elasticjob(分布式調度解決方案) elasticjob.io
- XXL-JOB(輕量級分布式任務調度平) github.com/xuxueli/xxl-job
- RabbitMQ(消息隊列) www.rabbitmq.com
- ActiveMQ(消息隊列) activemq.apache.org
- RocketMQ(消息隊列) rocketmq.apache.org
- Dubbo(服務框架) dubbo.apache.org
- Docker(應用容器引擎) www.docker.com
- tomcat(Web 應用服務器) tomcat.apache.org
- WebLogic(JavaEE 應用服務器) www.oracle.com/middleware/technologies/weblogic.html
- jboss(JavaEE 應用服務器) www.jboss.org
- jetty(servlet 容器) www.eclipse.org/jetty
- netty(高性能網絡框架) netty.io
- nginx(高性能 HTTP 和反向代理 web 服務器) nginx.org
- intellij idea(當前最火 Java IDE) www.jetbrains.com/idea
- eclipse(Java IDE) www.eclipse.org
- git(分布式版本控制系統) git-scm.com
- svn(版本控制系統) tortoisesvn.net
- guava(google 開源的工具類庫) guava.dev
- joda(高質量的底層 Java 類庫,如時間、錢等相關) www.joda.org
- Javassist(分析、編輯、創建 Java 字節碼的類庫) www.javassist.org
- ASM(Java 字節碼操縱框架) asm.ow2.io
- HikariCP(高性能數據庫連接池) github.com/brettwooldridge/HikariCP
- Druid(阿里的數據庫連接池) druid.apache.org
- DBCP(數據庫連接池) commons.apache.org/proper/commons-dbcp
- PDFBox(讀取和創建 PDF 文檔類庫) pdfbox.apache.org
- itext(PDF 文檔處理庫) itextpdf.com
- Xpdf(PDF 文檔處理庫) www.xpdfreader.com
- FOP(基於XSL:FO的打印格式處理) xmlgraphics.apache.org/fop
- JDOM(XML 文檔處理類庫) www.jdom.org
- dom4j(XML 文檔處理類庫) dom4j.github.io
- xerces(XML 文檔解析器) xerces.apache.org
- jaxp(解析和驗證 XML 文檔器) docs.oracle.com/javase/8/docs/technotes/guides/xml/jaxp
- httpclient(Java http 客戶端) hc.apache.org/httpcomponents-client-ga
- Apache Commons Email commons.apache.org/proper/commons-email
- jsoup(HTML 解析器) jsoup.org
- Jackson(json 解析與生成類庫) github.com/FasterXML/jackson-core
- Gson(json解析與生成類庫) sites.google.com/site/gson/Home
- fastjson(阿里的 json 解析與生成類庫) github.com/alibaba/fastjson
- poi(Office 組件的解析、生成器) poi.apache.org
- docx4j(docx 文檔處理類庫) www.docx4java.org/trac/docx4j
- thumbnailator(圖片處理庫) github.com/coobird/thumbnailator
- simpleimage github.com/alibaba/simpleimage
- image4j github.com/imcdonagh/image4j
- zxing(google 的二維碼處理庫) zxing.github.io/zxing
- FreeMarker(模版引擎) freemarker.apache.org
- velocity(模版引擎) velocity.apache.org
- Thymeleaf(模版引擎) www.thymeleaf.org
- JFreeChart(Java圖標類庫) www.jfree.org/jfreechart