总结
虽然面试套路众多,但对于技术面试来说,主要还是考察一个人的技术能力和沟通能力。不同类型的面试官根据自身的理解问的问题也不尽相同,没有规律可循。
上面提到的关于这些JAVA基础、三大框架、项目经验、并发编程、JVM及调优、网络、设计模式、spring+mybatis源码解读、Mysql调优、分布式监控、消息队列、分布式存储等等面试题笔记及资料
有些面试官喜欢问自己擅长的问题,比如在实际编程中遇到的或者他自己一直在琢磨的这方面的问题,还有些面试官,尤其是大厂的比如 BAT 的面试官喜欢问面试者认为自己擅长的,然后通过提问的方式深挖细节,刨根到底。
2、关系表达式
3、组合的Pattern
4、Pattern1,Pattern2
5、BEGIN
6、END
为了说明以上各种模式,我们这里准备一个文件score.txt,以实例的方式一一进行说明,score.txt文件内容如下:
[root@ecs-c13b awk]# cat score.txt
guojing 85 92 78
zhaoyun 89 90 75
sanfeng 84 88 80
guanyu 83 78 90
liubei 86 88 79
##### []( )2\. 正则表达式
* 查询有一门课程成绩在90-99区间的学习的成绩。
[root@ecs-c13b awk]# awk ‘/9[0-9]/ {print $0}’ score.txt
guojing 85 92 78
zhaoyun 89 90 75
guanyu 83 78 90
以上指令查询有一门课成绩在`[90-99]`区间的学生的成绩信息,`/9[0-9]/`部分即为**awk**程序指令中的**Pattern**,这里Pattern的类型为正则表达式。
awk ‘$3 ~ /9[0-9]/ {print $0}’ score.txt
zhaosan 85 92 78
lisheng 89 90 75
这条指令在上一条指令的基础上增加了限制,需要第二门课(数学)成绩在`[90-99]`区间才可与模式匹配。这里的 **~** 操作符用来表示变量是否与正则表达式匹配,如果要判断不匹配,可以使用 **!~** 操作符。
##### []( )3\. 关系表达式
awk ‘$3 >= 90 {print $0}’ score.txt
zhaosan 85 92 78
lisheng 89 90 75
可用来形成模式关系运算符包括: <(小于)、>(大于)、<=(小于或等于)、>=(大于或等于)、= =(等于)和 ! =(不等于)。
这条指令的作用也是查询数学成绩在90分以上的学生成绩信息,不过比正则表达式中的范围要大一点,这里100分也是符合模式的。
##### []( )4\. 组合的Pattern(模式)
awk ‘$3 >= 90 && $3 < 100 {print $0}’ score.txt
zhaosan 85 92 78
lisheng 89 90 75
布尔运算符 ||(或)&&(和)以及 !(不)将模式组合,组合后如果求值为真则模式匹配,否则不匹配。这里就解决了关系表达式示例中包含了100的问题。
##### []( )5\. Pattern1,Pattern2
awk ‘FNR == 2 , FNR == 4 {print $0}’ score.txt
lisheng 89 90 75
zhaoyun 84 88 80
guanyu 83 78 90
其实这个也可以归为组合的模式中,只是这种模式比较特殊,故单独列出。以,(逗号)隔开的两个Pattern指定一个范围,对从匹配第一个Pattern的记录开始,到匹配第二个Pattern结束的所有记录执行Action
##### []( )6\. BEGIN
BEGIN模块在awk读取文件之前就执行,一般用来定义我们的内置变量(预定义变量,eg:FS,RS)可以输出表头(excel表格名称)
BEGIN模式之前在实例中提到,自定义变量,给内容变量赋值等,都是使用过。需要注意的是BEGIN模式后面要结合一个**action操作块,包含在大括号内**。
awk必须在对输入文件进行任何处理前先执行BEGIN定义的action操作块。我们可以不要任何输入文件,就可以对BEGIN模块进行测试,因为awk需要先执行完BEGIN模式,才对输入文件做处理。BEGIN模式常常被用来修改内置变量ORS,RS,FS,OFS,等的值。
##### []( )a) 给文件开头添加信息
假如我们要将学生成绩表打印出来,那总得加点表头什么的吧,就可以放到BEGIN中了。
awk ‘BEGIN { print “Print student score table”} {print $0}’ score.txt
Print student score table
zhaosan 85 92 78
lisheng 89 90 75
zhaoyun 84 88 80
guanyu 83 78 90
liubei 86 88 79
##### []( )b) 取eth0的ip地址
ifconfig eth0|awk -F ‘(addr:)|(Bcast:)’ ‘NR==2{print $2}’
ifconfig eth0|awk -F ‘[: ]+’ ‘NR==2{print $4}’
ifconfig eth0|awk -F ‘[^0-9.]+’ ‘NR==2{print $2}’
也可以写成
ifconfig eth0|awk ‘BEGIN{FS=“(addr:)|(Bcast:)”} NR==2{print $2}’
ifconfig eth0|awk ‘BEGIN{FS=“[^0-9.]+”} NR==2{print $2}’
ifconfig eth0|awk ‘BEGIN{FS=“[: ]+”} NR==2{print $4}’
注意:命令行 -F 本质就是修改FS的变量。
#### []( )7\. END
END 在awk读取完所有的文件的时候,再执行END模块,一般用来输出一个结果(累加,数组的结果)也可以是和BEGIN模块类似的结尾标识信息。
###### []( )1) 给文件结尾 添加信息
awk ‘END { print “Work done”} {print $0}’ score.txt
zhaosan 85 92 78
lisheng 89 90 75
zhaoyun 84 88 80
guanyu 83 78 90
liubei 86 88 79
Work done
最后
笔者已经把面试题和答案整理成了面试专题文档
1715048820291)]
[外链图片转存中…(img-I2y87XYn-1715048820292)]
[外链图片转存中…(img-CPEgfMsw-1715048820292)]