由于学习原因,最近搞了个台式机。Windows 10 已经出来一年左右了,虽然现在用的少,但是 Windows 10 肯定是未来的发展趋势。所以,直接上了 Win10 。很奇怪,感觉各种问题。(因为我另外一台笔记本就一切正常。)很多想玩的东西,在 Windows 上搞起来各种麻烦。所以,Linux 是必须的啊。由于个人偏好,比较喜欢 Ubuntu 。使用 Ubuntu 的小伙伴们都知道,按照各种工具,一条 apt-get
自动下载、编译、安装,非常方便。
Ubuntu 镜像众多,仅仅国内的就有网易、搜狐、阿里以及中科大等多个镜像。有点无从下手,不知如何选择;或者就是使用 ping
来查看每个镜像的响应时间再做选择。但是,这种方法有点麻烦。昨天 阅读全文…
由于Ray的推荐,《The Well-Grounded Rubyist》刚刚出版没多久就让在美国出差的朋友帮我带了一本原版回来。这是我买的第二本英文原版书了。(以前买过一本,这次一下子买了两本,另一本还没看,这本算是第二本吧,哈哈)(七考四级而不过的人,被逼着看英文原版书,我容易嘛?!O(∩_∩)O哈哈~
书买来,一直放着,拖到今年七八月份才开始看,花了 阅读全文…
最近玩一个 Rails 项目,项目中使用了 PostgreSQL 数据库,正好借此也了解一下 PostgreSQL 。
对于 Ubuntu 系统,阮一峰老师的文章已经非常详细地介绍了关于 PostgreSQL 的安装使用。但是,在 Mac 上有些细节却不是很适用。在上网找资料的时候,各种资料也是零零碎碎,查找起来极不方便。正好整理成文,分享出来,方便自己,也方便需要的朋友参考。
坑已经挖好。听口令:预备,跳……
Homebrew 安装
工欲善其事,必先利其器。D瓜哥准备用 Homebrew 安装 PostgreSQL。所以,我们先来介绍一下 Homebrew 。Homebrew 可以说是 Mac 上居家旅行之必备神器!上可以装软件,下可以一键更新,实乃方便至极!
这样的神器,安装也非常简单,这么娇艳欲滴,实在让人爱不释手啊:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
其实,本来不想加上 Homebrew 的安装了 阅读全文…
本文将给大家介绍面向对象编程中一个基本的概念–属性隐藏(Field Hiding)。
1、Java中,属性能否被覆盖?
来让我们看看下面的这个示例代码,它创建了两个子类实例:一个被赋值给子类引用,另外一个赋值给父类引用。
package com.diguage.books.simplejava.ar18;
/**
* 属性隐藏示例
* <p/>
* Coder:D瓜哥,http://www.diguage.com/
* <p/>
* Date: 2015-01-25 19:48
*/
class Super {
String s = "Super";
}
class Sub extends Super {
String s = "Sub";
}
public class FieldOverriding {
public static void main(String[] args) {
Sub c1 = new Sub();
System.out.println(c1.s);
Super c2 = new Sub();
System.out.println(c2.s);
}
}
输出是什么呢? 阅读全文…
在本文中,我们先用一个例子来展示什么是实例变量初始化器(instance variable initializer)、实例初始化器(instance initializer)和静态初始化器(static initializer)。然后,再解释一下实例初始化器的工作机制。
1、执行顺序
看下面这个类,你知道哪个先执行吗? 阅读全文…
在本节,让我们来看一看Java垃圾回收的监控与分析。然后,使用一个工具,监控一个示例应用的垃圾回收过程。如果你是个新手,最好看一下本系列的前三篇文章。你可以从“Java垃圾回收入门”开始看。
Java垃圾回收的监控和分析工具
下面是几个可用的工具。每一个可用的工具都有自己的优点和不足。使用恰当的工具,以正确的方式开展分析,可以帮助我们提高应用的性能。在本文,我们主要使用Java VisualVM。
- Java VisualVM
- Naarad
- GCViewer
- IBM Pattern Modeling and Analysis Tool for Java Garbage Collector
- HPjmeter
- IBM Monitoring and Diagnostic Tools for Java – Garbage Collection and Memory
- Visualizer
- Verbose GC Analyzer 阅读全文…
本节我们将介绍几种可用的Java垃圾收集器。垃圾回收是一个自动进程,它把开发人员从内存的分配与回收的杂务中解放出来。本文是“Java垃圾回收系列”的第三篇。在上一篇,也就是第二篇中,我们了解了Java垃圾回收的工作原理,这节非常有意思,我推荐你看一看。在第一篇“Java垃圾回收入门”中,我们介绍了Java虚拟机架构,堆内存模型以及Java相关的一些术语。
Java有四种垃圾收集器:
- Serial Garbage Collector
- Parallel Garbage Collector
- CMS Garbage Collector
- G1 Garbage Collector
D瓜哥注
这是四种类型的垃圾收集器。具体到每一个实现,在Oracle提供的官方JDK中就有Serial Garbage Collector、ParNew Garbage Collector、Parallel Scavenge Garbage Collector、Serial Old Garbage Collector、Parallel Old Garbage Collector、CMS Garbage Collector、G1 Garbage Collector等七种垃圾收集器。以后有机会再专门写文章做详细介绍!
这四种垃圾收集器每一种都有自己的优点与不足。最重要的是, 阅读全文…
本文将介绍Java垃圾回收的基础知识,同时将说明它的工作原理。同时,本文还是“Java垃圾回收系列”的第二篇文章。希望您已经阅读过该系列的第一篇文章,“Java垃圾回收入门”。
Java垃圾回收是一个自动管理程序所用内存的进程。通过将内存的分配与回收交给Java虚拟机来自动完成,就可以将开发人员从这些繁琐易错的工作中解放出来。
垃圾回收的启动
作为一个自动化的进程,开发人员不需要在代码中显式地启动垃圾回收进程。System.gc()
和Runtime.gc()
是申请垃圾收集器启动垃圾回收的勾子(hook)。
开发人员通过这种请求机制就有机会来请求启动垃圾回收,但是是否启动则由Java虚拟机自己决定。垃圾收集器可以选择拒绝这个请求,所以不保证请求到来之后就肯定进行垃圾回收。是否进行垃圾回收主要是根据堆内存中Eden内存的利用情况。Java虚拟机规范将这个选择权交给了实现,所以更详细的信息还要看具体的实现细节。
现在,我们知道了, 阅读全文…
1、定义
对于Java初学者来说,覆盖(Overriding)和重载(Overloading)是两个非常容易混淆的概念。
重载的情况是这样的,在同一个类中,有两个甚至更多的方面,他们名称相同,但是有不同的参数列表。
覆盖的意思是,有两个同名的方法,同时还有相同的参数列表,但是却有不同的实现。其中一个存在于父类中,另外一个在子类中。
2、覆盖 vs 重载
对于覆盖和重载有几个非常重要的事实需要注意:
- 真实的对象类型,而不是引用变量的类型,至于哪个覆盖方法会被使用是在运行时决定的;
- 引用类型在编译时决定那个重载方法被使用;
- 多态性取决于覆盖,而不是重载。
3、覆盖示例
这里有一个覆盖的示例。阅读代码,然后 阅读全文…
Java的最基本的父类java.lang.Object
中有两个非常重要的方法定义:
public boolean equals(Object obj)
public int hashCode()
实践证明,正确理解这两个方法非常重要,尤其是向Map
中添加用户自定义的对象时。即便如此,甚至有些高级开发人员有时很很难说清楚它们到底应该怎么用。在这篇文章里,我将先展示几个常见的 阅读全文…