总结一下这几天面试遇到的问题前端
面试环节,大同小异java
第一轮:电话面试 作简单的筛选 时间15-30分钟,主要是了解一下你会哪些?问题会问你以前作过的项目,目的在于了解你是否熟悉掌握测试流程和测试思路,这块描述流程的时候,能够把本身会的一些工具加上去。测试流程大体为需求评审--写测试计划与方案-画流程图--冒烟测试-测试用例编写--执行功能测试--ui测试--性能测试--安全测试等等;整个流程涉及到的技术和工具,夹杂在流程思路里去分析解说,能够加分;好比用什么工具管理用例,用什么工具画流程图,bug管理工具,文件配置工具,性能工具会哪些,接口工具备哪些?等等..第一轮面试通常还会问在职仍是离职?以前离职的缘由?目前住哪里?工做地点有什么要求?薪资范围是多少?以上这些附加的软情商类问题,还会问一些技术技能,好比会不会自动化?会不会接口?会不会脚本?掌握程度怎么样?会不会linux?会不会数据库?初面不会深问mysql
第二轮:通常是公司的测试负责人面试,时间大概是60-90分钟,这里通常会聊得很是细。由于技术是一个很是广阔的领域,其实这块的话能够引导面试官,争取在本身擅长的领域去发挥,让面试官跟着你的思路走;常问的问题总结以下:linux
通常问的比较少,针对初级的可能会问细节,这块让面试官不追问细节的好办法就是主动的罗列总结一些数据库的知识,好比数据库无非就是分为插入,查询和更新,如下是我面试遇到过的问题ios
建表:Create table students(nginx
Id int(10) primary key not null unique auto_increment,c++
Name varchar(20) not null,web
Sex varchar(4),面试
Class varchar(20) not null正则表达式
);
Default charset = utf8;
建库:Create database xsk default character set utf8;
删表:Use xsk;
drop table students;
Truncate table students;
Delete from students where name=’mike’
drop删除数据库或表
Delete 删除表里的内容
truncate删除速度快,不可恢复,delete一行一行删除,能够回滚
Update students set name=’小明’ where id =1;
修改字段类型和注释:
Alter table sys_application modify column app_name varchar(20) comment ‘应用的名称’
Insert into students(sid,sname,age) values(1,’小明’,20);
Select * from students;
select xxx,xxx,聚合函数()
from a a,b b
where a.id=b.id and 条件
group by 字段
having in (筛选)
Order by desc/asc
limit x //取多少行
聚合函数:sum max avg count
左链接:左表有多少条数据,就显示多少条数据
右链接:右表有多少条数据,就显示多少条数据
外连接:显示左表和右表全部的数据
内链接:显示两张表都有的数据
笛卡尔积:简单的说就是两个集合相乘,两个表中去除 重复的数据(例如关联的列)
Select * from students st left join score s on st.id=s.stu_id;
Select * from students st right join score s on st.id=s.stu_id;
Select * from students st inner join score s on st.id=s.stu_id;
Select * from students st,score s where st.id=s.stu_id;
查看进程,建立目录,建立文件,赋予权限,解压,查看进程 查看端口号 修改文件 解压包 打印日志
1)字符串处理
哪一个字符串出现的次数最多,是多少?Shell脚本
将文件夹中的aaa改成bbb,写个shell?
2)包解压命令
压缩tar -zxvf /tmp/zheng.tar.gz
打包tar -zcvf /tmp/zheng.tar.gz /home/zheng
3)vi模式下,批量把aaa替成bbb
:1,’s/aaa/bbb/g’ 从第1行开始替换
# sed -i ‘s/aaa/bbb/g’ wenjianming
# sed -i ‘s/http:\/\/www.besttest.cn\//http:\/\/127.0.0.1:8000\/g’ 1txt
定时任务
Crontab -e
5 0 * * *
Crontab -u root -l
我说的比较简单
1.安装好项目
安装jdk,再安装Tomcat,再把项目部署到webapps文件夹下,静态HTML的访问配置,进入tomcat的bin目录 执行./startup.sh重启tomcat,再到前台页面去启动该项目,网页输入网址:格式:ip:端口号/项目,如:http://192.168.199.134:8082/diaowen/
2.配置连接数据库 安装MySQL 命令:yum -y install mysql,配置application.properties文件目录:如/usr/local/tomcat7.2/webapps/diaowen/WEB_INF/classes/conf/application.properties
设置好端口号,数据库名和密码,方便访问连接,想要深刻加分可自行百度;
1.nginx将请求转发到服务端,服务端直接去zk上去取kafka,而后进行链接
//kafka到zk上去注册,直接链接到zk,zk和kafka之间相互交互,服务端不会直接跟kafka直接交互
2.服务器直接去链接文件服务器集群,直接去取直接去返回 server<--->文件服务器
3.服务器直接去链接mysql集群
//也有的公司,MySQL去zk上注册,应用服务直接去zk里面取到生效的mysql,而后去MySQL集群里面取mysql(至关于zk在管理MySQL的集群)
4.服务器直接去链接redis 直接去取,直接去返回 server<--->redis
//也有的公司,redis去zk上注册,应用服务直接去zk里面取到生效的缓存,而后去redis集群里面取信息(至关于zk在管理redis的集群)
5.cdn:不属于服务的架构以内,有的公司会去租用阿里云等的cdn,主要用于 前端 的访问策略,是在本身的服务以外的
1.性能发现什么问题?怎么去分析的?
响应时间慢,tps小,CPU使用高,内存溢出等问题
服务器响应时间慢,tps小的分析思路:
1).了解系统架构,并画出系统架构图
2).根据系统架构图,画出被测接口请求的数据流经图,并列出可能存在问题的每一个点,寻找一些快速定位的方法
3).根据经验主义进行对问题进行排查
a:要么从简单的开始排查(负载机-网络-硬件)-(容器链接池、db链接池)-sql执行效率-gc(垃圾回收)-code(代码)
负载机:(1)单机max 50个并发,tps=500;单机并发>50的时候,tps<500。
50并发tps是500,大于50并发tps却降低了,请问缘由在哪里:CPU问题:进程越大,上下文切换越大,非lr时间变大,那么工做时间减小,发送的请求数量变少
(2)50个并发,单机tps=500,三机tps=800。
说明是负载机的性能瓶颈问题,三机tps并非1500,说明服务器cpu性能问题
Linux性能监控命令:top、vmstat、iostat、sar等命令进行监控
网络:(各个服务器之间的网路链接)netstat -i看网络有没有丢包,延迟高不高
硬件:cpu,应用程序、数据库(cpu 、内存、磁盘):top一下
Web容器链接池:线程是否被占满,有没有排队?在tomcat/conf/tomcat-users.xml下配置status,浏览器ip:端口号/manager/status,输入用户名tomcat ,密码:123456,便可查看tomcat的线程配置和使用状况。Tomcat的配置文件:tomcat/conf/server.xml
数据库链接池:线程是否被占满,有没有排队?
show variables like '%max_connections%';查看当前最大链接数
show global status like 'Max_used_connections';服务器响应的最大链接数
重新设置数据库最大链接数set global max_connections=1000
Sql执行效率:开启慢查询日志,可让MySQL记录下查询超过指定时间的语句,经过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。顾名思义,慢查询日志中记录的是执行时间较长的query,也就是咱们常说的slowquery,经过设–log-slow-queries[=file_name]来打开该功能并设置记录位置和文件名。
Spotlight on MySQL监控MySQL服务器
优化:减小IO次数、下降cpu计算、查询选取最适用的字段类型避免查询浪费、减小排序,为常常须要排序、分组和联合查询操做的字段创建索引、禁用外键、避免大sql、避免大批量更新、避免取过量数据,灵活使用limit、避免在SQL 语句中进行数学运算、函数计算、逻辑判断等操做如=、+,、避免OR、避免select * from t ;
Gc垃圾回收(JVM):oom内存是否溢出、GC时间很长
ps -ef|grep java
jstat -gcutil java的进程号
看下有没有fgc,没有的话说明不是GC致使的
jstat -gcutil pid 查看gc状况,jmap -histo PID 查看哪一个方法致使内存溢出
jmap -dump:live,format=b,file=heap.bin 2143而后用jhat或者MAT分析看堆
jstack 2143(线程id) 查看栈的使用状况
Code代码:不会代码,通常不说代码这块,会的能够本身百度下
压测的时候CPU高(用户cpu高)
1.top一下 ,而后shift+p(按CPU消耗排序),查看是哪一个进程致使的CPU使用高,查看它的PID
2.top -H 21380 查看进程对应的什么线程致使CPU使用高
查看是哪些线程占用的cpu高 PID为21383和21384 对应线程占用CPU高
查看jstack里面的tid是16进制的,21383是10进制的,须要把十进制的换算成16进制的
printf "%x" 21383 转换出来了之后是5388和5387
而后去看这个线程id在执行什么方法
3.jstack 21380 >2.txt
vim 2.txt
在里面直接搜索:5388(nid的值)
分此线程在干什么(GC致使了CPU使用高)
实际工做中,查看致使CPU使用太高的线程栈在执行什么方法
jstat -gcutil -21380 500 3 //再看看
b.要么经过系统日志打印出接口以及sql(或者web容器排队)时间,而后根据时间去判断可能存在的问题的点,缩小问题的范围
CPU使用率高的分析思路:
Top--top -H PID--printf “%x” 21383---jstack 21380|grep 5388 查看方法在干吗
Sportlight监控
第一种状况,某个线程一直CPU利用率100%,则说明是这个线程有可能有死循环,那么请记住这个PID。
第二种状况,某个线程一直在TOP十的位置,这说明这个线程可能有性能问题。
第三种状况,CPU利用率TOP几的线程在不停变化,说明并非由某一个线程致使CPU偏高。
内存溢出分析思路:jprofiler
gc:jstat -gcutil pid 查看gc状况,jmap -histo PID 查看哪一个方法致使内存溢出
jmap -dump:live,format=b,file=heap.bin 2143而后用jhat或者MAT分析 看堆
jstack 2143(线程id) 查看栈的使用状况
502 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求
503 因为超载或系统维护,服务器暂时的没法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
思路+工具使用
思路
1.基本功能测试(业务逻辑实现)
2.边界值分析
3.参数组合
4.异常处理:
4.1某个接口须要先登陆获取 sesssion,若是直接调用该接口应该给出相应提示
4.2重复提交(付款),程序怎么处理的
4.3一个业务流程包含多个操做步骤,若是某个操做失败,那么整个操做须要回滚。或者调用前一个步骤的逆向接口进行操做取消
4.4关联系统出现宕机、超时或者无响应的状态时,接口返回提示正确,业务逻辑正确,不可存在事务性不一致的状况
4.5 数据库里数据量较大时(百万级),测试对DB进行增删改查操做的效率。
接口传入数据与插入DB的数据一致性:前端某个操做涉及后台DB多张表时。每张表面都要检验数据正确性。
性能层面:
5.1 接口响应时间
5.2 吞吐量
5.3 并发数
5.4 服务器资源使用率(cpu、内存、磁盘、网络)
6 安全测试:敏感信息是否加密(前端、日志)、sql注入
工具使用:举例:用jmeter作的接口测试,主要是新建测试计划,测试计划下添加线程组,再添加sample,录入get的url,查看返回的响应状态码和数据、结果;若是判断是否get成功,能够增长响应断言,用正则表达式去提取,好比登陆百度,用正则表达式取百度,有百度则成功;用post方法,录入url和传入参数,看响应状态码和返回结果值是否正确;添加查看结果树和分析图监控测试结果;经过CVS去准备参数,正则表达式关联等等
1.jmeter和lr各自优缺点
1)lr是c语言写的(c是多进程的),jmter是纯java语音(java是单进程的)。//lr是多进程的,jmter是单进程的,lr处理能力比jmeter快,数据更准确
2)Loadrunner优势:功能强大、简单、上手容易,支持协议种类多(http、https、websocket、)
缺点:商业,收费,破解稍微麻烦
3)jmeter 优势,开源、免费、小巧 缺点:上手比较难
//lr比jmeter好,可是测出的tps没有jmeter高的缘由:(缘由:jmeter启用长链接的缘由,lr没有长连接)
http是不加密的传输协议,状态码有1xx:信息;200:请求成功,最多见;3xx:重定向;4xx:客户端问题;5xx:服务器问题;https加密协议;若是本身知道几个具体的能够解释一下,能够加分;好比以前一个放在tomcat下的webapps的项目文件名与网址输入的路径名不一致,致使文件目录找不到,报404错误
(1)支付宝转帐怎么测试?
(2)微信聊天怎么测试?
(3)接单 方圆5千米 接单怎么设计?
1)接口:业务逻辑、边界值、参数组合、异常状况(重复提交、登陆session、关联系统无响应)
2)功能:根据需求文档,考虑正确的业务逻辑实现,正常的异常的,等价类、边界值等
3)集成:业务逻辑正常实现,调用其余服务,其中一个服务宕了,怎么处理
4)兼容性:不一样手机
5)安全:敏感信息是否加密(前端、日志)
6)Ui:友好、易用
7)性能:响应时间、并发数、服务器资源使用率(cpu、内存、磁盘、网络)
8)健壮性:对异常处理,没有信号、电话打断。。
(4)设计提现、添加银行卡的测试点
(1)冒泡排序 阿里面试喜欢问
(2)请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则通过替换以后的字符串为We%20Are%20Happy(实现语言不限)
(3)任意给定一个32位无符号整数n,求n的二进制表示中1的个数,好比n = 5(0101)时,返回2,n = 15(1111)时,返回4(实现语言不限)
(4)请用java vuser或c++实现一个socket请求发送一个消息“text msg”到127.0.0.1:80端口
以上自行百度,阿里的笔试面试题,我是卡在这里了
(5)任何语言写出给你一组数,从中找出最大或最小的数
(6)从1000个里面随机抽出10我的进行处理。
1.性能测试需求分析:
(1)确认性能测试场景: 好比一个银行用户登陆流程
(2)性能测试指标:100并发 响应实际3秒之内
(3)确认系统架构:nginx、tomcat(server)、mysql、redis、zk+kafka
2.性能能测试计划:
评估工做量、压测排期、测试人员
3.性能测试准备:
(1)环境准备
a.硬件环境:硬件标准CPU颗粒数,内存大小要一致
b.软件准备:版本必需要与线上一致,如Tomcat、jdk等
(2)数据准备
a.数据库表准备: order表、pay表、point表、buyer表
b.脚本准备:order脚本、user脚本 c.参数化数据准备10万买家用户、10万卖家用户
4.性能测试执行
a.监控(对测试工具的监控,对linux系统的资源使用状况的监控top)
b.定位瓶颈(CPU使用太高、tps小,响应时间慢,内存溢出)
c.调优
d.回归(跟上一次的数据进行对比)
e.报告(测试环境、测试用例、测试调优,最终达到客户性能要求)
------------------------------------------------------------------------------------------------
请描述一下性能测试的流程
性能需求分析(肯定性能场景,性能指标、系统架构)
性能计划(人员、时间、工做量、困难等)
测试准备(环境准备【硬件环境:cpu、内存一致;软件环境:tomcat、jdk版本一致】、脚本准备、测试数据准备、参数化文件准备)
测试(监控、定位、分析、调优、回测、测试报告)
如何分析和获取性能测试需求和性能测试指标
性能需求
28原则:测试20的主业务
根据业内的标准:358原则
性能压测过程当中通常会关注那些性能指标
响应时间、TPS、并发数、 系统资源使用状况(cpu、内存、磁盘、网络)
性能测试脚本须要通过那些优化
根据不一样的协议进行脚本开发(HTTP、https、jdbc、webservice、socket)
保证脚本的干净性:录制或者本身抓包直接写 A.录制精简脚本,删除cookie,删除其余不相关的服务的请求,删思考时间
B.直接改请求的代码:"Mode=HTML"改成"Mode=HTTP"
//HTML会发送上下游的跳转以及页面的静态请求等,HTTP仅仅发一个请求
作测试的时候,一个action里面只放一个请求,一个事物里面只放一个请求,将依赖条件(登陆)放到init里面,将关联的请求放事物外面
2)参数化:根据业务选择参数化策略,登陆互踢,注册数据库对数据有惟一性校验
3)关联:服务器每次返回动态的值,下一次请求须要使用
4)事物:没有事物就没有tps
5)检查点:判断业务是否成功,数据库查询须要加,其余的直接查看数据库里的数据(web_reg_find)
6)集合点:加大某个请求的瞬时并发的几率(秒杀,抢购才须要加集合点)insert--> rendezvous-->填写集合点名称
7)思考时间:run time setting -->thingk time 迭代次数、Pacing:迭代时间、log
(a.单场景测试--接口性能 b.混合场景测试--接口直接、程序直接、数据库直接的死锁(单混:10-15分钟) c.稳定性场景测试---内存泄漏和gc(n*12小时))
------------------------------------------------------------------------------------------------
请写出经常使用的监控服务器资源和性能分析的命令
top top -H PID uptime
Iostat -x netstat -i
jstat -gcutil PID jmap -histo PID jmap -dump jstack PID
ps -ef|grep java/nginx/httpd/tomcat
netstat -lanp|grep 80
------------------------------------------------------------------------------------------------
堆(对象)存储,栈(方法)运行,堆内存分代收集
性能分析,先看堆:内存不够、内存溢出、GC、程序报heap out of memory
只要是堆的问题:就是减小对象到老年代的频率a.调全年轻带跟老年人的比例b.更换回收器
定位GC: jmap -histo PID
jmap -dump 而后用AMT或jhat进行分析
减小fullGC频率的办法:1)调大jvm的值2)调整垃圾回收器
2)而后看栈:用户cpu使用高,系统慢,无响应,I/O太高,线程死锁,都去看栈、jstack PID去分析线程栈,看是什么方法致使了这个现象
1)堆:数据存储单位。new的对象,数组是实例化
2)栈:java运行程序时的单位。怎么去调度,调用什么方法,传递什么参数,方法、程序计数器、全局变量,常量 逻辑判断。
3)栈要操做一些对象和一些数据,这个数据存放在堆里
若是我短期去跑性能没有问题,可是长时间跑忽然又有问题了是什么缘由呢?
能够从jvm内存去分析
请列举你遇到过的性能瓶颈(前端页面、操做系统、网络、容器、DB、中间件、业务代码等方面)
Msql 或oracle 如何发现、分析、定位数据库耗时比较长的sql,并简述优化sql的原理或过程
请详细描述你所参与项目的测试流程,注:内容涵盖测试环境搭建、及上线流程。
简述你所认为的优秀的测试人员都具有什么样的素质?
linux环境下如何查看当前8080端口是否被占用?若是占用如何中止该进程?
Netstat -lanp|grep “8080”
Kill -9 PID
数据库中目前存在money表,该表存在uid字段,如何经过uid对money表进行降序查询?降序查询后若只想查看其中的50条记录时如何查看?
Selecet * from money
Ordy by uid desc limit 50
请简述性能调优都有哪些方法?
Tomcat
1)Tomcat启动、中止
sh /usr/local/tomcat3/bin/startup.sh
sh /usr/local/tomcat3/bin/shutdown.sh
2)Tomcat访问 //ip端口号
3)#vim /usr/local/tomcat3/conf/tomcat-users.xml
加入:
<role rolename="manager-gui"/>
<user username="tomcat" password="123456" roles="manager-gui"/>
访问tomcat地址,http://ip:端口号/manager/status,输入用户名、密码,输入用户名:tomcat ,密码:123456
4)Tomcat配置监控文件
vim /usr/local/tomcat3/conf/server.xml
Apache
1)启动:service httpd start
2)查看Apache的版本和当前运行模式 [root@besttest etc]# httpd -V
3)vim/etc/httpd/conf/httpd.conf
这里能够看到咱们的apache版本是2.2.15,工做模式为Prefork
Apache的早期版本2.0默认prefork,2.2版本是worker,2.4版本是event
在 Apache 的配置文件 httpd.conf 里添加一段 Location /server-status
多进程单线程改成---多进程多线程 event
4)访问http://ip地址/server-status,即可以看到监控页面
4.你对tcp和udp协议的区别有什么理解
一、TCP面向链接(如打电话要先拨号创建链接);UDP是无链接的,即发送数据以前不须要创建链接
二、TCP提供可靠的服务。也就是说,经过TCP链接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
Tcp经过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还能够对次序乱掉的分包进行顺序控制。
三、UDP具备较好的实时性,工做效率比TCP高,适用于对高速传输和实时性有较高的通讯或广播通讯。
4.每一条TCP链接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通讯
五、TCP对系统资源要求较多,UDP对系统资源要求较少。
第三轮:通常是公司的CTO面试或者经理面试,时间在20-30分钟左右,技术和上面差很少,可是会多一些软情商的问题
问题总结以下:
第四轮:HR谈薪资和入职行政事宜,此处省略;