有一位网友发了他们最近招聘时使用的一个面试题,把它作为薪资的薪资的参考标准之一,如果回答得好,就定位在50万以上年薪。题目是这样的:

有一个 10TB 的数据文件,里面内容全是 64bit 整数,大小顺序是乱的,要求把原有 10TB 文件中所有整数进行排序,排序后内容写到新文件中,只用标准 C/C++ 或者 Golang,不用其他任何第三方工具库,如何解决这个问题? 估计代码量大概多少? 写代码和调试,一共需要多长时间实现? 在普通服务器上,完成排序,需要运行多长时间?

非常经典的 大文件排序,这种类型的题目我看着特别有亲切感。因为我自己是做大数据的,Hadoop MapReduce 底层实现里有相当一部分代码是专门做这个事情的,当时看过之后受益匪浅,最大的感受就是单纯的文件排序(理想环境)和特定业务场景下的文件排序(现在环境)实现复杂度完全不是一个量级,有兴趣的同学可以自己翻一下相关的源码实现(Java)。

后来在团队招聘的时候,很多候选人面试过程中都会提及 Hadoop MapReduce Shuffle 的实现过程,用于证明自己对于大数据底层实现原理是有研究的。提到的次数多了之后,我就发现大部分同学这部分内容的理解多数来源于《Hadoop权威指南》这本书相关的章节,描述的整体流程是没有问题的,但很多都经不起推敲,涉及到实现细节,每个人掌握的程度差别就很大了。

考虑到不是每一个同学都会了解这个实现过程,或者看过相关的源代码,就做了一个简化:完全脱离 Hadoop、Spark、Flink 之类的框架环境,就一台本地服务器,用一个你自己熟悉的编程语言,不借助第三方库,针对大文件排序的问题,给出实现方案和关键细节。

候选人给出的答案大致可以划分为以下几个类型,我这里列出的粒度比较大:

  1. 没有思路;
  2. 能够给出分而治之的思路,就是常见的划分成多个小文件局部排序,然后再归并成一个大文件;
  3. 能够给出单线程版本的实现方案和关键细节;
  4. 能够给出多线程版本的实现方案和关键细节;
  5. 能够给出分布式版本的实现方案和关键细节,前面部分能够搞定,才会到这里;

对于第 2 种情况,候选人应该了解过数据结构与算法里的分治法和归并排序,或者就是提前背过类似的题目和答案,需要进一步考察;
对于第 3 或 4 种情况,实现方案主要考察候选人的逻辑思维和沟通能力,就是脑子里有想法,还能够讲述明白;关键细节主要考察代码能力,可能会涉及到IO、多线程、异常处理等;
对于第 5 种情况,主要考察候选人分布式计算和存储相关领域的储备和经验,因人而异。

我要求的答案必须是两个部分:

  1. 实现方案
    对于某个问题,能不能给出一个可行的实现方案。这个方案可以是自己想出来的,也可以是从别人那里借鉴学习过来的。
    因为现在市面上有好多大厂面试真经之类的东西,专门汇总常见的面试题型和答案,所以我需要进一步判断你是真的有货,还是只是看起来有货。
  2. 关键细节
    对于给出的实现方案,能不能落地成实际的代码。大部分看起来有货的这个地方就会露馅,我也会根据候选人的反馈延伸出若干变种,充分考察代码能力。

有想法,能落地,才是一名程序员工程能力的最好体现。

50万年薪程序员的面试题相关推荐

  1. 50万年薪程序员,被百万网民怒喷后,却迎来大撕逼

    全世界只有3.14 % 的人关注了 数据与算法之美 前几天,我们年轻气盛的小卢写了一篇关于"程序员锁库跑路,最终致创业公司倒闭"的文章,语言有些偏激,数据汪在此替小卢给大伙道个歉, ...

  2. 计算机程序C语言若初始数为48,2016年计算机软考程序员模拟选择试题

    46.设有定义:"char s[12]={"string"};" 则printf("%d\n",strlen(s));的输出是( ) A. ...

  3. java中setconstrations_java程序员认证模拟试题及解析

    java程序员认证模拟试题及解析 天将降大任于是人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为.以下是小编为大家搜索整理的java程序员认证模拟试题及解析,希望能给大家带来帮助!更多精 ...

  4. 经典java程序员的面试题及答案

    今天动力节点java培训机构小编为大家分享"经典java程序员的面试题及答案",希望通过此文能够帮助到正在找工作或是即将毕业的"你",下面就随小编一起看看经典j ...

  5. 50 岁程序员创业说:两个月提交 50 个 PR,三个月内融资 2000 万美元

    在"互联网+"的带领下,如今人们会一门特长烘焙.摄影.写作.绘画,便可在进行个人创业,获得收入. 对于技术创业而言,却始终有规可循:往往是有人被一个特定的问题所困扰,于是他决定要想 ...

  6. 卖掉 3000 平房子,50 岁程序员回国写代码,三个月内融资 2000 万美元

    2019年7月12日,10多万行C代码的中国物联网大数据平台 TDengine 在 GitHub开源,立即冲上 GitHub 榜首,整整五天霸榜 GitHub.目前该项目在 GitHub 上 Star ...

  7. java中级程序员面试题_中级Java程序员常见面试题汇总

    下面是一些中级Java程序员常见面试题汇总,你可以用它来好好准备面试. 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器 ...

  8. 若微型计算机在工作时突然断电,2014计算机软考程序员考前模拟试题

    无忧考网为大家收集整理了<2014计算机软考程序员考前模拟试题>供大家参考,希望对大家有所帮助!!! 1.与十六进制数值CD等值的十进制数是 A.204 B.205 C.206 D.203 ...

  9. 1) 以实现用户在桌面上存储的资料不会因为用户改变计算机而消失.,2014年计算机软考程序员考前模拟试题及答案...

    无忧考网为大家收集整理了<2014年计算机软考程序员考前模拟试题及答案>供大家参考,希望对大家有所帮助!!! 1.与十六进制数值CD等值的十进制数是 A.204 B.205 C.206 D ...

最新文章

  1. Debian普通用户添加sudo权限
  2. 关于for循环处理列表的思考
  3. 计算机在音乐教学的应用论文开题报告,音乐教育论文开题报告(范文详解)
  4. hystrix源码小贴士之Yammer Publisher
  5. 如何在VMware8虚拟机里安装Xp GHOST系统 解决不能启动Xp系统方法
  6. cairosvg在linux中的安装_直接用ISO文件在linux上安装新系统
  7. yslow各个指标含义
  8. JZOJ_3928. 射击 (Standard IO)
  9. northstar机器人编程_NorthSTAR图形化机器人开发环境
  10. 多应用集中落地,四川区块链产业爆发增长
  11. 模电笔记快速整理之《模拟电子技术基础(第四版)》上海交大网课版 1-2章
  12. Python随机生成姓名+电话号码+邮箱
  13. ★如何解释特修斯之船问题?
  14. SCI检索与EI检索
  15. FFmpeg从入门到入魔(2):保存流到本地MP4
  16. 视觉SLAM学习路线
  17. Linux中的libc和glibc
  18. jenkins+docker+maven自动化部署
  19. 网易云音乐称酷狗抄袭计算机,网易云音乐称酷狗抄袭 还一一附上了两款应用的功能对比截图...
  20. 虽然凉了,也要坚强,一名渣硕的阿里菜鸟网络Java三面面经分享

热门文章

  1. 当代大学生编程学习与现实生活横向对比心得体悟
  2. 浪潮服务器nf5270m5做raid_浪潮全闪存储助力山东高速公路ETC缴费系统,服务民众便捷出行...
  3. 河北海格里斯RGV有轨穿梭车 仓库合理化的RGV穿梭车设备
  4. 智能RGV的动态调度策略
  5. 软件介绍——文件属性批量修改工具(绿色版)
  6. ios入门之界面基础
  7. Nature | 癌细胞喜好夜间行动!研究表明乳腺癌细胞在睡眠期间加速扩散转移
  8. 机器人建模中移动关节如何建立坐标系_PDPS机器人虚拟调试——PS篇 第十四课 机器人机构定义...
  9. vivo X30系列:用影像三级跳,跳进5G时代
  10. Unity 配合Wallpaper Engine工具,实现电脑桌面壁纸游戏