读书人

成都市支付宝面试归来

发布时间: 2012-11-06 14:07:00 作者: rapoo

成都支付宝面试归来
昨天,支付宝在成都招聘,一直关心阿里巴巴的招聘信息,所以一收到消息,马上从外地赶过去。到了,才发现,这次他们只招有工作经验的。虽然我是应届毕业的,但是在读研期间,也在公司上过班,有过几个项目开发经验,所以当时我就好说歹说,表现自己一定能胜任这份工作,不会比别人的差的。最后,他们的技术总监总算给了我一个机会,让我面试工,呵呵,这儿再一次感谢支付宝的HR和他们的技术总监Tommy(不知道拼对了么)。
因为我做过多个项目,一直对架构很感兴趣,最近又一直在研究Spring,Hibernate,Struts的源代码,而且前面也有了面试经验,所以前面的技术问题都比较简单的搞定了。但最后一个现现场编程题,现在在我看来,确实让我这个缺乏大型项目经验的人露了马脚。
题目是这样子的:写一个类,读一个txt文件,从中找到aliy这个词,并记录该字符串所在的行数和每一行中的位置。
我第一反应这个问题很简单,每次循环读一行字符串,然后用String.index方法就可以搞定了。但是在写代码的时候,我却把PrintReader搞错了,写成PrintWriter,唉,用管了IDE就是这样子啊。后来就和技术总监聊这个类还需要什么改进的地方。在他的提醒下,我才注意到。
第一 每一行不一定只有一个关键词,这是我所没有注意到的,当然在实际的开发中我后来是可以发现的。后来我还想到用正则表达式。还有就是字符可以设置token,直接split几段,还是能找到,当然这三种方法的效率,我确实不太清楚。
第二 性能的问题,他说,如果是读一个1G的文件,那怎么办。我当时第一反应是那就分段读,然后用多线程处理每一段的字符串。这个问题是我回答的最失败的地方,在回来的车上,我才反应过来,准备的回答应该是通过设置缓存区来读文件。
回答的如此差,我也不报什么希望了。不过还是要给朋友们提点经验吧,特别是那些刚毕业的,有点项目经验的朋友,因为我们可能面临的问题都是这个。那个时候我在公司上班的时候,有写代码,也有做框架,项目经理始终说的“先把做出来再改进” 事实上在小公司真的很忙很累,对于没有什么经验的人来说,能做出来已经不错了,所以后来那个“再改进”通常就被忽略了,像面对上面的那个问题,虽然事后能想到,但是对于有工作经验的人来,马上就能够反应过来。所以在以后的开发中,除了灵活运用基础知识,还就要从代码的质量方面去多考虑,这样才能够慢慢成长。 后来自己做个缓存,每读200行flush一次,才搞定。
我对你写的这个比较感兴趣,能否共享下源代码呢。
呵呵

这个我自己也没有,因为公司的开发内网是封闭的,偶不是骇客,没得那个技术。。
除非一行一行的抄出来。。
个人也不是很赞同公司的做法。
而且我觉得两年前写的东西也不是很好,对日志的格式要求搞,没有用正则表达式处理这个问题,没有做ui接口,只能将分析后的日志分类到各个不同的文本文件中。 后来自己做个缓存,每读200行flush一次,才搞定。
我对你写的这个比较感兴趣,能否共享下源代码呢。
呵呵
这个source我也没有,因为开发在公司内网,所有的代码都拿不出来,偶不是骇客,没那个技术。
不好意思。个人也不是很赞同公司的做法。// 要检查的子串长度小于关键字的字符串的长度,则退出
if (index + 2 * key.length() > value.length()) {
break;
}
index += key.length();
} while ((index + key.length()) < value.length());

}

/**
* 得到当前字符串的第一个关键字所在的位置
*
* @param value
* @param key
* @return
*/
public int getKeyIndex(String value, String key) {
return value.indexOf(key);
}

/**
* @param args
*/
public static void main(String[] args) {

SearchKeyDemo demo = new SearchKeyDemo("C:/test.txt", "alibaba");
long start = System.currentTimeMillis();
demo.pocessSearch();
long end = System.currentTimeMillis();
System.out.println("用时:" + (end - start) + "ms");

}
}

得到了一组结果:
缓存区大小     耗时(ms)
默认        57187
10*1024 55809 
12*1024  55063
8*1027 54672

如果选择大打印出来,也挺耗时的
23 楼 umbrella 2007-06-01 数据结构都不懂的话,那玩笑就开大了。 24 楼 liquidthinker 2007-06-05 如果问我的话,我就回答为什么会出现这样的问题,改用数据库不可以吗?没有写文件,自然不用读文件,也不会有那么多细节需要处理,都交给数据库就行了. 25 楼 cxj_2000 2007-06-07 liquidthinker 写道如果问我的话,我就回答为什么会出现这样的问题,改用数据库不可以吗?没有写文件,自然不用读文件,也不会有那么多细节需要处理,都交给数据库就行了.

ls大哥以为数据库是神仙,呵呵。

好些个地方能不用数据库就不用的,否则太多的地方要cactch了。 26 楼 liquidthinker 2007-06-08 cxj_2000 写道liquidthinker 写道如果问我的话,我就回答为什么会出现这样的问题,改用数据库不可以吗?没有写文件,自然不用读文件,也不会有那么多细节需要处理,都交给数据库就行了.

ls大哥以为数据库是神仙,呵呵。

好些个地方能不用数据库就不用的,否则太多的地方要cactch了。

“好些个地方能不用数据库就不用的”,很不理解哈,做数据存取的,又有这么大的规模,当然是能用数据库则用数据库啊。见过任何mis不用数据库而用文件来做数据存取的吗?本质上数据库的存取也是对数据库文件的存取,但细节被数据库封装了,不用考虑很多底层问题,何乐而不为? 27 楼 ddandyy 2007-06-08 对某些业务来说 数据库是不合适的

比如我现在这个项目就有 是和别的公司的数据库要交互 我们就是用文件来做的 共用一个数据库显然是不现实的 安全性根本就无法保证 28 楼 卒子99 2007-06-09 晕,这个问题还在争啊,看来真是一个经典问题啊,呵呵

读书人网 >其他相关

热点推荐