面试是一个不断学习提升的过程,既是面试官考核面试者,也是面试者学习、考核你未来的上级的过程。不断的面试能够全面的提高自己的去参加大型面试的心理素质;不断练习考题,能够很好的提高自己的能力,提高自己的面试题阅历;更好的取得更多更优的offer;如下是我面试一大型互联网公司的题目:
题目
一种常见的场景,比如说日志文件: 文本1中含有若干行query词,其中query词可能有重复,文本2中也含有若干行query词,query词也有重复。并且重复的query词并不一定相邻。如何快速找到2个文本中相同的query词?
我当时并不熟悉uniq -d可以仅仅显示重复的行这个命令,所以没能用Linux命令快速实现,而仅仅会用Awk脚本来完成。
方法一:Linux命令行
下面给出了Linux命令的一种方法
很简洁,但是算法复杂度为O(nlogn+mlogm),主要时间耗在排序之上。另外,提醒一下大家,uniq之前一定要先sort,因为uniq只对相邻的行来进行处理。
这是百度的一位同学给出的答案,后来跟他交流了一下,他说大数据处理写脚本,无非是cat,sort,uniq。可见这三个命令的重要性,所以大家努力掌握吧。
方法二:Awk脚本
若使用awk,则有
算法复杂度为O(m + n),这是因为awk中数组是基于Hash的。NR,表示awk开始执行程序后所读取的数据行数。FNR,与NR功用类似,不同的是awk每打开一个新文件,FNR便从0重新累计。所以可以用NR和FNR比较区分两个文件。
你有什么更好的实现方式吗?赶紧在留言区写下你的答案吧。
The birth of life is a pleasant surprise.Life is you.
生命是惊喜,生活是你点赞与分享是中华人民传统美德
Date:2018-1-21