腾讯云
八股
计算机网络
http请求成功(ping通)连接失败
1、关闭防火墙
2、远程桌面是否开启。
-
如果对方是linux服务器,检查是否安装了SSH服务。需要安装SSH服务才能使用SSH、SecureCRT工具连接
-
根据公司网络实际情况,是否需要网管绑定IP及mac地址
TCP连接正常 请求后无法获取数据信息
1、ping目标机器,通,排除物理性网络连接问题,怀疑端口或是防火墙问题
通过telnet ip port 能够成功连接,排除网络策略
联系目标机器的服务商测试,他们能够正常访问和获得请求,排除服务端不可用
联系网络管理团队在本网段发送请求,能够成功获取数据,基本排除服务端网络问题,基本定位是本地网络,系统问题,应用问题,硬件问题。
由于本地实际上是一个虚拟机所以不存在实际硬件问题,故排除之,
本机安装chrome,依然无法获取数据,排除单一性IE浏览器问题
本机安装postman,依然无法获取数据,排除浏览器问题,换衣是系统配置或是网络配置问题
检查本地网络代理,发现没有配置代理,故排除
启动wireshark后,开始抓包,看TCP的典型三次握手是齐的,但实际的数据传输总是重传。看包里的具体参数信息
TCP
与UDP区别
1、TCP向上层提供面向连接的可靠服务 ,UDP向上层提供无连接不可靠服务。
2、虽然 UDP 并没有 TCP 传输来的准确,但是也能在很多实时性要求高的地方有所作为
3、对数据准确性要求高,速度可以相对较慢的,可以选用TCP
Linux
grep 更适合单纯的查找或匹配文本
sed 更适合编辑匹配到的文本
awk 更适合格式化文本,对文本进行较复杂格式处理
awk
作用:awk主要是用来格式化
语法格式; awk [参数] [处理内容] [操作对象]
print : 打印
NF : 统计总字段数
$ : 取值
结合作用:
$配合NF使用 : NF内存储统计文件内每行的总字段,$存储NF内的值
NF :相当于 变量值 $ :相当于 变量名
print相当于打印 $ 内的内容
# 每行按空格或TAB分割,输出文本中的1、4项
$ awk '{print $1,$4}' log.txt
awk中函数(格式化打印)
案例1:
awk -F: 'BEGIN{OFS=" | "}{printf "|%+15s|%-15s|\n", $NF, $1}' /etc/passwd
解析:
| : 以 | 为分隔符
|%+15s| : 以 | 为分隔符 %s 配合 printf 使用 代替当前字符串 右对齐 占用15字符
|%-15s| : 以 | 为分隔符 %s 配合 printf 使用 代替当前字符串 左对齐 占用15字符
\n : 换行符
$NF : 存储以 | 为分隔符的最后一列
$1 : 存储以 | 为分隔符的第一列
grep
作用:用于根据给定的正则表达式搜索文本,并将匹配的行打印出来。
文本搜索工具
语法:grep “被查找的字符串” 文件名
Linux基本命令
netstat -nltp | grep 端口号 查端口号
我自己写的常见命令-开关机-目录-文件夹-文件相关-网络
git
安装
centos:
sudo yum install -y git //-y选项表示不再询问,直接安装
ubantu:
sudo apt-get install git -y
- git init - 初始化仓库。
- git add . - 添加文件到暂存区。
- git commit - 将暂存区内容添加到仓库中。
- git push 将本地仓库同步到远端服务器上
- git pull从远端仓库拉取最新版本文件
- git clone 拷贝
- git checkout 分支名 可以创建分支切换分支
- git branch 和git branch -a 查看当前分支和查看所有分支
- git reset 回退版本
- git rm 删除工作区文件
- git mv 移动或重命名工作区文件
- git log --pretty=online 或者 git log --graph --abbrev-commit 查看你的所有操作痕迹。
- git status查看本地与远端的同步状态
- git diff 要查看的文件名
数组链表区别
存储方式
数组:
数组在内存中是连续存储的。这意味着数组的所有元素在内存中占据一块连续的区域。
由于连续存储,数组的大小在初始化时必须确定,且不能动态改变。
链表:
链表在内存中是非连续存储的。每个元素(称为节点)包含数据和一个指向下一个节点的指针。
链表的大小是动态的,可以随时增加或减少节点。
访问方式
数组:
数组支持通过索引进行随机访问,可以直接访问任意位置的元素,时间复杂度为 O(1)。
由于数组的连续存储特性,访问速度非常快。
链表:
链表不支持随机访问,只能通过从头开始遍历进行顺序访问,访问某个特定节点的时间复杂度为 O(n)。
访问速度相对较慢,尤其是当链表较长时。
插入和删除操作
数组:
在数组中间插入或删除元素需要移动其他元素,时间复杂度为 O(n)。
在数组末尾插入或删除元素时间复杂度为 O(1)。
链表:
在链表中间插入或删除元素不需要移动其他元素,只需改变指针,时间复杂度为 O(1)(前提是已经找到了要操作的位置)。
在链表开头或结尾插入或删除元素也非常高效,时间复杂度为 O(1)。
空间效率
数组:
由于数组在内存中是连续存储的,需要预先分配固定大小的内存空间,如果数组大小确定不准确,可能会导致内存浪费或不够用的问题。
链表:
链表节点需要额外存储指针,增加了空间开销。
但是链表可以根据需要动态调整大小,不会有数组那样的内存浪费问题。
适用场景
数组:
适用于需要频繁进行随机访问的场景,如查找操作。
适用于元素数量固定且已知的情况。
链表:
适用于需要频繁插入和删除操作的场景。
适用于元素数量动态变化的情况。
python
Redis
是什么
是一个使用 C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型的Key-Value数据库,并提供多种语言的API。
它是一种 NoSQL(not-only sql,泛指非关系型数据库)的数据库,可以用作数据库、缓存、消息中间件、分布式锁等。
MYSQL区别
mysql是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。
redis是NOSQL,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限。
MySQL
测试
黑白盒
黑盒测试又称功能测试、数据驱动测试或基于规格说明书的测试,是一种从用户观点出发的测试。
等价性划分、边值分析、组合测试、随机测试和误差猜测、场景测试
黑盒测试主要测试的错误类型有:
①不正确或遗漏的功能;
②接口、界面错误;
③性能错误;
④数据结构或外部数据访问错误;
⑤初始化或终止条件错误等等。
白盒测试使用被测单元内部如何工作的信息,允许测试人员对程序内部逻辑结构及有关信息来设计和选择测试用例,对程序进行测试。
基本要求:
保证一个模块中的所有独立路径至少被执行一次;
对所有的逻辑值均需要测试真、假两个分支;
在上下边界及可操作范围内运行所有循环;
检查内部数据结构以确保其有效性。
黑白盒
你如何评估一个测试用例的优劣和价值?
1、需求覆盖率
测试用例应该覆盖软件的各个功能点和逻辑路径,所有的需求和规格说明,包括代码行覆盖、分支覆盖、条件覆盖等。这意味着每个需求项都至少有一个或多个测试用例来验证其正确性。
评估时,可以检查测试用例与需求文档之间的可追溯性矩阵,确保没有需求被忽略。需求覆盖率高表明测试用例能全面检验软件的预期行为。
2、缺陷检测率 (DDP)
缺陷检测率是指测试用例在执行过程中,发现的缺陷数量与总缺陷数量的比例,是评估测试用例发现实际缺陷的能力。高缺陷检测率通常意味着测试用例设计得较好,在捕获潜在问题方面是有效的。在某些情况下,可能还需要考虑缺陷的严重程度,我们可以通过分配不同的权重给不同严重程度的缺陷,然后计算加权缺陷检测率,以便准确地反映测试有效性。
3、测试用例的可执行性与清晰性
可执行性指的是测试用例是否提供足够详细的步骤,使得任何人都能按照同样的步骤执行相同的测试。清晰性则涉及测试用例的描述是否准确无误,预期结果是否明确。
4、业务价值
评估测试用例是否对业务产生了积极的影响。这可以通过“老板测试”来衡量,即测试用例是否能够证明其对提高工作效率、降低成本或提升客户满意度的价值。
5、测试用例的重用性
有效的测试用例应该是可重用的,能够在多个测试周期或相似的项目中使用。这减少了测试设计阶段的重复劳动,节省时间和资源。
如何进行移动端自动化测试?
Appium 自动化测试
1,appium是开源的移动端自动化测试框架;
2,appium可以测试原生的、混合的、以及移动端的web项目;
3,appium可以测试ios,android应用(当然了,还有firefoxos);
4,appium是跨平台的,可以用在osx,windows以及linux桌面系统上;
安装-配置环境-写python脚本 进行自动化测试
如何确保测试效率和质量之间的平衡?
1、测试从需求阶段开始介入,从需求评审开始跟进,了解项目的各个阶段
2、在需求、UE、UI评审完成之后,产品、开发、测试之间可以组织需求反串讲,或者进行需求答疑,提前暴露出需求中不严谨或者大家理解不一致的情况,确保需求没问题再展开,避免后期返工
3、用例设计完后组织用例评审,确保用例的覆盖度,从测试、开发和产品的角度更充分的完善测试点
4、后端接口梳理完成,进行前后端联调的时候,测试可以提前介入,进行接口测试,提前了解接口的设计思路,在前期方向问题
5、开发完成后,需要对主流程进行自测,保障自测质量,避免提测后质量太差,导致提测后反复无效测试
6、测试阶段对本次新功能迭代的用例要在上线前全量覆盖,并且梳理出整个产品P0、P1级别的用例,上线前进行回归验证,确保薪功能正常,并且不会影响老功能
7、针对长期稳定的功能,实现自动化并且持续集成,一方面可以加快回归效率,一方面实现持续监控,产品稳定性持续监控
8、上线发布可以通过后端灰度或者前端(App)渠道放量,在生产用户使用稳定后,批量放量
9、上线后,定期组织项目复盘,针对项目中优秀的点进行整理,后期需求中继续保持,项目中有问题的,总结问题,在后续项目或者是用例中进行输出补充,逐步完善
算法
二分查找
写一个算法显示时针和分针的角度
1)分针的角度(从12点整开始算起):360*(m/60)
2)时针的角度(从12点整开始算起):360*(h%12)/12+360*(m/60)*(1/12),即为:时针时刻值+分针带来的偏移量
3)时针和分针之间的角度:(时针的角度-分针的角度)%360
简化上述式子,可以得到(30h-5.5m)%360.
package pers.clock;
import pers.utils.MyException;
public class Clock {
//只写一个空参构造和一个静态方法
public Clock() {
}
public static void calc(String time){ //计算夹角的方法
int hour = Integer.parseInt(time.split(":")[0]); //将时间字符串切割,分别得到时针分针当前所指位置
int min = Integer.parseInt(time.split(":")[1]);
if(hour>23 || hour<0 || min>59 || min<0){ //自定义异常在这使用,判断输入时间是否正确
try {
throw new MyException("输入时间有误!请重新输入");
} catch (MyException e) {
e.printStackTrace();
}
}else { //输入正确,则调用以下算式计算夹角
double number = Math.abs(hour * 30 - 5.5 * min );
number = number % 360;
System.out.println("此时时针和分针的夹角为" + number + "°");
}
}
}