jenkins分布式編譯
Ⅰ java開源的工具
Eclipse 【Java開源 開發工具】
Eclipse平台是IBM向開發源碼社區捐贈的開發框架,它之所以出名並不是因為IBM宣稱投入開發的資金總數 —4千萬美元,而是因為如此巨大的投入所帶來的成果:一個成熟的、精心設計的以及可擴展的體系結構。
CubicTest 【Java開源 Web測試工具】
CubicTest這個開源的Eclipse插件能夠讓Web應用程序的測試變得更加易於設計,理解和運行,即使是對於非技術人員。 CubicTest採用一個圖形用戶界面來讓用戶對測試進行建模而不是編寫測試腳本。 這個工具主要是針對基於測試驅動的Web應用程序開發,但也能夠用於測試現有Web應用程序。
Execute Query 【Java開源 資料庫管理工具】
Execute Query一個開源的資料庫管理工具,具有:查詢編輯器,資料庫瀏覽器,生成ERD,比較數據類型,創建表格,創建索引,生成sql腳本,導入/導出數據,導入/導出XML數據,連接管理等功能。
MockCentral 【Java開源 測試工具】
MockCentral提供一種利用mock對象進行測試的新方式。它把mock對象定義在測試代碼之外的XML文件中並允許開發人員創建,訪問這些mock對象,這能夠讓測試案例變得簡潔並有利於組織和復用mock對象。
Janissary 【Java開源 Web測試工具】
Janissary在是一個簡單的Web站點負載與性能測試工具。根據配置,Janissary可以創建並發或非並發的HTTP Request然後報告這些Request的狀態與響應時間。
JUnit 【Java開源 測試工具】
JUnit是由 Erich Gamma 和 Kent Beck 編寫的一個回歸測試框架(regression testing framework)。Junit測試是程序員測試,即所謂白盒測試,因為程序員知道被測試的軟體如何(How)完成功能和完成什麼樣(What)的功能。Junit是一套框架,繼承TestCase類,就可以用Junit進行自動測試了。
BlueJ 【Java開源 開發工具】
BlueJ是一個專門為入門級教學設計的JavaTM 開發環境。它是由澳大利亞墨爾本Monash大學BlueJ小組設計並開發的。
log4javascript 【Java開源 日記工具】
log4javascript是一個基於log4j的JavaScript日記框架。
STclass 【Java開源 測試工具】
STclass是一個基於Contract(由於B. Meyer在Design by Contract:合約設計方式中定義)的單元測試框架,它是JUnit的一個克隆,但是可與JUnit相匹敵。該框架能夠把測試結果生成XML的報表格式,然後加工處理成漂亮的HTML報表。STclass集成JIP剖析器,可以在測試期間進行statisitic與 profiling分析,並把結果加到HTML報表中。
Ⅱ jenkins 穩定性 性能怎麼樣
jenkins 不能監控linux性能,jenkins是分布式調用的軟體,可以定時執行任務,可以按要求順序執行腳本,但是本身不帶監控性能的功能,如果要監控linux的性能,應該用nagios。
nagios監控linux性能伺服器搭建詳解:
配置安裝環境-----搭建apache+php環境
首先需要先創建一個名為nagios的帳號並給定登錄口令,並創建一個用戶組名為nagcmd用於從Web介面訪問。將nagios用戶和apache用戶都加到這個組中
現在開始解壓安裝nagios源碼包。注意的是安裝一定要注意不要出先erro否則後面排錯的時候會非常的頭痛哦
配置WEB介面:在上一步中安裝了一個配置文件nagios.conf到了/etc/httpd/conf.d/目錄下,打開此文件,能看到裡面實際是定義了兩個別名。並設置了基於帳號的頁面訪問控制。
對應的應該創建一個的用戶用於Nagios的WEB介面登錄。記住設置好的登錄口令,一會兒會用到它。之後需要重啟apache .
簡單的配置nagios,讓它可以監控安裝了nagios程序的SERVER,也就是本機。nagios被安裝在了在/usr/local/nagios目錄下,可以看到如下命令bin------ 有一個重要的nagios命令,用於檢查nagios主配置文件nagios.cfg是否有語法等錯誤,libexec 此目錄下存放所有用於監控的命令(要安裝nagios-plugins插件才會有這些命令)share 此目錄就是上面WEB介面訪問的站點目錄,var 存放啟動nagios後的相關文件
安裝nagios 插件,解壓後編譯安裝
安裝插件完成後,會產生很多類似check_http的監控命令到/usr/local/nagios/libexec目錄下。
啟動nagios 服務。把Nagios加入到服務列表中以使之在系統啟動時自動啟動# chkconfig --add nagios # chkconfig nagios on驗證Nagios的樣例配置文件(只有此步正常,你才去啟動服務)/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg如果沒有報錯,可以啟動Nagios服務# service nagios start
登錄WEB介面,現在可以從WEB方式來接入Nagios的WEB介面了,需要在提示下輸入用戶名(nagiosadmin)和口令,剛剛設置的,這里用系統默認安裝的瀏覽器,用下面這個超鏈接http://localhost/nagios/ 點擊「服務詳情」的引導超鏈來查看本機的監視詳情。可能需要給點時間讓Nagios來檢測機器上所依賴的服務因為檢測需要些時間。
NRPE的安裝配置:
NRPE是nagios的一個擴展,它被用於被監控的伺服器上,向nagios監控平台提供該伺服器的一些本地的情況。例如,cpu負載、內存使用、硬碟使用等等。
1)需要在nagios監控平台伺服器上安裝NRPE
# tar xzf nrpe-2.8.1.tar.gz
# cd nrpe-2.8.1
# ./configure && make all && make install-plugin
如果安裝成功,就可以在/…/nagios/libexec 目錄中找到 "check_nrpe"這個插件。之後需要定義一個可以在監控平台使用的命令,這個定義一般在/…/nagios/etc/commands.cfg中,其內容如下:在commands.cfg加入:
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
這樣就可以在定義服務的時候使用這個命令了,舉個例子:
define service{
host_name remotehost
service_description CPU Load
…
check_command check_nrpe!check_load }
這個例子就定義了對remotehost伺服器cpu負載情況的監控。
2)如何在被監控伺服器上安裝NRPE。
首先,需要准備的包有兩個:NRPE和nagios-plugin。首先安裝插件:
# /usr/sbin/useradd nagios
# passwd nagios
# tar xzf nagios-plugins-1.4.9.tar.gz
# cd nagios-plugins-1.4.9
# ./configure --prefix=/usr/local/nagios && make && make install
# chown nagios.nagios /usr/local/nagios/
# chown -R nagios.nagios /usr/local/nagios/libexec/
然後安裝NRPE:
tar xzf nrpe-2.8.1.tar.gz
cd nrpe-2.8.1
./configure &&make all&&make install-plugin&&make install-daemon
&& make install-daemon-config
安裝好了,可以到/usr/local/nagios/下面檢查一下,應該生成了4個目錄:bin、etc、libexec、share。之後我們要配置 一下,目的是讓NRPE可以以守護進程的形式監聽5666埠,為特定地址的nagios平台提供服務。
首先,需要修改/usr/local/nagios/etc/nrpe.cof。
找到「allowed_hosts=127.0.0.1」將其改為:allowed_hosts=127.0.0.1,$Nagios監控平台的地址或域名
3)啟動NRPE守護進程:(可以將此命令加入/etc/rc.local,以便開機自動啟動)
# /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
此命令生成的日誌會在系統的日誌(/var/log/message)中。如果沒有出錯,就基本搞定了。驗收一下,在本機上:# /usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 或者在nagios監控平台伺服器上:
# /usr/local/nagios/libexec/check_nrpe -H $目標主機地址
正常的返回值為被監控伺服器上安裝的NRPE的版本信息:
NRPE v2.8.1
如果看到這些,NRPE安裝成功了。
那麼,通過NRPE,可以監控到哪些信息呢? 只要在被監控伺服器上有的插件(/usr/local/nagios/libexec中的所有插件),都可以使用。也就是說,你想監控什麼,只要有對應的插件,就可以實現。
在被監控端的 nrpe.cfg 文件中,可以看到這樣的配置:
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
這是用來檢查 CPU 負載的。
Ⅲ 怎麼樣才能打好JAVA的學習基礎
從大學到現在,我使用Java已經將近20年,日常也帶實習生,還在公司內部做training,所以可以分享下我的經驗,希望對你有用。
因為是在工作中培訓,就必然有兩個約束:實用、時間緊,因此就不能像大學那樣,把所有的知識點都面面俱到的講到。而只能挑基礎的,實用的,難理解的講。至於其他邊邊角角的知識,就一筆帶過。一則沒有時間,二則不常用,再則既使講了,學生印象也不深刻。總之一句話:「好鋼用在刀刃上」。
下面,就根據我的實踐,具體談下學習過程:
1.基礎知識
我學習java的時候,先是通讀了《Java編程思想》,然後是《Java核心技術》。當時這兩本書還不像現在這么厚,而剛才我把案頭的《Java核心技術》第9版翻了翻,上下兩冊已經1700多頁了,可想而知,如果要把它通讀一遍,且不說把所有的代碼都調通,就是當小說讀,估計也需要些時間。
但我現在教學依然首推《Java核心技術》,主要是體系完整,實例多,可操作性強。但對初學者,我一般是只講前6章,也就是下面的內容:
Java程序設計概述
Java程序設計環境
Java的基礎程序設計結構
對象與類
繼承
介面與內部類
就《Java核心技術》第9版來說,也就是到250頁為止,加把勁,1個月拿下完全沒問題。
因為你是自學,所以建議你一定要把其中的代碼都調通,課後的作業盡量去做。除此之外,還有兩點特別重要:
#.學習筆記
因為你是自學,不像在企業中學了就能夠實踐,印象自然特別深刻。而自學因為沒有實踐的及時反饋,所以記筆記就顯得特別重要。因為記筆記就像寫作一樣,是整理思路的絕佳方法。同時學習筆記也是你以後開發,面試的絕好資料。
學習編程,人跟人是不一樣的,別人覺得難理解的東西,對你卻不一定;而你覺得難理解的東西,別人可能又會覺得特簡單。而學習筆記就是自己專有的「難點手冊」,有點像高考時的「錯題本」,以後無論是在面試前,還是在日常工作中,隨時都可以翻出來看看,自是獲益匪淺。
#.分門別類保存demo
學習筆記是很好的文字資料,但編程界有句話說的特別好,所謂「no code, no text」,意思就是說:千言萬語都沒有一段代碼來的實在。
以我的經驗,在你在學習的過程中,就某個知識點,無論當時理解的多透徹,調試的多棒,只要時間一長,等到了實用的時候,肯定會碰到各種各樣的問題,一些看似簡單的東西,此時死活就是調不通,正所謂人到事中迷。這個時候,如果你手頭恰有運行良好的demo,打開參考一下(甚至直接拷貝過來),問題自然迎刃而解。而且因為這些demo都是你親手調試出來,印象自然特別深刻,一碰到問題,在腦子中自會立刻涌現。
所以說,在學習的過程,一定要善待你調通的demo,千萬不要用完了就扔,等後來碰到困難,想要用時卻找不到,追愧莫及。正確的做法就是把所有調通的demo,分門別類的保存起來,到時候查起來自是得心應手。
人都說「書到用時方恨少」,其實代碼也是這樣,所謂「demo用時方恨少」。
2.Spring
目前在Java EE開發中,Spring已經成為和Java核心庫一樣的基礎設施,所以說如果想成為一個合格的Java程序員,Spring肯定繞不開。另一方面,如果掌握了Spring體系,Java基本上就算入門了,就有能力進行一些實用級的開發了。
但Spring本身也是日漸復雜,衍生項目越來越多,但最最核心的概念依舊是IOC和AOP,掌握了這兩個概念,再把Spring MVC學會,再學習其他的衍生項目就會平滑很多。
順便在這里說一下,如果你現在也在學習Java,在入門學習Java的過程當中,有遇見任何關於學習方法,學習路線,學習效率等方面的問題,你可以申請加入我的Java新手學習交流qun:前面輸入是:三九零,最後輸入是:七八一四。裡面聚集了很多正在學習Java技術的初學者,其中不乏也有正在從事Java技術開發的大牛,裙文件裡面還有我做Java技術這段時間整理的一些學習手冊,面試題,開發工具,PDF文檔書籍教程,需要的話都可以自行來獲取下載。
同時,因為Spring本身就應用了許多優雅的設計理念,所以學習Spring的過程,也是加強Java基礎知識學習的過程。因此等你掌握了Spring,原來很多你理解不透徹的Java特性,此時就會恍然大悟,包括介面、抽象類等。
我學習Spring,讀的第一本書是《Spring實戰》,坦率的說,書很一般,但市面上比它好的書,我卻沒有遇到過。還有一本《Spring源碼深度解析》也不錯,對Spring的設計理念講的尤其透徹,雖然整本書讀起來有些艱澀,但前幾章卻生動有趣,也是整本書的精華。所以建議你在學習Spring之前,先把該書的前幾章通讀一下,然後再回過頭來學習《Spring實戰》會順利很多。
以我經驗,要學透Spring,終極的方法還是閱讀源碼(我當時就是這么乾的),待把Spring的核心源碼通讀了,人就真的自由了(所謂無真相不自由),不僅是對Spring,而是對整個Java體系。以後再遇到其他框架,大概一眼就能看出其中的脈絡,所謂到了「看山不是山」的境界。但這都是後話,可以作為以後你努力的方向。
和學習Java基礎知識一樣,學習Spring也一定要記筆記,一定要分門別類保存demo。
老實說,Spring對初學者不算簡單,因此最好能有個好老師帶一下,不用太長時間,2個課時即可,然後就是在你遇到大的困難時,能及時的點撥下。
以我的經驗,要初步掌握Spring,大概需要1到1個半月的時間。
3.其他知識
Spring是Java編程的基礎設施,但真要進入到實際項目的開發,還有些東西繞不過,包括 MySql,Mybatis,Redis,Servlet等,但如果你經過Spring的洗禮,這些東西相對就簡單多了,以我的經驗,1個月的時間足夠了。
4.實踐
學習Java,光學不練肯定是不行的。但因為是自學,所以就沒有實際的產品讓你練手,但也沒有關系,誰大學還沒有做過畢業設計呢?以我的經驗,大家最愛的「學生管理系統」依舊是個很好的練手系統。
別看「學生管理系統」邏輯簡單,但麻雀雖小五臟俱全,其中資料庫設計、Mybatis,Spring、SpringMVC,Servlet、Tomcat一個都不缺,絕對的練手好伴侶。
還有,雖然你的學習重點在Java,因為要做一個完整的demo,前端的配合肯定少不了。因此就免少不了要學一些簡單的JS、HTML知識,但因為前端本就是個很大的topic,所以一定要控制好邊界,千萬不要顧此失彼。就「學生管理系統」來說,在前端上,只要實現一個包含table、textbox、button,能發送REST請求到server,能實現學生的「增刪改查」的簡單頁面即可。
作為一個練手項目,目標就是把Java的主要技能點串起來,所以自不求盡善盡美(也不可能),所以1個月時間足夠了。
最後
按照上面的過程,4個月的時間剛剛好。當然Java的體系是很龐大的,還有很多更高級的技能需要掌握,但不要著急,這些完全可以放到以後工作中邊用別學。
學習編程就是一個由混沌到有序的過程,所以你在學習過程中,如果一時碰到理解不了的知識點,大可不必沮喪,更不要氣餒,這都是正常的不能在正常的事情了,不過是「人同此心,心同此理」的暫時而已。
在日常的教學中,我常把下面這句話送給學員們,今天也把它送給你:
「道路是曲折的,前途是光明的!」
祝你好運!
Ⅳ java中處理JSON的開源工具都有些什麼那個比較好用
我用過的有jackson,谷歌的gson,阿里的fastjson
fastjson在遍歷JSONObject的時候順序不是有序的,想要有序還得改源碼,比較麻煩,序列化對象時屬性的順序也不能保證,是我放棄使用的主要原因
gson是用起來是最痛快的,一句話就能解決
Stringstring=newGson().toJson(user);
Useruser=newGson().fromeJson(string,User.class);
特點是不報錯,如果輸入的json字元串和Java Bean的屬性對應不上,相應屬性會為null或默認值
這是優點還是缺點就見仁見智了,至少我在轉換一些不太規則的API返回值時還是挺方便的。
Ⅳ Linux課程主要講什麼內容
Linux學習,主要學以下內容:
第一階段:linux基礎入門
1. 開班課程介紹-規章制度介紹-破冰活動;
2. Linux硬體基礎/Linux發展歷史;
3. Linux系統安裝/xshell連接/xshell優化/SSH遠程連接故障問題排查
4. 第一關一大波命令及特殊字元知識考試題講解
5. Linux基礎優化
6. Linux目錄結構知識精講
7. 第二關一大波命令及特殊
知識考試題講解(上)
8. 第二關一大波命令及特殊知識考試題講解(下)
9. Linux文件屬性一大堆知識精講
10. Linux通配符/正則表達式
11. 第三關一大波命令及重要知識考試題講解(上)
12. 第三關一大波命令及重要知識考試題講解(下)
13. Linux系統許可權(上)
14. Linux系統許可權(下)
15. 第一階段結束需要導師或講師對整體課程進行回顧
第二階段:linux系統管理進階
1. Linux定時任務
2. Linux用戶管理
3. Linux磁碟與文件系統(上)
4. Linux磁碟與文件系統(中下)
5. Linux三劍客之sed命令
第三階段:Linux Shell基礎
1. Shell編程基礎1
2. Shell編程基礎234
3. Linux三劍客之awk命令
第四階段:Linux網路基礎
1. 計算機網路基礎上
2. 計算機網路基礎下
3. 第二階段結束需要導師或講師對整體課程進行回顧。
第五階段:Linux網路服務
1. 集群實戰架構開始及環境准備
2. rsync數據同步服務
3. Linux全網備份項目案例精講
4. nfs網路存儲服務精講
5. inotify/sersync實時數據同步/nfs存儲實時備份項目案例精講
第六階段:Linux重要網路服務
1. http協議/www服務基礎
2. nginx web介紹及基礎實踐
3. nginx web精講結束
4. lnmp環境部署/資料庫異機遷移/共享數據異機遷移到NFS系統
5. nginx負載均衡深入透徹
6. keepalived高可用深入透徹
第七階段:Linux中小規模集群構建與優化(50台)
1. 期中架構開戰說明+期中架構部署回顧
2. 全體晝夜兼程部署期中架構並完成上台述職演講(加上兩個周末共9天)
3. kickstart cobbler 批量自動安裝系統
4. pptp vpn與ntp服務
5. memcached原理及部署/作為緩存及session會話共享
第八階段:Ansible自動化運維與Zabbix監控
1. SSH服務秘鑰認證
2. ansible批量自動化管理集群(入門及深入)
3. zabbix監控
第九階段:大規模集群高可用服務(Lvs、Keepalived)
1. Centos7系統自行安裝/centos6與7區別
2. lvs負載均衡集群/keepalived管理LVS集群
第十階段:Java Tomcat服務及防火牆Iptables
1. iptables防火牆精講上
2. iptables防火牆精講下
3. tomcat java應用服務/nginx配合tomcat服務部署及優化
第十一階段:MySQL DBA高級應用實踐
1. MySQL資料庫入門基礎命令
2. MySQL資料庫進階備份恢復
3. MySQL資料庫深入事務引擎
4. MySQL資料庫優化SQL語句優化
5. MySQL資料庫集群主從復制/讀寫分離
6. MySQL資料庫高可用/mha/keepalved
第十二階段:高性能資料庫Redis和Memcached課程
第十三階段:Linux大規模集群架構構建(200台)
第十四階段:Linux Shell編程企業案例實戰
第十五階段:企業級代碼發布上線方案(SVN和Git)
1. GIT管理
2. 代碼上線項目案例
第十六階段企業級Kvm虛擬化與OpenStack雲計算
1. KVM虛擬化企業級實戰
2. OpenStack雲計算企業級實戰
第十七階段公有雲阿里雲8大組件構建集群實戰
第十八階段:Docker技術企業應用實踐
1. Docker容器與微服務深入實踐
2. 大數據Hadoop生態體系及實踐
第十九階段:python自動化入門及進階
第二十階段:職業規劃與高薪就業指導
Ⅵ Android開發常用工具(一)
1、Android Studio
谷歌推出的Android集成開發工具,經過多年的迭代發展已經變得非常強大及人性化,各式各樣的工具插件滿足日常的開發需求,也可以自己製作工具插件,下載即可贈送SDK和JDK大禮包,並配置好環境變數,基本做到一鍵式開發。記得15年剛開始做開發時使用的是Eclipse,需要手動配置sdk,jdk,環境變數等,對於當時處於新手的我來說非常的繁瑣,也增加了時間成本。
2、Figma
UI製作查看工具,最近幾年比較火的UI設計軟體,使用起來就跟在線文檔一個感覺,設置許可權之後,只有美工人員可以進行編輯,而開發人員只能進行查看,裡面配置了Android、ios、css等不同平台所需要標注參數,方便不同平台開發人員查看,對比其它工具優點是打開查看UI非常方便,不需要像pxcook要先下載源UI文件,需要吐槽的是導出多尺寸圖片沒有Pxcook工具那樣方便,只能一張一張導出命名,可能是沒找到正確的使用方式,有懂的同學可以下方留言。
3、GitLab
用於代碼倉庫管理系統,使用Git作為管理工具,並在此基礎上搭建起來的Web服務。一般用於管理開發的業務主項目、開發自研的框架等,可以很方便查看遠程代碼倉庫以及組員的提交內容,也可以使用裡面的ci去構建自動化打包,但目前使用到的自動化打包構建方式還是Jenkins比較多點,ci配置需要許可權等問題。
4、Git
開源的分布式版本控制系統,同樣的工具還有svn(小烏龜),cvs等,用於代碼的提交拉取合並等。記得剛開始做開發時用的是svn,每次發布上線完一個版本後都要備份一份代碼在伺服器,開發過程中途如果遇到要緊急發布個小版本就可以通過備份的代碼進行開發發布小版本,非常不方便。直到後面用了git替代才發現原來這么的方便,git可以很方便拉取分支、切換分支、合並分支到主幹,再結合Gitlab、GitHub等倉庫管理系統進行可視化代碼管理,大大提高了效率。
5、Jenkins
基於Java開發的一種持續集成工具,用於自動化打包apk到指定伺服器,測試人員通過鏈接下載apk進行測試。常規操作是將 Jenkins工具 部署
在遠程linux伺服器,將工程項目代碼、SDK、JDK等打包編譯需要的也配置到該伺服器,還要一份打包Apk上傳包到指定FTP的腳本,本地電腦通過web操作jenkins進行項目選擇分支選擇打包就可以。
未完待續
Ⅶ 推薦如何系統的學習JAVA
如何系統學習java體系
學java首先要學 J2SE,它是java體系的基礎,也是重中之重。很多人往往不重視基礎,其實這是捨本逐末的做法。說這么多就是希望大家能重視基礎,能在這條路上走的更遠。
學j2se有下面幾個目標:
1、你要能真正理解面向對象的優勢,理解為什麼不是面向過程。
2、掌握java語法基礎。包括異常處理、多線程、網路編程、GUI編程等
3、如果你對swing不感興趣,可以跳過它。
這一階段結束後,你需要能獨立寫一個小游戲,比如坦克大戰、俄羅斯方塊、貪吃蛇等。
當你完成J2SE的學習之後,你就要開始學習java web了。
你需要掌握web基礎知識:html、css、javascript、ajax、jQuery。
別怕,這些技術看起來很多,其實也沒要你精通它們,只是要你能在用到它們的時候,能通過快速查閱相關文檔,能正確使用它們。如果這一階段順利的話,你可能還用不到一個月。
學習servlet、jsp、jdbc。
這些是javaweb的基礎,如果你自學有難度,可以在網上下載一些相關視頻,幫助理解,降低學習難度曲線。
當你完成上一階段的學習後,你就可以進入J2EE的階段了。
這一階段,你可能會見到很多各種各樣的框架,會讓你眼花繚亂,頭暈目眩。不過別擔心,你只需要學習三個就足夠了。它們是struts2、hibernate、spring。這些框架為搭建具有可伸縮性、靈活性、易維護性的商務系統提供了良好的機制。
首先你需要學習三個框架的基本配置和使用,直到你能熟練搭建一個ssh項目。
如果學有餘力,你可以深入學習這些框架的設計模式。
學習完三大框架之後,其實你學的已經足夠多了。如果對移動應用的開發感興趣,你可以接著學習安卓開發。安卓開發不需要其他知識,只要你j2se學的不錯,學安卓開發對你就沒太大難度了。
Ⅷ java開源的其它
Quartz 【Java開源 Job調度】
Quartz是OpenSymphony開源組織在Job scheling領域又一個開源項目,它可以與J2EE與J2SE應用程序相結合也可以單獨使用。Quartz可以用來創建簡單或為運行十個,百個,甚至是好幾萬個Jobs這樣復雜的日程序表。Jobs可以做成標準的Java組件或 EJBs。Quartz的最新版本為Quartz 1.5.0。
Velocity 【Java開源 模板引擎】
Velocity是一個基於java的模板引擎(template engine)。它允許任何人僅僅簡單的使用模板語言(template language)來引用由java代碼定義的對象。 當Velocity應用於web開發時,界面設計人員可以和java程序開發人員同步開發一個遵循MVC架構的web站點,也就是說,頁面設計人員可以只關注頁面的顯示效果,而由java程序開發人員關注業務邏輯編碼。Velocity將java代碼從web頁面中分離出來,這樣為web站點的長期維護提供了便利,同時也為我們在JSP和PHP之外又提供了一種可選的方案。 Velocity的能力遠不止web站點開發這個領域,例如,它可以從模板(template)產生SQL和PostScript、XML,它也可以被當作一個獨立工具來產生源代碼和報告,或者作為其他系統的集成組件使用。Velocity也可以為Turbine web開發架構提供模板服務(template service)。Velocity+Turbine提供一個模板服務的方式允許一個web應用以一個真正的MVC模型進行開發。 【VeloEclipse :Velocity在Eclipse平台下的一個輔助開發插件】
Roller Weblogger 【Java開源 Blog博客】
這個weblogging 設計得比較精巧,源代碼是很好的學習資料。它支持weblogging應有的特性如:評論功能,所見即所得HTML編輯,TrackBack,提供頁面模板,RSS syndication,blogroll管理和提供一個XML-RPC 介面。
XPlanner 【Java開源 項目管理】
XPlanner 一個基於Web的XP團隊計劃和跟蹤工具。XP獨特的開發概念如iteration、user stories等,XPlanner都提供了相對應的的管理工具,XPlanner支持XP開發流程,並解決利用XP思想來開發項目所碰到的問題。XPlanner特點包括:簡單的模型規劃,虛擬筆記卡(Virtual note cards),iterations、user stories與工作記錄的追蹤,未完成stories將自動迭代,工作時間追蹤,生成團隊效率,個人工時報表,SOAP界面支持。
JOnAS 【Java開源 J2EE伺服器】
JOnAS是一個開放源代碼的J2EE實現,在ObjectWeb協會中開發。整合了Tomcat或Jetty成為它的Web容器,以確保符合Servlet 2.3和JSP 1.2規范。JOnAS伺服器依賴或實現以下的Java API:JCA、JDBC、JTA 、JMS、JMX、JNDI、JAAS、JavaMail 。
FreeMarker 【Java開源 模板引擎】
FreeMarker允許Java servlet保持圖形設計同應用程序邏輯的分離,這是通過在模板中密封HTML完成的。模板用servlet提供的數據動態地生成 HTML。模板語言是強大的直觀的,編譯器速度快,輸出接近靜態HTML頁面的速度。
【FreeMarker Eclipse Plugin與FreeMarker IDE:Eclipse平台下的輔助開發工具】
Lucene 【Java開源 全文檢索】
Apache Lucene是一個開放源程序的搜尋器引擎,利用它可以輕易地為Java軟體加入全文搜尋功能。Lucene的最主要工作是替文件的每一個字作索引,索引讓搜尋的效率比傳統的逐字比較大大提高,Lucen提供一組解讀,過濾,分析文件,編排和使用索引的API,它的強大之處除了高效和簡單外,是最重要的是使使用者可以隨時應自己需要自訂其功能。
Beanshell 【Java開源 動態語言】
Beanshell是用Java寫成的,一個小型的、免費的、可以下載的、嵌入式的Java源代碼解釋器,具有對象腳本語言特性。BeanShell執行標准Java語句和表達式,另外包括一些腳本命令和語法。它將腳本化對象看作簡單閉包方法(simple method closure)來支持,就如同在Perl和JavaScript中的一樣。它具有以下的一些特點:使用Java反射API以提供Java語句和表達式的實時解釋執行;可以透明地訪問任何Java對象和API;可以在命令行模式、控制台模式、小程序模式和遠程線程伺服器模式等四種模式下面運行;與在應用程序中一樣,可以在小程序中(Applet)正常運行(無需編譯器或者類裝載器);非常精簡的解釋器jar文件大小為175k
Big Two 【Java開源 Java游戲】
採用Java開發的中國式紙牌升級游戲。源碼下載
JBoss SSO Framework 【Java開源 身份認證管理】
JBoss SSO Framework是一個組件集能夠很容易集成到現有的web應用中提供單一登錄功能.該框架已經能夠支持一些重要的SSO標准如SAML。整個系統包括以下組件:
1.聯合伺服器(Federation Server)– 一個聯合伺服器用於為放置在不同安全域(security domain)中的web應用程序安全地傳播Federation Token。
2.Token編排框架(Token Marshalling Framework)– 這是一組靈活的/可插件的Java API用來marshal/unmarshal一個Federation Token。該系統默認提供一個SAML兼容的編排器(Marshaller) 。
3.身份管管理框架(Identity Management Framework)–這是一組靈活的/可插件的Java API用來連接中中央身份存儲庫(Identity Store)。該系統默認提供一個Provider來連接基於LDAP的身份存儲庫。
JawFlow 【Java開源 開源工作流】
JawFlow是一個部分遵循WfMC規范,採用JMX技術開發的工作流引擎。它能夠解析XPDL,並能夠用Java或BSF支持的腳本語言來自定義行為。
rails-asyncweb 【Java開源 Web伺服器】
用於JRuby on Rails的一個快速Http伺服器。
jBatchEngine 【Java開源 Job調度】
jBatchEngine是一個採用Java開發的批任務spooler。jBatchEngine與其它以時間為驅動的Job調度引擎不同之處在於它是以事件以驅動,可用於啟動任何批處理程序。jBatchEngine可以安裝成一個Windows Service或一個Unix Daemon。
Gant 【Java開源 項目構建】
Gant是一個基於Ant的構建工具,它採用Groovy腳本代替XML來編寫構建邏輯。 Gant完全依賴於Ant task來做真正的事情,所以你如果用Ant實現構建,但不喜歡用XML構建文件,Gant是一個不錯的選擇。
Jaxmao 【Java開源 Web伺服器】
Tomcat是開源的JSP/Servlet伺服器。多年的開發使Tomcat已越來越完善,被越來越多的網站採用。Jaxmao(中文版Tomcat)項目的任務是為Tomcat提供一個友好的中文界面,推廣Tomcat在中文JSP/Serlet 開發者中的使用。
Metanotion BlockFile 【Java開源 DBMS資料庫】
BlockFile一個100%純Java,輕量級,單個文件嵌入式資料庫。它的功能介於SQLite與BerkeleyDB之間。專門為PDA和Mobile應用程序而開發。
JRuleEngine 【Java開源 規則引擎】
JRuleEngine基於JSR94規范的java規則引擎。
JBasic 【Java開源 動態語言】
JBasic是一個完全採用Java開發的BASIC語言解釋器。JBasic可運行在大部分Unix系統(包括Mac OS X),Windows command shell,或VMS DCL command line。
jSoapServer 【Java開源 Web Service】
jSoapServer這個Java類包可以集成到Java應用程序中為外部程序提供一個SOAP介面。jSoapServer是一個獨立的SOAP伺服器,因此不需要讓Java程序運行在像Tomcat這樣的容器中。
Artistic Style 【Java開源 代碼優化】
Artistic Style是一個C,C++,C#和Java源代碼縮排/格式化/美化工具。
JLoom 【Java開源 模板引擎】
JLoom是一個採用類似於JSP語法的模板引擎。參數可以是任何Java類型,甚至是泛型(generic)。JLoom還提供一個Eclipse插件來輔助開發。
Liquid look&feel 【Java開源 Swing外觀】
基於Mosfet Liquid KDE 3.x主題的Swing外觀。
MicroNova YUZU 【Java開源 JSP標簽】
MicroNova YUZU開源基於EL的JSP標簽庫。這是一個增強的JSTL(兼容JSP1.2與JSP 2.0)。
Ⅸ 技術面試會問很多技術問題嗎
筆者其實沒有想到去面試,只是在智聯上更新了一下簡歷,就陸陸續續接到很多獵頭的郵件和電話,實在是沒准備好要去面試,就推掉了幾家公司的面試了。正因為筆者也很久沒有面試了,筆者也想去面試學習一下,閑話少說,下面就分享給大家筆者在2018年1月4號上午10點30分的面試經歷:
首先,獵頭或者公司人資會把公司的介紹及崗位要求發到你郵箱(或者QQ、微信),下面這份是獵頭發給我的崗位說明,為了職業道德操守,公司的介紹和面試通知信息我就不貼出來了,我就把崗位要求貼出來:
職位描述:
1、 負責應用伺服器的安裝、配置、優化與維護;
2、 負責應用系統的日誌信息備份、管理、維護與分析;
3、 負責應用系統的日常監測於維護、故障處理、性能分析與優化;
4、 負責應用部署系統、環境配置系統、監控系統的開發、部署、升級與維護,建設高性能的運維平台。
崗位要求:
1、 熟悉Linux操作系統的基礎知識,熟練使用Linux常用操作命令;
2、 熟練配置Nginx、HAproxy 等應用相關軟體的部署、配置與優化維護;
3、 熟悉網路基礎知識、熟悉TCP/IP的工作原理,會配交換機或路由器,能熟練的對網路情況進行分析
4、 熟悉shell/perl/python中的一種或多種進行運維程序的開發;
5、 熟悉Nagios,Ganglia等監控軟體
看著上面的要求大家是不是覺得要求也不高啊,你要細看就會發現,這家公司要求的還挺多,不僅要會網路知識(熟悉TCP/IP好像是每家單位的都會寫這樣的要求),還要會開發技能。相信很多做運維的兄弟在網路這一塊是個頭疼的事情,都對交換機和路由器不怎麼會配置和管理。
然後,筆者詳細了解他們公司,了解崗位要求,在突擊復習一下可能會問到的知識點和技術點。到了面試的這天時間,早早的起床,把牙一定要刷干凈,特別是有口臭的兄弟,最好准備點口香糖,到達面試公司前嚼塊口香糖,以免因為口氣的原因熏到面試官,讓你在面試官心裡減分。早點要記得吃,如果你是下午面試的話也要吃午飯,吃早點了精氣神就有了。還要注意,帶上你的簡歷和一支筆,雖然他們那邊也會有你的簡歷,為了以防萬一還是准備好簡歷。
最後,關鍵點來了,就是和面試官溝通了,有筆試的公司會讓你做些面試題,沒有筆試就直接和面試官聊了,下面是我和面試官溝通完之後記住的一些問題,分享給大家看一下,筆者一共記住了7個問題,好像還有兩個問題實在想不起來了,如果大家有更恰當的回答一定要貼出來一起探討和進步:
1、介紹下自己?(幾乎每家公司首先都會讓你做個自我介紹,好像是必修課一樣)
筆者回答:此處省略筆者的自我介紹,筆者建議介紹自己的時間不宜過長,3-4分鍾為宜,說多了面試官會覺得你太啰嗦了。說太少了也不行,那樣會讓人感覺你的經歷太簡單了、太空了。正常情況下,一般你在做自我介紹的同時,面試官這個時候在看你的簡歷,他需要一邊看簡歷、一邊聽你介紹自己,如果你說個幾句話就把自己介紹完了,他肯定還沒緩過神來,對你的映像會減分的。在介紹的同時思維要清晰,邏輯要清楚,最好是根據你簡歷上寫的經歷來介紹,這樣可以把面試官的思路帶到你這里來,讓他思路跟著你走。不要東扯一句,西扯一句。竟量少介紹自己的性格、愛好(最好能不說就不說),你可以簡單羅列干過幾家公司(最多羅列3家公司/也包含目前所在的公司,注意順序不要亂),都在那幾家公司負責什麼工作,都用過什麼技術,在著重介紹一下你目前所在的公司是負責哪些工作的,可以稍微詳細一點介紹,不要讓面試官聽著暈頭轉向的感覺。
2、灰度發布如何實現?
筆者回答:其實對這個問題筆者也答的不好,就不寫出來誤導大家了。大家有好的方法可以共享出來。不過筆事後在知呼上看到了一位網友的建議覺得不錯,大家可以參考看一下 :https://www.hu.com/question/20584476
3、Mongodb熟悉嗎,一般部署幾台?
筆者回答:部署過,沒有深入研究過,一般mongodb部署主從、或者mongodb分片集群;建議3台或5台伺服器來部署。MongoDB分片的基本思想就是將集合切分成小塊。這些塊分散到若乾片裡面,每個片只負責總數據的一部分。 對於客戶端來說,無需知道數據被拆分了,也無需知道服務端哪個分片對應哪些數據。數據在分片之前需要運行一個路由進程,進程名為mongos。這個路由器知道所有數據的存放位置,知道數據和片的對應關系。對客戶端來說,它僅知道連接了一個普通的mongod,在請求數據的過程中,通過路由器上的數據和片的對應關系,路由到目標數據所在的片上,如果請求有了回應,路由器將其收集起來回送給客戶端。
4、如何發布和回滾,用jenkins又是怎麼實現?
筆者回答:發布:jenkins配置好代碼路徑(SVN或GIT),然後拉代碼,打tag。需要編譯就編譯,編譯之後推送到發布伺服器(jenkins裡面可以調腳本),然後從分發伺服器往下分發到業務伺服器上。
回滾:按照版本號到發布伺服器找到對應的版本推送
5、Tomcat工作模式?
筆者回答:Tomcat是一個JSP/Servlet容器。其作為Servlet容器,有三種工作模式:獨立的Servlet容器、進程內的Servlet容器和進程外的Servlet容器。
進入Tomcat的請求可以根據Tomcat的工作模式分為如下兩類:
Tomcat作為應用程序伺服器:請求來自於前端的web伺服器,這可能是Apache, IIS, Nginx等;
Tomcat作為獨立伺服器:請求來自於web瀏覽器;
6、監控用什麼實現的?
筆者回答:現在公司的業務都跑在阿里雲上,我們首選的監控就是用阿里雲監控,阿里雲監控自帶了ECS、RDS等服務的監控模板,可結合自定義報警規則來觸發監控項。上家公司的業務是託管在IDC,用的是zabbix監控方案,zabbix圖形界面豐富,也自帶很多監控模板,特別是多個分區、多個網卡等自動發現並進行監控做得非常不錯,不過需要在每台客戶機(被監控端)安裝zabbix agent。
7、你是怎麼備份數據的,包括資料庫備份?
筆者回答:在生產環境下,不管是應用數據、還是資料庫數據首先在部署的時候就會有主從架構、或者集群,這本身就是屬於數據的熱備份;其實考慮冷備份,用專門一台伺服器做為備份伺服器,比如可以用rsync+inotify配合計劃任務來實現數據的冷備份,如果是發版的包備份,正常情況下有台發布伺服器,每次發版都會保存好發版的包。
總結
總結一下面試注意幾點事項,可能筆者也說得不太對,為了我們運維工作的兄弟們都能拿到高薪,大家一定要指證出來一起進步、一起探討:
第一,你要對自己的簡歷很熟悉,簡歷上的寫的技能自己一定要能說出個一二,因為面試官的很多問題都會挑你簡歷上寫的問。比如你簡歷上寫了這么一條技能「熟悉mysql資料庫的部署安裝及原理」。你即然寫了這么一條技能,你在怎麼不熟悉你也要了解mysql的原理,能說出個大概意思。萬一面試官問到了你寫的這一條,你都答不上來,那在他心裡你又減分了,基本上這次面試希望不大。
第二,如果面試官問到你不會的問題,你就說這個不太熟悉,沒有具體研究過,千萬別不懂裝懂,還扯一堆沒用的話題來掩飾,這樣只會讓面試官反感你。
第三,准備充分,竟可能多的記住原理性的知識,一般面試問的多的就是原理。很少問具體的配置文件是怎麼配置的。面試前也要了解清楚「職位描述」和「崗位要求」,雖然有時候大多數不會問到崗位要求的問題,但也要了解和熟悉。
第四,面試完後一定要總結,盡量記住面試官問的每一個問題,回去記錄下來,如果問到不會的問題,事後要立馬查網路或者找朋友搞清楚、弄明白,這樣你才能記勞,下次面試說不定又問到同樣的問題。
問完之後,面試官就跟我聊薪資待遇了,問我多少錢能達到自己的要求,我就不便透露了,可以私聊,哈哈,後續筆者會陸陸續續更新以前面試的經歷和問題,有需要的朋友可以轉載或者收藏起來一起討論。
基於大家熱情高昂的氣氛,筆者又花了一個下午的時間回憶並整理在2017年2月24號筆者在東三環邊上(快到東四環了,沒有地鐵過去,到了四惠還要轉公交車)的一家傳媒公司的面試經歷,還好筆者有做筆記的習慣,把之前面試的問題都記錄在案,這一次的面試筆者可是記憶猶新,因為這次這家公司都跟筆者發offer了,實在是真心不想去這家公司就找原因推掉了,大家可別學我這么不靠譜。下面是這家公司中的崗位要求說明:
崗位職責:
1、負責公司產品的版本控制、構建和發布管理;
2、負責公司統一配置庫管理工作,許可權管理與分配准確及時,定期完成配置備份;
3、負責公司內部開發/測試伺服器的運行管理工作;
4、負責Linux操作系統的安裝、配置、監控和維護、問題處理、軟體升級、 數據備份、應急響應、故障排除等、保證線上環境的穩定運行;
5、負責支撐平台24×7穩定運行,並進行前瞻性容量規劃;
6、負責公司機房伺服器日常維護及網路系統安裝、部署、維護工作。
崗位要求:
1、計算機相關專業本科及以上學歷,2年以上運維或配置管理工作經驗;
2、至少熟悉一種監控系統搭建,如Nagios/Zabbix/等;
3、至少熟悉一種集群管理工具,如Ansible/SaltStack等;
4、有使用集成發布工具發布構建經驗優先。比如:bamboo或者Jenkins;
5、熟悉Unix/Linux操作系統,熟悉Weblogic/tomcat等中間件,能夠編寫shell腳本,熟悉軟體開發過程及過程產品,有一定的網路基礎;
6、熟悉rsyslog, flume等日誌收集和處理系統;
7、具有強烈的安全意識及較強的溝通協調和學習能力,良好的團隊合作精神,工作積極主動。
過去之後,前台美眉把我帶到他們公司的地下室,我掃視了一下周圍的環境,貌似旁邊就是機房,因為我聽到伺服器的聲音。等了幾分鍾,面試官下來了,面試官目測比較瘦,看著跟我身材差不多(應該不到120),他說他是負責運維部的,然後開始就叫我先自我介紹,都是一個套路,免不了介紹的,所以兄弟們一定要把自我介紹練好。然後開始問我問題了,跟面試官聊得還行,問我應該有不下10個以上的問題,我記住了下面有10個問題:
1、LVS負載的原理,和Nginx負載有啥區別?
筆者回答:這個問題我覺得面試官司沒問好,正常都會這么問「LVS有哪些負載均衡技術和調度演算法?"。我回答就是按我說的這種問法回答的,反正他也頻繁點頭,當然,筆者回答的可能沒有下面我整理出來的那麼詳細,大概意思我都說明白了。
LVS是Liunx虛擬伺服器的簡稱,利用LVS提供的負載均衡技術和linux操作系統可實現高性能、高可用的伺服器集群,一般LVS都是位於整個集群系統的最前端,由一台或者多台負載調度器(Director Server)組成,分發給應用伺服器(Real Server)。它是工作在4層(也就是TCP/IP中的傳輸層),LVS是基於IP負載均衡技術的IPVS模塊來實現的,IPVS實現負載均衡機制有三種,分別是NAT、TUN和DR,詳述如下:
VS/NAT: 即(Virtual Server via Network Address Translation)
也就是網路地址翻譯技術實現虛擬伺服器,當用戶請求到達調度器時,調度器將請求報文的目標地址(即虛擬IP地址)改寫成選定的Real Server地址,同時報文的目標埠也改成選定的Real Server的相應埠,最後將報文請求發送到選定的Real Server。在伺服器端得到數據後,Real Server返回數據給用戶時,需要再次經過負載調度器將報文的源地址和源埠改成虛擬IP地址和相應埠,然後把數據發送給用戶,完成整個負載調度過程。
可以看出,在NAT方式下,用戶請求和響應報文都必須經過Director Server地址重寫,當用戶請求越來越多時,調度器的處理能力將稱為瓶頸。
VS/TUN :即(Virtual Server via IP Tunneling)
也就是IP隧道技術實現虛擬伺服器。它的連接調度和管理與VS/NAT方式一樣,只是它的報文轉發方法不同,VS/TUN方式中,調度器採用IP隧道技術將用戶請求轉發到某個Real Server,而這個Real Server將直接響應用戶的請求,不再經過前端調度器,此外,對Real Server的地域位置沒有要求,可以和Director Server位於同一個網段,也可以是獨立的一個網路。因此,在TUN方式中,調度器將只處理用戶的報文請求,集群系統的吞吐量大大提高。
VS/DR: 即(Virtual Server via Direct Routing)
也就是用直接路由技術實現虛擬伺服器。它的連接調度和管理與VS/NAT和VS/TUN中的一樣,但它的報文轉發方法又有不同,VS/DR通過改寫請求報文的MAC地址,將請求發送到Real Server,而Real Server將響應直接返回給客戶,免去了VS/TUN中的IP隧道開銷。這種方式是三種負載調度機制中性能最高最好的,但是必須要求Director Server與Real Server都有一塊網卡連在同一物理網段上。
回答負載調度演算法,IPVS實現在八種負載調度演算法,我們常用的有四種調度演算法(輪叫調度、加權輪叫調度、最少鏈接調度、加權最少鏈接調度)。一般說了這四種就夠了,也不會需要你詳細解釋這四種演算法的。你只要把上面3種負載均衡技術講明白面試官就對這道問題很滿意了。接下來你在簡單說下與nginx的區別:
LVS的優點:
抗負載能力強、工作在第4層僅作分發之用,沒有流量的產生,這個特點也決定了它在負載均衡軟體里的性能最強的;無流量,同時保證了均衡器IO的性能不會受到大流量的影響;
工作穩定,自身有完整的雙機熱備方案,如LVS+Keepalived和LVS+Heartbeat;
應用范圍比較廣,可以對所有應用做負載均衡;
配置性比較低,這是一個缺點也是一個優點,因為沒有可太多配置的東西,所以並不需要太多接觸,大大減少了人為出錯的幾率。
LVS的缺點:
軟體本身不支持正則處理,不能做動靜分離,這就凸顯了Nginx/HAProxy+Keepalived的優勢。
如果網站應用比較龐大,LVS/DR+Keepalived就比較復雜了,特別是後面有Windows Server應用的機器,實施及配置還有維護過程就比較麻煩,相對而言,Nginx/HAProxy+Keepalived就簡單一點
Nginx的優點:
工作在OSI第7層,可以針對http應用做一些分流的策略。比如針對域名、目錄結構。它的正則比HAProxy更為強大和靈活;
Nginx對網路的依賴非常小,理論上能ping通就就能進行負載功能,這個也是它的優勢所在;
Nginx安裝和配置比較簡單,測試起來比較方便;
可以承擔高的負載壓力且穩定,一般能支撐超過幾萬次的並發量;
Nginx可以通過埠檢測到伺服器內部的故障,比如根據伺服器處理網頁返回的狀態碼、超時等等,並且會把返回錯誤的請求重新提交到另一個節點;
Nginx不僅僅是一款優秀的負載均衡器/反向代理軟體,它同時也是功能強大的Web應用伺服器。LNMP現在也是非常流行的web環境,大有和LAMP環境分庭抗禮之勢,Nginx在處理靜態頁面、特別是抗高並發方面相對apache有優勢;
Nginx現在作為Web反向加速緩存越來越成熟了,速度比傳統的Squid伺服器更快,有需求的朋友可以考慮用其作為反向代理加速器;
Nginx的缺點:
Nginx不支持url來檢測。
Nginx僅能支持http和Email,這個它的弱勢。
Nginx的Session的保持,Cookie的引導能力相對欠缺。
2、redis集群的原理,redis分片是怎麼實現的,你們公司redis用在了哪些環境?
筆者回答:reids集群原理:
其實它的原理不是三兩句話能說明白的,redis 3.0版本之前是不支持集群的,官方推薦最大的節點數量為1000,至少需要3(Master)+3(Slave)才能建立集群,是無中心的分布式存儲架構,可以在多個節點之間進行數據共享,解決了Redis高可用、可擴展等問題。集群可以將數據自動切分(split)到多個節點,當集群中的某一個節點故障時,redis還可以繼續處理客戶端的請求。
redis分片:
分片(partitioning)就是將你的數據拆分到多個 Redis 實例的過程,這樣每個實例將只包含所有鍵的子集。當數據量大的時候,把數據分散存入多個資料庫中,減少單節點的連接壓力,實現海量數據存儲。分片部署方式一般分為以下三種:
(1)在客戶端做分片;這種方式在客戶端確定要連接的redis實例,然後直接訪問相應的redis實例;
(2)在代理中做分片;這種方式中,客戶端並不直接訪問redis實例,它也不知道自己要訪問的具體是哪個redis實例,而是由代理轉發請求和結果;其工作過程為:客戶端先將請求發送給代理,代理通過分片演算法確定要訪問的是哪個redis實例,然後將請求發送給相應的redis實例,redis實例將結果返回給代理,代理最後將結果返回給客戶端。
(3)在redis伺服器端做分片;這種方式被稱為「查詢路由」,在這種方式中客戶端隨機選擇一個redis實例發送請求,如果所請求的內容不再當前redis實例中它會負責將請求轉交給正確的redis實例,也有的實現中,redis實例不會轉發請求,而是將正確redis的信息發給客戶端,由客戶端再去向正確的redis實例發送請求。
redis用在了哪些環境:
java、php環境用到了redis,主要緩存有登錄用戶信息數據、設備詳情數據、會員簽到數據等
3、你會怎麼統計當前訪問的IP,並排序?
筆者回答:統計用戶的訪問IP,用awk結合uniq、sort過濾access.log日誌就能統計並排序好。一般這么回答就夠了,當然你還可以說出其它方式來統計,這都是你的加分項。
4、你會使用哪些虛擬化技術?
筆者回答:vmware vsphere及kvm,我用得比較多的是vmware vsphere虛擬化,幾本上生產環境都用的vmware vsphere,kvm我是用在測試環境中使用。vmware 是屬於原生架構虛擬化技術,也就是可直接在硬體上運行。kvm屬於寄居架構的虛擬化技術,它是依託在系統之上運行。vmware vcenter
管理上比較方便,圖形管理界面功能很強大,穩定性強,一般比較適合企業使用。KVM管理界面稍差點,需要管理人員花費點時間學習它的維護管理技術。
5、假如有人反應,調取後端介面時特別慢,你會如何排查?
筆者回答:其實這種問題都沒有具體答案,只是看你回答的內容與面試官契合度有多高,能不能說到他想要的點上,主要是看你排查問題的思路。我是這么說的:問清楚反應的人哪個服務應用或者頁面調取哪個介面慢,叫他把頁面或相關的URL發給你,首先,最直觀的分析就是用瀏覽器按F12,看下是哪一塊的內容過慢(DNS解析、網路載入、大圖片、還是某個文件內容等),如果有,就對症下葯去解決(圖片慢就優化圖片、網路慢就查看內網情況等)。其次,看後端服務的日誌,其實大多數的問題看相關日誌是最有效分析,最好用tail -f 跟蹤一下日誌,當然你也要點擊測試來訪問介面日誌才會打出來。最後,排除sql,,找到sql去mysql執行一下,看看時間是否很久,如果很久,就要優化SQL問題了,expain一下SQL看看索引情況啥的,針對性優化。數據量太大的能分表就分表,能分庫就分庫。如果SQL沒啥問題,那可能就是寫的邏輯代碼的問題了,一行行審代碼,找到耗時的地方改造,優化邏輯。
6、mysql資料庫用的是主從讀寫分離,主庫寫,從庫讀,假如從庫無法讀取了、或者從庫讀取特別慢,你會如何解決?
筆者回答:這個問題筆者覺得回答的不太好,對mysql比較在行的朋友希望能給點建議。以解決問題為前提條件,先添加從庫數量,臨時把問題給解決,然後抓取slow log ,分析sql語句,該優化就優化處理。慢要不就是硬體跟不上,需要升級;要不就是軟體需要調試優化,等問題解決在細化。
7、cpu單核和多核有啥區別?
筆者回答:很少有面試官會問這樣的問題,即然問到了,也要老實回答。還好筆者之前了解過CPU,我是這么說的:雙核CPU就是能處理多份任務,順序排成隊列來處理。單核CPU一次處理一份任務,輪流處理每個程序任務。雙核的優勢不是頻率,而是對付同時處理多件事情。單核同時只能幹一件事,比如你同時在後台BT下載,前台一邊看電影一邊拷貝文件一邊QQ。
8、機械磁碟和固態硬碟有啥區別?
筆者回答:我擦,啥年代了,還問磁碟的問題,這面試官有點逗啊。那也要回答啊:
HDD代表機械硬碟,SSD代表固態硬碟。首先,從性能方面來說,固態硬碟幾乎完勝機械硬碟,固態硬碟的讀寫速度肯定要快機械硬碟,因為固態硬碟和機械硬碟的構造是完全不同的(具體的構造就沒必要解釋了)。其次,固態盤幾乎沒有噪音、而機械盤噪音比較大。還有就是,以目前的市場情況來看,一般機械盤容量大,價格低;固態盤容量小,價格偏高。但是企業還是首選固態盤。
9、說一下用過哪些監控系統?
筆者回答:這個監控的問題又問到了,筆者在2018年1月4號也被問到類似這樣的問題,筆者曾經用過zabbix、nagios、 cacit等。但是在這次面試中只說用過zabbix和nagios。說完了之後,面試官就讓我說一下這兩個監控有啥區別:
從web功能及畫圖來講:
Nagios簡單直觀,報警與數據都在同一頁面, 紅色即為問題項。Nagios web端不要做任何配置。 Nagios需要額外安裝插件,且插件畫圖不夠美觀。
Zabbix監控數據與報警是分開的,查看問題項需要看觸發器,查看數據在最新數據查看。而且zabbix有很多其它配置項, zabbix攜帶畫圖功能,且能手動把多個監控項集在一個圖中展示。
從監控服務來講:
Nagios自帶的監控項很少。對一些變動的如多個分區、多個網卡進行監控時需要手動配置。
Zabbix自帶了很多監控內容,感覺zabbix一開始就為你做了很多事,特別是對多個分區、多個網卡等自動發現並進行監控時,那一瞬間很驚喜,很省心的感覺。
從批量配置和報警來講:
Nagios對於批量監控主機,需要用腳本在server端新增host,並拷貝service文件。 Nagios用腳本來修改所有主機的services文件,加入新增服務。
Zabbix在server端配置自動注冊規則,配置好規則後,後續新增client端不需要對server端進行操作。 Zabbix只需手動在模板中新增一監控項即可。
總體來講:
Nagios要花很多時間寫插件,Zabbix要花很多時間探索功能。
Nagios更易上手,Nagios兩天弄會,Zabbix兩周弄會。
Zabbix畫圖功能比Nagios更強大
Zabbix對於批量監控與服務更改,操作更簡潔;Nagios如果寫好自動化腳本後,也很簡單,問題在於寫自動化腳本很費神。
10、給你一套環境,你會如何設計高可用、高並發的架構?
筆者回答:如果這套環境是部署在雲端(比如阿里雲),你就不用去考慮硬體設計的問題。可直接上阿里雲的SLB+ECS+RDS這套標準的高可用、高並發的架構。對外服務直接上SLB負載均衡技術,由阿里的SLB分發到後端的ECS主機;ECS主機部署多台,應用拆分在不同的ECS主機上,盡量細分服務。資料庫用RDS高可用版本(一主一備的經典高可用架構)、或者用RDS金融版(一主兩備的三節點架構)。在結合阿里其它的服務就完全OK,業務量上來了,主機不夠用了,直橫向擴容ECS主機搞定。
如果這套環境託管在IDC,那麼你就要從硬體、軟體(應用服務)雙面去考慮了。硬體要達到高可用、高並發公司必須買多套網路硬體設備(比如負載設備F5、防火牆、核心層交換、接入層交換)都必須要冗餘,由其是在網路設計上,設備之間都必須有雙線連接。設備如果都是跑的單機,其中一個設備掛了,你整個網路都癱瘓了,就談不上高可用、高並發了。其次在是考慮應用服務了,對外服務我會採用成熟的開源方案LVS+Keepalived或者Nginx+Keepalived,緩存層可以考慮redis集群及Mongodb集群,中間件等其它服務可以用kafka、zookeeper,圖片存儲可以用fastDFS或MFS,如果數據量大、又非常多,那麼可採用hadoop這一套方案。後端資料庫可採用 「主從+MHA」。這樣一套環境下來是絕對滿足高可用、高並發的架構