文章大綱
1、C/C++
2、C#
3、cocos2d-x
4、go語言
5、Hadoop
6、HBase
7、PHP
8、python
9、Spark
10、Storm
11、Unity3D
12、Java
十3、Android
十4、Object-C與swift
十5、.NET
十6、R語言php
1、C/C++
1. 簡介
C語言是目前世界上流行、使用最普遍的高級程序設計語言。
C語言對操做系統和系統使用程序以及須要對硬件進行操做的場合,用C語言明顯優於其它高級語言,許多大型應用軟件都是用C語言編寫的。
C語言具備繪圖能力強,可移植性,並具有很強的數據處理能力,所以適於編寫系統軟件,三維,二維圖形和動畫它是數值計算的高級語言。前端
2. 特色
(1)C語言屬於比較低級的語言,僅次於彙編,這個低級主要指它和硬件關係比較緊密。
(2)應用普遍;幾乎能夠給任何電子設備編程,能夠作很底層的開發如操做系統/驅動等。因此如樓上所說嵌入式等地方的開發會大量用到C語言。
(3)簡單;由於是低級語言,因此不會提供不少的編程特性,如面向對象、多態、重載等等都不會出現。這也是爲何大學會大面積要求C語言課程而不是C++C#(固然,這指的是語言特性簡單,不是指編寫C語言程序簡單,畢竟提出新的語言特性就是爲了簡化coding),用C語言寫簡單的程序來入門編程是個不錯的組合。python
3. 優勢
1.1 簡潔緊湊、靈活方便
C語言一共只有32個關鍵字,9種控制語句,程序書寫自由,主要用小寫字母表示。它把高級語言的基本結構和語句與低級語言的實用性結合起來。C語言能夠象彙編語言同樣對位、字節和地址進行操做,而這三者是計算機最基本的工做單元。mysql
1.2 運算符豐富
C的運算符包含的範圍很普遍,共有種34個運算符。C語言把括號、賦值、強制類型轉換等都做爲運算符處理。從而使C的運算類型極其豐富表達式類型多樣化,靈活使用各類運算符能夠實如今其它高級語言中難以實現的運算。linux
1.3 數據結構豐富
C的數據類型有:整型、實型、字符型、數組類型、指針類型、結構體類型、共用體類型等。能用來實現各類複雜的數據類型的運算。並引入了指針概念,使程序效率更高。另外C語言具備強大的圖形功能,支持多種顯示器和驅動器。且計算功能、邏輯判斷功能強大。c++
1.4 語法限制不太嚴格、程序設計自由度大
通常的高級語言語法檢查比較嚴,可以檢查出幾乎全部的語法錯誤。而C語言容許程序編寫者有較大的自由度程序員
1.5 語言容許直接訪問物理地址,能夠直接對硬件進行操做
所以既具備高級語言的功能,又具備低級語言的許多功能,可以象彙編語言同樣對位、字節和地址進行操做,而這三者是計算機最基本的工做單元,能夠用來寫系統軟件。web
1.6 C語言程序生成代碼質量高,程序執行效率高
通常只比彙編程序生成的目標代碼效率低10へ20%。算法
1.7 C語言適用範圍大,可移植性好
C語言有一個突出的優勢就是適合於多種操做系統,如DOS、UNIX,也適用於多種機型。sql
4. 缺點
(1)C語言的缺點主要是表如今數據的封裝性上,這一點使得C在數據的安全性上作的有很大缺陷,這也是C和C++的一大區別。
(2)C語言的語法限制不太嚴格
(3)對變量的類型約束不嚴格,影響程序的安全性,對數組下標越界不做檢查等。從應用的角度,C語言比其餘高級語言較難掌握。
(4)C語言指針指針就是C語言的一大特點,能夠說C語言優於其它高級語言的一個重要緣由就是由於它有指針操做能夠直接進行靠近硬件的操做,可是C的指針操做也給它帶來了不少不安全的因素。C++在這方面作了很好的改進,在保留了指針操做的同時又加強了安全性。Java取消了指針操做,提升了安全性。
5. 常見使用場景
(1)操做系統 一些操做系統是使用C語言編寫的,同時C++憑藉其對C的兼容性,面向對象性質也開始在該領域嶄露頭角。
(2)網絡軟件 C++擁有不少成熟的用於網絡通訊的庫,其中最具備表明性的是跨平臺的、重量級的ACE庫,該庫能夠說是C++語言最重要的成果之一,在許多重要的企業、部門甚至是軍方都有應用。
(3)遊戲 C++的效率是一個很重要的緣由。科學計算:在科學計算領域,FORTRAN是使用最多的語言之一。可是近年來,C++憑藉先進的數值計算庫、泛型編程等優點在這一領域也應用頗多。
(4)物聯網領域 人們廣泛使用c/c++編寫一些微處理器芯片程序,好比單片機,DSP,ARM等等。
2、C#
C#(讀作 "C sharp",中文譯音「夏普」)是微軟公司發佈的一種面向對象的、運行於.NET Framework之上的高級程序設計語言,並定於在微軟職業開發者論壇(PDC)上登臺亮相.C#是微軟公司研究員Anders Hejlsberg的最新成果.C#看起來與Java有着驚人的類似;它包括了諸如單一繼承,界面,與Java幾乎一樣的語法,和編譯成中間代碼再運行的過程.可是C#與Java有着明顯的不一樣,它借鑑了Delphi的一個特色,與COM(組件對象模型)是直接集成的,並且它是微軟公司.NET windows網絡框架的主角.
3、cocos2d-x
Cocos2d-x是一個開源的移動2D遊戲框架,MIT許可證下發布的。這是一個C++ Cocos2d-iPhone項目的版本。Cocos2d-X發展的重點是圍繞Cocos2d跨平臺,Cocos2d-x提供的框架。手機遊戲,能夠寫在C++或者Lua中,使用API是Cocos2d-iPhone徹底兼容。Cocos2d-x項目能夠很容易地創建和運行在iOS,Android,黑莓Blackberry等操做系統中。Cocos2d-x還支持Windows、Mac和Linux等桌面操做系統,所以,開發者編寫的源代碼很容易在桌面操做系統中編輯和調試。
4、go語言
1. 簡介
Go(又稱Golang)是Google開發的一種靜態強類型、編譯型、併發型,並具備垃圾回收功能的編程語言。
2. 優勢
2.1 性能
Go 極其地快。其性能與 Java 或 C++類似。在咱們的使用中,Go 通常比 Python 要快 30 倍
2.2 併發性&通道
Go 做爲一門語言致力於使事情簡單化。它並未引入不少新概念,而是聚焦於打造一門簡單的語言,它使用起來異常快速而且簡單。其惟一的創新之處是 goroutines 和通道。Goroutines 是 Go 面向線程的輕量級方法,而通道是 goroutines 之間通訊的優先方式
2.3 快速的編譯時間
當前咱們使用 Go 編寫的最大微服務的編譯時間只需 6 秒。相較於 Java 和 C++呆滯的編譯速度,Go 的快速編譯時間是一個主要的效率優點。
2.4 強大的生態系統
對咱們這麼大小的團隊(大約 20 人)而言,生態系統很重要。若是你須要重作每塊功能,那就沒法爲客戶創造收益了。Go 有着強大的工具支持,面向 Redis、RabbitMQ、PostgreSQL、Template parsing、Task scheduling、Expression parsing 和 RocksDB 的穩定的庫。
Go 的生態系統相比於 Rust、Elixir 這樣的語言有很大的優點。固然,它又略遜於 Java、Python 或 Node 這樣的語言,但它很穩定,並且你會發如今不少基礎需求上,已經有高質量的文件包可用了。
2.5 GOFMT,強制代碼格式
Gofmt 是一種強大的命令行功能,內建在 Go 的編譯器中來規定代碼的格式。從功能上看,它相似於 Python 的 autopep8。格式一致很重要,但實際的格式標準並不老是很是重要。Gofmt 用一種官方的形式規格代碼,避免了沒必要要的討論
2.6 gRPC 和 Protocol Buffers
Go 語言對 protocol buffers 和 gRPC 有一流的支持。這兩個工具能一塊兒友好地工做以構建須要經過 RPC 進行通訊的微服務器(microservices)。咱們只須要寫一個清單(manifest)就能定義 RPC 調用發生的狀況和參數,而後從該清單將自動生成服務器和客戶端代碼。這樣產生代碼不只快速,同時網絡佔用也很是少。
從相同的清單,咱們能夠從不一樣的語言生成客戶端代碼,例如 C++、Java、Python 和 Ruby。所以內部通訊的 RESET 端點不會產生分歧,咱們每次也就須要編寫幾乎相同的客戶端和服務器代碼
3. 缺點
3.1 缺乏框架
Go 語言沒有一個主要的框架,如 Ruby 的 Rails 框架、Python 的 Django 框架或 PHP 的 Laravel。這是 Go 語言社區激烈討論的問題,由於許多人認爲咱們不該該從使用框架開始。在不少案例狀況中確實如此,但若是隻是但願構建一個簡單的 CRUD API,那麼使用 Django/DJRF、Rails Laravel 或 Phoenix 將簡單地多
3.2 錯誤處理
Go 語言經過函數和預期的調用代碼簡單地返回錯誤(或返回調用堆棧)而幫助開發者處理編譯報錯。雖然這種方法是有效的,但很容易丟失錯誤發生的範圍,所以咱們也很難向用戶提供有意義的錯誤信息。錯誤包(errors package)能夠容許咱們添加返回錯誤的上下文和堆棧追蹤而解決該問題。
另外一個問題是咱們可能會忘記處理報錯。諸如 errcheck 和 megacheck 等靜態分析工具能夠避免出現這些失誤。雖然這些解決方案十分有效,但可能並非那麼正確的方法。
3.3 軟件包管理
Go 語言的軟件包管理絕對不是完美的。默認狀況下,它沒有辦法制定特定版本的依賴庫,也沒法建立可複寫的 builds。相比之下 Python、Node 和 Ruby 都有更好的軟件包管理系統。然而經過正確的工具,Go 語言的軟件包管理也能夠表現得不錯。
咱們能夠使用 Dep 來管理依賴項,它也能指定特定的軟件包版本。除此以外,咱們還能夠使用一個名爲 VirtualGo 的開源工具,它能輕鬆地管理 Go 語言編寫的多個項目
4. 就業方向
5、Hadoop
1. 簡介
Hadoop是一個開源的框架,可編寫和運行分佈式應用處理大規模數據,是專爲離線和大規模數據分析而設計的,並不適合那種對幾個記錄隨機讀寫的在線事務處理模式。Hadoop=HDFS(文件系統,數據存儲技術相關)+ Mapreduce(數據處理),Hadoop的數據來源能夠是任何形式,在處理半結構化和非結構化數據上與關係型數據庫相比有更好的性能,具備更靈活的處理能力,無論任何數據形式最終會轉化爲key/value,key/value是基本數據單元。用函數式變成Mapreduce代替SQL,SQL是查詢語句,而Mapreduce則是使用腳本和代碼,而對於適用於關係型數據庫,習慣SQL的Hadoop有開源工具hive代替。
Hadoop就是一個分佈式計算的解決方案
2. 優點
(1)高擴展
(2)低成本
(3)成熟的生態圈
(4)hadoop生態系統開源社區活躍
3. 應用場景
(1)大數據量存儲:分佈式存儲
(2)日誌處理:Hadoop擅長這個
(3)海量計算:並行計算
(4)ETL:數據抽取到oracle、mysql、DB二、mongdb及主流數據庫
(5)使用HBase作數據分析:用擴展性應對大量的寫操做—Facebook構建了基於HBase的實時數據分析系統
(6)機器學習:好比Apache Mahout項目
(7)搜索引擎:hadoop + lucene實現
(8)數據挖掘:目前比較流行的廣告推薦
(9)用戶細分特徵建模
6、HBase
HBase是一個分佈式的、面向列的開源數據庫,該技術來源於 Fay Chang 所撰寫的Google論文「Bigtable:一個結構化數據的分佈式存儲系統」。就像Bigtable利用了Google文件系統(File System)所提供的分佈式數據存儲同樣,HBase在Hadoop之上提供了相似於Bigtable的能力。HBase是Apache的Hadoop項目的子項目。HBase不一樣於通常的關係數據庫,它是一個適合於非結構化數據存儲的數據庫。另外一個不一樣的是HBase基於列的而不是基於行的模式。
7、PHP
1. 簡介
PHP(外文名:PHP: Hypertext Preprocessor,中文名:「超文本預處理器」)是一種通用開源腳本語言。語法吸取了C語言、Java和Perl的特色,利於學習,使用普遍,主要適用於Web開發領域。PHP 獨特的語法混合了C、Java、Perl以及PHP自創的語法。它能夠比CGI或者Perl更快速地執行動態網頁。用PHP作出的動態頁面與其餘的編程語言相比,PHP是將程序嵌入到HTML(標準通用標記語言下的一個應用)文檔中去執行,執行效率比徹底生成HTML標記的CGI要高許多;PHP還能夠執行編譯後代碼,編譯能夠達到加密和優化代碼運行,使代碼運行更快。
2. 優勢
(1)跨平臺,性能優越,跟Linux/Unix結合別跟Windows結合性能強45%,而且和不少免費的平臺結合很是省錢,好比LAMP(Linux /Apache/Mysql/PHP)或者FAMP(FreeBSD/Apache/Mysql/PHP)結合,或者數據應用夠大能夠考慮換 PostgreSQL或者Oracle,支持N種數據庫。(N >= 10)
(2)語法簡單,若是有學習C和Perl的很容易上手,而且跟ASP有部分相似。有成熟的開發工具,好比NuPHPed,或者Zend Studio等等,再Linux平臺下能夠使用Eclipse等等。
(3)目前主流技術都支持,好比WebService、Ajax、XML等等,足夠應用。
(4)有比較完整的支持,好比使用ADODB或者PEAR::DB作數據庫抽象層,用Smarty或者smart template作模板層,若是是PHP 5.1的話,還可以使用PDO(PHP Data Object)來訪問數據庫。
(5)有不少成熟的框架,好比支持MVC的框架:phpMVC,支持相似ASP.net的事件驅動的框架:Prado,支持相似Ruby On Rails的快速開發的框架:Cake等等,足夠知足你的應用需求。
(6)PHP 5已經有成熟的面向對象體系,可以適應基本的面向對象要求。適合開發大型項目。
(7)有成熟的社區來支持PHP的開發。
(8)目前已經不少大型應用都是使用PHP,好比淘寶網、Yahoo、16三、Sina等等大型門戶,不少選用PHP來做爲他們的開發語言,因此大型門戶都可以選用它,我想足夠可以你的使用了。
(9)有不少開源的框架或開源的系統能夠使用,好比比較知名的開源框架有Zend Framework、CakePHP、CodeIgniter、symfony等,開源論壇有Discuz!、Phpwind等,開源博客 WordPress,開源網店系統如Ecshop、ShopEx等,開源的SNS系統如UCHome、ThinkSNS等。
(10)使用成本低 (linux apache mysql php內核)
3. 缺點
(1)函數命名不規範 駝峯法和下滑線,傳參位置不一 你知道的
(2)單線程 ; PHP自己,一直以來php就是個單進程的程序;雖然php的pthreads擴展早就有了。可是它不夠穩定,運行運行着就會莫名其妙的本身掛掉;php的擴展都是C寫的,這也就意味着任何一個擴展出現線程競爭資源控制問題都能讓整個掛掉
(3)核心異步網絡不支持(固然在linux只有同步非阻塞網絡模型)。卻少了這個使得很難開發一個可以承受大併發的網絡應用。傳統的網絡模型和io都阻塞的。這樣基本的編程的作法就是一個進程(或者線程)響應一個用戶連接請求。所以沒法完成像實時網遊那樣須要成千上萬網絡鏈接的任務。儘管php也有Libevent、eio擴展對此算是某種程度上面的彌補,可是感受都不是那麼完善
(4)只支持web開發,不方便作 .exe文件,不方便作桌面應用程序. 不方便作手機程序.
(5)不適合作爬蟲、自動運行腳本.科學運算項目,這語言基本構架就不適合,雖然有不少方法實現。
(6)後期維護困難。後期提速空間侷限性較大。
(7)PHP的解釋運行機制。這種運行機制使得每一個PHP頁面被解釋執行後,全部的相關資源都會被回收。也就是說,PHP在語言級別上沒有辦法讓某個對象常駐內存。在PHP中,全部的變量都是頁面級的,不管是全局變量,仍是類的靜態成員,都會在頁面執行完畢後被清空。以JSP爲例,在JSP中,Java Bean的scope有四種有效值:Page、Application、Session、Request,分別對應頁面、程序、會話、請求四種生存期。但在PHP中,只有Page一種生存期。
4. 就業方向
(1)PC端網站開發
(2)移動端微網站開發
(3)APP後臺開發
8、python
1. 簡介
Python是一種計算機程序設計語言。是一種面向對象的動態類型語言,最初被設計用於編寫自動化腳本(shell),隨着版本的不斷更新和語言新功能的添加,愈來愈多被用於獨立的、大型項目的開發。
2. 特色
(1)web開發pytyon擁有很是完善的與web服務器進行交互的庫,以及大量的免費的前端網頁模板。更具優點的是,有很是優秀且成熟的Django Web框架,功能包羅萬象。
(2)linux系統運維事實上,在早期都是經過shell腳原本去實現自動化運維,可是因爲shell腳本自己呢可編程的能力偏弱,一些須要實現的功能的庫也不多,大部分都須要本身從頭寫起,然而pyhon做爲「膠水語言」能夠很方便的和其餘因爲集成起來,對各種工具進行方便發二次開發,造成一套本身的運維管理系統。
(3)遊戲開發python在遊戲開發方面可能不及Lua 或者是 C++,可是因爲python腳本化的優勢,相似於遊戲劇本、遊戲玩法邏輯等這種很是靈活的設計上,咱們呢修改起來十分方便。固然了,若是開發一款小的遊戲程序,python仍是很具備優點的,比較出名的就是pygame了,或許是咱們自娛自樂的一個福音啦。
網絡爬蟲在爬蟲方面,python是獨領風騷的。python有很是豐富的庫去訪問網頁文檔的接口api以及後期網頁文檔的快速處理。
(4)桌面軟件在window系統桌面開發領域,相信C++ MFC應該是用的比較廣的了,python能夠實現對C++的無縫對接,而且同時支持Qt和GTK。
(5)數據處理python做爲一門工程性語言,對於數據處理的類庫是至關豐富的,好比有高性能的科學計算類庫NumPy和SciPy。
(6)人工智能事實上,真正的人工智能的底層語言是C/C++,由於真正的計算全在於C/C++,而python僅僅是調用AI的接口而後去實現一些邏輯而已。可是爲何說人工智能首先python呢?這個實際上是因爲python做爲「膠水語言」的特質纔會顯的出類拔萃,主要使用python是由於CPython和底層緣由的融合使得開發起來更加方便。
(7)python還有其餘的應用場景,好比說雲計算,大名鼎鼎的雲計算框架OpenStack就是python開發的。
9、Spark
1. 簡介
Apache Spark 是專爲大規模數據處理而設計的快速通用的計算引擎。Spark是UC Berkeley AMP lab (加州大學伯克利分校的AMP實驗室)所開源的類Hadoop MapReduce的通用並行框架,Spark,擁有Hadoop MapReduce所具備的優勢;但不一樣於MapReduce的是——Job中間輸出結果能夠保存在內存中,從而再也不須要讀寫HDFS,所以Spark能更好地適用於數據挖掘與機器學習等須要迭代的MapReduce的算法。
Spark 是一種與 Hadoop 類似的開源集羣計算環境,可是二者之間還存在一些不一樣之處,這些有用的不一樣之處使 Spark 在某些工做負載方面表現得更加優越,換句話說,Spark 啓用了內存分佈數據集,除了可以提供交互式查詢外,它還能夠優化迭代工做負載。
Spark 是在 Scala 語言中實現的,它將 Scala 用做其應用程序框架。與 Hadoop 不一樣,Spark 和 Scala 可以緊密集成,其中的 Scala 能夠像操做本地集合對象同樣輕鬆地操做分佈式數據集。
儘管建立 Spark 是爲了支持分佈式數據集上的迭代做業,可是實際上它是對 Hadoop 的補充,能夠在 Hadoop 文件系統中並行運行。經過名爲 Mesos 的第三方集羣框架能夠支持此行爲。Spark 由加州大學伯克利分校 AMP 實驗室 (Algorithms, Machines, and People Lab) 開發,可用來構建大型的、低延遲的數據分析應用程序。
2. 使用場景
(1)Spark是基於內存的迭代計算框架,適用於須要屢次操做特定數據集的應用場合。須要反覆操做的次數越多,所需讀取的數據量越大,受益越大,數據量小可是計算密集度較大的場合,受益就相對較小;
(2)因爲RDD的特性,Spark不適用那種異步細粒度更新狀態的應用,例如web服務的存儲或者是增量的web爬蟲和索引。就是對於那種增量修改的應用模型不適合;
(3)數據量不是特別大,可是要求實時統計分析需求。
知足以上條件的都可採用Spark技術進行處理,在實際應用中,目前大數據在互聯網公司主要應用在廣告、報表、推薦系統等業務上,在廣告業務方面須要大數據作應用分析、效果分析、定向優化等,在推薦系統方面則須要大數據優化相關排名、個性化推薦以及熱點點擊分析等。
這些應用場景的廣泛特色是計算量大、效率要求高,Spark偏偏能夠知足這些要求,該項目一經推出便受到開源社區的普遍關注和好評,並在近兩年內發展成爲大數據處理領域煊赫一時的開源項目。
10、Storm
1. 簡介
Storm是一個分佈式的、高容錯的實時計算系統。
Storm對於實時計算的的意義至關於Hadoop對於批處理的意義。Hadoop爲咱們提供了Map和Reduce原語,使咱們對數據進行批處理變的很是的簡單和優美。一樣,Storm也對數據的實時計算提供了簡單Spout和Bolt原語。
2. 使用場景
(1)流數據處理:Storm能夠用來用來處理源源不斷的消息,並將處理以後的結果保存到持久化介質中。(2)分佈式RPC:因爲Storm的處理組件都是分佈式的,並且處理延遲都極低,因此能夠Storm能夠作爲一個通用的分佈式RPC框架來使用。
11、Unity3D
Unity3D是由Unity Technologies開發的一個讓玩家輕鬆建立諸如三維視頻遊戲、建築可視化、實時三維動畫等類型互動內容的多平臺的綜合型遊戲開發工具,是一個全面整合的專業遊戲引擎。Unity相似於Director,Blender game engine, Virtools 或 Torque Game Builder等利用交互的圖型化開發環境爲首要方式的軟件。其編輯器運行在Windows 和Mac OS X下,可發佈遊戲至Windows、Mac、Wii、iPhone、WebGL(須要HTML5)、Windows phone 8和Android平臺。也能夠利用Unity web player插件發佈網頁遊戲,支持Mac和Windows的網頁瀏覽。它的網頁播放器也被Mac 所支持。
12、Java
1. 簡介
Java是一門面向對象編程語言,不只吸取了C++語言的各類優勢,還摒棄了C++裏難以理解的多繼承、指針等概念,所以Java語言具備功能強大和簡單易用兩個特徵。Java語言做爲靜態面向對象編程語言的表明,極好地實現了面向對象理論,容許程序員以優雅的思惟方式進行復雜的編程 [1] 。
Java具備簡單性、面向對象、分佈式、健壯性、安全性、平臺獨立與可移植性、多線程、動態性等特色 [2] 。Java能夠編寫桌面應用程序、Web應用程序、分佈式系統和嵌入式系統應用程序等
2. 特色
2.1 面向對象
面向對象能夠說是Java最重要的特性。Java語言的設計徹底是面向對象的,它不支持相似C語言那樣的面向過程的程序設計技術。Java支持靜態和動態風格的代碼繼承及重用。單從面向對象的特性來看,Java相似於Small Talk,但其它特性、尤爲是適用於分佈式計算環境的特性遠遠超越了Small Talk。
2.2 分佈式
Java包括一個支持HTTP和FTP等基於TCP/IP協議的子庫。所以,Java應用程序可憑藉URL打開並訪問網絡上的對象,其訪問方式與訪問本地文件系統幾乎徹底相同。爲分佈環境尤爲是Internet提供的動態內容無疑是一項很是宏偉的任務,但Java的語法特性卻使咱們很容易地實現這項目標。
2.3 健壯
Java致力於檢查程序在編譯和運行時的錯誤。類型檢查幫助檢查出許多開發早期出現的錯誤。Java自已操縱內存減小了內存出錯的可能性。Java還實現了真數組,避免了覆蓋數據的可能。這些功能特徵大大縮短了開發Java應用程序的週期。Java提供Null指針檢測數組邊界檢測異常出口字節代碼校驗。
2.4 安全
Java的安全性可從兩個方面獲得保證。一方面,在Java語言裏,象指針和釋放內存等C++功能被刪除,避免了非法內存操做。另外一方面,當Java用來建立瀏覽器時,語言功能和瀏覽器自己提供的功能結合起來,使它更安全。Java語言在你的機器上執行前,要通過不少次的測試。它通過代碼校驗,檢查代碼段的格式,檢測指針操做,對象操做是否過度以及試圖改變一個對象的類型。
2.5 可移植的
這句話一直是Java程序設計師們的精神指標,也是Java之因此可以受到程序設計師們喜好的緣由之一,最大的功臣就是JVM的技術。大多數編譯器產生的目標代碼只能運行在一 種CPU上(如Intel的x86系列),即便那些能支持多種CPU的編譯器也不能同時產生適合多 種CPU的目標代碼。若是你須要在三種CPU( 如x8六、SPARC 和MIPS)上運行同一程序, 就必須編譯三次。
但JAVA編譯器就不一樣了。JAVA編譯器產生的目標代碼(J-Code) 是針對一種並不 存在的CPU--JAVA虛擬機(JAVA Virtual Machine),而不是某一實際的CPU。JAVA虛擬機能掩蓋不一樣CPU之間的差異,使J-Code能運行於任何具備JAVA虛擬機的機器上。
虛擬機的概念並不AVA 所 特 有 的:加州大學幾年前就提出了PASCAL虛擬機的概念;普遍用於Unix服務器的Perl腳本也是產生與機器無關的中間代碼用於執行。但針對Internet應用而設計的JAVA虛擬機的特別之處在於它能產生安全的不受病毒威脅的目標代碼。正是因爲Internet對安全特性的特別要求才使得JVM可以迅速被人們接受。 當今主 流的操做系統如OS/二、MacOS、Windows95/NT都已經或很快提供對J-Code的支持。
做爲一種虛擬的CPU,JAVA 虛擬機對於源代碼(Source Code) 來講是獨立的。咱們不只能夠用JAVA語言來生成J-Code,也能夠用Ada95來生成。事實上,已經有了針對若干種源代碼的J-Code 編譯器,包括Basic、Lisp 和Forth。源代碼一經轉換成J-Code之後,JAVA虛擬機就可以執行而不區分它是由哪一種源代碼生成的。這樣作的結果就是CPU可移植性。 將源程序編譯爲J-Code的好處在於可運行於各類機器上,而缺點是它不如本機代碼運行的速度快。
同體繫結構無關的特性使得Java應用程序能夠在配備了Java解釋器和運行環境的任何計算機系統上運行,這成爲Java應用軟件便於移植的良好基礎。但僅僅如此還不夠。若是基本數據類型設計依賴於具體實現,也將爲程序的移植帶來很大不便。例如在Windows3.1中整數(Integer)爲16bits,在Windows95中整數爲32bits,在DECAlpha中整數爲64bits,在Intel486中爲32bits。經過定義獨立於平臺的基本數據類型及其運算,Java數據得以在任何硬件平臺上保持一致。Java語言的基本數據類型及其表示方式以下:byte8-bit二進制補碼short16-bit二進制補碼int32-bit二進制補碼long64-bit二進制補碼float32-bitIEEE754浮點數double32-bitIEEE754浮點數char16-bitUnicode字符在任何Java解釋器中,數據類型都是依據以上標準具體實現的。由於幾乎目前使用的全部CPU都能支持以上數據類型、8~64位整數格式的補碼運算和單/雙精度浮點運算。Java編譯器自己就是用Java語言編寫的。Java運算系統的編制依據POSIX方便移植的限制,用ANSIC語言寫成。Java語言規範中也沒有任何"同具體實現相關"的內容。
2.6 高性能
若是解釋器速度不慢,Java能夠在運行時直接將目標代碼翻譯成機器指令。Sun用直接解釋器一秒鐘內可調用300,000個過程。翻譯目標代碼的速度與C/C++的性能沒什麼區別。
2.7 多線程
多線程功能使得在一個程序裏可同時執行多個小任務。線程--有時也稱小進程--是一個大進程裏分出來的小的獨立的進程。由於Java實現的多線程技術,因此比C和C++更鍵壯。多線程帶來的更大的好處是更好的交互性能和實時控制性能。固然實時控制性能還取決於系統自己(UNIX,Windows,Macintosh等),在開發難易程度和性能上都比單線程要好。任何用過當前瀏覽器的人,都感受爲調一副圖片而等待是一件很煩惱的事情。在Java裏,你可用一個單線程來調一副圖片,而你能夠訪問HTML裏的其它信息而沒必要等它。
2.8 動態
Java的動態特性是其面向對象設計方法的發展。它容許程序動態地裝入運行過程當中所須要的類,這是C++語言進行面向對象程序設計所沒法實現的。在C++程序設計過程當中,每當在類中增長一個實例變量或一種成員函數後,引用該類的全部子類都必須從新編譯,不然將致使程序崩潰。Java從以下幾方面採起措來解決這個問題。Java編譯器不是將對實例變量和成員函數的引用編譯爲數值引用,而是將符號引用信息在字節碼中保存下傳遞給解釋器,再由解釋器在完成動態鏈接類後,將符號引用信息轉換爲數值偏移量。這樣,一個在存儲器生成的對象不在編譯過程當中決定,而是延遲到運行時由解釋器肯定的。這樣,對類中的變量和方法進行更新時就不至於影響現存的代碼。解釋執行字節碼時,這種符號信息的查找和轉換過程僅在一個新的名字出現時才進行一次,隨後代碼即可以全速執行。在運行時肯定引用的好處是能夠使用已被更新的類,而沒必要擔憂會影響原有的代碼。若是程序鏈接了網絡中另外一系統中的某一類,該類的全部者也能夠自由地對該類進行更新,而不會使任何引用該類的程序崩潰。Java還簡化了使用一個升級的或全新的協議的方法。若是你的系統運行Java程序時遇到了不知怎樣處理的程序,不要緊,Java能自動下載你所須要的功能程序。四.與C和C++語言的異同 Java提供了一個功能強大語言的全部功能,但幾乎沒有一點含混特徵。C++安全性很差,但C和C++仍是被你們所接受,因此Java設計成C++形式,讓你們很容易學習。Java去掉了C++語言的許多功能,讓Java的語言功能很精煉,並增長了一個頗有用的功能,Java去掉了如下幾個C和C++功能和特徵:指針運算結構typedefs#define須要釋放內存全局變量的定義這個功能都是很容易引發錯誤的地方。
3. 就業方向
(1)Android開發
Android是全球最大的智能手機操做系統,Android在國內的市場份額越來越額高。最近幾年發展很是快速,但人才積累卻沒有跟上,優秀的Android開發工程師仍然存在不小的缺口。Android應用的主要開發語言就是Java,因此選擇這個方向仍是蠻不錯的。
(2)Web開發
Web開發語言不少,Java是其中之一。Java在開發高訪問、高併發、集羣化的大型網站方面有很大的優點,例如人人網、去哪兒網、美團等
(3)Java網站建設
近幾年來,網站建設業務一直呈快速上升勢頭,行業市場愈來愈大。新技術的應用將促使企業網站建設更具魅力。Java編程語言也將使網站結構更緊密,訪問更流暢,更能適應新的要求。可是以目前的市場分析Java作網站成本過高,對硬件要求比較高,中小企業大都會選擇使用PHP語言進行開發,可是像大企業仍是比較喜好Java技術
(4)Java企業級應用開發
目前Java在許多行業的企業信息應用方面的應用很是多,好比OA、郵箱、股票、金融、考試、物流、醫療、礦山等信息方面的系統。該方向和行業密切相關,因此,這是一個經驗型的發展方向。Java開發者在這方面的需求也很是大,待遇也至關不錯,工資水平與Java互聯網方向的差很少,很容易在一些大型企業就業
(5)Java遊戲開發
Java自己就能夠用來編寫遊戲腳本,目前也有例如beanshellgroovy等腳本語言能夠方便的無縫的和Java語言進行交互,這些都極大的方便了Java遊戲編程。國內遊戲專業人才的需求一直存在缺口。目前國內遊戲企業的大多數從業人員每每沒有受過專業化培訓,屬於自學成才,遠遠不能適應玩家的遊戲理念和遊戲技能的升級換代
(6)Java大數據方向
十3、Android
1. 簡介
Android是一種基於Linux的自由及開放源代碼的操做系統。主要使用於移動設備,如智能手機和平板電腦,由Google(谷歌)公司和開放手機聯盟領導及開發。還沒有有統一中文名稱,中國大陸地區較多人使用「安卓」或「安致」。Android操做系統最初由Andy Rubin開發,主要支持手機
2. 就業方向
(1)設備軟件層開發(好比穿戴設備、機頂盒等)
(2)移動手機、平板電腦app開發
十4、Object-C與swift
1. 簡介
1.1 Object-C
Object-C一般寫做Objective-C或者Obj-C或OC,是根據C語言所衍生出來的語言,繼承了C語言的特性,是擴充C的面向對象編程語言。它主要使用於Mac OS X和GNUstep這兩個使用OpenStep標準的系統,而在NeXTSTEP和OpenStep中它更是基本語言。Objective-C能夠在gcc運做的系統寫和編譯,由於gcc含Objective-C的編譯器。在MAC OS X系統下,運用蘋果提供的SDK等開發工具包,能夠用來作IOS開發,開發後的程序在Iphone虛擬機中進行測試,運用的主要語言爲Object-c。與C#相似。Object-c僅支持單一父類繼承,不支持多重繼承。
1.2 swift
Swift,蘋果於2014年WWDC(蘋果開發者大會)發佈的新開發語言,可與Objective-C*共同運行於Mac OS和iOS平臺,用於搭建基於蘋果平臺的應用程序。
2. Object-C與swift區別
2.1 Swift和Objective-C的聯繫
Swift和Objective-C共用一套運行時環境,Swift的類型能夠橋接到Objective-C(下面我簡稱OC),反之亦然。
2.2 Swift比Objective-C有什麼優點
(1)Swift容易閱讀,語法和文件結構簡易化。
(2)Swift更易於維護,文件分離後結構更清晰。
(3)Swift更加安全,它是類型安全的語言。
(4)Swift代碼更少,簡潔的語法,能夠省去大量冗餘代碼
(5)Swift速度更快,運算性能更高。
十5、.NET
1. 簡介
.NET就是微軟用來實現XML,Web Services,SOA(面向服務的體系結構service-oriented architecture)和敏捷性的技術。對技術人員,想真正瞭解什麼是.NET,必須先了解.NET技術出現的緣由和它想解決的問題,必須先了解爲何他們須要XML,Web Services 和 SOA。技術人員通常將微軟當作一個平臺廠商。微軟搭建技術平臺,而技術人員在這個技術平臺之上建立應用系統。從這個角度,.NET也能夠以下來定義:.NET是微軟的新一代技術平臺,爲敏捷商務構建互聯互通的應用系統,這些系統是基於標準的,聯通的,適應變化的,穩定的和高性能的。從技術的角度,一個.NET應用是一個運行於.NET Framework之上的應用程序。(更精確的說,一個.NET應用是一個使用.NET Framework類庫來編寫,並運行於公共語言運行時Common Language Runtime之上的應用程序。)若是一個應用程序跟.NET Framework無關,它就不能叫作.NET程序。好比,僅僅使用了XML並不就是.NET應用,僅僅使用SOAP SDK調用一個Web Service也不是.NET應用。.NET是基於Windows操做系統運行的操做平臺,應用於互聯網的分佈式。
2. 就業方向
(1).net桌面程序開發
(2).net web程序開發
十6、R語言
1. 簡介
R是用於統計分析、繪圖的語言和操做環境。R是屬於GNU系統的一個自由、免費、源代碼開放的軟件,它是一個用於統計計算和統計製圖的優秀工具。
2. 優勢
(1)開源
(2)是專門爲統計和數據分析開發的語言,各類功能和函數琳琅滿目,其中成熟穩定的一抓一把
(3)語言簡單易學。雖與C語言之類的程序設計語言已差異很大(好比語言結構相對鬆散,使用變量前不需明確正式定義變量類型等等),但仍保留了程序設計語言的基礎邏輯與天然的語言風格。我這樣說可能讓人聽得雲裏霧裏,可是若是你對SAS或者SPSS有一點點了解,就會明白個人意思了...
(4)安裝程序只有50Mb左右,比起某些死貴且3個G的付費軟件真的是超級迷你小巧玲瓏... 由於體積輕便,運行起來系統負擔也小。
(5)同各類OS的兼容性好。我兩臺本本一臺Windows,一臺Linux,都用得很順手。相比之下,你有見過人在Mac上用SAS嗎... 這人是要多麼的想不開... =. =
(6)由於用的人愈來愈多,又是開源,有不少配套的「插件」爲其錦上添花。好比xtable裏有一個函數能夠直接將R裏的表格導出爲TeX格式;另有RStudio的插件讓你能夠在同一個環境裏寫TeX跑R並可在你的TeX文件中插入你的R代碼,多麼的賢良淑德... (這個插件我沒用過,不過我同窗一天到晚在用)
(7)有R GUI和RStudio兩種風格供君選擇,說實話我以爲這兩種風格已經涵括了大多數人的使用偏好...
(8)已經提過了開源,還想再強調一下。各類包和函數的透明性極好,這使得對函數的調整和改良變得很是便利。只須要把源碼調出來,本身稍微修改一下就能夠了。這種事情放在任何其餘統計軟件裏都近乎奢望。
(9)若是你作Bayesian,用R你有OpenBUGS, WinBUGS, JAGS等各類成熟活潑的包裹,不少語言又簡單又附帶各類預設的plot,你只需調用便可;還能夠本身寫MCMC。若是你用SAS/SPSS/Stata,你能夠... @@? = =bbb
(10)漂亮又靈活的圖,你們也都已經講過了。本來不是什麼特別突出的長處(有則好,沒也沒啥),不過如今數據可視化愈來愈熱,也就一躍成爲主要優勢了。
3. 缺點
(1)對大文本(text data)處理極差... 或者說data management本就不是R的強項。SAS於R的最大優點之一可能就在於它兼顧了數據分析和數據管理。在SAS裏對數據進行各類複雜操做都相對容易,只須要簡單的DATA STEP(必要時結合PROC SQL)便可完成;在R裏可就真的是千辛萬苦... 雖然也有相應的aggregate, merge之類的函數,可是大都不太好用。這也是爲何你們經常把數據(尤爲是數據大時)在別的環境下整好/分割好再餵給R。人家術業有專攻,數據管理真是有些難爲它了。
(2)內存管理和平行處理(parallel processing/programming)都爲人詬病。數據小時沒有感受,數據大了就各類報錯... =. =
(3)package的可靠性問題。我第一門徹底使用R作做業的課是門統計課,教授已經六十多歲,見過各類統計軟件的出生發展和湮沒。她同咱們說到R時第一句話就是Never use a package before you understand the manual and confirm the validity of the functions. 也就是包裹雖然好,使用需謹慎。主要緣由仍是在於開源。不經常使用的package必定要搞清楚函數的用法和核實過輸出,否則真的不推薦使用。我我的也是傾向很是用函數儘可能本身寫,至少錯了也容易debug...
(4)不得不提的package的版本問題。 就算你確認了包裹的可靠性並熟知了各個變量要怎麼用,仍是可能掉入潛在的陷阱=. = 講個真事:去年工做的時候一個項目是使用11年某項目的一個貝葉斯模型分析新的數據。當年寫代碼的人由於相信末日說兩年前就已經辭職環遊世界去了,因而我只好獨自研讀他的代碼。第一步,很天然的,就是重複當年的分析結果。這時發現當年他用的一個package和如今的R已經不兼容,因而就下載了這個package的最新版本。結果有一個簡單的credible interval怎麼都重複不出來... 怎麼怎麼都重複不出來... 我都快絕望了。最後經各類推理驗證,發現這個區別源自於新舊版本的函數內部在對數據排序以後對NaN的不一樣處理... 而這個小小的修改未在任何地方留下任何文字記錄。因此怎麼說呢... 不少時候仍是寫本身的程序靠譜哇...
(5)當你跑比較大的simulation,對效率有要求的時候,有時仍是不得不用C,這多是10小時和10分鐘的差異,絕不誇張。
4. 使用場景
(1)圖形輸出
(2)圖層混合應用
(3)熱力填色地圖