<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Super爬爬虫]]></title><description><![CDATA[博观而约取，厚积而薄发]]></description><link>https://blog.youkuaiyun.com/wangbole</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wangbole]]></copyright><item><title><![CDATA[Low Memory Killer]]></title><link>https://blog.youkuaiyun.com/wangbole/article/details/47791531</link><guid>https://blog.youkuaiyun.com/wangbole/article/details/47791531</guid><author>wangbole</author><pubDate>Wed, 19 Aug 2015 23:43:43 +0800</pubDate><description><![CDATA[oom_score_adj 计算方法：
oom_score_adj = oom_adj*OOM_SCORE_ADJ_MAX/(-OOM_DISABLE)
OOM_SCORE_ADJ_MAX = 1000;
OOM_DISABLE= -17
其中，oom_adj 取值范围为[-17, 15], -17 表示关闭LMK,也就是永不被关闭。
Android中：
前台交互进程为：0  oom_]]></description><category></category></item><item><title><![CDATA[volatile]]></title><link>https://blog.youkuaiyun.com/wangbole/article/details/46352359</link><guid>https://blog.youkuaiyun.com/wangbole/article/details/46352359</guid><author>wangbole</author><pubDate>Wed, 03 Jun 2015 22:29:33 +0800</pubDate><description><![CDATA[JMM(Java Memory Model) 主要是为了规定了线程和内存之间的一些关系。系统存在一个主内存（Main Memory），Java中所有变量都存储在主存中，对于所有线程都是共享的。每条线程都有自己的工作内容(Working Memory)， 工作内存中保存的是主存中某些变量的拷贝，线程对所有变量的操作都是在工作内存中进行，线程之间无法相互直接访问，变量传递均需要通过主内存完成。

]]></description><category></category></item><item><title><![CDATA[Java 设计模式之责任链模式]]></title><link>https://blog.youkuaiyun.com/wangbole/article/details/45888855</link><guid>https://blog.youkuaiyun.com/wangbole/article/details/45888855</guid><author>wangbole</author><pubDate>Thu, 21 May 2015 10:58:33 +0800</pubDate><description><![CDATA[责任链模式(Chain of Responsibliity) 缩写COR

该模式属于对象的行为模式。多个对象连成一条链，请求沿着这条链进行传递，直到有一个对象处理它为止，这样使得多个对象都有机会处理请求，从而避免了请求的发送者和接收者之间的耦合关系。



责任链模式涉及到的角色如下所示：

　　1）抽象处理者(Handler)角色：定义处理请求的接口。如果需要可以定义出一个方法]]></description><category></category></item><item><title><![CDATA[Java 理论与实践: 正确使用 Volatile 变量]]></title><link>https://blog.youkuaiyun.com/wangbole/article/details/45818367</link><guid>https://blog.youkuaiyun.com/wangbole/article/details/45818367</guid><author>wangbole</author><pubDate>Mon, 18 May 2015 11:43:14 +0800</pubDate><description><![CDATA[转：http://www.ibm.com/developerworks/cn/java/j-jtp06197.html

Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”；与 synchronized 块相比，volatile
 变量所需的编码较少，并且运行时开销也较少，但是它所能实现的功能也仅是 synchronized 的一部分。本文介]]></description><category></category></item><item><title><![CDATA[Linux IPC通信机制]]></title><link>https://blog.youkuaiyun.com/wangbole/article/details/45720605</link><guid>https://blog.youkuaiyun.com/wangbole/article/details/45720605</guid><author>wangbole</author><pubDate>Thu, 14 May 2015 14:35:32 +0800</pubDate><description><![CDATA[Linux IPC通信机制主要有3种。


1.管道(pipe)
由于基于fork机制，管道只能用于具有亲缘关系的进程间通信，如父子进程和兄弟进程之间的通信。管道是由内核管理的一个缓冲区。管道的一端连接一个进程的输出,这个进程会向管道中写入信息；管道的另一端连接一个进程的输入，这个进程读出被放入管道的信息。一个缓冲区不需要很大，它被设计成为环形的数据结构，以便管道可以被循环利用。当管道中没]]></description><category></category></item><item><title><![CDATA[requestFocus() 与 requestFocusFromTouch() 方法的区别]]></title><link>https://blog.youkuaiyun.com/wangbole/article/details/45488787</link><guid>https://blog.youkuaiyun.com/wangbole/article/details/45488787</guid><author>wangbole</author><pubDate>Mon, 04 May 2015 23:26:26 +0800</pubDate><description><![CDATA[两个方法都是获取焦点：


requestFocus() 源码如下：
/**
     * Call this to try to give focus to a specific view or to one of its descendants
     * and give it hints about the direction and a specific rectangle t]]></description><category></category></item><item><title><![CDATA[Android 组件间的解耦]]></title><link>https://blog.youkuaiyun.com/wangbole/article/details/44194585</link><guid>https://blog.youkuaiyun.com/wangbole/article/details/44194585</guid><author>wangbole</author><pubDate>Wed, 11 Mar 2015 09:42:23 +0800</pubDate><description><![CDATA[EventBus、Otto， Android 自身提供的BroadcastReceiver/Intent System 和利用Handler实现的类似广播功能
用来简化应用组件间的通信。
对比主要如下：
1) Otto
主要使用Bus类和两个注解@Produce, @Subscribe注解。
@Subscribe 注解告诉Bus该函数订阅了一个事件，该事件的类型为该函数的参数类型；
@]]></description><category></category></item><item><title><![CDATA[Andrioid SQLite 操作与SQLiteStatement关系]]></title><link>https://blog.youkuaiyun.com/wangbole/article/details/43196067</link><guid>https://blog.youkuaiyun.com/wangbole/article/details/43196067</guid><author>wangbole</author><pubDate>Tue, 27 Jan 2015 16:11:45 +0800</pubDate><description><![CDATA[以插入数据为例，有三种方法：
1）直接拼接SQL语句，执行execSQL方法；
2）借用ContentValues进行插入；
3）使用compileStatement进行插入；

1）直接拼接SQL语句，执行execSQL方法

String sql = "create table msgTable(uid INTEGER NOT NULL,  msg TEXT NOT NULL)"]]></description><category></category></item><item><title><![CDATA[Android Parcelable 嵌套readParcelable]]></title><link>https://blog.youkuaiyun.com/wangbole/article/details/42494179</link><guid>https://blog.youkuaiyun.com/wangbole/article/details/42494179</guid><author>wangbole</author><pubDate>Wed, 07 Jan 2015 15:52:13 +0800</pubDate><description><![CDATA[对于Android的自定义对象进行序列化，一般会选择Parcelable，或者Serializable。
在Android中，由于在使用内存时，Parcelable类要比Serializable类的性能要高；
并且Serializable在序列化的时候会产生大量的临时变量，从而会引起频繁的GC，因此在Android开发中，会推荐使用Parcelable进行序列化。


在序列化时，碰到P]]></description><category></category></item><item><title><![CDATA[如何定位Android NDK开发中遇到的错误]]></title><link>https://blog.youkuaiyun.com/wangbole/article/details/42290787</link><guid>https://blog.youkuaiyun.com/wangbole/article/details/42290787</guid><author>wangbole</author><pubDate>Wed, 31 Dec 2014 09:40:14 +0800</pubDate><description><![CDATA[原地址：http://www.youkuaiyun.com/article/2014-12-30/2823366-Locate-Android-NDK



Android NDK是什么？

Android NDK 是在SDK前面又加上了“原生”二字，即Native Development Kit，因此又被Google称为“NDK”。众所周知，Android程序运行在Dalvik虚拟机中，NDK允]]></description><category></category></item><item><title><![CDATA[JAVA虚拟机规范 java SE 7 读书笔记]]></title><link>https://blog.youkuaiyun.com/wangbole/article/details/42212479</link><guid>https://blog.youkuaiyun.com/wangbole/article/details/42212479</guid><author>wangbole</author><pubDate>Sun, 28 Dec 2014 11:17:03 +0800</pubDate><description><![CDATA[方法调用的四条指令：
1)invokevirtual
2)invokeinterface
3)invokespecial (指令用于调用一些需要特俗处理的实例方法，包括实例初始化方法、私有方法和父类方法)；
4)invokestatic


Java虚拟机可以支持方法级的同步和方法内部一段指令序列的同步，这两种同步结构都是使用管程(Monitor)来支持的。
1）方法级的同步时隐式]]></description><category></category></item><item><title><![CDATA[OpenCV 之Hello world篇]]></title><link>https://blog.youkuaiyun.com/wangbole/article/details/38359335</link><guid>https://blog.youkuaiyun.com/wangbole/article/details/38359335</guid><author>wangbole</author><pubDate>Sun, 03 Aug 2014 17:27:02 +0800</pubDate><description><![CDATA[Step1: 准备环境
OpenCV 在github上下载最新源码：https://github.com/Itseez/opencv
CMake 下载最新3.0 http://www.cmake.org/cmake/resources/software.html
VS2013
安装git
TBB 下载https://www.threadingbuildingblocks.org/ 线程构]]></description><category></category></item><item><title><![CDATA[Android 画图抗锯齿]]></title><link>https://blog.youkuaiyun.com/wangbole/article/details/37811017</link><guid>https://blog.youkuaiyun.com/wangbole/article/details/37811017</guid><author>wangbole</author><pubDate>Tue, 15 Jul 2014 10:46:37 +0800</pubDate><description><![CDATA[Android 中提供了两种方法：
第一种：使用Paint进行设置，然后传递给Canvas进行绘制。
paint.setAntiAlias(true)


第二种：直接设置Canvas的DrawFilter属性。]]></description><category></category></item><item><title><![CDATA[C语言宏定义##连接符和#符的使用]]></title><link>https://blog.youkuaiyun.com/wangbole/article/details/24236185</link><guid>https://blog.youkuaiyun.com/wangbole/article/details/24236185</guid><author>wangbole</author><pubDate>Mon, 21 Apr 2014 10:43:20 +0800</pubDate><description><![CDATA[C语言中如何使用宏C（和C++）中的宏（Macro）属于编译器预处理的范畴，属于编译期概念（而非运行期概念）。下面对常遇到的宏的使用问题做了简单总结。

关于#和##

在C语言的宏中，#的功能是将其后面的宏参数进行字符串化操作（Stringfication），简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。比如下面代码中的宏：
#define WARN_IF(EXP)]]></description><category></category></item><item><title><![CDATA[nodejs/express+mongodb/mongoose]]></title><link>https://blog.youkuaiyun.com/wangbole/article/details/23271089</link><guid>https://blog.youkuaiyun.com/wangbole/article/details/23271089</guid><author>wangbole</author><pubDate>Wed, 09 Apr 2014 15:12:01 +0800</pubDate><description><![CDATA[Step 1 install nodejs
1.1 install nvm
使用 nvm(Node Version Manage) 来安裝 node.js,
sudo apt-get install git-core g++ curl


git clone git://github.com/creationix/nvm.git ~/.nvm
echo ". ~/.nvm/nvm.s]]></description><category></category></item><item><title><![CDATA[Android 中的CreatePackageContext()]]></title><link>https://blog.youkuaiyun.com/wangbole/article/details/22876179</link><guid>https://blog.youkuaiyun.com/wangbole/article/details/22876179</guid><author>wangbole</author><pubDate>Thu, 03 Apr 2014 15:52:44 +0800</pubDate><description><![CDATA[/**
     * Return a new Context object for the given application name.  This
     * Context is the same as what the named application gets when it is
     * launched, containing the same resources and]]></description><category></category></item><item><title><![CDATA[#ifdef __cplusplus extern "C" { #endif 含义]]></title><link>https://blog.youkuaiyun.com/wangbole/article/details/22802171</link><guid>https://blog.youkuaiyun.com/wangbole/article/details/22802171</guid><author>wangbole</author><pubDate>Wed, 02 Apr 2014 15:29:50 +0800</pubDate><description><![CDATA[如下，经常会在C语言的*.h文件中看到：

#ifdef __cplusplus
extern "C" {
#endif


    ...
    
#ifdef __cplusplus
}
#endif
这个作用经常看到，也经常忘记，今天做个记录吧。
__cplusplus 是C++ 编译器内定的，在一个*.cpp文件中，直接就可以访问该宏，而*.c文件是不可见。
extern "C]]></description><category></category></item><item><title><![CDATA[有关Object之wait(),notify() 和notifyAll() 以及Thread之sleep(),join()和yield()]]></title><link>https://blog.youkuaiyun.com/wangbole/article/details/22185327</link><guid>https://blog.youkuaiyun.com/wangbole/article/details/22185327</guid><author>wangbole</author><pubDate>Wed, 26 Mar 2014 16:01:13 +0800</pubDate><description><![CDATA[1. Object的wait(),notify()和notifyAll()
主要用于在多线程情况下，同步控制访问共享资源使用。
调用wait() 函数后，导致当前线程处于等待状态，只有通过notify()或者notifyAll()方法，或者在调用wait()函数时，设置超时时间timeout,等待超时时间到了，才能使阻塞在该对象上的线程唤醒，进行运行。

也就是说wait()或notify]]></description><category></category></item><item><title><![CDATA[Nexus S Flash Custom Rom]]></title><link>https://blog.youkuaiyun.com/wangbole/article/details/21707471</link><guid>https://blog.youkuaiyun.com/wangbole/article/details/21707471</guid><author>wangbole</author><pubDate>Fri, 21 Mar 2014 12:02:53 +0800</pubDate><description><![CDATA[之前一直没有时间折腾这个，最近由于要调试smali，需要源码调试，所以就。。。。
操作步骤如下：
Step1: repo 下载源码（http://source.android.com/source/downloading.html）

Step2: 下载相应的驱动（https://developers.google.com/android/nexus/drivers）
如我的需要下载6个]]></description><category></category></item><item><title><![CDATA[Ubuntu Vim 十六进制模式修改dex文件]]></title><link>https://blog.youkuaiyun.com/wangbole/article/details/21181371</link><guid>https://blog.youkuaiyun.com/wangbole/article/details/21181371</guid><author>wangbole</author><pubDate>Thu, 13 Mar 2014 17:50:40 +0800</pubDate><description><![CDATA[有时要破解*.apk时，除了使用apktool反编译成smali语言，然后用smali语言来hack相应的破解点，还有一种比较NB的方法就是直接解压出*.apk的
class.dex文件，然后用十六进制编辑工具，修改相应的破解点，即可完成相应的破解。

本文主要介绍vim如何切换至16进制。
Step1： vim -b *.apk 
以二进制模式打开*.apk文件。

Step2：输]]></description><category></category></item></channel></rss>