① 關於學習安卓底層,懂得進
我幹了3年android sdk開發,覺得到了瓶勁沒法更進一步,於是花了一年多點時間,大概摸到點門徑。根據前輩的經驗,Android底層完全入門需要兩年。
先說下我的入門過程:
第零步,下載源碼,我下的4.2的,框架層源碼10G,內核2G多,ctags給框架層建的標簽文件都有600M,當時讓我有點震撼,用的vim+ctags+cscope來閱讀,還算不錯,架構挺清晰的。
第一步,我找到了一本好書《Android的設計與實現 第一卷》它講了Android框架層的啟動,初始化,服務框架初始化,Binder,消息循環,PackageManagerService,ActivityManagerService。據作者說後面會出講UI子系統的第二卷,拭目以待。其實這本書看了幾十頁我就發現需要第二步的知識,否則看不下去,於是跳去第二步。
第二步,學習Linux系統編程,在看《Android的設計與實現》的時候我發現,框架層的Native部分,全是Linux編程。為了掌握這部分知識,我花了4個月學習了《Linux系統編程手冊》(TLPI)這本1000多頁的書,我以前是搞WIndows文件系統這塊的,所以C語言還比較熟,TLPI的習題很有意思,量也比較大,堅持下來還是收獲很多。
第三步,花了4個月學習了一些Linux內核的知識,看了LKD,PLKA看了一半多。越學越沒底,覺得不懂得越來越多,不過這個也正常,只有靠慢慢磨,估計以後要不斷的磨這塊。
第四步,回頭看Android源碼,這次一口氣看完了《Android的設計與實現 第一卷》,終於對框架層有了譜。同時真的數次把我看暈,前面看Linux內核源碼都沒這么暈,不斷在java層和Native層之間跳有點磨腦漿。其中我又覺得Java的基礎沒有打太牢,回去補了一個月的《Core Java》第八版。但是這書沒有涉及UI子系統,於是又看了《Android內核剖析》
第五步,《Android內核剖析》(這本書實際上是講框架層的,作者也是個搞嵌入式的,所以他在寫框架層的時候文筆不太好,很羅嗦,不過還是有很多看點,到他後來寫做ROM,玩開發板時估計是說到了他的本行,一下子遛起來了看得出還是挺有水平的,這本書知識有點舊畢竟講的是2.3很多代碼已經過時,但是作者很多點子很有參考價值)這本書講UI子系統和按鍵/觸摸消息處理系統還是很有分量的,尤其13章View繪制那裡,結合源碼研究很有收獲。而後面他講編譯框架和ROM相關的東西都是挺寶貴的資料。
第六步,為了再補一下其他諸如電源管理模塊等子系統的知識看了,《深入理解android》系列,個人認為這個系列看起來有點不太舒服,不過作為補充印證還是比較有價值。
第七步,《Android系統源代碼情景分析》,羅升陽的源碼分析大作,比《Android的設計與實現》分析得更細致,但缺點是涉及到模塊比較少,選用的源碼也比《Android的設計與實現》更舊一點。看完書後需要去研究作者的博客,東西挺多的,一定讓你滿意。
第八步,買塊開發板自己玩。這步我還沒走到,原因是我覺得我還差點准備知識。可能要再幾個月,到時准備入塊6410或者樹莓派。
最後,由於我11年以前都是搞Windows這塊的,所以對Linux知識不是很了解,不得已看了這么些書,如果是一直做Linux的人,很多步驟估計可以省掉了。直接上源碼才是正道。
我本身做著移動GIS開發的工作,學框架層全是因為興趣,但招聘平台Android框架層開發人員還是蠻有競爭力的有不少定製ROM,智能電視的工作都處於人才難求狀態,畢竟有一定的門檻,現在各種ios培訓,讓奔著錢干開發的人紛紛湧入,而ios只能幹sdk開發的缺點就暴露出來了,一堆新手老手,菜鳥大牛全擠在SDK開發這塊,我覺得不太妙。 反觀Android這邊,雖然入門菜鳥沒有搞ios來錢,但是可持續性很好,從sdk-》框架》驅動》內核這樣幹下去。干著干著發現自己漸漸變成了Linux開發者/嵌入式開發者的人也不少,新人,老手,菜鳥大牛各居其位,層次性很好。
② c++ signal/slots 開源庫有哪些
C++在「商業應用」方面,曾經是天下第一的開發語言,但這一桂冠已經被java搶走多年。因為當今商業應用程序類型,已經從桌面應用迅速轉移成Web應用。當Java橫行天下之後,MS又突然發力,搞出C#語言,有大片的曾經的C++程序員,以為C++要就此沉淪,未料,這三年來,C++的生命力突然被嚴重地增強了。主力原因就是開源的軟體、基礎軟體(比如並發原生支持,比如Android必定要推出原生的SDK)、各種跨平台應用的出現。
開源C++庫必須具有以下特點:必須是成熟的產品、跨平台的產品、相對通用的庫。
一、通用標准類
STL:C++標准模板庫,呵呵,它也是開源的嘛。
boost:C++准標准庫,它是強大地,江湖稱之「千錘百煉」。
deelx (輕量級的正則表達式解析類庫,國產),boost里有強大的正則表達式解析庫,但如果你只想要一個表達式解析,不想要拖上龐大的boost庫時……支持一下國貨。
iconv /iconvpp : (C形式的編碼轉換函數庫,
二、XML解析庫
C++的XML相關庫不少,但是大部分其實都是C庫,使用起來自然不那麼輕便。其中基於DOM的有TinyXml,基於SAX的當然是Xerces。前者小巧快捷,便於使用,適合做數據交換。後者則是全功能的XML解析器。
xerces-c :最強大的XML解析庫了,不是僅僅在開源庫里,你盡管把商業的算在內。當然,它的變體,被IBM拿去賣錢的那個版本,多了數百兆的東東來支持各國編碼轉換,是更強大,但我覺得有小小的,開源的iconv在前不就夠了?
xml相應的c開源庫有expat,基於SAX,應用廣泛。
xsd (XML 與 C++數據結構的綁定工具)。(商業使用要錢)
三、資料庫
mysql / mysql++: 不用介紹吧。現在Oracle手裡,但我很放心。
四、多媒體類
SDL (Simple DirectMedia Layer/多媒體直接訪問層,用於游戲編程)。
相應的c開源庫有ffmpeg、mpeg4、aac、avc、libmad、mpeg1、flac、ac3、ac3、matroska著名的多媒體播放器 TCPMP 天下聞名的跨平台、嵌入式手持設備視頻播放器,
五、網路開發類
gSOAP SOAP協議的C++支持庫及代碼生成工具。
ACE 大型網路編程的首選庫。
除了ACE之外,還有很多系統和網路編程方面的程序庫。比如在線程庫方面,還有ZThread、boost::thread,如果放大到C/C++領域,還有APR,還有CII。在文件和目錄操作方面,boost也有相應的組件,而在網路編程方面有socket++,還有boost::asio,未來的 C++0X中幾乎肯定有一個網路編程和一個線程庫。然而目前看來,ACE仍然是進行系統和高性能網路編程的首選,其地位在一段時間內不會被撼動。它不但是一個實用的程序庫、框架集,還是一個典範的設計模式應用範例,非常值得學習。
六、GUI庫
BCG Windows平台下界面設計的第三方庫,可以讓你的界面更美好,更具時 代感。
wxWidgets :使用wxWidgets ,開發者可以基於同一套代碼,為Win32, Mac OS X, GTK+, X11, Motif, WinCE等平台開發應用程序。wxWidgets庫可以被C++, Python, Perl, and C#/.NET等開發語言使用。跟其它有些同樣支持跨平台GUI開發工具不同,基於wxWidgets的應用,擁有真實本地化的視覺及使用效果——因為,wxWidgets使用(各)平台原生的控制項,而不是簡單通過貼圖去模擬。wxWidgets是使用廣泛的,自由的,開源的,成熟的。
QT-------------界面(GUI)開發,支持C++/Java/Python/...多種語言。跨平台。最主要的好處是,API非常優美!Qt本身也不僅僅只是做GUI編程,實際它基本上可以做OS-API可以做的任何事情。象網路/資料庫/OpenGL/...都提供完美的支持。
傳統上Qt被認為是可移植的GUI庫,但實際上Qt現在已經是一個比較完整的可移植應用程序框架了,其中包含了大量的工具,比如正則表達式、Web和 Socket類、2D和3D圖形、XML解析、SQL類等,甚至還包括了一個完整的容器類庫,不過其王牌還是GUI。在目前的跨平台GUI框架中,Qt成熟度最高,已經被一些大公司應用在關鍵產品中。由於Trolltech對Qt採用的al license模式,該產品既可以從開源社區獲得支持,又能夠賺取足夠的商業利潤,因此其前景也令人比較有信心。
Qt的主要技術特色是其元對象模型。Qt實際上使用的並不是標準的C++,而是標准C++的一個擴展。它通過元對象模型擴展,實現了著名的signal/slot機制,而這一機制也成為Qt的最大特色和優勢。
與Qt類似的可移植GUI框架還有wxWidget、FOX等
六. 計算機視覺
OpenCV,因特爾自主的開源庫。支持C/C++/Python介面。這個感興趣的朋友可以玩一下。如果結合OpenCV,你可以做一些外行人覺得很酷的程序。比如說用它的人臉識別函數,來對你的攝像頭進行處理,判斷人的動作等
七. 圖形圖像處理
GDAL,處理大圖像。要是GIS專業的人肯定會語言到非常大的tif影像,動則幾個GB的航空影像。GDAL對大圖像的讀寫支持是非常棒的(像多波段的圖像都可以搞定)。支持C++/Java/Python...
國外開源的GIS軟體QGIS就是用了gdal
c的圖形圖像庫較多,libjpeg、libpng、zlib、tiff、JBIG、最著名的開源形圖像處理軟體Cximage
八、內存管理:boost::smart_ptr,Hans-Boehm GC
C/C++的內存管理是一個永恆的話題。一般來說,C++的開發者傾向於自己管理內存。然而,出乎很多C++開發者意料的是,近期C++的一些領袖人物已經公開宣稱,如果不配備自動內存管理機制,用C++編寫安全可靠的大型程序是非常困難的。而Bjarne Stroustrup也曾對中國開發者建議,如果沒有特別的理由,應該在大型項目中使用自動內存管理工具。因此,今天的C++開發者應當積極地學習和應用自動內存管理設施。
說到自動內存管理,比較輕量級的做法是boost::smart_ptr,而激進的做法是引入完整的GC機制。目前開源而又比較可靠的GC中,Hans- Boehm GC無疑是最受信賴的。作為一個保守的GC,Hans-Boehm GC在性能和功能方面都算是卓越。特別是,使用這個GC,你仍然可以delete、free來自己管理內存,對於我們編程習慣的沖擊比較小。
九、密碼及安全:OpenSSL
安全是今天進行C/C++編程無法迴避和必須重視的問題。然而編寫安全的應用程序,特別是跟網路相關的C/C++應用程序,是一件十分困難的事情。可以說,整個業界目前在這個進程上仍然處於「初級階段」。特別是涉及到大量的安全、密碼學相關的演算法、規范,如果讓開發者自己摸索,其工作量和難度達到了不現實的程度。因此必須藉助可靠的相關程序庫才有可能提高程序的安全性。在這方面,OpenSSL是目前最好的選擇,其內容之全面可靠,已經成為業界標桿。然而,由於安全編程固有的復雜性,即使使用penSSL,開發工作仍然是非常繁瑣的。因此我們也希望能夠盡快看到更簡單、更易用的C/C++安全程序庫。
十、矩陣計算:MTL
自1995年以來,C++在科學計算領域當中取得了巨大的突破。這主要歸功於template技術的高級應用,使得C++在科學計算的性能方面取得了巨大的進步,一大批優秀的C++科學計算庫涌現出來。比如Blitz++、POOMA、MTL、Boost::uBLAS。而這其中,MTL就功能豐富程度、性能、開發支持和成熟程度來講,是比較突出的一個,因此可以優先考慮。值得一提的是,2002年,MTL與後來被Intel收購的KAI C++配合,曾經在性能評測中擊敗了FORTRAN。
十一、分布式對象中間件:ICE
ICE是分布式對象中間件領域里的後起之秀,可以大致地將其視為「改進版」的CORBA。目前應用在一些大型項目當中,其中包括波音公司主持的下一代陸軍作戰系統。
ICE的一個特別價值是其代碼的範例意義。由於ICE的出現較晚,開發者比較系統地應用了新的C++編程風格,所以成為了研讀C++代碼的良好目標。
十二、正則表達式:boost::regex
正則表達式是編程工作中最強有力的工具之一。C++的正則表達式支持一直以來是一個軟肋。大約在2001年左右,boost中出現了regex庫,初步解決了這個問題。但是最初的regex無論在效率上還是可靠性方面都有一些問題,後來經過一次大規模的翻修之後,達到了比較完善的程度。
其他可以選擇的替代品還有C語言的pcre庫,Qt中的QRegExp類等。
十三、配置管理:Lua
隨著軟體系統越來越復雜,對軟體的可配置型提出了越來越高的要求。傳統上只要通過命令行參數來配置的系統,現在可能需要越來越多的方式和機制。目前越來越受歡迎、並且得到越來越多證實的做法,是將Lua嵌入到C/C++程序中,而用Lua程序作為配置腳本。這種做法的優勢是,Lua語言強大靈活,可以適應復雜的配置要求。同時,Lua便於嵌入C/C++程序,而且編譯執行速度非常快,可以說是目前解決C/C++程序配置管理問題的一個出色方案。
③ qgis是什麼軟體
QGIS是一款強大的開源地理信息系統軟體,它集成了全面的地理空間信息處理功能,旨在幫助用戶輕松進行數據瀏覽、編輯、分析和發布。這款軟體兼容多個操作系統,如Windows、Mac OS X、Linux和Android,支持多種數據格式,如Shapefile、GeoTIFF、PostGIS等,為數據處理提供了靈活的選擇。
QGIS的核心優勢在於其易用性和多功能性。用戶界面直觀,工具箱豐富,無論是處理矢量數據、柵格數據還是資料庫數據,都能輕松應對。它還具備強大的空間分析工具,如緩沖區分析、疊加分析和空間查詢,有助於解決復雜的地理問題。同時,QGIS支持欄位計算和數據編輯,方便用戶對數據進行清洗和定製化處理。其數據可視化功能尤其出色,能幫助用戶生成美觀的地圖、圖表和圖形,使地理信息更直觀呈現。
在實際應用中,QGIS的重要性不言而喻。在學術研究領域,它提供了豐富的地理空間分析工具;在自然資源管理中,可用於森林、水資源和土地利用等的監測與規劃;地理國情普查工作中,QGIS能協助數據收集和分析,生成詳盡報告;而在地理信息服務中,它支持數據共享與發布,方便用戶獲取和利用。
總的來說,QGIS是一款功能強大且實用的地理信息系統軟體,無論是在科研、管理還是信息服務領域,都能發揮關鍵作用,滿足用戶多樣化的地理信息處理需求。
④ 大數據分析一般用什麼工具分析
在大數據處理分析過程中常用的六大工具:
Hadoop
Hadoop 是一個能夠對大量數據進行分布式處理的軟體框架。但是 Hadoop 是以一種可靠、高效、可伸縮的方式進行處理的。Hadoop 是可靠的,因為它假設計算元素和存儲會失敗,因此它維護多個工作數據副本,確保能夠針對失敗的節點重新分布處理。Hadoop 是高效的,因為它以並行的方式工作,通過並行處理加快處理速度。Hadoop 還是可伸縮的,能夠處理 PB 級數據。此外,Hadoop 依賴於社區伺服器,因此它的成本比較低,任何人都可以使用。
HPCC
HPCC,High Performance Computing and Communications(高性能計算與通信)的縮寫。1993年,由美國科學、工程、技術聯邦協調理事會向國會提交了「重大挑戰項目:高性能計算與 通信」的報告,也就是被稱為HPCC計劃的報告,即美國總統科學戰略項目,其目的是通過加強研究與開發解決一批重要的科學與技術挑戰問題。HPCC是美國 實施信息高速公路而上實施的計劃,該計劃的實施將耗資百億美元,其主要目標要達到:開發可擴展的計算系統及相關軟體,以支持太位級網路傳輸性能,開發千兆 比特網路技術,擴展研究和教育機構及網路連接能力。
Storm
Storm是自由的開源軟體,一個分布式的、容錯的實時計算系統。Storm可以非常可靠的處理龐大的數據流,用於處理Hadoop的批量數據。Storm很簡單,支持許多種編程語言,使用起來非常有趣。
Apache Drill
為了幫助企業用戶尋找更為有效、加快Hadoop數據查詢的方法,Apache軟體基金會近日發起了一項名為「Drill」的開源項目。Apache Drill 實現了 Google's Dremel.
據Hadoop廠商MapR Technologies公司產品經理Tomer Shiran介紹,「Drill」已經作為Apache孵化器項目來運作,將面向全球軟體工程師持續推廣。
RapidMiner
RapidMiner是世界領先的數據挖掘解決方案,在一個非常大的程度上有著先進技術。它數據挖掘任務涉及范圍廣泛,包括各種數據藝術,能簡化數據挖掘過程的設計和評價。
Pentaho BI
Pentaho BI 平台不同於傳統的BI 產品,它是一個以流程為中心的,面向解決方案(Solution)的框架。其目的在於將一系列企業級BI產品、開源軟體、API等等組件集成起來,方便商務智能應用的開發。它的出現,使得一系列的面向商務智能的獨立產品如Jfree、Quartz等等,能夠集成在一起,構成一項項復雜的、完整的商務智能解決方案。