Java生态系统
成长过程(历史)
作者:James Gosling(詹姆斯·高斯林)
1995.5 Sun公司推出Java语言,2010被Oracle收购
名称由来:最早叫Oak(橡树),但因为被别的公司注册,所以决定再重新起名,排名第一的 Silk(丝绸) 遭到Gosling反对,第二、第三(Lyric(抒情诗))没有通过商标律师,排名第四的 Java 最终通过,Java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名,国外的许多咖啡店用Java来命名或宣传,以彰显其咖啡的品质。Java语言中的许多库类名称,多与咖啡有关,如JavaBeans(咖啡豆)、NetBeans(网络豆)以及ObjectBeans (对象豆)等等。
语言特性:OO、跨平台、泛型编程
- 号称“Write Once, Run Anywhere”
版本:
- JDK 1.0 (January 21, 1996)
- JDK 1.1 (February 19, 1997)
技术:JAR文件格式、JDBC、JavaBeans、RMI。
语法:内部类(Inner Class)和反射(Reflection)。- J2SE 1.2 (December 8, 1998)
- J2SE 1.3 (May 8, 2000)
- J2SE 1.4 (February 6, 2002)
- J2SE 5.0 (September 30, 2004)
重大更新,泛型支持、基本类型的自动装箱、改进的循环、枚举类型、格式化I/O及可变参数
- Java SE 6 (December 11, 2006)
- Java SE 7 (July 28, 2011)
- Java SE 8 (March 18, 2014)
SE : Standard Edition,包含Java语言核心的类。比如:数据库连接、接口定义、输入/输出、网络编程。
EE : Enterprise Edition,包含JSE中的类,并且还包含用于开发企业级应用的类。 比如:EJB、servlet、JSP、XML、事务控制。
ME : Micro Edition,包含嵌入式开发或者移动应用开发所需要的类,包括一些JSE的核心代码和一些无线设备的API。
JDK : Java Development Kit,软件开发工具包,包含JRE和java工具(编译器javac、打包jar、文档生成器javadoc、调试jdb、运行java)
JRE : Java Runtime Environment,java运行时环境,包含JVM和java核心库及支持文件
JVM : Java Virtual Machine,java虚拟机,Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。
JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
所以,除了java外,也可以运行其他语言,比较流行的如:Scala、Groovy
JDK : 默认指的是Sun公司发布的jdk,但也有很多公司和组织自己研发专属的jdk
Open JDK : JDK的开放原始码版本区别:
| | JDK | Open JDK|
|— |—|—|
|协议 | JRL(JavaResearch License,Java研究授权协议)| GPL(General Public License) V2|
|代码完整度| 完整 | 从JDK7开始差距不大,缺少 SNMP |
|工具 | 完整 | 缺少部分工具,并且尽量分离|JCP : Java Community Process,开放性国际组织
JSR : Java Specification Requests,新功能或特性需提交JCP整理并规范为JSR,然后经过JCP执行委员会投票决定。
繁衍子嗣(社区及衍生品)
- Web:Spring MVC、Spring Boot、JSF、Structs
- RPC:Dubbo、Dubbox、Thrift
- ORM:Hibernate、MyBatis
- J2EE:Spring
- 移动:Android
- JSON:fastjson
- 全文搜索:Lucene
- ETL工具:Kettle
- 模板引擎:Velocity、thymeleaf
- 构建:Maven、Gradle、Ant
- 应用服务器:Tomcat(Apache基金会)、Jetty、Wildfly、JBoss(Redhat)、WebLogic(Oracle)、WebSphere(IBM)
- 持续集成:Jenkins
- 分布式存储:Cassandra
- 消息服务:ActiveMQ、RabbitMQ
- 作业调度:Quartz
- 单点登录:OpenSSO
- 分布式搜索:ElasticSearch
- 日志管理:Logstash
- 动态脚本语言:Groovy
- 单元测试:JUnit
应用开发
Spring vs Java EE
微服务
Spring Boot VS Java EE
大数据
大众脸?还是美人胚子?(流行度)
语言
- Redmonk
- Tiobe
Java工具和技术调查
- 总览:
68% 的开发者用 Maven;
68% 的在用 Git;
46% 的在用 Intellij IDEA;
43% 的在用 Spring MVC
34% 的在用 微服务架构;
32% 的在用 Docker;
62% 的在用 Java 8;
60% 的在用 Jenkins;
42% 的在用 Tomcat;
39% 的在用 Oracle DB;
31% 的在用 Java EE 7;
29% 的在用 Spring Boot;
- 工作年限
大部分在5-20之间
- 项目类型
67%是全栈
微服务
JVM语言
- Java版本
- Java EE版本
- IDE
- 构建工具
- 应用服务器
蓝色:生产环境,黄色:开发环境
- 数据库
总结
2040 名开发者参与调查;
做全栈Web项目的开发者,平均大约有 10 - 12 年的工作经验;
63% 的在大企业或中型工作就职;
74% 的自认为高于业界平均水平;
34% 采用了微服务架构;
66% 并没有采用微服务,其中仅有 12% 的在未来有计划试试;
Java 8 是主流,62% 的参与者已经在生产环境用上了;
Java EE 7 , 31% 的参与者已经在用新版本了;
42% 的根本不用 Java EE;
46% 的在用 IntelliJ IDEA,已超过了 Eclipse 的 41%;
68% 的在用 Maven ,Gradle 只有 16%.
Tomcat 是最受欢迎的应用服务器,高达 42%;
39% 的参与者在用 Oracle DB ,稍微比 MySQL 的 38% 高了一点;
MongoDB 在最受欢迎的 NoSQL DB ,比例是 15% ;
Spring 依旧主宰着 Web 框架市场, Spring MVC 和 Spring Boot 的比例是 43% 和 29%;
Jenkins 主宰着 CI Server 市场,比例是 60% ;
Git 有 68% 份额,而 SVN 仅有 23%;
New Relic 在 APMs 有着 11% 份额;
32% 的参与者在用 Docker ,但 54% 的根本没用虚拟化环境;
71% 的参与者宣称自己是 Agile 的;过去4年变化
Eclipse 的份额持续下降,而 IntelliJ 却稳步持续上升,已经在使用率超越了 Eclipse;
Maven 依旧保持着绝对的领先优势;
Gradle 增长缓慢,暂时还不足以挑战 Maven;
Spring 主宰着 Web 框架市场,从 2012 年到 2016 年持续增长中,特别是 Spring Boot 可以称为剧增;
JSF 在缓慢下降。Stripes、Tapestry、Wicket 和 Play 1 看样子要退出历史舞台了;
Git 展示了强劲的增长,从 27% 到 68%。而 SVN 却从 55% 降到 23%;常用开发工具
就业
全文涉及的城市包括: 北京、上海、深圳、广州、杭州、成都、南京、武汉、西安、长沙、苏州 。
涉及的语言包括:Java、Python、PHP、C#、C++
数据来源:使用Python爬取的拉勾网的招聘信息(共计15059条招聘信息)
主流:Java、PHP、C++
数据:按照拉勾网上薪资区间最低的价格来进行统计展示
Python语言以11.9k的薪资领跑,最低的是C#的8.6k
C++的招聘看重学历,大部分企业需要开发者有硕士及以上学历
PHP的招聘基本上不注重学历
对Java开发者的要求是本科学历即可
各城市的Java需求都很大
北上深三城市对C++的需求是相对较多的,这三个城市是C++开发者的最佳选择
北京对Python开发者需求也较大,其它城市需求量不是特大
C#在所有城市普遍需求不大
北上广深杭对PHP的需求极大仅次于Java的需求
成都、南京、武汉、西安、长沙只要你是个程序员不管你用什么语言做开发,平均工资都是那么点6-9k,南京完完全全的几乎重叠。
因此,想安稳拿高薪啊:学Java去北上深杭吧!
长沙这个城市为什么C#开发者平均薪资最高啊?!对了,Python开发者千万别去长沙,最低平均薪资。
大公司使用情况
- 阿里 占90%
- 百度、腾讯,主流:C、C++
- 华为
- Twitter 2012年开始从Ruby on Rails转向到Java+Scala
- Amazon、Google、eBay
A-Z
- A : AspectJ(AOP框架)
- B : Spring Boot
- C : Clojure(运行在JVM上的动态语言)
- D : Dagger(Android平台的依赖注入框架)
- E : Ektorp(Ektorp is a Java persistence API that uses CouchDB as storage engine)
- F : Felix(Apache Felix is a community effort to implement the OSGi Framework and Service platform and other interesting OSGi-related technologies under the Apache license)
- G : Groovy & Grails(Groovy是Java平台上设计的面向对象编程语言。 这门动态语言拥有类似Python、Ruby和Smalltalk中的一些特性,可以作为Java平台的脚本语言使用。Grails : Web application framework, Groovy version of Ruby on Rails, to use in Java development. )
- H : Spring HATEOAS(Create REST representations that follow the HATEOAS principle from your Spring-based applications.)
- I : Ivy(Apache Ivy™ is a popular dependency manager focusing on flexibility and simplicity.)
- J : Jetty(Jetty provides a Web server and javax.servlet container, plus support for HTTP/2, WebSocket, OSGi, JMX, JNDI, JAAS and many other integrations.)
- K : Kotlin()
- L : Lucene(Apache Lucene and Solr are distributed under a commercially friendly Apache Software license)
- M : Morphia(The Java Object Document Mapper for MongoDB)
- N : Nashorn(Nashorn is a JavaScript engine developed in the Java programming language by Oracle.)
- O : OpenXava(OpenXava is an AJAX Java Framework for Rapid Development of Enterprise Web Applications.)
- P : Play(The High Velocity Web Framework for Java and Scala)
- Q : QPid(Apache Qpid makes messaging tools that speak AMQP and support many languages and platforms. )
- R : Rave(Apache Rave moved into the Attic in January 2016. Apache Rave was a web and social mashup engine that aggregated and served web widgets. It was targeted as an engine for internet and intranet portals.)
- S : Stripes(Stripe provides a set of unified APIs and tools that instantly enable businesses to accept and manage online payments.)
- T : Thymeleaf(Thymeleaf is a modern server-side Java template engine for both web and standalone environments. )
- U : UIMA
- V : VertX
- W : Wookie
- X : Xindice
- Y : YamlBeans
- Z : Zookeeper(Apache ZooKeeper is an effort to develop and maintain an open-source server which enables highly reliable distributed coordination.)