如果我是面试官,我会给自己出什么题(测试岗位)

自己给自己出的面试题

1.自我介绍;

2.工作成果和印象最深刻的项目;

3.测试理论:测试流程,测试模型,测试原则,测试规范,测试策略,测试用例的设计,对BUG的理解;

4.Python:数据类型,面向对象,lambda,匿名函数,注解,scoket,进程线程协程,正则,内存管理;

5.算法:冒泡原理,快排原理,堆排原理,二分查找原理,LeetCode,牛客网上的大量算法题随便来几个;

6.Linux:常用命令,网络命令,系统命令,管道流使用;

7.数据库:Mysql查询,MongoDB使用,Redis使用;

8.网络知识:OIS网络七层模型原理,tcp与udp区别,tcp连接三次握手,四次挥手原理,get与post的区别,socket建立连接过程;

9.工具使用:Fiddler抓包,ADB调试,Jemeter使用等等;

10.自动化:Selenium以及Appium的使用,Requests以及Uinttest接口自动化,自己编写过怎样的自动化脚本。

Read more »

常用设计模式的总结

常用设计模式的总结

算法处理的是操作速度,而设计模式处理的是开发速度。在公司项目越来越多,集成度越来越高的情况下,运用设计模式写出高质量的代码很有必要。合理运用设计模式可以提高代码的可读性,复用性,可维护性,提高复杂业务的编写效率。

六大原则

1.单一职责原则:一个类只负责一项职责,提高类的可读性,降低类的复杂度,防止业务的变化让耦合的代码难以维护;
2.里氏替换原则:子类可以扩展父类的功能,但不能改变原有父类的功能。子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法;
3.依赖倒置原则:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。这个原则很重要,很多框架都运用了这个原则,也是代码解耦的关键。
4.接口隔离原则:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。避免接口的臃肿,也避免实现类实现一些本不需要实现的方法。实现类可以去实现多个接口来做到接口隔离;
5.迪米特原则:一个对象应该对其他对象保持最少的了解。类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类影响也就越大。但过分的使用迪米特原则,会产生大量这样的中介和传递类,导致系统复杂度变大。所以在采用迪米特法则时要反复权衡,既做到结构清晰,又要高内聚低耦合;
6.开闭原则:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。用抽象构建框架,用实现扩展细节。

比较重要的设计模式

单例模式

确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例;
特点:三私一公
需要一个保存类的唯一实例的私有静态成员变量
构造函数必须声明为私有的,防止外部程序new一个对象从而失去单例的意义
克隆函数必须声明为私有的,防止对象被克隆
必须提供一个访问这个实例的公共静态方法(通常命名为getInstance,下面实例为getObject),从而返回唯一实例的一个引用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
/**
* Created by PhpStorm.
* User: skywing
* Date: 2018/7/4
* Time: 上午10:46
* Describe:单例模式
*/

class Singleton
{
private static $obj = null;//属性值为对象,默认为null

// 设置 一个封装的构造方法
private function __construct()
{
//不让NEW
}

private function __clone()
{
//不准克隆
}

//后门
public static function getObject()
{
echo "啊,我是后门,进吧!<br>";
if (self::$obj === null) {
echo "实例化一个对象<br>";
self::$obj = new self();//实例化一个对象
}
//返回的属性 其实就是本对象
return self::$obj;
}
}

/*Test::getObject();//使用静态方法访问该类里的方法
exit;*/

$t1 = Singleton::getObject();
$t2 = Singleton::getObject();
$t3 = Singleton::getObject();
$t4 = Singleton::getObject();
$t5 = Singleton::getObject();
$t6 = Singleton::getObject();
$t7 = Singleton::getObject();
$t8 = Singleton::getObject();

//判断 两个对象 是否是同一个对象
if ($t1 === $t6) {
echo "哦, Yes! 是同一个实例<br>";
} else {
echo "哦, No! 不是同一个实例<br>";
}
Read more »

网站如何从HTTP变成HTTPS

安装Let’s Encrypt证书流程

正常流程

1.安装依赖的 epel 源,然后安装 certbot

1
2
yum install epel-release -y
yum install certbot -y

2.使用certbot certonly 命令 , 生成证书公私钥(可以多站点配置),生成证书及相关文件(/etc/letsencrypt)

1
certbot certonly --webroot -w /var/wwwroot/blog -d phpgoto.com

3.在nginx中加入ssl证书的相关配置

1
2
3
4
listen 443 ssl; # 将默认监听的80端口改成https监听的443端口
# ssl on; 这个似乎不用加
ssl_certificate /etc/letsencrypt/live/phpgoto.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/phpgoto.com/privkey.pem;

4.将http请求转向https

1
2
3
4
5
server {
listen 80;
server_name phpgoto.com;
rewrite ^(.*)$ https://$host$1 permanent;
}

5.添加crond任务,自动续期即将到期的证书

每隔两个月凌晨2:30自动执行证书更新操作,我这里有软链,读者使用时注意路径

1
30 2 * */2 * certbot renew --quiet && nginx -s reload

异常总结

1.centos7.2以上安装certbot可能出现一些错误,这个可以参考这篇文章;
2.我在安装时除了上面遇到的错误外,安装完成后,certbot指向有问题,默认调用的是/usr/bin/certbot,而我安装的却在/usr/local/bin/certbot,直接做个软链接到正确目录即可;
3.注意443端口要开启。

Read more »

编译安装python3与virtualenv虚拟环境

就目前来说,所有的Linux发行版自带的python都是python2,与python3不兼容,所以在linux上编译安装Python3并建立一个与Python2隔离的环境就很有必要了。

编译安装python3

1
2
3
4
5
6
7
curl -O https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz
tar xf Python-3.7.3.tgz
cd Python-3.7.3
./configure
make
sudo make install
python3 -V

安装Virtualenv

安装virtualenv,在默认的python2下的pip就行:
[sudo] pip install virtualenv
创建虚拟环境:
virtualenv -p /usr/bin/python3 py3env
激活虚拟环境:
source py3env/bin/activate

你会注意到shell的提示符行前多了(py3env)字样,这样你就可以放心的使用python3做开发了。
如果要退出python3虚拟环境,输入命令即可:
deactivate

Read more »

Hello World

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

Read more »