测试工程师面试宝典——2018-06-13

这个面试题会不定期进行整理,内容会采用无序的方式进行添加,但会根据时间来进行更新。

2018.06.13 更新

1.linux
题1:先来个难点的linux题,感觉这个题有点像考察运维的难度——计算IP Count。如题

某个目录下有两个文件a.txt和b.txt,文件格式为(ip username),例如:

a.txt
127.0.0.1 zhangsan
127.0.0.1 wangxiaoer
127.0.0.2 lisi
127.0.0.3 wangwu    

b.txt
127.0.0.4 lixiaolu
127.0.0.1 lisi

每个文件至少有100万行,请使用linux命令行完成如下工作:

1)两个文件各自的ip数,以及总ip数
2)出现在b.txt而没有出现在a.txt的ip
3)每个username出现的次数,以及每个username对应的ip数

解1):首先我们看文件内容每一行的格式为(ip username),其中两个参数用空格号“ ”分开,这里我用awk来获取第一个参数的内容,然后用sort和uniq命令进行排序和去重,为了后面的第二次去重着想,我们把内容输出到ip_a.txt和ip_b.txt中,代码如下

awk -F ' ' '{print $1}' a.txt | sort | uniq > ip_a.txt
awk -F ' ' '{print $1}' b.txt | sort | uniq > ip_b.txt

结果如下:


ip_a.txt.png
ip_b.txt.png

由上可以看到已经成功筛选。

那么下一步,我们就是统计a.txt和b.txt文件中ip的数量,以及总ip的数量
我们定义a.txt和b.txt中ip的数量分别为变量ip_count_a和ip_count_b,而总ip数量为变量ip_count,然后用wc命令来统计文件中ip的数量,则最终统计的shell脚本如下:

#!/bin/bash
#两个文件各自的ip数,以及总ip数

ip_count_a=0
ip_count_b=0
ip_count=0

awk -F ' ' '{print $1}' a.txt | sort | uniq > ip_a.txt
awk -F ' ' '{print $1}' b.txt | sort | uniq > ip_b.txt

ip_count_a=$(wc -l < ip_a.txt)
ip_count_b=$(wc -l < ip_b.txt)

echo "a.txt文件的IP数为$ip_count_a"
echo "b.txt文件的IP数为$ip_count_b"

ip_count=$(cat ip_a.txt ip_b.txt | sort |uniq | wc -l)

echo "总IP数为$ip_count"

结果如下:


ip_count.png

问题2)、3)待后续解

2.数据库MySQL
题目如下图:


Mysql图表.png

1).算出Table_A表中姓“张”的人员的平均薪资。
2).查询出两张表中Salary大于等于4000的所有人员Name和Salary。
3).如果用一句sql将Table_B表的数据插入Table_A表中。
4).写出一条sql语句:取出表Table_A中第31到第40的记录(SQLServer,以自动增长的ID,作为主键,注意:ID可能不是连续的,尽可能用多种思路)

在解题之前,因为我的数据库没有这些原始数据,需要先添加数据
添加Table_A数据

insert into table_a values(1,'张三',9000),(2,'李四',6000),(3,'王五',8000),(4,'张艳',3000),(5,'李祥',5000);

添加Table_B数据

mysql> insert into table_b (ID,Name,Salary) values (6,'乐明生',4000),(7,'喻关英'
,3000),(8,'骆保秀',2000);

然后我们查询一下Table_A

select * from table_a;

结果如下

+----+--------+--------+
| ID | Name   | Salary |
+----+--------+--------+
|  1 | 张三   |   9000 |
|  2 | 李四   |   6000 |
|  3 | 王五   |   8000 |
|  4 | 张艳   |   3000 |
|  5 | 李祥   |   5000 |
+----+--------+--------+
5 rows in set (0.00 sec)

再查询一下Table_B

select * from table_b;

结果如下

+----+--------+--------+
| ID | Name   | Salary |
+----+--------+--------+
|  1 | 张三   |   9000 |
|  2 | 李四   |   6000 |
|  3 | 王五   |   8000 |
|  4 | 张艳   |   3000 |
|  5 | 李祥   |   5000 |
+----+--------+--------+
5 rows in set (0.00 sec)

可见数据输入正确,接下来是解题:
问题1).算出Table_A表中姓“张”的人员的平均薪资。
解:
思路:这一题就是考察基本的mysql语句,select、from、where、like几个语句的结合使用,还有一个就是平均数函数avg的使用

select avg(Salary) from table_a where Name like '张%';
+-------------+
| avg(Salary) |
+-------------+
|   6000.0000 |
+-------------+
1 row in set (0.00 sec)

问题2).查询出两张表中Salary大于等于4000的所有人员Name和Salary。
解:
思路:这道可以分别查询Table_A和Table_B,然后把查询结果放到一起,其实就是考察union的使用

select Name,Salary from table_a where Salary >= 4000 union select Name,Salary from table_b where Salary >= 4000;
+-----------+--------+
| Name      | Salary |
+-----------+--------+
| 张三      |   9000 |
| 李四      |   6000 |
| 王五      |   8000 |
| 李祥      |   5000 |
| 乐明生    |   4000 |
+-----------+--------+
5 rows in set (0.00 sec)

问题3).如果用一句sql将Table_B表的数据插入Table_A表中。
解:
思路:其实就是考察插入语句insert into的使用

 insert into table_A select * from Table_B;
+----+-----------+--------+
| ID | Name      | Salary |
+----+-----------+--------+
|  1 | 张三      |   9000 |
|  2 | 李四      |   6000 |
|  3 | 王五      |   8000 |
|  4 | 张艳      |   3000 |
|  5 | 李祥      |   5000 |
|  6 | 乐明生    |   4000 |
|  7 | 喻关英    |   3000 |
|  8 | 骆保秀    |   2000 |
+----+-----------+--------+
8 rows in set (0.00 sec)

也可以用以下语句实现,原理跟上面语句是一个意思

insert into table_a (id,name,salary) select id,name,salary from table_b;
+----+-----------+--------+
| ID | Name      | Salary |
+----+-----------+--------+
|  1 | 张三      |   9000 |
|  2 | 李四      |   6000 |
|  3 | 王五      |   8000 |
|  4 | 张艳      |   3000 |
|  5 | 李祥      |   5000 |
|  6 | 乐明生    |   4000 |
|  7 | 喻关英    |   3000 |
|  8 | 骆保秀    |   2000 |
+----+-----------+--------+
8 rows in set (0.00 sec)

问题4).写出一条sql语句:取出表Table_A中第31到第40的记录(SQLServer,以自动增长的ID,作为主键,注意:ID可能不是连续的,尽可能用多种思路)
解:
思路:这题考察order by、记录条数限制limit和下标offset的使用,我的想法是这样的

 select * from table_a order by id limit 10 offset 31;
+----+----------+--------+
| ID | Name     | Salary |
+----+----------+--------+
| 53 | 张艳
   |   3911 |
| 54 | 张艳
   |   3912 |
| 55 | 张艳
   |   3913 |
| 56 | 张艳
   |   3914 |
| 57 | 张艳
   |   3915 |
| 58 | 张艳
   |   3916 |
| 59 | 张艳
   |   3917 |
| 64 | 张艳
   |   3918 |
| 65 | 张艳
   |   3919 |
| 66 | 张艳
   |   3920 |
+----+----------+--------+
10 rows in set (0.00 sec)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容