<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[老睿的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/weeweee</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; weeweee]]></copyright><item><title><![CDATA[Hibernate与MyBatis比较]]></title><link>https://blog.youkuaiyun.com/weeweee/article/details/10406815</link><guid>https://blog.youkuaiyun.com/weeweee/article/details/10406815</guid><author>weeweee</author><pubDate>Tue, 27 Aug 2013 17:17:07 +0800</pubDate><description><![CDATA[最近做了一个Hibernate与MyBatis的对比总结，希望大家指出不对之处。

第一章     Hibernate与MyBatis

Hibernate 是当前最流行的O/R mapping框架，它出身于sf.net，现在已经成为Jboss的一部分。 Mybatis 是另外一种优秀的O/R
 mapping框架。目前属于apache的一个子项目。

MyBatis 参考资料官网：]]></description><category></category></item><item><title><![CDATA[TDD简介]]></title><link>https://blog.youkuaiyun.com/weeweee/article/details/9750525</link><guid>https://blog.youkuaiyun.com/weeweee/article/details/9750525</guid><author>weeweee</author><pubDate>Sun, 04 Aug 2013 21:58:11 +0800</pubDate><description><![CDATA[2001年2月《敏捷宣言》签定，宣告了敏捷开发运动的开始。敏捷的开发方式引起越来越多开发者的关注，世界上出现了各种各样的敏捷软件开发方法， SCRUM，Crystal，特征驱动开发（Feature Driven Development，FDD），自适应软件开发（Adaptive
 Software Development，ADP）以及极限编程（eXtreme Programming，XP） 等等]]></description><category></category></item><item><title><![CDATA[IOS导航控制器]]></title><link>https://blog.youkuaiyun.com/weeweee/article/details/9568083</link><guid>https://blog.youkuaiyun.com/weeweee/article/details/9568083</guid><author>weeweee</author><pubDate>Sun, 28 Jul 2013 17:34:31 +0800</pubDate><description><![CDATA[UINavigationController通常用于根据先后次序呈现具有包含或父子关系的多个视图。UITabBarController主要用于组织和管理具有并列关系的多个视图。
当我们的应用程序需要呈现具有前后关系的多屏信息的时候，就可以考虑用UINavigationController来维护和管理这样的“堆式”信息。这里的“堆”指的是一个视图控制器数组，而在导航控制器中显示的每一屏信息都是数组]]></description><category></category></item><item><title><![CDATA[IOS表格]]></title><link>https://blog.youkuaiyun.com/weeweee/article/details/9457561</link><guid>https://blog.youkuaiyun.com/weeweee/article/details/9457561</guid><author>weeweee</author><pubDate>Wed, 24 Jul 2013 23:38:49 +0800</pubDate><description><![CDATA[IOS中的表格视图由UITableView类型的对象负责。UITableView会显示一个具有多行但仅有一列的数据内容。如果控制器的主视图是UITableView，我们就把这样的控制器叫做表格视图控制器。在Cocoa Touch中对应的类为UITableViewController。
表格视图的组成部分
表格视图会显式一个列表，列表的每一个元素就是单元格，我们可以通过垂直滚动手势浏览这些单元格]]></description><category></category></item><item><title><![CDATA[通过Return键控制虚拟键盘消失]]></title><link>https://blog.youkuaiyun.com/weeweee/article/details/9402421</link><guid>https://blog.youkuaiyun.com/weeweee/article/details/9402421</guid><author>weeweee</author><pubDate>Sun, 21 Jul 2013 23:37:27 +0800</pubDate><description><![CDATA[不管是UITextField控件还是UITextView对象，如果它们处于编辑状态且被用户点击，在屏幕上会出现一个虚拟键盘，这个虚拟键盘于First Responder有直接的关系。
当一个UITextField处于第一响应状态（用户在控件中编辑文字）的时候，就会出现一个虚拟键盘。
当UITextField不处于第一响应状态也不在编辑状态，并且视图中的其他UITextField或UITextV]]></description><category></category></item><item><title><![CDATA[final详解]]></title><link>https://blog.youkuaiyun.com/weeweee/article/details/9009035</link><guid>https://blog.youkuaiyun.com/weeweee/article/details/9009035</guid><author>weeweee</author><pubDate>Sun, 02 Jun 2013 22:06:54 +0800</pubDate><description><![CDATA[在java中，final关键字可以有如下的用处： 

final关键字可以被加到类的声明中，final类是不允许继承的；final关键字可以被加到方法声明中，final方法是不允许重写的(override)，这个效果同私有方法一样；final关键字可以被家到属性或者变量的声明中，final属性或者变量一旦赋值之后就不允许再发生变化。对于基本类型(primitive type)，比如int、do]]></description><category></category></item><item><title><![CDATA[在多线程下的long和double]]></title><link>https://blog.youkuaiyun.com/weeweee/article/details/8987134</link><guid>https://blog.youkuaiyun.com/weeweee/article/details/8987134</guid><author>weeweee</author><pubDate>Tue, 28 May 2013 23:14:29 +0800</pubDate><description><![CDATA[在看一些代码的时候，会发现在定义long型和double型的变量时，会在前面加上volatile关键字，当然也会看到在其它原子类型的变量前加上这个关键字，但这里要说的还是有区别的。

 

在java中，java的内存模型要求，变量的读取操作和写入操作都必须是原子操作的，但是对于非volatile类型的long和double有些不同，因为这两个变量是64位存储，JVM允许将64位的读操作或]]></description><category></category></item><item><title><![CDATA[应该使用32位还是64位JVM]]></title><link>https://blog.youkuaiyun.com/weeweee/article/details/8987118</link><guid>https://blog.youkuaiyun.com/weeweee/article/details/8987118</guid><author>weeweee</author><pubDate>Tue, 28 May 2013 23:11:32 +0800</pubDate><description><![CDATA[应用使用32位的JVM，还是应该使用64位的JVM，我自己以前还真没想过，大家都想过了吗？本文是Plumbr中的一篇博文，为大家提了个醒。(2012.11.27最后更新)

    在我的企业级软件开发职业生涯中，我多次面对这个问题。每隔一段时间我不得不建议配置一个新的特定环境。而往往该问题部分与"我应该使用32位还是64位JVM？"这一问题有关。老实说，一开始我是靠掷硬币来解决的，而不是给出]]></description><category></category></item><item><title><![CDATA[Ruby类名]]></title><link>https://blog.youkuaiyun.com/weeweee/article/details/8978008</link><guid>https://blog.youkuaiyun.com/weeweee/article/details/8978008</guid><author>weeweee</author><pubDate>Sun, 26 May 2013 23:33:01 +0800</pubDate><description><![CDATA[一、类名为什么是常量？

#当前类是Object
self.class
#=>Object
#添加一个类C
class C ; end
Object.constants.grep  /^C$/ 
#=>[:C]      
#这时在当前类Object中添加了常量 :C
#:所以类名是常量。




二、这里的类名常量C，为什么是所有作用域可见？

类名常量C添加在Object类中]]></description><category></category></item><item><title><![CDATA[require 和 load]]></title><link>https://blog.youkuaiyun.com/weeweee/article/details/8978002</link><guid>https://blog.youkuaiyun.com/weeweee/article/details/8978002</guid><author>weeweee</author><pubDate>Sun, 26 May 2013 23:31:20 +0800</pubDate><description><![CDATA[Ruby 基础篇 之 如何山寨 require 和 load

前几天被一个初学 Ruby 的同学问及 require 和 load 有什么区别。后来想想这个问题虽然答案并不难，但是还可以引申出不少可以探讨的内容。所以我打算通过山寨一个 require 和 load 的方法的形式，来阐述一些内容。

在开始之前我们首先假设我们有一个 person.rb 文件，内容如下:

# -*-]]></description><category></category></item><item><title><![CDATA[Ruby方法]]></title><link>https://blog.youkuaiyun.com/weeweee/article/details/8977998</link><guid>https://blog.youkuaiyun.com/weeweee/article/details/8977998</guid><author>weeweee</author><pubDate>Sun, 26 May 2013 23:27:41 +0800</pubDate><description><![CDATA[方法定义于对象，用来进行与该对象的相关操作。Ruby中所有的操作都以方法的形式来实现
一般情况下，我们通过（对象.方法名）的方式来调用方法。其中对象被称为是接收者。
根据接收者的不同，我们将方法区分为3种：

实例方法
当对象（实例）存在的时候，把该对象作为接收者的方法叫做实例方法。

类方法
当接收者不是实例而是类的时候，这个方法称为类方法。调用的时候不光可以用’.’还可以使用’]]></description><category></category></item><item><title><![CDATA[软件的坏味道]]></title><link>https://blog.youkuaiyun.com/weeweee/article/details/8970086</link><guid>https://blog.youkuaiyun.com/weeweee/article/details/8970086</guid><author>weeweee</author><pubDate>Fri, 24 May 2013 15:00:00 +0800</pubDate><description><![CDATA[1） Duplicated Code(重复代码) 
2） Long Method（过长函数） 
3） Large Class（过大类） 
4） Long Parameter List（过长参数列） 
5） Divergent Change（发散式变化）——过耦合 
6） Shotgun Surgery(散弹式修改)——过度的分散与过耦合相反 
7） Feature Envy（依恋情节）]]></description><category></category></item><item><title><![CDATA[Ruby变量和常量]]></title><link>https://blog.youkuaiyun.com/weeweee/article/details/8885480</link><guid>https://blog.youkuaiyun.com/weeweee/article/details/8885480</guid><author>weeweee</author><pubDate>Sat, 04 May 2013 23:22:57 +0800</pubDate><description><![CDATA[变量是程序设计不可缺少的东西。所谓变量，可以想象是贴在“东西”上的铭牌。给对象贴上铭牌，可以写成：
变量名 = 对象
这个动作被称为“将对象赋值给变量”。如：
	num = 10
	age = 18
	name = 'TAKAHASHI'


和JAVA的变量一样，Ruby的变量标识的也是对象的引用。当然基本类型指向的还是实际对象，赋值后会新建对象。这点和JAVA也是一样的。
变量的]]></description><category></category></item><item><title><![CDATA[类初始化时机]]></title><link>https://blog.youkuaiyun.com/weeweee/article/details/8873114</link><guid>https://blog.youkuaiyun.com/weeweee/article/details/8873114</guid><author>weeweee</author><pubDate>Wed, 01 May 2013 21:44:35 +0800</pubDate><description><![CDATA[对于类加载过程中初始化阶段，虚拟机严格规定了有且只有四种情况必须立即对类进行“初始化”：

遇到new、getstatic、putstatic和invokestatic这4条指令码时，如果类没有初始化，则需要先进行初始化。这4条指令对应的java场景是：

使用new关键字实例化对象读取或设置一个静态字段，不包括被final修饰的、已在编译器把结果放入常量池的静态字段调用一个静态方法
使]]></description><category></category></item><item><title><![CDATA[线程安全和锁优化]]></title><link>https://blog.youkuaiyun.com/weeweee/article/details/8865592</link><guid>https://blog.youkuaiyun.com/weeweee/article/details/8865592</guid><author>weeweee</author><pubDate>Sun, 28 Apr 2013 22:32:20 +0800</pubDate><description><![CDATA[线程安全
当多个线程访问一个对象时，如果不用考虑这些线程在运行时环境下的调度和交替执行，也不需要额外的同步，或者在调用方进行任何其他的协调操作，调用这个对象的行为都可以获得正确的结果，那这个对象就是线程安全的。
JAVA线程安全

不可变
通过java的final关键字来事项。对于基本数据类型，直接用final修饰即可保证不可变性；但是对于对象，需要保证对象的行为不会对其状态产生任何影响]]></description><category></category></item><item><title><![CDATA[java内存模型简述]]></title><link>https://blog.youkuaiyun.com/weeweee/article/details/8861160</link><guid>https://blog.youkuaiyun.com/weeweee/article/details/8861160</guid><author>weeweee</author><pubDate>Sat, 27 Apr 2013 22:17:09 +0800</pubDate><description><![CDATA[JAVA内存模型
我们知道计算机在实现多线程操作时，不仅仅需要CPU处理器并发操作，更重要的是并发时，CPU寄存器、高速Cache同主内存间的数据交互。只有保证了这些才能保证安全的线程操作。C语言需要直接操作硬件来完成这些，所以它一旦更换机子就不行了。那么JAVA是如何保证的呢？
JAVA虚拟机通过内存模型（JMM）屏蔽掉各种硬件和操作系统的内存访问差异，以实现让JAVA程序在各种平台下都能达]]></description><category></category></item><item><title><![CDATA[垃圾回收]]></title><link>https://blog.youkuaiyun.com/weeweee/article/details/8846855</link><guid>https://blog.youkuaiyun.com/weeweee/article/details/8846855</guid><author>weeweee</author><pubDate>Wed, 24 Apr 2013 21:26:16 +0800</pubDate><description><![CDATA[垃圾收集（Garbage Collection,GC）主要关注堆和方法区，回收满足回收条件的空间。
对象回收
对于堆上的对象实例，垃圾收集器在进行回收操作前，首先要判别实例对象是否被引用，准确的是判别对象是否“死亡”，因为有引用不代表不需要回收。判别对象时候被引用有2个算法：

引用计数法
给对象添加一个引用计数器，每当有一个地方引用它时，计数值就加1；当引用失效时就减1。任何时候如果计]]></description><category></category></item><item><title><![CDATA[运行时数据区域]]></title><link>https://blog.youkuaiyun.com/weeweee/article/details/8837289</link><guid>https://blog.youkuaiyun.com/weeweee/article/details/8837289</guid><author>weeweee</author><pubDate>Mon, 22 Apr 2013 23:04:53 +0800</pubDate><description><![CDATA[java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途及创建和销毁时间，有的随着虚拟机进程的启动而存在，有些区域则是依赖用户线程的启动和结束而建立和销毁。

这里有个图
其中方法区和堆，是所有线程共享的。虚拟机栈、本地方法栈和程序计数器由线程独享的。




程序计数器
程序计数器是一块较小的内存空间，它的作用可以看作是当前线]]></description><category></category></item><item><title><![CDATA[SQL优化]]></title><link>https://blog.youkuaiyun.com/weeweee/article/details/8803633</link><guid>https://blog.youkuaiyun.com/weeweee/article/details/8803633</guid><author>weeweee</author><pubDate>Mon, 15 Apr 2013 13:59:20 +0800</pubDate><description><![CDATA[一、问题的提出

　在应用系统开发初期，由于开发数据库数据比较少，对于查询SQL语句，复杂视图的的编写等体会不出SQL语句各种写法的性能优劣，但是如果将应用系统提交实际应用后，随着数据库中数据的增加，系统的响应速度就成为目前系统需要解决的最主要的问题之一。系统优化中一个很重要的方面就是SQL语句的优化。对于海量数据，劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍，可见对于一个系统不]]></description><category></category></item><item><title><![CDATA[50个常见的Unix/Linux指令]]></title><link>https://blog.youkuaiyun.com/weeweee/article/details/8801760</link><guid>https://blog.youkuaiyun.com/weeweee/article/details/8801760</guid><author>weeweee</author><pubDate>Sun, 14 Apr 2013 23:11:31 +0800</pubDate><description><![CDATA[1. tar command examples

Create a new tar archive.
$ tar cvf archive_name.tar dirname/

Extract from an existing tar archive.
$ tar xvf archive_name.tar

View an existing tar archive.
$ tar t]]></description><category></category></item></channel></rss>