A. 怎麼把nginx的靜態頁面緩存到memcached
nginx的memcached_mole模塊可以直接從memcached伺服器中讀取內容後輸出,後續的請求不再經過應用程序處理,如php-fpm、django,大大的提升動態頁面的速度。nginx只負責從memcached伺服器中讀取數據,要往memcached寫入數據還得需要後台的應用程序來完成,主動的將要緩存的頁面緩存到memcached中,可以通過404重定向到後端去處理的。
ngx_http_memcached_mole可以操作任何兼用memcached協議的軟體。如ttserver、membase等
B. java工程師面試時最看重的是什麼
一、專業技能
熟練的使用Java語言進行面向對象程序設計,有良好的編程習慣,熟悉常用的JavaAPI,包括集合框架、多線程(並發編程)、I/O(NIO)、Socket、JDBC、XML、反射等。
熟悉基於JSP和Servlet的JavaWeb開發,對Servlet和JSP的工作原理和生命周期有深入了解,熟練的使用JSTL和EL編寫無腳本動態頁面,有使用監聽器、過濾器等Web組件以及MVC架構模式進行JavaWeb項目開發經驗。
對Spring的IoC容器和AOP原理有深入了解,熟練的運用Spring框架管理各種Web組件及其依賴關系,熟練的使用Spring進行事務、日誌、安全性等的管理,有使用SpringMVC作為表示層技術以及使用Spring提供的持久化支持進行Web項目開發的經驗,熟悉Spring對其他框架的整合。
熟練的使用Hibernate、MyBatis等ORM框架,熟悉Hibernate和MyBatis的核心API,對Hibernate的關聯映射、繼承映射、組件映射、緩存機制、事務管理以及性能調優等有深入的理解。
熟練的使用HTML、CSS和JavaScript進行Web前端開發,熟悉jQuery和Bootstrap,對Ajax技術在Web項目中的應用有深入理解,有使用前端MVC框架(AngularJS)和JavaScript模板引擎(HandleBars)進行項目開發的經驗。
熟悉面向對象的設計原則,對GoF設計模式和企業應用架構模式有深入的了解和實際開發的相關經驗,熟練的使用UML進行面向對象的分析和設計,有TDD(測試驅動開發)和DDD(領域驅動設計)的經驗。
熟悉Apache、NginX、Tomcat、WildFly、Weblogic等Web伺服器和應用伺服器的使用,熟悉多種伺服器整合、集群和負載均衡的配置。
熟練的使用產品原型工具Axure,熟練的使用設計建模工具PowerDesigner和Enterprise Architect,熟練的使用Java開發環境Eclipse和IntelliJ,熟練的使用前端開發環境WebStorm,熟練的使用軟體版本控制工具SVN和Git,熟練的使用項目構建和管理工具Maven和Gradle。
項目介紹
本系統是X委託Y開發的用於Z的系統,系統包括A、B、C、D等模塊。系統使用了Java企業級開發的開源框架E以及前端技術F。表示層運用了G架構,使用H作為視圖I作為控制器並實現了REST風格的請求;業務邏輯層運用了J模式,並通過K實現事務、日誌和安全性等功能,通過L實現緩存服務;持久層使用了M封裝CRUD操作,底層使用N實現數據存取。整個項目採用了P開發模型。 說明: E通常指spring(Java企業級開發的一站式選擇); F最有可能是jQuery庫及其插件或者是Bootstrap框架,當然如果要構建單頁應用(SPA)最佳的方案是前端MVC框架(如AngularJS)和JavaScript模板引擎(如HandleBars);G顯然是MVC(模型-視圖-控制),最有可能的實現框架是spring MVC,除此之外還有Struts 2、JSF以及Apache為JSF提供的MyFaces實現; H是JSP,JSP作為MVC中的V,也可使用模板引擎(如Freemarker和Velocity)來生成視圖還可以是各種文檔或報表(如Excel和PDF等); I是Servlet或者自定義的控制器,他們是MVC中的C,當然Spring MVC中提供了作為前端控制器的DispatcherServlet; J通常是事務腳本; K應該是AOP(面向切面編程)技術; L目前廣泛使用的有memcached和Redis; M的選擇方案很多,最有可能的是hibernate和MyBatis,也可以兩種技術同時運用,但通常是將增刪改交給hibernate來處理,而復雜的查詢則由MyBatis完成,此外TopLink、jOOQ也是優秀的持久層解決方案; N底層的數據存取傳統上是使用關系型資料庫,可以是MySQL、Oracle、SQLServer、DB2等,隨著大數據時代的來臨,也可以採用NoSQL(如MongoDB、MemBase、BigTable等)和其他大數據存取方案(如GFS、HDFS等); P是項目的開發模型,可以是瀑布模型、快速原型模型、增量模型、螺旋模型、噴泉模型、RAD模型等。項目開發流程
1、可行性分析:可行性分析報告、項目開發計劃書;
2、需求分析:需求規格說明書OOAD(用例圖、時序圖、活動圖);
界面原型:幫助理解需求、業務層設計時推導事務腳本;
3、設計:概要設計說明書、詳細設計說明書;
*抽取業務實體(領域對象):類圖、E-R圖(概念設計階段);
分層架構:確定各層的技術實現方案(具體到使用的框架、資料庫伺服器、應用伺服器等);
*業務層設計:事務腳本模式(事務:用戶發送一次請求就是一個事務;
腳本:一個方法或一個函數;
*事務腳本:把一次請求封裝為一個方法或一個函數;事務腳本模式:一個事務開始於腳本的打開,終止於腳本的關閉);
*業務層涉及的對象有三種類型:事務腳本類(封裝了業務的流程)、數據訪問對象(DAO,封裝了持久化操作)、數據傳輸對象(DTO,封裝了失血/貧血領域對象),三者之間的關系是事務腳本類組合(聚合)數據訪問對象,這二者都依賴了數據傳輸對象正向工程(UML類圖生成Java代碼)和逆向工程(Java代碼生成UML類圖)資料庫物理設計(ER圖轉換成表間關系圖、建庫和建表、使用工具插入測試數據);
3、編碼;
4、測試:測試報告、缺陷報告;
*單元測試:對軟體中的最小可測試單元進行檢查和驗證,在Java中是對類中的方法進行測試,可以使用JUnit工具來實施;
*集成測試:集成測試也叫組裝測試或聯合測試。在單元測試的基礎上,將所有模塊按照設計要求組裝成為子系統進行測試;
*系統測試:將已經確認的軟體、硬體、外設、網路等元素結合在一起,進行信息系統的各種組裝測試和確認測試,系統測試是針對整個產品系統進行的測試,目的是驗證系統是否滿足了需求規格的定義,找出與需求規格不符或與之矛盾的地方,從而提出更加完善的方案;
*驗收測試:在軟體產品完成了單元測試、集成測試和系統測試之後,產品發布之前所進行的軟體測試活動。它是技術測試的最後一個階段,也稱為交付測試。驗收測試的目的是確保軟體准備就緒,並且可以讓最終用戶將其用於執行軟體的既定功能和任務;
5、交付和維護:用戶手冊、操作手冊;版本控制:CVS/SVN/Git
自動構建:Ant/Maven/Ivy/Gradle
持續集成:Hudson/Jenkins
負載均衡伺服器:F5、A10;
應用伺服器: HTTP伺服器:Apache、NginX(HTTP、反向代理、郵件代理伺服器);
Servlet容器:Tomcat、ResinEJB容器:WildFly(JBoss Application Server)、GlassFish、Weblogic、Websphere;
資料庫伺服器:MySQL、Eclipse、Oracle;
圖表工具:基於jQuery的圖表插件(如jQchart、Flot、Charted等)、Chart.js、Highcharts等。
報表工具:Pentaho Reporting、iReport、DynamicReports等。
文檔處理:POI、iText等。
工作流引擎:jBPM、OpenWFE、Snaker、SWAMP等。
作業調度:Quartz、JobServer、Oddjob等。
緩存服務:EhCache、memcached、SwarmCache等。
消息隊列:Open-MQ、ZeroMQ、ActiveMQ等。
安全框架:Shiro、PicketBox等。
搜索引擎:IndexTank、Lucene、ElasticSearch等。
Ajax框架:jQuery、ExtJS、DWR等。
UI插件:EasyUI、MiniUI等。
富文本框:UEditor、CKEditor等。
項目是為哪個公司開發的?項目的投入是多少?
有多少人參與了項目開發?整個團隊中,測試人員、開發人員、項目經理比例是多少?
項目開發了多長時間?項目總的代碼量有多少?你的代碼量有多少?
項目採用了怎樣的開發模型或開發流程?項目的架構是怎樣的?項目的技術選型是怎樣的?
你在項目中擔了怎樣的職責?是否經常開會或加班?項目完成後有哪些收獲或是經驗教訓?
項目中最困難的部分是什麼?如何解決團隊開發時遇到的各種沖突?
我注意到你們使用了X技術,請問你們是如何解決Y問題的?
為什麼你們的產品使用了X技術而不是Y技術?據我所知,X技術雖然有A、B、C等好處,但也存在D和E問題,而Y技術可以解決D和E問題。
我對您說的X技術不是太熟悉,但我感覺它是一個不錯的解決方案,您能多講講它的工作原理嗎?
你們團隊是如何進行項目規劃的?一周會有幾次例會?每周的代碼量大概是多少?
就X問題我能想到的解決方案目前就只有Y了,請問您會怎麼解決這個問題?
- S.A.R法則是指先描述問題的場景,然後解釋你採取的行動,最後陳述結果。
聲音適中、口齒清楚、面帶微笑、個人形象精神,講禮貌。
主動跟面試官聊他感興趣的話題,讓面試官滿意。
主動的大膽的跟面試官聊自己熟悉有經驗的內容:項目、技術點等,做到揚長避短。
一定要表達自己非常想得到這個崗位,自己很願意學習不懂的技術。
根據自己的實際水平提出合理的待遇要求。
學習能力(搞IT行業的人需要不斷的了解新的技術、工具和方法)
團隊意識(相比個人英雄主義,IT行業更倡導團隊合作)
抗壓能力(很多IT企業的工作強度相對來說還是比較大的)
說明: 上面羅列的這些東西並不是每一項你都要爛熟於心,根據企業招聘的具體要求可以做相應的有針對性的准備。但是前6項應該是最低要求,是作為一個Java軟體工程師必須要具備的專業技能。
二、項目經驗
三、項目管理
四、系統架構
五、第三方工具(插件)應用
六、面試提問
七、面試時可以反問面試官的問題
八、S.A.R.法則
九、面談原則
十、自我評價
C. nosql資料庫有哪些
1. CouchDB
所用語言: Erlang
特點:DB一致性,易於使用
使用許可: Apache
協議: HTTP/REST
雙向數據復制,
持續進行或臨時處理,
處理時帶沖突檢查,
因此,採用的是master-master復制(見編注2)
MVCC – 寫操作不阻塞讀操作
可保存文件之前的版本
Crash-only(可靠的)設計
需要不時地進行數據壓縮
視圖:嵌入式 映射/減少
格式化視圖:列表顯示
支持進行伺服器端文檔驗證
支持認證
根據變化實時更新
支持附件處理
因此, CouchApps(獨立的 js應用程序)
需要 jQuery程序庫
最佳應用場景:適用於數據變化較少,執行預定義查詢,進行數據統計的應用程序。適用於需要提供數據版本支持的應用程序。
例如: CRM、CMS系統。 master-master復制對於多站點部署是非常有用的。
(編注2:master-master復制:是一種資料庫同步方法,允許數據在一組計算機之間共享數據,並且可以通過小組中任意成員在組內進行數據更新。)
2. Redis
所用語言:C/C++
特點:運行異常快
使用許可: BSD
協議:類 Telnet
有硬碟存儲支持的內存資料庫,
但自2.0版本以後可以將數據交換到硬碟(注意, 2.4以後版本不支持該特性!)
Master-slave復制(見編注3)
雖然採用簡單數據或以鍵值索引的哈希表,但也支持復雜操作,例如 ZREVRANGEBYSCORE。
INCR & co (適合計算極限值或統計數據)
支持 sets(同時也支持 union/diff/inter)
支持列表(同時也支持隊列;阻塞式 pop操作)
支持哈希表(帶有多個域的對象)
支持排序 sets(高得分表,適用於范圍查詢)
Redis支持事務
支持將數據設置成過期數據(類似快速緩沖區設計)
Pub/Sub允許用戶實現消息機制
最佳應用場景:適用於數據變化快且資料庫大小可遇見(適合內存容量)的應用程序。
例如:股票價格、數據分析、實時數據搜集、實時通訊。
(編注3:Master-slave復制:如果同一時刻只有一台伺服器處理所有的復制請求,這被稱為
Master-slave復制,通常應用在需要提供高可用性的伺服器集群。)
3. MongoDB
所用語言:C++
特點:保留了SQL一些友好的特性(查詢,索引)。
使用許可: AGPL(發起者: Apache)
協議: Custom, binary( BSON)
Master/slave復制(支持自動錯誤恢復,使用 sets 復制)
內建分片機制
支持 javascript表達式查詢
可在伺服器端執行任意的 javascript函數
update-in-place支持比CouchDB更好
在數據存儲時採用內存到文件映射
對性能的關注超過對功能的要求
建議最好打開日誌功能(參數 –journal)
在32位操作系統上,資料庫大小限制在約2.5Gb
空資料庫大約占 192Mb
採用 GridFS存儲大數據或元數據(不是真正的文件系統)
最佳應用場景:適用於需要動態查詢支持;需要使用索引而不是 map/rece功能;需要對大資料庫有性能要求;需要使用
CouchDB但因為數據改變太頻繁而占滿內存的應用程序。
例如:你本打算採用 MySQL或 PostgreSQL,但因為它們本身自帶的預定義欄讓你望而卻步。
4. Riak
所用語言:Erlang和C,以及一些Javascript
特點:具備容錯能力
使用許可: Apache
協議: HTTP/REST或者 custom binary
可調節的分發及復制(N, R, W)
用 JavaScript or Erlang在操作前或操作後進行驗證和安全支持。
使用JavaScript或Erlang進行 Map/rece
連接及連接遍歷:可作為圖形資料庫使用
索引:輸入元數據進行搜索(1.0版本即將支持)
大數據對象支持( Luwak)
提供「開源」和「企業」兩個版本
全文本搜索,索引,通過 Riak搜索伺服器查詢( beta版)
支持Masterless多站點復制及商業許可的 SNMP監控
最佳應用場景:適用於想使用類似 Cassandra(類似Dynamo)資料庫但無法處理
bloat及復雜性的情況。適用於你打算做多站點復制,但又需要對單個站點的擴展性,可用性及出錯處理有要求的情況。
例如:銷售數據搜集,工廠控制系統;對宕機時間有嚴格要求;可以作為易於更新的 web伺服器使用。
5. Membase
所用語言: Erlang和C
特點:兼容 Memcache,但同時兼具持久化和支持集群
使用許可: Apache 2.0
協議:分布式緩存及擴展
非常快速(200k+/秒),通過鍵值索引數據
可持久化存儲到硬碟
所有節點都是唯一的( master-master復制)
在內存中同樣支持類似分布式緩存的緩存單元
寫數據時通過去除重復數據來減少 IO
提供非常好的集群管理 web界面
更新軟體時軟無需停止資料庫服務
支持連接池和多路復用的連接代理
最佳應用場景:適用於需要低延遲數據訪問,高並發支持以及高可用性的應用程序
例如:低延遲數據訪問比如以廣告為目標的應用,高並發的 web 應用比如網路游戲(例如 Zynga)
6. Neo4j
所用語言: Java
特點:基於關系的圖形資料庫
使用許可: GPL,其中一些特性使用 AGPL/商業許可
協議: HTTP/REST(或嵌入在 Java中)
可獨立使用或嵌入到 Java應用程序
圖形的節點和邊都可以帶有元數據
很好的自帶web管理功能
使用多種演算法支持路徑搜索
使用鍵值和關系進行索引
為讀操作進行優化
支持事務(用 Java api)
使用 Gremlin圖形遍歷語言
支持 Groovy腳本
支持在線備份,高級監控及高可靠性支持使用 AGPL/商業許可
最佳應用場景:適用於圖形一類數據。這是 Neo4j與其他nosql資料庫的最顯著區別
例如:社會關系,公共交通網路,地圖及網路拓譜
7. Cassandra
所用語言: Java
特點:對大型表格和 Dynamo支持得最好
使用許可: Apache
協議: Custom, binary (節約型)
可調節的分發及復制(N, R, W)
支持以某個范圍的鍵值通過列查詢
類似大表格的功能:列,某個特性的列集合
寫操作比讀操作更快
基於 Apache分布式平台盡可能地 Map/rece
我承認對 Cassandra有偏見,一部分是因為它本身的臃腫和復雜性,也因為 Java的問題(配置,出現異常,等等)
最佳應用場景:當使用寫操作多過讀操作(記錄日誌)如果每個系統組建都必須用 Java編寫(沒有人因為選用
Apache的軟體被解僱)
例如:銀行業,金融業(雖然對於金融交易不是必須的,但這些產業對資料庫的要求會比它們更大)寫比讀更快,所以一個自然的特性就是實時數據分析
8. HBase
(配合 ghshephard使用)
所用語言: Java
特點:支持數十億行X上百萬列
使用許可: Apache
協議:HTTP/REST (支持 Thrift,見編注4)
在 BigTable之後建模
採用分布式架構 Map/rece
對實時查詢進行優化
高性能 Thrift網關
通過在server端掃描及過濾實現對查詢操作預判
支持 XML, Protobuf, 和binary的HTTP
Cascading, hive, and pig source and sink moles
基於 Jruby( JIRB)的shell
對配置改變和較小的升級都會重新回滾
不會出現單點故障
堪比MySQL的隨機訪問性能
最佳應用場景:適用於偏好BigTable:)並且需要對大數據進行隨機、實時訪問的場合。
例如: Facebook消息資料庫(更多通用的用例即將出現)
編注4:Thrift
是一種介面定義語言,為多種其他語言提供定義和創建服務,由Facebook開發並開源。
當然,所有的系統都不只具有上面列出的這些特性。這里我僅僅根據自己的觀點列出一些我認為的重要特性。與此同時,技術進步是飛速的,所以上述的內容肯定需要不斷更新。我會盡我所能地更新這個列表。
D. 一個高級java工程師需要具備什麼能力和技術
宏觀方面
一、 JAVA。
要想成為JAVA(高級)工程師肯定要學習JAVA。一般的程序員或許只需知道一些JAVA的語法結構就可以應付了。但要成為JAVA(高級)
工程師,您要對JAVA做比較深入的研究。您應該多研究一下JDBC、IO包、Util包、Text包、JMS、EJB、RMI、線程。如果可能,希望您
對JAVA的所有包都瀏覽一下,知道大概的API,這樣您就發現其實您想實現的很多功能,通過JAVA的API都可以實現了,就不必自己費太多的腦經 了。
二、 設計模式。
其實寫代碼是很容易的事情,我相信您也有同感。但如何寫得好就比較難了。這個「好」字包括代碼可重用性,可維護性,可擴展性等。如何寫出好的代
碼往往要藉助一些設計模式。當然長期的代碼經驗積累,只要您用心,會使您形成自己代碼風格。相信您的代碼也比較符合代碼的可重用性,可維護性,可擴展性。
但既然前人已經給我們總結出了經驗,我們何不踩著前人的肩膀前進?
三、 XML。
現在的系統中不使用XML幾乎是不可能的。XML的功能非常強大,它可以做數據轉換、做系統的配置、甚至可保存您的系統業務數據。因此您必須了解
XML,包括它的語法,結構。您還需要比較熟練的使用解析XML的一些API,比如JDOM,SAX等,因為在我們一般的項目中,XML往往擔當系統配置
信息的作用,您需要用這些API解析這些配置信息,開發完美的項目。
四、 精通使用一種或兩種框架。
「框架都會有許多可重用的代碼,良好的層次關系和業務控制邏輯,基於框架的開
發使你可以省出很多的開發成本」。這里希望您能精通,更多的是希望您能通過框架的使用了解框架的思想。這樣您在開發一個項目時思路會開闊一些,比如您
會想到把SQL語句與您的JAVA代碼分開,再比如您會考慮把您的業務邏輯配置到XML或者資料庫中,這樣整個項目就很容易擴張了。
五、 熟悉主流資料庫。其實真正比較大的項目都是有人專門做資料庫的,但往往很多項目要求作為(高級)工程師的您也參與資料庫的設計以及SQL的編寫。所以為了
更好的為國家做貢獻,建議您還是多了解一些主流資料庫,比如SQLSERVER,ORACLE,多連接SQL和存儲過程以及觸發器。如果您不是「科班」出
身,您還需要補充一些資料庫原理方面的知識。
六、 精通一種或兩種WEBServer。
因為作為JAVA工程師,特別時
想成為高級JAVA工程師的您,您不可避免地要部署您的項目到WebServer上,而且只有當您精通一種WebServer,您才可能最大限度地使用它
的資源,這往往可以節省很多時間和精力。
七、 UML。
您肯定想成為高級工程師,因此您有必要了解或熟練或精通UML,這取決於您有多大決心想成為高級工程師和項目經理。在比較正規的開發團隊
中,UML是討論項目的交流工具,您要想做一個軟體工程師,您至少要能看懂,您要想做高級工程師,您要能通過它來描述您對項目的理解,盡管這不是必須,但
卻很重要。
八、 站在高度分析問題:
這不是一個知識點,也不是通過書本就能學得到的。只所以提到這一點,是因為我比您還著急,我希望您更快的成為一個高級的軟體工程師,而
不是一個一般的軟體工程師。希望您在工作中多向您的系統分析員、需求分析員、系統設計員學習,多站在他們角度上去看您在開發的項目。在最好在項目之初先在
您的腦海里對項目有個大致的分析、設計,然後和他們進行比較,找找差別,想想缺點。
九、 工具。
您在這個階段可能接觸到不同的工具了,盡管您還需要使用JB或者IDEA,但能可能對
ROSE,Together要多了解一些,因為您要畫UML了。不要再對Dreamweaver等HTML編輯器情有獨鍾了,那些JSP頁面讓初級程序員去寫吧
微觀方面
1.Core Java部分
這是最基礎的,對於一個java高級開發/設計人員,你需要對這一部分達到精通的水平,重點內容如下:
a.面向對象編程思想(封裝繼承多態介面)
b.字元串處理
c.java.lang包,java.util包等常用包
d.java異常處理
2.Java高級部分
a.Java I/O流
b.Java多線程技術
c.Java網路編程
d.Java Swing
後兩項可以了解即可,如果項目需要可以深入研究
3.前端基本技能
* HTML + CSS網頁開發
* JavaScript
* Jquery
* 瀏覽器兼容性 CSS hack(了解)
4.熟練使用JSP + Servlet進行開發
5.MVC設計模式,原理,以及相關框架,如Struts
6.SSH框架
7.緩存技術 session & cookie
8.熟練使用一種以上Java開發工具(Eclipse/MyEclipse/Jbuilder/Jcreator/IntelliJIEDA/NetBeans)
9.熟練使用XML
JDOM w3c.dom SAX
10.Java設計模式
工廠模式,單例模式 ==
11.Java反射機制
反射的各種用法
12.了解或熟悉 C, C++, .NET
13.熟悉JDK的配置,環境變數
14.資料庫oracle必學,其他最好了解一種以上(mysql,sql server,access==)
oracle:視圖,索引,存儲過程,觸發器,游標,包,常用函數 ==
15.資料庫原理
事務的原理,鎖機制,表連接,復雜查詢語句(工作經驗),性能調優,鎖表以及解決方案==
16.JDBC,連接池
17.Ajax,反向Ajax
18.HTTP協議,request 和 response的原理,HTTP status(了解常用的),Https原理
19.熟悉Linux基本命令,使用過Linux/Unix系統,可以編寫shell腳本,可以在Linux上部署項目
20.了解windows系統批處理腳本bat
21.了解HTML5,最好學習過
22.熟悉一種JS框架,如Prototype
23.J2EE原理 熟悉一種以上web容器如Tomcat,JBoss,websphere,weblogic==
24.熟悉ant或maven
25.熟悉一門腳本語言,如python ,ruby
26.了解php/ asp
27.了解ftp協議及原理
28.熟練使用Junit測試,熟悉Mockito等測試工具
29,熟悉javac,javadoc,native,native2ascii等常用命令
30.熟悉常用的排序演算法,如冒泡排序,快速排序等,最好自己研究過一些的演算法。
31.了解Flex(不學也沒關系)
32.了解敏捷開發模式
33.工作流workflow至少用過一種,如OSworkflow,了解原理
34.使用過VPN了解其原理
35.熟悉jstl表達式和el表達式
36.熟悉webservice,WSDL,SOAP
37.圖片處理,如圖片上傳,預覽,限制大小等
38.版本控制工具,CVS VSS SVN
39,JSON技術,JSON+AJAX
40.分頁技術,最好自己實現過不僅僅是用過要知道原理
41.Java Mail
42.Java讀寫txt,excel,JXL技術
43.JVM原理,JVM內存管理,GC,Java堆棧池
44.熟練使用下面的工具:
office辦公軟體,word,excel,ppt等
plsql,sqldevelop 資料庫開發工具
outlook大公司都用
ue編輯器
瀏覽器控制台,調試
SHH/PUTTY 遠程
45.UML建模工具Rational Rose等
46. 使用log4j
47.使用過開放Api如網路,騰訊街景,新浪微博等
48.頁面靜態化技術(偽靜態頁面)
49.報表技術,使用過報表製作工具,如水晶易表。
50.定時任務,如Spring batch ,學會自定義batch任務(不適用第三方工具)
51.了解uuid
52.b/s 和 c/s架構
53.正則表達式
54.了解jndi jms
55.ERP
56.UNICODE編碼,亂碼解決
57.開源網路編輯器,如ckEditor
58.二進制原理
59.使用過,了解過開源論壇框架,如discuzz
60.GWT,Closure框架
61.了解大數據,雲計算
62.搜索引擎搜索技術
63.軟體工程,項目管理
E. 全球四個最大的四個開源庫
開源資料庫MySQLMySQL是一個開放源碼的小型關聯式資料庫管理系統,開發者為瑞典MySQL AB公司。目前MySQL被廣泛地應用在Internet上的中小型網站中。由於其體積小、速度快、總體擁有成本低,尤其是開放源...開源資料庫MySQLMySQL是一個開放源碼的小型關聯式資料庫管理系統,開發者為瑞典MySQL AB公司。目前MySQL被廣泛地應用在Internet上的中小型網站中。由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,許多中小型網站為了降低網站總體擁有成本而選擇了MySQL作為網站資料庫。盤點:開源社區那些免費的資料庫軟體MySQL為多種編程語言提供了API,包括C、C++、C#、Delphi、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。而其自身是採用C和C++編寫的,使用了多種編譯器進行測試,所以,MySQL能夠保證源代碼具有很強的可移植性。這樣的一款資料庫,自然能夠支持幾乎所有的操作系統,從Unix、Linux到Windows,具體包括AIX、BSDi、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、NetBSD、OpenBSD、OS/2 Wrap、Solaris、SunOS、Windows等多種操作系統。最重要的是,它是一個可以處理擁有上千萬條記錄的大型資料庫。與此同時,MySQL也產生了很多分支版本的資料庫也非常值得推薦。首先是MariaDB,它是一個採用Maria存儲引擎的MySQL分支版本,是由原來MySQL的作者 Michael Widenius創辦的公司所開發的免費開源的資料庫伺服器。與MySQL相比較,MariaDB更強的地方在於它擁有更多的引擎,包括Maria存儲引擎、PBXT存儲引擎、XtraDB存儲引擎、FederatedX存儲引擎,它能夠更快的復制查詢處理、運行的速度更快、更好的功能測試以及支持對Unicode的排序等。其次是rcona,它為MySQL資料庫伺服器進行了改進,在功能和性能上較MySQL有著很顯著的提升。該版本提升了在高負載情況下的InnoDB的性能,同時,它還為DBA提供一些非常有用的性能診斷工具,並且提供很多參數和命令來控制伺服器行為。第三是Percona Server,它使用了諸如google-mysql-tools、Proven Scaling和 Open Query對MySQL進行改造。並且,它只包含MySQL的伺服器版,並沒有提供相應對 MySQL的Connector和GUI工具進行改進。非關系型資料庫NoSQL從NoSQL的字面上理解,NoSQL就是Not Only SQL,被業界認為是一項全新的資料庫革命性運動,早期就有人提出,發展至2009年趨勢越發高漲。NoSQL的擁護者們提倡運用非關系型的數據存儲,相對於目前鋪天蓋地的關系型資料庫運用,這一概念無疑是一種全新的思維的注入。盤點:開源社區那些免費的資料庫軟體當然,NoSQL也是隨著互聯網Web2.0網站的興起才能取得長足的進步。關鍵的需求在於,傳統的關系資料庫在應付Web2.0網站,特別是超大規模和高並發的SNS類型的web2.0純動態網站顯得力不從心,暴露了很多難以克服的問題,而非關系型的資料庫則由於其本身的特點得到了非常迅速的發展。首先推薦的是Oracle NoSQL Database,這是一個社區版。Oracle的這個NoSQL Database, 是在10月4號的甲骨文全球大全上發布的Big Data Appliance的其中一個組件,Big Data Appliance是一個集成了Hadoop、NoSQL Database、Oracle資料庫Hadoop適配器、Oracle資料庫Hadoop裝載器及R語言的系統。其次推薦的是Membase。Membase是NoSQL家族的一個新的重量級的成員。Membase是開源項目,源代碼採用了Apache2.0的使用許可。該項目託管在GitHub.Source tarballs上,目前可以下載beta版本的Linux二進制包。該產品主要是由North Scale的memcached核心團隊成員開發完成,其中還包括Zynga和NHN這兩個主要貢獻者的工程師,這兩個組織都是很大的在線游戲和社區網路空間的供應商。並且,Membase容易安裝、操作,可以從單節點方便的擴展到集群,而且為memcached(有線協議的兼容性)實現了即插即用功能,在應用方面為開 發者和經營者提供了一個比較低的門檻。做為緩存解決方案,Memcached已經在不同類型的領域(特別是大容量的Web應用)有了廣泛的使用,其中 Memcached的部分基礎代碼被直接應用到了Membase伺服器的前端。通過兼容多種編程語言和框架,Membase具備了很好的復用性。在安裝和配置方面,Membase提供了有效的圖形化界面和編程介面,包括可配置 的告警信息。Membase的目標是提供對外的線性擴展能力,包括為了增加集群容量,可以針對統一的節點進行復制。 另外,對存儲的數據進行再分配仍然是必要的。第三推薦的是Hibari。Hibari在日語中意思為「雲雀」,它是一個專為高可靠性和大數據存儲的資料庫引擎,可用於雲計算環境中,例如 webmail、SNS和其他要求T/P級數據存儲的環境中。同時,Hibari也支持Java,C/C++,Python,Ruby和Erlang語言的客戶端。第四推薦的是memcachedb。這是一個由新浪網的開發人員開放出來的開源項目,給memcached分布式緩存伺服器添加了Berkeley DB的持久化存儲機制和非同步主輔復制機制,讓memcached具備了事務恢復能力、持久化能力和分布式復制能力,非常適合於需要超高性能讀寫速度,但是 不需要嚴格事務約束,能夠被持久化保存的應用場景,例如memcachedb被應用在新浪博客上面。第五推薦的是Leveldb。這是一個Google實現的非常高效的kv資料庫,目前的版本1.2能夠支持billion級別的數據量了。 在這個數量級別下還有著非常高的性能,主要歸功於它的良好的設計,特別是LSM演算法。LevelDB是單進程的服務,性能非常之高,在一台4個Q6600的CPU機器上,每秒鍾寫數據超過40w,而隨機讀的性能每秒鍾超過10w。XML資料庫的優勢XML資料庫是一種支持對XML格式文檔進行存儲和查詢等操作的數據管理系統。在系統中,開發人員可以對資料庫中的XML文檔進行查詢、導出和指定格式的序列化。目前XML資料庫有三種類型:XMLEnabledDatabase(XEDB),即能處理XML的資料庫;NativeXMLDatabase(NXD),即純XML資料庫;HybridXMLDatabase(HXD),即混合XML資料庫。關系資料庫中的第一代XML支持是切分(或分解)文檔,以適應關系表格或將文檔原封不動地存儲為字元或二進制大對象(CLOB 或 BLOB)。這兩個方法中的任一種都嘗試將XML模型強制轉換成關系模型。然而,這兩種方法在功能和性能上都有很大的局限性。混合型模型將XML存儲在類似於DOM的模型中。XML數據被格式化為緩沖數據頁,以便快速導航和執行查詢以及簡化索引編制。在這里,首要要推薦的XML資料庫是Sedna。它號稱是一款原生態的XML資料庫,提供了全功能的核心資料庫服務,包括持久化存儲、ACID事務、索引、安全、熱備、UTF8等。實現了 W3C XQuery 規范,支持全文搜索以及節點級別的更新操作。第二款XML資料庫是BaseX。這款資料庫用來存儲緊縮的XML數據,提供了高效的 XPath和XQuery的實現,同時,它還提供一個前端操作界面。盤點:開源社區那些免費的資料庫軟體第三款推薦的是XMLDB。這款資料庫使用了關系型資料庫來存儲任意的XML文檔,因為所採用的存儲機制,所以文檔的搜索速度特別快,同時執行XSL轉換也相當快。XMLDB同時還提供了一個PHP的模塊,可以應用在Web應用中。第四塊推薦的是X-Hive/DB。它是一個為需要高級XML數據處理和存儲功能的軟體開發者設計的強大的專屬XML資料庫。X-Hive/DB Java API包含存儲、查詢、檢索、轉換和發表XML數據的方法。與傳統關系型資料庫相比,XML資料庫具有以下優勢:第一,XML資料庫能夠對半結構化數據進行有效的存取和管理。如網頁內容就是一種半結構化數據,而傳統的關系資料庫對於類似網頁內容這類半結構化數據無法進行有效的管理。第二,提供對標簽和路徑的操作。傳統資料庫語言允許對數據元素的值進行操作,不能對元素名稱操作,半結構化資料庫提供了對標簽名稱的操作,還包括了對路徑的操作。第三,當數據本身具有層次特徵時,由於XML數據格式能夠清晰表達數據的層次特徵,因此XML資料庫便於對層次化的數據進行操作。XML資料庫適合管理復雜數據結構的數據集,如果己經以XML格式存儲信息,則XML資料庫利於文檔存儲和檢索;可以用方便實用的方式檢索文檔,並能夠提供高質量的全文搜索引擎。另外XML資料庫能夠存儲和查詢異種的文檔結構,提供對異種信息存取的支持。
F. java開發工程師必須要學的技術有哪些
學習內容:
初級部分
Java 程序設計基礎,包括 J2sdk基礎、Java面向對象基礎、Java API使用、數據結構及演算法基礎、Java AWT圖形界面程序開發;
J2SE平台Java程序設計,包括Swing圖形程序設計, Socket網路應用程序設計,對象序列化,Java 常用數據結構,Applet,流和文件,多線程程序設計;
Java桌面系統項目開發,4~5人組成一個項目組,項目大小為(15人*工作日);
Linux的基本操作,Linux下的Java程序開發,Linux系統的簡單管理;
Oracle資料庫,包括SQL/PLSQL;資料庫和資料庫設計;簡單掌握ORACLE9i 資料庫的管理;[2]
中級部分
Java Web應用編程,包括 Java Oracle 編程,即JDBC;JavaWeb編程,包括JSP、Servlet,JavaBean;Java應用編程,包括Weblogic、Websphere、Tomcat;以及利用Jbuilder開發Java程序;
MVC與Struts,學習業界通用的MVC設計模式和Struts架構;
Java B/S商務項目開發,4~5人一個項目組,項目大小為(25人*工作日左右)
高級部分
J2ME程序設計,包括J2EE程序、J2ME;Java高級程序設計(J2EE),包括J2EE體系結構和J2EE技術、EJB;Weblogic使用、 JBuilder開發;
Java和XML,包括Java Web Service,JavaXML, 業界主流XML解析器程序設計;
軟體企業規范和軟體工程,包括UML系統建模型和設計(Rational Rose 200x)軟體工程和業界開發規范;CVS版本控制、Java Code書寫規范;
J2EE商務應用系統項目開發,4~5人一個項目組,項目大小為(25人*工作日左右)。
………………………………………………………………………………………………
看你問的問題,應該是對java很感興趣,其實你可以自學java。關於如何學習java,我剛才看到一篇很不錯的文章,是一個農民工介紹自己如何自學java,並找到Java的工作,裡面介紹了他的學習方法和學習過程,希望對你有幫助。
我是一名地地道道的農民工,生活在經濟落後的農村,有一個哥哥和一個弟弟,父母都是地道的農民,日出而作,日落而息,我從小到大學習一直很好,從小學到高一都,成績在全級一直名列前茅,這樣我也順利了考上省的重點高中,然而,每個學期開學是家裡最為難的時候,每次交學費都讓父母發愁許久,家裡為了給我籌錢讀書,都借了不少錢,才讓我讀上高中。我知道我讀到高中家裡已經欠了好多債,為了減輕家裡的負擔,我選擇了退學。
2009年我高一退學,為了給家裡還債,干過建築工地的小工,搞過塑料製品加工,送水工等等。很工資都很低,一個月也就1000多,加上加班費一個月能拿2000多一點,我每個月都向家裡寄回800-1000元,到了2011年末,一次偶然的機會我接觸了Java,聽說Java的前景挺不錯,工資相對於我一個農民工來說簡直是天文數字,於是我在新華書店買了幾本Java的書,盡管白天辛苦工作,晚上回來還是堅持看書,但有於基礎太差很多都很不明白,但還是堅持看,一有看1-2個小時Java的書,看著看著許多基礎都慢慢的學會了,但那些比較難的還是看不懂,後來還買了有些關於框架的書,還是看不懂,這樣斷斷續續的持續了半年多,覺得自己Java的基礎都差不多懂了,但框架還是看不懂,還有最缺的項目經驗,看了很多招聘Java程序員的簡介都要項目經驗,相對我一個農民工來連框架都弄不明白,想找一份Java工作對我來說簡直是奢侈。我只想學Java,並不敢想以後能從事Java的工作。
有一次,在網路上看到一篇讓我很鼓舞的文章,是一個Java高手介紹在沒有基礎的朋友怎麼自學入門Java,文章寫的很好,包含了如何學習,該怎麼學習,他提到一個方法就是看視頻,因為看書實在太枯燥和費解的,不少是我們也看不懂,這點我真的很認同,我自己看書都看了很久才學會基礎。曾經有想過參加培訓,但是上萬元的培訓費讓我望而卻步,我工資這么低,每個月還有向家裡匯錢,加上城市消費比較高,雖然每個月只有幾百剩下,但是相對於上萬萬學費和四個月的吃住費用逼我連想不敢想。 於是我決定看視頻,我就去搜索Java的視頻,雖然我零星的找到一些Java的視頻,但是都不系統。最重要連項目都沒有。後來我找到一份很好的視頻,是IT學習聯盟這個網站一套視頻叫<<零基礎Java就業班>>的教程還不錯,很完整。還贈送11個頂級企業項目。價格很合理,於是我買下來。
於是開始了我的自學Java的路,收到光碟後,我就開始學習,剛開始學習還不錯,是從零基礎教起,老師幽默風趣而又輕松的課堂教課,使我發現原來學習JAVA並不是一件很難的事情。因為我本來基礎還不錯,前面的基礎看一篇我就過去了,到了框架,我覺不又不是很難,可能老師太牛了,他能把復雜的問題講的比較通俗易懂,有些難點的地方我還是連續看了五六次,把他弄懂。每天下午6點下班後,吃了飯,馬上跑回家。看視頻,買了幾本筆記本。當時,為了編程還花幾百元了台二手的台式電腦,配置一般,但編程是足夠的。一邊看視頻,一邊記筆記,把重點都記下來,還一邊跟著老師敲代碼,為了能盡早學會Java。每天都堅持學5-6個小時。經常學到晚上一點多才睡覺。星期六,日不用上班,每天7點多起床,學到晚上11,12點。那段時間特別辛苦,特別累。在學習Java的三個多月里,除了吃飯睡覺工作,剩餘的時間都在學習,因為我知道自己的計算機基礎不是很好,也沒有學過什麼計算機,只是學了些Java基礎,相對於那些科班的人來說我要比他們付出更多的努力。我只能咬緊牙關,堅持下去,我不能放棄,我要完成我的夢想,我要讓我的家人過上好日子。終於三個多月後我把Java教程里的內容和項目都學完了,在學項目的過程中我發現項目特別重要,他能把你學過的知識全部聯系起來,能更好的理解你所學的知識。還有學習過程中,動手很重要,要經常跟著老師動手敲,動手吧,跟著做,一行一行的跟著敲,再試著加一些自己的功能,按照自己的思路敲一些代碼,收獲遠比干聽大的多。 如果遇到暫時對於一些思路不能理解的,動手寫,先寫代碼,慢慢你就會懂了。這套視頻還贈送了11個頂級企業項目,對於我沒有任何經驗的人來說,這個太重要了,還有在學習項目是提升能力最快的方法。項目能把所有的知識點全都連到一起了,不再是分散的,而是形成一個整體了。那種感覺是僅僅深入鑽研知識點而不寫真實項目的人所不能體會的。一個項目就是一根繩子可以把大片的知識串到一起。 就這樣,我用了兩個月也把項目給學完了。其實學完教程差不錯就達到就業水平,但是我可能覺得自己學歷低還是把那11個頂級企業項目才去找工作。
接著我就到51job瘋狂的投簡歷,因為我的學歷問題,初中畢業,說真的,大公司沒有人會要我。所以我頭的都是民營的小公司,我希望自己的努力有所回報。沒有想過幾天後,就有面試了,但是第一次面試我失敗了,雖然我自認為筆試很好,因為我之前做了准備,但是他們的要求比價嚴格,需要有一年的項目經驗,所以我沒有被選中。 後來陸續面試了幾加公司,終於功夫不負有心人,我終於面試上了一家民營的企業。公司規模比較小,我的職務是Java程序員。我想我比較幸運,經理看中我的努力,就決定呂勇我,開的工資是3500一個月,雖然我知道在北京3500隻能過溫飽的生化,但是我想我足夠了,比起以前的工資好了些,以後可以多寄些錢回家。我想只要我繼續努力。我工資一定會翻倍的。 把本文寫出來,希望能讓和我一樣的沒有基礎的朋友有信心,其實我們沒有自卑,我們不比別人笨,只有我們肯努力,我們一樣會成功。
G. 嵌入式實時資料庫系統並發控制機制的特點主要體現在哪些方面
1. CouchDB 所用語言: Erlang 特點:DB一致性,易於使用 使用許可: Apache 協議: HTTP/REST 雙向數據復制, 持續進行或臨時處理, 處理時帶沖突檢查, 因此,採用的是master-master復制(見編注2) MVCC – 寫操作不阻塞讀操作 可保存文件之前的版本 Crash-only(可靠的)設計 需要不時地進行數據壓縮 視圖:嵌入式 映射/減少 格式化視圖:列表顯示 支持進行伺服器端文檔驗證 支持認證 根據變化實時更新 支持附件處理 因此, CouchApps(獨立的 js應用程序) 需要 jQuery程序庫 最佳應用場景:適用於數據變化較少,執行預定義查詢,進行數據統計的應用程序。適用於需要提供數據版本支持的應用程序。 例如: CRM、CMS系統。 master-master復制對於多站點部署是非常有用的。 (編注2:master-master復制:是一種資料庫同步方法,允許數據在一組計算機之間共享數據,並且可以通過小組中任意成員在組內進行數據更新。) 2. Redis 所用語言:C/C++ 特點:運行異常快 使用許可: BSD 協議:類 Telnet 有硬碟存儲支持的內存資料庫, 但自2.0版本以後可以將數據交換到硬碟(注意, 2.4以後版本不支持該特性!) Master-slave復制(見編注3) 雖然採用簡單數據或以鍵值索引的哈希表,但也支持復雜操作,例如 ZREVRANGEBYSCORE。 INCR & co (適合計算極限值或統計數據) 支持 sets(同時也支持 union/diff/inter) 支持列表(同時也支持隊列;阻塞式 pop操作) 支持哈希表(帶有多個域的對象) 支持排序 sets(高得分表,適用於范圍查詢) Redis支持事務 支持將數據設置成過期數據(類似快速緩沖區設計) Pub/Sub允許用戶實現消息機制 最佳應用場景:適用於數據變化快且資料庫大小可遇見(適合內存容量)的應用程序。 例如:股票價格、數據分析、實時數據搜集、實時通訊。 (編注3:Master-slave復制:如果同一時刻只有一台伺服器處理所有的復制請求,這被稱為 Master-slave復制,通常應用在需要提供高可用性的伺服器集群。) 3. MongoDB 所用語言:C++ 特點:保留了SQL一些友好的特性(查詢,索引)。 使用許可: AGPL(發起者: Apache) 協議: Custom, binary( BSON) Master/slave復制(支持自動錯誤恢復,使用 sets 復制) 內建分片機制 支持 javascript表達式查詢 可在伺服器端執行任意的 javascript函數 update-in-place支持比CouchDB更好 在數據存儲時採用內存到文件映射 對性能的關注超過對功能的要求 建議最好打開日誌功能(參數 –journal) 在32位操作系統上,資料庫大小限制在約2.5Gb 空資料庫大約占 192Mb 採用 GridFS存儲大數據或元數據(不是真正的文件系統) 最佳應用場景:適用於需要動態查詢支持;需要使用索引而不是 map/rece功能;需要對大資料庫有性能要求;需要使用 CouchDB但因為數據改變太頻繁而占滿內存的應用程序。 例如:你本打算採用 MySQL或 PostgreSQL,但因為它們本身自帶的預定義欄讓你望而卻步。 4. Riak 所用語言:Erlang和C,以及一些Javascript 特點:具備容錯能力 使用許可: Apache 協議: HTTP/REST或者 custom binary 可調節的分發及復制(N, R, W) 用 JavaScript or Erlang在操作前或操作後進行驗證和安全支持。 使用JavaScript或Erlang進行 Map/rece 連接及連接遍歷:可作為圖形資料庫使用 索引:輸入元數據進行搜索(1.0版本即將支持) 大數據對象支持( Luwak) 提供「開源」和「企業」兩個版本 全文本搜索,索引,通過 Riak搜索伺服器查詢( beta版) 支持Masterless多站點復制及商業許可的 SNMP監控 最佳應用場景:適用於想使用類似 Cassandra(類似Dynamo)資料庫但無法處理 bloat及復雜性的情況。適用於你打算做多站點復制,但又需要對單個站點的擴展性,可用性及出錯處理有要求的情況。 例如:銷售數據搜集,工廠控制系統;對宕機時間有嚴格要求;可以作為易於更新的 web伺服器使用。 5. Membase 所用語言: Erlang和C 特點:兼容 Memcache,但同時兼具持久化和支持集群 使用許可: Apache 2.0 協議:分布式緩存及擴展 非常快速(200k+/秒),通過鍵值索引數據 可持久化存儲到硬碟 所有節點都是唯一的( master-master復制) 在內存中同樣支持類似分布式緩存的緩存單元 寫數據時通過去除重復數據來減少 IO 提供非常好的集群管理 web界面 更新軟體時軟無需停止資料庫服務 支持連接池和多路復用的連接代理 最佳應用場景:適用於需要低延遲數據訪問,高並發支持以及高可用性的應用程序 例如:低延遲數據訪問比如以廣告為目標的應用,高並發的 web 應用比如網路游戲(例如 Zynga) 6. Neo4j 所用語言: Java 特點:基於關系的圖形資料庫 使用許可: GPL,其中一些特性使用 AGPL/商業許可 協議: HTTP/REST(或嵌入在 Java中) 可獨立使用或嵌入到 Java應用程序 圖形的節點和邊都可以帶有元數據 很好的自帶web管理功能 使用多種演算法支持路徑搜索 使用鍵值和關系進行索引 為讀操作進行優化 支持事務(用 Java api) 使用 Gremlin圖形遍歷語言 支持 Groovy腳本 支持在線備份,高級監控及高可靠性支持使用 AGPL/商業許可 最佳應用場景:適用於圖形一類數據。這是 Neo4j與其他nosql資料庫的最顯著區別 例如:社會關系,公共交通網路,地圖及網路拓譜 7. Cassandra 所用語言: Java 特點:對大型表格和 Dynamo支持得最好 使用許可: Apache 協議: Custom, binary (節約型) 可調節的分發及復制(N, R, W) 支持以某個范圍的鍵值通過列查詢 類似大表格的功能:列,某個特性的列集合 寫操作比讀操作更快 基於 Apache分布式平台盡可能地 Map/rece 我承認對 Cassandra有偏見,一部分是因為它本身的臃腫和復雜性,也因為 Java的問題(配置,出現異常,等等) 最佳應用場景:當使用寫操作多過讀操作(記錄日誌)如果每個系統組建都必須用 Java編寫(沒有人因為選用 Apache的軟體被解僱) 例如:銀行業,金融業(雖然對於金融交易不是必須的,但這些產業對資料庫的要求會比它們更大)寫比讀更快,所以一個自然的特性就是實時數據分析 8. HBase (配合 ghshephard使用) 所用語言: Java 特點:支持數十億行X上百萬列 使用許可: Apache 協議:HTTP/REST (支持 Thrift,見編注4) 在 BigTable之後建模 採用分布式架構 Map/rece 對實時查詢進行優化 高性能 Thrift網關 通過在server端掃描及過濾實現對查詢操作預判 支持 XML, Protobuf, 和binary的HTTP Cascading, hive, and pig source and sink moles 基於 Jruby( JIRB)的shell 對配置改變和較小的升級都會重新回滾 不會出現單點故障 堪比MySQL的隨機訪問性能 最佳應用場景:適用於偏好BigTable:)並且需要對大數據進行隨機、實時訪問的場合。 例如: Facebook消息資料庫(更多通用的用例即將出現) 編注4:Thrift 是一種介面定義語言,為多種其他語言提供定義和創建服務,由Facebook開發並開源。 當然,所有的系統都不只具有上面列出的這些特性。這里我僅僅根據自己的觀點列出一些我認為的重要特性。與此同時,技術進步是飛速的,所以上述的內容肯定需要不斷更新。我會盡我所能地更新這個列表。
H. 有哪些nosql軟體能在windows平台下運行
Membase Membase 是 NoSQL 家族的一個新的重量級的成員。Membase是開源項目,源代碼採用了Apache2.0的使用許可。該項目託管在GitHub.Source tarballs上,可以下載beta版本的Linux二進制包。該產品主要是由North Scale的memcached核心團隊成員開發完成,其中還包括Zynga和NHN這兩個主要貢獻者的工程師,這兩個組織都是很大的在線游戲和社區網路空間的供應商。 Membase容易安裝、操作,可以從單節點方便的擴展到集群,而且為memcached(有線協議的兼容性)實現了即插即用功能,在應用方面為開發者和經營者提供了一個比較低的門檻。做為緩存解決方案,Memcached已經在不同類型的領域(特別是大容量的Web應用)有了廣泛的使用,其中 Memcached的部分基礎代碼被直接應用到了Membase伺服器的前端。 通過兼容多種編程語言和框架,Membase具備了很好的復用性。在安裝和配置方面,Membase提供了有效的圖形化界面和編程介面,包括可配置 的告警信息。 Membase的目標是提供對外的線性擴展能力,包括為了增加集群容量,可以針對統一的節點進行復制。 另外,對存儲的數據進行再分配仍然是必要的。 這方面的一個有趣的特性是NoSQL解決方案所承諾的可預測的性能,類准確性的延遲和吞吐量。通過如下方式可以獲得上面提到的特性: ◆ 自動將在線數據遷移到低延遲的存儲介質的技術(內存,固態硬碟,磁碟) ◆ 可選的寫操作一一非同步,同步(基於復制,持久化) ◆ 反向通道再平衡[未來考慮支持] ◆ 多線程低鎖爭用 ◆ 盡可能使用非同步處理 ◆ 自動實現重復數據刪除 ◆ 動態再平衡現有集群 ◆ 通過把數據復制到多個集群單元和支持快速失敗轉移來提供系統的高可用性。 MongoDB MongoDB是一個介於關系資料庫和非關系資料庫之間的產品,是非關系資料庫當中功能最豐富,最像關系資料庫的。他支持的數據結構非常鬆散,是類似json的bjson格式,因此可以存儲比較復雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似於面向對象的查詢語言,幾乎可以實現類似關系資料庫單表查詢的絕大部分功能,而且還支持對數據建立索引。它的特點是高性能、易部署、易使用,存儲數據非常方便。 主要功能特性: ◆ 面向集合存儲,易存儲對象類型的數據 「面向集合」(Collenction-Oriented),意思是數據被分組存儲在數據集中,被稱為一個集合(Collenction)。每個 集合在資料庫中都有一個唯一的標識名,並且可以包含無限數目的文檔。集合的概念類似關系型資料庫(RDBMS)里的表(table),不同的是它不需要定 義任何模式(schema)。 ◆ 模式自由 模式自由(schema-free),意味著對於存儲在mongodb資料庫中的文件,我們不需要知道它的任何結構定義。如果需要的話,你完全可以把不同結構的文件存儲在同一個資料庫里。 ◆支持動態查詢 ◆支持完全索引,包含內部對象 ◆支持查詢 ◆支持復制和故障恢復 ◆使用高效的二進制數據存儲,包括大型對象(如視頻等) ◆自動處理碎片,以支持雲計算層次的擴展性 ◆支持RUBY,PYTHON,JAVA,C++,PHP等多種語言 ◆文件存儲格式為BSON(一種JSON的擴展) BSON(Binary Serialized document Format)存儲形式是指:存儲在集合中的文檔,被存儲為鍵-值對的形式。鍵用於唯一標識一個文檔,為字元串類型,而值則可以是各種復雜的文件類型。 ◆可通過網路訪問 MongoDB服務端可運行在Linux、Windows或OS X平台,支持32位和64位應用,默認埠為27017。推薦運行在64位平台,因為MongoDB在32位模式運行時支持的最大文件尺寸為2GB。 MongoDB把數據存儲在文件中(默認路徑為:/data/db),為提高效率使用內存映射文件進行管理。 Hypertable Hypertable是一個開源、高性能、可伸縮的資料庫,它採用與Google的Bigtable相似的模型。在過去數年中,Google為在PC集群 上運行的可伸縮計算基礎設施設計建造了三個關鍵部分。第一個關鍵的基礎設施是Google File System(GFS),這是一個高可用的文件系統,提供了一個全局的命名空間。它通過跨機器(和跨機架)的文件數據復制來達到高可用性,並因此免受傳統 文件存儲系統無法避免的許多失敗的影響,比如電源、內存和網路埠等失敗。第二個基礎設施是名為Map-Rece的計算框架,它與GFS緊密協作,幫 助處理收集到的海量數據。第三個基礎設施是Bigtable,它是傳統資料庫的替代。Bigtable讓你可以通過一些主鍵來組織海量數據,並實現高效的 查詢。Hypertable是Bigtable的一個開源實現,並且根據我們的想法進行了一些改進。 Apache Cassandra Apache Cassandra是一套開源分布式Key-Value存儲系統。它最初由Facebook開發,用於儲存特別大的數據。Facebook在使用此系統。 主要特性: ◆ 分布式 ◆ 基於column的結構化 ◆ 高伸展性 Cassandra的主要特點就是它不是一個資料庫,而是由一堆資料庫節點共同構成的一個分布式網路服務,對Cassandra 的一個寫操作,會被復制到其他節點上去,對Cassandra的讀操作,也會被路由到某個節點上面去讀取。對於一個Cassandra群集來說,擴展性能 是比較簡單的事情,只管在群集裡面添加節點就可以了。 Cassandra是一個混合型的非關系的資料庫,類似於Google的BigTable。其主要功能比 Dynomite(分布式的Key-Value存 儲系統)更豐富,但支持度卻不如文檔存儲MongoDB(介於關系資料庫和非關系資料庫之間的開源產品,是非關系資料庫當中功能最豐富,最像關系資料庫 的。Cassandra最初由Facebook開發,後轉變成了開源項目。它是一個網路社交雲計算方面理想的資料庫。以Amazon專有的完全分布式的Dynamo為基礎,結合了Google BigTable基於列族(Column Family)的數據模型。P2P去中心化的存儲。很多方面都可以稱之為Dynamo 2.0。 CouchDB 所用語言: Erlang 特點:DB一致性,易於使用 使用許可: Apache 協議: HTTP/REST 雙向數據復制,持續進行或臨時處理,處理時帶沖突檢查,因此,採用的是master-master復制 MVCC – 寫操作不阻塞讀操作 可保存文件之前的版本 Crash-only(可靠的)設計 需要不時地進行數據壓縮 視圖:嵌入式 映射/減少 格式化視圖:列表顯示 支持進行伺服器端文檔驗證 支持認證 根據變化實時更新 支持附件處理 因此, CouchApps(獨立的 js應用程序) 需要 jQuery程序庫 最佳應用場景:適用於數據變化較少,執行預定義查詢,進行數據統計的應用程序。適用於需要提供數據版本支持的應用程序。 例如:CRM、CMS系統。 master-master復制對於多站點部署是非常有用的。 和其他資料庫比較,其突出特點是: ◆ 模式靈活 :使用Cassandra,像文檔存儲,你不必提前解決記錄中的欄位。你可以在系統運行時隨意的添加或移除欄位。這是一個驚人的效率提升,特別是在大型部 署上。 ◆ 真正的可擴展性 :Cassandra是純粹意義上的水平擴展。為給集群添加更多容量,可以指向另一台電腦。你不必重啟任何進程,改變應用查詢,或手動遷移任何數據。 ◆ 多數據中心識別 :你可以調整你的節點布局來避免某一個數據中心起火,一個備用的數據中心將至少有每條記錄的完全復制。 ◆ 范圍查詢 :如果你不喜歡全部的鍵值查詢,則可以設置鍵的范圍來查詢。 ◆ 列表數據結構 :在混合模式可以將超級列添加到5維。對於每個用戶的索引,這是非常方便的。 ◆ 分布式寫操作 :有可以在任何地方任何時間集中讀或寫任何數據。並且不會有任何單點失敗。 問度娘,啥都有。