常见编程/框架介绍

文章大纲

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还支持WindowsMacLinux等桌面操做系统,所以,开发者编写的源代码很容易在桌面操做系统中编辑和调试。

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语言JavaPerl的特色,利于学习,使用普遍,主要适用于Web开发领域。PHP 独特的语法混合了CJavaPerl以及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下,可发布游戏至WindowsMacWiiiPhoneWebGL(须要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 OSiOS平台,用于搭建基于苹果平台的应用程序。

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就是微软用来实现XMLWeb ServicesSOA(面向服务的体系结构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)热力填色地图

I hate being alone,but I'm afraid I won't get married early
相关文章
相关标签/搜索