<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[技术笔记]]></title><description><![CDATA[Java, SSH, Hadoop和Linux技术相关]]></description><link>https://blog.youkuaiyun.com/AlburtHoffman</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; AlburtHoffman]]></copyright><item><title><![CDATA[Python Decorator]]></title><link>https://blog.youkuaiyun.com/AlburtHoffman/article/details/51526638</link><guid>https://blog.youkuaiyun.com/AlburtHoffman/article/details/51526638</guid><author>AlburtHoffman</author><pubDate>Sat, 28 May 2016 20:53:02 +0800</pubDate><description><![CDATA[很多人认为Python的装饰器就是Java的注解。虽然表现的形式很类似，但本质上有很大的差别，甚至Python的装饰器更加灵活。本文就是对机制的简单介绍。]]></description><category></category></item><item><title><![CDATA[中国GDP什么时候会超过美国]]></title><link>https://blog.youkuaiyun.com/AlburtHoffman/article/details/50468285</link><guid>https://blog.youkuaiyun.com/AlburtHoffman/article/details/50468285</guid><author>AlburtHoffman</author><pubDate>Wed, 06 Jan 2016 13:35:43 +0800</pubDate><description><![CDATA[经常看到网上讨论中国什么时候能赶超美国的争论。且不说这个问题有多无聊，讨论这个问题的人也很无聊。看了半天，也没看出个所以然。还不如针对这个问题收集数据，做做分析。

本文主要收集GDP相关数据。这个指标现在争议很大，不能够反映国民经济的很多方面。但就统计数据的质量来说，GDP比较全面，而且容易获得。这里选取世界银行的统计数据，中国和美国2005年到2014年十年间的GDP数据如下]]></description><category></category></item><item><title><![CDATA[Spark示例之数组排序]]></title><link>https://blog.youkuaiyun.com/AlburtHoffman/article/details/43957795</link><guid>https://blog.youkuaiyun.com/AlburtHoffman/article/details/43957795</guid><author>AlburtHoffman</author><pubDate>Thu, 26 Feb 2015 23:07:00 +0800</pubDate><description><![CDATA[数组排序是一个常见的操作。基于比较的排序算法其性能下限是O(nlog(n))，但在分布式环境下面我们可以并发，从而提高性能。这里展示了Spark中数组排序的实现，并分析了性能，同时尝试找到导致性能提升的原因。]]></description><category></category></item><item><title><![CDATA[Spark本地安装和简单示例]]></title><link>https://blog.youkuaiyun.com/AlburtHoffman/article/details/43165209</link><guid>https://blog.youkuaiyun.com/AlburtHoffman/article/details/43165209</guid><author>AlburtHoffman</author><pubDate>Mon, 26 Jan 2015 22:47:23 +0800</pubDate><description><![CDATA[Spark是基于内存的大数据分析平台，由UC Berkely AMP lab发布的一大神器。相比Hadoop而言，其最大的优势是基于内存，这样可以极大提高其速度和通用性。本文从最简单的安装到第一个应用脚本，引导初学者入门。。。。]]></description><category></category></item><item><title><![CDATA[Java类的初始化]]></title><link>https://blog.youkuaiyun.com/AlburtHoffman/article/details/38738473</link><guid>https://blog.youkuaiyun.com/AlburtHoffman/article/details/38738473</guid><author>AlburtHoffman</author><pubDate>Thu, 21 Aug 2014 22:26:41 +0800</pubDate><description><![CDATA[Java提供了两种不同的初始化类型，分别是类的初始化和对象的初始化。类成员都是静态的，默认会设置一个值。对象的初始化会在构造函数里面进行。但如果想要赋给静态变量非默认值，或者是初始化一类共有的对象属性（不论调用哪个构造函数），那么就需要一些特殊的方法。Java提供了静态初始化块和非静态初始化块来处理这两种情况。]]></description><category></category></item><item><title><![CDATA[本地变量初始化]]></title><link>https://blog.youkuaiyun.com/AlburtHoffman/article/details/31502317</link><guid>https://blog.youkuaiyun.com/AlburtHoffman/article/details/31502317</guid><author>AlburtHoffman</author><pubDate>Mon, 16 Jun 2014 23:05:19 +0800</pubDate><description><![CDATA[函数里面的本地变量不会被初始化。在Java里面，本地变量其实就是本地变量数组的一个槽（slot）。作为一个类型安全的语言，Java强制要求对本地变量进行初始化。从字节码的角度，其必须有astore_?指令来对槽进行赋值。]]></description><category></category></item><item><title><![CDATA[本地new int[]的处理]]></title><link>https://blog.youkuaiyun.com/AlburtHoffman/article/details/25250085</link><guid>https://blog.youkuaiyun.com/AlburtHoffman/article/details/25250085</guid><author>AlburtHoffman</author><pubDate>Wed, 07 May 2014 23:19:07 +0800</pubDate><description><![CDATA[本文主要展示Java代码函数中定义的数组初始化底层是如何处理的。]]></description><category></category></item><item><title><![CDATA[Java的ForEach]]></title><link>https://blog.youkuaiyun.com/AlburtHoffman/article/details/24850247</link><guid>https://blog.youkuaiyun.com/AlburtHoffman/article/details/24850247</guid><author>AlburtHoffman</author><pubDate>Thu, 01 May 2014 21:44:42 +0800</pubDate><description><![CDATA[ForEach是Java5带来的新特性之一。尽管有其局限性，ForEach还是极大方便了程序员编写简介的代码。那么，其底层是如何实现的呢？]]></description><category></category></item><item><title><![CDATA[面试题：统计给定位串中1的个数]]></title><link>https://blog.youkuaiyun.com/AlburtHoffman/article/details/24195665</link><guid>https://blog.youkuaiyun.com/AlburtHoffman/article/details/24195665</guid><author>AlburtHoffman</author><pubDate>Sun, 20 Apr 2014 20:46:47 +0800</pubDate><description><![CDATA[种群计数就是统计一个位串中1的个数。Java的Short,Integer和Long都有bitCount方法，就是种群计数的实现。这类问题不仅很基础，也很重要。如果将其作为面试题，很容易考察算法能力的高低。]]></description><category></category></item><item><title><![CDATA[Rsync的实现算法]]></title><link>https://blog.youkuaiyun.com/AlburtHoffman/article/details/23885209</link><guid>https://blog.youkuaiyun.com/AlburtHoffman/article/details/23885209</guid><author>AlburtHoffman</author><pubDate>Wed, 16 Apr 2014 23:24:26 +0800</pubDate><description><![CDATA[rsync是unix系统下很强大的同步工具，可以将源文件或者目录同步到目标文件或目录。与简单的scp相比，rsync具有传输速度快，高效的特点。借助其核心的差分算法，rsync可以实现最小化传输，即只传输变动的部分。]]></description><category></category></item><item><title><![CDATA[神秘的Java Boolean的哈希值]]></title><link>https://blog.youkuaiyun.com/AlburtHoffman/article/details/21997115</link><guid>https://blog.youkuaiyun.com/AlburtHoffman/article/details/21997115</guid><author>AlburtHoffman</author><pubDate>Mon, 24 Mar 2014 23:06:33 +0800</pubDate><description><![CDATA[很多程序员都没有注意到，Boolean类的哈希值是一对神秘的数字......]]></description><category></category></item><item><title><![CDATA[程序员必备：字符串哈希函数比较]]></title><link>https://blog.youkuaiyun.com/AlburtHoffman/article/details/19641123</link><guid>https://blog.youkuaiyun.com/AlburtHoffman/article/details/19641123</guid><author>AlburtHoffman</author><pubDate>Sun, 23 Feb 2014 22:19:51 +0800</pubDate><description><![CDATA[一个股票交易系统的后台，为了能快速查找各种股票代码的Tick，会计算其哈希值，然后存贮在哈希表里面。一个好的哈希函数应该能实现很好地分布性，减少冲突。这里选取了几种常用的字符串哈希，包括BKDRHash，APHash，JSHash，RSHash，SDBMHash，PJWHash，ELFHash和DJBHash，通过在不同的字符串集合测试，来测试其性能。]]></description><category></category></item><item><title><![CDATA[面试题：支持O(1)时间内完成pop,push和max的栈]]></title><link>https://blog.youkuaiyun.com/AlburtHoffman/article/details/18803357</link><guid>https://blog.youkuaiyun.com/AlburtHoffman/article/details/18803357</guid><author>AlburtHoffman</author><pubDate>Sun, 26 Jan 2014 22:51:00 +0800</pubDate><description><![CDATA[一般的栈，本身的pop和push的操作就是O(1)的，可以考虑使用一个变量来存储最大值。问题在于，如果这个最大值被pop出去，这个变量就需要重新计算。如果通过遍历一遍来求出，则需要O(n)的时间，达不到要求。此外，任何想通过一个排好序的序列来解决最大值的pop问题的方案，都有一个致命缺点，就是每次push的时候，需要进行插入。因此需要更巧妙的方法。。。。]]></description><category></category></item><item><title><![CDATA[ScrollView基础]]></title><link>https://blog.youkuaiyun.com/AlburtHoffman/article/details/8607614</link><guid>https://blog.youkuaiyun.com/AlburtHoffman/article/details/8607614</guid><author>AlburtHoffman</author><pubDate>Sun, 24 Feb 2013 22:12:34 +0800</pubDate><description><![CDATA[ScrollView 基础

ScrollView 可以实现列表数据的滚动展示，类似ListView的效果。ScollView要比ListView原始，因为自己要手动实现数据到视图的转换。ListView则只要实现Adapter就好了。
一个Layout 
下面是一个通用的ScrollView的布局：
    <RelativeLayout
        android:layout_]]></description><category></category></item><item><title><![CDATA[Android下TabActivity的使用（2）]]></title><link>https://blog.youkuaiyun.com/AlburtHoffman/article/details/8453738</link><guid>https://blog.youkuaiyun.com/AlburtHoffman/article/details/8453738</guid><author>AlburtHoffman</author><pubDate>Sun, 30 Dec 2012 22:58:49 +0800</pubDate><description><![CDATA[上一篇写了TabActivity的基本用法，这节来讲诉TabActivity的界面定制。很多项目都需要重新设计标签的位置和样式，比如将标签放到下方，使用图片而不是文字来显示等等。
界面的结构
下面这幅图展示了TabActivity的结构：


其中，TabHost是根元素，其id为@android:id/tabhost，包含了TabWidget和TabContent。TabWidget就]]></description><category></category></item><item><title><![CDATA[Android下TabActivity的使用（1）]]></title><link>https://blog.youkuaiyun.com/AlburtHoffman/article/details/8302588</link><guid>https://blog.youkuaiyun.com/AlburtHoffman/article/details/8302588</guid><author>AlburtHoffman</author><pubDate>Sun, 16 Dec 2012 21:56:29 +0800</pubDate><description><![CDATA[这篇文章总结了TabActivity的三种基本用法，具体的例子都取自ApiDemo。
基本知识
        要实现多标签的Activity，目标Activity（就是你建立的那个）首先要实现TabActivity类。这样，用户就可以通过getTabHost()方法来获得对应的TabHost对象，从而动态地添加标签。下面给出了标签切换时，如何设定显示区内容的三种方法。

从Layout文]]></description><category></category></item><item><title><![CDATA[VIM的标记：mark]]></title><link>https://blog.youkuaiyun.com/AlburtHoffman/article/details/8262530</link><guid>https://blog.youkuaiyun.com/AlburtHoffman/article/details/8262530</guid><author>AlburtHoffman</author><pubDate>Wed, 05 Dec 2012 21:36:58 +0800</pubDate><description><![CDATA[使用vim编辑时，经常需要对好几行的大段代码进行操作，比如：缩进，删除，拷贝等等。比如拷贝，如果使用yy命令，还需要计算行数，十分不便。如果可以对位置进行标记，大段的代码就可以通过前后位置来标记。这样就方便多了。
vim的mark就是最好的解决方案。所谓mark，就是一个位置，包括行号和列号。要对一个位置进行标记，使用m[a-zA-Z]就可以了。这意味你可以标记多达72个位置。不过一般我们用不到]]></description><category></category></item><item><title><![CDATA[Android开发之多线程环境下更新界面]]></title><link>https://blog.youkuaiyun.com/AlburtHoffman/article/details/8117213</link><guid>https://blog.youkuaiyun.com/AlburtHoffman/article/details/8117213</guid><author>AlburtHoffman</author><pubDate>Tue, 13 Nov 2012 22:39:43 +0800</pubDate><description><![CDATA[Android应用程序的界面运行于独立的线程里。但有时候软件需要单独的线程来处理数据，然后再更新界面。这样能够保证界面运行的流畅又不至于影响用户体验。这里的问题在于，UI只能被界面线程更新，在多线程环境下回出错。本文会展示这种典型的错误，以及解决方案。
下面以计时器为例。在这个应用场景中，计时是在另一个线程里面完成的，然后再由UI显示出来。
多线程更新界面的常见问题
下面这段代码使用了一个T]]></description><category></category></item><item><title><![CDATA[水平、垂直对齐]]></title><link>https://blog.youkuaiyun.com/AlburtHoffman/article/details/7104158</link><guid>https://blog.youkuaiyun.com/AlburtHoffman/article/details/7104158</guid><author>AlburtHoffman</author><pubDate>Mon, 26 Dec 2011 21:26:44 +0800</pubDate><description><![CDATA[这篇文章的想法，开始于我做的一个手机端项目。该项目基于phonegap, 使用通用的web开发技术。在登录页面那里，我想让表单显示在页面中间，并意识到这个问题可以有很多解决方案。如能比较这些解决方案，那将是十分有意思的事情。

HTML代码 

为了便于研究，使用如下的html代码：

    
        content here!
    


分类
水平的对齐有三种，分别是]]></description><category></category></item><item><title><![CDATA[topcoder SRM 503报告]]></title><link>https://blog.youkuaiyun.com/AlburtHoffman/article/details/6329688</link><guid>https://blog.youkuaiyun.com/AlburtHoffman/article/details/6329688</guid><author>AlburtHoffman</author><pubDate>Sun, 17 Apr 2011 20:05:00 +0800</pubDate><description><![CDATA[第一题：涂面包
描述：
    你要在面包片上涂layer_count层，做成山莓酱面包。考虑到每次涂酱，你只能最多涂upper_limit层，要求算出最少的涂酱次数。

 分析：
    要求最少的涂酱次数，只要每次涂尽可能多的山莓酱就好了。这是很典型的贪心思路。

 代码：
int ToastXRaspberry::apply(int upper_limit, int layer_count) {
    if(layer_count % upper_limit == 0){
   ]]></description><category></category></item></channel></rss>