Tag: Interview Questions

我的面试谷哥GOOGLE伦敦SRE的经验和教训

今年疫情, 接到了谷哥和FB的面试邀请, 想着试试现在的水平如何便欣然接受. 每年都面试, 并不是说一定要换工作, 这是一个很好的让你在人才市场中保持竞争力, 查看自己不足, 检验你坚持刷题的一个好方法: 阶段性刷题的考核和目标. 谷哥(Google, 狗家 或被称为G家)是很多软件工程师梦寐以求的公司, 可能是媒体宣传他们家的福利有多么多么好: 有免费的员工餐厅, 有各种娱乐休闲的活动, 给的工资还高. 我5年前接到过面试邀请(当时问了一道队列+哈希表的题), 可惜当时水平太差连第一面45分钟的 coding 都没过. 再后来这几年一直投, 甚至去年找朋友内推都没法过简历关. 据统计: Google 面试成功率不到 0.2%(1000人不到2人), 难度甚至比上哈佛更大. 第一面要过一般是要BUG FREE而且不能卡. …

记Meta/Facebook的第一轮技术面试(伦敦脸书)

由于签了NDA, 所以还是把文章改了一下, 尽量不泄露重要的信息. NDA针对的是信息Information(例如公司重要的一些项目啥的), 而分享个人经验Experience应该不算违反规定吧. 9年前, 当我博士就要毕业时, 当时被美国Facebook的猎头联系上, 当时水平不够(也没有怎么准备), 第一轮技术面试都没有通过. 前几周, 投入Facebook伦敦软件工程师 Software Engineer职位, 很快就被FB的招聘猎头联系上了(大公司都有自己的招人猎头团队 Talent Acquisition). 先是第一轮电话互相了解情况后就安排了和一个在伦敦的FB工程师进行第一轮技术面(coding interview 筛选) 虽然说是电话面试, 但实际上需要在电脑上进行做题, 而且需要开摄像头, 这样和可以和FB的工程师进行更好的交流. 敲代码是在 浏览器中的网站: coderpad.io. 和微软的那次电话面试不同, 这次代码并不能直接在浏览器里编译执行. …

谷歌面试扔鸡蛋问题

这题据说是 GOOGLE的面试题, 但是却真实的被一些软件公司拿来考应聘者. 比如我在前几年面试剑桥的博通公司/Broadcom, 在第二轮也被问到了这个问题. 题意是: 给你两个鸡蛋, 有个100层楼, 你可以把鸡蛋从任意一层楼扔下, 鸡蛋可能破, 也可能不破, 如果不破的话, 你可以继续用这个鸡蛋扔. 你需要用这两个鸡蛋来试出鸡蛋会破的最小楼层高度. 这两个鸡蛋一模一样. 问你采用什么策略可以使最坏情况下的尝试次数最少? 什么是最差情况? 如果你只有一个鸡蛋, 那么你最坏需要100次(需要从1层楼开始测试)才可以得到结论. 最直接的做法就是从第一层开始试, 然后第二层以此类推, 但是这种方法只需要用到1个鸡蛋即可. 如果第N层鸡蛋没碎但是第N+1层碎了, 答案就是N. 这种情况下最坏需要尝试100次. 如果我们在第50层扔呢? 如果鸡蛋碎了, 那么答案就在第1到第49层, 反之答案就在第51到第100. …

逻辑测试系列 – 一种只有4种语句的编程语言 – (1)

一般大公司都会有类似逻辑测试或者IQ测试题, 这些题考的并不是你对某种技能(编程语言)的掌握情况, 相反, 这是为了过滤掉比较笨的人, 因为……我觉得太笨的人写不了程序. 所以, 你选任何一种语言都是带有偏见的, 碰巧, 这里有一种语言, 只有4条指令, 处理所有的都是非负整数. 在这种语言里, 变量不需要定义, 但是使用前需要像 PYTHON一样赋值(或者清空), 这种语言好理解, 也能拿来当面试题. 清空变量 用 ZERO(X) 来把X变量清空, 比如以下 相当于 X=0 ZERO(X) 赋值 用 ASGN(X, Y) …

软件工程师数据库面试技巧之 SQL中的第二名记录

现在最吃香的工程师是 全栈工程师 (Full Stack), 因此你除了要好的算法数据结构知识外 你还需要懂数据库等计算机知识. 有人说, SQL好简单, 其实SQL也可以考考你的逻辑, 比如有这么一个简单的 (含有两个字段, 三行记录) 的关系表 (假设表名为 Employee). 对了, 数据工程师/Data Engineer, 还有相关的一些职位: Machine Learning Engineer/机器学习工程师等 都会需要面试SQL. +----+--------+ | Id | Salary | …

软件工程师面试技巧之: 动态规划/整数拆分

动态规化 (Dynamic Programming) 是个计算机领域里很重要的算法,我在高中参加过三次信息学奥林匹克竞赛 (ACM),每年必有一题用动归(DP)来解答. 动态规化其实就是 把问题分解成子问题+记忆子问题求解的一个过程. 你如何教你的孩子DP是什么呢? 比如:你给你的孩子5根火柴,你的孩子数了数然后说有5根.然后你再给你的孩子1根火柴然后问一共有多少根,这时候你的孩子会马上说出6根,因为他知道已经有5根了,再加上1根就是6根. 原理就是:把问题分析成更小的问题,并分而求之,子问题的解会被保存下来这样在求解更大的问题的时候就不需要再重新把中间结果再算一遍了. 动态规化的解法经常是较优的一种解法,我们来看这么一道面试题: 给定一个正整数,将它拆分成至少两个正整数,求出这些正整数的最大乘积.比如 整数2,可以拆分成1+1, 乘积是1,当输入是10,需要分解成3+3+4,这样所得的最大乘积是36. 你会怎么解?暴力搜索?这种解法不好写,而且时间复杂度也大.可以用回溯+剪枝,但时间复杂度也相对较大,特别是当N较大的时候也会时间太久Time Exceeded. 动规解答这题就较为简单.这题并没有让你详细写出怎么拆分的方案,只需要解出最大的乘积即可.所以我们有以下的方案: f(n) = max(f(n), max(i – j, f(i – j)) * j)) for …