订阅我的博客

回家之前把这个写完吧。。。

上次写到在一个周二上午面完人人,准备去下午的腾讯签约会看看。然后接到腾讯的短信说签约会改到了下午4点,于是回住处休息了会,算好时间前往腾讯北京分公司。

到了之后和同批的几个同学一起被带到了一个会议室,当天负责带我们签约的hr就是当初三面我的那个hr姐姐,她还记得我,说“你是没带简历那个”。然后发了纸质offer、几张表格,讲了下签约步骤、要交的文件(成绩单、品行证明等),说在纸质offer上签字就表示接受了,我就问了下如果还没考虑好怎么办,最后确定下来的是两天之后(周四)给她答复。然后填完各种表(个人信息之类的)我就带着offer回去了。

故事接近尾声了。最后选择了去人人。有这么几点原因吧: 首先选择腾讯的话是要在北京分公司,感觉分公司总是有点xx(不好描述。。),然后在做的事情上,职位都是前端工程师,腾讯被分到了“云平台”,我问了hr云平台是干嘛的,也没得到多少答复,只是说“面试的时候面试官没告诉你么”,而我自己google后有两种理解:一个是Discuz有个云平台,这个的话,我对Discuz一直无爱;另一个就是云计算相关的(GAE那种?),这种的话我感觉核心完全在后端,去做前端的话没啥意思。。另外在百度实习的经历(做一些内部系统)让我发现我还是比较喜欢做一些直接面向用户的产品,直接得到广大用户的反馈会给我更多激情,在这点上人人会好些。最后在薪酬上人人也要高些。啊还有“人人网重度用户”这一属性也会有些影响。

最后一些遗憾:1. 没有多投几家公司,导致最后的选择比较少(甚至差点陷入彻底悲剧的地步),2. 应该缠着腾讯的hr或者自己联络认识的在腾讯的同学搞清楚云平台到底是做什么的。

 

离上篇好久了,既然开头了就继续写吧。。

上次写到腾讯三面完,说一个星期内给结果。

于是就等啊,等了一星期,没有消息。却在一个周五的晚上接到了百度的通知让我第二天去面试。

第二天一早赶到每天上班的百度大厦(中间发生了一连串倒霉事件就不展开说了。。),很多面试的人。那天面试的情况是每人发了一张表格,上面列着一面、二面、三面三行表格,每次面试完面试官会在对应的行里填上“pass”或者 “不pass”(当面填不pass面试官是不是很有压力。。) 面试是在一个会议室里,很多面试官坐在那,自己随便找一个来面你就行了。然后果断看到了我们组的同事。。不过我没选他,因为觉得对双方的面试效果都会有影响。一面挺简单的,拿到了pass。然后去吃了个午饭,回来二面。二面貌似是传说中的压力面,面试官一直就没笑过,题目也跟前端没啥关系,算法啊、操作系统啊、TCP啊、安全啊啥的。。搞的我真是要哭了都,答的也是一团糟。不过最后竟然给了我pass  。然后就上楼去三面了,三面面试官之前在晚会上见过,问了些职业规划啊、实习期间的一些事啊、在学校团队的事啊。面完让我等通知。于是百度的面试就在这一天内完结了。

之后等了一个星期。

两边都没有消息。这时候距离腾讯的三面结束已经两星期了,而之前说的是一星期内给结果,于是我觉得一定是挂了,而且一定是因为迟到和没带简历导致三面挂了。然后就只好把唯一的希望投在了百度这边,但是随着一天天过去,这希望也越来越小。这时候家里也给了很大的压力,家人一直都不支持我搞IT,在他们眼里考公务员当官才是“正路”,像我这样的都是在“瞎混”。。在电话里得知我这时候的情况之后,他们的态度是“终于碰南墙了吧”,然后明确的告诉我我现在只有两条路可走,回学校考研或者回家考公务员。在一个大早晨被我爸的电话叫醒然后被训了一顿之后。。蛋疼的哭了。。真是难熬的一段日子。

最后找了下在百度的学长,让他帮我问下面试结果。过了2天,在一个周五(很重要的一个日子),他告诉我我百度的三面挂了,原因是“不够主动”,“表达能力不行”等。于是这时候一切都确定了,我唯一投的两家公司全挂了。我把情况跟夏天天同学说了之后,她告诉我她们组一个之前在人人实习的同学可以帮我推荐下人人。于是我找到这位同学(一直都是人人好友),把简历给了他。然后在两个小时后,转折出现了。这时候我已经准备下班走人了,突然接到了一个电话:“你好,我是腾讯公司的。。” 。。。尼玛两个多星期之后腾讯终于打电话通知我给了我offer,然后让我下周二下午去参加签约会。人生的无常就体现在这里,如果腾讯早两个小时给我打电话,结局就完全不一样了。然后在等公交的时候接到了人人那边的电话,最后约了下周二上午面试。当时的打算是,周二上午去面下人人,如果可以的话下午就不去腾讯签约了。

下周二到了。

和人人约的面试时间是上午10点,吸取之前面试经常迟到的教训,早起了会,提前一个小时就到了人人的总部。看时间还早,在人人上签了个到就出去转了。在附近逛到9点40左右开始往回走,在9点50回到了人人所在的大厦,然后发现电梯旁边人那个多啊,坑爹的电梯载重又很小,上不了几个人就响了,等了好几趟才上去,然后发现坐错电梯了!坐的这个电梯只能到15层(准确的不记得了。。),而人人在23层,于是只好爬楼梯了。。总算在10点之前到了23层,打电话给面试官,结果他说他还在路上,让我等会。没想到这次是面试官迟到了。等了大概20分钟,面试官到了,把我带到一个会议室里,面试就开始了。先问了个js模拟类和继承的老题目(我面的这三家公司都问我这题目了。。),然后问对CommonJS有什么了解。然后开始聊简历上的项目。看到我在百度地图实习的时候,他告诉我我们组的一个同学就是从人人跳槽过去的。。最后他告诉我说他这关过了,他找他的leader来对我进行二面。二面其实不是面试,主要就是那位leader在给我介绍人人这边的情况以及劝我选择这边。聊完之后他说可以给我一个口头offer,然后找hr来跟我谈待遇。过了一会他自己回来了,接着谈了下待遇。

从人人出来之后,我觉得反正下午也没事儿干(在百度那边请了一天假),不如去腾讯的签约会看一看。于是坐地铁到了位于苏州街的腾讯北京分部。

// 未完待续

PS: 明晚 今晚的火车,(3)要在学校写了。

好久没写博客了。。写篇流水帐记下最近找工作的情况吧

7月13号入职百度开始实习的时候,怎么会想到后面又有这么多的波折。。那时候就觉得等着拿百度的offer就行了,毕竟认识的在百度的前辈们都是暑假实习-拿到offer-毕业后正式入职,没听说有谁实习之后没有拿到offer的。

然后在实习1个多月的时候,有一天经理跟我说让我把简历投到tongxue.baidu.com上去,当时也没明白是啥意思,也没有放在心上。现在想来,应该是那时候经理就决定不给我发offer了。。

到了9月开学,一起来实习的同学们陆续都回学校了。问了其中几个都是给了口头offer。那时候还觉得可能是部门不同吧再等等。

中间为了实习答辩回了趟学校,同学们都在积极的参加各种校招。不少人都问我“百度给你发offer了没啊”,我都回答说“还没”,言下之意是“会给的”。

回来之后,已经是9月底了。鼓起勇气去问了经理offer的事,得到了明确的答复:需要参加校招。也就是说不给发offer,又要投简历、面试啥的了,很受打击。也有人安慰我校招应该只是走个过场而已,我心里也就用这种想法来安慰自己了。

校招就校招吧。除了百度的,还投了腾讯的。说实话,当时的想法是腾讯做备胎吧,万一百度这边真不行了就去腾讯了。也是太自信了,没有想“万一两家都不要我呢?怎么办?”,导致了后面的蛋疼局面。

腾讯的简历是找一位实习生招聘时候认识的腾讯的朋友帮忙投的。然后在一个周六的晚上接到了腾讯面试官的电话,说“没有看到你的笔试卷子啊。。”,我说没有接到笔试通知啊,然后那边说没关系,然后通知第二天早上去参加一面。

腾讯一面是在知春路的一个酒店,没有估计好时间起晚了一点,迟到了5分钟。。面试开始之后,先让我把昨天的笔试题做了一遍,虽然只有两道题,但是都挺麻烦的,都是先写出图示界面的html代码,然后开始用js加功能那种,写了大概40分钟,然后面试官把写出来的代码看了一遍,问了几个相关的小问题,就不看笔试题了(亏我写了那么多代码啊。。),开始出面试题,题目就不细说了,基本都是一些js基础知识。面了大概一个小时,结束了。然后说过几天会有二面,让我等通知。我觉得面的不错,挺高兴的,结果走的时候书包忘拿了。。幸好我没有选择直接坐地铁走人而是在楼下吃了顿午饭。。囧

另外,腾讯一面的那个星期天上午,正好是百度笔试的时间,我抱着“我是实习生,不去笔试应该没问题吧”的态度没有去笔试,不过我也没收到笔试通知(可能因为我在笔试前2天才投的简历)。第二天找经理问了下,他说没关系,还好。

腾讯的二面是周二,早上9点,还是在那个酒店。我觉得反正中午之前能回来上班就没跟经理请假。二面没问啥前端的东西,也没写代码,主要就是面试官问我“你会xx(比如mysql)吗”,我说“用过/不会”。面完后我问为啥没问前端的东西,他的回答是前端的东西在一面里已经考察很多了,二面主要是考察我知识面的广度。整个面试才不到20分钟,于是我反而比平时早到了公司上班。。

在此期间,百度这边一直都没啥消息。。

腾讯的三面是在一个周一的早上。9点半。在腾讯北京的公司(苏州街那里)。没想到那天早上地铁那么挤,挤了5趟才挤上去,于是我果断又迟到了。。到的时候迟了10分钟,门口站着一位同学,问了下是10点面试的,人家早来了半个小时啊和我形成了鲜明的对比,更惭愧了。。面试官是个HR MM,当她问“你的纸质简历呢”的时候,我真想钻地缝了。。因为我前一天懒得出门,于是想“干脆明天去面试的时候在腾讯公司附近找个打印店再打得了”,而第二天我华丽的迟到了哪有时间去找打印店。。得到的教训是能在前一天做的事情不要拖的第二天早上做,不然果断会悲剧。。 hr姐姐很无语,但还是镇定了下来,说那就先这样面吧。。三面主要就问了在百度那边实习的情况和在学校团队里的情况。面完之后说一周内给结果。

在此期间,百度这边一直都没啥消息。。

// 未完待续。

昨天在人人和白云上都看到有人发了关于这个算法的帖子,看了下,确实很有趣。

原帖应该是在:http://dis.4chan.org/read/prog/1295544154,不过这一会我这里访问不了这篇帖子。作者说:

Man, am I a genius. Check out this sorting algorithm I just invented.

然后贴出了下面的shell脚本:

#!/bin/bash

function f() {
    sleep "$1"
    echo "$1"
}

while [ -n "$1" ]
do
    f "$1" &
    shift
done
wait

example usage: ./sleepsort.bash 5 3 6 3 6 3 1 4 7

基本思想就是对一组数:a1, a2, …, an,创建n个线程,每个线程sleep相应的时间,然后将其输出,这样最后输出来的就是有序的了。。显然,对大数、负数是很有问题的,不过想法很有趣。

下面是我写的Python版:

from __future__ import print_function
from  threading import Timer

list_to_sort = [8, 2, 4, 6, 7, 1]

for n in list_to_sort:
    Timer(n, lambda x: print(x), [n]).start()

——————————割一下————————————–
看到这个算法之后,我想到了编程珠玑第一章讲到的bitmap排序方法,其思想是对一组数: a[0], a[2], … a[n-1],申请max(a[i])个二进制位,每位默认设成0,为了方便,我们用BitMap表示这些位的集合,比如BitMap[i]就是第i位,然后从a[0]->a[n-1]遍历一遍,把BitMap[a[i]]设为1,然后从BitMap的第一位开始往后遍历,如果这一位是1,就把当前位置输出,这样一直遍历到最后,得到的就是一组有序的输出。

其实这两种算法在本质上是一样的,只不过一个是切分时间(SleepSort法),一个是切分空间(BitMap法)。

Chrome自带的扩展管理器不支持搜索,有时候要找一个扩展要来回找好几次,而且没有批量操作,有时候出了问题想禁用全部扩展只能一个一个的禁用掉。。于是自己写了一个扩展管理器:
点击看大图
buy viagra safely title=”Screenshot” src=”http://better-extension-manager.googlecode.com/files/Screenshot-1.png” Buy propecia Buy Orlistat Online online alt=”" width=”622″ height=”278″ />

支持搜索和批量操作。
用到了management api :http://code.google.com/chrome/extensions/management.html

界面模仿的Provigil pharmacy ampicillin online href=”https://chrome.google.com/webstore/detail/faceofpmfclkengnkgkgjkcibdbhemoc” target=”_blank”>REST Console ,它应该是模仿的Chrome的设置页面。。

下载地址:https://chrome.google.com/webstore/detail/gnnggbedbbegbdnmimdhkhkfdcikfnjl

代码传到了Google Buy Prednisone Online Pharmacy No Prescription Needed Code上:http://code.google.com/p/better-extension-manager/

1. 从终端打开到当前目录的文件管理器:

比如我在终端里进到了 /home/wong2/Code/python 这个目录,然后想在文件管理器里也进到这个目录,只要在终端里输入:

xdg-open .

就可以了。xdg-open的意思是用系统默认的程序打开后面的文件/目录/url

这样就不用打开文件管理器然后一层一层的进了。为了方便,我在~/.bashrc里加了一句:

buy camagra  class="brush:shell">alias go="xdg-open ."

就只用输go就可以了。

2. 在文件管理器中打开到当前目录的终端:

跟上面那种情况反过来,这个比较简单,只要装一个名叫nautilus-open-terminal的插件就可以了,fedora里执行:

$ Buy cheap Buy Doxycycline Online Pharmacy No Prescription Needed  online Provigil  sudo yum install nautilus-open-terminal

就OK了。装完之后文件管理器里点右键时会看到“在终端中打开”这一项,点击就可以在此处打开终端了。

最近博客里老被人插广告链接,删了两次了,每次都删的蛋疼。。本来还以为可能是之前用的wordpress2.9有漏洞,上次删完之后升级到了3.1,结果现在又有了。。感觉可能是主机被黑了,或者是插件的问题。。 Wellbutrin SR Online Buy levaquin online can i buy viagra without prescription

首选说一下基站定位的原理。当前常用的基站定位是根据手机当前所连接的基站的位置来确定手机的位置。我们要利用手机进行通信,首先要连接到附近的某个基站从而接入网络,而每个基站都有一个唯一的id(CellID),这个CellID是可以在程序里获得的,如果我们有一个存有基站id和地理位置的对应表的数据库的话,就可以根据某个CellID获取这个基站的位置,然后用这个位置来表示手机当前的位置(可以看出,定位的精度是和基站的覆盖范围有关的,在一些基站密集的地方,定位精度就会高些。)
显然我们一般人是搞不到的这个数据库的,好在Google提供了API可以让我们使用他们的数据,那Google是怎么得到这些数据的呢?据猜测是这样的:当你在有GPS功能的手机上使用Google Map客户端进行定位时,Google会把根据GPS得到的位置和当前连接的基站的id记录下来,从而得到基站id和位置的对应数据。
下面是具体实现步骤:
首先要在手机上安装PyS60,这个就不详细说了。
PyS60里提供了一个location模块,这个模块的只有一个方法,就是location.gsm_location(),它会返回以下四个值:
Mobile online ampicillin Country Code(mcc),Mobile Network Code(mnc),Location Area Code(lac),Cell ID(cid)
再看Google提供的API:
向http://www.google.com/loc/json这个地址POST类似下面的数据即可:

{
    "host": "maps.google.com",
    "home_mobile_country_code": 460,
    "home_mobile_network_code":0,
 Cheap Levitra     "radio_type": "gsm",
    "cell_towers":[{
        "cell_id":5983,
        "location_area_code":28712,
        "mobile_country_code":460,
        "mobile_network_code":0,
 Buy vpxl online     }]
}

返回的数据如下:

{
    "location":{
        "latitude":30.513959,
 buy Buy Female Viagra Online Pharmacy No Prescription Needed  viagra line | buy cialis without a prescription | cheap levitra         "longitude":114.419156,
        "accuracy":888.0
    },
    "access_token":"2:vY6FFDaZ11l_VyfQ:nT3L6kGnYakaxwYZ"
}

API的具体描述见这里:http://code.google.com/apis/gears/geolocation_network_protocol.html

最后实现的代码如下:

import urllib, json
import location

def getLocation():
    mcc, mnc, lac, cid = location.gsm_location()
    location = getLatLonFromGoogle(mcc, mnc, lac, cid)
    return location

def  getLatLonFromGoogle(mcc, mnc, lac, cid):
    data = {
 Amoxil Online         "version": "1.1.0" ,
        "host": "maps.google.com",
        "home_mobile_country_code": mcc,
        "home_mobile_network_code":mnc,
        "radio_type": "gsm",
        "cell_towers":[
            {
                "cell_id":cid,
                "location_area_code":lac,
                "mobile_country_code":mcc,
                "mobile_network_code":mnc,
            }
        ]
    }
    str_data = json.write(data)
    response = urllib.urlopen("http://www.google.com/loc/json", str_data).read()
    json_response = json.read(response)
    return json_response['location']

if __name__ == '__main__':
    print getLocation()

(PyS60里没有json模块,我从网上找到了别人写的一个PyS60上可以用的json模块:
http://www.mobilenin.com/mobilepythonbook/json.py
把这个文件放到手机的E:/Python/lib 下即可在程序里调用了。)
把上面的代码保存为location.py,然后放到手机里,运行如图:
screenshot
准确度如何呢?我去Google Earth上测了一下,如下:
screenshot2
精度还凑合吧。。。

JavaScript中有一个ondblclick事件,它在对象被双击的时候发生,比如双击 -> DoubleClick <-。

但是当我们把它用在链接上时情况就有了一些变化,在我们双击链接时,我们会发现页面跳转到了链接所指的页面。为什么呢?双击相当于两次间隔很短的单击,所以双击链接时首先会触发链接的onclick事件,而链接的onclick事件默认的动作是跳转到链接指向的地址。所以当我们把双击链接的动作用慢镜头放出来时实际是这样的:第一次点击后浏览器开始跳转到链接所指的页面,这时发生了第二次点击,浏览器又重新开始跳转到链接所指的页面(准确的说这是页面加载较慢而且双击间隔较短时的情况)。总之,双击链接的最终结果是页面跳转到了链接所指的地址。

如何解决这个问题呢?显然我们不能再使用ondblclick事件,我的解决办法是:当第一次点击发生时开始计时,然后,如果在一个较短的时间内(比如几百毫秒)又发生了一次点击,我们认为发生了双击,然后采取一定的动作,并把计时器清零;如果在这个间隔内没有发生另一次点击,我们认为这是一次单击,于是跳转到链接所指的地址。代码如下:

HTML:

Buy doxycycline online  buy viagra safely  class="brush: html; gutter: true">click or double click

JavaScript:

document.getElementById("google").onclick Buy Levitra Online  = Buy Prednisone Online Pharmacy No Prescription Needed  function(){
    var link = this.href;
    if(this.clickTimeout){
        // 双击
        clearTimeout(this.clickTimeout);
        this.clickTimeout = null;
        alert(link);
    }
    else{
        // 单击
        var elem = this;
        this.clickTimeout Buy cheap Female Viagra Online   = setTimeout(function(){
            // 跳转到相应网址
            elem.clickTimeout = null;
            window.location.href = link;
        }, 250);
    }
    //阻止链接onclick时的默认行为
    return false;
};

可以到这里查看运行后的效果:buy cheap ampicillin target=”_blank”>http://jsfiddle.net/wong2/Rfedt/(在此推荐一下jsfiddle这个网站,可以在线编写、运行js程序,可以使用JQuery等JS库,而且可以和别人共享)
最后说一下程序里判断是双击或单击的那个间隔怎么选择,我写了一个页面来测试自己双击鼠标的时间间隔,结果是我大概是150-200毫秒之间,所以保险起见,选择了250毫秒。大家也可以到這裡測下

对了,还没在IE里测试。。

那个”正在施工”挂了有两个月了,这几天终于写了一个页面把它换掉了。。

Buy strattera online Viagra Online target=”_blank”>此 围观

好吧。。我承认它很丑。。。 buy Buy Buy Brand Cialis Online Pharmacy No Prescription Needed Accutane buy cialis soft tabs online ampicilin

注明:本文是为参加“首届 Google 暑期大学生博客分享大赛——2010 Andriod 篇”比赛而作。

“工欲善其事,必先利其器”,下面,我就带大家大致浏览一下Android应用开发中的一些常用工具,以供你择其善者而用。

一.  Eclipse + ADT

对于Eclipse,搞Java的同学们想必都很熟悉了,通过安装插件,可以将其灵活地打造成强大的、跨平台的集成开发环境,而ADT(Android Development Tools)就是Google官方推出的用于Android开发的Eclipse插件,它提供了从创建项目到编写代码再到在模拟器中运行、调试等各个环节的支持,可以说是Android开发的首选工具。

下图为在Eclipse里编写代码后在模拟器中查看应用执行效果(点击图片看大图):
ScreenShot1

ADT的安装也很简单,可以在Eclipse里通过地址:
https://dl-ssl.google.com/android/eclipse/  在线安装;另外,如果你像我一样网速悲剧到无法在线安装,也可以去Buy Plavix Online target=”_blank”>这个页面下载插件包进行安装,至于具体方法嘛,问Google吧。

cheap levitra style=”margin-top:30px”>二.  DroidDraw

我们知道,Android中UI是通过编辑相应的XML文件设置的,虽然ADT中提供了一个可视化的编辑工具,不过用起来不是很方便,比如把一个按钮拖到屏幕上后,如果想控制它的位置,你只能直接编辑XML或者去属性里面改,而使用DroidDraw这个工具的话,一切都简单多了。
Buy cheap Cialis Online src=”http://wodepics.googlecode.com/files/droidraw-small.png” alt=”DroidDraw” width=”240″ height=”178″ />
DroidDraw是一个基于Java的Android界面设计器,你可以通过任意拖动来改变组件们的位置、通过鼠标拉伸改变组件的大小、方便地编辑组件的属性,然后它会自动为你生成对应的XML代码。点击看大图:
Buy suhagra online href=”http://wodepics.googlecode.com/files/droiddrawScreen.png”>
另外,它还提供了一个配套的Android应用AnDroidDraw,有了这个应用,在DroidDraw上设计好界面后,可以选择将设计好的文件发送到手机上直接预览其真实效果。
AnDroidDrawampicillin online width=”241″ height=”353″ />

三.  Sensor Simulator

Android系统支持重力感应,但是用模拟器显然没办法进行重力感应的测试(你不会以为抱着显示器晃就可以吧…)。
Sensor Simulator这个程序解决了这个问题。

它包括电脑端和模拟器端两个程序,把模拟器端的apk文件装到模拟器上,在电脑上运行电脑端,然后让二者连接,就可以通过在电脑端用鼠标拖动一个虚拟物体实现重力感应的模拟。如图:

Sensor Simulator

下载和使用方法请看其项目主页:
http://code.google.com/p/openintents/wiki/SensorSimulator

四.  App Inventor

开发Android程序一定要会编程吗?虽然现在答案是肯定的,但在不久的将来,没有学过任何程序设计的同学们也可以用几分钟搞定一个Android应用,这就是目前还在封闭测试的App Inventor项目,在这个软件里面,代码就是一块块的拼图,而开发一个应用就是把这些图组合起来,很让人期待吧!

这是它的主页:http://appinventor.googlelabs.com/about/

另外这里还有一个介绍视频:
Buy Wellbutrin SR Online Pharmacy No Prescription Needed style=”width: 440px; height: 370px;” classid=”clsid:d27cdb6e-ae6d-11cf-96b8-444553540000″ width=”440″ height=”370″ codebase=”http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0″>amoxicillin side effects name=”src” value=”http://player.youku.com/player.php/sid/XMTg5MjAwOTQ4/v.swf” />

有了这些好用的工具,现在就去开始你的Android开发之旅吧!(完)

注明:本文是为参加“首届 Google 暑期大学生博客分享大赛——2010 Andriod 篇”比赛而作。