起因

写在开头,脑袋铁定秀逗了,历时20多天,刷完了leetcode上面151道题目(当然很多是google的),感觉自己对算法和数据结构算是入门了,但仍然还有很多不清楚的地方,于是有了对于每道题目写分析的冲动。不过在看到leetcode上面的文章之后,决定先从翻译入手,顺带再写写自己做题的心得体会。今天是第一篇:程序员面试技巧。

如果你主修计算机科学,那么在你工作的时候会碰到很多有难度的编程问题。当你去找工作的时候,你会有很多的面试,而面试官通常很喜欢问你很多技术性的问题,以下就是三类主要的题型:

  • 算法/数据结构
  • 特定编程语言/通用的计算机知识
  • 脑筋急转弯

后续我将详细的讨论上面这几点:

算法/数据结构

你必须深刻的理解以下几种数据结构:数组,链表,二叉树,哈希表等。你必须明确地知道什么时候该使用数组或者链表,譬如在实现一个列表翻转的时候。

面试官通常会问你一些算法问题用以检验你的编程解决问题能力,一些算法问题如下:

  • 在一个句子里面反转单词。
  • 在一个单词里面反转字母。(尝试使用迭代或者递归解决)
  • 如何在一个列表里面找到重复的数字。
  • 生成数字n的全排列。(小提示:递归)
  • 找到两个排好序数组的中间值。(小提示:分治法)
  • 如何进行拼写检查并验证单词。(小提示:编辑距离)

(译者吐槽,说句实话,上面几个问题如果没做题大部分我还真答不出来。)

特定编程语言/通用的计算机知识

如果你应聘的是C++职位,需要准备好应对很多C++的问题,其它编程语言也一样。如果你应聘的职位不需要特定的编程语言,那么你可能会被问到通用的计算机知识,譬如在堆和栈上面创建对象的区别。

我经常碰到的一些C++问题如下:

  • 什么是虚函数?怎么实现的?使用虚函数会有啥性能问题?
  • 什么是虚析构函数?为什么需要他们?如果你不实现成虚析构会出现什么问题?
  • 什么是拷贝构造函数?它什么时候被调用?
  • malloc和new的区别是什么?

(译者吐槽,上面这些感觉还算靠谱,至少没问虚拟继承是啥!我面试的时候通常还会问很多STL的东西,毕竟这在C++里面已经是很基础的了。Template这些的就算了,有时候都能把自己绕晕,还是别坑面试者了。)

脑筋急转弯

一些面试官很喜欢用一个脑筋急转弯来结束面试。这个其实很坑爹的,不过还是老老实实的准备一些吧。

一些经典的问题:

  • 两个鸡蛋问题:

    你有两个相同的鸡蛋,然后还有100层楼等你去爬。你需要知道最高到哪一层扔下鸡蛋,鸡蛋不会摔碎。(鸡蛋语录:为啥受伤的总是蛋蛋?)。很有可能第一层就碎了,也可能到了100层才碎。你需要知道最多尝试几次就能找到答案。

  • 尽可能快的在一个byte里面反转bit。

  • 你有5个相同的罐子,都装着球,其中有4个里面每个球都是重10g,另一个灌每个球重9g,你有一台电子称,只称一次,找到那个重9g球的罐子。

(译者吐槽,上面这些脑筋急转弯问题感觉就是算法问题,哪里是脑筋急转弯,明显的忽悠!)

总结

当然这是译者自己的,原文在上面就结束了,可以看到,作为一个程序员,我们其实是幸运的,因为我们能够接触如此多的挑战,并不断提升自己。可我们同时也是郁闷的,很多时候往往都有这样的错觉,数据结构和算法在很多工作中并不用到,但是为啥偏偏就面这个,linus貌似说过:“Bad programmers worry about the code. Good programmers worry about data structures and their relationships”,而在《大教堂与集市》这本书里面,作者直接说明“Smart data structures and dumb code works a lot better than the other way around”。有时候当写程序写多了,自然就发现算法和数据结构的重要性了。

另外,现在无论哪个公司,除非你是大牛级别的,面试几乎不会脱离上面那些东西,所以还是老老实实的学习吧,骚年。

leetcode:程序员面试技巧的更多相关文章

  1. PHP程序员面试技巧之口试题分享

    网络上流传很广的一部分php工程师面试题目,有些phper们认为这些很形式,天下面试题目一大把,不能考核一个人的真实水平,其实细细研究起来,无论怎样,能存在就表明其有存在的价值.下面小编整理了12条P ...

  2. Java程序员面试技巧

    Java 程序员面试技巧 对于每一个求职者,有一份优秀的简历是很必要的,企业通过简历的筛选,会给予求职者面试的机会.然而,很多求职者就是在面试过程中与钟情的工作失之交臂.如何在面试中取得成功呢?“细节 ...

  3. leetcode:程序猿面试技巧

    起因 写在开头,脑袋铁定秀逗了,历时20多天,刷完了leetcode上面151道题目(当然非常多是google的),感觉自己对算法和数据结构算是入门了,但仍然还有非常多不清楚的地方,于是有了对于每道题 ...

  4. LeetCode题解汇总(包括剑指Offer和程序员面试金典,持续更新)

    LeetCode题解汇总(持续更新,并将逐步迁移到本博客列表中) LeetCode题解分类汇总(包括剑指Offer和程序员面试金典) 剑指Offer 序号 题目 难度 03 数组中重复的数字 简单 0 ...

  5. LeetCode题解分类汇总(包括剑指Offer和程序员面试金典,持续更新)

    LeetCode题解汇总(持续更新,并将逐步迁移到本博客列表中) 剑指Offer 数据结构 链表 序号 题目 难度 06 从尾到头打印链表 简单 18 删除链表的节点 简单 22 链表中倒数第k个节点 ...

  6. 程序员求职之道(《程序员面试笔试宝典》)之求职有用网站及QQ群一览表

    技术学习网站 www.csdn.com www.iteye.com www.51cto.com http://www.cnblogs.com/ http://oj.leetcode.com/ http ...

  7. 《程序员面试金典(第5版)》【PDF】下载

    <程序员面试金典(第5版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382252 内容简介 本书作者Gayle Laakma ...

  8. 新书出版 |《Oracle程序员面试笔试宝典》

    新书出版 |<Oracle程序员面试笔试宝典> <Oracle程序员面试笔试宝典> 丛书[数据库 面试 笔试宝典]已在京东.淘宝和天猫预售,一共 5 本,目前市场上已有4本,丛 ...

  9. 两年Java程序员面试经验分享,从简历制作到面试总结!

    前言 工作两年左右,实习一年左右,正式工作一年左右,其实挺尴尬的,高不成低不就.因此在面试许多公司,找到了目前最适合自己的公司之后.于是做一个关于面试的总结.希望能够给那些依旧在找工作的同学提供帮助. ...

随机推荐

  1. C++11的原子量与内存序浅析

    一.多线程下共享变量的问题 在多线程编程中经常需要在不同线程之间共享一些变量,然而对于共享变量操作却经常造成一些莫名奇妙的错误,除非老老实实加锁对访问保护,否则经常出现一些(看起来)匪夷所思的情况.比 ...

  2. pix2code:从截图生成图形用户界面代码

    将设计人员创建的图形用户界面截图转换为计算机代码是开发人员为构建定制的软件,网站和移动应用程序而进行的一项典型任务. 在本文中,我们展示了深入的学习方法可以用于训练一个端对端的模型,以便从三个不同的平 ...

  3. Fashion-MNIST:A MNIST-like fashion product database. Benchmark

    Zalando的文章图像的一个数据集包括一个训练集6万个例子和一个10,000个例子的测试集. 每个示例是一个28x28灰度图像,与10个类别的标签相关联. 时尚MNIST旨在作为用于基准机器学习算法 ...

  4. MongoDb进阶实践之六 MongoDB查询命令详述(补充)

    一.引言         上一篇文章我们已经介绍了MongoDB数据库的查询操作,但是并没有介绍全,随着自己的学习的深入,对查询又有了新的东西,决定补充进来.如果大家想看上一篇有关MongoDB查询的 ...

  5. Kafka(转载)

    Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用.目前越来越多的开源分布式处理系统如Cloudera.Apache Storm.Spa ...

  6. ABP文档笔记 - 配置、设置、版本、功能、权限

    配置 全局仅一个单例,保存一组配置信息,一般直接在模块的预启动事件中赋值or修改.没有Scope划分,无论租户还是房东亦或者用户读取的值都不会有差异.每个模块都可以扩展这个配置. 设置 它没有层级关系 ...

  7. Go 语言递归函数

    递归,就是在运行的过程中调用自己. 语法格式如下: func recursion() { recursion() /* 函数调用自身 */ } func main() { recursion() } ...

  8. Docker配置 DNS

    Docker 没有为每个容器专门定制镜像,那么怎么自定义配置容器的主机名和 DNS 配置呢? 秘诀就是它利用虚拟文件来挂载到来容器的 3 个相关配置文件. 在容器中使用 mount 命令可以看到挂载信 ...

  9. Docker Hub

    目前 Docker 官方维护了一个公共仓库 Docker Hub,其中已经包括了超过 15,000 的镜像.大部分需求,都可以通过在 Docker Hub 中直接下载镜像来实现. 登录 可以通过执行 ...

  10. 在Spring Boot中输出REST资源

    前面我们我们已经看了Spring Boot中的很多知识点了,也见识到Spring Boot带给我们的各种便利了,今天我们来看看针对在Spring Boot中输出REST资源这一需求,Spring Bo ...