返回 登录
54

一周极客热文:编程面试的10大算法概念汇总

作者通过一些简单的例子,阐述在编程面试中排名前10算法的相关概念。由于完全掌握这些概念需要更多的努力,因此这份列表只是作为一个介绍。文章从Java的角度看问题,包含下面这些概念:

  1. 字符串
  2. 链表
  3. 排序
  4. 递归 vs. 迭代
  5. 动态规划
  6. 位操作
  7. 概率问题
  8. 排列组合

由于篇幅限制,具体的概念分析请阅读原文

1、 王垠:面向对象编程和函数式编程的问题出在哪里?

作者此前曾写了一篇《对函数式语言的误解》的文章,他将面向对象和函数式并列,看上去似乎各打五十大板,但对面向对象的批评比较简单,就是面向对象总是要实现万事万物皆对象的理念,所以对函数的实现比较致命,函数无法作为数据来传递,所以需要各种各样的设计模式来弥补。

面向对象编程和函数式编程的问题在于:不论是面向对象编程还是函数式编程,如果你走了极端,那都是错误的。面向对象编程的极端是一切都是对象(纯面向对象)。函数式编程的极端是纯函数式编程语言。作者的观点可归纳为如下三点:

  1. 有些东西不是对象。函数就不是对象。
  2. 有些东西不是纯的。副作用是真实存在的。
  3. 不要让世界适应你的模型。让你的模型适应世界。

2、 我做这个程序员还有意思吗?

你是为了什么而坐程序员的呢?作者的原因是:“我喜欢解决难题,用创造性的方式解决,那会是一种让我极度兴奋的体验。”

可有一天:“我花了大量的时间和精力为老板将一个以前一直是手工处理的工作改进成了自动处理,而在之后的一次会议上却被质问,‘你花了这么多时间究竟干了什么?’”

这件事情让作者十分的郁闷,他认为自己身陷这样一个消极的环境中时,斗志会逐渐的消磨掉、腐化掉。甚至问自己:“你干嘛不知好歹的去改进这些东西?很显然,他们对你所做的努力嗤之以鼻。”

他问大家做这个程序员还有意思吗?如果你遇到这种情况你会怎么做?

3、 不要if else的编程

条件控制是编程中与生俱来的一种结构,来自程序员界一位几十年的老鸟称,“对我来说,除了给我带来麻烦外,没有发现任何的用处。一次又一次,我不断发现,越少的if语句,越少的switch语句,越少的循环,就会是越好的代码。通常这其中的原因是程序员用编程语言实现了更好的抽象归纳。他们并不是有意识的避免使用控制结构。但他们确实做到了这些。”

在文章,他自己写了代码并找出了解决的办法,可点击标题至原文查看范例。

4、 最牛B的编码套路

作者认为,单纯地每天埋头于工作并不能算是真正意义上的锻炼——参加会议并不能锻炼你的人际交往能力;回复邮件并不能提高你的打字水平。你必须定期留出时间,集中锻炼,这样才能把事情做得更好。如果你想要看一些编码套路的例子(也就是努力学习和磨练编程技能的方法),下面或许会给你一些启发:

  1. 写一份自己的简历
  2. 罗列出你所景仰的程序员
  3. 去查看维基百科(Wikipedia.Org)上“计算机科学”栏目,找到“计算机科学的卓越先驱”这部分,从这个列表中挑选一个人,阅读他的事迹,并且在阅读时打开任何你感兴趣的链接
  4. 花20分钟通读别人的代码
  5. 罗列出你最喜欢的10个编程工具
  6. 想一想,除了编程之外你最擅长什么事情?
  7. 拿出一叠简历,并和一组面试官在同一个房间里待上一个小时
  8. 参与一个电话面试
  9. 进行一次技术面试,并且被面试的人应该是某个你不太了解的领域里的专家
  10. 有机会参与别人的技术面试
  11. 找到一个能和你交换实际问题的人,每隔一周,相互交流编程问题 ……

上面是Steve Yegge开出的清单,但在作者看来,编程更在于人,而不是代码。他认为只需要两个招式:

  1. 写博客
  2. 积极参与著名的开源项目

5、 如何忘却jQuery,开始使用JavaScript原生API

JavaScript就在这里随时等候你的召唤,但是也许你还没有准备好如何使用他。为什么不用jQuery呢?因为它很慢并且你的网站真的不需要这些多余的负担。

作者在文中主要讨论了:如果仅为使用个选择器($)或者类似的东西,是否真的有必要加载jQuery。在文章他还举了范例,可以点击标题前去查看,他还称可以使用浏览器的console来发现更多的原生的东西。

6、 你真的需要定期重装Windows吗?

对于很多人来说,Windows似乎会随着使用的时间变长而变慢,不少用户通过定期重装Windodws来解决这个问题。但是,你真的需要定期重装Windows吗?你多久重装一次呢?

原文作者给出了久而久之Windows会变慢的原因、如何避免Windows随着使用时间的变长而变慢的方法、告诉你什么时候才需要重装Windows,以及如何快速地重装Windows。

另外,如果你想测试软件,但是又不允许软件搞乱你的系统的话,可以考虑安装一个虚拟机或者使用沙盒工具(如Sandoxie)从你的系统中隔离出来,这些软件不会扰乱你的主操作系统。

7、 如何阅读大型代码库?

作者分享的方法如下:

  1. 当我接触到新的代码库时,我常常忽略文档和表面的细节。
  2. 之后我会找到最底层的代码然后开始阅读。
  3. 我通常不在某一点上阅读太深,我会试图宏观的找到感觉。
  4. 接下来,我会找有意思的部分。

关于我们:

极客头条是CSDN推出的精品内容发掘平台,在这里可以发现、分享值得你关注的极客新闻。

如果你看到优秀的文章想分享,请点这里:【分享到极客头条】,或者直接在新浪微博@极客头条

评论