自去年(2013年)11月实习已经过去了八个月了,期间因为实习的第一家公司老板自己的原因经营不再继续,那个公司的经理把我们剩下两个程序员和他一个在北京的朋友聚在一起,成立了一家新公司,打算依托PMP和PMBOK项目管理方法论,做一个项目管理系统。但是很不幸的,这家新公司从今年1月成立一直到7月上旬,没有产生盈利,而且产品商用遥遥无期,就在7月9日原计划还有一个内部的产品讨论会的,突然就宣布公司不再经营了。
因为我是专科出生,没钱没地位没学历,虽然学校成绩看起来还不错,但是学校里面教的老掉牙的东西,还是得靠自己学习,而且现在企业对专科程序员都不感冒啊……两个公司,从ASP.NET WebForm到MVC 5,可惜我都没有完整的经验——两个公司,流程非常不正规,没有各种说明书、版本控制形同虚设、没有编码规范……我和同学说,这就是传说中的作坊?
9日早上宣布公司不再经营,中午老板带着几个人出去吃了个饭,饭后我一个人走路到了傅家庄海边,在海里站了一个多小时,和家里打了应该是三年来最长的一个电话,我说失业了,但是我很开心——或许是能从这样一种不健康的编码状态中解放,或许是我一直期待能有个长假让我不必再每天起床和睡前思考这个东西应该怎么设计,听人使唤(虽然我乐于奉献),连休息的时候还得听着教唆(背后说别人坏话很不好,但这和这个人做人有关,有机会我分享一下这两个公司的经历)……总之,这次失业给我的是一个解脱。
休息了两天之后还是觉得得马上找工作吧,应该不会那么容易。果不其然。
大连,是浪漫之都,也是对日软件外包之都……能叫得上名的,基本都给日本做外包,而且以Java为主,所以很多同学都是学Java的,就我上学的时候自己研究.net,不过.net真心好啊,我自己用的舒服就好。不过我舒服了,工作就不好找了,之前花了一晚上更新简历:简历是我用InDesign做的,虽不是非常精美,但我的最终目的是为了表现我的不同和我的诚意(要不是OneDrive网页版被墙了,我就贴出来大家看看了,我也不是自我感觉良好啊,就是觉得诚心很重要);其次,完善了智联招聘和51job上的简历,因为中华英才、大街这些网站没有合适的就没有完善了。
因为我是专科生(怎么感觉和老罗的“考虑到我们是小厂商”一样 - -),又没有日语基础(在招聘网站上清一色的日语三级以上,要求能看懂式样书,N年开发经验);筛选条件加上ASP.NET的活,还有一些三五年以上经验的,但要加上MVC就寥寥无几了 =。= 如果会日语……没准可以去埃森哲的那个对日MVC试试,可惜不会啊,这时候就是少壮不努力,老大徒伤悲。
虽然是职位很少吧,但是凡是招聘需求里写了“精通”的,我是一律不投的,哎呀别说,这个专科生还真是自以为是。其实就是很想吐槽一下,我一个应届毕业生要“精通”,精通了我还去你这破公司?于是我很装逼的度过了一周,招聘网站显示简历被阅读0,我就呵呵了,你们不看就算了,浪费我的心血和时间,直接给hr的邮箱投递吧,还真好,一个hr就给我来了电话,告知下周一(也就是昨天)面试。
我是真的真的不是很想说……都是些低级错误,太低级了,毫无专业性,人生的污点,唉。不过本着娱乐大众,以及年轻就是来犯错的的精神,还是分享给大家。真的是毫无专业性,有损专业性的错误……
还有,我发现面试之前憋着尿是个防止紧张的好办法……昨天提前半个小时到硬是没找到厕所,还有15分钟的时候我打算进入他们办公区借个厕所,天呐谁知道还有前台,直接歹着我见hr就开始比试了……一点也不紧张………………
笔试题目看起来是从网上直接down下来的,一开始对方对我的专科能力表示了质疑,没办法低人一等嘛,我就开始憋着尿,坐着写。其中有两题我犯了低级错误拿来分享一下(真的是从这个错误上看不出我是学计算机出生……)
第一题:有这样一个数列 1 1 2 3 5 8 13 21 …… 求第30位是多少,通过递归实现。
第二题:有这样一个表Table1用于记录事务,他由ID和LastUpdateDate,ID表示更新的事务号,LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号。
是不是很脑残的两道题…有时候真的就是,在现场脑袋会懵掉的,回到住处之后细细一想……说多了都是泪。
下面分析一下我的心态、失败原因以及解题思路。
第一题:在写的时候我就震惊了,目测这么麻烦,数学不好的我直接跳过了,想想都很难啊!!!!递归,只做过阶乘,只记得递归需要有一个退出点,这个第30位,传30到方法里,也算不出是多少啊啊啊啊 =。= 肿么办 肿么办
这题我首先就被自己的心态打败了,可能也是笔试比较赶时间;另一个问题就是定势思维,定势思维是个很可怕的东西,一旦进去了再也出不来了……
而且回到家之后我仍然被这个定势思维卡住了很久,直到后来是因为我想看看第30位是多少,写了一个简短的计算:
long[] longArr = new long[40]; longArr[0] = 1; longArr[1] = 1; for (int i = 2; i < longArr.Length; i++) { longArr[i] = longArr[i - 2] + longArr[i - 1]; } for (int i = 0; i < longArr.Length; i++) { Console.WriteLine("{0}: {1}", i + 1, longArr[i]); }
其实在写这个数组的时候就已经豁然开朗了,(如果把给Arr[0]和[1]写到for里面进行判断就更明显了,写出来之后自己才发现)很明显的当 i <= 2 时返回 1,当i > 2之后计算 (i - 2) + (i - 1),所以递归方法:
static long Calc(long i) { if (i <= 2) return 1; else return Calc(i - 2) + Calc(i - 1); }
写出来之后我就笑了……太脑残了。
第二题更脑残,前一题好歹还得动动脑筋,这一题真的就是人生的污点……
这好像是第四题,已经有上一题的阴影了,影响还是比较大的,当时看到这题第一反应居然是使用聚合函数MAX(LastUpdateDate)查出最新的时间,然后子查询WHERE LastUpdateDate 等于这个最新时间,但是这有一个致命缺点,若LastUpdateDate不唯一,查出的ID就未必是最新一条的,当时我就傻了,心急啊,整个人抓狂状
另外就是自从用ASP.NET MVC之后呀,使用Entity Framework的Code First了,半年没怎么写SQL语句了……都是用LINQ,当时却没想用LINQ怎么写(如果想了想很容易发现应该用OrderByDescending(x => x.LastUpdateDate),只是背负了这个心理负担,认为自己肯定做不出了,没救了。
其实这题就是个脑残的ORDER BY,但是不知道为什么,自己面试当时就是没想到,思路卡在第一反应,而且特别心急,大家也要避免这样的问题。这题我觉得这样比较好,倒序排列总能让最新一条排在最上面,当然数据库不是我的本行,有新想法大家可以说哦:
SELECT TOP 1 ID FROM Table1 ORDER BY LastUpdateDate DESC
啰嗦了这么多,最后还是总结一下,主要就是三方面:
好了,啰嗦了这么多,我还是觉得年轻就是来犯错的,不过既然我犯了这些错,大家就不要重蹈覆辙了!不觉得很丢脸么 =。=!!!真的就是心态很重要!!
后面和开发一部负责人面的还是比较愉快的,以前做过的“花印相机”演示了一下效果很好,他说我是实战型的,理论知识可能并不是很扎实,但是能做得出东西,但这样的人往往容易做出一些维护成本较高的代码(事情),我也会注意的。
不管这家公司最后要不要我,我觉得都收获很大,重要的不是结果而是过程,当然,结果好那就更好拉^^
这么多年看博客园,第一次发文章,大家一起努力,共勉!