1.从第一道面试题谈起


机构:博览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的值,然后再进行使用。

求职者在面试中的常见误区

  1. 认为做过的题(或者简单的题)肯定能过
  2. 算法想出来了就能过
  3. 代码写出来了就能过

面试官视角

面试官眼中的求职者:

  1. 你可能是他未来的同事
  2. 你的代码看起来舒服吗?
    TA需要多少时间Review你的代码
  3. 你的Coding习惯良好吗?
    TA不想在未来老是帮你DEBUG,你自己要是经常搞出事故咋办?
    编码规范参考:google coding style/Google开源项目风格指南(中文版)
  4. 你的沟通能力好吗?
    TA和你交流费劲吗?
    日常会议讨论,口头沟通,文档

面试考察的编程基本功:

  1. 程序风格(缩进,括号,变量名)
  2. Coding风格(异常检查,边界处理)
  3. 沟通(让面试官时刻明白你的意图)
  4. 测试(主动写出合理的Testcase)

自我反思

你真的会面试吗?

  1. 你在做题之前,先在白纸上写一遍了吗?
  2. 写了200多题?你吃透了几个?
  3. 题目不会做要直接说自己不会吗?
  4. 是不是觉得面试官在为难你?

算法,永远的痛

  1. 题做了很多,但就是记不住解法
  2. 从来就没有弄明白过动态规划是怎么回事
  3. 这题好像见过,不过还是不知道怎么做
  4. leetcode,cc150都刷了,新题还是跪

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值