📅  最后修改于: 2023-12-03 15:42:04.876000             🧑  作者: Mango
我是一名大三的计算机专业学生,今年暑假决定去外面实习锻炼一下自己。在准备简历时,我特意选择了一些自己熟悉的技术并且能够体现出自己对于计算机专业的热爱,如Java、C++、数据结构等等。
在投递了自己的简历后,没想到几天之后便收到了邮件通知:邮差2020暑假实习招聘来了,想要面试吗?当然不会错过这个机会呀,于是我便果断回复了邮件,报名参加了面试。
邮差面试过程分为在线笔试和现场面试两个环节,我首先完成了在线笔试环节,顺利通过之后,被邀请参加了面试。
现场面试时,首先被要求自我介绍。我简单介绍了自己的基本情况,包括今年大三、对Java、C++有一定的了解等等,然后便进入了正题。
这个是剑指offer中比较经典的一道题目了。我思考了一下,然后给出了自己的实现方式。
public boolean isListHasLoop(Node head) {
if (head == null) {
return false;
}
Node slow = head;
Node fast = head.next; // 快指针从head.next开始,跳两步
while (slow != null && fast != null) {
if (slow == fast) {
return true;
}
slow = slow.next;
fast = fast.next;
if (fast != null) {
fast = fast.next;
}
}
return false;
}
我对HashMap的实现并不是很清楚,但我回答了自己所知道的一些内容。
HashMap是一种基于哈希表的映射结构,内部实现是一个数组,通过散列函数将键映射到对应的桶上,然后将值存储在桶中。其中元素的查找、插入、删除都可以达到O(1)的时间复杂度。
面试官接着问了一些关于哈希表的问题,并让我思考如何实现一个简单的哈希表。
面试官突然转到了并发编程的问题上,问我如何解决死锁问题。
我回答说,死锁的原因是线程A持有锁1等待锁2,而线程B持有锁2等待锁1,这时会发生死锁;而解决死锁问题的方法,可以采用拆锁、加锁顺序、死锁检测等等。
总的来说,这次面试比较接近实际开发场景,面试官提问也比较具体,需要回答一些具体的算法、数据结构、并发编程等等,考验了自己的基础能力和思考应变能力。在面试结束后,我认真总结了自己的过程,反思了一下自己的不足之处,并决定在接下来的实习过程中继续努力,加强自己的相关技术知识和实践经验。