作为面试官的一点感想

这几天公司在组织校园招聘,博主作为面试官参加了几场面试,简单聊一聊感想。

手写代码较为薄弱

纸上代码是比较热门的一种技术面试手段,要求面试者在纸上实现代码,参加过这种面试形式的同学一定深有感触,这是一种看上去简单但实际上绝不简单的面试方法,对应聘者要求较高。

要知道纸上写代码不比IDE,在IDE上各种智能提示,语法高亮,代码增删改极为容易,但是纸上代码就不一样了,在纸上写代码是很难修改的,改来改去就会导致最后的代码根本没法看,这就要求面试者在下笔之前要胸有成竹,而不是想到哪写到哪,觉得不对再回头修改,在下笔之前要有通盘的全面的考虑,这对应试者的能力要求是比较高的。因此,纸上代码经常见于技术面,要想攻克纸上代码无它,送你几个字:

practice, practice, practice

不过今年因为疫情的关系都采用了线上面试,因此面试同学可以在自己的电脑上用IDE写代码,但就是这样也能看到大部分同学都不熟练。

在这里透露一个博主常用的简单算法题:给定一个链表,判断链表是不是回文,所谓回文就是对称,像123,就不是回文;121就是。

这其实是一个非常简单的题目,但博主没有想到的是,只有为数不多的同学能正确无bug写出,这个题目的实现代码见文末。

有的同学可能会问,为什么现在都要问算法呢?答案其实非常简单:

talk is cheap,show me your bug!

Sorry,show me your code

限于背景知识你的研究项目面试官未必懂,任你说的天花乱坠面试官又没参与你的项目,所以没有一个对你能力判断的直观感受。

但算法就不一样了,这里不存在背景知识的问题,我们数据结构总学过吧,我们也都知道链表吧,有这些就够了,在这种情况下面试官可以直观感受面试同学的代码能力。

当然,纸上代码也只是考察的一方面,大家都985,211了,这些练习应该难不倒你。

面试是需要准备的

可能是因为面试经验不足,很多同学明显是没有准备的,问一些基础问题很多都答不上来,然后归咎于之前学过忘掉了,其实这些基础知识面试官还是挺看重的,而且也不难准备,把之前学的课程再拿出来看看,实际上工作之后就会发现,之前觉得最无聊的基础课程其实恰恰是最重要的,工作中遇到的很多问题都是因为基础不牢固,相信很多工作后的同学会有感触。

这里的基础指的是操作系统、计算机网络、编译原理等。顺便说一句,博主工作后深感基础的重要性因此将操作系统相关知识进行了整理,我将其命名为《操作系统:以程序员的角度》,以此致敬CSAPP(Computer Systems: A Programmer's perspective),中文译作《深入理解计算机系统》尽管我并不认为这是一个好的译法。《操作系统:以程序员的角度》目前正在连载,进入公众号点击底部“操作系统”菜单栏获取。

就简单的唠叨这几句吧,文末附上面试题代码,祝大家周末愉快!

ListNode* reverse_list(ListNode* head) {
    if (head == NULL || head->next == NULL) return head;
    ListNode H(0);
    while(head) {
        ListNode* t = head->next;
        head->next = H.next;
        H.next = head;
        head = t;
    }
    return H.next;
}
bool compare_list(ListNode* LA, ListNode* LB) {
    while(LA && LB) {
        if (LA->val != LB->val) return false;
        LA = LA->next;
        LB = LB->next;
    }
    return true;
}
bool isPalindrome_new(ListNode* head) {
    if (head == NULL || head->next == NULL) return true;
    ListNode H(0);
    H.next = head;
    ListNode* pre = &H;
    ListNode* slow = head;
    ListNode* fast = head;


    // 找到中间节点
    while(fast && fast->next) {
        pre = pre->next;
        slow = slow->next;
        fast = fast->next->next;
    }


    // 划分为两段,一段是LA,一段是LB
    pre->next = NULL;
    ListNode* LA = head;
    ListNode* LB = slow;
    
    // 翻转LB
    LB = reverse_list(LB);


    // 比较
    return compare_list(LA, LB);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值