从一道面试题谈谈一线大厂码农应该具备的基本能力
The following article is from 程序猿石头 Author 码农唐磊
(给ImportNew加星标,提高Java技能)
作者:码农唐磊
double sqrt(int v, double t)不能调用系统库函数,诸如 Math.sqrt(v) 之类的; 假设计算出的结果为 r,要求满足这个条件: ,其中 是真实的值, t 为给定的一个误差范围,例如0.1等,即你计算出的值要在给定的误差范围内。 实现语言不限,你条件可以比上述更加苛刻,但不能宽松。例如调用你的接口 sqrt(9, 0.21) 返回值属于 [2.79, 3.21] 这个区间的任意一个都满足条件。
求职者: 没有啊。
求职者:3点几吧。
面试官:你怎么知道是3 点几,因为你知道9开根号是3,想象一下,你也可以完全用程序帮忙模拟你大脑思考的过程。
求职者: 我再想想……
求职者:这样的话,我这个方法效率确实比较低,不过可以这样优化,比如设置一个步长,一次迭代后,如果没有达到预期,可以不断修改这个步长来增大逼近真实值的速度,比如10倍误差,100倍误差等。
因为5^2 = 25 > 10 , 所以 r 属于[0, 5) 因为(5/2) ^2 = 6.25 < 10 , 所以 r 属于 (2.5, 5) 因为(3.75^2 = 14.0625 > 10) ,所以 r 属于 (2.5, 3.75) 继续,如果你结束条件不太确定,可以暂时不管…
求职者:明白了。
面试官:那你写一下代码吧。
求职者:sqrt(-4, 0.21),哎呀,我这里忘了判断了。改一下代码。
求职者:sqrt(0, 0.21),sqrt(4, 0.21)… 还有问题,再改改。
面试官:……
问:为什么题目中的 v 的类型是 int?
答:还真没有理由,double 也无所谓,可能仅仅是因为 leetcode 上原题计算的数是 int 吧。问:我能正确答对这道题目就一定能通过这次面试吗?
答:强调一下,面试中考察这样一个题目,并不是仅仅考察这道题目本身,不是说你将这道题做对了,就能通过面试,反之也不是说你没做对这道题目就一定不能通过我们的面试。我们通过这道题目为契机,希望考察的是候选人在分析问题解决问题的能力,在交流过程中所体现的逻辑推理和思维方式等,当然也有最后实实在在的 code。问:这不是一道数学题目吗,为什么程序员面试需要考察这样的数学问题?
答:同上,不是考察这道题目本身。另外,这也可以说不是一道数学题目,当然能用数学的方式解答。候选人能用数学的方式解答也算正确。问:二分是这道题目的标准答案吗?我能用其他解法吗?
答:同上,题目没有标准答案,就算你用最暴力的算法搜索出来也是正确的解法,其他数学方法也对。问:这道题目这么简单,牛顿迭代分分钟秒掉,是不是太简单了?
答: 给你点赞。 问:这题目在说什么,我搞了半天没看懂,这TM是啥?
答:如果确实认真看完整篇文章或跟面试官交流了那么久,还是根本不明白这到底说的是一个什么问题。那就别管了吧,随他去吧,可能不是目标用户而已。问:我在实际工作中根本就不会遇到这样的问题,你问这个有什么用?
答:同第2条答案。问:你们公司还缺人么,面试会考察哪些点?
答:有兴趣或者有其他问题可以戳我邮箱,邮箱地址:aUB0YW5nbGVpLm1l。 面试考察可能会涉及:CS 基础/Code/数据结构和算法/解决问题/项目经验/系统设计/沟通团队协作等等。
看完本文有收获?请转发分享给更多人
关注「ImportNew」,提升Java技能
好文章,我在看❤️