读研 or not 读研

最近做项目,和大三的学弟学妹们有些接触,读不读研自然是个经常提起的话题。虽然现在当了两年的烟酒僧,但我也还没把自己读研是否划算这档事给算计清楚。不过,即使算清楚了也没啥用,虽然现在很有套牢的感觉,而且还是那种有限售的套牢,想止损都不行,但目前的首要任务还是尽可能提高期望收益吧。
言归正传,前几天我在博客上对研究生这个牌子砸了发了点牢骚。今天正好看到两篇文章,都是对本科研究生贬值的感慨,却得出了截然不同的结论。正方感叹本科不够用,

所以呢,大家还是都去读研吧,反正现在研究生又疯狂扩招,虽然不知道等到研究生毕业是不是研究生学位也不够用了。。

反方材料比较多,不止是发发牢骚,还搬出了很多背景知识。最后的建议是:
由于硕士学位的贬值很快就会出现,所以你一定要想清楚,将宝贵的青春和金钱,用来交换一张意义不大的学历证书是否值得。

如果你喜欢搞科研(愿意当大学老师),那就不要停留在硕士,坚持下去一口气把博士学位拿到。很多学校都有“硕博连读”项目,本科毕业后,4~5年拿到博士,这还是值得的。
否则的话,本科毕业后还是应该直接选择就业。除了名校可能会有一点区别(更好的机会、更好的图书馆、更好的同学),其他学校的硕士意义不大,你得到的很可能不如你失去的东西多。至于“专业学位”,如果你是应届生的话,还是把它忘了吧。

下面的内容,打算出国的同学请绕道,呵呵。
具体一点,谈谈学院的研究生。想报送工学的同学们,不要对工学硕士的科研生活有太大的期望。按照现在3届学生的经验,你们只能靠自己做研究,学院能提供的,除了基础设施以外,很少有具体的科研项目。更多的时间埋没在导师的项目里,这里我就不说了。不过现在我也听说有些科研项目也上路了,具体情况不详。工学对于工程的优势一个在于现金成本,一个在于有导师的定期指导。而劣势是一年的时间成本和没有实习的锻炼,前者抵消了现金优势。
工程硕士对于软院的本科生来说,工程硕士就是大五+实习。和本科时一样的上课,一样的三学期,一样的实习,一样的无导师,除了最后学位服换成蓝的,论文要比本科厚一倍。4万块钱加上2年的时间,换取半年多的实习经验和一张硕士文凭。好消息是求职时用人单位并不太在意工学还是工程,都是参照硕士待遇。
微观经济学的第一课都会谈谈机会成本,纠结的同学们算算你们的机会成本。第一个问题是是否读研。读研相对于找工作,机会成本在于 1)这2-3年间的工资损失 2) 2-3年的工作经验损失 3)可能的学费支出 4)研究生贬值,可能找不到比本科更好的工作 5)取得读研资格的成本。对于大部份同学来说,财务成本放到长远来看的话,1,3项是微不足道的。第4项其实是读研究生的期望收益,读研究生不就是为了将来可能找到更好的工作吗?如果你读研究生后还找不到比本科更好的工作,那只能说研究生白活了,况且今年的经济形势还这么糟糕。对比第三条的成本和第四条的收益,砝码往往掌握在取得读研资格的成本上。如果成本为0,天平往往就向读研倾斜;如果考研把握不大,往往向工作倾斜,毕竟考研失败的成本往往包括了失去不错的工作机会。
最后我的结论是,首先能保研就保研。如果想读博,上工学;想像我这样,拿张研究生的文凭做敲门砖的,同时经济条件能承受的,就是工程了。

终于入职了

还是上班时间,偷偷摸摸的来写blog
5月13日终于入职了,感谢亲爱的老妈一拿到报到证就坐最快的动车赶到了上海,让我成功的在第一时间入职,mua一下
入职了就不能那么散漫了,怎么说2个月的试用期随时有被炒鱿鱼的可能。。还是很怕怕的。。我很胆小。
不知道什么时候才能有门卡,饭卡,本本。。。

一头汗的爱立信电话

今天下午在宿舍,突然接到一个010的电话,迟疑着接了电话。电话那头是个普通话不错的GG,要我明天去参加明天爱立信的宣讲会,顺便去帮帮忙。我一头大汗,根本没投爱立信啊。我说,我没投你们家啊,然后对方就有点语焉不详了,一会儿说有人推荐,一会儿说别的。
晕死。

雇主见面日

上周六去上海参加了ACCA就业力大赛雇主见面日活动。参加这个活动本来是为了考次博思的,无心插柳进了下一轮,就去见识见识。
之前收到官方邮件说要穿正装,头都大了。首先我没有正装,第二在30多度的正午在外晃荡实在是一种折磨。匆匆找上海同学借了正装,买了双25块钱的皮鞋,找见比较见得人的衬衫,没打领带,顶着正午12点的大太阳,从中山公园奔赴东华大学(其实也就3站公交)。
到早了,正好看看KP,PWC和Henkel发的材料。绝大多数人穿得很official,也一脸稚气。
前面各个企业做了宣讲,记得有KPMG,PWC,BestBuy,Citi,DTZ,Dupont,GE,Grant Thornton, Henkel,Whirlpool。其他就不记得了。
没想到Whirlpool的HR面是群面,God,昨天我刚经历了Ebay的群面。。。6人小组,只有我是男的,只有我是上海外地的学校。讨论话题是:“Obama当选美国总统,能力重要还是机遇重要?”。我们的讨论比较失败,基本没跳开Obama,中间几次我有意把大家扯出来,未果。不过这次群面感觉明显比昨天的好,正好碰上我比较熟悉的国际时事政治方面,而其他女生估计平时都没怎么关心吧。

BRT链接线

新闻讨论BRT链接线的取舍。当初开通BRT链接线,主要是为了培养BRT的客流,事前的论证结果肯定也是亏本的,明眼人一看就知道。刷卡3毛钱,投币5毛钱,油钱都收不回来。
链接线我只坐过一次,在集美坐的,应该是大年初二的早上,基本是坐专车。除了上下班高峰,我想链接线平时肯定坐都坐不满。
一个城市的快速交通,BRT也好,地铁或者轻轨也好,要真正发挥其优势,必须要形成网状结构,并建设好换乘体系。如北京上海广州现阶段地铁网络。南京只有一条线,我虽然就住在地铁沿线,但去很多地方,比如山西路、大桥南路、紫金山、龙江,首选只能是公交。预计要等地铁3号线的通车,地铁才能真正发挥其优势。
正如541说过的,BRT其实是场赌博,所以ZF要尽其所有保证其运营。现在BRT客流还不错,原有的链接线改成普通公交线并适当延伸,也是不错的选择。

IE6设置Image.src的bug

这个问题我现在也没彻底搞懂。网站有一块需要建立一个Image对象,设置好src属性,onerror和onload属性,然后把Image添加为div的子元素,交给浏览器去请求图片并渲染(请看p.s.)。用其他浏览器都很正常,但用IE6浏览器访问,虽然能得到图片,但服务器的日志里会报错,第一个Exception是Connection reset by peer,第二个是多次调用response.getOutputStream()或getJspWriter()。
上了调试器,发现一次图片的调用,服务器会在入口函数的断点停留两次,说明浏览器发出了两次请求。用Fiddler看各次请求的内容,居然再也无法重现错误了。换用HttpWatch,终于重现了错误。每次图片的调用都会有两个请求,第一个请求发出后马上被掐掉(Aborted),然后接着发出第二个请求。这解释了为什么会抛Connection reset by peer的异常。第二个异常的原因,估计是当浏览器的reset请求到达服务器时,服务器的代码已经完成了生成图片的工作,并把图片塞进了response,这个时候抛来一个异常,被forward到error.jsp,于是乎二次调用了getJspWriter,报错。
网上搜了搜这个问题,有少许提到这个bug。我的解决方法很简单,就是在image append到div之后,再设置src属性。经测试解决了IE6的Aborted问题,其他浏览器,如IE7,FF3和Chrome都没什么影响。
p.s. 后来看到玉伯的博客,发现Image对象在设置了src对象以后就马上请求图片,并不等到被添加到DOM上再请求,因为Image本来就是用来做图像预加载的。所以原本的代码就有一些错误,应该先设置onerror和onload属性后,再设置src才有意义。
p.s.2 这里是一篇描述了IE中Aborted的文章,推翻了不少本文的无妄猜测。
p.s.3 经我第三次的测试,发现IE6中如果先设置image.src在appendChild,会出现Aborted问题,相反顺序则没有问题。

简单比较Apache+Tomcat的mod_jk和mod_proxy方法

这几天服务上线。由于80端口还需要blog和wiki两个服务,所以把80给了Apache管理,然后再通过apache连接后面8080的Tomcat。
Apache+Tomcat主要有三种办法实现: mod_jk, mod_proxy和ajp_proxy。mod_jk是比较专门针对Tomcat的方法,通过AJP协议连接Tomcat,mod_proxy不止可以连接Tomcat,只要是HTTP应用都可以进行反向代理。ajp_proxy不是很清楚,具体参见这里
我前后碰到过三种不同的配置环境。第一次是搭建试验服务的时候,服务搭建在一台内网机器上,通过外网机器的8080端口映射内网的80端口进行访问。由于可对外暴露的端口只有被映射的一个80端口,自然把Apache推了上去。使用mod_proxy进行反向代理配置。后来上面要求搭建两个运行实例,于是开了两份Tomcat,配了两份的proxy。一个在18080,一个在28080。

ProxyPass /app http://localhost:18080/app
ProxyPassReverse /app http://localhost:18080/app
ProxyPass /app2 http://localhost:28080/app2
ProxyPassReverse /app2 http://localhost:28080/app2
第二次的环境并不是Apache+Tomcat,而是IIS+Tomcat。对IIS的不熟悉让我一段时间之内挠破了头。IIS上我没有找到比较实用的mod_proxy组件,特别是使用ISAPI的mod_proxy。而另外一个重大变化在需求上,这次要求服务支持SaaS,而我们服务的SaaS通过访问的域名来区别不同的租户。比如通过abc.example.com和def.example.com访问的用户,虽然使用的是同一个应用,但是却在不同的租户空间内进行操作。
可行的办法是使用ISAPI Rewrite。ISAPI Rewrite事实上是提供Proxy功能的,但那是收费版本。免费的Lite版本只有URL Rewrite的功能。我只好彻底放弃了Proxy的打算,对用户做重定向。比如访问http://abc.example.com的用户将被重定向到http://abc.exmaple.com:8080/app。对于wiki和blog这些访问,在配置文件中当作例外处理。以下是配置文件:
RewriteCond %{HTTP:Host} example\.com$
RewriteCond %{HTTP:Host} !www\.example\.com$
RewriteCond %{HTTP:Host} !wiki\.example\.com$
RewriteCond %{HTTP:Host} !blog\.example\.com$
RewriteRule app/(.*) http://%{HTTP:Host}\:8080/app/$1 [NC,R=301]
RewriteCond %{HTTP:Host} example\.com$
RewriteCond %{HTTP:Host} !www\.example\.com$
RewriteCond %{HTTP:Host} !wiki\.example\.com$
RewriteCond %{HTTP:Host} !blog\.example\.com$
RewriteRule (.*) http://%{HTTP:Host}\:8080/app [NC,R=301]
RewriteCond %{HTTP:Host} www\.example\.com$
RewriteRule ^/$ http://%{HTTP:Host}/app/index.htm [NC,R=301]
RewriteCond %{HTTP:Host} wiki\.example\.com$
RewriteRule ^/(.*)$ http://www.example.com/wiki/$1
RewriteCond %{HTTP:Host} blog\.example\.com$
RewriteRule ^/(.*)$ http://www.example.com/blog/$1
第三次,经过争取,服务器的80端口让位于Apache。当我打算切回第一次的mod_proxy配置时,却发现一个致命的问题:Request里Host的内容已经被mod_proxy修改成了配置文件里的localhost,没有反映用户真实请求里的abc.example.com或者def.example.com。况且系统还要求支持实时添加租户,即在不重启系统的情况下增加新的*.example.com的访问。
mod_proxy虽然能对后台任何的HTTP服务做反向代理,却把泛域名访问给挡在了门边。另外我也终于明白了为什么试验服务器上的Tomcat访问日志里,来源都是127.0.0.1——因为来源都是Apache这个代理。
mod_jk的配置里,虽然仍然需要输入Tomcat的Host,但是似乎AJP协议的保留了前台访问的域名(后台程序通过request.getServerName()获得)。而客户端的IP地址也被成功的记录下来。有兴趣的同学们可以参见AJP 1.3的协议参考。mod_jk的配置就不贴出来了,具体可以看开头介绍proxy_ajp的那个链接

ebay实习 笔经+面经

上周四和周五,ebay来学院招实习。这么个送上门来的机会自然不能错过,宿舍三人同行去笔试。之前问了点笔试的内容,说考了不少英语,还有些类似GRE的数学题(个人估计就是简单的SHL),还有就是数据结构。
宣讲会很热闹,我们到晚了,里面又很闷,只好在外面候着。见到一些小弟,纷纷问我怎么也来了。唉,人老大不小了还要和大三的DDMM们抢实习。
笔试的题目有些出乎我的意料之外。25题,全选择,30分钟完成。题目不是很难,但时间紧,典型是压力测试。多亏我有过SHL的一些经验,很快进入状态完成了前面8题逻辑,最后一题暂时没头绪,直接放过。中间是技术题,Java、C++、SQL,仍然有一两题不是很确定。但时间不容许我再仔细思考,直接上最后8题的阅读理解。做完阅读理解后回头看了看前面不确定的答案,等我刚填好所有的答案之后大概10多秒,HR就宣布考试结束。收走了试题册后,HR又出了题小作文,写了6、7句话就交了。
和舍友们回浦口校区吃了启明园,想起了上个学年偶尔在启明园的日子,特别是那段暑假留下来上课的时刻。吃饱了突然想去看看从未踏入的工作室新址,如果再不去的话,南大远走仙林以后再也没机会见一眼了。见到了王子龙和刘白光,还有一位DD素未谋面,难道是remember2015?回鼓楼的路上,我们三人陆续收到了明天面试的通知,痛苦的是8:15开始的面试6:30就得起床,郁闷的是居然把我的名字写错了,还错得很夸张。有消息说我笔试考了第一,不过怎么算,也错了3、4题吧。
第二天的面试分为两大轮,单面和群面,通过单面的才能进入群面,而单面又分为三轮,每一轮都有被淘汰的可能。笔试的淘汰率不高,大概只有50%,所以今天有90人参加面试,角逐只有个位数的实习岗位。
我是名单上的第一个,自然就第一个进了面试教室。第一个面我的估计是个一线开发人员,比较casual,一直让我不要紧张。除了我的项目,就是问一些比较泛的技术问题,还有一些通用的技术手段,比如Web性能调优的一些方法。最后简单问了点英语然后就送我进二面。二面估计是个项目经理,主要围绕项目来谈,也问了我的实习时间。三名应该就是CDC部门经理了(主要是前一天的宣讲到晚了,没看清楚,不然应该认得),要我用英文描述我的技术优势,并举个例子证明。我的回答没让他满意,重来了一次后,他说我简历上其实有很多可以谈的东西我都忽略了。不过他最终还是让我进了群面。
群面和想象的一样,一群人讨论一个Open Question。发挥一般,发言量低于平均水平,而发言也没什么突出的地方,主要随大流了。那个时候第一肚子很饿,6:40吃的早饭,12:40群面才开始,期间粒米未进;第二困,前一个晚上没睡好,折腾APIS到近1点,上床了也没睡安稳;第三,心情很复杂。负责任的说,我应该是所有参加面试的人中心情最复杂的一位。即使我拿到了Offer,能否成行也是未知数;第四,脑子里还在纠结APIS的一个服务配置问题,总想着把这个搞定,早上为了这个面试时小老板给我打了6个电话。综合上面的原因,群面中我基本上没怎么主动发言。
面试结束后倒是很轻松,回鼓楼宿舍睡觉。晚上还要赶赴上海,第二天的雇主见面日。。。
小结:以后面试要带吃的,前天晚上要睡好,排除其他干扰。要准备一些有关自己能力的一些材料,以免面试时磕磕巴巴。

惠尔浦

一辈子也想不到除了购买家电以外,会和这家公司打上交道。周六的雇主见面日,安排给了我第三志愿的这家来面我。难道是看上了我的工科背景?汗。。。