关闭

牛人博客汇总之摘抄(Talk is cheap, show me the code.)

1571人阅读 评论(1) 收藏 举报
分类:

http://blog.csdn.net/zjf280441589/article/details/26058431

1、读书计划的第一步是选择书籍,我曾向当时我觉得很牛的"学长"和"大神"请教应该读哪些算法书籍,"学长"们均推荐算法导论,还有几个"大神"推荐计算机程序设计艺术(现在我疑心他们是否翻过这些书),草草的翻了下这两本书发现实在看不懂,但幸运的是我在无意中发现了豆瓣这个神奇的网站,里面有很多质量不错的书评,于是我就把评价很高而且看上去不那么吓人的计算机书籍都买了下来——事实证明豆瓣要比这些"学长"或是"大神"靠谱的多得多。

2、这本书的课后题大多都是经典的面试题目,以至于日后我看到编程之美的第一反应就是这货的题目不全是抄别人的么。---维斯《数据结构与算法分析》

3、算法引论是我这时无意中读到的另一本算法书,和普通的算法书不同,这本书从创造性的角度出发——如果说算法导论讲的是有哪些算法,那么算法引论讲的就是如何创造算法。结合前面的算法设计与分析基础,这本书把我能解决的算法问题数量扩大了一个数量级。-------《算法引论》《算法导论》《算法设计与分析基础》

4、stof(字符串转浮点数)   -----百度面试

纸上编码。这也成为了我之后找工作面试的三板斧之一。

总之,算法是一种将有限计算资源发挥到极致的武器,当计算资源很富余时算法确实没大用,但一旦到了效率瓶颈算法绝壁是开山第一刀(因为算法不要钱嘛!要不还得换CPU买SSD升级RAM,肉疼啊!!)。一些人会认为这种说法是有问题,因为编写新算法的人力成本有时比增加硬件的成本还要高——但别忘了增加硬件提升效率也是建立在算法是Scalable的基础上——说白了还是得撸算法。

实习实习着就到了研二暑假,接下来就是求职季。

求职季时我有一种莫名的复仇感——尼玛之前百度实习面试老子被你们黑的漫天飞翔,这回求职老子要把你们一个个黑回来,尼玛。

现在回想当时的心理实属傻逼+幼稚,但这种黑暗心理也起了一定的积极作用:我丝毫不敢有任何怠慢,以至于在5月份底我就开始准备求职笔试面试,比身边的同学早了两个月不止

5、《Algorithm Design Manual》

因为很多Coding Interview的论坛都提到这本红皮书,我也跟风搞了一本。事实证明,仅仅是关于Backtrack Template那部分的描述就足以值回书价,更不用说它的Heuristics和课后题。

6、这两本书就不用多介绍,编程珠玑更多的编程珠玑,没听说过这两本书请自行面壁。前者偏算法理论,后者偏算法轶事,前者提升能力,后者增长谈资,都值得一读.
(自己:编程珠玑,看着都难受,更别说,more 编程珠玑了,啊呀,啊哈哈……要看的书,好多,好忧伤好忧伤……)
之后就是各种面试,详情见之前的博客,总之就是项目经历纸上代码正确性证明这三板斧,摧枯拉朽。

7、Algorithms是我重温算法的第一本书,尽管它实际就是一本数据结构的入门书,但它确实适合当时已经快把算法忘光的本屌——不为学习,只为重温。

这本书最大的亮点在于它把Visualization和Formatting做到了极致——也许它不是最好的数据结构入门书,但它绝壁是我读过的排版最好的书,阅读体验爽的一逼;当然这本书的内容也不错,尤其是红黑树那一部分,我想不会有什么书会比此书讲的更明白   --------《Algorithms 4th

8、从接触算法到现在,大概七年:初学时推崇算法牛逼论,实习后鼓吹算法无用论,读研后再被现实打回算法牛逼论。

怎么这么像辩证法里的肯定到否定再到否定之否定。

现在来看,相当数量的鼓吹算法牛逼论的人其实不懂算法的重要性——如果你连用算法解决实际问题的经历都没有,那你如何可以证明算法很有用?而绝大多数鼓吹算法无用论的人不过是低水平码农的无病呻吟——他们从未碰到过需要用算法解决的难题,自然不知道算法有多重要。

总而言之,如果你想成为一个码农或是熟练工(Code Monkey),你大可以不学算法,因为算法对你确实没有用;但如果你想成为一个优秀的开发者(Developer),扎实的算法必不可少,因为你会不断的掉进一些只能借助算法才能爬出去的坑里。

http://blog.csdn.net/zjf280441589/article/details/26057219《如何学好c++》

C++中的任何一个feature都有些实实在在的原因,你一定要去了解为什么要把C++设计成这样的原因,你才能学好C++。有空看看《C++演化和设计》一书。


http://blog.csdn.net/zjf280441589/article/details/13018929

 我奉劝各位职场新人, 刚开始不要期望什么, 放低身段, 去做自己的积累就好了. (想起从社区里看到的一句话: 现在的你, 凭什么翘着二郎腿, 你应该放下你的腿, 身体前倾, 时刻保持战斗姿态)

, 我正式的踏入了北京的土地. 一年中, 我更多的是为公司付出, 自己以javascript研发进入, 后来页面制作也的我搞, php后来我也要做, 服务器我还要搞, 不得不说, 非常锻炼人. 还是前面的态度, 我觉得这种锻炼就是我最大的收获, 从这里开始, 我正式的转向php开发.到2011年3月的时候, 已经觉得公司很不行了, 又碰巧老婆怀孕, 不得不考虑结婚的事情, 因此, 我就辞职, 回家结婚.

虽然后来看做的东西一般, 但在这么短的时间完成这一切, 我觉得实在难得. 虽然我一直自我感觉对自己更多的提升是自己业余时间的学习, 但不可否认, 在这家公司的一年中, 我在团队建设, 团队管理, 团队协作方面也有了质的变化. 在这家公司, 我的薪资得到了很大的提升, 达到了18K, 这是我从来都没有想过的事情. 所以, 我想给诸位职场新人说, 你不要一开始就想要这要那, 只要你做的够好, 终有一天, 你会发现你得到的远比失去的要多.

在前5年中, 我用的网名是selfimpr, 是self-improvement简写而来, 含义是: 自强不息. 5年中, 我从所有可能激励我的地方去激励自己, 让自己可以一直坚持走到今天. 这几天, 我在考虑, 用一个词总结我的前5年. 我想, 这个词就是"积累".
这也正是我想给这个行业的后来者说的, "积累", 并且要是不计回报的积累, 因为你一旦太过计较回报, 你的心就很难平静, 往往就会半途而废.
此外, 还有一点要说的是, 比我基础更差的同学估计也很难找了, 所以, 能不能学有所成, 关键不在你是否有基础, 而在于你付出了多少.

http://blog.csdn.net/zjf280441589/article/details/16878291
我正式开始准备找工作是从4月份开始。在此之前,除了在实验室做所谓的项目,然后就是学习一些基础的东西,主要包括C++STLLinux、算法。这几项其实都学的比较浅。看过的书有:《C++Primer》、《C++标准程序库》、《STL源码剖析》、《深度探索C++对象模型》、《EffectiveC++》、《鸟哥的Linux私房菜》。到了4月份,参加了腾讯是实习生招聘,结果是挂了。我报的是后台开发。由于没有Linux项目经验,面试官狂问数据结构和算法。一面还好,顶住了。问到的题目有:非递归二叉树遍历-纸上写代码、shell排序、基数排序、找出一堆数中出现次数大于总数一半的数,还有一道算法题是:给出一天内的很多条QQ号的登入及登出记录,每条包括时间、QQ号、标记是登入还是登出的标记符。要求求出一天中最大在线人数。(精确到秒)。基本都答出来了,顺利进入二面。二面面试官瞅了一下我的简历,就开始问算法。四道算法题,具体题目可以看这里.
在这里需要说明的一点是,根据我的了解,实习是一把双刃剑。如果能去好的公司实习,能够获得实习offer,这样能够给自己的简历锦上添花,再去面试别的公司也是一个筹码。但是如果不能获得实习offer,就失去了复习打牢基础的时间,在笔试面试中会很吃亏。所以,大家一定要考虑清楚.

1、数据结构和算法

在之前已经阅读了一遍《算法导论》,感觉学的不够深入,很多都忘记得差不多了。因此重新阅读了重点部分,而且用C++编程实现。比如:链表、二叉树、AVL树、红黑树等等。图的算法就看了搜索算法:BFS以及DFS。然后另外在网上找了A*搜索算法的资料看了下。一提到搜索,A*算法肯定是少不了的。之后又看了《编程之美》、《剑指Offer》。不仅仅要看书,还要总结。尤其是笔试面试中出现频率很高的链表以及二叉树的操作,我将各种操作进行了总结,并且练习白纸写代码。白纸写代码是一项重要的基本功,包括边界条件考虑、书写风格等等,会直接决定面试官对你的印象,因此我着重进行了系统训练。《STL源码剖析》看完之后,我已自己动手实现了一些容器:stackquenepriority_queneheap等。另外,我也阅读了网上一些大牛强力推荐的博客资料,比如July的编程艺术等。将前面几本书中不曾出现的一些数据结构和算法看了一下,比如:并查集、K-d树、R树、约瑟夫环问题、数据库存储的倒排索引等等。整体讲,这部分准备的还是很充分的,面试中出现的大部分数据接结构和算法题都解决出来了。

3C++STL

重温面向对象经典书籍《深度探索C++对象模型》。这本书介绍面向对象机制讲的非常不错,这也是笔试面试中经常出现的考点。重温《Effective C++》。关于STL,我想学的更深一点,作为自己的一项可以在面试中发挥的亮点,因此又重新看了STL内存管理、迭代器、traits编程技法、典型容器的原理

笔试题面试题

至于笔试题面试题,也看了不少。大多数在网上搜索的。在这里给大家推荐一些比较好的学习资源吧:

Coolshellhttp://coolshell.cn/

Matrix67大牛的博客:http://www.matrix67.com/blog/

July的CSDN博客:http://blog.csdn.net/v_JULY_v

何海涛博客:http://zhedahht.blog.163.com/

笔试面试的经典:Cracking the coding interview--问题与解答http://hawstein.com/posts/ctci-solutions-contents.html

LeetCodehttp://leetcode.com/

这里有不少笔试题集锦:http://blog.csdn.net/hackbuteer1


项目经历

除了上面的基础知识,也系统梳理了一下自己的项目。虽然项目经历很扯,但是,也需要仔细梳理下思路,不能让面试官感觉读研期间没有做什么事情。把项目流程、关键点、难点、解决方案等等重新回想了下。以便面试官问到这些问题能够很流利地答出来。

因为我在简历上写了博客地址,于是在电脑上敲进去打开看了下。我博客写的文章还挺多的,不过都是些基础的总结的东西。没想到面试官很仔细的看了,觉得还不错。又对着博客问了很多东西。

二面是一个技术面试官和一个HR同时面。首先依然是自我介绍,和一面的自我介绍差不多。项目也许是不感兴趣吧,便开始出算法题,都要求写代码。总共问了两道算法题,不算难。第一道题是两个字符串AB。从A中剔除存在于B中的字符。比如A=hello world,B="er",那么剔除之后A变为"hllowold"。空间复杂度要求是O(1),时间复杂度越优越好。我又问了下字符串中字符是不是仅限于小写字母,它说可以这么认为。那么判断A中字符是不是在B中的话就可以用hash了。这道题不难,直接设置一个count变量,记录A中存在于B中的字符数量。然后设置一个指针遍历字符串A,遇到不是B中的字符往前移动到正确的位置即可。第二道题是求打靶十次,获得80环的概率。我是用类似于八皇后来做的,遍历加回溯。只不过代码没写太全。先想写一个非递归的回溯的,但是楞是憋不出来,于是想着用递归吧,要简单一点。反正写的不全,还是TM代码写少了啊。水啊~~技术方面其他的就是问的课余时间都学些什么。我课余也就学习了NginxLinux。首先就聊了下Nginx,什么进程模型,优点等等。然后问了selectpollepoll的区别。这个很熟悉,很快答上来。之后又问了Linux是如何减少内存碎片的问题的。我就说了下slab,貌似主要应该是伙伴算法。这个问题回答的不好。然后HR问了一些问题,什么家乡啊,职业规划啊,最感兴趣的三家互联网公司什么的。结束了我问什么时候可以出通知,说一周之后。囧!这是不是挂的节奏啊!!!

编程题求根号2的我采用的是二分法,实际上更好的方法是牛顿迭代法。还有错了一道数据库的选择题,数据库真的是不会啊,o(╯□╰)o

  1. 总共写了三个算法题,都要求白纸写代码。因为我平时这方面练习比较多,因此都不是问题,很快就写出来了。第一道题是有一个int型数组,每两个相邻的数之间的差值不是1就是-1.现在给定一个数,要求查找这个数在数组中的位置。我先说了下最基础的方法,那就是顺序遍历,还没说完面试官就打断问有没有更好的方法。我就说可以在遍历的时候进行一些跳跃,提高查找效率。然后他说,嗯,写代码吧。第二道题记不得了。第三道题是一个字符数组,里面的字符可能是a-zA-Z0-9.现在要求对数组进行排序,要求所有小写字符放在最前面,所有大写字符放在中间,所有数字放在最后。而且各部分内部分别有序。我一开始没想到这个数组可能会很大,于是用比较笨的方法来写代码,他过了一会就问我是不是要先分别排序再合并,我说是的。他就问如果数组很大呢?我立马回答出了桶排序。因此大家在开始答题的之前一定要和面试官多沟通,把题目意思搞明白。
  2. 因为我的实验室项目都是图形图像方面的,面试官一点都不感兴趣,于是都是对着我的技能那一栏写的进行提问。先是问了Vim我平时都使用过哪些插件。GDB调试命令:查看栈帧backtrace等等。fork函数的返回值,以及执行过程。linux方面的东西问完之后就开始算法。总共写了三个算法题,都要求白纸写代码。因为我平时这方面练习比较多,因此都不是问题,很快就写出来了。第一道题是有一个int型数组,每两个相邻的数之间的差值不是1就是-1.现在给定一个数,要求查找这个数在数组中的位置。我先说了下最基础的方法,那就是顺序遍历,还没说完面试官就打断问有没有更好的方法。我就说可以在遍历的时候进行一些跳跃,提高查找效率。然后他说,嗯,写代码吧。第二道题记不得了。第三道题是一个字符数组,里面的字符可能是a-zA-Z0-9.现在要求对数组进行排序,要求所有小写字符放在最前面,所有大写字符放在中间,所有数字放在最后。而且各部分内部分别有序。我一开始没想到这个数组可能会很大,于是用比较笨的方法来写代码,他过了一会就问我是不是要先分别排序再合并,我说是的。他就问如果数组很大呢?我立马回答出了桶排序。因此大家在开始答题的之前一定要和面试官多沟通,把题目意思搞明白。
  3. 二面-涂鸦移动

    果然当天下午5点就收到了涂鸦移动的二面通知,还是晚上十点的。我去,这是第一次这么晚去面试。本来是十点,结果开始得比较晚,十一点半才面试完,回宿舍都关门了。感觉面试官特别注重考查思维能力。他问我会哪些数据结构和算法,我先说可链表、数组、栈、AVL树等等还没说完就被打断了,他补充说,偏重算法。我挑了我熟悉的几个说了下:BFSDFSKMPA*算法。然后就出了四个算法题。下面说说两个较难的算法题

    1)一个矩阵,指定其中两个元素,将这两个元素用折线连接起来,折线只能朝右或者朝下,要求:折线组成的路径上的数的乘积末尾的0最多。

     

    2)连连看游戏。判断两个点能否连接起来消去,而且要求出最短路径。可以用哪些搜索算法?BFSDFSA*A*如何剪枝?

    HDOJ 1175

    典型解法:BFS

     

    其他同学的面试题:

    由‘0-9’组成的字符串,求一个最大子串。该子串不能满足条件:该子串的任意两个子串对应数字的乘积字符串对应的数字不能是这个子串的子串。

     

    本来以为涂鸦二面面的很差,结果还是收到了Offer。今年好像招的人不少。


  4. 二面:豌豆荚:

    豌豆荚的代码超级好,氛围也很不错。我们学院一个大牛在4月份就拿到了正式offer,听他说,里面全部是大牛,给力的工资以及各种福利等等,让人艳羡不已。豌豆荚招人非常严格,一般有6-7轮技术面试,难度可想而知。我本着打酱油的心情参加了面试。

     

    面试时间:2013-09-21,5:00

    总时间大概1小时。

    先是一个女工程师面试,主要是问简历,聊了Linux shell命令,统计出一个文件夹下大小大于7MB的文件夹,这个没答上来。还有的记不得了。接下来又安排了一个面试官专门问我C++的,主要是问STL,内存管理、Vector容器等等。之后就是线上编程环节。那边可以看见我的一举一动,第一次这样面试,压力还是有点大的。题目就是将一个四位整数比如4298转化为大写:四千二百九十八。我漏掉了一个情况:就是十的时候,前面不需要一!PS:不得不说,中文博大精深啊!然后就结束了,我问了下之后还有几面,HR说还有至少两到三面。好吧。不得不说豌豆荚的招聘真心严格。

     

    本来以为豌豆荚挂了,结果时隔十多天于1016日收到了HR电话,说要进行二面。面就面吧,就当长点见识,这高富帅公司也从没想过进去。


  • 人人。:                                                                                                                                                                  一面感觉还不错。面试在我们学校的一个咖啡厅。面试官主要问C++STLC++主要问面向对象的一些东西,基本答出来。STL我比较熟悉,也没啥问题。最后他介绍了一下自己所在部门的情况,说是做广告推荐、数据挖掘的。问我对以后职业发展有什么意向没。我说对后台开发、广告推荐很感兴趣,他就记录下来了。一面大概35分钟,这样就结束了。                                                                                                                                                                                                     总结:

  • 自我感觉我在面试中的亮点主要有三部分:

    1)基础扎实。很多公司都非常注重基础:语言、数据结构与算法、Linux、操作系统等等。手写代码能力很重要,有必要重点强化训练。

    2)课外知识。我课外花时间学习了web服务器Nginx,虽然研究得不是很深入,但是了解基本的架构和重点模块。对于服务器模型有了基本理解。

    3)技术博客。我的技术博客原创博文已经很多了,虽然没有太多高深的东西,都是一些基础知识,但是大多是自己加以总结了的。大多数面试官都打开我的博客看了,评价还不错。


    其实,关于怎么样去学习,并没有固定的套路。有的同学,在研究生期间做过比较出色的项目,能够赢得面试官的青睐,比如发过论文,或者是和面试官的方向一致,或者是当下互联网比较热的方向等等,这样,可能一次面试,项目聊完就没有多少时间了,面试官也不会去问其他的东西。好的项目经验能够让面试官觉得你实践经验丰富,可以直接拿来干活,通过面试的概率也是非常之大的。如果没有好的项目经验,最好努力去打牢自己的基础,多关注互联网的前沿,充实自己,一样可以赢得面试官的赞许。总之,大家都要有自己的亮点,能让面试官眼前一亮,那么,通过面试也是不难的事情了。


    不得不说,面试也看眼缘和运气,有时候问的东西刚好是自己都会的,有的时候容易遇到挫折。大家要善于把面试朝自己擅长的方向引,展现自己的优势。多数面试官都不会以问倒求职者作为目的,而是往往尝试去发现求职者身上的有优点及潜力。应聘者应尽量将面试看成一个相互交流的过程。

                  不得不说,再看一遍的时候,还是看的我热血沸腾的。










  • 1
    0

    查看评论
    * 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
      个人资料
      • 访问:27302次
      • 积分:1062
      • 等级:
      • 排名:千里之外
      • 原创:79篇
      • 转载:23篇
      • 译文:0篇
      • 评论:1条