分享一则 Golang 面试题

备注:题目要求说明比较多,是根据其他候选人测题情况不断规范的结果,以降低大家在测题过程中的疑问,提升结果准确性
请您耐心阅读

1、题目说明

使用 Golang 实现一个方法 func checkList(list []int)(val int,ok bool),输入为一个整数数列(list []int),输出为预测改数列的下一个项的值 val 和是否找到规律 ok

比如 输入 []int{1,3,5,7,9} ,检测出它是等差数列,输出下一项的值 11 和找到了规律 true
输入数列的长度小于3时,作 无规律处理。比如:[1,3]判定无规律。[1,3,5]判定为等差数列
不用考虑int计算的溢出问题
需要支持的数列

等差数列:

递增和递减的等差数列都需要支持
比如 [3,5,7,9,11],最终返回 13 和 true
比如 [11,9,7,5,3],最终返回 1 和 true

等比数列:

比如 [2,4,8,16,32],最终返回 64 和 true
等比数列的公比可以为负整数,但不能为小数
比如 [32,16,8,4,2],返回 0 和 false 即可
比如 [2,-4,8,-16,32],需返回 -64 和 true

开方等差数列:

如果一个数列可以对每一项开根号(比如负数,则认为不可以开根号,再比如3,开根号无法得到整数,也认为不可以开根号。开根号只取非负值,比如根号4=2,不能等于-2)并且得到的新的整数数列是等差数列,那么他就是开方等差数列,比如 [1,4,9,16,25],最终返回 36 和 true

上述三种数列的任意组合,可以多层嵌套

比如 [2,15,41,80] 先求两两之差,得到等差数列 [13,26,39],最终返回 132 和 true
比如 [1,2,6,15,31] 先求两两之差,得到平方等差数列 [1,4,9,16],最终返回 56 和 true
比如 [1,1,3,15,105,945] 先求两两之商,得到等差数列[1,3,5,7,9],最终返回 10395 和 true
比如 [2,14,64,202,502,1062,2004],先求两两之差,得到 [12,50,138,300,560,942],再求两两之差,得到 [38,88,162,260,382],再求两两之差,得到等差数列[50,74,98,122],最终返回 3474 和 true

无规律:其他所有未检查出规律的数列,最终返回 0 和 false

当数列同时满足多种规律时,同一级之间按照 等差数列 > 等比数列 > 开方等差数列 的优先级来计算。比如 [1,1,2,6],可以先求差,得到 [0,1,4] 得到平方等差数列,预测的结果为 15。也可以先求商得到 [1,2,3] 是等差数列,预测的结果为24。按照优先级规则,返回先求等差的结果。所以 输入 [1,1,2,6],输出应该为 15。

输入任意的[]int,该方法不能导致程序crash或者卡死
必须使用 Golang 的测试框架完善自动测试,并保证实现功能函数的测试覆盖率在95%以上
自动测试必须使用代码自行判断内部逻辑是否正确,不接受输出到控制台人工判断结果是否正确
自动测试无法编译/报错则机试不通过
自动测试代码覆盖率低于95%则机试不通过
自动测试必须使用 Golang 自带的自动测试框架,验证笔试结果时会通过 Golang 的自动测试框架开始运行代码,不接受除此之外的任何手动操作
自动测试反复运行都应该结果正确
请务必尽可能考虑到输入的可能性,检查机试题时会使用额外使用固定的case进行检查,无法通过则机试不通过
除了错误的case,不会额外提供其他的信息,比如完整的测试case列表。对输入可能性的预测和处理也是本次机试的一个重点

源码提交要求

将所有源代码压缩成一个 zip 文件,保留 GOPATH 下的所有目录结构(zip 的根目录下应该有个 src 目录)
zip 文件体积不允许超过 1MB(注意只把 Golang 源文件/体积小的资源文件放在里面,其他文件特别是编译后的二进制不要放在里面)
zip 压缩包必须包含除了 Golang 官方包以外的所有代码依赖
提交非zip文件则笔试不通过。zip文件无法成功解压则笔试不通过。

编译要求

代码中不能使用cgo。并且能在关闭cgo下编译运行成功。
该 Golang 代码需要能在 Golang 1.9 到 golang.org 最新的正式版本之间的某个 版本下编译运行测试,如果您的代码在 golang 1.9 下无法运行/不能确认是否可以运行,请给出您可以运行的 golang版本。不接受未发布的测试的golang版本。
代码应当同时兼容 MacOS/Linux/Windows 桌面平台

代码要求

代码不能抄袭,可以调用官方库代码,但不能包含其他第三方代码(比如 github.com/xxx)
所有代码应该写在一个 Golang 的 package 里面
GOPATH 里面必须只有一个 package (不允许开第二个 package)
只允许使用目录作为一个 package,不允许使用单个文件作为一个 package
同一个目录里面只能有一个 package 的名字
比如 main 或者 zzServer,不可以有第二个
同一个目录里面不允许有相同的函数名,比如写两个 main 函数等等
可以写一个 main 函数,也可以不写 main 函数,对机试结果无影响
必须能使用 GOPATH=xxx go install xxx(import path) 方式直接编译
注意后面必须写一个 import path 路径,写一个文件是否能编译对机试结果无影响
禁止把 Golang 文件直接放在 GOPATH/src 目录下.
不允许放 Golang 文件的上一级目录名称为 main 或者 src.
实现应当简洁,代码可读性不能过差

以下图片供参考,如加载不成功,可以查看附件(内容同这两张图)


圈主 管理员

热门评论
:
该帖子评论已关闭
图片审查中...
编辑答案: 我的回答: 最多上传一张图片和一个附件
x
x
个人中心
今日签到
有新私信 私信列表