解析阿里运维P7岗位面试的一道题

解析阿里运维P7岗位面试的一道题

今年有幸同事推荐到阿里面试,岗位是流量事业部运维开始3面都很顺利评价也很高,到第四面交叉面的时候是一位P9的前辈,技术不用说了,直接是碾压我的那种,面试的时候问了一些方法论的问题,我答的不怎么样,最后他为了缓和气氛给我出了一道shell方面的题,第一个问题是如何查询文本中重复的记录,这个我答出来了,另个问题是直接给我一串字符串;例如str='ieuwugfuwgfugugfujdfjh’让我统计那个字符出现次数最多的字符,使用shell,当时一看感觉很容易不就是行转列吗,但是自己开始写的时候蒙圈了awk,sed一下子用不了拉,我想很久还是没有完成,之后我自己实现了一下,我使用2种方法:

方法一

使用shell的字符串切片处理此字符串:

[root@VM_39_7_centos ~]# str='ieuwugfuwgfugugfujdfjh'
[root@VM_39_7_centos ~]# for((i=0;i<${#str};i++));do echo ${str:$i:1};done|awk '{arr[$0]++} END{for (i in arr) print arr[i],i}'|sort -nr
6 u
4 g
4 f
2 w
2 j
1 i
1 h
1 e
1 d
[root@VM_39_7_centos ~]# for((i=0;i<${#str};i++));do echo ${str:$i:1};done|awk '{arr[$0]++} END{for (i in arr) print arr[i],i}'|sort -nr|head -1
6 u
[root@VM_39_7_centos ~]# 
方法二

使用sed的正则表达式匹配字符然后行转列;

[root@VM_39_7_centos ~]# echo ${str}
ieuwugfuwgfugugfujdfjh
[root@VM_39_7_centos ~]# echo ${str}|sed  's/\([a-z]\{1\}\)/\1 \n/g'
i 
e 
u 
w 
u 
g 
f 
u 
w 
g 
f 
u 
g 
u 
g 
f 
u 
j 
d 
f 
j 
h 

[root@VM_39_7_centos ~]# echo ${str}|sed  's/\([a-z]\{1\}\)/\1 \n/g'|awk '{arr[$0]++} END{for (i in arr) print arr[i],i}'|sort -nr|head -1
6 u 
[root@VM_39_7_centos ~]# 
总结

当时没有搞出来有点可惜,可能当时紧张了,但是任何事都有他发生必然性,我的问题应该是基础还是不够扎实,我今后会在方面多发力,注意方法、规范、以及工作中处处留心;

猜你喜欢

转载自blog.csdn.net/qq_31555951/article/details/106596967