前言
剑指Offer这本书可以称得上的是圣经了,在面试之前,基本必刷一遍,但我在之前因为时间紧急,并没有来得及刷一遍,导致找工作的技能差了很多,现在进行重刷。
正文
一、经验
- 面试外企的话,一定要准备要英文方面的知识。
- 要注重编程习惯及调试能力。
- 不要一拿到问题,就急于开始进行编程。应先想清楚解决问题的思路,以及该算法的时间,空间复杂度是多少。
- 可提前准备好问面试官的问题。
- 用30s到1分钟的时间介绍自己的工作学习经历就可以了。
- 对于项目的描述建议使用STAR模式进行:
- 可能会问你碰到的最大的问题是什么?(上次的IO测试,队列问题)
- 在介绍项目经验(包括在简历上介绍和面试时口头介绍)时,应聘者 不必详述项目的背景,而要突出介绍自己完成的工作及取得的成绩.
- 回应为什么跳槽:通常给出的答案是:现在的工作做了一段时间, 已经 没有太多的激情了,因此希望寻找一份更有挑战的工作。
- 扎实的基础知识、能写高质量的代码、分析问题时思路清晰、能优化时间 效率和空间效率, 以及学习沟通等各方面的能力。
- 对链表的插入和删除结点了如指掌,对二叉树的各种遍历方法的循环和 递归写法都烂熟于胸,那么真正到了面试的时候也就游刃有余了。最后,大部分公司都会注重考查查找、排序等算法。应聘者可以在了 解各种查找和排序算法的基础上,重点掌握二分查找、归并排序和快速排 序,因为很多面试题都只是这些算法的变体而已。
- 一定要注意程序的边缘条件,以及对空指针的判断以及空字符串。这将很大程度决定你是否能够收到offer.
- 应聘者所需要掌握的五种能力:
二、 常见题目
1. 把一个字符串转换成整数
- 初级代码:
int StrToInt(char* string)
{
int number = 0;
while(*string!=0)
{
number = number*10+(*string-'0');
++string;
}
return number;
}
要多考虑的点:
- 考虑到有非数字字符。
2) 考虑到有正负号。 - 考虑到有最大的正整数和负整数以及溢出。
- 考虑当输入的字符串不能转换成整数时。
2. 求链表中的倒数第n个节点
/*
struct ListNode{
int val;
struct ListNode *next;
ListNode(int x)
{
val(x);
next(NULL);
}
}
*/
class Solution{
public:
ListNode* FindKthToTail(ListNode* head,unsigned int k)
{
int n = 0;
for(ListNode* p = head;p;p = p->next)
n++;
if(k>n)
return nullptr;
ListNode* p = head;
for(int i = 0;i<n-k;i++)
p = p->next;
return p;
}
};
三、测试相关内容
1. 白盒测试
白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,即清楚盒子内部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。
2. 黑盒测试
黑盒测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。
黑盒测试是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。很明显,如果外部特性本身设计有问题或规格说明的规定有误,用黑盒测试方法是发现不了的。
3. 自动化测试
一般是指软件测试的自动化,软件测试就是在预设条件下运行系统或应用程序,评估运行结果,预先条件应包括正常条件和异常条件。