Monday, May 31, 2010

0531盛大南大职业规划讲座

主讲人:盛大人力资源副总裁 sina微博爸爸的豆豆
本来我是抱着打酱油的态度去的,但是却收获不少,所谓无心插柳柳成荫。印象很深的几条写下来和大家分享一下
  1. 尽责:如何才算尽责,永远站在比你高的上司的角度来思考你的职责,这样才能取得上级信任
  2. 积极的态度:事情总是有两面性,一味地愤青或者关注自己改变不了的事实,会更苦闷,要去观察阳光的一面
  3. 首问:对负责甚至过问的事情,总是要确定是否完成
  4. 确认回复,开完会list自己的责任,向上司确认,收到上司的领导需要回复收到,ok,等等
  5. 选择一条路的时候,不要去羡慕别人的风景

Sunday, May 30, 2010

0529 微软笔试

声明:笔试有密保,因此内容不透露,谈一谈总体的感觉。
  1. 纯英文考题,分客观题和主观题两部分。
  2. 知识面覆盖广,包含计算机系统,数据库,网络,c++编程等
  3. 题目比较看重细节,需要扎实的编程基础,靠看面试宝典和编程之美等基本歇菜,要靠积累,泪飘,积累不够
  4. 纸上写代码能力,代码量不小
  5. 深入理解题目,不能只看表面,首先分析透彻,再开始。我被一个例子给忽悠了,其实只是个特例,而不是普遍,要抓住本质。

Saturday, May 29, 2010

0529 微软笔试

声明:笔试有密保,因此内容不透露,谈一谈总体的感觉。
  1. 纯英文考题,分客观题和主观题两部分。
  2. 知识面覆盖广,包含计算机系统,数据库,网络,c++编程等
  3. 题目比较看重细节,需要扎实的编程基础,靠看面试宝典和编程之美等基本歇菜,要靠积累,泪飘,积累不够
  4. 纸上写代码能力,代码量不小
  5. 深入理解题目,不能只看表面,首先分析透彻,再开始。我被一个例子给忽悠了,其实只是个特例,而不是普遍,要抓住本质。

Thursday, May 27, 2010

0526支付宝电面

    今天收到好几个面试相关的电话,最终又面了个支付宝。ps:无保密协议
    话说,自从我面了百度,别的面试哥们就不怕了,即使是挂了,也是笑着而死。今天的支付宝面试很happy,面试gg还让我先去解决了下个人问题。
    上来是例行的自我介绍(这个我居然没有准备过,建议准备),然后开始面试我笔试的情况,其中一个是我当时没有理解的题目,然后在他的解释下,我才明白,面试过程和他交流还是蛮重要,结果我提出了一种解决方案,而且也考虑到了部分细节,感觉还行。中途杂的滤过,还有一个就是跟一个选择题有关的,说假如我对这个不知道,该怎么去解决,我说了,google,请教周围人,然后自己写程序验证(这点貌似他没预料到),最后想不起来了,他说看源代码,我,我,我把它算到google里面了,哈。还有其他的印象不深。
    然后是谈兴趣,我用什么语言,都学了哪些东西,如实说,不敢吹牛,交谈比较愉快。问了我能不能接受朝9am晚6am,。。。最后又是例行的有没有问题问他,这个必须问啊,主要问了具体的工作内容,以及实习相关的东西。基本这样,再见的时候还客气了一会。总之这个面试官给人感觉很好,过程很愉快。说一周内会给结果,我喜欢给通知的公司,即使被咔嚓了,也喜欢。

Wednesday, May 26, 2010

0526百度电面

    结局应该是挂了,很惨痛。没有保密协议,于是我就分享了吧。

    11:00打来,一个gg,也是很客气和和蔼。

    一上来是说一下自己的编程开发,经历,bla bla,然后就开始进入主题了。先是问我做过的那个系统的问题,问得很细,有的部分已经忘了,而且有部分是师兄做的(不过我和他说了),不过核心的东西算是说出来了,具体的算法思想也有。

    接着他问我的专业课,说了算法设计,机器学习,数据库,网络等等,于是问我对什么感兴趣和擅长,我想了想说搜索,其实我的搜索是网页的那种搜索,但是他理解的貌似是搜索算法,后来师兄和我说这种情况我应该说检索,哎,学术不精。于是杯具就开始了,问的都是搜索和最优化的算法等等。其一是某人从A到B,可以步行,坐公交,打的,代价是等待时间和金钱,建模求最优策略。我问是不是比如,走一段,坐一段打一段这种类似的策略,他说,就简化吧,采取一种策略,然后我就给了个线性的方程,a1 * t + a2 * m,说求最小值即可,他又说了如何表达我的最优化方法,我说就用这个式子吧,然后我又问题此类问题是不是一般都是线性规划,他说是的,然后完了,期间细节略。

    然后是那个经典的拾麦穗故事,不能回头,也不能看到下面的,如何确保自己找到比较大的麦穗,100米。呃,我又深思了,yy了一种序列(他说我的不叫分布,分布是根据大小的很坐标,不是我的一步一步)的方法,前30米,观察,中间30米验证,最后40米应用,然后中间他问的很细很细,遇到某种情况如何如何,不要用通俗语言描述,用具体算法,代码来描述,很严格,最后终于挣扎完了。然后我问他如何解决,他说只要拿出一个比较说得通的算法,完整,严格即可,最优化的有,但是很难。

    接着让我提问的,我问的商务搜索的东西,不泄露了。

    感觉面的过程很严谨,对答案要求很严格,要建模,然后详细,完备的算法。因此对自己的一个想法一定要有一个比较好的框架,首先要基于什么想法或者模型,然后详细,完整地解决一个问题的流程,如何达到最终目标。


    基本这样,中间有略过,面完感觉就是歇菜。。。

0526支付宝电面

    今天收到好几个面试相关的电话,最终又面了个支付宝。ps:无保密协议
    话说,自从我面了百度,别的面试哥们就不怕了,即使是挂了,也是笑着而死。今天的支付宝面试很happy,面试gg还让我先去解决了下个人问题。
    上来是例行的自我介绍(这个我居然没有准备过,建议准备),然后开始面试我笔试的情况,其中一个是我当时没有理解的题目,然后在他的解释下,我才明白,面试过程和他交流还是蛮重要,结果我提出了一种解决方案,而且也考虑到了部分细节,感觉还行。中途杂的滤过,还有一个就是跟一个选择题有关的,说假如我对这个不知道,该怎么去解决,我说了,google,请教周围人,然后自己写程序验证(这点貌似他没预料到),最后想不起来了,他说看源代码,我,我,我把它算到google里面了,哈。还有其他的印象不深。
    然后是谈兴趣,我用什么语言,都学了哪些东西,如实说,不敢吹牛,交谈比较愉快。问了我能不能接受朝9am晚6am,。。。最后又是例行的有没有问题问他,这个必须问啊,主要问了具体的工作内容,以及实习相关的东西。基本这样,再见的时候还客气了一会。总之这个面试官给人感觉很好,过程很愉快。说一周内会给结果,我喜欢给通知的公司,即使被咔嚓了,也喜欢。

blog增加访问统计模块

使用http://sitestates.com/提供的服务

0526百度电面

    结局应该是挂了,很惨痛。没有保密协议,于是我就分享了吧。

    11:00打来,一个gg,也是很客气和和蔼。

    一上来是说一下自己的编程开发,经历,bla bla,然后就开始进入主题了。先是问我做过的那个系统的问题,问得很细,有的部分已经忘了,而且有部分是师兄做的(不过我和他说了),不过核心的东西算是说出来了,具体的算法思想也有。

    接着他问我的专业课,说了算法设计,机器学习,数据库,网络等等,于是问我对什么感兴趣和擅长,我想了想说搜索,其实我的搜索是网页的那种搜索,但是他理解的貌似是搜索算法,后来师兄和我说这种情况我应该说检索,哎,学术不精。于是杯具就开始了,问的都是搜索和最优化的算法等等。其一是某人从A到B,可以步行,坐公交,打的,代价是等待时间和金钱,建模求最优策略。我问是不是比如,走一段,坐一段打一段这种类似的策略,他说,就简化吧,采取一种策略,然后我就给了个线性的方程,a1 * t + a2 * m,说求最小值即可,他又说了如何表达我的最优化方法,我说就用这个式子吧,然后我又问题此类问题是不是一般都是线性规划,他说是的,然后完了,期间细节略。

    然后是那个经典的拾麦穗故事,不能回头,也不能看到下面的,如何确保自己找到比较大的麦穗,100米。呃,我又深思了,yy了一种序列(他说我的不叫分布,分布是根据大小的很坐标,不是我的一步一步)的方法,前30米,观察,中间30米验证,最后40米应用,然后中间他问的很细很细,遇到某种情况如何如何,不要用通俗语言描述,用具体算法,代码来描述,很严格,最后终于挣扎完了。然后我问他如何解决,他说只要拿出一个比较说得通的算法,完整,严格即可,最优化的有,但是很难。

    接着让我提问的,我问的商务搜索的东西,不泄露了。

    感觉面的过程很严谨,对答案要求很严格,要建模,然后详细,完备的算法。因此对自己的一个想法一定要有一个比较好的框架,首先要基于什么想法或者模型,然后详细,完整地解决一个问题的流程,如何达到最终目标。


    基本这样,中间有略过,面完感觉就是歇菜。。。

Ubunu 10.04 设置MySQL 5.1 远程访问

  1. 首先安装:sudo apt-get install mysql-server
  2. 启动mysql:sudo serice mysql start(stop/restart),注意使用这几条命令的时候要耐心等待,负责会有好多mysql相关的进程在运行,结果就是运行不起来(can't connect to local mysql server through socket '/var/run/mysqld/mysqld.sock'就是因为启动不起来所引发的错误),要去kill掉:ps aux|grep mysql,查看到好多相关进程,统统kill掉 kill -sigkill 进程号,搞定之后可以启动,进入下一步。
  3. mysql> grant all on *.* to 'root'@'%'  identified by 'root password';,如果要设置为任何客户端都可以以root连接的话,可以这么写,普通格式:grant select on 数据库.* to 用户名@登录主机 identified by "密码"。执行上述语句之后,在执行:flush privileges;,方可立即生效
  4. 修改bind-address 在/etc/mysql/my.cnf中,将将”bind-address = 127.0.0.1“注释,重启mysql既可以远程访问

Tuesday, May 25, 2010

PostgreSQL安装使用 and 从MusicBrainz导入数据

    因为研究的需要,需要使用MusicBrainz的数据,它提供的是一个面向对象的数据库,而我则需要RDF的数据,不过它提供了一个教程,虽然很晦涩,而且分布开了。首先安装PostgreSQl,这个几行命令搞定,然后开始使用。PostgreSQL默认帐号是postgres,没有密码,可以设置。最基本的命令
=> psql => It is a terminal-based front-end to PostgreSQL.
=> CREATEUSER - Adds a new user to a PostgreSQL database cluster.
=> CREATEDB - create a new database
psql database,为选择相应的数据库
psql -U musicbrainz_user musicbrainz_db 为进入用户名musicbrainz_user的musicbrainz_db数据库
createdb -O musicbrainz_user musicbrainz_db 为usermusicbrainz_user 创建musicbrainz_db数据库
    这些命令可以man一下就理解了,可怜我一开始忘了help,搞了半天才搞懂,血的教训,血的教训
文件配置:
    其中还有非常重要的两个配置文件可以配置是否能远程访问访问,以及权限设置,在/etc/postgres/postgres.conf和pg_hba.conf
远程访问:
postgresql.conf中的listen_address改为* ,

pg_hba.conf
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
host all all 0.0.0.0/0 md5

其他:
pg_hba.conf中注意是下面这几个的设置,具体可参加http://developer.postgresql.org/pgdocs/postgres/auth-pg-hba-conf.html
# Database administrative login by UNIX sockets
local   all      all    trust
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
# "local" is for Unix domain socket connections only
local   all         all                 md5
# IPv4 local connections:
host    all         all         0.0.0.0/0         md5
# IPv6 local connections:
host    all         all         ::1/128               md5
~                                        

搞好了这些,然后我就follow了MusicBrainz的method,终于完成
参考文献:   
http://defindit.com/readme_files/postgres_utilities.html                      
http://developer.postgresql.org/pgdocs/postgres/index.html

Ubunu 10.04 设置MySQL 5.1 远程访问

  1. 首先安装:sudo apt-get install mysql-server
  2. 启动mysql:sudo serice mysql start(stop/restart),注意使用这几条命令的时候要耐心等待,负责会有好多mysql相关的进程在运行,结果就是运行不起来(can't connect to local mysql server through socket '/var/run/mysqld/mysqld.sock'就是因为启动不起来所引发的错误),要去kill掉:ps aux|grep mysql,查看到好多相关进程,统统kill掉 kill -sigkill 进程号,搞定之后可以启动,进入下一步。
  3. mysql> grant all on *.* to 'root'@'%'  identified by 'root password';,如果要设置为任何客户端都可以以root连接的话,可以这么写,普通格式:grant select on 数据库.* to 用户名@登录主机 identified by "密码"。执行上述语句之后,在执行:flush privileges;,方可立即生效
  4. 修改bind-address 在/etc/mysql/my.cnf中,将将”bind-address = 127.0.0.1“注释,重启mysql既可以远程访问

PostgreSQL安装使用 and 从MusicBrainz导入数据

    因为研究的需要,需要使用MusicBrainz的数据,它提供的是一个面向对象的数据库,而我则需要RDF的数据,不过它提供了一个教程,虽然很晦涩,而且分布开了。首先安装PostgreSQl,这个几行命令搞定,然后开始使用。PostgreSQL默认帐号是postgres,没有密码,可以设置。最基本的命令
=> psql => It is a terminal-based front-end to PostgreSQL.
=> CREATEUSER - Adds a new user to a PostgreSQL database cluster.
=> CREATEDB - create a new database
psql database,为选择相应的数据库
psql -U musicbrainz_user musicbrainz_db 为进入用户名musicbrainz_user的musicbrainz_db数据库
createdb -O musicbrainz_user musicbrainz_db 为usermusicbrainz_user 创建musicbrainz_db数据库
    这些命令可以man一下就理解了,可怜我一开始忘了help,搞了半天才搞懂,血的教训,血的教训
文件配置:
    其中还有非常重要的两个配置文件可以配置是否能远程访问访问,以及权限设置,在/etc/postgres/postgres.conf和pg_hba.conf
远程访问:
postgresql.conf中的listen_address改为* ,

pg_hba.conf
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
host all all 0.0.0.0/0 md5

其他:
pg_hba.conf中注意是下面这几个的设置,具体可参加http://developer.postgresql.org/pgdocs/postgres/auth-pg-hba-conf.html
# Database administrative login by UNIX sockets
local   all      all    trust
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
# "local" is for Unix domain socket connections only
local   all         all                 md5
# IPv4 local connections:
host    all         all         0.0.0.0/0         md5
# IPv6 local connections:
host    all         all         ::1/128               md5
~                                        

搞好了这些,然后我就follow了MusicBrainz的method,终于完成
参考文献:   
http://defindit.com/readme_files/postgres_utilities.html                      
http://developer.postgresql.org/pgdocs/postgres/index.html

Monday, May 24, 2010

ubuntu 10.04 VPN connection failed

装了ubuntu 10.04,vpn老是failed,搜了好久,找到了解决方法。


http://swiss.ubuntuforums.org/showthread.php?p=8339242#

3. PPTP VPN Configuration - This setup works for connecting to ISA 2004/2006 PPTP VPNs. It should work for connecting to MS PPTP VPN implementations in general. I can't speak for other PPTP VPN implementations.


    a. Create new PPTP connection

        * VPN Tab Settings

            * Set Connection name
            * Set Gateway
            * Set username (for domain-based user accounts, use domain\username)
            * DO NOT SET PASSWORD
            * DO NOT SET NT DOMAIN

            * PPTP Advanced Options (Advanced button)

                * uncheck all auth methods EXCEPT MSCHAPv2
                * check "Use Point-to-Point encryption (MPPE)"

                                      o leave Security set at "All Available (Default)"
                                      o trying to force encryption level causes this option to become unset

                * check "Allow stateful inspection"
                * uncheck "Allow BSD Data Compression"
                * uncheck "Allow Deflate Data Compression"
                * uncheck "Use TCP Header Compression"
                * uncheck "Send PPP Echo Packets" (although connection works either checked or unchecked)

            * save configuration

    b. Initial Connection attempt

            * enter password in login box
            * DO NOT check either password save box at this time
            * once connection establishes, verify remote connectivity - ping, rdp, ssh, etc.
            * disconnect VPN session

    c. 2nd connection attempt

            * enter password in login box
            * check both password save option boxes
            * once again verify remote connectivity
            * disconnect VPN session

    d. Subsequent connection attempts

            * VPN session should automatically connect using saved auth credentials

ubuntu 10.04 VPN connection failed

装了ubuntu 10.04,vpn老是failed,搜了好久,找到了解决方法。


http://swiss.ubuntuforums.org/showthread.php?p=8339242#

3. PPTP VPN Configuration - This setup works for connecting to ISA 2004/2006 PPTP VPNs. It should work for connecting to MS PPTP VPN implementations in general. I can't speak for other PPTP VPN implementations.


    a. Create new PPTP connection

        * VPN Tab Settings

            * Set Connection name
            * Set Gateway
            * Set username (for domain-based user accounts, use domain\username)
            * DO NOT SET PASSWORD
            * DO NOT SET NT DOMAIN

            * PPTP Advanced Options (Advanced button)

                * uncheck all auth methods EXCEPT MSCHAPv2
                * check "Use Point-to-Point encryption (MPPE)"

                                      o leave Security set at "All Available (Default)"
                                      o trying to force encryption level causes this option to become unset

                * check "Allow stateful inspection"
                * uncheck "Allow BSD Data Compression"
                * uncheck "Allow Deflate Data Compression"
                * uncheck "Use TCP Header Compression"
                * uncheck "Send PPP Echo Packets" (although connection works either checked or unchecked)

            * save configuration

    b. Initial Connection attempt

            * enter password in login box
            * DO NOT check either password save box at this time
            * once connection establishes, verify remote connectivity - ping, rdp, ssh, etc.
            * disconnect VPN session

    c. 2nd connection attempt

            * enter password in login box
            * check both password save option boxes
            * once again verify remote connectivity
            * disconnect VPN session

    d. Subsequent connection attempts

            * VPN session should automatically connect using saved auth credentials

Sunday, May 23, 2010

5.21阿里云电面

    话说这是我第一次面试,献给了阿里云,不过没有面对面感觉就是不一样,我感觉电话让我更舒服点。
    面试官很亲切,听声音是个小伙子,交流过程比较轻松。
    上来就问我关于爬虫的事情,因为我在简历上写,曾经实现过一个爬虫,说了下基本的实现流程,注意点,遇到的问题,如何解决等等,假如他不是搜索方向我想应该足够了。
    接着问我数据结构和算法如何,我说还行,然后就问了快排,这个不能不会,不然肯定被鄙视。
    然后问我如何比较两个函数的相似程度(之前貌似还有一个问题,忘了。。。),我说应该从功能上,以及从文本上来两方面分析。功能上就是输入输出的比较。文本上我先是想了个虚拟文档的做法,这个是自然语言处理还有网页搜索方面的,他问我效果会如何,我说可能会不太好,因为丧失了位置信息和结构信息。然后又提出了,从声明的变量数目,分支结构的数目等方面的比较算法,都是不太有完整思路的。然后他让我比较两个字符串的相似度,我首选还是虚拟文档,汗,我只会这个了;因为我感觉最长子串可能不好用,然后他建议了一种方法,先找最大公共子串,然后其次,等等,我没太明白。
    然后问我用过的语言,我说java,c++,让我对比下,bla bla bla,Java的知识都没怎么问,直接问我c++了,可能是因为是c++岗位吧,我都忘了投什么岗位了。。。问了c++有什么默认的函数,构造,析构,然后问子类new的时候是什么过程,我说了半天最后想起来,可能也没说清楚,我google了个清晰的说法:转载自http://fafeng.blogbus.com/logs/17747724.html
/********************************************************************
C++构造函数调用顺序
1.     如果类里面有成员类,成员类的构造函数优先被调用;
2.     创建派生类的对象,基类的构造函数优先被调用(也优先于派生类里的成员类);
3.     基类构造函数如果有多个基类,则构造函数的调用顺序是某类在类派生表中出现的顺序而不是它们在成员初始化表中的顺 序;
4.     成员类对象构造函数如果有多个成员类对象,则构造函数的调用顺序 是对象在类中被声明的顺序而不是它们出现在成员初始化表中的顺序;
5.     派生类构造函数,作为一般规则派生类构造函数应该不能直接向一 个基类数据成员赋值而是把值传递给适当的基类构造函数,否则两个类的实现变成紧耦合的(tightly coupled)将更加难于正确地修改或扩展基类的实现。(基类设计者的责任是提供一组适当的基类构造函数)
#include     
#include     
class A{
public:A{…}
~A{…}
}
class B{
public:B{…}
~B{…}
}
class D{
public:D{…}
~D{…}
}
class E{
public:E{…}
~E{…}
}
class C :public A,public B{
public:C{…}
private:D objD_; E objE_;
~C{…}
}
int   main(void){  
  C   test;  
  return   0;  
}
运 行结果是
A{…}//派生表中的顺序
B{…}
D{…}//成员类的构造函数优先被调用
E{…}
C{…}
~C{…}
~E{…}
~D{…}
~B{…}
~A{…}
对于全局对象(global object),VC下是先定 义先初始化,但C++标准没做规定。全局对象默认是静态的,全局静态(static)对象必须在main()函 数前已经被构造,告知编译器将变量存储在程序的静态存储区,由C++ 编译器startup代码实 现。startup代码是更早于程序进入点(main 或WinMain) 执行起来的代码,它能做些像函数库初始化、进程信息设立、I/O stream产生等等动作,以及对static对 象的初始化动作(也就是调用其构造函数);在main()函数结束后调用它的析构函数。
********************************************************************/
    说完这个就开始聊别的了,我对分布式算法的兴趣,我表示没有怎么接触过,不是很了解,兴趣还可以吧,然后说了发展前途不错,好多地方要用到。等等。接着我我谈假如能实习,实习时间怎么样,我说看老板之类的。最后让我问问题,我问了他们云计算的具体情况,还有实习期间能否间断去找工作- -。
    然后,然后就没有然后了,说过一段时间再打电话给我。
    我只好在这里bless了,bless啊!

Saturday, May 22, 2010

测试gmail发布blog

测试一下

阿里巴巴5.20日南大笔试

转自我的javaEye : http://xusulong.javaeye.com/blog/672424
晚上18:30开始的宣讲会,我在18:10分的时候才知道,因为看见JLH的同学赶过来,硕士阿里有实习生招聘,于是匆匆赶往实验室,扫了下实习的岗位,更新了简历,迅速准备好,杀到就业指导中心(南园西侧)。

居然还拿了个奖品,期间发现自己简历职位有个错误,又回去修改了下。

宣讲会到20:20才结束,开始笔试,技术开发类的一套卷子,分公共题目部分以及java,c&c++,测试和系统分部分。我选择的是java,次选c&c++。

1. 公共选择题有一道比较有意思,是问5个平面最多能把空间划分成几个部分,和我之前遇到的10条直线能把平面最多划分成多少个部分。
2. 直线分平面这个问题我推导出来了,每增加一条线,最多可以被n-1条线分割,从而多出了n个平面。平面分空间的问题没有推导出来,但是让我猜对了,26。回来Google了一下,没太理解。
3. 其他选择题不太清楚了,还有一个merge sort的问题,我是理解的,但是代码写的不好,算法和复杂度给出来了。
4. 还有一道题,给n个数,以及一个数t,求出和为t的所有组合,如何5个数【1,1,2,2,4】,t=4,则组合为【[1,1,2], [2,2],[4]】,对n和t,给出个算法。我的做法是DP,首先找出一个,然后是两个a和b的组合,然后对n-1,和t-a以及n-1和t-b进行迭代,直至得到所有结果。
5. cache问题,淘宝用户数据比较多,每次用户来访问,需要从数据库取得用户信息,为了提高速度,在内存中缓存用户数据,设计算法,cache满的时候需要删除很久没有使用的数据:我的策略,采用LRU(Least Recently Used)思想来进行,用linkhashset,对每个用户有计数,记录没有有多久没有访问,新用户为0,其他用户每来一个用户+1,现有用户被访问的时候清0。
6. 淘宝数据存在不同服务器上,当用户访问不同商品时,需要从不同的服务器取得用户信息,设计策略来解决访问代价问题。这个不太懂。
7. 其他的忘了。。。等其他人补充

5.21阿里云电面

    话说这是我第一次面试,献给了阿里云,不过没有面对面感觉就是不一样,我感觉电话让我更舒服点。
    面试官很亲切,听声音是个小伙子,交流过程比较轻松。
    上来就问我关于爬虫的事情,因为我在简历上写,曾经实现过一个爬虫,说了下基本的实现流程,注意点,遇到的问题,如何解决等等,假如他不是搜索方向我想应该足够了。
    接着问我数据结构和算法如何,我说还行,然后就问了快排,这个不能不会,不然肯定被鄙视。
    然后问我如何比较两个函数的相似程度(之前貌似还有一个问题,忘了。。。),我说应该从功能上,以及从文本上来两方面分析。功能上就是输入输出的比较。文本上我先是想了个虚拟文档的做法,这个是自然语言处理还有网页搜索方面的,他问我效果会如何,我说可能会不太好,因为丧失了位置信息和结构信息。然后又提出了,从声明的变量数目,分支结构的数目等方面的比较算法,都是不太有完整思路的。然后他让我比较两个字符串的相似度,我首选还是虚拟文档,汗,我只会这个了;因为我感觉最长子串可能不好用,然后他建议了一种方法,先找最大公共子串,然后其次,等等,我没太明白。
    然后问我用过的语言,我说java,c++,让我对比下,bla bla bla,Java的知识都没怎么问,直接问我c++了,可能是因为是c++岗位吧,我都忘了投什么岗位了。。。问了c++有什么默认的函数,构造,析构,然后问子类new的时候是什么过程,我说了半天最后想起来,可能也没说清楚,我google了个清晰的说法:转载自http://fafeng.blogbus.com/logs/17747724.html
/********************************************************************
C++构造函数调用顺序
1.     如果类里面有成员类,成员类的构造函数优先被调用;
2.     创建派生类的对象,基类的构造函数优先被调用(也优先于派生类里的成员类);
3.     基类构造函数如果有多个基类,则构造函数的调用顺序是某类在类派生表中出现的顺序而不是它们在成员初始化表中的顺 序;
4.     成员类对象构造函数如果有多个成员类对象,则构造函数的调用顺序 是对象在类中被声明的顺序而不是它们出现在成员初始化表中的顺序;
5.     派生类构造函数,作为一般规则派生类构造函数应该不能直接向一 个基类数据成员赋值而是把值传递给适当的基类构造函数,否则两个类的实现变成紧耦合的(tightly coupled)将更加难于正确地修改或扩展基类的实现。(基类设计者的责任是提供一组适当的基类构造函数)
#include     
#include     
class A{
public:A{…}
~A{…}
}
class B{
public:B{…}
~B{…}
}
class D{
public:D{…}
~D{…}
}
class E{
public:E{…}
~E{…}
}
class C :public A,public B{
public:C{…}
private:D objD_; E objE_;
~C{…}
}
int   main(void){  
  C   test;  
  return   0;  
}
运 行结果是
A{…}//派生表中的顺序
B{…}
D{…}//成员类的构造函数优先被调用
E{…}
C{…}
~C{…}
~E{…}
~D{…}
~B{…}
~A{…}
对于全局对象(global object),VC下是先定 义先初始化,但C++标准没做规定。全局对象默认是静态的,全局静态(static)对象必须在main()函 数前已经被构造,告知编译器将变量存储在程序的静态存储区,由C++ 编译器startup代码实 现。startup代码是更早于程序进入点(main 或WinMain) 执行起来的代码,它能做些像函数库初始化、进程信息设立、I/O stream产生等等动作,以及对static对 象的初始化动作(也就是调用其构造函数);在main()函数结束后调用它的析构函数。
********************************************************************/
    说完这个就开始聊别的了,我对分布式算法的兴趣,我表示没有怎么接触过,不是很了解,兴趣还可以吧,然后说了发展前途不错,好多地方要用到。等等。接着我我谈假如能实习,实习时间怎么样,我说看老板之类的。最后让我问问题,我问了他们云计算的具体情况,还有实习期间能否间断去找工作- -。
    然后,然后就没有然后了,说过一段时间再打电话给我。
    我只好在这里bless了,bless啊!

测试gmail发布blog

测试一下

阿里巴巴5.20日南大笔试

转自我的javaEye : http://xusulong.javaeye.com/blog/672424
晚上18:30开始的宣讲会,我在18:10分的时候才知道,因为看见JLH的同学赶过来,硕士阿里有实习生招聘,于是匆匆赶往实验室,扫了下实习的岗位,更新了简历,迅速准备好,杀到就业指导中心(南园西侧)。

居然还拿了个奖品,期间发现自己简历职位有个错误,又回去修改了下。

宣讲会到20:20才结束,开始笔试,技术开发类的一套卷子,分公共题目部分以及java,c&c++,测试和系统分部分。我选择的是java,次选c&c++。

1. 公共选择题有一道比较有意思,是问5个平面最多能把空间划分成几个部分,和我之前遇到的10条直线能把平面最多划分成多少个部分。
2. 直线分平面这个问题我推导出来了,每增加一条线,最多可以被n-1条线分割,从而多出了n个平面。平面分空间的问题没有推导出来,但是让我猜对了,26。回来Google了一下,没太理解。
3. 其他选择题不太清楚了,还有一个merge sort的问题,我是理解的,但是代码写的不好,算法和复杂度给出来了。
4. 还有一道题,给n个数,以及一个数t,求出和为t的所有组合,如何5个数【1,1,2,2,4】,t=4,则组合为【[1,1,2], [2,2],[4]】,对n和t,给出个算法。我的做法是DP,首先找出一个,然后是两个a和b的组合,然后对n-1,和t-a以及n-1和t-b进行迭代,直至得到所有结果。
5. cache问题,淘宝用户数据比较多,每次用户来访问,需要从数据库取得用户信息,为了提高速度,在内存中缓存用户数据,设计算法,cache满的时候需要删除很久没有使用的数据:我的策略,采用LRU(Least Recently Used)思想来进行,用linkhashset,对每个用户有计数,记录没有有多久没有访问,新用户为0,其他用户每来一个用户+1,现有用户被访问的时候清0。
6. 淘宝数据存在不同服务器上,当用户访问不同商品时,需要从不同的服务器取得用户信息,设计策略来解决访问代价问题。这个不太懂。
7. 其他的忘了。。。等其他人补充

Wednesday, May 19, 2010

[research]准备开题

折腾了好久,终于可以开题了!
老板让这周六开题,时间还是很紧迫的,抓紧时间看文献,找出来几篇主要的参考才是王道。别的事情暂且放下。
拟做一个基于语义Web的音乐数据集成系统,和华为合作的一个项目,其实早应该开始的,可惜企业那边审批得太慢了,几经周折才拍板。
相关内容如下:

1. Deep Web音乐数据获取
2. RDB与RDF之间的匹配
3. SPARQL查询重写为SQL

其中第一点应该不需要参考多少文章了,用个爬虫来找吧;第二点本来实验室师兄做过相关的工作,老板说有点旧,调查下最新的工作看看;第三点有点不定性,可能会因华为变动,或者用第三方API,或者自己实现个简单的。
接下来要做的就是:加油,加油,争取早点做完,早日毕业。

Tuesday, May 18, 2010

[research]准备开题

折腾了好久,终于可以开题了!
老板让这周六开题,时间还是很紧迫的,抓紧时间看文献,找出来几篇主要的参考才是王道。别的事情暂且放下。
拟做一个基于语义Web的音乐数据集成系统,和华为合作的一个项目,其实早应该开始的,可惜企业那边审批得太慢了,几经周折才拍板。
相关内容如下:

1. Deep Web音乐数据获取
2. RDB与RDF之间的匹配
3. SPARQL查询重写为SQL

其中第一点应该不需要参考多少文章了,用个爬虫来找吧;第二点本来实验室师兄做过相关的工作,老板说有点旧,调查下最新的工作看看;第三点有点不定性,可能会因华为变动,或者用第三方API,或者自己实现个简单的。
接下来要做的就是:加油,加油,争取早点做完,早日毕业。

Tuesday, May 11, 2010

[develop]Nutch 初体验 爬行企业内部网

转自我的javaeye blog:http://xusulong.javaeye.com/blog/663411

前些日子琢磨着想搭建一个搜索引擎,自己写成本有点高,虽然以前写过爬虫,但是索引排序估计要烦得多

nutch   是一个开源的、Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。是一个应用程序,可以以 Lucene 为基础实现搜索引擎应用。

选定nutch之后,开始着手学习使用nutch,英文水平还不够,只能看看nutch的简单的tutorial,但是真正当教程,我还是选择了中 文,可以让第一个搜索跑起来之后再选择学习英文的文档,以便更深的理解。

我选择的教程是 nutch入门学习 

准备工作:

我的系统是Ubuntu 9.10,java -version 1.6.0_20-b02,nutch 1.0,以及tomcat 6.0.26

  1. jdk和tomcat一般大家做过java和web开发都会有装,不赘述,有几点需要注意的列出来
    1. tomcat的bin/catalina.sh中加入JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.20, 这点我深受其害,开始没有设置,运行bin/nutch crawl的时候总是说JAVA_HOME is not set,我一想我明明设置了java环境变量的,java-version也是正常的,各种google,确定各种地方可以设置JAVA_HOME的地 方,都无济于事,最后在一个角落找到,在此文件中可以添加JAVA_HOME,然后运行,居然可以,但是我不明白,nutch爬虫的运行应该是不依赖于tomcat的,tomcat只是用于搜索。这点未参透。
  2. tomcat,jdk搞定之后是nutch,我直接将nutch放在用户名下面的nutch目录,然后将其中的nutch.war复制到 tomcat的webapp中,并取代ROOT(解压,重命名目录)


配置nutch:

这里参考nutch入门 学习 ,我把改的地方说明出来。

 

  1. 增加要抓取的页面(以www.163.com为例)
    1. [root@localhost nutch]#mkdir urls
    2. [root@localhost nutch]#echo http://www.163.com/>>urls/163
    3. 163文件中输入http://news.163.com/
  2. 编辑conf/crawl-urlfilter.txt文件,设定要抓取的网址信息。
    [root@localhost nutch]#vi conf/crawl-urlfilter.txt
    修改MY.DOMAIN.NAME为:
    # accept hosts in MY.DOMAIN.NAME
    +^http://([a-z0-9]*\.)*163.com/
  3. 编辑conf/nutch-site.xml文件,增加代理的属性,并编辑相应的属性值
    Xml代码
    1. <property>  
    2. <name>http.agent.name</name>  
    3. <value></value>  
    4. <description>HTTP 'User-Agent' request header. MUST NOT be empty -  
    5. please set this to a single word uniquely related to your  
    6. organization.  
    7. NOTE: You should also check other related properties:  
    8. http.robots.agents  
    9. http.agent.description  
    10. http.agent.url  
    11. http.agent.email  
    12. http.agent.version  
    13. and set their values appropriately.  
    14. </description>  
    15. </property>  
    16. <property>  
    17. <name>http.agent.description</name>  
    18. <value></value>  
    19. <description>Further description of our bot- this text is used in  
    20. the User-Agent header. It appears in parenthesis after the agent  
    21. name.  
    22. </description>  
    23. </property>  
    24. <property>  
    25. <name>http.agent.url</name>  
    26. <value></value>  
    27. <description>A URL to advertise in the User-Agent header. This will  
    28. appear in parenthesis after the agent name. Custom dictates that this  
    29. should be a URL of a page explaining the purpose and behavior of this  
    30. crawler.  
    31. </description>  
    32. </property>  
    33. <property>  
    34. <name>http.agent.email</name>  
    35. <value></value>  
    36. <description>An email address to advertise in the HTTP 'From' request  
    37. header and User-Agent header. A good practice is to mangle this  
    38. address (e.g. 'info at example dot com') to avoid spamming.  
    39. </description>  
     nutch入门 学习 中说这里就算是不修改也无所谓,这里的设置,是因为nutch遵守了robots协议,在获取response时,把自己的相关信息提交给被爬行的网站, 以供识别。但是我这样设置出现了错误提示,即http.agent.name需要设置,我将value设置成 xusulong*(记住有*)即可。其他可以不设置了。

配 置tomcat:

  1. 设定搜索目录
    (是由于默认的segment路径与我们实际的路径不符所造成的)
    [root@localhost nutch]#cd ~/tomcat
    [root@localhost tomcat]#vi webapps/ROOT/WEB-INF/classes/nutch-site.xml
    增加四行代码,修改成为
    Xml代码
    1. <configuration>  
    2. <property>  
    3. <name>searcher.dirname>  
    4. <value>/home/whu/nutch/crawl.demovalue>  
    5. property>  
    6. configuration>  
     这里的/home/whu/nutch/crawl.demo是我的nutch路径,爬虫到时候的数据就会放在程序新建的crawl.demo下面,即 nutch抓取的页面的保存目录。
  2. nutch对中文的支持还不完善,需要修改tomcat文件夹下conf/server.xml文件
    [root@localhost tomcat]#vi conf/server.xml
    增加两句,修改为
    <Connector port="8080"
    maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    enableLookups="false" redirectPort="8443" acceptCount="100"
    connectionTimeout="20000" disableUploadTimeout="true"
    URIEncoding="UTF-8" useBodyEncodingForURI="true" />

抓取网页:

whu@leopard:~/nutch$ bin/nutch crawl urls -dir crawl.demo -depth 2 -threads 4 -topN 5 >& crawl.log

具体的参数nutch入门 学习 有解释,也可以参见nutch的官方网站。这里只抓取少量站点。

这时候 crawl.log会记录抓取的信息,我中间遇到过

如下几个错误:

  1. http.agent.name需要设置问题
  2. Input path does not exist问题,这个多试几次路径即可,只要这里的crawl.demo和配置tomcat中的路径对应,记得出错的时候把出错的目录删除,否则下次还是 出错。

测试结果:

运行tomcat,进入首页,搜索网易,结果如下:

搞了一个下午和晚上,泪流满面,中途还有其他的错误我记不大清楚了,总之严重的错误我列出来了,仔细看系统如何报错,google之,仔细发现错误 才是王道。



Monday, May 10, 2010

[develop]Nutch 初体验 爬行企业内部网

转自我的javaeye blog:http://xusulong.javaeye.com/blog/663411

前些日子琢磨着想搭建一个搜索引擎,自己写成本有点高,虽然以前写过爬虫,但是索引排序估计要烦得多

nutch   是一个开源的、Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。是一个应用程序,可以以 Lucene 为基础实现搜索引擎应用。

选定nutch之后,开始着手学习使用nutch,英文水平还不够,只能看看nutch的简单的tutorial,但是真正当教程,我还是选择了中 文,可以让第一个搜索跑起来之后再选择学习英文的文档,以便更深的理解。

我选择的教程是 nutch入门学习 

准备工作:

我的系统是Ubuntu 9.10,java -version 1.6.0_20-b02,nutch 1.0,以及tomcat 6.0.26

  1. jdk和tomcat一般大家做过java和web开发都会有装,不赘述,有几点需要注意的列出来
    1. tomcat的bin/catalina.sh中加入JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.20, 这点我深受其害,开始没有设置,运行bin/nutch crawl的时候总是说JAVA_HOME is not set,我一想我明明设置了java环境变量的,java-version也是正常的,各种google,确定各种地方可以设置JAVA_HOME的地 方,都无济于事,最后在一个角落找到,在此文件中可以添加JAVA_HOME,然后运行,居然可以,但是我不明白,nutch爬虫的运行应该是不依赖于tomcat的,tomcat只是用于搜索。这点未参透。
  2. tomcat,jdk搞定之后是nutch,我直接将nutch放在用户名下面的nutch目录,然后将其中的nutch.war复制到 tomcat的webapp中,并取代ROOT(解压,重命名目录)


配置nutch:

这里参考nutch入门 学习 ,我把改的地方说明出来。

 

  1. 增加要抓取的页面(以www.163.com为例)
    1. [root@localhost nutch]#mkdir urls
    2. [root@localhost nutch]#echo http://www.163.com/>>urls/163
    3. 163文件中输入http://news.163.com/
  2. 编辑conf/crawl-urlfilter.txt文件,设定要抓取的网址信息。
    [root@localhost nutch]#vi conf/crawl-urlfilter.txt
    修改MY.DOMAIN.NAME为:
    # accept hosts in MY.DOMAIN.NAME
    +^http://([a-z0-9]*\.)*163.com/
  3. 编辑conf/nutch-site.xml文件,增加代理的属性,并编辑相应的属性值
    Xml代码
    1. <property>  
    2. <name>http.agent.name</name>  
    3. <value></value>  
    4. <description>HTTP 'User-Agent' request header. MUST NOT be empty -  
    5. please set this to a single word uniquely related to your  
    6. organization.  
    7. NOTE: You should also check other related properties:  
    8. http.robots.agents  
    9. http.agent.description  
    10. http.agent.url  
    11. http.agent.email  
    12. http.agent.version  
    13. and set their values appropriately.  
    14. </description>  
    15. </property>  
    16. <property>  
    17. <name>http.agent.description</name>  
    18. <value></value>  
    19. <description>Further description of our bot- this text is used in  
    20. the User-Agent header. It appears in parenthesis after the agent  
    21. name.  
    22. </description>  
    23. </property>  
    24. <property>  
    25. <name>http.agent.url</name>  
    26. <value></value>  
    27. <description>A URL to advertise in the User-Agent header. This will  
    28. appear in parenthesis after the agent name. Custom dictates that this  
    29. should be a URL of a page explaining the purpose and behavior of this  
    30. crawler.  
    31. </description>  
    32. </property>  
    33. <property>  
    34. <name>http.agent.email</name>  
    35. <value></value>  
    36. <description>An email address to advertise in the HTTP 'From' request  
    37. header and User-Agent header. A good practice is to mangle this  
    38. address (e.g. 'info at example dot com') to avoid spamming.  
    39. </description>  
     nutch入门 学习 中说这里就算是不修改也无所谓,这里的设置,是因为nutch遵守了robots协议,在获取response时,把自己的相关信息提交给被爬行的网站, 以供识别。但是我这样设置出现了错误提示,即http.agent.name需要设置,我将value设置成 xusulong*(记住有*)即可。其他可以不设置了。

配 置tomcat:

  1. 设定搜索目录
    (是由于默认的segment路径与我们实际的路径不符所造成的)
    [root@localhost nutch]#cd ~/tomcat
    [root@localhost tomcat]#vi webapps/ROOT/WEB-INF/classes/nutch-site.xml
    增加四行代码,修改成为
    Xml代码
    1. <configuration>  
    2. <property>  
    3. <name>searcher.dirname>  
    4. <value>/home/whu/nutch/crawl.demovalue>  
    5. property>  
    6. configuration>  
     这里的/home/whu/nutch/crawl.demo是我的nutch路径,爬虫到时候的数据就会放在程序新建的crawl.demo下面,即 nutch抓取的页面的保存目录。
  2. nutch对中文的支持还不完善,需要修改tomcat文件夹下conf/server.xml文件
    [root@localhost tomcat]#vi conf/server.xml
    增加两句,修改为
    <Connector port="8080"
    maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    enableLookups="false" redirectPort="8443" acceptCount="100"
    connectionTimeout="20000" disableUploadTimeout="true"
    URIEncoding="UTF-8" useBodyEncodingForURI="true" />

抓取网页:

whu@leopard:~/nutch$ bin/nutch crawl urls -dir crawl.demo -depth 2 -threads 4 -topN 5 >& crawl.log

具体的参数nutch入门 学习 有解释,也可以参见nutch的官方网站。这里只抓取少量站点。

这时候 crawl.log会记录抓取的信息,我中间遇到过

如下几个错误:

  1. http.agent.name需要设置问题
  2. Input path does not exist问题,这个多试几次路径即可,只要这里的crawl.demo和配置tomcat中的路径对应,记得出错的时候把出错的目录删除,否则下次还是 出错。

测试结果:

运行tomcat,进入首页,搜索网易,结果如下:

搞了一个下午和晚上,泪流满面,中途还有其他的错误我记不大清楚了,总之严重的错误我列出来了,仔细看系统如何报错,google之,仔细发现错误 才是王道。



我居然看了杜拉拉

http://sulongxu.spaces.live.com/blog/cns!8E68BA18F4E3B1C2!201.entry
我许是空虚、寂寞、 无聊的蛋疼了,居然在好友屡次劝说万万不能看的情况下,依然抱着对小徐同学的一点一点的幻想而义无反顾地冲了上去。
然而事实证明我输了, 输得很彻底。
小徐同学是不是不会穿衣裳了,我感觉她换的n件衣服,有 >=70% 穿起来太俗气,尤其是她穿了粗粗的裤子,不是剧组在淘宝淘的吧。然后是黄立行,我灰常纳闷,这哥们一是没有长相,而是更没有演技,怎么就让这种人来充当男 猪脚,王朔都比他好。
再说说对白,英文就英文,中文就中文,他偏要插在一起说,说就说吧,中文咬字又要不清楚,英文我不能评价,不过估计 也就那样,看得我揪心。
差点忘了广告了,开场就一个兴业银行,差点把我雷倒,不过这还是小儿科,接着各种nokia,各种德芙,各种 XXX,最要命的是马自达的跑车,来过全方位的特写。不得不感叹杜拉拉这则广告拍得太长了,都tmd赶上电影了。
谨记:国产电影不是一般 人都能看的

我居然看了杜拉拉

http://sulongxu.spaces.live.com/blog/cns!8E68BA18F4E3B1C2!201.entry
我许是空虚、寂寞、 无聊的蛋疼了,居然在好友屡次劝说万万不能看的情况下,依然抱着对小徐同学的一点一点的幻想而义无反顾地冲了上去。
然而事实证明我输了, 输得很彻底。
小徐同学是不是不会穿衣裳了,我感觉她换的n件衣服,有 >=70% 穿起来太俗气,尤其是她穿了粗粗的裤子,不是剧组在淘宝淘的吧。然后是黄立行,我灰常纳闷,这哥们一是没有长相,而是更没有演技,怎么就让这种人来充当男 猪脚,王朔都比他好。
再说说对白,英文就英文,中文就中文,他偏要插在一起说,说就说吧,中文咬字又要不清楚,英文我不能评价,不过估计 也就那样,看得我揪心。
差点忘了广告了,开场就一个兴业银行,差点把我雷倒,不过这还是小儿科,接着各种nokia,各种德芙,各种 XXX,最要命的是马自达的跑车,来过全方位的特写。不得不感叹杜拉拉这则广告拍得太长了,都tmd赶上电影了。
谨记:国产电影不是一般 人都能看的

Thursday, May 6, 2010

[test]测试 scribefire

Technorati Tags:
test from scribefire

[test] 测试sidewiki发布blogger

重生

    虽然2006年就开始用了这个blog,但是那时候是作为自己的小秘密的地方,很少发文章,也很少有认识我的人知道。
    经历了新浪blog,百度blog,博客大巴,live space,javaEye等blog(以及人人,qq之类的空间)。最后觉悟还是blogspot最可靠,虽然在墙外,但是我认为我的blog在上面是可靠的,作为信息是不会丢失的,更不会有一堆非主流,无聊的人来这里留言。
    因此,将以前的blog清空,不再是栖息地了。
    以后我的每一篇blog在这里都会留下印迹,当然技术方面的可能也会在javaEye
,生活琐碎可以单独参考live space,当然这里会聚合上述blog的,其他blog基本弃用。自己的小秘密嘛,我想就用Google Calendar来记述吧。

    希望来到我的blog的每一个人或者能从这里得到我的消息,或者得到部分启发和帮助。
    我的twitter:econsh 
    这个是我惯用的头像: 

[test]测试 scribefire

Technorati Tags:
test from scribefire

[test] 测试sidewiki发布blogger

重生

    虽然2006年就开始用了这个blog,但是那时候是作为自己的小秘密的地方,很少发文章,也很少有认识我的人知道。
    经历了新浪blog,百度blog,博客大巴,live space,javaEye等blog(以及人人,qq之类的空间)。最后觉悟还是blogspot最可靠,虽然在墙外,但是我认为我的blog在上面是可靠的,作为信息是不会丢失的,更不会有一堆非主流,无聊的人来这里留言。
    因此,将以前的blog清空,不再是栖息地了。
    以后我的每一篇blog在这里都会留下印迹,当然技术方面的可能也会在javaEye
,生活琐碎可以单独参考live space,当然这里会聚合上述blog的,其他blog基本弃用。自己的小秘密嘛,我想就用Google Calendar来记述吧。

    希望来到我的blog的每一个人或者能从这里得到我的消息,或者得到部分启发和帮助。
    我的twitter:econsh 
    这个是我惯用的头像: