山东青岛电脑学校 专业软件工程师培训,软件人才就业实训中心0532-85025005

Java中compareTo和compare方法之比较

 

这两个方法经常搞混淆,现对其进行总结以加深记忆。

  1. compareTo(Object o)方法是java.lang.Comparable<T>接口中的方法,当需要对某个类的对象进行排序时,该类需要实现Comparable<T>接口的,必须重写public int compareTo(T o)方法,比如MapReduce中Map函数和Reduce函数处理的 <key,value>,其中需要根据key对键值对进行排序,所以,key实现了WritableComparable<T>接口,实现这个接口可同时用于序列化和反序列化。WritableComparable<T>接口(用于序列化和反序列化)是Writable接口和Comparable<T>接口的组合;

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 32

Java多态性理解

 Java中多态性的实现

什么是多态

  1. 面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 27

Java基础知识一

 

Java 基础语法

一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 12

程序员转行为什么这么难

 

尽管我在“大龄程序员的未来在何方”这篇文章里比较乐观地介绍了程序员保持竞争力的几个方向,但现实依然是残酷的:很多人将不得不离开软件开发工作,转型去从事其他职业。

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 24

微信小程序中实现瀑布流布局和无限加载

 

瀑布流布局是一种比较流行的页面布局方式,最典型的就是Pinterest.com,每个卡片的高度不都一样,形成一种参差不齐的美感。

在HTML5中,我们可以找到很多基于jQuery之类实现的瀑布流布局插件,轻松做出这样的布局形式。在微信小程序中,我们也可以做出这样的效果,不过由于小程序框架的一些特性,在实现思路上还是有一些差别的。

今天我们就来看一下如何在小程序中去实现这种瀑布流布局:


小程序瀑布流布局

我们要实现的是一个固定2列的布局,然后将图片数据动态加载进这两列中(而加载进来的图片,会根据图片实际的尺寸,来决定到底是放在左列还是右列中)。

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 54

Java 程序员不容错过的开发趋势

 Java 9

首先从Java 6中的一个bug说起,这个bug在Java 9中将变成一个功能:sun.misc.Unsafe。此库是用于执行低级别、不安全操作的方法的集合。例如,使用allocate Instance方法允许你跳过对象初始化阶段或绕过构造函数中的安全检查。

虽然Oracle考虑过干脆删除Unsafe库,但社区改变了他们的主意,并最终使Unsafe库成为了Java 9的一个功能。

这不是唯一一次社区谈论Java 9或Java未来版本的可能变化。今年早些时候,Brian Goetz,Oracle的Java语言架构师发布了JEP 286的调查结果。
该提案建议在未来的Java版本中引入Local Variable Type Inference,以简化Java应用程序的编写。实质? 74%的开发人员希望不要那么冗长,并且能够声明变量而不必指定相关联的类型。

过了200多天,直到Java 9将被发布(因为我们掰着手指在数它的发布日期),我们有足够的时间来挖掘不同的JEPs,并找到新的和改进的功能。这就是我们遇到的JEP 266:更多并发更新,包括CompletableFuture和令人兴奋的java.util.concurrent.Flow类的更新。


毫无疑问,过去一年中,Java 9已经成为了头条新闻,并且随着我们进入2017年,它将继续获得越来越多的关注。现在我们要做的是等待,希望它不会被再次延迟发布。

-----------------------------------------------------------------------------------------------------------------------------

关于Java EE
2016年对于Java Enterprise Edition,也被称为Java EE来说是有意义的一年。它一直是全球Java社区的一个混乱的来源,因为它建立在Java SE之上。从官方来说,它就“只是”一个规范,通过来自Oracle(如Glassfish参考实现)和其他厂商如Red Hat和IBM的实际可用的实现。

Java EE存在着许多问题,主要是这一个“Oracle是否已经放弃了企业软件?”。Java EE的致命打击来自Gartner的“应用程序平台市场指南”报告。在报告中,Gartner指出,Java EE是为了“已经过时且不再满足现代应用程序需求的模型”而构建的。

Java EE社区表示Gartner说得不太对,并由此引发了围绕这个版本的讨论。Java EE 8预计将在2017年上半年发布,我们觉得现在就赞誉它还为时尚早。我们必须等待,看看结果如何以及Java EE是否会崩溃。

-----------------------------------------------------------------------------------------------------------------------------

关于更多Java
Java不仅仅是Java 9,它还有很多趋势是你必须保持在潮流之上的。一个好的开始浏览2016年的100个顶级Java库,检查在过去一年是否有任何你可能错过了的东西。

此外,如果库并非你所好,那么还有一些有趣的来自于Google的Java库(不是Guava)值得一阅。

遵循教育路线,有一些关键的元素你只能随着经验的增长而学到,所以准备好学习吧。

如果你正在寻找挑战,那么有很多项目值得你花时间。你可以试着去解决这些优雅的问题,字符串操作,或者甚至Java音乐播放器,边玩边学习。当然,如果你遇到任何问题或有任何疑问的话,伟大的Stackoverflow随时为你提供服务。这里有七个我们发现的最佳问题

有趣的小轶事:你能猜到GitHub的顶级Java项目如何使用日志吗?我们分析了1,313个GitHub存储库中的779,236个Java日志记录语句,以找出答案:ERROR,WARN还是FATAL?

-----------------------------------------------------------------------------------------------------------------------------

将Java放在容器中
容器在新一年中变得非常有用,并且它们在管理servlet的生命周期,将URL映射到特定servlet并确保URL请求者具有正确的访问权限时也非常方便。
很多人都对Java容器感兴趣。在我们对Alpine Linux和Docker的结合激起了兴趣的几个月后,单OverOps就可以支持聊天,然后我们看到越来越多的用户使用他们的容器尝试它。

这就是为什么我们决定尝试Alpine Linux的原因,Alpine Linux是独立的,脱离了Linux,基于musl libc(读作’muscle’)和busybox。除了轻量级这个特点,它也遵循安全为主的原则,并且使用grsec / Pax,对于Linux内核而言增强了安全。

Docker仍然是业界最热门的工具之一。该公司承担了运输代码的挑战性任务,并且使它更快更容易地使用容器。但是,如果你想在Docker上使用Java,那么你可能需要重新考虑一下,因为它可能会导致你打破(Java)戒律。

-----------------------------------------------------------------------------------------------------------------------------

关于DevOps
我们知道你在想什么——下面我们将来说一说这个流行语。我们在2016年遇到的最常见的主题之一是DevOps,它有着各种各样的含义和工作方法。它的要旨是专注于知道在一个实时应用程序中发生了什么,并能够控制它。

我们怎么做到这一点?通过监控我们的生产环境。性能问题,错误和异常总是在产生,我们必须知道究竟发生了什么。但是,我们怎么知道什么时候以及为什么产生了某些问题?这就是Observability的概念所在,帮助我们深入了解系统并知道发生了什么。

它是DevOps工作流程的一部分,并且在控制理论中,它是通过其外部输出的知识来推断系统内部状态如何的一种度量手段。这里出现了另一个“流行语”:Instrumentation。正是Instrumentation允许我们在应用程序对我们和我们的用户发疯前获得洞察。

在我们建立这些基石之后,现在是时候提供可以帮助我们监控应用程序性能的工具了。一旦应用程序启动并运行,我们需要知道是否以及何时抛出错误或异常。这就是为什么市场上有许多错误跟踪工具,因此,所有你需要做的是选择正确的。

错误不是唯一需要我们关注的问题,2016年剩下的最大挑战是处理日志文件。每个人都会使用日志文件来搜索和理解应用程序中的错误、崩溃和异常。有些人使用直接方法和筛选纯文本日志文件,而其他人依靠日志管理工具来帮助他们在log-haystack中找到错误。

-----------------------------------------------------------------------------------------------------------------------------

日志文件
如果你正在寻找一种新的方式来调试生产错误和异常,那么OverOps(2016年期间进行了修改)可以为你提供了整个调用堆栈的完整源代码和变量状态。导致失败的每个参数和每个变量会被传递到事务或工作流中。

-----------------------------------------------------------------------------------------------------------------------------

其它
我们还不能忽略微服务的趋势。有人会说,这就是另一个令人难以忍受的流行语,而另一些人则高歌吟颂其分解庞然大物或采取逆向方法和注重消极方面的优势。

无论你用什么方法看,这些日子好像每个人都搞微服务。现在你只需要小心在使用微服务时不要在生产中涉及它。

无服务器计算架构在过去几年中也一直受到关注。无服务器计算的概念涉及部署代码,而不是服务器。云提供商不是购买、管理和扩展服务器,而是处理对VM的请求。

所以你仍然需要服务器,但这个新模式承担了这个责任。或者换句话说,在处理到服务器或安装的任何软件上的部署都没有麻烦。基本上,所有你需要的是一个管理的云服务和一台计算机。

以及最后一个,即使人工智能和机器学习已经存在一段时间了,但依然感觉每个人还是在谈论它们。它们不再是科学家和研究人员的秘密,几乎在任何新兴技术中都可以看到实现的影子。

最近这一领域的喧嚣尘上和演变进步使得非研究人员更容易了解相关内容。现在,你完全可以轻松访问相关的算法和工具。你必须知道你在做什么,而且通过机器学习能力来增强应用程序会容易得多。

-----------------------------------------------------------------------------------------------------------------------------

社区
你必须热爱Java社区。因为它们不仅影响了语言的未来版本,而且还通过聚会、文章和一切有关Java的信息丰富了我们所有人。2016年有一些非常令人惊叹的会议,如JavaOne,QCon,并且更多伟大的会谈你现在还可以重新观看。

在软件开发中学习新事物的主要资源之一是观看在线讲座和视频。这是一个伟大的平台,因为里面有Java专家与我们分享他们的经验,而你无需离开舒适的沙发四处奔波。

或者,如果你不喜欢看视频,那么浏览Java decks也可以让你保持更新到当前的新趋势。

同伴支持与我们工作的每个方面都是相关的,而且我们可以从我们周围的人那里学到很多东西。一个关键的特点是多产,因为总有改进的余地。我们所要做的就是准备好接受建议,并倾听任何愿意发言的人。

-----------------------------------------------------------------------------------------------------------------------------

开源
社区的另一个关键因素是支持和促进开源项目。事实上,我们已经正式推出了你一直在等待(也有可能并非如此)的命令行工具——Bullshifier。它用于在大得离谱的代码基础上测试一些监控能力,通过成千上万的调用深度,成千上万的类,并结束了异常的事务。


原文链接:http://www.codeceo.com/article/java-develop-trend.htm

 

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 18

Java基础学习总结——多态(动态绑定)

 一、面向对象最核心的机制——动态绑定,也叫多态

  

1.1.通过下面的例子理解动态绑定,即多态

复制代码
  1package javastudy.summary;  2  3class Animal {  4/**  5     * 声明一个私有的成员变量name。  6*/  7private String name;  8  9/** 10     * 在Animal类自定义的构造方法 11     * @param name 12*/ 13    Animal(String name) { 14this.name = name; 15    } 16 17/** 18     * 在Animal类里面自定义一个方法enjoy 19*/ 20publicvoid enjoy() { 21         System.out.println("动物的叫声……"); 22    } 23} 24 25/** 26 * 子类Cat从父类Animal继承下来,Cat类拥有了Animal类所有的属性和方法。 27 * @author gacl 28 * 29*/ 30class Cat extends Animal { 31/** 32     * 在子类Cat里面定义自己的私有成员变量 33*/ 34private String eyesColor; 35 36/** 37     * 在子类Cat里面定义Cat类的构造方法 38     * @param n 39     * @param c 40*/ 41    Cat(String n, String c) { 42/** 43         * 在构造方法的实现里面首先使用super调用父类Animal的构造方法Animal(String name)。 44         * 把子类对象里面的父类对象先造出来。 45*/ 46super(n); 47         eyesColor = c; 48    } 49 50/** 51     * 子类Cat对从父类Animal继承下来的enjoy方法不满意,在这里重写了enjoy方法。 52*/ 53publicvoid enjoy() { 54         System.out.println("我养的猫高兴地叫了一声……"); 55    } 56} 57 58/** 59 * 子类Dog从父类Animal继承下来,Dog类拥有了Animal类所有的属性和方法。 60 * @author gacl 61 * 62*/ 63class Dog extends Animal { 64/** 65     * 在子类Dog里面定义自己的私有成员变量 66*/ 67private String furColor; 68 69/** 70     * 在子类Dog里面定义Dog类的构造方法 71     * @param n 72     * @param c 73*/ 74    Dog(String n, String c) { 75/** 76         * 在构造方法的实现里面首先使用super调用父类Animal的构造方法Animal(String name)。 77         * 把子类对象里面的父类对象先造出来。 78*/ 79super(n); 80         furColor = c; 81    } 82 83/** 84     * 子类Dog对从父类Animal继承下来的enjoy方法不满意,在这里重写了enjoy方法。 85*/ 86publicvoid enjoy() { 87         System.out.println("我养的狗高兴地叫了一声……"); 88    } 89} 90 91/** 92 * 子类Bird从父类Animal继承下来,Bird类拥有Animal类所有的属性和方法 93 * @author gacl 94 * 95*/ 96class Bird extends Animal { 97/** 98     * 在子类Bird里面定义Bird类的构造方法 99*/100    Bird() {101/**102         * 在构造方法的实现里面首先使用super调用父类Animal的构造方法Animal(String name)。103         * 把子类对象里面的父类对象先造出来。104*/105super("bird");106    }107108/**109     * 子类Bird对从父类Animal继承下来的enjoy方法不满意,在这里重写了enjoy方法。110*/111publicvoid enjoy() {112         System.out.println("我养的鸟高兴地叫了一声……");113    }114}115116/**117 * 定义一个类Lady(女士)118 * @author gacl119 *120*/121class Lady {122/**123     * 定义Lady类的私有成员变量name和pet124*/125private String name;126private Animal pet;127128/**129     * 在Lady类里面定义自己的构造方法Lady(),130     * 这个构造方法有两个参数,分别为String类型的name和Animal类型的pet,131     * 这里的第二个参数设置成Animal类型可以给我们的程序带来最大的灵活性,132     * 因为作为养宠物来说,可以养猫,养狗,养鸟,只要是你喜欢的都可以养,133     * 因此把它设置为父类对象的引用最为灵活。134     * 因为这个Animal类型的参数是父类对象的引用类型,因此当我们传参数的时候,135     * 可以把这个父类的子类对象传过去,即传Dog、Cat和Bird等都可以。136     * @param name137     * @param pet138*/139    Lady(String name, Animal pet) {140this.name = name;141this.pet = pet;142    }143144/**145     * 在Lady类里面自定义一个方法myPetEnjoy()146     * 方法体内是让Lady对象养的宠物自己调用自己的enjoy()方法发出自己的叫声。147*/148publicvoid myPetEnjoy() {149        pet.enjoy();150    }151}152153publicclass TestPolymoph {154publicstaticvoid main(String args[]) {155/**156         * 在堆内存里面new了一只蓝猫对象出来,这个蓝猫对象里面包含有一个父类对象Animal。157*/158         Cat c = new Cat("Catname", "blue");159/**160         * 在堆内存里面new了一只黑狗对象出来,这个黑狗对象里面包含有一个父类对象Animal。161*/162         Dog d = new Dog("Dogname", "black");163/**164         * 在堆内存里面new了一只小鸟对象出来,这个小鸟对象里面包含有一个父类对象Animal。165*/166         Bird b = new Bird();167168/**169         * 在堆内存里面new出来3个小姑娘,名字分别是l1,l2,l3。170         * l1养了一只宠物是c(Cat),l2养了一只宠物是d(Dog),l3养了一只宠物是b(Bird)。171         * 注意:调用Lady类的构造方法时,传递过来的c,d,b是当成Animal来传递的,172         * 因此使用c,d,b这三个引用对象只能访问父类Animal里面的enjoy()方法。173*/174         Lady l1 = new Lady("l1", c);175         Lady l2 = new Lady("l2", d);176         Lady l3 = new Lady("l3", b);177/**178         * 这三个小姑娘都调用myPetEnjoy()方法使自己养的宠物高兴地叫起来。179*/180        l1.myPetEnjoy();181        l2.myPetEnjoy();182        l3.myPetEnjoy();183    }184 }
复制代码

运行结果:

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 18

Java中静态代码块的用法 static用法详解

 (一)java 静态代码块 静态方法区别
一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用
比如main方法就必须是静态的 这是程序入口
两者的区别就是:静态代码块是自动执行的;
静态方法是被调用的时候才执行的.

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 30

Java提高篇----HashMap

  HashMap也是我们使用非常多的Collection,它是基于哈希表的 Map 接口的实现,以key-value的形式存在。在HashMap中,key-value总是会当做一个整体来处理,系统会根据hash算法来来计算key-value的存储位置,我们总是可以通过key快速地存、取value。下面就来分析HashMap的存取。

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 22

Java 接口——面向对象的精髓

 

接口有何用?面试宝典上背下来的总结,你真的明白吗? 
接口&工厂方法 其实很简单>。<~ 
什么是接口
先看看生活中的接口,比如USB接口。 
图片描述
USB接口的设计者在最初就知道USB能支持这么多功能吗?他们是怎样未卜先知地设计的呢?其实他们也不知道以后USB上会连什么设备,他们只是定义了一个数据传输与供电的标准而已。

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 24