S*******C 发帖数: 822 | 1 看了很多工作十几年的大公司老工程师的代码又臭又长又啰嗦,就知道刷题面试是必须
的。
当然他们赶上了好时候,他们进大公司的时候根本没有刷题,现在刷题是必须的。 |
S*******C 发帖数: 822 | 2 我没刷题时代码也是又臭又长又啰嗦, 刷了一段时间之后代码明显精简高效了很多。 |
p*******n 发帖数: 2697 | |
t**r 发帖数: 3428 | |
L*****e 发帖数: 8347 | 5 上几段你的精简有效的code大家来做下code review?或者上几段你认为的老工程师的
又臭又长又罗嗦的code的例子给大家做下反面教材?
如果做过几个十人以上的projects,或者是十万行以上coding量的projects,就会明白
,码工的首要priority是可读性,可扩展性,可维护性,而不是什么精简高效。。。
【在 S*******C 的大作中提到】 : 我没刷题时代码也是又臭又长又啰嗦, 刷了一段时间之后代码明显精简高效了很多。
|
S*******C 发帖数: 822 | 6 多了,但公司不允许我贴出code
我只举个例子,一个int类型变量num有几十种可能的值, 就是1,2,...max中的一个
值,
max的值现在是40, 将来可能改成50或者100等。
现在的code是用一个switch(num)来判断的,效率极低,代码量很大,如果你刷过题就
不可能用线性查找来做
【在 L*****e 的大作中提到】 : 上几段你的精简有效的code大家来做下code review?或者上几段你认为的老工程师的 : 又臭又长又罗嗦的code的例子给大家做下反面教材? : 如果做过几个十人以上的projects,或者是十万行以上coding量的projects,就会明白 : ,码工的首要priority是可读性,可扩展性,可维护性,而不是什么精简高效。。。
|
e*******o 发帖数: 4654 | 7 你有一点想法有问题,
max的值现在是40, 将来可能改成50或者100等
这个其实是毛病,将来怎么样,你怎么知道?根据我的经验,将来如何如何,假设很少
用的上。在这点钻牛角尖没意思。
case 太多,我一般是放到一个map里,不过switch 未尝不可。
你说说应该咋做?怎么提高效率?我没刷过题,还请指教。
【在 S*******C 的大作中提到】 : 多了,但公司不允许我贴出code : 我只举个例子,一个int类型变量num有几十种可能的值, 就是1,2,...max中的一个 : 值, : max的值现在是40, 将来可能改成50或者100等。 : 现在的code是用一个switch(num)来判断的,效率极低,代码量很大,如果你刷过题就 : 不可能用线性查找来做
|
S*******C 发帖数: 822 | 8 这里要用Map,switch只适合判断的可能性不多的情况下, 像这种
几十种可能性的还用switch显然太罗嗦而且很低效, max的值我们一直在修改,系统一
直在开发,num可能性越来越多,所以max越来越大
【在 e*******o 的大作中提到】 : 你有一点想法有问题, : max的值现在是40, 将来可能改成50或者100等 : 这个其实是毛病,将来怎么样,你怎么知道?根据我的经验,将来如何如何,假设很少 : 用的上。在这点钻牛角尖没意思。 : case 太多,我一般是放到一个map里,不过switch 未尝不可。 : 你说说应该咋做?怎么提高效率?我没刷过题,还请指教。
|
e*******o 发帖数: 4654 | 9 呵呵,很难说switch 效率就低,想想如果第一种情况覆盖99%的case的时候。
不过你说的这些跟刷题鸟关系?
这些哪些超出基本cs课堂内容?为何是必须刷题才能行?
【在 S*******C 的大作中提到】 : 这里要用Map,switch只适合判断的可能性不多的情况下, 像这种 : 几十种可能性的还用switch显然太罗嗦而且很低效, max的值我们一直在修改,系统一 : 直在开发,num可能性越来越多,所以max越来越大
|
S*******C 发帖数: 822 | 10 switch是线性查找啊,时间复杂度是O(max),而用Map只要O(1)的时间, 更何况在有几
十种可能的时候switch代码极其啰嗦。
虽然brute force的解法很多情况下可以work,但面试的时候应该会把只会brute force
不知道优化解法的人刷掉,这就是目的。
当然我说的例子很简单, 很多人不需要刷题也知道。
【在 e*******o 的大作中提到】 : 呵呵,很难说switch 效率就低,想想如果第一种情况覆盖99%的case的时候。 : 不过你说的这些跟刷题鸟关系? : 这些哪些超出基本cs课堂内容?为何是必须刷题才能行?
|
|
|
e*******o 发帖数: 4654 | 11 你没仔细看我评论,O(max) 不一定就比 O(1) 低效。另外,你create map的时间不算?
你要根据实际情况benchmark一下才知道。
我不觉得你刷题能学到的知识超过了计算机专业课堂所学。
事实上,你刷的算法,都是几十年前都研究好的,那个时候还没刷题这回事。
所以你说啥刷题必须,完全扯淡。
force
【在 S*******C 的大作中提到】 : switch是线性查找啊,时间复杂度是O(max),而用Map只要O(1)的时间, 更何况在有几 : 十种可能的时候switch代码极其啰嗦。 : 虽然brute force的解法很多情况下可以work,但面试的时候应该会把只会brute force : 不知道优化解法的人刷掉,这就是目的。 : 当然我说的例子很简单, 很多人不需要刷题也知道。
|
S*******C 发帖数: 822 | 12 map当然只create一次,然后反复利用。
我刷题不会创造新的算法,我只是实现现有的算法。面试本来就不会让你发明一个算法
出来。
你不刷可以,我几年前也是这样的,反正找大公司工作时就会知道了。
算?
【在 e*******o 的大作中提到】 : 你没仔细看我评论,O(max) 不一定就比 O(1) 低效。另外,你create map的时间不算? : 你要根据实际情况benchmark一下才知道。 : 我不觉得你刷题能学到的知识超过了计算机专业课堂所学。 : 事实上,你刷的算法,都是几十年前都研究好的,那个时候还没刷题这回事。 : 所以你说啥刷题必须,完全扯淡。 : : force
|
z****e 发帖数: 54598 | 13 map也有很多种啊
不是所有的map都是hashmap那样amortised constant复杂度
比如treemap效率就比较低
switch的话,应该是写起来方便一点
而且这里几十种情况的话,建议你用上visitor
直接把这个switch去掉,还有古德霸说过那个反射的用法
也可以干掉switch
另外加上enum,有限数量的东西全部应该用enum
class是给无限数量用的 |
S*******C 发帖数: 822 | 14 那我没说清楚, 我说的Map是这种,最常用的那种
Map map = new HashMap<>();
【在 z****e 的大作中提到】 : map也有很多种啊 : 不是所有的map都是hashmap那样amortised constant复杂度 : 比如treemap效率就比较低 : switch的话,应该是写起来方便一点 : 而且这里几十种情况的话,建议你用上visitor : 直接把这个switch去掉,还有古德霸说过那个反射的用法 : 也可以干掉switch : 另外加上enum,有限数量的东西全部应该用enum : class是给无限数量用的
|
z****e 发帖数: 54598 | 15
switch在几十个判断时候,跟hashmap的那种判断差别不大
就是几十次操作跟可能是一次操作的差异
jvm在我机器上,一秒可以执行大改2万次复杂的操作
比如new一个对象酱紫,所以几十次的节省在这里不会有太大的差异
如果是几万次,也许会有一两秒的差异
这里主要问题是这几十个statement看上去比较恶心
最好用上反射,通过enum直接获取class后执行
或者用visitor
【在 S*******C 的大作中提到】 : 多了,但公司不允许我贴出code : 我只举个例子,一个int类型变量num有几十种可能的值, 就是1,2,...max中的一个 : 值, : max的值现在是40, 将来可能改成50或者100等。 : 现在的code是用一个switch(num)来判断的,效率极低,代码量很大,如果你刷过题就 : 不可能用线性查找来做
|
z****e 发帖数: 54598 | 16
还没用上gauva?
Maps.newHashMap();
这里用newEnumMap();会更好
【在 S*******C 的大作中提到】 : 那我没说清楚, 我说的Map是这种,最常用的那种 : Map map = new HashMap<>();
|
S*******C 发帖数: 822 | 17 这里需要用几十个数值和相应对象一对一绑定, 用enum不合适,可能我一开始没说清楚
【在 z****e 的大作中提到】 : map也有很多种啊 : 不是所有的map都是hashmap那样amortised constant复杂度 : 比如treemap效率就比较低 : switch的话,应该是写起来方便一点 : 而且这里几十种情况的话,建议你用上visitor : 直接把这个switch去掉,还有古德霸说过那个反射的用法 : 也可以干掉switch : 另外加上enum,有限数量的东西全部应该用enum : class是给无限数量用的
|
z****e 发帖数: 54598 | 18
清楚
可以啊,直接在enum里面保留对象的reference
然后直接get出来就好了
【在 S*******C 的大作中提到】 : 这里需要用几十个数值和相应对象一对一绑定, 用enum不合适,可能我一开始没说清楚
|
S*******C 发帖数: 822 | 19 如果这个Object只是一个String而不是user-defined class呢?
用这个相对于HashMap的好处是什么?
【在 z****e 的大作中提到】 : : 清楚 : 可以啊,直接在enum里面保留对象的reference : 然后直接get出来就好了
|
z****e 发帖数: 54598 | 20
好处是便于扩展啊
比如你有n个类了
你想新增一个
用Class.forName("MyClassName"+i).newInstance();
比如你新增了一个
3
那么新建一个MyClassName3类,然后就可以开始写了
不需要修改原来代码,自己定义好interface就是了
连switch还有map都不用
【在 S*******C 的大作中提到】 : 如果这个Object只是一个String而不是user-defined class呢? : 用这个相对于HashMap的好处是什么?
|
|
|
z****e 发帖数: 54598 | 21 如果是visitor的话
自己定义一下visit方法
然后传入
MyClassName3{
Visitor visitor;
visitor.visit(){
}}
不过比较麻烦,算了,还是反射吧,那个简单多了 |
b******y 发帖数: 9224 | 22 简单的事情为啥要复杂化??
Hash map 占内存,初始化麻烦,这也就是做应用吧?如果搞操作系统等对内存要求高
的事情,就不一定合适了。
刷不刷题和这个例子没关系。 |
S*********9 发帖数: 541 | 23 记得当年看David Cutler的code,同样的代码在一个文件里copy了好几次,小年轻看到
了都忍不住手痒想refactor一下,换成inline也好啊。人家大爷牛就牛在知道有人会手
痒,专门写下comment让大家不要犯贱。compiler有很多优化不是刷题能刷到的。
switch compiler一般都是有优化的,这些map估计没有 ...
【在 e*******o 的大作中提到】 : 你有一点想法有问题, : max的值现在是40, 将来可能改成50或者100等 : 这个其实是毛病,将来怎么样,你怎么知道?根据我的经验,将来如何如何,假设很少 : 用的上。在这点钻牛角尖没意思。 : case 太多,我一般是放到一个map里,不过switch 未尝不可。 : 你说说应该咋做?怎么提高效率?我没刷过题,还请指教。
|
L*****e 发帖数: 8347 | 24 是什么意思?每个switch的case里的statement是什么?给另外一个variable赋值?
【在 S*******C 的大作中提到】 : 如果这个Object只是一个String而不是user-defined class呢? : 用这个相对于HashMap的好处是什么?
|
S*******C 发帖数: 822 | 25 这个函数要不停的调用,所以应该做成static方法
其实不用HashMap也可以,用一个array of objects是最简单的
这个例子和刷不刷题关系不大,因为太简单
【在 b******y 的大作中提到】 : 简单的事情为啥要复杂化?? : Hash map 占内存,初始化麻烦,这也就是做应用吧?如果搞操作系统等对内存要求高 : 的事情,就不一定合适了。 : 刷不刷题和这个例子没关系。
|
S*******C 发帖数: 822 | 26 compiler对Switch的优化就是做binary search, 不是所有compiler都会做到。
而且就算是binary search, 肯定没有用an array of objects简单明了高效。
【在 S*********9 的大作中提到】 : 记得当年看David Cutler的code,同样的代码在一个文件里copy了好几次,小年轻看到 : 了都忍不住手痒想refactor一下,换成inline也好啊。人家大爷牛就牛在知道有人会手 : 痒,专门写下comment让大家不要犯贱。compiler有很多优化不是刷题能刷到的。 : switch compiler一般都是有优化的,这些map估计没有 ...
|
p*****y 发帖数: 529 | 27 同学, 这个Map有autoboxing problem你都不提出来讨论一下就断
定其比switch case快, 你觉得是你还是那些老年马工too simple, sometimes naive?
还有有个著名的design principle: don't optimize till you have to, 你不知道?
【在 S*******C 的大作中提到】 : 那我没说清楚, 我说的Map是这种,最常用的那种 : Map map = new HashMap<>();
|
L*****e 发帖数: 8347 | 28 这个主要看这些 objects是static的还是dynamic的,如果当初需求上没有dynamic的要
求,那么用switch木有啥问题。如果是后期添加了dynamic的要求,那么architect要做
决定是不是需要做refactoring。所以你这个例子既说明不了老码工的code又臭又长又
罗嗦,更说明不了刷题面试是必须的。。。打回去重新找个例子。。。
【在 S*******C 的大作中提到】 : compiler对Switch的优化就是做binary search, 不是所有compiler都会做到。 : 而且就算是binary search, 肯定没有用an array of objects简单明了高效。
|
p*****y 发帖数: 529 | 29 这种情况下大牛都是用一个int map解决问题的, 注意不是Map.
【在 S*******C 的大作中提到】 : 这个函数要不停的调用,所以应该做成static方法 : 其实不用HashMap也可以,用一个array of objects是最简单的 : 这个例子和刷不刷题关系不大,因为太简单
|
S*******C 发帖数: 822 | 30 我说了是用array of objects最简单明了高效
一开始说HashMap只是考虑max有可能变得很大而已
而且这种语言其实不是JAVA,他根本没有复杂的数据结构, 用array就是最好的选择
�7�2
【在 p*****y 的大作中提到】 : 这种情况下大牛都是用一个int map解决问题的, 注意不是Map.
|
|
|
g*****g 发帖数: 34805 | 31 这种如果你能传入一个Class>,用反射,代码就要干净很多。数值总有个来源,那个
来源可以产生Class>. 这样你就不用switch了。
清楚
【在 S*******C 的大作中提到】 : 这里需要用几十个数值和相应对象一对一绑定, 用enum不合适,可能我一开始没说清楚
|
S*******C 发帖数: 822 | 32 如果这上百行的switch代码不是老码农写的,而是一个刚来几天的实习生写的你就不这
么说了
naive?
【在 p*****y 的大作中提到】 : 同学, 这个Map有autoboxing problem你都不提出来讨论一下就断 : 定其比switch case快, 你觉得是你还是那些老年马工too simple, sometimes naive? : 还有有个著名的design principle: don't optimize till you have to, 你不知道?
|
S*******C 发帖数: 822 | 33 写代码,尤其是第一遍的时候应该精益求精。这样以后维护性、可读性、扩展性好很多。
leetcode的官方solution为什么叫short and clean solution? leetcode上很多题都有
几十种写法,但精简高效的解法永远是最受欢迎的。 |
p*****y 发帖数: 529 | 34 什么时候leetcode成了大工程coding srandard了? LOL。 敢情FLG的VP都是刷题刷来
的?
多。
【在 S*******C 的大作中提到】 : 写代码,尤其是第一遍的时候应该精益求精。这样以后维护性、可读性、扩展性好很多。 : leetcode的官方solution为什么叫short and clean solution? leetcode上很多题都有 : 几十种写法,但精简高效的解法永远是最受欢迎的。
|
c******f 发帖数: 243 | 35 工作写code最重要是可读, design pattern吧
感觉跟刷题是两回事 |
y***a 发帖数: 840 | 36 编译器处理SWITCH没你想的那么简单。可以做BINARY SEARCh, 但很多时候也可以做
JUMP TABLE,跟你那个MAP比也不会慢。
而且有时候BINARY SEARCh说不定比JUMPTABLE都要快,跟你的CASE的分布以及编译器的
代码生成有关系。
【在 S*******C 的大作中提到】 : compiler对Switch的优化就是做binary search, 不是所有compiler都会做到。 : 而且就算是binary search, 肯定没有用an array of objects简单明了高效。
|
g*****g 发帖数: 34805 | 37 几十个 enum挨个找都没多久,瓶颈从来不在这种地方。
【在 c******f 的大作中提到】 : 工作写code最重要是可读, design pattern吧 : 感觉跟刷题是两回事
|
p********2 发帖数: 25 | 38 大牛在哪个厂啊?
【在 S*******C 的大作中提到】 : 看了很多工作十几年的大公司老工程师的代码又臭又长又啰嗦,就知道刷题面试是必须 : 的。 : 当然他们赶上了好时候,他们进大公司的时候根本没有刷题,现在刷题是必须的。
|
n**s 发帖数: 2230 | 39 培养简洁高效的写代码习惯是好的,但一般对系统的性能根本没影响。
代码的可读性和可维护性才是重要的。过于追求所谓时间空间复杂性指标,反而适得其
反。 |
j******o 发帖数: 4219 | 40 还精益求精?基本上第一遍的时候都是保证能够work,维护性可读性啥的都是后来慢慢
考虑的。
现在的靠法速度,等你解决简单高效,公司早就倒了。
多。
【在 S*******C 的大作中提到】 : 写代码,尤其是第一遍的时候应该精益求精。这样以后维护性、可读性、扩展性好很多。 : leetcode的官方solution为什么叫short and clean solution? leetcode上很多题都有 : 几十种写法,但精简高效的解法永远是最受欢迎的。
|
|
|
h****e 发帖数: 2125 | 41 我去,好像是你水平不怎么样吧。
【在 S*******C 的大作中提到】 : 多了,但公司不允许我贴出code : 我只举个例子,一个int类型变量num有几十种可能的值, 就是1,2,...max中的一个 : 值, : max的值现在是40, 将来可能改成50或者100等。 : 现在的code是用一个switch(num)来判断的,效率极低,代码量很大,如果你刷过题就 : 不可能用线性查找来做
|
e***a 发帖数: 1661 | 42 different times, different levels. |
g*****0 发帖数: 17 | 43 太低估编译器和解释器了。switch一般都是O(1)。 |
A***o 发帖数: 358 | 44 code base上了million行,局部再清楚也没用;再厚黑一点,裁员的时候容易维护的先
裁掉,升级的时候别人搞不动的先升
【在 L*****e 的大作中提到】 : 上几段你的精简有效的code大家来做下code review?或者上几段你认为的老工程师的 : 又臭又长又罗嗦的code的例子给大家做下反面教材? : 如果做过几个十人以上的projects,或者是十万行以上coding量的projects,就会明白 : ,码工的首要priority是可读性,可扩展性,可维护性,而不是什么精简高效。。。
|
z****e 发帖数: 54598 | 45
这就是wishful thinking了
升级都搞不定的话,估计这个公司就离玩完不太远了
到时候市场整个淘汰掉这家公司
剩谁都没用
【在 A***o 的大作中提到】 : code base上了million行,局部再清楚也没用;再厚黑一点,裁员的时候容易维护的先 : 裁掉,升级的时候别人搞不动的先升
|
L*****e 发帖数: 8347 | 46 太天真了,三五人的小作坊靠这种厚黑术可能会有一点job security,大点的公司,做
大点的project,你三天都过不了code review,两个星期后先把这种放上PIP了。。。
【在 A***o 的大作中提到】 : code base上了million行,局部再清楚也没用;再厚黑一点,裁员的时候容易维护的先 : 裁掉,升级的时候别人搞不动的先升
|
s*****r 发帖数: 43070 | 47 人家烙印拼命往产品上面靠,增加自己的business value,先当project lead,然后是
manager,senior manager,director,一路上去
一群傻X老中,天天琢磨茴字的几种写法,在烙印下面写code
悲哀 |
s*****r 发帖数: 43070 | 48 三天过不了code review是正常的,改来改去的一周就没了
【在 L*****e 的大作中提到】 : 太天真了,三五人的小作坊靠这种厚黑术可能会有一点job security,大点的公司,做 : 大点的project,你三天都过不了code review,两个星期后先把这种放上PIP了。。。
|
s*****r 发帖数: 43070 | 49 刷题的coding和公司project是两回事
想code简洁清晰,多用FP,design pattern,还有DI,码code又快又好
多。
【在 S*******C 的大作中提到】 : 写代码,尤其是第一遍的时候应该精益求精。这样以后维护性、可读性、扩展性好很多。 : leetcode的官方solution为什么叫short and clean solution? leetcode上很多题都有 : 几十种写法,但精简高效的解法永远是最受欢迎的。
|
s**x 发帖数: 7506 | 50 你的结论是对的,推理是错的。
刷题主要目的是应试,算法转代码。
合格的码工跟本就不应存在你说的那些问题。 |
|
|
l********n 发帖数: 1038 | 51 要是刷提能取代正常的cs教育和工作经验,那真是太值了。干脆取消学校教育了,也不
用积累工作经验了 |
A***o 发帖数: 358 | 52 billion dollar business,手快的半年那段code就只有两三个人有资格做code review
了,其他的人过来review自找没趣。
【在 L*****e 的大作中提到】 : 太天真了,三五人的小作坊靠这种厚黑术可能会有一点job security,大点的公司,做 : 大点的project,你三天都过不了code review,两个星期后先把这种放上PIP了。。。
|