机构:博览GeekBand
讲师:董飞
更多详细内容请认真观看教学视频:)
你需要了解的一些东西
浏览器:谷歌
翻墙:翻墙教程
工具:在线文档网站collabedit
第一道题
函数名:StrStr
功能:在一个已有的字符串中寻找另一个字符串,如果找到返回起始地址,否则返回-1
参考答案:
class Solution{
public int strStr(String source, String target) {
if (source == null || target == null) {
return -1;
}
int i, j;
for (i = 0; i < source.length() - target.length() + 1; i++) {
for (j = 0; j < target.length(); j++) {
if (source.charAt(i + j) != target.charAt(j)) {
break;
}
}
if (j == target.length()) {
return i;
}
}
return -1;
}
}
常见误区
StrStr常见问题1
装B失败
某些可能是科班出身的童鞋想到了高大上的KMP算法
面试考察的是在有限的时间内实现题目的要求,太过复杂的算法可能让自己偷鸡不成蚀把米,也可能让某些面试官看不懂你的答案。
StrStr常见问题2
代码风格像坨shit
操作符与变量之间没有空格,for循环的分号后面也未空格,代码像黏在一起,影响阅读,一看就是新手菜鸟。
StrStr常见问题3
未考虑数组越界情况,例如在for循环中直接使用
for (i = 0; i < src.lenth(); i++)
for (j = 0; j < dest.length(); j++)
if (src.charAt(i + j) != dest.charAt(j))
break;
i+j可能已经超过了src的范围;
StrStr常见问题4
Java:
for (i = 0; i < source.length() - target.length(); i++)
循环条件中i的取值上限未+1
C++:
for (i = 0; i < strlen(source) - strlen(target); i++)
strlen的算法复杂度为O(n)级别,在c语言中strlen是使用指针来操作的,没有额外的空间来存储字符串数组的长度,直接使用会程序效率。可以考虑定义一个变量来存储strlen的值,然后再进行使用。
求职者在面试中的常见误区
- 认为做过的题(或者简单的题)肯定能过
- 算法想出来了就能过
- 代码写出来了就能过
面试官视角
面试官眼中的求职者:
- 你可能是他未来的同事
- 你的代码看起来舒服吗?
TA需要多少时间Review你的代码 - 你的Coding习惯良好吗?
TA不想在未来老是帮你DEBUG,你自己要是经常搞出事故咋办?
编码规范参考:google coding style/Google开源项目风格指南(中文版) - 你的沟通能力好吗?
TA和你交流费劲吗?
日常会议讨论,口头沟通,文档
面试考察的编程基本功:
- 程序风格(缩进,括号,变量名)
- Coding风格(异常检查,边界处理)
- 沟通(让面试官时刻明白你的意图)
- 测试(主动写出合理的Testcase)
自我反思
你真的会面试吗?
- 你在做题之前,先在白纸上写一遍了吗?
- 写了200多题?你吃透了几个?
- 题目不会做要直接说自己不会吗?
- 是不是觉得面试官在为难你?
算法,永远的痛
- 题做了很多,但就是记不住解法
- 从来就没有弄明白过动态规划是怎么回事
- 这题好像见过,不过还是不知道怎么做
- leetcode,cc150都刷了,新题还是跪