面試題:Java程序員最經常使用的20%技術 已看1

首先經常使用api(String,StringBuffer/StringBuilder等)javascript

 

1.集合類,線程類css

 

2.Servlet(不多用純粹的servlet寫,但你要懂,由於不少框架都是基於servlet封裝的)html

 

3.json,xml讀寫前端

 

4.數據庫訪問(CRUD,事務,鏈接池)java

 

5.http請求(HttpClient)mysql

 

6其餘,包括經常使用框架,設計模式,面向對象linux

 

初級程序員會這些就能夠寫項目了。後期遇到的問題就會複雜得多,要靠各類經驗和知識的積累。git

 

除了要掌握的20%之外還要掌握些什麼知識才能遊刃有餘。下面說說我接觸(使用)過、的東西吧。程序員

QQ圖片20170508142644.png

java以分佈式應用豐富的生態聞名,在分佈式系統中逃不過CAP的抉擇。早早了解一些分佈式一致性協議paxos、raft等。學習zookeeper的原理和使用場景(metadata、分佈式鎖、leaderEletion… etc)web

RPC框架在SOA架構中起着重要的做用,好好探究終是有好處的,在這裏推薦阿里巴巴的dubbo框架,同時會netty、mina等網絡庫

Hadoop系列 Storm Spark 等離線\實時計算框架

ElasticSearch\SolrCloud 分佈式搜索 ELK 日誌相關的東西對這些比較敏感,固然在更多的場景使用ES也是有不少的

消息隊列 kafka\MetaQ RabbitMQ 恩,昨天ZeroMQ(不徹底算做MQ)的做者選擇安樂死了,願天堂沒有痛苦

而後就是各類基礎知識,編程語言、網絡方面、數據庫、數據結構和算法。不要以爲任何一項都精通了,敢說精通的知乎能有幾個。

 

1.學會使用eclipse,svn等IDE和工具(不用說了吧,主要是看你工做的地方,好比你們用eclipse你想用IntelliJ IDEA也能夠,可是剛工做確定不少不懂,這時候暫時還不要標新立異的好,出了問題好問。固然你是ide大神請無視)

 

2. 剛入職還接觸不到核心工做,就讓我先改改頁面什麼的,做爲web開發html、css、和javascript不用精通,至少須要瞭解用法和語法吧,雖然 有前端工程師,可是這個確定也是要了解的(本身公司小項目組,各個都被逼成全棧了)。javascript其實仍是很強大的,可是剛開始不用寫的很深,很 多輪子能夠用,好比easyui,正如@王大胖 所說的

 

會查閱官方文檔

 

知道用法往網頁裏嵌,而後後臺按格式把數據傳到前臺就好。

 

3. 而後開始逐步日後臺寫了,熟悉下設計模式,若是太多太難理解能夠先理解工廠模式,寫一個接口再用一個或若干個實現類實現這個接口,須要用的時候在根據須要 來肯定用哪一個實現類。(一開始不理解這麼作這麼繁瑣有什麼用,可是自從上次項目的數據庫從oracle換成mysql就知道這麼作其實大有用處)通常項目 開發都會用到設計模式,不瞭解可能會摸不清楚整個項目的架構,無從下手。

 

4.不一樣公司用的框架不同,但struts,spring仍是用 的比較多的,因此這兩個東西仍是比較熟悉的好,否則你可能連整個項目的架構都不清楚,不要說本身寫,連改都很難入手。好比項目的跳轉是怎麼配的,哪一個配置 文件表明了什麼。(一開始我把項目本地跑起來之後我連主頁在哪是哪一個文件怎麼進去的都不清楚T.T,一直在找index.jsp而後才知道項目用 freemarker作的,是一個ftl文件)

 

5.web項目要操做數據庫的工做是少不了的了,本身跟的項目沒用hibernate,主要用的是StringBuffer拼接sql,若是從事web開發,sql仍是要比較熟的。按帶個人小哥說,sql這麼厲害,就沒有sql完成不了的事。

 

<!–(這句正確與否觀望中,可是一開始作一個抽取功能,本身把全部的人抽到程序裏再抽,後來直接用sql抽了返回抽中的結果就行了,越用愈加現sql真的猴犀利呀)–>

 

提醒,不該該用sql在數據庫裏作太多事,具體解決方法能夠參考以前提的另一個問題

 

請問多個功能須要同批數據是在程序裏面遍歷好仍是sql數據庫返回好? – 編程

 

可是sql的重要仍是不言而喻的

 

6. 本身感受作web項目設計高深算法的可能作的比較深纔會遇到,更多的是對字符串和數值格式的操做,好比後臺從數據庫抽出來到前臺怎麼展現,用戶輸入的數據 怎麼怎麼存到數據庫裏,因此最好熟悉下字符串的操做,分割呀合併呀,String轉float、int什麼的,日期格式呀什麼的。

 

若是公司有專業運維,服務器部署什麼的交給他們就行了,若是沒有就最好仍是瞭解下,遠程鏈接呀,linux的一些簡單的命令呀,tomcat呀什麼的

 

固然做爲一個提供分佈式服務接口的java工程師,須要熟練具有如下技能點:

 

一、java基本語法:最好能偶爾使用java8 lambda簡化代碼邏輯,google的guava庫等等

 

二、docker基本使用:現在愈來愈多的公司選擇將服務部署在docker上,構成獨立的服務雲平臺,並且docker操做和資源調度分配很爽的。

 

三、消息隊列:kafka、rabbitmq、notify、metamq等等,消息隊列做爲處理高吞吐量,不計較及時結果的應用場景的工具很是受歡迎。所採用的實際應用手法就是消息隊列+補償機制。

 

四、zookeeper或Etcd:這倆種都是分佈式服務提供服務的註冊中心,經過它們能夠實現多服務多機器部署且實現負載均衡。

 

五、RPC:遠程調用的場景使用愈來愈普遍,特別在分佈式服務中更加離不開它。它能使多個服務間的調用如同調用本地方法同樣簡便。針對RPC的實現使用較爲普遍的有Thrift、protobuffer等。

 

六、Netty:是一個高性能、異步事件驅動的NIO框架。能爲RPC提供高性能的調用

 

七、git和maven等項目管理及依賴包管理的工具,這是協做開發的基礎。

 

八、Redis:差點忘了這個必知必會的技能...Redis做爲高性能的內存數據庫,基本覆蓋了訪問量大的服務緩存。固然memcached前幾年用的也居多,不過功能可被Redis替代。除了緩存也能夠提供分佈式鎖機制。

 

最近去面試Java的東時學員整理:

0、 集合框架:源碼閱讀,重點理解 HashMap,ArrayList 等經常使用集合類;

一、 併發包:理解 ConcurrentHashMap 原理,線程池,異步併發,鎖;

二、 IO / NIO;

一、面向流與面向緩衝

     Java IO和NIO之間第一個最大的區別是,IO是面向流的,NIO是面向緩衝區的。 Java IO面向流意味着每次從流中讀一個或多個字節,直至讀取全部字節,它們沒有被緩存在任何地方。此外,它不能先後移動流中的數據。若是須要先後移動從流中讀取的數據,須要先將它緩存到一個緩衝區。 Java NIO的緩衝導向方法略有不一樣。數據讀取到一個它稍後處理的緩衝區,須要時可在緩衝區中先後移動。這就增長了處理過程當中的靈活性。可是,還須要檢查是否該緩衝區中包含全部您須要處理的數據。並且,需確保當更多的數據讀入緩衝區時,不要覆蓋緩衝區裏還沒有處理的數據。

二、阻塞與非阻塞IO

     Java IO的各類流是阻塞的。這意味着,當一個線程調用read() 或 write()時,該線程被阻塞,直到有一些數據被讀取,或數據徹底寫入。該線程在此期間不能再幹任何事情了。Java NIO的非阻塞模式,使一個線程從某通道發送請求讀取數據,可是它僅能獲得目前可用的數據,若是目前沒有數據可用時,就什麼都不會獲取,而不是保持線程阻塞,因此直至數據變的能夠讀取以前,該線程能夠繼續作其餘的事情。 非阻塞寫也是如此。一個線程請求寫入一些數據到某通道,但不須要等待它徹底寫入,這個線程同時能夠去作別的事情。 線程一般將非阻塞IO的空閒時間用於在其它通道上執行IO操做,因此一個單獨的線程如今能夠管理多個輸入和輸出通道(channel)。

三、選擇器(Selectors)

     Java NIO的選擇器容許一個單獨的線程來監視多個輸入通道,你能夠註冊多個通道使用一個選擇器,而後使用一個單獨的線程來「選擇」通道:這些通道里已經有能夠處理的輸入,或者選擇已準備寫入的通道。這種選擇機制,使得一個單獨的線程很容易來管理多個通道。

三、 Java SE 基礎:主要是一些基本概念和語法細節,如 equals 和 hashcode 做用,訪問修飾等;4. SSH 框架:IoC 和 AOP 的原理,涉及概念有動態代理和反射;

五、 設計模式:常見的會畫 UML,例如徒手擼各類單例實現,JDK 裏面涉及的設計模式;

六、 Socket 編程。

 

固然,你去的話也可能不是這些,大致上脫離不了這些範圍內的知識點,在編程工做中須要的,你天然會去學,沒必要侷限本身必須學會什麼才能工做,可是,這些20%的基礎你必須掌握。

相關文章
相關標籤/搜索