第一次参加线下活动__团购,随便唠叨几句


        先要感叹一下,首都就是好啊,做IT就是要在北京发展啊,这种机会真多啊,还免费的啊…

        以下是正题。

       这次的活动主题是叩问团购价值,地点在世贸天阶的时尚大厦,离我住的地方真叫一个远啊。地铁坐了40分钟,再徒步20分钟,到了那边我腿都软了。然后由于我到的晚,现场的座位都没了,好吧,哥就站吧。不过站在后面有一个非常大的好处就是,我可以看到所有的人在做什么~~活动还没开始的时候,就看到大家在不停地交换名片。低调的我木有名片,低调地站在一旁,嗯,我低调地观察。活动开始,我就看到很多人手里拿了一叠花花绿绿的名片了,这个网那个网的。

       老实说,今天活动我倒没觉得有多精彩,可能这种线下交流的目的主要是让大家认识吧。几个嘉宾里面,就觉得F团创始人林宁的讲话还挺不错的。嗯,写一点我对他的讲话的记录,也引出自己的问题。以下是林宁讲话的节选(很节选,我用手机记的),括号里的字是我的想法。

   

       团购吸引人的重要因素就是价格,而以后团购网要做的是质量,是服务。

      ( 说到团购商家的质量,作为消费者,我无法判断商家的服务水平,我更关注于这次的团购是哪个网站发出的。如果是美团和糯米,我会非常相信他们所选择的商家。这种消费者对于团购网的信赖是怎么产生的,特别是小网站怎么让消费者产生信赖的?就我个人而言,我接触的第一个团购网站是美团,然后因为王兴,所以信赖美团的质量。而关于糯米是因为某次看到一条新闻,里面提到了美团和糯米,好吧,还是因为美团的原因。小的团购网站怎么获得这种消费者的信赖?我曾经在另外的团购网上买过东西,价钱没的说,但是寄过来的东西有一股味道,对这家网站也就放弃了。因为一次的团购产品不好而对这家网站失去兴趣,同时也让我也对那些小的团购网站产生怀疑。至少,在下次再团购时,如果是小的团购网站,我会多斟酌一下。

MORE…



Win7下VMware Ubuntu Host-only配置上网


今天只写步骤,技术说明我现在也不清楚,嗯,下一篇博就分析VMware下的几种网络连接方式。

1. 编辑Ubuntu下的DHCP配置,删除DHCP下全部内容并保存

sudo gedit /etc/dhcpd.conf

2. 主机中,网络与共享中心可以看到

本地连接是我主机的网络连接,本地连接2和本地连接3对应的是虚拟机,我的电脑中本地连接2对应的是VMnet1,查看VMnet1的IP(192.138.137.1)。在本地连接的属性中设置共享到VWnet。 MORE…



这一段时间在看的书、电影和电视剧


白夜行
他(亮司)不总是在人们看不见的地方守护雪穗吗?” 其实,亮司也是希望能在白天行走。白夜行白夜行,不禁为亮司叹息。
大明宫词
古灵精怪的太平,吓走了突厥王子,期待中的美爱情,最终却以悲剧收场。以杀戮开始的婚姻,从一开始就预示着不安。
姐姐的守护者
如果改变不了,就接受。只是若干年后还是会觉得悲哀,生活中竟有那么多的时刻没有一起分享。
人在囧途
看到同学的一篇校内日志,恩,喜欢李成功的老婆。温婉浓厚,淡然若定,她知道李成功要的是什么,她也知道李成功需要的是什么,所以她甘愿在背后等他,在他一转身就能看到的地方。
美丽最后在李成功箭头轻轻的那句“回家就好”,竟然让我泪流满面。



Java中容器总结


      这段时间看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个方法。  MORE…



[Coding回忆文]08暑假,我的编程开始


         昨晚和网络部的同学吃饭,老部长的欢送会,席间也喝了一些小酒。很久没喝酒了,还是一如往常的喝一杯就上脸,然后手上还起了一些小红点。酒精过敏了,看来以后还是得少喝啊。

        一起吃饭的是网络部第一届和第二届的一些成员,还有班主任也在。吃饭中,洋姜突然提到大一的那个暑假我们南一楼的那个时候,现在想想也觉得挺感慨的,写篇文来纪念下。

         貌似是08年4月份的某个日子吧,在宿舍楼下的黑板上看到系网络部招新的通知,抱着学点技术以后好找工作的想法,又得知部门的指导老师是班主任,我就报名了。后来事实证明,技术的吸引力是巨大的,班主任的吸引力也是巨大的,我们班有差不多10个人报名了。

         第一次的培训是在五一放假的某一天,同宿舍还有两个报名的MM都回家了。我就一个人坐车到了培训地点东五楼,校车师傅并没有把我载到东五,在几个路口前就让我下了,那天还是下着雨,可怜的我走到东五时鞋子全湿了。第一次培训的内容是互联网基础知识扫盲+HTML简介,记得班主任的PPT还是英文的,很是崇拜…课上班主任还演示了HTML的一些基本使用,感到很神奇…

         再之后还有什么活动也记不清了,然后就是暑假的集训了。暑假集训的主要目的是为了重做系网站,系网站是几年前的几位学长做的,班主任对那么那个网站很不满意,说代码写得很不好看,也很不好维护。肩负着这样一个光荣的重做EI系网站的任务,我们这一群人,就浩浩荡荡的留在了学校里。同宿舍的两人一个回家一个社会实践,又是只有我一个人留下了。

         于是乎,每天早上8点半左右,我就骑着我的小自行车,大义凛然地顶着毒辣辣的太阳奔向南一楼(我们网络部成员学习的地方)。那个时候还比较“嫩”,不知道打遮阳伞,也不知道擦防晒霜,估计晒黑了不少。网络部在南一楼的学习地点其实也就是一个十二平米左右的小房间,是我们系一位辅导员的办公室。就那么一个十二平米的小房间,我们大概塞了10个人在里面。每个人的活动区域都很小,也就能前后转个身而已。 MORE…



团队乒乓球赛


        第二届UniqueStudio Cup乒乓球争霸赛~~今天完美举行,恩,我也去挥了两拍子的。

        从2点多打到5点半,很尽兴。最后的三强是软设的ZhLRen、算法的XHYe和软设的MSFu(排名分先后)。

        最开始的个人赛,XWTian同学根据每个人的水平差异,分成了5组,每组2个人,一个桌,我在第五桌…不过事实证明这种安排是合理,因为我一直就在第四和第五桌之间徘徊…

        团队赛比较混乱,双打,一共6个组,每组2人,这个组和其他5个组都要打…我跟ZhLRen分在一组,哎,拖累了任同学啊…5场比赛我们只赢了2场,不过这每场也太快了点,就5个球,哗啦啦就打完了…姐姐不会反手啊,旋转的球还老会打出去…不过还是很好玩的:-D

        三强争霸赛打的很精彩啊,看他们高手过招就是过瘾啊,一球一世界,一拍一菩提。那姿势,一个专业啊…我只能是感叹。

       开始看他们打球,非常不明白为什么发球和接球都要跺脚。后来经旁人扫盲才知道,原来是发球和回球的时候,是可以根据声音听出球是怎么旋的,所以通过跺脚把这个声音给掩盖掉…真高深啊,通过听声音就能知道球是怎么旋的。回来上网查了查,跺脚主要有三个用途:

     1、接发球方在接发球时注意力都比较集中,跺脚的声音可以扰乱注意力。
     2、从球拍接触球一刹那的声音可以大致判断出球的旋转强度,从拍行的角度可以判断出球的旋转方向,跺脚可以掩盖这种声音。
     3、右手持拍的朋友一般都站球台左侧,发球时跺左脚,跺脚后可以迅速转腰,以利于站位。

       团队真是藏龙卧虎啊。

       比赛结束,最后的优胜者都拿到了奖品。我也有个奖品的,小游戏优胜,一个小本子:-P

      下次再搞个台球比赛吧,羽毛球也行,我一般的球类都会点,都只是略懂,略懂。



谈谈Java中的异常


Java中的Throwable的子类有两个:Error和Exception;同时Throwable还实现了Serializable接口。Java中,只有当对象是Throwable或者它的子类的实例时,才能通过Java虚拟机或者Java throw抛出。Error用来表示编译时和系统错误,这是错误是合理的应用程序不应该试图捕获的严重问题;而Exception是在Java类库、用户方法以及运行时故障中都可以抛出的,它指出了合理的应用程序想要捕获的条件。

Exception中又可分为两类:checked exception 和 unchecked exception。

checked exception包含Exception的除了Runtime Exception的所有子类及它们的子类;我们平时操作数据库的会遇到的SQLException,操作文件时用到的IOException都属于checked exception。这类异常,编译器强制程序员必须对它进行处理(try..catch或者throw)。但这个时候,程序员可以能还未准备好如何去处理这个异常,“被迫”地加上了catch,无意中“吞掉”了异常。

unchecked exception,所有继承自Runtime Exception的类都是unchecked exception;常见的例子就是NullPointerException,IndexOutofBoundsException等。这类异常的特点是,编译器不会去检查它;也就是说,在程序运行过程中,这类异常才会出现。这类异常不需要try..catch,也不需要throw;它的异常输出直接报告给了System.err。RuntimeException(及其子类)代表的是编程错误(比如空指针的引用,比如数组越界),这类错误一旦出现,建议立即中止程序,好好检查代码去…这种异常编译器不会要求我们一定要去处理,不过为了程序的健壮,我们要catch之后还是要作相应的处理。

有时候存在这样的情况,我们在写一个数据访问的接口时,里面有个方法是要取得数据。我们定义这个接口为IDataAccess,取得数据的方法为getData()。如果当前我们的数据存储是在数据库里,取数据的过程中肯定会遇到SQLException,我们抛出这个方法,则getData方法的签名就得改成getData() throw SQLException;如果数据存储在文件里,方法的签名又得改成getData() throw IOException。为了避免这种情况,我们可以将这种那个checked exception “包装”为unchecked exception,

像:

class DataException extends RuntimeExceptin(){}

try{

}catch(IOException e){

throw new DataException (e);

} MORE…



基础算法学习(三)_深搜和宽搜


1. 图的表示

要表示一个图G=(V,E),有邻接表和邻接矩阵两种方法。通常采用邻接表表示法,这种表示方法表示稀疏图比较紧凑。

如果G是一个有向图,则所有邻接表的长度之和为|E|;如果G是一个无向图,则所有邻接表的长度之和为2|E|。无论是有向图还是无向图,邻接表所需的存储空间都为Θ(V+E)。

在图G=(V,E)的邻接矩阵表示方法中,假定各顶点按照某中任意的方式标号1,2,3…V,那么G的邻接矩阵是一个|V|×|V|的矩阵A=(aij),且满足

aij =   1    如果(i,j)∈E

0    其他

一个图的邻接矩阵表示方法所需的存储空间为Θ(V^2)。

2. 宽搜 breadth-first search

定义一个源顶点s,首先发现与源顶点距离是1的所有顶点,再发现与源顶点距离是2的所有顶点。也就是,算法先发现与源顶点s的距离是k的所有的顶点,再发现与s距离为k+1的所有顶点。

这种算法,是先满足广度方向上的扩展,再向深度方向扩展。

用伪码实现算法,假定输入图G=(V,E)采用邻接表方式表示。对于每个顶点u∈V,其色彩存储在变量color[u]里,白色表示未被访问到,灰色和黑色都已被访问到的。灰色顶点可能有一些白色的相邻顶点,但是黑色顶点绝对没有白色相邻顶点。用π[u]表示u顶点的父母。顶点u与源顶点s之间的距离存于变量d[u]中。此外还是用队列来管理所有灰色顶点。 MORE…



Java中Object类及它的几个方法


在Java中,只有基本类型(int,boolean等)的值不是对象。其他类型,包括数组类型,不管是对象数组还是基本类型的数组都扩展与Object类。

1. equals方法

Object类中的equals方法用于检测一个对象是否等于另一个对象,具体是比较两个对象是否具有相同的引用。这一点与“==”具有相同的功效。即是说,对于除开String对象的其他对象,equals与 == 具有一样的效果。而java.lang.String重写了equals方法,下面对这一点细说。

Object类中:

   1:  public boolean equals(Object obj) {
   2:      return (this == obj);
   3:      }
可以看出,equals判断实际上进行的就是 == 判读。
而在String中:
   1:   public boolean equals(Object anObject) {
   2:      if (this == anObject) {
   3:          return true;
   4:      }
   5:      if (anObject instanceof String) {
   6:          String anotherString = (String)anObject;
   7:          int n = count;
   8:          if (n == anotherString.count) {
   9:          char v1[] = value;
  10:          char v2[] = anotherString.value;
  11:          int i = offset;
  12:          int j = anotherString.offset;
  13:          while (n-- != 0) {
  14:              if (v1[i++] != v2[j++])
  15:              return false;
  16:          }
  17:          return true;
  18:          }
  19:      }
  20:      return false;
  21:      }
先是判断两个对象是否是否有一样的引用,再判断两个String对象是否有相同的长度,接着比较每一个位置上的字符是否相同。

2. hasCode方法

散列码(hash code)是由对象导出的一个整型值。散列码是没有规律的,如果x和y是两个不同的对象,那x.hashCode()与y.hashCode()一般是不相同的。 MORE…



基础算法学习(二)_二叉树及应用赫夫曼编码


这次学习的重点在于二叉树的性质、链式存储结构(也就是C语言的struct)和赫夫曼编码,学习的教材是清华大学出版社出版的C语言版数据结构。

    首先是二叉树
    二叉树(Binary Tree)是另一种树形结构,它的特点是每个结点至多只有二棵子树,并且二叉树的子树有左右之分,其次序不能任意颠倒。 

   二叉树的性质
   二叉树作为一种重要的树形结构,在实际生活中的应用虽然不大,但它的结构使我们需要重点研究的。下面写一写二叉树的性质和一些我的理    解。
   性质1   在二叉树的第i层至多有2^(i-1)个结点。这里,我们把根定义为第一层。
              证明:用归纳法证明。
   性质2   深度为k的二叉树至多有2^k-1个结点。
              证明:结合性质1,用等比数列求和公式。
   性质3   对任何一颗二叉树T,如果其终端结点数位n0,度为2的结点数为n2,则n0=n2+1 。
              证明:设整个树的结点数为n,则n=n0+n1+n2 。   (1)
                       而树里的每个结点(除开根节点)都是由一条分支引出,则n=n1+2n2+1 。  (2)
                       综合(1)(2)得出 n0=n2+1 。
   性质4  具有n个结点的完全二叉树的深度为 └logaN┘+1 。└ ┘表示取下整数。

   二叉树的链式存储结构
   
typedef struct  BinTree{
          int  data;
          struct  BinTree *lchild,*rchild;     
   }BinTree,*BinTree;

   赫夫曼编码
   
赫夫曼树,又称最优树,是一类带权路径长度最短的树。定义有着带权路径长度最小的二叉树称作最优二叉树(赫夫曼树)
   那么,如何构造赫夫曼树呢?现叙述如下:
(1)根据给定的n个权值{w1,w2…wn}构造n棵二叉树的集合F={T1,T2…Tn},每课二叉树Ti的根的权为Wi,左右子树为空。
(2)将F={T1,T2…Tn}按权值由小到大稳定排序。
(3)由最小的两个权值树T1,T2组成树T,根的权为T1,T2根的权之和,左右子树分别为T1、T2 。
(4)在F中删除T1、T2,同时将T按序插入F中。
(5)重复(3)、(4),直到F中只剩一棵树。

Ps这篇文章最初发表于以前的博客,发布的时间为2009年12月。