作为面试官的一点感想

程序员书单

共 2259字,需浏览 5分钟

 ·

2021-01-05 03:39

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


手写代码较为薄弱

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

要知道纸上写代码不比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);}
浏览 12
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报