起因

写在开头,脑袋铁定秀逗了,历时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. Linux查看日志方法总结(1)

    注:日志文件为:test.log 1.tail -f test.log 查看当前打印的日志(平时就知道这方法!打印出的长度有限制.) 以下为网上搜集的: 2.先必须了解两个最基本的命令: tail  ...

  2. Python中内置函数的介绍

    内置函数的功能介绍 常用内置函数如下: 1.abs() 绝对值 格式:abs(x) 例如:print(abs(-18)) >>> 18 返回值:number #该函数主要用于数值类的 ...

  3. 计科1702冯亚杰C语言程序设计预备作业

    阅读邹欣老师的博客--师生关系,针对文中的几种师生关系谈谈你的看法,你期望的师生关系是什么样的? 答:首先老师和学生之间要互相尊重,我认为这是必要的.在第一点的基础上师生要互相帮助,互相配合,共同进步 ...

  4. Linux下双网卡Firewalld的配置流程

    实验室拟态存储的项目需要通过LVS-NAT模式通过LVS服务器来区隔内外网的服务,所以安全防护的重心则落在了LVS服务器之上.笔者最终选择通过firewalld放行端口的方式来实现需求,由于firew ...

  5. IE6浏览器有哪些常见的bug,缺陷或者与标准不一致的地方,如何解决

    IE6不支持min-height,解决办法使用css hack: .target { min-height: 100px; height: auto !important; height: 100px ...

  6. 使用EasyNetQ组件操作RabbitMQ消息队列服务

    RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现,是实现消息队列应用的一个中间件,消息队列中间件是分布式系统中重要的组件,主要解决应用耦合, ...

  7. vue mint-ui 实现省市区街道4级联动(仿淘宝京东收货地址4级联动)

    demo及源码地址 https://github.com/artiely/citypicker 先去下载一个“省份.城市.区县.乡镇” 四级联动数据,然后 引入 import { Picker } f ...

  8. Web压力测试和手机App测试

    总纲:认识测试关系和目标http://blog.csdn.net/superxgl/article/details/27189631 一.web测试和App服务端测试 软件安装 建议安装loadrun ...

  9. String字符串的操作

    字符串的常用操作 # Author:nadech name = "my name is nadech" print(name.count("a")) print ...

  10. Java不走弯路教程(2.Hello,Java!)

    2.Hello,Java! 欢迎来到Java的世界,在上一章,我们已经完成了DOS的基本操作学习和Java的环境搭建,在本章中我们Java来完成一个简单的DOS程序. 2.1 Hello,Java! ...