r****s 发帖数: 42 | 1 刚结束saleforce的店面,两个烙印 一男一女,题目:// Function which takes int
and output all the prime numbers from 1 to the input int.input=10, output=2,
3,5,7.
同时还问了项目 经验等。
我code用Sieve of Eratosthenes,算比较熟练的写了出来。其中一个烙印看不懂,老
针对code提问,后来,我给code加上commend,并解释, 然后一个烙印说写的正确。然
后他们就问了test的问题。
我总体感觉,这次店面 算挺成功的, 希望 烙印别黑我,还请同胞们 扶一把,是QE组
的。 |
c********e 发帖数: 186 | |
r****s 发帖数: 42 | 3 哎,HR回复悲剧了。我回HR要interview feedback。
HR回邮件说:"Interviewers said there were many errors in the programming
exercise...........the biggest down fall from the interview process"
烙印也太黑了吧,太不公平了。我code写的非常熟练 sieve of Eratosthenes,边写边
讲给他们听,最后还加注释并再讲解。
被烙印黑不止一次了。。烙印这样 卖着良心说瞎话,他们怎么会平安!
【在 c********e 的大作中提到】 : bless
|
f**********3 发帖数: 295 | 4 唉,只能相信湿婆会收拾他们了
【在 r****s 的大作中提到】 : 哎,HR回复悲剧了。我回HR要interview feedback。 : HR回邮件说:"Interviewers said there were many errors in the programming : exercise...........the biggest down fall from the interview process" : 烙印也太黑了吧,太不公平了。我code写的非常熟练 sieve of Eratosthenes,边写边 : 讲给他们听,最后还加注释并再讲解。 : 被烙印黑不止一次了。。烙印这样 卖着良心说瞎话,他们怎么会平安!
|
h*****a 发帖数: 1718 | 5 把code贴出来看看?
【在 r****s 的大作中提到】 : 哎,HR回复悲剧了。我回HR要interview feedback。 : HR回邮件说:"Interviewers said there were many errors in the programming : exercise...........the biggest down fall from the interview process" : 烙印也太黑了吧,太不公平了。我code写的非常熟练 sieve of Eratosthenes,边写边 : 讲给他们听,最后还加注释并再讲解。 : 被烙印黑不止一次了。。烙印这样 卖着良心说瞎话,他们怎么会平安!
|
t******d 发帖数: 1383 | |
n****e 发帖数: 678 | 7 加油,相信自己!
这种公司没去成,也没关系。你也不想每天和这种烙印一起工作吧。
【在 r****s 的大作中提到】 : 哎,HR回复悲剧了。我回HR要interview feedback。 : HR回邮件说:"Interviewers said there were many errors in the programming : exercise...........the biggest down fall from the interview process" : 烙印也太黑了吧,太不公平了。我code写的非常熟练 sieve of Eratosthenes,边写边 : 讲给他们听,最后还加注释并再讲解。 : 被烙印黑不止一次了。。烙印这样 卖着良心说瞎话,他们怎么会平安!
|
r****s 发帖数: 42 | 8 用的是collabedit,面试结束,我还截屏了下备份,在eclipse中也测试成功。 code在
下面。 也造福其他童靴。
public void printPrimeNum(int num){
boolean[] flags=new boolean[num+1];
for(int i=2; i
for(int i=2; i*i<=num; i++){
if(flags[i]){
for(int j=i; j*i<=num;j++)
flags[i*j]=false;
}
}
System.out.println("The primes are: ");
for(int i=0;i
if(flags[i]==true) System.out.print(" "+i+" ");
}
}
==============================================
【在 h*****a 的大作中提到】 : 把code贴出来看看?
|
r****s 发帖数: 42 | 9 @lcn: 童靴, 一样的。你把我的code 复制到eclipse上,再好好看看,跑跑。
我知道你说的意思,我的code 筛查的上线也是sqrt(i),在for loop里:你再看看
for(int i=2; i*i<=num; i++){
if(flags[i]){
for(int j=i; j*i<=num;j++)
flags[i*j]=false;
}
}
|
z****e 发帖数: 54598 | 10 等下,你为什么不用Math.sqrt?
这个是java.math,基础包,为什么不用?
【在 r****s 的大作中提到】 : @lcn: 童靴, 一样的。你把我的code 复制到eclipse上,再好好看看,跑跑。 : 我知道你说的意思,我的code 筛查的上线也是sqrt(i),在for loop里:你再看看 : for(int i=2; i*i<=num; i++){ : if(flags[i]){ : for(int j=i; j*i<=num;j++) : flags[i*j]=false; : } : } :
|
|
|
f**********3 发帖数: 295 | 11 这个可以argue,算乘法比平方根快多了
【在 z****e 的大作中提到】 : 等下,你为什么不用Math.sqrt? : 这个是java.math,基础包,为什么不用?
|
j***1 发帖数: 39 | 12 我看上面的code, i*i<=num 和 Math.sqrt()一样的,一个穿上马甲,一个没穿马甲。
【在 z****e 的大作中提到】 : 等下,你为什么不用Math.sqrt? : 这个是java.math,基础包,为什么不用?
|
r****s 发帖数: 42 | 13 其中一个烙印在面试时候,说了 我是正确的,另一个烙印才知道她慢别人半拍。
这个无法argue吧,它们两个,我一个,人证都在烙印那里。。只能move on了。
这些烙印,要用白酒泡它们,跟蟑螂一个德性。
【在 f**********3 的大作中提到】 : 这个可以argue,算乘法比平方根快多了
|
z****e 发帖数: 54598 | 14 可读性就变差了
【在 j***1 的大作中提到】 : 我看上面的code, i*i<=num 和 Math.sqrt()一样的,一个穿上马甲,一个没穿马甲。
|
r****s 发帖数: 42 | 15 其实,我在面试时候边敲边讲到 i*i<=num 时候, 有解释到 这是 sqrt(num),不需要i
一直增到num,因为a*b=num,if a>sqrt,then b
【在 z****e 的大作中提到】 : 可读性就变差了
|
l*n 发帖数: 529 | 16 你的筛法是对的。不过跟记录质数数组相比的缺点是空间分配太多了。
【在 r****s 的大作中提到】 : @lcn: 童靴, 一样的。你把我的code 复制到eclipse上,再好好看看,跑跑。 : 我知道你说的意思,我的code 筛查的上线也是sqrt(i),在for loop里:你再看看 : for(int i=2; i*i<=num; i++){ : if(flags[i]){ : for(int j=i; j*i<=num;j++) : flags[i*j]=false; : } : } :
|
r****s 发帖数: 42 | 17 说反了吧,跟记录质数数组相比 空间分配是节省了。因为 boolean is 1 bit,你额外
记录int的质数,int is 4 byte。最后打印出数组元素为true的boolean数组的下标,
此处,没有额外的占空间了。
【在 l*n 的大作中提到】 : 你的筛法是对的。不过跟记录质数数组相比的缺点是空间分配太多了。
|
l*n 发帖数: 529 | 18 呃,感觉还是记录质数比较划算。java的boolean存储是jvm dependent的,常见的是
1byte。即便是bit,差距也是32,而质数的密度是1/ln(n),asymptotically还是占优
吧。
【在 r****s 的大作中提到】 : 说反了吧,跟记录质数数组相比 空间分配是节省了。因为 boolean is 1 bit,你额外 : 记录int的质数,int is 4 byte。最后打印出数组元素为true的boolean数组的下标, : 此处,没有额外的占空间了。
|
n****e 发帖数: 678 | 19 请问如何记录质数数组? 能给个codes吗? 多谢!
【在 l*n 的大作中提到】 : 你的筛法是对的。不过跟记录质数数组相比的缺点是空间分配太多了。
|
l*n 发帖数: 529 | 20 就是个arraylist啊,判断是质数了直接add进去就好了,反正amortized complexity
是O(1)。
【在 n****e 的大作中提到】 : 请问如何记录质数数组? 能给个codes吗? 多谢!
|
|
|
n****e 发帖数: 678 | 21 那如何判断质数?
这样你的算法复杂度是否比Sieve of Eratosthenes方法高?
【在 l*n 的大作中提到】 : 就是个arraylist啊,判断是质数了直接add进去就好了,反正amortized complexity : 是O(1)。
|
j***1 发帖数: 39 | 22 把你的code发上来,让我们看看吧。
【在 l*n 的大作中提到】 : 就是个arraylist啊,判断是质数了直接add进去就好了,反正amortized complexity : 是O(1)。
|
l*n 发帖数: 529 | 23 void printPrimes(int n) {
assert (n > 0);
ArrayList memo = new ArrayList();
if (n < 2)
return;
memo.add(2);
for (int i = 3; i <= n; i++) {
int k = 0;
while (memo.get(k) * memo.get(k) <= i && i % memo.get(k) != 0)
k++;
if (memo.get(k) * memo.get(k) > i)
memo.add(i);
}
System.out.println(Arrays.toString(memo.toArray()));
}
【在 j***1 的大作中提到】 : 把你的code发上来,让我们看看吧。
|
n****e 发帖数: 678 | 24 这个 while 循环
while (memo.get(k) * memo.get(k) <= i && i % memo.get(k) != 0)
k++
k会越界吗?
【在 l*n 的大作中提到】 : void printPrimes(int n) { : assert (n > 0); : ArrayList memo = new ArrayList(); : if (n < 2) : return; : memo.add(2); : for (int i = 3; i <= n; i++) { : int k = 0; : while (memo.get(k) * memo.get(k) <= i && i % memo.get(k) != 0) : k++;
|
l*n 发帖数: 529 | 25 不会啊,在sqrt(n)到n之间肯定有质数。
【在 n****e 的大作中提到】 : 这个 while 循环 : while (memo.get(k) * memo.get(k) <= i && i % memo.get(k) != 0) : k++ : k会越界吗?
|
z****e 发帖数: 54598 | 26 算一次,找个变量存起来不就好了
不用每次都算
【在 f**********3 的大作中提到】 : 这个可以argue,算乘法比平方根快多了
|
z****e 发帖数: 54598 | 27 嗯,数组平常用得的确不是很多
【在 l*n 的大作中提到】 : 就是个arraylist啊,判断是质数了直接add进去就好了,反正amortized complexity : 是O(1)。
|
n****e 发帖数: 678 | 28 哦,如果这个是成立的理论的话,那这个codes还是很好的, 学习了,多谢!
【在 l*n 的大作中提到】 : 不会啊,在sqrt(n)到n之间肯定有质数。
|
z****e 发帖数: 54598 | 29 楼主代码不能说是错的
只能说是感觉不是那么好
但是说是错的不让过也明显扯淡了
阿三黑人了 |
j***1 发帖数: 39 | 30 感觉你的code用到ArrayList,这个不仅用到stack存reference,还用到heap
存Integer,所以还是耗空间了。另外 如果print prime num,够多,这个ArrayList<
Integer>的memo.add()会超过它的capacity,然后ArrayList就内部自己 增长它的容量
,然后把原先的element搬到新的ArrayList上去,,这样下来,还是耗时间了。
【在 l*n 的大作中提到】 : 不会啊,在sqrt(n)到n之间肯定有质数。
|
|
|
z****e 发帖数: 54598 | 31 就是要放到heap去,stack是珍惜资源,远比heap珍贵
gc时候基本上都是扫描stack,而不是heap
时间复杂度如果对方问到这一步了
正好扯一下amortised complexity这个概念
heap
【在 j***1 的大作中提到】 : 感觉你的code用到ArrayList,这个不仅用到stack存reference,还用到heap : 存Integer,所以还是耗空间了。另外 如果print prime num,够多,这个ArrayList< : Integer>的memo.add()会超过它的capacity,然后ArrayList就内部自己 增长它的容量 : ,然后把原先的element搬到新的ArrayList上去,,这样下来,还是耗时间了。
|
t********3 发帖数: 567 | 32 move on吧
其实code是不是有些小问题没有那么重要,可以尝试一下边写边解释,尤其是这种电话
面试,写几句最好确认一下对方是和你在一个page上。如果出现你说的这个情况:
“其中一个烙印看不懂”
就已经很危险了,没有人希望让自己看起来蠢,哪怕它是真的很蠢。能够写出好的代码
,和说服别人同意你的东西是好的,是一样的重要
【在 r****s 的大作中提到】 : 刚结束saleforce的店面,两个烙印 一男一女,题目:// Function which takes int : and output all the prime numbers from 1 to the input int.input=10, output=2, : 3,5,7. : 同时还问了项目 经验等。 : 我code用Sieve of Eratosthenes,算比较熟练的写了出来。其中一个烙印看不懂,老 : 针对code提问,后来,我给code加上commend,并解释, 然后一个烙印说写的正确。然 : 后他们就问了test的问题。 : 我总体感觉,这次店面 算挺成功的, 希望 烙印别黑我,还请同胞们 扶一把,是QE组 : 的。
|
z****e 发帖数: 54598 | 33 我觉得筛法最直接的思路是
1先算sqrt
2然后存从1到sqrt之间的质数,存成一个collection
3然后再从sqrt找到n之间的质数,存成另外一个collection
4最后合并两个collection
可以优化,但是这样做比较直观
而且可以用到两个java核心类库
一个是math一个是util,所以这里有些可以展开的地方
要i
【在 r****s 的大作中提到】 : 其实,我在面试时候边敲边讲到 i*i<=num 时候, 有解释到 这是 sqrt(num),不需要i : 一直增到num,因为a*b=num,if a>sqrt,then b
|
f*****t 发帖数: 13 | 34 这行有问题:
for(int j=i; j*i<=num;j++)
改成:
for(int j=2; j*i<=num;j++)
【在 r****s 的大作中提到】 : 用的是collabedit,面试结束,我还截屏了下备份,在eclipse中也测试成功。 code在 : 下面。 也造福其他童靴。 : public void printPrimeNum(int num){ : boolean[] flags=new boolean[num+1]; : for(int i=2; i: : for(int i=2; i*i<=num; i++){ : if(flags[i]){ : for(int j=i; j*i<=num;j++) : flags[i*j]=false;
|
r****s 发帖数: 42 | 35 @flgsmit: 那行没有问题。你可以把code放到eclipse上跑下,再看看code。code是没
错的。
for(int i=2; i*i<=num; i++){
if(flags[i]){
for(int j=i; j*i<=num;j++)
flags[i*j]=false;
}
}
如果把j=i,改成j=2的话,你也能得到正确结果,但是你做了重复的事情,你用i=2;i=
3;i=4带进去试试,就会发现如果j=2,是做了之前已经做过的工作了,重复了。
wiki上筛选的描述:http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
....move on了。烙印很恶心。大家以后需提防。
【在 f*****t 的大作中提到】 : 这行有问题: : for(int j=i; j*i<=num;j++) : 改成: : for(int j=2; j*i<=num;j++)
|
x*******d 发帖数: 196 | 36 哥们儿,代码写的不错。经典的筛法。
面你的人水平差,可能没见过这个方法,这个有可能是黑你;还有可能是真傻,然后又
自以为是,觉得你方法不行。
有个小优化可以考虑下,内循环的乘法可以避免,每次用加法。
for(int j=i*i; j<=num;j+=i)
flags[j] = false;
用的是collabedit,面试结束,我还截屏了下备份,在eclipse中也测试成功。 code在
下面。 也造福其他童靴。
public void printPrimeNum(int num){
boolean[] flags=new boolean[num+1];
for(int i=2; i
for(int i=2; i*i<=num; i++){
if(flags[i]){
for(int j=i; j*i<=num;j++)
flags[i*j]=false;
}
}
System.out.println("The primes are: ");
for(int i=0;i
if(flags[i]==true) System.out.print(" "+i+" ");
}
}
==============================================
【在 r****s 的大作中提到】 : 用的是collabedit,面试结束,我还截屏了下备份,在eclipse中也测试成功。 code在 : 下面。 也造福其他童靴。 : public void printPrimeNum(int num){ : boolean[] flags=new boolean[num+1]; : for(int i=2; i: : for(int i=2; i*i<=num; i++){ : if(flags[i]){ : for(int j=i; j*i<=num;j++) : flags[i*j]=false;
|
r****s 发帖数: 42 | 37 谢谢楼上所有大家们的鼓励和指点。
职位是给new grad的,所以考察题也不会非常难,就是测基础功夫。
是那些烙印有问题。被黑不止一次了。才在这里说。前两天Yahoo的店面,面试官又是
烙印,先是迟到,然后打电话说,过5分钟再打给你。后面打进来面试,态度很急促,
汗,感觉面试官不是很高兴。不会是不好的前兆吧。只能bless了。写code的题目是老
题,榜上的面经里有谈过。曾经写过,我还是很熟练的写了出来。
同时,顺求 牛人们内推,大家公司职位有open的,都可以 站内联系我。
我基础功扎实,吃苦耐劳,认真负责,遵规守距,团结互助。我住在湾区,只求份工作。
我擅长Java,SQL等+javascript,在校有RA经验如web开发,后台数据处理。
【在 l*n 的大作中提到】 : 不会啊,在sqrt(n)到n之间肯定有质数。
|
j***1 发帖数: 39 | 38 bless.
作。
【在 r****s 的大作中提到】 : 谢谢楼上所有大家们的鼓励和指点。 : 职位是给new grad的,所以考察题也不会非常难,就是测基础功夫。 : 是那些烙印有问题。被黑不止一次了。才在这里说。前两天Yahoo的店面,面试官又是 : 烙印,先是迟到,然后打电话说,过5分钟再打给你。后面打进来面试,态度很急促, : 汗,感觉面试官不是很高兴。不会是不好的前兆吧。只能bless了。写code的题目是老 : 题,榜上的面经里有谈过。曾经写过,我还是很熟练的写了出来。 : 同时,顺求 牛人们内推,大家公司职位有open的,都可以 站内联系我。 : 我基础功扎实,吃苦耐劳,认真负责,遵规守距,团结互助。我住在湾区,只求份工作。 : 我擅长Java,SQL等+javascript,在校有RA经验如web开发,后台数据处理。
|
f***8 发帖数: 510 | 39 唉,现在面试,基本没有不碰到烙印的。烙印对付人的办法就是你算法好,IT问你基础
,基础好,IT问你算法,反正就不想让你过。别说你NEW GRAD,我工作多年的,碰到烙
印也要载。唯一可以报复的就是下次我面人,我决不让烙印混进来(暂时MAMANGER还不
是烙印)。
作。
【在 r****s 的大作中提到】 : 谢谢楼上所有大家们的鼓励和指点。 : 职位是给new grad的,所以考察题也不会非常难,就是测基础功夫。 : 是那些烙印有问题。被黑不止一次了。才在这里说。前两天Yahoo的店面,面试官又是 : 烙印,先是迟到,然后打电话说,过5分钟再打给你。后面打进来面试,态度很急促, : 汗,感觉面试官不是很高兴。不会是不好的前兆吧。只能bless了。写code的题目是老 : 题,榜上的面经里有谈过。曾经写过,我还是很熟练的写了出来。 : 同时,顺求 牛人们内推,大家公司职位有open的,都可以 站内联系我。 : 我基础功扎实,吃苦耐劳,认真负责,遵规守距,团结互助。我住在湾区,只求份工作。 : 我擅长Java,SQL等+javascript,在校有RA经验如web开发,后台数据处理。
|
s*****r 发帖数: 43070 | 40 感觉不够优化,应该有快速前进地步子。
质数不能被小于平方根的质数整除,1除外。
烙印估计想要个优化的解法。
【在 r****s 的大作中提到】 : 用的是collabedit,面试结束,我还截屏了下备份,在eclipse中也测试成功。 code在 : 下面。 也造福其他童靴。 : public void printPrimeNum(int num){ : boolean[] flags=new boolean[num+1]; : for(int i=2; i: : for(int i=2; i*i<=num; i++){ : if(flags[i]){ : for(int j=i; j*i<=num;j++) : flags[i*j]=false;
|
|
|
m**********4 发帖数: 774 | 41 觉得LZ写的不错。楼上好多大叔有点挑骨头了 :) 面试写的这么好居然说错误一堆,
烙印居然能这么胆大包天。LZ保存了不能ARGUE吗? |
s*****r 发帖数: 43070 | 42 inner loop有重复的步骤,比如2和6, 3和4,都要set flag(12)
他的算法有点另类,写的code别人看不懂
【在 m**********4 的大作中提到】 : 觉得LZ写的不错。楼上好多大叔有点挑骨头了 :) 面试写的这么好居然说错误一堆, : 烙印居然能这么胆大包天。LZ保存了不能ARGUE吗?
|
b***m 发帖数: 5987 | |
j***1 发帖数: 39 | 44 现在水涨船高啊,曾经onsite题目,现在成了店面题目。
【在 b***m 的大作中提到】 : 这是我在M家的onsite题之一。
|
r****s 发帖数: 42 | 45 补充点知识,大家共勉,呵呵:
上面有童靴说,java的boolean存储是jvm dependent的,常见的是 1byte。
我去考古了下,确实Java的虚拟机不给力吖,处理boolean数组,元素是当成1 byte处
理。但理论上应该是1 bit的。因此,在遇到要用boolean数组时,应该用java.util.
BitSet 来替换boolean数组。BitSet is a vector of bits, JVM对BitSet 确实是按 1
bit处理的。这个工作时尤其处理后台大数据,用BitSet能省很多资源。
参考链接: http://chrononsystems.com/blog/hidden-evils-of-javas-byte-array-byte |
z****e 发帖数: 54598 | 46 public void printPrimeNum(int num) {
List list = new ArrayList();
//1
int sqrt = (int) Math.round(Math.sqrt(num));
//2
for (int i = 2; i <= sqrt; i++) {
boolean isPrime = true;
for (int j : list) {
if (i % j == 0) isPrime = false;
}
if (isPrime) list.add(i);
}
//3
List temp = new ArrayList();
for (int i = sqrt + 1; i <= num; i++) {
boolean isPrime = true;
for (int j : list) {
if (i % j == 0) isPrime = false;
}
if (isPrime) temp.add(i);
}
//4
list.addAll(temp);
System.out.println(list);
} |
z****e 发帖数: 54598 | 47 对于内存的管理,如无必要,不要优化
否则java可以优化的地方实在太多
而实际工作中你没有力气去搞这些内存的管理
全部交给gc去做,如果你真对内存管理那么有兴趣
去了解一下gc的各种策略,不过这是很高级的java技巧了
1
【在 r****s 的大作中提到】 : 补充点知识,大家共勉,呵呵: : 上面有童靴说,java的boolean存储是jvm dependent的,常见的是 1byte。 : 我去考古了下,确实Java的虚拟机不给力吖,处理boolean数组,元素是当成1 byte处 : 理。但理论上应该是1 bit的。因此,在遇到要用boolean数组时,应该用java.util. : BitSet 来替换boolean数组。BitSet is a vector of bits, JVM对BitSet 确实是按 1 : bit处理的。这个工作时尤其处理后台大数据,用BitSet能省很多资源。 : 参考链接: http://chrononsystems.com/blog/hidden-evils-of-javas-byte-array-byte
|
p*********y 发帖数: 17 | |