上周三(2014年11月5日)公司搞入职培训,所讲的一些东西和我关注的东西有点“不谋而合”,感觉很爽;周四蔡导(当然就是讲师了)把讲座的PPT群发到技术部邮件组里,参与讨论时,我就询问想推荐一些书,看大家感不感兴趣,结果不少人回应很“激烈”。到周五(2014年11月7日)在公司技术群里求推荐好书,又掀起来一波热潮。大家推荐了不少好书。中国向来是礼仪之邦,正所谓来而不往非礼也!D瓜哥也来推荐一些书。
上面是废话,下面开始转入正题。
推荐原则
从去年找工作,甚至再往前,从上大学开始,到现在为止,翻过不少书(好多没看完,姑且叫翻吧),运气还算不错,确实遇到一些不错的好书,值得反复阅读,细细品味。不过,一次太多,容易把人吓着,所以,暂且推荐十本吧。
另外,这次的介绍主要是面向公司内部同事,考虑到公司所用技术方向,也为了照顾大多数人,推荐的书籍大部分不限于某一语言。不过,因为本人几乎一直从事Java开发,所以,相对来说可能稍微侧重一些;另外,因为从来没有从事过PHP的开发(为了优化博客,折腾Wordpress不算),所以不推荐专门的PHP相关书籍。
最后一个,也是最重要的原则:D瓜哥看过、试过之后有一种“醍醐灌顶”的“顿悟”感。(当然,D瓜哥水平有限,所以“顿悟”的可能比较频繁。这个,牛人、大拿可以直接飞过去了。呵呵)
先说明一下,这本书的代码是用C#实现的,搞C#的人可以先高兴一下。
不过,代码都很浅显易懂,可以很方便地“迁移”到其他语言了。所有的技术人员都可以高兴一下了。哈哈
引用本书中的一句话:如果说数学是思维的体操,那么设计模式就是 阅读全文…
分类: Java, 动态语言, 挨踢(IT), 数据库, 职场生涯, 轶事趣闻 标签: Java, MySQL, Ruby, 性能, 数据库, 程序员
Comparable
和Comparator
是Java核心API提供的两个接口(interface)。从它们的名字就可以看出,他们用于比较对象的大小。但是,确切来说,它们到底是什么呢?以及它们直接有什么不同之处呢?接下来的两个例子来回答这个问题。这个简单的例子就是比较两种HDTV的尺寸。当阅读完下面的代码,你就知道如何使用Comparable
和Comparator
。
1、Comparable
一个类实现Comparable
接口,是为了可以让其自身的对象和其他对象进行比较。类本身必须实现这个接口,为的是可以和它自己的实例进行比较。要求实现的方法是compareTo()
。下面的 阅读全文…
让我们从下面这行代码开始:
String x = null;
上面这句话到底做了什么?
在回答这个问题之前,我们需要先回顾一下什么是变量以及什么是变量值?一个常见的比喻是变量就类似一个箱子。就像你可以使用箱子盛放东西一样,你能用变量存放变量值。当你声明一个变量时,你就需要设置它的类型。
Java中主要分为两种数据类型:基本类型和引用类型。声明为基本类型的变量存储变量值;声明为引用类型的变量存储引用。在 阅读全文…
在Java,内存空间的分配和回收都是有Java虚拟机的垃圾回收进程自动完成的。这点和C语言不同,在Java中,不需要开发人员专门垃圾回收相关的代码。这是使Java流行起来的众多原因之一,并且帮助开发人员写出了更好的Java应用。
接下来,将通过四篇文章来介绍Java垃圾回收的一些基础知识。
- Java垃圾回收入门
- Java垃圾回收的工作原理
- 常见的四种Java垃圾收集器
- Java垃圾回收的监控与分析
本文是该系列的第一篇文章。将介绍几个 阅读全文…
如何检查一个数组(未排序)中是否包含某个特定的值?在Java中,这是一个非常有用并又很常用的操作。同时,在StackOverflow中,有时一个得票非常高的问题。在得票比较高的几个回答中,时间复杂度差别也很大。在下面的例子中,D瓜哥将展示每个方法花费的时间。
1、不同的实现方式
1) 使用List
:
/**
* Coder:D瓜哥,http://www.diguage.com/
*/
public static boolean useList(String[] arr, String targetValue) {
return Arrays.asList(arr).contains(targetValue);
}
2) 使用 阅读全文…
数据库对于服务端开发人员来说,几乎就是左膀右臂。几乎每一个服务端开发人员都要和数据库打交道。而MySQL又以其开源免费,小巧玲珑,简单易用,功能强大占据中国数据库使用份额的半壁江山。从去年接触到Vagrant以来,Vagrant以其方便易用深深吸引了D瓜哥。为了尽可能地和生产环境保持尽可能的一致性,减少不必要的问题的发生,Vagrant+Ubuntu+MySQL几乎是绝配。
MySQL允许远程访问的设置
-
注释bind-address = 127.0.0.1
>cd /etc/mysql
>sudo vim my.cnf
将 阅读全文…
Java中,可以通过下面两个方法来创建一个字符串:
/**
* Coder:D瓜哥,http://www.diguage.com/
*/
String x = "abc";
String y = new String("abc");
用双引号和用构造函数有什么区别呢? 阅读全文…
首先,在开始正文之前,请你快速回答如下问题:
在不使用任何IDE自动补全的情况下,如何获取一个数组的长度?以及,如何获取一个字符串的长度?
这个问题,我问过初级和高级,两个不同层次的开发人员。他们都不能准确而自信地回答这个问题。当IDE提供方便的代码自动补全功能时,它也会带来“理解肤浅”的问题。在这篇文章中,D瓜哥将给大家介绍几个关于Java数组的关键概念。
上述问题的正确答案是: 阅读全文…
前面有说明“图解Java字符串的不可变性”,后面有解释“为什么Java中的字符串是不可变的? ”。还有一篇与时俱进的“substring()
方法在JDK6和JDK7中的异同 ”。下面,上演第四篇“Java字符串的‘引用传递’”。
这也是一个Java中的一个经典问题。很多类似的问题在StackOverflow被提出。同样有很多不完整甚至不正确的回答。如果不深入思考,这问题很简单。但是,如果我们稍微深究一下,那么她却显得很“迷人”。
1、一段有趣而诡异的代码 阅读全文…
在“图解Java字符串的不可变性”中,介绍了在Java中字符串是不可改变的。但是,大家有没有想过“为什么字符串是不可变的?”今天就来给大家解释一下这个问题。
通过“substring()
方法在JDK6和JDK7中的异同 ”这篇文章,让D瓜哥看到,对于字符串的处理也是与时俱进。所以,如果发现下文中如有已经过时之处,请及时指出。D瓜哥也会及时更正的。
这是面试中经常被问到的老问题了。在Java中,将字符串设计成不可变是又很多原因的。一个好的回答需要建立在 阅读全文…