——————————基本情况———————————
1、自我介绍(中+英)
2、介绍项目
3、介绍实习
4、做过什么课题研究 以及 研究方向?
5、学校学习了什么课程?
C语言 计算机网络 数电 模电 信号与系统 医学仪器 微机原理 医学图像处理
6、研究方向的评价指标还有什么?所提出的方法有什么缺点?
acc 以及 dice
缺点:层数多比较好,提取特征比较好
不能应用于有向图
配准到另外一个空间,导致大量信息丢失
7、个人性格做测试优缺点
踏实勤奋 自律 好学 抗压能力比较强 良好的团队协作能力 适应能力
开朗 有主见
8、项目常用的包
——————————实习—————————————
1、介绍实习负责的项目
2、举一个你遇到的最大的问题
3、对于几率性的bug怎么测试呢?
方案1:仔细检查是否是自己的执行步骤,或者误操作导致的bug,提交给相关人员
方案2:通过日志相关信息处理,提交相关开发人员
方案3:通过截图方式尽量复现当时的情景
方案4:和相关测试人员商议,确定bug的优先级与开发沟通,猜测可能出现问题的地方,在代码中设桩,添加状态打印信息,进行有针对性的测试。
方案5:考虑采用自动化,进行压力测试,测试过程中注意收集log信息,统计bug出现的概率。
方案6:(前提:项目组相关人员均知晓)关注发布后的用户反馈,跟进bug
方案7:自己在程序中加一个录像回放功能(原理类似于日志,不同的是这个可以使程序自己动运行)把上次出错的情况重放
4、紫光是做什么的?
国内很多人都对芯片制造有误解,要知道其中 SOC设计、基带和半导体制造。
一般说来, SOC称为系统级芯片,也有称片上系统,意指它是一个产品,是一个有专用目标的集成电路,其中包含完整系统并有嵌入软件的全部内容。同时它又是一种技术,用以实现从确定系统功能开始,到软/硬件划分,并完成设计的整个过程。
最近紫光展锐发布了第二代5G智能手机平台虎贲T7520,这是全球首款采用6nm EUV工艺的芯片。先进的工艺也意味着昂贵。
——————————测试—————————————
1、对测试有哪些了解?
熟悉测试流程 测试用例编写 熟悉测试工具的使用
2、编写测试用例有哪几种方法?
大刚法、等价类、边界值、因果图、场景法、正交法、错误推断法、正则表达式
3、测试的六条基本法则是什么?
功能、可靠性、易用性、效率、可维护性、可移植性
4、软件测试分类有哪些?(是否关心软件内部结构)
黑盒、白盒、灰盒、
黑盒:对于一段程序,对其测试时,不需要知道内部结构和特性,在输入接口处输入激励,观察输出是否正确。主要用于软件界面和功能测试。
白盒:也称结构测试和逻辑驱动测试,知道程序内部结构,验证内部每条通路是否能正常工作。
灰盒:介于白盒和黑盒之间的测试,结合外部接口、功能和内部逻辑、路径,根据程序实际情况,进行测试
5、软件测试的测试流程是什么?
分析需求文档 需求评审
编写测试计划 计划评审
编写测试用例 用例评审
执行测试用例 迭代测试轮次
提交阶段性测试报告 验收测试 提交测试总结性报告
6、编写测试用例的原则是什么?
100%的覆盖需求规格说明书
7、软件测试过程中必须经历哪些阶段?
单元测试 集成测试 确认测试 系统测试 验收测试
单元测试: 分别完成每个单元的测试任务,以确保**每个模块能正常工作**。单元测试大多采用**白盒测试**,尽可能地发现模块内部的程序错误。
集成测试: 把以测试的模块进行组装,进行集成测试。大多采用**黑盒测试**,目的在于检验与软件设计相关的程序结构问题。
确认测试: 完成集成测试后,对开发工作初期指定的准则进行检验。**采用黑盒测试,检验软件是否完成所有功能和性能需求**
系统测试: 完成确认测试后,给出合格的软件产品,系统测试就是为了检验所开发的软件能否与系统的其他部分(硬件、数据库等)协调合作**(联调**)。
验收测试:突出了客户的作用,软件开发人员也有一定的参与。
8、黑盒测试包含哪些测试内容?
答:UI测试,配置测试,表单值域测试,数据完整性测试,逻辑测试,业务流程测试,逆向思维测试,接口测试,本地化测试,cookie测试,易用性测试,错误推断测试,安全性测试,兼容性测试,比较测试,稳定性, 负载 ,压力,故障转移和恢复测试
9、如何确定一个问题是不是BUG?
答:对照需求规格说明书,不满足需求就是BUG
10、缺陷严重程度分别是什么,并将每个严重程度进行简单的描述。
答:致命、严重、一般、轻微、建议。
1.致命:系统崩溃、404报错、500报错、造成系统或应用系统崩溃、死机、或数据丢失、主要功能完全丧失、服务器死机、蓝屏等
2.严重:功能未实现、逻辑错误、影响用户正常操作、与需求完全不符、或因此BUG后续功能无法测试的(比如转账功能不成功、无法测试退款之类)
3.一般:功能实现但不正确、逻辑实现但不正确、功能上的错误、页面上的错误等
4.轻微:文案内容与实际不符、错别字、图片错误、建议性bug等
11、缺陷优先级有哪些?从高到低排列。
答:P1-P2-P3-P4-P5
12、如何有效的记录缺陷?
①保证重现bug ②分析bug,用最少的步骤重现bug ③包含重现bug的必要步骤④方便阅读⑤尽量简单,一个bug一个报告⑥注意表达语气
13、缺陷报告的准则规范是?
答:准确-清晰-简洁-完整-一致
14、怎么判断一个bug是前端还是后端的
通过请求与响应来判断。
如果前端已经把数据发送给了后端,后端接到请求,而后端没有返回数据请求/返回有误,则是后端出了问题;
如果前端在用户输入数据后,发送的请求没有带数据或者出错,则是前端的问题,或者后台已经传回了数据,但在前端显示不出来,这是前端问题。
15、内存溢出泄露原因、解决办法
内存溢出 out of memory: 指程序要求的内存超出了系统所能分配的范围, 出现out of memory;比如创建一个大的对象,而堆内存放不下这个对象,这也是内存溢出。
检测:使用Memory Analyzer (MAT)进行内存分析
危害有以下两点:
1)程序崩溃,导致拒绝额服务
2)跳转并且执行一段恶意代码
造成缓冲区溢出的主要原因是程序中没有仔细检查用户输入。
内存泄露 memory leak: 是指程序在申请内存后,无法释放已申请的内存空间(指分配出去的内存无法被gc回收)。
检测方法: 测内存泄漏的关键是要能截获住对分配内存和释放内存的函数的调用。截获住这两个函数,我们就能跟踪每一块内存的生命周期,**比如,每当成功的分配一块内存后,就把它的指针加入一个全局的list中;每当释放一块内存,再把它的指针从list中删除。**这样,当 程序结束的时候,list中剩余的指针就是指向那些没有被释放的内存。(分配+1,释放减1)
或者使用VLD即可
区别:
1、内存泄露可能会导致内存溢出。
2、内存溢出会抛出异常,内存泄露不会抛出异常
16、堆和栈的区别
1)栈:由编译器自动管理,无需程序员手工释放
堆:产生和释放是由程序员控制的
2)栈的内存空间有限,堆的内存可达4G
3)栈不会产生碎片,因为栈是先进后出的
堆容易产生碎片,多次的new/delete会造成内存的不连续,从而造成大量的碎片
4)栈是静态式动态分配的,但是栈的动态分配由编译器释放/堆是动态分配的
5)栈的效率比堆高,但是对于大量内存的分配,用堆比较好
无论是堆还是栈都要防止越界现象的发生
17、一代通信,二代通信,三代通信,四代通信,五代通信
1G时代:表示第一代移动通讯技术,以模拟技术为基础的蜂窝无线电话系统。1G无线系统在设计上只能传输语音流量,并受到网络容量的限制(BB机)
2G时代:手机能上网了,第二代手机通信技术规格,以数字语音传输技术为核心。一般定义为无法直接传送如电子邮件、软件等信息;
3G时代:随时随地无线上网
3G是第三代移动通信技术,是指支持高速数据传输的蜂窝移动通讯技术。3G服务能够同时传送声音及数据信息,速率一般在几百kbps以上。3G是指将无线通信与国际互联网等多媒体通信结合的新一代移动通信系统。
3G时代,最火的手机还数iPhone 3G。当时的手机屏幕不大,有后置摄像头但是像素并不高清,虽然没有前置摄像头无法自拍,只能老老实实的听歌,根本不能同时用相机,而且网络慢得吓人,用的最多的还是短信和QQ,上网还需要拨号才能上。
4G时代:比拨号上网快2000倍
第四代移动电话行动通信标准,指的是第四代移动通信技术,4G是集3G与WLAN于一体,并且能够快速传输数据、高质量音频、视频和图像等。4G能够以100Mbps以上的速度下载,比家用宽带ADSL(4兆)快25倍,并能够满足几乎所有用户对于无线服务的要求。
5G时代:万物互联
5G的性能目标是高数据速率、减少延迟、节省能源、降低成本、提高系统容量和大规模设备连接。而且是一个多业务多技术融合的网络,更是面向业务应用和用户体验的智能网络,最终打造以用户为中心的信息生态系统
18、Python的内存管理机制
先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲
(1)垃圾回收(2)引用计数(3)内存池机制
19、osi七层模型
20、C++的内存分区问题;
堆、栈、自由存储区、全局/静态存储区和常量存储区
- 栈,就是那些由编译器在需要的时候分配,不需要时自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。
- 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。由程序员创建释放,如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
- 自由存储区,就是那些由malloc等分配的内存块,和堆是十分相似的,不过它是用free来结束自己的生命的。
- 全局/静态存储区,全局变量和静态变量被分配到同一块内存中
- 常量存储区,常量,不允许修改
21、函数重载和函数重写的区别。
重载是指同一个类中的多个方法具有相同的名字,但这些方法具有不同的参数列表(参数的数量、类型、顺序不能完全相同)
重写是存在子父类之间的,子类定义的方法与父类中的方法具有相同的函数名, 参数表 和 返回类型
22、文件夹下很多log文件怎么读取关键字
grep -r "http" /root/tj
//比如只查找log文件
grep -r "http" /root/tj/*.log
23、分析“文件夹是否存在某些关键字”需要考虑的关键点
1、是否真的存在关键字
2、文件夹重名
3、文件夹命名符合规范 ‘/0 ?’
24、python求 sum(1~100)
print(sum(range(1, 101)))
25、 监控文件夹中的文件是否有新增,有新增的话给通知,这个场景如何实现
1、用软件Directory Monitor进行监视
2、C++里面有notify 也可以有了新增这个操作就发一个消息
#include <sys/inotify.h>
3、用java实现实时监控表中的数据,如果有新添加的数据,就通知外部服务器查询这条新增的数据。
首先创建一个Servlet监听器,(服务器一启动监听器就执行的)
在监听器中创建一个定时器(这才是最重要的)
创建一条短信发送线程(主要用来发送短信)
定时器每5秒查一次数据库(这个时间可以自己定义,当然也可以直接用线程+死循环执行)
当发现数据后立马传递给短信的线程
26、 场景题
周一安排任务A,deadline周五
周二安排任务B,deadline周四
周四上午安排任务C,deadline周五
如何安排??
27、malloc在哪申请内存空间
内存分为堆区,栈区,静态区,代码区。 全局变量和静态变量存放在静态区,局部变量存在在栈区,动态申请的变量(即new,malloc函数申请的变量)存放在堆区。
28、栈和队列的区别?
(栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的。
栈是先进后出,队列是先进先出。
栈只允许在表尾一端进行插入和删除,队列只允许在表尾一端进行插入,在表头一端进行删除。)
29、栈和队列项目中的应用场景
栈:数制转换、括号匹配的检验、行编辑程序、迷宫求解、表达式求值
队列:
———————————数据库———————————
1、内连接的题,给a,b两个表,有id,怎么实现内连接
1) 内连接
select * from a inner join b on a.id=b.parent_id
2)左连接
select * from a left join b on a.id=b.parent_id
3) 右连接
select * from a right join b on a.id=b.parent_id
4) 完全连接
select * from a full join b on a.id=b.parent_id
2、drop和delete的区别
drop主要用于删除结构
删除数据库:drop database XX
删除表 drop table XX
删除字段:alter table student drop age
delete主要用于删除数据-记录
删除 student表上名字为‘张三’的所有信息:
delete from student where name=‘张三’
重设数据一般用update比较多
————————————代码——————————
1、冒泡排序
2、对字符串进行去重排序
/*对字符串进行去重排序*/
//或者新建一个 arr[bool] ={0,0,0,...,0}如果使用某字符,则令其为1/true
#include<iostream>
#include<algorithm>
#include<set>
#include<string>
using namespace std;
int main() {
string s;cin>>s;
set<char> s1(s.begin(),s.end());
string s2(s1.begin(),s1.end());
sort(s2.begin(),s2.end());
cout<<s2<<endl;
return 0;
}
——————————场景测试——————————
1、写出下图个人资料页面的测试用例
详细地址:非必填,最多输入60个字符,输入内容不限制
联系人:必填项,只能输入中文,不能大于5个字
电话:必填项,常规手机号码格式
图文验证码:必填项,不区分大小写
勾选按钮:必勾选
其他:潜性规则需按照行业常规的要求进行把控。
——————————杂七杂八——————————
1、知道pylint嘛
Pylint 是一个 Python 代码分析工具,分析 Python 代码中的错误,查找不符合代码风格标准和有潜在问题的代码。
(1)Pylint 是一个 Python 工具,除了平常代码分析工具的作用之外,它提供了更多的功能:如检查一行代码的长度,变量名是否符合命名标准,一个声明过的接口是否被真正实现等等。
(2)Pylint 的一个很大的好处是它的高可配置性,高可定制性,并且可以很容易写小插件来添加功能。
(3)如果运行两次 Pylint,它会同时显示出当前和上次的运行结果,从而可以看出代码质量是否得到了改进。
2、装饰器
有了装饰器,就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。
装饰器的作用就是为了已经存在的对象添加额外的功能,使修改函数变得更容易。
3、python2与python3区别
(1)print语句
python2中print是一个语句,不论想输出什么,直接放到print关键字后面即可。python3里,print()是一个函数,像其他函数一样,print()需要你将要输出的东西作为参数传给它。
(2)UNICODE字符串
python2中有两种字符串类型:Unicode字符串和非Unicode字符串。Python3中只有一种类型:Unicode字符串。
(3)<>比较运算符
Python2支持<>作为!=的同义词, python3只支持!=, 不再支持<>
4、打开文件
try:
f = open('/path/to/file', 'r')
print(f.read())
finally:
if f:
f.close()
with open( '/path/to/file', 'r' ) as f:
print( f.read()
for line in f.readlines():#一行一行读取
print( line.strip() )
5、闭包函数
闭包的特点就是内部函数引用了外部函数中的变量。
闭包中被内部函数引用的变量,不会因为外部函数结束而被释放掉,而是一直存在内存中,知道内部函数被调用结束。
def func():
name = 'python'
def inner():
print(name)
return inner
f = func() # f = func() = inner
f() # f() = inner
在使用内部函数时,我们也可以将函数名作为返回值返回。 这是闭包最常用的方式。
6、指针和引用的区别
(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已
(2)引用不可以为空,当被创建的时候,必须初始化,而指针可以是空值,可以在任何时候被初始化。
(3)可以有const指针,但是没有const引用;
(4)指针可以有多级,但是引用只能是一级(int **p;合法 而 int &&a是不合法的)
(5)指针的值可以为空,但是引用的值不能为NULL,并且引用在定义的时候必须初始化;
(6)指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后就不会再改变了。
(7)”sizeof引用”得到的是所指向的变量(对象)的大小,而”sizeof指针”得到的是指针本身的大小;
(8)指针和引用的自增(++)运算意义不一样;
(9)如果返回动态内存分配的对象或者内存,必须使用指针,引用可能引起内存泄漏;
7、怎么看待多线程工作?
如果能力OK,确保能保质保量的完成工作,当然没问题
但是如果状态不好,或者不熟练,还是建议能够自己有效的规划时间,一件一件完成比较好