4/30 五一过半,我还在想春招……
- 作者
- Name
- 青玉白露
- Github
- @white0dew
- Modified on
- Reading time
- 10 分钟
阅读:.. 评论:..
昨天有个同学跟我分享他的春招经历:我就读于南京航空航天大学,目前大四,五一期间一直在复盘自己最终能够进入腾讯、阿里的原因,我认为自己从简历层被字节HR选中的原因,有以下几点。
经验总结
怎么写一份无法被HR拒绝的简历
- 匹配度:最吸引人的是科研项目与岗位需求的高度匹配。我将自己原本的专业方向的研究方向转变为元宇宙,这一点与岗位需求形成了强链接。
- 个性与价值:简历中的大学项目和实践经验展示了我的好奇心、不怕失败的精神和强烈的责任感。我致力于做有价值的事,如组织慈善活动、参加各种比赛、担当班级\学校委员、组织和参与各种实践活动。
- 全面展示:将大学生活中的亮点按照时间顺序或含金量全面展示出来,即使是微小的经历也可能成为简历上的亮点。
明确这份实习是不是你想要的
我在找实习过程中遇到最迷茫的点之一:我不知道我想要一份什么样实习,我不知道我配得上一什么什么样的实习。
- 行业调研:通过与互联网公司实习的朋友交流,我对不同公司的文化和体验有了深入理解,最终选择字节跳动以及腾讯作为面试目标。
- 职业目标:在攻读研究生前,我明确了实习的最大目标是确定就业方向。
- 跨界机遇:即便工作与专业不对口,我更看重实习经验能否带给我深入思考、跨界入门的机会,以及是否有向上成长的空间。
面试Tips
- 实事求是:面试时要诚实回答面试官的问题,展现自己的底层能力和逻辑思维。
- 面试重点:一面关注底层能力;二面关注运营逻辑;三面主要是工程实践能力,程序编码能力。
我希望我的经历能够对其他求职者有所启发,希望大家都能找到让自己成长和收获的实习机会,offer连连!
模拟面试
面试官: 你好,请先进行自我介绍。
求职者: 你好!我是计算机专业的学生,对算法研发有很深的热情和一定的经验。我一直在努力提升自己的技术栈,并希望能在这个行业里实现自己的价值。
面试官: 很好。我看你简历上有很多算法研发经历,那你觉得测试开发需要具备哪些技能?
求职者: 我认为测试开发不仅需要有扎实的编程能力,还需要具备测试用例设计、测试框架搭建、软件质量保证等能力。此外,了解持续集成和持续部署等DevOps实践也很重要。
面试官: 你了解进程和线程吗?
求职者: 是的,进程是系统进行资源分配和调度的一个独立单位,而线程则是进程中的一个实际运作单位,它们共享进程的资源。
面试官: 那你知道协程吗?可以讲一下吗?
求职者: 当然,协程是一种用户态的轻量级线程,它可以实现非抢占式的多任务协作,在单个线程中实现代码的并发执行,具有非常低的切换开销。
面试官: 能讲讲它们三个之间的关系吗?
求职者: 进程、线程和协程三者都是实现任务并发的手段。进程拥有独立的资源空间,线程在进程内部执行,共享进程资源,而协程则是依附于线程的更加轻量的执行单元,它们的切换完全由用户控制,不需要操作系统的干预。
面试官: 谈谈进程同步机制。
求职者: 进程同步机制是为了防止多个进程在共享资源时产生冲突。比如使用信号量、互斥锁和条件变量来控制资源的访问。生产者-消费者问题通常用来说明同步机制的工作方式,比如用缓冲池或消息队列来协调生产者和消费者之间的数据流。
面试官: 那你了解读写锁吗?可以讲一下怎么实现的?
求职者: 读写锁是一种同步机制,它允许多个读操作同时进行,但写操作在同一时间只能有一个。读写锁通常通过给读操作和写操作分配不同的条件来实现,确保写操作具有更高的优先级。
面试官: 在Python中可以实现协程,你用过吗?
求职者: 我之前没有使用过Python中的协程,但我对它的原理和用法有一定的理解。
面试官: Python中也有多线程和多进程,你有使用经验吗?
求职者: 我没有直接使用过Python的多线程和多进程,但我理解它们在提高程序并发性能时的应用。
面试官: 谈谈计算机网络的层次和它们之间的一些常见协议。
求职者: 计算机网络可以分为多层,标准的TCP/IP四层模型包括应用层、传输层、网络层和链路层。应用层有HTTP、FTP等协议,传输层有TCP和UDP,网络层主要是IP协议,链路层则有ARP、Ethernet等。
面试官: 说一下TCP的连接和断开是怎么做的。
求职者: TCP连接的建立是通过三次握手完成的:先由客户端发送SYN,然后服务器返回SYN-ACK,最后客户端发送ACK。断开连接则是四次挥手:客户端或服务器发送FIN开始断开连接,对方ACK确认,然后等待对方所有数据传输完毕后,对方也发送FIN,最后完成ACK确认。
面试官: 你知道TCP头部和UDP头部吗?
求职者: 我不是非常熟悉TCP和UDP头部的具体细节,但我知道TCP头部包含源端口、目的端口、序列号、确认号等,而UDP头部则更简单,只有端口和长度信息。
面试官: 为什么TCP的断开比连接多一次呢?
求职者: TCP的断开多一次是因为当一方完成数据发送后,需要发送FIN来关闭数据传输,对方确认后仍然可以继续发送数据,直到所有数据传输完成后,对方也发送FIN,并得到最终确认。
面试官: 那么,在Python中,讲一下你常用的数据类型。
求职者: 在Python中,我常用的数据类型包括列表(list)、字典(dict)、元组(tuple)、**集合(set)**等。
面试官: 解释一下list和dict的底层原理。
求职者: Python中的list是一个动态数组,它能够根据需要自动调整大小。而dict是基于哈希表实现的,它使用键的哈希值作为索引来存储和检索数据。
面试官: 能说一下你知道的常见的数据结构吗?
求职者: 当然,常见的数据结构包括数组、链表、栈、队列、哈希表、堆以及树(包括二叉树、红黑树等)。
面试官: 好的,现在我们来看一道算法题。题目是用数组中的数构建比n小的最大数,给一个数组nums=[5,4,8,2],给一个n=5416, 让你从nums中选出一些元素,使得组成的数字是小于n的最大数,比如这个例子应该返回5288。你能给我讲讲你的思路吗?
求职者: 这道题目的关键在于找到一个合适的方法来组合数组中的数字以构建出最大的数。我的思路是首先对数组进行排序,然后贪心地选择每一位数字,确保每一步都是最优的选择。
package 补充题目; import java.util.Arrays; /** * description:code * * @author xiaozhenzhen001 * @date 2022/6/13 */ public class 小于n的最大数 { public static void main(String[] args) { int[] nums = new int[]{4, 5}; System.out.println(build(4413, nums)); } public static int build(int num, int[] arr) { Arrays.sort(arr); //查找目标最大值为 num-1 or 减一位后的最小值, String maxStr = getFindMaxNum(num, arr[0]); char[] res = new char[maxStr.length() - 1]; // 当前位真实数据与【maxStr当前位】比较,影响下一位数据的选择 boolean preIndexLess = false; // key 贪心算法 for (int i = 0; i < maxStr.length() - 1; i++) { // 要arr中的哪个位置数据,如果前一位比预期值小,则当前位可以取arr中最大值,否则二分查找 int index = preIndexLess ? arr.length - 1 : search(maxStr, i, arr); // 赋值 res[i] = (char) (arr[index] + '0'); // 当前位真实数据与当前位比较,影响下一位数据的选择 if (res[i] < maxStr.charAt(i)) { preIndexLess = true; } } return Integer.parseInt(new String(res)); } /** * 获取要查找元素的最大值 * minValue是数组中的最小值 */ public static String getFindMaxNum(int num, int minValue) { /** * 正常目标要找的最大值应是 num-1 * 特殊:但有种情况不满足。这种情况拼不出来当前长度的数字,只能(长度-1)后的最大数 * 如arr=[5, 4](最小值是4),num= 4413(最小值1) 。拼不出来(num-1),因为 4 < 1,所以查找的最大值应是 999 (num长度减一位后的最大值) */ boolean flag = false; String numStr = String.valueOf(num); for (int i = 0; i < numStr.length(); i++) { if (minValue > (numStr.charAt(i) - '0')) { flag = true; break; } } int maxNum = flag ? (int) (Math.pow(10, (numStr.length() - 1)) - 1) : (num - 1); String maxStr = String.valueOf(maxNum); // 加一是为了方便最后一位的运算 return maxStr + maxStr.charAt(maxStr.length() - 1); } /** * key 二分查找 */ public static int search(String str, int i, int[] arr) { // 1.确定当前位置的数据,选择的数与下一个数字有关(如,下一位数字比arr的最小值还小,说明只能当前位减一) int currentMaxNum = str.charAt(i) - '0'; int arrMinNum = arr[0]; int findNum = (str.charAt(i + 1) - '0') >= arrMinNum ? currentMaxNum : currentMaxNum - 1; // 2.使用二分法进行查找 int left = 0, right = arr.length - 1; int index = -1; while (left <= right) { int middle = left + ((right - left) >> 1); if (arr[middle] == findNum) { index = middle; break; } else if (arr[middle] < findNum) { left = middle + 1; } else { right = middle - 1; } } // 3.找到就返回middle,否则返回right(arr[right]是比findNum小的最大值) // -1 表示表示arr中没有比findNum小的值 return (index == (left + ((right - left) >> 1))) ? index : right; } }
面试官: 好,那出一个场景题。如果你要测试抖音的发布功能,你会怎么做?
求职者: 测试抖音的发布功能,我会从不同角度来设计测试用例:包括正常的发布流程测试、异常网络条件下的发布稳定性测试、发布功能的安全性测试,以及发布内容的格式兼容性测试等。 (……)
面试官: 非常详尽。最后有什么想反问的吗?
求职者: 我想知道,对于这个岗位,公司有什么期待?还有,对于技术人员的成长和发展有哪些支持和计划?
面试官: 对于这个岗位,我们期待候选人具备良好的技术基础和快速学习的能力。感谢你今天的参与,我们将尽快给你答复。祝你好运!