本文主要介绍了C++/JAVA比较、JAVA相关工具配置、JAVA语言基础。主要目录如下:
一、C++&JAVA对比。
二、JAVA工具配置: IDEA使用、pom.xml说明、mvn使用。
三、JAVA语言特性:
一、C++&JAVA对比。
文章开始之前,先对比一下C++和JAVA语言吧。(下面的介绍和趋势都是个人的感觉,并无真实数据支撑)
一直在做C++,整体的感觉C/C++现在在招聘市场还是有一些没落的,不过毕竟是强类型的语言,而且也一直在更新。C/C++的优点也是很明显的,性能高、可以操作硬件、自由。但是缺点也是明显的:自由、过度太复杂,导致入门门槛高。我感觉C/C++整体的还是只是适合底层/后台的服务。整体的随着语言和社会的的发展,新出现的问题肯定更加倾向于使用简单的解决方案来解决,所以创业公司也较多倾向于使用JAVA。所以语言肯定是更加简单易用,在后台都逐渐脚本化的时代,连GO都可以和JAVA抢饭碗,所以C++在新场景的应用肯定会越来越少的。先对比一下互联网/软件企业的C/C++和JAVA主要应用的项目。
C/C++主导的项目主要有:
1. 系统、硬件项目(底层的项目)
2. 搜索(这都是百度的功劳---百度搜索)
3. 广告(这也是百度和腾讯的功劳---凤巢、阿里妈妈、广点通)
4. Object C(也是如日中天的客户端、可是有被swift替换的趋势)。
5. 通信项目后台(腾讯的功劳、性能的考虑---QQ、旺旺、微信)
6. 各种系统软件(银行后台---IBM服务器、Vmware虚拟化、云计算底层)
使用JAVA能做很多的项目:
1. JAVA服务端/业务(简单易用,工具强大、迭代快,但是也有被脚本化的趋势)
2. Android项目(当前如日中天的客户端开发)
3. Web项目(Java Script)
4. 电商项目(各种ERP,后台业务逻辑)
5. 数据挖掘机器学习项目(Spark)
6. 大数据项目(Apache社区的功劳---Hadoop、Storm、Hive、HBase)。
其实说C++没落,有些绝对和大话了。整体的项目和语言关系如上,整体的语言发展趋势谁知道呢?就拿程序员这个职业来说,可以确定的是这个行业知识迭代更新很快,一定要不停的学习和更新自己。再多说一句,程序员这个职业,不过还能火多久呢?5年、10年、50年,万一到时候互联网泡沫破灭了呢? 不过就趋势来说,软件和不同行业的结合和影响的能力很强。即使未来互联网不是领先的生产力了,无论是未来人工智能,机器人,还是的数据时代,码农都是少不了的哈。
其实对于小码农来说,随便一个坑位就足以养活我了哈,先把搜索和C++学习的更加深入,再多学习一些,毕竟技多不压身么。
二、JAVA工具配置:JDK安装、mvn简介、pom.xml简介、IDEA使用简介。
1. JDK安装和配置
2. maven简介
1) 什么是maven
2)maven仓库配置
a. 本地仓库 <localRepository>D:\java\repository</localRepository> 或 mvn clean install -Dmaven.repo.local=/home/juven/myrepo/
b. 远程仓库: maven项目默认使用超级POM: \org\apache\maven\project\pom-4.0.0.xml ,它是所有maven pom的父pom.xml
可以使用artifactory配置远程仓库:
<project>
.....
<repositories>
<repository>
<id>my-repo</id>
<name>my repository</name>
<url>http://localhost:8080/artifactory/my-repo/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>my-repo</id>
<name>my repository</name>
<url>http://localhost:8080/artifactory/my-repo/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<name>oss.sonatype.org</name>
<id>oss.sonatype.org</id>
<url>http://oss.sonatype.org/content/groups/public</url>
</pluginRepository>
</pluginRepositories>
...
</project>
也可以使用setting.xml作为一个全局配置。但是不是将pom.xml的repositories和pluginRepositories复制到settings.xml中就行了,可以使用profile如下,定义一个id为dev的profile,将所有的repositories和pluginRepostories放到这个profile中,然后使用activeProfiles元素激活该Profile。这样就不用再为每个pom重复配置仓库。
c. 上传构件到远程仓库:
需要配置pom中的distributionManagement来制定maven分发构件的位置,也可以使用setting.xm来配置如下(注意server下的id值,必须与pom.xml中的repository一致):
<project> pom.xml
...
<distributionManagement>
<repository>
<id>my-repo</id>
<name>Release Repository</name>
<url>http://localhost:8081/artifactory/my-repo</url>
</repository>
...
</project>
<pre class="java" name="code"><settings> setting.xml
...
<servers>
<server>
<id>my-repo</id>
<username>admin</username>
<password>password</password>
</server>
...
</settings>
3. pom.xm简介
1). 什么是POM Project Object Model, 项目对象模型。pom.xm文件类是ant的build.xml文件,不过它更加强大,可以管理源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系。 2) POM.xml详解 a. maven协作相关属性: groupId: 组织标识 如org.codehaus.test,那么在M2_REPO目录下,将是: org/codehaus/test目录 artifactId: 项目名称 如myproject,那么将是 org/codehaus/test/myproject version: 版本号,那么将是 orj/codehaus/test/myproject/1.0 packing: 打包格式,可以为pom, jar , maven-plugin, ejb, war, ear, rar, par.
b. POM之间的关系 依赖关系: dependency list 继承关系:parent, 可以继承其他的依赖: developers and contributors、plugin lists、reports lists、plugin executions with watching ids、plugin configuration。 在这种机制下,maven还提供了一个类是java.lang.Object的顶级pom.xml文件 聚合关系:modules,用于将多个maven目录聚合为一个大项目
c. 属性 操作系统环境变量: ${env.PATH} pom文件中的属性: ${project.version} --- <project><version>1.0</version></project> setting.xml文件中属性:${setting.offline} --- <settings><offline>false</offiline></setting> Java System Properties: ${java.home} --- java.lang.System.getProperties()中的属性,java.home 自定义:${installDir} --- <properties><installDir>c:/apps/cargo-installs</installDir></properties>
d. 构建设置: build标签:Resources和Plugins,Resources用来包含某些资源,Plugins用于设置构建插件 profiles/profile: 子编译集
一个完整的pom.xml,放置在项目的根目录下:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<!– The Basics –>
<groupId>…</groupId>
<artifactId>…</artifactId>
<version>…</version>
<packaging>…</packaging>
<dependencies>…</dependencies>
<parent>…</parent>
<dependencyManagement>…</dependencyManagement>
<modules>…</modules>
<properties>…</properties>
<!– Build Settings –>
<build>…</build>
<reporting>…</reporting>
<!– More Project Information –>
<name>…</name>
<description>…</description>
<url>…</url>
<inceptionYear>…</inceptionYear>
<licenses>…</licenses>
<organization>…</organization>
<developers>…</developers>
<contributors>…</contributors>
<!– Environment Settings –>
<issueManagement>…</issueManagement>
<ciManagement>…</ciManagement>
<mailingLists>…</mailingLists>
<scm>…</scm>
<prerequisites>…</prerequisites>
<repositories>…</repositories>
<pluginRepositories>…</pluginRepositories>
<distributionManagement>…</distributionManagement>
<profiles>…</profiles>
</project>
4. Intelligent IDEA使用
参考文献:
1. C++精英化趋势与两个关键缺陷:http://www.cnblogs.com/daoshi/archive/2011/12/13/2286810.html
2. maven详解:http://blog.csdn.net/adeyi/article/details/17259479
3. mac配置maven: http://blog.csdn.net/anialy/article/details/22217937
4. maven配置本地仓库和远程仓库: http://blog.csdn.net/dongnan591172113/article/details/7685164
5. maven的环境搭建与idea配置: http://blog.csdn.net/xxb2008/article/details/8772634