今天面试官在线问代码题,让我用 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 74
System.out.println(5050);
|
4
caowentao 2020-07-03 11:52:38 +08:00 via iPhone 1
没有给背景,确实好像在挖坑,不合适
|
5
echo1937 2020-07-03 11:52:41 +08:00 via iPhone 13
他有没有继续问,有没有其他的方法?
如果不问,问题不在你。 |
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 1
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 4
可能是楼上说的等差数列,也可能是期望你给出 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 80
这题用多层卷积神经网络就可以做出来了
首先你知道 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 5
直接结束可太草了,他搁这找善解他意的另一半?
|
22
6IbA2bj5ip3tK49j 2020-07-03 12:53:57 +08:00 via iPhone 24
@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 4
这样写没毛病,编译器足够牛逼就会自动给你优化成 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 1
这面试官水平很差, 理由大家都说了, 但是楼主也有问题, 遇见奇怪的问题, 不要着急作答, 换个思路想想, 还有面试写代码别这么写, 写个函数封装好, 数据用参加, 答案用返回值, 少用 print 之类的.
|
34
bojackhorseman 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 10
试了下编译器优化, 准备好板凳:
```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
php01 2020-07-03 14:24:45 +08:00 11
你们还是文明了点,隐晦了点。
还是我来说,这面试官有病,不轻。 这种公司,也幸好楼主没面上。 |
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 1
面试官有病 需求是要表达出来的 啥都不说那肯定随便写代码了 实现了就行 难道让别人猜你想要啥样的方案吗 大家都很忙的
|
48
0x11901 2020-07-03 14:37:54 +08:00
@Mohanson 不是吧老哥……我觉得代码还是楼主那么写比较好,极致优化就应该交给编译器啊,那专门的人干专门的事啊,咱代码写得能看懂就行了,反正都是暗示编译器我要干啥,他怎么实现不关注的(→_→)
|
49
Qseven 2020-07-03 14:40:37 +08:00 1
你最后直接问他:您看我还有机会吗?
|
50
0x11901 2020-07-03 14:44:42 +08:00
@est 说实话有些人就喜欢🦐🐥⑧优化,优化了半天浪费了多少时间不说,最后编译出来的性能没准还不如第一版。真当写编译器的那群聪明人不如自己呗。
|
51
mengzhuo 2020-07-03 14:47:37 +08:00 1
面试就是相亲
双方觉得合适什么都好说 不合适就找个无关紧要的地方挑刺而已 (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 1
这种就是傻逼吧,正常点的你只要写的没问题,但不是我想要的答案,肯定会引导你的,比如时间复杂度我希望是多少多少之类的,难道以后去面试还要会读心术咯
|
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 1
一道题有 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
bk201 2020-07-03 18:57:38 +08:00
我觉得应该是你写死了参数,应该封装个方法。
|
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
这种公司不去也罢,去了也是遭罪。
|