快手-实习面试-测试开发岗位

内推,hr小姐姐会加微信,然后安排面试时间。参加的两场都很准时(电话)。

1面大概40分钟左右。

1.自我介绍+项目介绍+自己在项目中的主要工作+围绕项目问了2-3个问题例如是否用了python框架,精确率召回率如何计算的等等。

2.实习的时间。为什么选择做测试。面试老师表示看过我的博客,问了下之前百度面试为啥没收到offer。

3.给定一个String类型对象,如何判断其是一个IPV4的字符串

   IPV4的格式大概是xxx.xxx.xxx.xxx。最开始答的是用正则表达式进行匹配,但是不查资料写不出来正则表达式。

IPV4地址由4个组数字组成,每组数字之间以.分隔,每组数字的取值范围是0-255。

IPV4必须满足以下四条规则:

1、任何一个1位或2位数字,即0-99;
2、任何一个以1开头的3位数字,即100-199;
3、任何一个以2开头、第2位数字是0-4之间的3位数字,即200-249;
4、任何一个以25开头,第3位数字在0-5之间的3位数字,即250-255。

这样把规则全部罗列出来之后,构造一个正则表达式的思路就清晰了。

首先满足第一条规则的正则是:\d{1,2}
首先满足第二条规则的正则是:1\d{2}
首先满足第三条规则的正则是:2[0-4]\d
首先满足第四条规则的正则是:25[0-5]

把它们组合起来,就得到一个匹配0-255数字的正则表达式了:

(\d{1,2})|(1\d{2})|(2[0-4]\d)|( 25[0-5])

IPV4由四组这样的数字组成,中间由.隔开,或者说由三组数字和字符.和一组数字组成,所以匹配IPV4的正则表达式如下:

(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))

public static void matchAndPrint(String regex, String sourceText){
  Pattern pattern = Pattern.compile(regex);
  Matcher matcher = pattern.matcher(sourceText);
  while(matcher.find()){
    System.out.println(matcher.group());
  }
}
public static void main(String[] args) {
  String regex = "^(((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))\\.){3}((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))$";
  matchAndPrint(regex, "23.135.2.255");
  matchAndPrint(regex, "255.255.0.256");
  matchAndPrint(regex, "0.0.0.0");
}

面试老师提示是否还有其他办法,我说可以用split将这个字符串断成几段并进行检查。问到split里面应该填写什么。这个地方要注意split函数的参数其实是一个正则表达式,所以对"."要进行转义,这里注意"\\."才是其转义,第一个是对\的转义。

4.有一组放在list里面的对象,对象有一个属性就是之前3说的这种字符串,另一个属性是姓名,需要将对象进行排序,按照ipv4的大小进行,例如192.168.1.1小于192.168.1.2

可以使用Collections.Sort方法,并定义一个比较器,在比较器中对这种进行比较,也是split后进行比较。

5.linux下查看文件夹下的文件,包括隐藏文件,如何看到详细信息

ls命令,-a参数可以看到隐藏文件,-l参数可以看到详细信息

6.linux下kill掉所有python进程

ps -ef | grep .python | awk '{print $2}'|xargs kill -9   

ps查看所有进程,grep 查找所有.python的进程,awk 输出第二列的数据,这个地方是进程号,xargs是将前面的结果作为kill -9的参数。

7.数据库下指定某列为自增:Auto-Increment

8.数据库下指定某列值唯一:unique或者设置为主键

9.如何设置外键

alter table user add foreign key(pid) references province(pId)

10.设计一个客户端作为测试对服务器端发起访问,统计返回码为200的个数。

客户端就用多线程对服务器端进行访问。并进行统计

uConnection.getResponseCode() 可以获取返回状态码

问了如何进行同步,我答了同步的三种方式,问是否有更简单的方法,我想到了volatile。但volatile在这种方式下其实也需要锁的配合。这两天看到Java并发编程实战才了解到可以使用java提供的线程安全类中的原子变量类。该类在java.util.concurrent.atomic内,对于这种情况可以很好地解决。

再问了如何设计该类,也就是实现runable或者是继承Thread类。问是否有更好的方法,提示了线程池,问了线程池,但是这方面没接触过,没有继续深入了。没有写过这方面的代码答起来比较吃力。

1个小时后接到通过通知。


2面 20分钟

1.实习的时间

2.是否有近期或者长期的职业规划

3.介绍一下自己的项目和实习

4.针对项目又提了两三个问题


你可能感兴趣的:(面试)