今天面试官在线问代码题,让我用 Java 实现 1 到 100 的和。 我给的代码如下:
int sum = 0; for (int i = 1; i <= 100; i++) { sum += i; } System.out.println(sum);
就马上说不合适,各位大佬能说说为什么吗?
1 hdbzsgm 2020-07-03 11:46:53 +08:00 我觉得他想让你利用一下等差数列的性质 |
2 hahaandyou001 OP @hdbzsgm 谢谢,我后来也想到,可对方连个机会都不给 |
![]() | 3 IsaacYoung 2020-07-03 11:50:00 +08:00 ![]() System.out.println(5050); |
![]() | 4 caowentao 2020-07-03 11:52:38 +08:00 via iPhone ![]() 没有给背景,确实好像在挖坑,不合适 |
![]() | 5 echo1937 2020-07-03 11:52:41 +08:00 via iPhone ![]() 他有没有继续问,有没有其他的方法? 如果不问,问题不在你。 |
6 hahaandyou001 OP @echo1937 没有,还 diss 了我一下,然后说不合适,不录用 |
7 coderraven 2020-07-03 12:00:18 +08:00 假设,他没有催促你快点完成。 给了你一定时间。 写完全点 class Solution { public int addToNumber(int number) { xxx…. } } 然后多作几种实现。 不是有什么 100+1 * 50 这种么。 自己再简化下。 然后还能主动和他聊一聊当这个数超出范围后如何处理。 比如 number=100000000000000000000 的时候。 你写的这个太应付了。 随便来个人都能写出来。 没啥意思。 over 。 |
8 hahaandyou001 OP @caowentao 还说什么,这能看出来是 Java 代码吗? |
9 hahaandyou001 OP @coderraven 他说五分钟以内解决 |
10 coderraven 2020-07-03 12:03:23 +08:00 ![]() emmmmm 反正我面试的时候,是自己尽可能展现自己的闪光点。 而不是一直在被面试官考验。。 你可以按我这个思路去面试。 祝你顺利。 |
11 hahaandyou001 OP @coderraven 谢谢你,HR 就只让我实现 1 加到 100 的和而已 |
![]() | 12 lnim 2020-07-03 12:18:36 +08:00 可能是想用递归实现? 然后在问能否优化, 在用尾递归? |
![]() | 13 CismonX 2020-07-03 12:23:33 +08:00 ![]() 可能是楼上说的等差数列,也可能是期望你给出 IntStream.rangeClosed(1, 100).sum() 的回答[狗头] |
![]() | 14 Variazioni 2020-07-03 12:31:33 +08:00 @CismonX 感谢。。头一次知道有 IntStream 这种东西。。老了老了 |
![]() | 15 Vegetable 2020-07-03 12:32:05 +08:00 return 5050 |
![]() | 16 Vegetable 2020-07-03 12:37:34 +08:00 说实话,我觉得这题目还是有一点意义的,很多人看到题目就知道结果是 5050,因为这个题目在低年级教育当中是很常见的,可能做过原题。 无论是等差数列的性质、还是梯形面积的(上底+下底)乘以高除以 2,都是非常常见的知识点。写个循环对方说不合适正常,不过不应该一棍子打死,应该多问两句才是。 |
![]() | 17 di94sh 2020-07-03 12:39:59 +08:00 via iPhone 还是面少了,多面面就行了,o ( 1 )的算法写成 o ( n )当然不合适,多从复杂度分析方面考虑问题 |
![]() | 18 zengming00 2020-07-03 12:44:10 +08:00 无论公司有多吸引人,遇到做题直接拒绝 |
![]() | 19 jackchao7432 2020-07-03 12:45:37 +08:00 @zengming00 大厂全被你给拒了,6666 |
20 ChanKc 2020-07-03 12:46:54 +08:00 ![]() 这题用多层卷积神经网络就可以做出来了 首先你知道 1 到 2 的和是 3,1 到 3 的和是 6,0 到 1 的和是 1 由此你可以得到输入和输出的对应关系 [1,2] -> [3] [1,3] -> [6] [0,1] -> [1] 把这些数据作为训练集,然后设计一个合适的神经网络,将数据代进去做训练,得到一个训练好的模型 然后再输入 [1,100] 就可以得到结果 如果面试官说不对,那就多训练几次,得到几个不同模型,总有个对的 |
21 chanchan 2020-07-03 12:51:47 +08:00 ![]() 直接结束可太草了,他搁这找善解他意的另一半? |
![]() | 22 6IbA2bj5ip3tK49j 2020-07-03 12:53:57 +08:00 via iPhone ![]() @ChanKc 让你算个数,你在这儿跟我玩炼丹呢? |
![]() | 23 Martin9 2020-07-03 12:55:30 +08:00 面试 kpi 罢了 |
![]() | 24 yhxx 2020-07-03 12:55:39 +08:00 import { addNum } from '@xx/math' return addNum(1, 100) |
![]() | 25 est 2020-07-03 13:00:49 +08:00 via Android ![]() 这样写没毛病,编译器足够牛逼就会自动给你优化成 5050 |
26 xloger 2020-07-03 13:12:48 +08:00 这面试官不太对。面试本质上应该是个发掘面试者能力,判断是不是适合岗位需求的过程。 他遇到了你这样的回答不满意,应该引导你让你想想能不能优化,比如说那如果不用循环你能不能做到等等。他自己表意不明,写完了就说不合适也不说哪不合适,有问题的是他。 |
27 hahaandyou001 OP @zengming00 为什么呀?我是新手,大佬能讲一下吗? |
28 hahaandyou001 OP @lnim 对方就说了句不合适,就走了 |
29 ChanKc 2020-07-03 13:16:48 +08:00 via Android @xgfan 因为这题的数学表达式是 f(x,y)=(x+y)(y-x+1)/2,如果正好神经网络设计得正好是 ax^2 +by^2+cx+dy+e 的表达 其实还真有可能训练出正确的数学公式… |
![]() | 31 vigidroid 2020-07-03 13:21:25 +08:00 因为你面试的时候没戴帽子 |
![]() | 33 coderluan 2020-07-03 13:32:17 +08:00 ![]() 这面试官水平很差, 理由大家都说了, 但是楼主也有问题, 遇见奇怪的问题, 不要着急作答, 换个思路想想, 还有面试写代码别这么写, 写个函数封装好, 数据用参加, 答案用返回值, 少用 print 之类的. |
![]() | 34 dumbass 2020-07-03 13:33:13 +08:00 @IsaacYoung #3 宁就是高斯? |
35 wangkun025 2020-07-03 13:37:06 +08:00 不是大佬,觉得你写的没任何问题。 |
![]() | 36 Mohanson 2020-07-03 13:47:50 +08:00 ![]() 试了下编译器优化, 准备好板凳: ```c int main() { int s = 0; for (int i = 0; i <= 100; i++) { s += i; } return s; } ``` ```sh $ gcc -o main -O3 main.c ``` ```sh $ objdump -d main 00000000000004f0 <main>: 4f0: b8 ba 13 00 00 mov $0x13ba,%eax <----------- 0x13ba == 5050 4f5: c3 retq 4f6: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) 4fd: 00 00 00 ``` 所以我觉得最好的答案是 return 5050, 因为你已经在写代码的时候就做了编译器优化... |
37 hahaandyou001 OP @coderluan 谢谢你,我会改进的 |
38 hahaandyou001 OP @vigidroid 在线面试的 |
![]() | 39 oahebky 2020-07-03 14:00:48 +08:00 因为你在面试官走的时候,没有摘掉你的假发 ![]() |
![]() | 40 1up 2020-07-03 14:06:44 +08:00 现在的年轻人不都崇尚这种交流方式么 |
42 alienx717 2020-07-03 14:24:34 +08:00 可能是想说时间复杂度吧 |
![]() | 43 anteros 2020-07-03 14:24:45 +08:00 ![]() 你们还是文明了点,隐晦了点。 还是我来说,这面试官有病,不轻。 这种公司,也幸好楼主没面上。 |
![]() | 44 NoString 2020-07-03 14:27:43 +08:00 ```java public static int sum(int n){ return (n + 1) * n /2; } psvm(String args[]){ System.out.println(sum(100)); } ``` |
![]() | 45 azhi2007 2020-07-03 14:30:23 +08:00 via iPhone ![]() 面试官有病 需求是要表达出来的 啥都不说那肯定随便写代码了 实现了就行 难道让别人猜你想要啥样的方案吗 大家都很忙的 |
48 0x11901 2020-07-03 14:37:54 +08:00 @Mohanson 不是吧老哥……我觉得代码还是楼主那么写比较好,极致优化就应该交给编译器啊,那专门的人干专门的事啊,咱代码写得能看懂就行了,反正都是暗示编译器我要干啥,他怎么实现不关注的(→_→) |
![]() | 49 Zeuminqi 2020-07-03 14:40:37 +08:00 ![]() 你最后直接问他:您看我还有机会吗? |
50 0x11901 2020-07-03 14:44:42 +08:00 @est 说实话有些人就喜欢⑧优化,优化了半天浪费了多少时间不说,最后编译出来的性能没准还不如第一版。真当写编译器的那群聪明人不如自己呗。 |
51 mengzhuo 2020-07-03 14:47:37 +08:00 ![]() 面试就是相亲 双方觉得合适什么都好说 不合适就找个无关紧要的地方挑刺而已 (from + to) * (to-from) / 2 |
![]() | 52 cmqwan 2020-07-03 15:03:00 +08:00 via iPhone 这种写法有任何问题吗?你来一个需求我先给你做好。如果你要做成可扩展、多线程、大数据都可以慢慢迭代 |
53 hahaandyou001 OP @Qseven 人家直接都已读不回了 |
![]() | 54 houskii 2020-07-03 15:27:22 +08:00 没看出来有啥毛病。。。。感觉是面试官题目表述不清晰 |
![]() | 55 lbunderway 2020-07-03 15:30:50 +08:00 这么坑,不去也罢 |
![]() | 56 miniwade514 2020-07-03 15:39:36 +08:00 @CismonX 很有可能,就是想看看 API 用的溜不溜。 好慌,我也问过类似的问题,不过会把要求说得清楚一点。 |
57 suiterchik 2020-07-03 15:40:31 +08:00 众所周知,GCC 是高斯编译器的缩写,所以 GCC 会直接优化成 5050 |
![]() | 58 more1sec 2020-07-03 15:50:10 +08:00 估计这样给他也会被 diss 2333 sum(range(1,101)) |
![]() | 59 winglight2016 2020-07-03 15:57:58 +08:00 这面试官真奇怪呀。。。又不是不能用. (_). 就算真不能用也给个说法呀? |
![]() | 60 wupher 2020-07-03 15:59:35 +08:00 想开点。 他想是要了你,但是试用期对你各种 diss,不是更可恨? |
61 speculatorA 2020-07-03 16:06:36 +08:00 直接拒绝过分了,不过这题其实有点意思。在面试的环境下,你的解答方式,一定的意味着你后续对业务逻辑的处理态度。 |
62 xishijt 2020-07-03 16:10:36 +08:00 对面开多少工资啊,5K 还是 50K? |
63 speculatorA 2020-07-03 16:11:51 +08:00 @speculatorA 循环加法一句话带过就好了,面试官肯定知道你会写 for 循环。你非要杠面试官不把题目写清楚不能 for 循环,那面试官也没必要承受你的杠。 面试是要平等,但也得知道这是在面试不是在谈 offer 。 |
64 hahaandyou001 OP @xishijt 实习岗位来的,不到不到 5K |
![]() | 65 wangyzj 2020-07-03 16:21:41 +08:00 这不就是逗人玩呢吗 |
66 hahaandyou001 OP @wupher 我当然想得开,只是好奇,想问问各位大佬 |
67 zarte 2020-07-03 16:22:00 +08:00 就算是实际项目中这么写也没问题呀,反正编译器能优化。。。 |
![]() | 68 wsloong 2020-07-03 16:42:57 +08:00 面试说到底是展示面试者的能力,而不是面试官。 面试官最好是引导面试者理解自己提出问题的究竟意图,就是我要考你啥 |
![]() | 69 watzds 2020-07-03 16:46:00 +08:00 via Android 这是标准计算机解法,什么等差数列那是考小学数学 |
70 caizs320525 2020-07-03 16:46:46 +08:00 @ChanKc 遇事不决深度学习 |
72 gadsavesme 2020-07-03 16:55:04 +08:00 ![]() 这种就是傻逼吧,正常点的你只要写的没问题,但不是我想要的答案,肯定会引导你的,比如时间复杂度我希望是多少多少之类的,难道以后去面试还要会读心术咯 |
![]() | 73 romisanic 2020-07-03 17:05:33 +08:00 按照以往经验,这个问题虽然面试官问的是 1 到 100 的和,但是想要你设计的应该是个工具类,算法没啥好说的,主要是代码规范方面吧 抽取合适的方法(方法命名,参数命名) 比如提供合适的出入参 使用合适的数据类型 做好边界控制 错误时给出友好的提示 当然以上也是在楼主的经历之后推测出来的 |
74 JasonJoo 2020-07-03 17:12:51 +08:00 首先,可以说面试官缺乏一点引导过程(从描述中看),这点放前面省得被说歪屁股。 其次,对于正常的手撕算法来说,作为被求职者,应该体现 通过沟通交流弄清除 Case -> 对 Case 做一定的解析 -> 从直接到间接提出多个想法和思路 -> 通过交互选择其中之一或多个进行实现 -> 验证运行效果以及是否有[可能的]其它思路(但目前限于条件和信息可能无法实现) 这不仅是面试针对问题点的套路( or 流程),而且在实际工作中做需求也是一模一样的框架,在这个框架中,主要体现的是沟通、分析、比较这几个点。 当然,在具体的这件事中,可以说面试官做到了 60 分,你也做到了 60 分,互相没有去良好地适应罢了 |
![]() | 75 dolphintwo 2020-07-03 17:38:21 +08:00 感觉他想让你炫技,你想快速解决问题 |
76 goodboy95 2020-07-03 18:00:44 +08:00 我猜那家公司是不是想营造出一种自己业务蒸蒸日上,特别愿意招人的氛围? 因为这种题目,就算不给机会被秒拒,很多人都会觉得是自己的问题,认为当时自己没考虑太多,然后就会感觉“公司实际上是愿意招人的,只是自己水平不够”。这时候公司估计已经轻松刷掉一半人了。 |
77 p1llar 2020-07-03 18:04:59 +08:00 让你写更优化的方案呗,这题明显是考多线程的。 |
78 chenyu0532 2020-07-03 18:08:18 +08:00 ![]() 一道题有 10 中解法,你写了一种,老师给你判错,说不是自己想要的那种??这么 sb 么。。。 |
![]() | 79 chitanda 2020-07-03 18:10:52 +08:00 via iPhone 他意思是要 c 语言混乱大赛的那种效果? |
80 hahaandyou001 OP @goodboy95 看了各位大佬的评论,我觉得不算是自己的问题,因为对方就直接让我在五分钟内实现出来,换另一家吧,实习岗位都这样 |
81 optional 2020-07-03 18:20:48 +08:00 @zengming00 做题的公司才是好公司,实际上也是。 |
82 xiaoqiang1369 2020-07-03 18:24:27 +08:00 @mengzhuo to - from 要 +1 啊 |
83 codeloster 2020-07-03 18:26:34 +08:00 @hdbzsgm 当年刚毕业的时候我也遇到了,用了等差数列求和,没想到面试看到我的答题后问:你知道什么叫循环吗? |
![]() | 84 Ehend 2020-07-03 18:29:42 +08:00 via Android 自己不把需求说清楚,nt 面试官 |
85 mxT52CRuqR6o5 2020-07-03 18:30:53 +08:00 via Android @p1llar 那也该引导一下吧,直接说不合适,评论基本都认为面试官有问题 |
![]() | 86 |
![]() | 87 xuanbg 2020-07-03 19:09:41 +08:00 面试又不是猜谜,这个面试官做得不合适。 |
88 hahaandyou001 OP @codeloster 这么迷的么 |
![]() | 89 tesorouo 2020-07-03 20:07:59 +08:00 同意楼上,面试官闲的。至少说清楚要 O(?) |
![]() | 90 ipwx 2020-07-03 20:10:23 +08:00 面试官脑子有病吧。。。。 |
![]() | 92 freelancher 2020-07-04 00:02:12 +08:00 题出得有问题,要真想考察能力的话,要出 1+到 1W 吧。如果还是循环累加的话,可能要深入问一下思路。 不过因为是实习岗位。应该是要引导一下新人。总结:面试官也太装逼了。 |
![]() | 93 KennyMcCormick 2020-07-04 00:13:59 +08:00 via iPhone 可能是想要 n 种答案,自带优化的那种。 |
![]() | 94 yolee599 2020-07-04 00:18:30 +08:00 System.out.println((100 + 1) * 50); |
![]() | 95 tourist2018 2020-07-04 09:34:55 +08:00 这面试官就是沙雕 不过 lz 你的写法最好封装成一个函数 |
![]() | 96 nicebird 2020-07-04 09:58:26 +08:00 确实沙雕 |
![]() | 97 akring 2020-07-04 10:35:32 +08:00 @IsaacYoung #3 今日最佳 |
![]() | 98 izzy27 2020-07-04 11:26:03 +08:00 谜语人面试官 |
99 bojack 2020-07-04 12:09:00 +08:00 拿到题目别马上写代码,这个题我感觉是要写出通用的函数啥的,多跟面试官沟通 比如他想要的答案可能是: class MathUtils { public static int sum(int begin, int end, int step = 1) { ... } } 还有各种边界条件等等,如果 overflow 怎么办 |
![]() | 100 FreeEx 2020-07-04 12:30:21 +08:00 via iPhone 这种公司不去也罢,去了也是遭罪。 |