Shell在大数据时代的魅力:从一道百度大数据面试题想到的点滴,shell试题


对于在Linux下开发的同学来说,Shell可以说是一种基本功。

对于运维的同学来说,Shell可以说是一种必备的技能,而且应该要非常熟练的书写Shell。对于Release Team,软件配置管理的同学来说,Shell也起到了非常重要的作用。尤其是分布式系统发展的如火如荼,很多开源项目都开展的如火如荼(好像不是分布式的系统都不好意思拿出来说事)。分布式系统的配置,管理,Shell也起到了非常重要的作用,虽然只是简单的文件拷贝,但是谁让Shell天生是做这些的呢?


当然了,以上不是本文的主题。本文的主题是Shell在大数据分析领域的作用。

看一代经典的百度面试题吧:

对于一个用户日志文件,每行记录了一个用户查询串,长度为1-255字节,共千万行,请排出查询最多的前100条。 日志可以自己构造。

对于使用C++, Java的同学来说,这个不是说几分钟就可以把可运行的代码搞定的。这个怎么样也得几十行代码吧。当然了,这个也可以考察一个同学编程,设计的基本能力。

但是我相信,如果你能用Shell来完成,面试官,或者至少是我,会很满意,因为Shell天生就是做这个的:

一行代码搞定:

awk '{print $1}' $file | sort | uniq -c | sort -k1nr | head -n$100

不用担心内存的问题,因为这几千万条数据完全可以装在内存中,而且,现在集群中的可用节点,没有几十G的内存都不好意思活着(当然了如果你们生产环境下的机器还是个位数的内存,那么你们。。。)。


尤其是你上线了自己的某个Feature,可能想很快的看一下相关的数据,那么把某个时间段的数据拿来分析一下,可以很好的去评估一下上线Feature的性能,等等。



一道对于数据库的面试题

1.select s.sid from s,t where t.tid in ('1','2')
2.
select s.sid ,s.sname
from s,
(select sid,count(tid) from st where score<60 group by sid) st1
where s.sid = st1.sid
3.
select st1.sid
from
(select sid,score from st where tid='1') st1
,(select sid,score from st where tid='2') st2
where st1.score > st2.score
and st1.sid = st2.sid
 

一道数据库面试题(高分)

楼上的答案是错的,集函数是不能这么用的
以下是正确答案,可以包含多级所属关系
insert into REPORTTOTAL
(REPID, REPNAME, REPDATE, ORGID, CELLID TOTAL_VALUE)
select repid,
repname,
repdate,
(select orgid from org where orgname = '国有商业银行'),
'1A',
sum(value)
from reportdata
where REPNAME = '资产负债表'
and REPDATE = '2009-03-31'
and ordid in /*找到所有子机构ORGID*/
(select CHILDORGID
from ORGRLT
connect by parentorgid = prior childorgid
start with parentorgid =
(select orgid from org where orgname = '国有商业银行'))
group by repid, repname, repdate) /*使用报告ID,名称,日期分组*/
 

相关内容