leetcode:程序猿面试技巧
起因
写在开头,脑袋铁定秀逗了,历时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:程序猿面试技巧的更多相关文章
- leetcode:程序员面试技巧
起因 写在开头,脑袋铁定秀逗了,历时20多天,刷完了leetcode上面151道题目(当然很多是google的),感觉自己对算法和数据结构算是入门了,但仍然还有很多不清楚的地方,于是有了对于每道题目写 ...
- 疯狂Java学习笔记(72)-----------大话程序猿面试
大话程序猿面试 10个我最喜欢问程序猿的面试问题 程序猿面试不全然指南 10个经典的C语言面试基础算法及代码 程序猿的10大成功面试技巧 程序猿选择公司的8个标准 编程开发 8个值得关注的PHP安全函 ...
- PHP程序员面试技巧之口试题分享
网络上流传很广的一部分php工程师面试题目,有些phper们认为这些很形式,天下面试题目一大把,不能考核一个人的真实水平,其实细细研究起来,无论怎样,能存在就表明其有存在的价值.下面小编整理了12条P ...
- HR筒子说:程序猿面试那点事(转)
小屁孩曾经有过4年的招聘经验,期间见识了各种类型的程序猿:有大牛.有菜牛:有功成名就,有苦苦挣扎不知方向.等后来做了一枚程序猿之后发现,HR眼中的程序猿和程序猿中的HR都是不一样的.有感与此,从HR的 ...
- 《Java程序猿面试笔试宝典》之Java与C/C++有什么异同
Java与C++都是面向对象语言,都使用了面向对象思想(比如封装.继承.多态等),因为面向对象有很多非常好的特性(继承.组合等),使得二者都有非常好的可重用性. 须要注意的是,二者并不是全然一样,以下 ...
- HR筒子说:程序猿面试那点事
小屁孩曾经有过4年的招聘经验,期间见识了各种类型的程序猿:有大牛.有菜牛:有功成名就,有苦苦挣扎不知方向.等后来做了一枚程序猿之后发现,HR眼中的程序猿和程序猿中的HR都是不一样的.有感与此,从HR的 ...
- 《Java程序猿面试笔试宝典》之组合与继承有什么差别
组合和继承是面向对象中两种代码复用的方式. 组合是指在新类里面创建原有类的对象,反复利用已有类的功能.继承是面向对象的主要特性之中的一个,它同意设计人员依据其他类的实现来定义一个类的实现. 组合和继承 ...
- Java程序员面试技巧
Java 程序员面试技巧 对于每一个求职者,有一份优秀的简历是很必要的,企业通过简历的筛选,会给予求职者面试的机会.然而,很多求职者就是在面试过程中与钟情的工作失之交臂.如何在面试中取得成功呢?“细节 ...
- 《Java程序猿面试笔试宝典》之Java程序初始化的顺序是如何的
在Java语言中.当实例化对象时.对象所在类的全部成员变量首先要进行初始化,仅仅有当全部类成员完毕初始化后,才会调用对象所在类的构造函数创建对象. Java程序的初始化一般遵循以下三个原则(以下 ...
随机推荐
- Android开发之漫漫长途 Ⅱ——Activity的显示之Window和View(2)
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...
- 【机器学习实战】第14章 利用SVD简化数据
第14章 利用SVD简化数据 SVD 概述 奇异值分解(SVD, Singular Value Decomposition): 提取信息的一种方法,可以把 SVD 看成是从噪声数据中抽取相关特征.从生 ...
- 【LuaJIT版】从零开始在 macOS 上配置 Lua 开发环境
前言 这篇文章针对的是基于 LuaJIT 的环境配置.借助于 LuaJIT,Lua 的执行效率可以进一步提升几十倍.如果你不是很清楚自己是需要 Lua 还是 LuaJIT,那么建议你从 LuaJIT ...
- javaScript额外笔记
--------------------------------------------------------Part 1javascript:脚本语言辅助开发:网页的前台开发三大块:1.HTML ...
- Socket网络编程之概述理解
今天主要讲讲什么是socket网络编程 socketde 英文原义是"孔"或者"插座".是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机 ...
- SQL Server多表同时查询
今天在练sql server发现多条语句同时使用可以多表同时查询,具体操作如下: 代码示例: USE teachingGOSELECT *FROM dbo.teach_classORDER BY cl ...
- [转载] KAFKA分布式消息系统
转载自http://blog.chinaunix.net/uid-20196318-id-2420884.html Kafka[1]是linkedin用于日志处理的分布式消息队列,linkedin的日 ...
- linux操作系统基础篇(九)
shell脚本的运算符与流程控制 1.运算符 1.1 算术运算符 + - * / % [root@MiWiFi-R3-srv ~]# echo $[3+1]4 1.2 关系操作 与(())连用 < ...
- 四、VueJs 填坑日记之搭建Axios接口请求工具
上一章,我们认识了项目的目录结构,以及对项目的目录结构做了一些调整,已经能把项目重新跑起来了.今天我们来搭建api接口调用工具Axios.Vue本身是不支持ajax调用的,如果你需要这些功能就需要安装 ...
- Android ANR异常解决方案
1,ANR异常的解释: ANR(android not response)即应用程序无响应,在用户操作在5秒内没有响应的话就会出现ANR异常: 2,那为什么会出现ANR异常呢? Android系统中处 ...