面后复盘, 呦吼~
四面
- 自我介绍
- 为什么选择游戏测试(情绪/兴趣+使命/责任感+性格 ;自认为不必提自己的知识掌握程度好,因为面试的过程就是在考核你的知识。如果自夸掌握程度好,后面发挥不大理想的话,面试官会怀疑是不是你讲过的其他话也有水分,也是自负呢。但如果可以提及一些项目经历也不错~)
- 喜欢的游戏, 吸引你的点
- 喜欢的游戏的缺点, 如何避免这样的bug
- 为什么女生喜欢怪物猎人这样打斗向游戏, 而非剧情向(后来发现我喜欢的是 怪物猎人日记, 不是怪物猎人qwq)
- 针对怪物猎人中装备: 弓箭的测试用例 可思考1min(弓箭与其他装备关系{弓箭自身附属:抽取弓箭后是否箭筒响应箭的数目减少. 弓箭与其他装备一同使用的攻击值} 弓箭与人物关系{不同角色佩戴同一装备不同配色;握持位置;攻击值} 弓箭自身功能{招数(是否允许多发; 火/冰箭); 射程(边界值分析 与屏幕关系(超出屏幕, 刚好屏幕边缘, 屏幕范围内); 攻击力(取决怪物级别+人物级别+装备级别); 射击方向: 左右上下. 是否可向天空发射, 如信号弹功能. } 与怪物关系{怪物攻击效果(箭穿透, 若怪物有甲壳是否箭弹开, 不同属性的箭对不同属性怪兽产生不同效果, 如冰箭可冻住怪兽, 火属性箭有火花四射, 火花有无攻击力)} )
- 数组的特点(首先分类:普通数组/动态数组。普通数组:长度固定且必须为常数值,不可为变量。动态数组:可动态分配,如vector,可O(1)时间复杂度快速索引寻找。但频繁插入删除操作会移动其后元素,耗时长,浪费性能。故在频繁查找时使用数组,频繁插入删除时不建议使用数组,使用链表更妥当。)
- 项目背景,概述及你负责的工作
- 你知道的复杂度为nlogn的排序算法(快排,归并排序,堆排序,二叉查找树排序)
- 写一下堆排序. 写好后解释一下逻辑
#include <bits/stdc++.h> using namespace std; /** * 交换数组中两个元素的位置 */ void node_swap(vector<int> &a, int x, int y) { int tmp = a[x]; a[x] = a[y]; a[y] = tmp; } /** * 已知二叉树中a[i]的两个子树都是大根堆,本函数通过交换a[i]和其某个儿子的 * 位置,将以a[i]为根节点的二叉树变为大根堆 */ void heap_adjust (vector<int> &a, int i, int len) { int tmp = a[i]; // 用tmp保存根节点的值 for (int j = i * 2 + 1; j < len; j = i * 2 + 1){ // a[j]是a[i]的左儿子,循环条件:a[i]的左儿子存在 if (j + 1 < len && a[j] < a[j+1]) // 如果a[i]有右儿子右儿子更大,j指向右儿子 j++; if (a[j] > tmp){ // 如果某个儿子比根大 node_swap(a, i, j); // 儿子和根交换 i = j; // 还要继续调整根结点被改变了的子树 } else break; } a[i] = tmp; } /** * 堆排序 */ void heap_sort(vector<int> &a) { int len = a.size(); /* 构建大根堆 */ for (int i = len / 2 - 1; i >= 0; i--) // 从最后一个非叶节点开始 heap_adjust(a, i, len); // 把每个子树调整成小根堆 /* 交换堆顶和最后一个元素的位置,然后调整除了最后一个元素之外的堆 */ for (int unsorted = len - 1; unsorted >= 1; unsorted--){ node_swap(a, 0, unsorted); heap_adjust(a, 0, unsorted); } } // 需打印堆时释放 /*void print(vector<int> a) { for (int i = 0; i < a.size();i++) printf("%d ", a[i]); printf("\n"); }*/ int main() { int arr[] = {1,9,2,8,4,7,5,123,255,-4,-999,1232}; vector<int> a(arr, arr + sizeof(arr)/4); //print(a); heap_sort(a); //print(a); }
- 你有什么问题吗?(实习生的职责:与正式员工相当。实习生功能测试与测试开发的划分:面试官根据对实习生的观察分析,进行划分。实际二者职责有机结合,相互交融,没有特别明确的界限。非常感激这位面试官, 跟我讲了很久职责划分, 非常详细, 以至于我现在非常后悔为什么没有好好记下他说的每一句话->日后最好在提问环节严阵以待, 拿起笔狂记要点! 毕竟是面试官的实战总结哇! 「大切にしろ!」)
游戏测试才是我的本命吧qwq, 可能因为是唯一与目前课程有交叠的岗位( 计算机软件基础课上有讲测试方法、测试流程。感激蒋老师条理清晰的讲课和PPT )
很喜欢面试官的引导: 「还有要补充的吗?」 在面试这样的高度紧张环境下很容易通过不断追问, 激发出人的潜能. 推荐大家多参加英语角呀! 别人突击提问的时候可能会冒出好点子呢! 比如之前教英语的德国外教问"沟通有什么好处", 我猛然被call, 提起自己参加读书会的经历, 大家在一起聊天交换想法, 了解他人的生活, 分享自己的生活, 这就是沟通的价值, 扩展边界, 生活的与知识的
三面
- 自我介绍
- 项目:
- LSSVM故障诊断分析:
- 应用场景, 针对什么提出? (因先进机械设备的结构更加复杂且工作环境恶劣, 主要针对工业生产情境下的电力系统(主要是电力风机)故障检测与预测问题。)
- 取得成果 (应用此算法相对单一LSSVM准确率提高了1.63%。准确率达到了95.18%,相对LSSVM主分类器准确率提升7.53%
- 企业通讯软件
- 采用tcp还是udp,如何选择?(登录为tcp,保证稳定连接。发送消息使用udp,保证快速收发,减小延迟)
- udp与tcp区别
- 过程中遇到难点(功能实现+错误定位:内存泄漏,死锁)
- 喜欢的游戏,遇到的bug
- 新车测试用例(注意:推出新车的方式!)
- 向我介绍一辆车?(注意不能仅仅是操作,还要车的各方面你认为值得关注的性能)
- 一辆车你最关注的点?(第一外观。第二流畅度,不存在漂移不畅,操作不便,bug。第三性能,如时速)
- 玩qq飞车有没有什么技巧?
- 简单编程(string -> int)(注意询问面试官对
-0
的处理!)#include <iostream> using namespace std; int stringToInt(string s) { if(s=="") { cout<<"The string is empty!"<<endl; return 0; } if(s=="-0")// 询问面试官此时输出!给与提示,还是认为是正确输入,输出0? { cout<<"Invalid input!"<<endl; return -1; } int i=0; bool negative; if(s[i]=='+'||s[i]=='-') { negative=(s[i]=='-'); i++; } int num=0; for(; i<s.size(); i++) { if(s[i]>='0'&&s[i]<='9') { //溢出 if(num>INT_MAX/10||num*10>INT_MAX-(s[i]-'0')) { if( !negative || num*10+s[i]-'0'!=INT_MIN) { cout<<"The string overflow int"<<endl; return INT_MAX; } } num=num*10+s[i]-'0'; } else { cout<<"The string contain non number"<<endl; return -2; } } return negative?-num:num; }
- 你有什么问题吗?(4个项目组与测试开发,功能测试的关系:每个项目组都有相应的测试开发、功能测试人员。功能决定:主要策划决定。市场研发测试人员给出意见。)
三面面试官言行非常谨慎, 且问题打击精准, 正切要害.
二面
- 自我介绍
- 询问想去测试开发还是功能测试?(都可以,但更倾向测试开发)
- 那么开始考代码,最长公共子串
- 知道的测试方法(白盒黑盒回归压力)
- 讲一下白盒黑盒
- 讲一下白盒中的路径覆盖和语句覆盖的区别
- 讲一下白盒黑盒回归测试什么时候应用
二面面试官主要考察知识点,硬实力。
一面
- 自我介绍
- 可实习时间(7,8月份)大四主要学习任务是什么?大四可以来实习吗?
- 求职规划(通信或互联网公司的测试部门)
- 改名卡的测试用例
- 对测试的理解?讲了一点软件测试后被打断,问游戏测试与软件测试的区别
- 为什么选择游戏测试?
- 有什么想问我的?(实习生职责:与正式员工相当。但刚进入时会分配一个师傅带你,但当然是希望我们产出。)
一面面试官主要是对规划,宏观的测试理解的询问。自认为与HR面部分重合。