设为首页收藏本站

爱吱声

 找回密码
 注册
搜索
查看: 4782|回复: 18
打印 上一主题 下一主题

猛批烂书 程序员面试宝典 下 (施工中)

[复制链接]
  • TA的每日心情
    奋斗
    2018-9-13 10:09
  • 签到天数: 1 天

    [LV.1]炼气

    跳转到指定楼层
    楼主
    发表于 2011-10-23 00:31:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 晨池 于 2011-10-23 00:36 编辑

      在上篇中,我有提到过,我自己在面试和被面试上都有一定经验,既然把这本宝典批的一无是处(它确实一无是处),不破不立,我也谈谈我认为程序员工作的一些注意事项,希望能对找工作的同学有所帮助吧!

    你应该做程序员这份工作吗?

      说实话,IT这棵平衡二叉树上,有很多不应该做程序员的人栖息在上面——不过好消息是,其他行业也一样,而且比例差不多。

      当你大学快要从计算机学院或者其他的学院毕业开始找工作的时候,请先考虑一下:你应该做什么工作?这个问题需要你和家长、老师、师兄师姐、业界同行多多交流,和你自己多多思考。但是我想我可以在这个问题上帮助一下你:是否应该做程序员?(在另外一个问题上,我想我可以替你回答:是否应该买程序员面试宝典这本书?当然不!)

      首先,对于爱好编程的人——那没什么好犹豫的,来吧,根节点就在你面前,快顺着根节点爬上IT这棵二叉树吧!爱好不是你说爱好就爱好的,对于爱好的鉴别,我觉得忙总给出的办法很好:看看你是否能拿着平均工资或者平均工资以下的水平从事一件事十年。对于在校大学生,可能对平均工资没有太多概念,那么换个说法:如果你纯粹出于自由意愿,在编程和玩你最喜欢的游戏之间,选择了编程,那么十有八九,你是爱好编程的。对于这样的情况,即使你不是计算机专业毕业的(甚至你是学文科的),我也建议你从事程序员这份工作,因为你拥有最大的优势:爱好。有了这个,一切艰辛对你来说都不在话下,只管爬上这棵二叉树做一头程序猿,总有一天所有的叶子节点都会属于你的!

      话说,爱好计算机确实是一个比较有优势的东西,你既满足了自己的兴趣,又能养家糊口。要知道,这世界上很多爱好是根本不能挣到钱的。如果你是计算机专业的学生,但是你又爱好其他的行业,那么我也鼓励你从事自己的爱好(其实你也经常这样鼓励自己吧?),不要犹豫,至少你有爱好。大部分的同学,可能并没有明确的爱好,所以才会有那么多人在找工作上如此纠结吧。

      如果你没有明确的爱好,家族也没有给你提供很好的替代,那么,作为一个计算机专业的学生,从事计算机相关行业是比较好的,毕竟这是你的专业。但是计算机相关专业,不仅仅是程序员,还有售前支持、售后支持、投标、工程、销售……选择是很广的,比如说你比较擅长和人打交道,在回家的火车上经常很快就能和邻座的旅客谈得来,那么销售应该是很好的选择。一个比较好的办法是直接去IT公司的招聘网站,找他们的职位要求,看看哪些是和你的特长符合的。如果最后什么也没有找到,那么至少程序员还是一个可以接受的选择,你并不是无奈的选择了这份职业,它是你的专业,也可以让你养家糊口。  

      不得不提的一句是,如果你不是这个专业,不爱好编程,那么千万不要妄想或者听信一些培训机构的忽悠,为了挣钱而进入这个行业。千万不要进入,不仅挣不到钱,还会很痛苦。网上抱怨程序员生活凄惨的帖子,一半以上都是这样的人发的。

      总结一下,如果你爱好,那么千万不要犹豫;如果没有其他的有力条件,那么选择你的专业好了,这是一个稳妥的选择。刚刚毕业的学生,很少有能一下就选对自己的工作的,在自己的专业工作,至少给自己留出了足够的缓冲。除此以外的情况,恐怕都不适合做程序员。



    苦练内功

      如果你把做程序员作为工作的话,那么,在找工作以前先要做好准备。

      在程序员面试宝典里面,列出了很多面试题,似乎给你一个印象:我只要把面试可能遇到的题目做一遍,通过笔试面试就可以了?实不相瞒,这纯属痴心妄想。面试官看完笔试以后还要面试,面试的时候很可能会问你:解题的思路;有没有做过什么实习或者课程设计?做了什么?……做面试的人,往往都是工作至少两三年的老骨头,面对毕业生要看出他/她有多牛未必可以(有这么牛的),但是要看出来水平是不是很菜,真是轻而易举。

      基本上,如果你大学课程学的中规中矩,专业课很认真的去学了,作业和课程设计也都是自己做的,能用至少一种编程语言写出堆排序(或者快速排序),那么找一份工作已经足够了,可以跳过此章节。否则的话,那就参考一下下面的意见,准备吃点苦头。

      静下心来,好好准备。你可能需要至少一个月,每天十二个小时以上投入。

      目标:基本掌握一种编程语言,理解递归算法,能够按照算法写出堆排序。

      语言:就用你以前课程上学的那种语言(不外乎C/C++/Java),如果没学过,选C。

      教材:语言方面,尽量用你们上课用的教材,如果很多人都对原来的教材不满意,那么C++可以用C++Primer;C可以用谭浩强的C教材;Java不了解,有人推荐Think in Java,但是我觉得这本书太大块头了,实在没得选,就找美国教材的中译本,不要超过500页为宜。

      算法和数据结构方面,就用严蔚敏的数据结构,C语言版即可,对于学C++和学Java的人,看C程序应该没问题。不要用外国教材,严蔚敏老师的教材是最合适的。

      学习语言:先学习语言,从第一章开始基本上一页不拉的看,书上的例题和练习题要一定一道不少的编程写出来,看书一个小时,对应编程的时间应该不少于三个小时。如果你选的是C语言教材,那么就一页不也漏掉的看完,因为C语言本身东西不多,教材也不会太厚,如果这样你还要跳过一些东西,那么不客气的说一句,快毕业了还不能写出像样的程序原因也很清楚了。对于C++或者Java教材,一方面语言本身的东西很多,另外这样的书,往往会介绍一些应用相关的东西,所以可以适当的忽略一些章节,一般都是后面的。不可以忽略的是:与语言本身相关的(介绍顺序、选择、循环结构的,介绍类、运算符等关键字相关的,介绍文件操作的,介绍流的)、介绍多态的、介绍继承的、介绍封装的;可以忽略的是:介绍应用的,比如C++图像编程,MFC库(现在了应该没了),或者java一些架构的(这个深入以后应该了解的)。遇到不懂的问题,好好思考,不要走神,自己想不出来,就调试一下,单步跟踪,还不行,就在网上搜索一下,注意,如果搜着问题就跑到了论坛上灌水,那么灌水时间是算在十二个小时以外的。

      好像很笨的办法,不过也就是这样,自古华山一条路。等你把这本书基本上每一页都看完,每一题都做完,一个月应该过去二十天了,你也应该能写一点不涉及算法的简单程序了(至少可以写求阶乘的程序了)。不过,每一页基本看完,是个可以完成的任务,但是每一题都作为,没有了基本,就比较难了,往往会遇到有些题目你苦思冥想了五分钟还是找不出答案,于是跳过去……然后遇到更多更难的题目。这怎么办?我不是你的老师不能去教你,即使你的老师也不会教你一道题目怎么做,但是我有一个很有效的办法:

      做不出来不吃饭,继续想,去网上搜(但是不要求助),至少饿一顿,饿到觉得眼花为止(这说明你已经尽力了),然后去网上求助(比如CSDN),去做下一道。就是要给自己施加一点以前没有的压力,不然怎么能做出以前做不出的事情?

      学习数据结构:在完成语言的学习以后,就可以开始学习数据结构了。严蔚敏老师的教材讲的是比较清楚的,内容对于一个学期来说很合适,但是对于剩下的十天时间,是不够的,所以后面的红黑树、平衡二叉树,或者其他名字更古怪的数据结构(迪杰克拉斯算法……贪婪算法……)就别打算在这十天里看了。这些内容,是你必须看和做的:链表、各种链表、数组、查找、排序、各种排序、二叉树、二叉树的各种遍历方法,这些内容可能在书里占了一半左右,这次是一页不拉的要看完,编程也要一道不拉的写完。数据结构看书如果一个小时,编程可能也是一个小时左右,因为数据结构更多的是要你思考和理解:为什么是这样?这样有什么好处?有什么坏处?怎么在程序中实现这个数据结构?在你看书的时候,一定要带着这四个问题去拷问每一个数据结构。

      学习数据结构的时候,遇到不懂的问题,一定要多思考,不要在网上搜索或者求助。我个人感觉,语言上的东西,知其然就可以了,就会用,是比较简单的,当然怎么应用就是应用之妙存乎一心,需要知其所以然,不过这也不会在你应聘的时候考察;然而数据结构往往是参杂了算法的,必须理解,必须知其然更要知其所以然,不然就是白学,所以在不懂的问题面前,一定要认真思索多动脑筋,写成程序,调试、看变量、看程序流程,想为什么。一遍不行两遍,两遍不行死编,挨个左移一位就行了。

      需要着重强调的,是递归。在计算机的二进制世界,法师和麻瓜的区别就是递归,掌握了所有的编程语言但是不懂递归,只不过是一个买到了所有的魔法原料但是不知道怎么配的大款麻瓜。所以在学习数据结构的时候,一定要理解汉诺塔、堆排序、二叉树的前中后序遍历等典型递归算法,最好能做到把递归算法改成非递归——当你做到这一步,刚刚进入魔法学校名人堂的丹尼斯校长(Dennis Ritchie)会悄悄的为你别上一枚麻瓜们永远看不到的光荣徽章。

      然而对递归的理解,不是那么容易,以我个人看法是只能靠你自己去领悟,认真的多看几遍严蔚敏老师的教材里相关的内容,好好思考和领悟。也许可以分成这样三个步骤:第一步,是知道典型的递归算法是怎么个流程,而且能自己比葫芦画瓢的写出来;第二部,要理解递归算法的工作机制,知道递归结束条件是什么、能根据递归初始条件算出会递归多少次、能给出任意一次递归的初始条件和流程;最后,能自己用递归的思想解决问题,并且转化为非递归算法。

      最后要说的是,如果你在学习结束了还不能理解递归,不要着急。递归本身不是一个人类的概念,而是计算机的概念,所以我们作为人类中的一员,要理解递归的思想绝对不是一件容易的事情,要用递归的思想解决问题,更是困难的。现在不理解没关系,记住它,在以后的工作中,或者以后有时间了,把严蔚敏老师的书找出来,翻出相关的章节继续。而且不理解递归也不会对你找工作产生太大影响,说实话即使工作以后,用到递归的机会也不多——但是每一次用到递归的机会,都是你让你的头知道,你与众不同应该涨工资的机会。

      考核:经过一个月以后,或者一个半月两个月,都有可能,你对编程有概念了,可以写稍微复杂的程序,能够在完全独立的情况下编程实现链表排序和最简单的查找、最简单的排序。这真的是最低要求,如果达不到,请重来一个月,并检讨上个月是不是每天十二个小时以上。最高要求是:1、你能把任意一个递归算法改成非递归;2、对于C++/Java的要理解多态。

    寻找目标



    临阵磨枪



    准备简历



    参加面试



  • TA的每日心情
    开心
    2018-3-27 20:38
  • 签到天数: 83 天

    [LV.6]出窍

    沙发
    发表于 2011-10-23 13:11:38 | 只看该作者
    还有后续啊!一切的成就都是实干出来的。

    点评

    是啊,苦头总是要吃的,不是早吃就是晚吃,不是主动吃,就是被迫吃,唉~人生啊,还好总是苦尽甘来  发表于 2011-10-23 19:27
  • TA的每日心情
    慵懒
    2019-10-7 01:15
  • 签到天数: 235 天

    [LV.7]分神

    板凳
    发表于 2011-10-24 01:43:45 | 只看该作者
    多谢分享~~看完了我只有一个感受,我估计不适合做程序员。
    虽然作模拟运算我有时候要写点程序,但和文中真正写程序人比起来,我这纯属打酱油~~

    点评

    能做程序员谋份生活,就适合做程序员,毕竟不是每个人都爱好自己的职业的,但是绝大多数人,都能胜任自己的职业不是  发表于 2011-10-26 22:10

    该用户从未签到

    地板
    发表于 2011-10-24 07:32:57 | 只看该作者
    有一点商榷,很多人不太推荐谭浩强的C语言,认为错误不少,代码书写不规范.多数人推荐的是The C Programming Language.
  • TA的每日心情
    开心
    2018-3-27 20:38
  • 签到天数: 83 天

    [LV.6]出窍

    5#
    发表于 2011-10-24 08:28:12 | 只看该作者
    我两本都看过,如果英语不是非常烂的话,看the C Programming Language 更好。
  • TA的每日心情
    奋斗
    2018-9-13 10:09
  • 签到天数: 1 天

    [LV.1]炼气

    6#
     楼主| 发表于 2011-10-24 23:54:32 | 只看该作者
    akboz 发表于 2011-10-24 07:32
    有一点商榷,很多人不太推荐谭浩强的C语言,认为错误不少,代码书写不规范.多数人推荐的是The C Programming L ...

    谭浩强的书虽然有错误,但是是中文的,而且门槛比较低,是一本中规中矩的教材,我觉得比较适合初学者上手(当然进一步提高就算了),所以有此推荐。K&R的教材虽然经典,但是是英文的,对于急需提高自己的同学来说可能不太合适,要是有中文版就好了。
    唉,提到了Dennis Ritchie……
  • TA的每日心情
    奋斗
    2018-9-13 10:09
  • 签到天数: 1 天

    [LV.1]炼气

    7#
     楼主| 发表于 2011-10-24 23:56:45 | 只看该作者
    阿雷 发表于 2011-10-24 08:28
    我两本都看过,如果英语不是非常烂的话,看the C Programming Language 更好。

    额……老谭的书和The C Programming Language比,简直就是星星与日月争辉呀,哈哈。你看The C Programming Language的时候有没有回想起谭浩强的书的时候,瞎问一个(我真不是好人)
  • TA的每日心情
    开心
    2019-2-20 08:00
  • 签到天数: 108 天

    [LV.6]出窍

    8#
    发表于 2011-10-26 00:53:23 | 只看该作者
    akboz 发表于 2011-10-24 07:32
    有一点商榷,很多人不太推荐谭浩强的C语言,认为错误不少,代码书写不规范.多数人推荐的是The C Programming L ...

    十分认同。
  • TA的每日心情
    开心
    2019-2-20 08:00
  • 签到天数: 108 天

    [LV.6]出窍

    9#
    发表于 2011-10-26 01:01:14 | 只看该作者
    仅仅就C/C++语言来说, 俺个人觉得不错的系列:
    The C Programming Language; C++ Primer;
    Effective C++  / More Effective C++ / Effective STL
    Inside the C++ Object Model
    Exceptional C++ / More Exceptional C++
    把这一系列看下来,C/C++基础就不错了。
  • TA的每日心情
    开心
    2019-2-20 08:00
  • 签到天数: 108 天

    [LV.6]出窍

    10#
    发表于 2011-10-26 01:03:54 | 只看该作者
    顶! 楼主很热心。 请继续,帖子不要太监。。。

    该用户从未签到

    11#
    发表于 2011-10-26 21:03:50 | 只看该作者
    其实我是一直觉得,想学编程,比较好的入门语言应该是 python 这种,C 这东西很容易学 3 个月啥也不能做,又容易自己拿枪打自己的脚,特别打击入门者。

    要说 C/C++ 教材的话,谭浩强的那本 C 其实还可以,不过如果是真心想搞计算机这行的,还是 TCPL 更好,毕竟搞这行英语阅读能力不过关,往前走的路要短很多。学 C++ 的话,C++ Primer 实在太大了,打击热情而且也不一定有必要。有一本 Accelerated C++ 还不错,篇幅比较合适。
  • TA的每日心情
    奋斗
    2018-9-13 10:09
  • 签到天数: 1 天

    [LV.1]炼气

    12#
     楼主| 发表于 2011-10-26 22:04:46 | 只看该作者
    意广才疏 发表于 2011-10-26 21:03
    其实我是一直觉得,想学编程,比较好的入门语言应该是 python 这种,C 这东西很容易学 3 个月啥也不能做, ...

    哈!我学C++就是用的TCPL,那个真是好书,我觉得TCPL和C++Primer相比在于,TCPL是循循善诱,让读者自己通过编程来发现和掌握C++的各种特征;然而C++Primer是直接就把C++的各种特征写在书里了,然后给出验证的程序(有的比较简单就略了)。TCPL适合动手能力强喜欢动脑子的,C++Primer就更有点手册的倾向。
    TCPL唯一的缺点……就是没有中译本啊
    谭浩强的教材只能用来入门,要真正掌握一门语言,还需要你提到的这些教材。但是我写这些,针对的是大四了才发现自己找不到工作的同学,所以推荐的时候尽量选熟悉的(自己上课用的是首选),容易入门的(老谭),中文的(C++Primer),对于英语教材就不做推荐了,毕竟,肯下工夫学好英语的人应该也比较在乎自己的功课不至于临时了才发现连个工作也找不到吧。
  • TA的每日心情
    奋斗
    2018-9-13 10:09
  • 签到天数: 1 天

    [LV.1]炼气

    13#
     楼主| 发表于 2011-10-26 22:05:33 | 只看该作者
    Radiohead 发表于 2011-10-26 01:03
    顶! 楼主很热心。 请继续,帖子不要太监。。。

    不会不会~现在是收集意见期,慢慢的,改好了转出去,也希望能对找工作的同学有点帮助嘛
  • TA的每日心情
    奋斗
    2018-9-13 10:09
  • 签到天数: 1 天

    [LV.1]炼气

    14#
     楼主| 发表于 2011-10-26 22:07:28 | 只看该作者
    Radiohead 发表于 2011-10-26 01:01
    仅仅就C/C++语言来说, 俺个人觉得不错的系列:
    The C Programming Language; C++ Primer;
    Effective C++  ...

    这个书单真详细,我借用到我帖子一下吧~
    那个The C Programming Language最熟悉了,我学C++就是用的这个。以前上大学的时候我就喜欢C,觉得C++太丑了!两个冒号凑在一起,算什么?!
    TCPL看完以后,C++确实了不起了。
  • TA的每日心情
    奋斗
    2018-9-13 10:09
  • 签到天数: 1 天

    [LV.1]炼气

    15#
     楼主| 发表于 2011-10-26 22:09:32 | 只看该作者
    akboz 发表于 2011-10-24 07:32
    有一点商榷,很多人不太推荐谭浩强的C语言,认为错误不少,代码书写不规范.多数人推荐的是The C Programming L ...

    谭浩强的书,主要是入门容易,所以我写在这里,毕竟针对的是急于提高自己能找到工作的同学们。
    要深入掌握C语言,除了练习,确实很有必要找本好书,The C Programming Language是不二之选,在后面的内容里,我把它加进去

    该用户从未签到

    16#
    发表于 2011-10-28 16:48:23 | 只看该作者
    晨池 发表于 2011-10-26 22:04
    哈!我学C++就是用的TCPL,那个真是好书,我觉得TCPL和C++Primer相比在于,TCPL是循循善诱,让读者自己通 ...

    The C++ Programming Language 有中文版的,裘宗燕译。只不过翻译得有些晦涩,还不如英文版的好懂呢
  • TA的每日心情
    奋斗
    2018-9-13 10:09
  • 签到天数: 1 天

    [LV.1]炼气

    17#
     楼主| 发表于 2011-10-28 20:12:26 | 只看该作者
    PenPen 发表于 2011-10-28 16:48
    The C++ Programming Language 有中文版的,裘宗燕译。只不过翻译得有些晦涩,还不如英文版的好懂呢 ...

    中文版我真不知道,不过TCPL的英文真的是很舒服,听说原因是因为作者本人母语不是英语,所以写书得比较好懂
    我印象最深刻的单词是vice versa,在这本书里用的很多

    该用户从未签到

    18#
    发表于 2011-10-28 21:38:58 | 只看该作者
    本帖最后由 PenPen 于 2011-10-28 21:49 编辑
    晨池 发表于 2011-10-28 20:12
    中文版我真不知道,不过TCPL的英文真的是很舒服,听说原因是因为作者本人母语不是英语,所以写书得比较好 ...


    本科上课的时候用的这个中文版。有时看不懂的时候就跑去图书馆看原版的

    点评

    哈哈哈,笑死啦,按说裘宗燕翻译的应该还行吧,到这个地步~不过,你们选课本选的真好  发表于 2011-10-28 21:46

    该用户从未签到

    19#
    发表于 2011-10-28 22:07:14 | 只看该作者
    晨池 发表于 2011-10-28 20:12
    中文版我真不知道,不过TCPL的英文真的是很舒服,听说原因是因为作者本人母语不是英语,所以写书得比较好 ...
    晨池  哈哈哈,笑死啦,按说裘宗燕翻译的应该还行吧,到这个地步~不过,你们选课本选的真好  发表于 13 分钟前


    裘老师的实力还是很强的,只不过有些地方实在是晦涩,一些名词还是自创的翻译,像interface翻译成界面,inline翻译成在线等等。。。。

    手机版|小黑屋|Archiver|网站错误报告|爱吱声   

    GMT+8, 2024-12-26 16:10 , Processed in 0.060710 second(s), 24 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表