专家的干货:从零开始学 Java 如何速成!

刚刚走到门口的兄弟们,我们不妨想一想,我们学Java是为了什么?是为了做Java程序员,还是以Java程序员为入口,进入互联网行业。眼界的不同,会决定我们思考问题的方式和努力的程度。所以作为站在Java门口的兄弟们,首先要考虑的是自己职业规划的问题。不是要不要做Java程序员,而是要不要进入互联网行业,只有明确了这一点我们才不会在潜意识中束缚自己,才不会在将来与很多机会擦肩而过时还没有建立起敏锐的嗅觉。当然,这个问题只能由我们自己来回答,因为任何一个行业都没有好与不好,而只有适合与不适合。但可以肯定的一点是,作为我们这些没有任何背景的普通人,想通过职业生涯的发展逐步改善自己的生活,基本上都需要在一个相对固定的行业中慢慢积累,包括技能、人脉、资历等各个方面,不管是打工还是创业。也就是说,大跨度的转行会导致你在之前行业中的积累烟消云散,跨行之前你一定要想清楚自己是否真的要从零开始。

从零开始学java入门必学,从零开始学java入门到精通但是对个人而言,随着技术的不断发展,Java程序员入门的门槛也是越来越高,现在和十年前相比已不可同日而语了,将来也只会更加严格。也就是说,更大的发展空间其实是来自于对从业者更高的要求。当到达一定程度,工作内容与使用什么语言关系不大的时候,Java背景的开发者能表现出更优秀的专业素质和更强大的思维能力。行业的发展为我们提供了展翅飞翔的广阔天地,而达到什么高度就完全靠我们自己了。下面简单聊一下关于Java那些事儿!

设计理念

主要理念用一句话概括就是:提供一套“小而美”的API。API需要对程序员友好,增加新功能时能让程序员们快速上手。

为了保证核心接口足够小,最顶层的接口(也就是Collection与Map接口)并不会区分该集合是否可变(mutability),是否可更改 (modifiability),是否可改变大小(resizability)这些细微的差别。相反,一些操作是可选的,在实现时抛出UnsupportedOperationException即可表示集合不支持该操作。集合的实现者必须在文档中声明那些操作是不支持的。

为了保证最顶层的核心接口足够小,它们只能包含下面情况下的方法:

00001.

基本操作,像之前说的“增删改查”

00002.

00003.

There is a compelling performance reason why an important implementation would want to override it.

00004.

此外,所有的集合类都必须能提供友好的交互操作,这包括没有继承Collection类的数组对象。因此,框架提供一套方法,让集合类与数组可以相互转化,并且可以把Map看作成集合。

两大基类Collection与Map

在集合框架的类继承体系中,最顶层有两个接口:

·

Collection表示一组纯数据

·

·

Map表示一组key-value对

·

一般继承自Collection或Map的集合类,会提供两个“标准”的构造函数:

·

没有参数的构造函数,创建一个空的集合类

·

·

从零开始学java入门必学,从零开始学java入门到精通

有一个类型与基类(Collection或Map)相同的构造函数,创建一个与给定参数具有相同元素的新集合类

·

因为接口中不能包含构造函数,所以上面这两个构造函数的约定并不是强制性的,但是在目前的集合框架中,所有继承自Collection或Map的子类都遵循这一约定。

开试写代码吧

一、在src目录下建立memcached.properties配置文件

这个文件是用来存 memcached 服务器的地址、端口和权重的信息的。

memcached.connectionPoolSize=10

memcached.failureMode=true

#server1

server1.memcached.host=127.0.0.1

server1.memcached.port=11211

server1.memcached.weight=4

#server2

server2.memcached.host=127.0.0.1

server2.memcached.port=11212

server2.memcached.weight=6

我这里是配置两台服务器用以测试,不同的权重。具体文件请访问 https://github.com/mafly/SpringDemo/blob/memcached/src/memcached.properties 查看

所有这些写法都是二维数组!

int[][] a() { return new int[0][]; }

int[] b() [] { return new int[0][]; }

int c() [][] { return new int[0][]; }

}

是的,这是真的。尽管你的人肉解析器不能马上理解上面这些方法的返回类型,但都是一样的!下面的代码也类似:

int[][] a = {{}};

int[] b[] = {{}};

int c[][] = {{}};

}

是不是觉得这个很2B?想象一下在上面的代码中使用JSR-308/Java 8的类型注解。 语法糖的数目要爆炸了吧!

@Target(ElementType.TYPE_USE)

@interface Crazy {}

@Crazy int[][] a1 = {{}};

int @Crazy [][] a2 = {{}};

int[] @Crazy [] a3 = {{}};

@Crazy int[] b1[] = {{}};

int @Crazy [] b2[] = {{}};

int[] b3 @Crazy [] = {{}};

@Crazy int c1[][] = {{}};

int c2 @Crazy [][] = {{}};

int c3[] @Crazy [] = {{}};

}

类型注解。这个设计引入的诡异在程度上仅仅被它解决问题的能力超过。

为了更详细地阐述为现代软件工程师广泛使用的现有Java框架,我们决定引用Apache的Struts 1(Struts 2)的后续版本。这个Java框架对于那些构建当代Java EE Webapp的工程师来说真是一个不错的发现。Apache Software Foundation为开发人员提供了一个广泛的工具,用于创建面向企业的web应用程序,优化了从开始到最终点的开发过程以及后期维护。如果你正在对高负载系统(如广播门户)愁眉不展,那么这是一个正确的选择。

由于Struts 2实现好了的Action类(普通POJO对象),测试编写代码所需的工作量减轻了。使用框架的API,耦合变得更容易,这也有助于调整拦截器。

在2017年各种流行的Java框架中选择合适的概念可能是一个麻烦的任务,因为每个公司在选择获胜方法时都会坚持他们自己基于web和移动app创建的思想。无论你使用的是什么确切的框架,谨记许可证,易于安装,网络的活跃程度,以及手边的文档等。根据项目类型,有时,明智的做法是将所有工具放在一起挑选,但很多时候,“减肥”和转向一个轻量级的概念更有意义。

另一个问题是,你忙碌的小伙伴们是否准备好学习,是否有空余时间分配给知识汲取。通常,将开发交给远程团队并获得可盈利产品是非常值得的。快乐开发!