这位小伙伴曾经在字节跳动进行后端开发实习,并且在秋招提前批的时候,面试了深圳华为终端事业部,经过过一面+二面+主管面,但是很遗憾,凉了...为了能帮助到更多程序员朋友,他选取了其中比较有代表性的面试问题,整理出了自己的一面+二面+主管面的面经,既希望大家帮他找找问题出在什么地方,也希望他的失败经历给予更多的程序员朋友启发。
投递部门:华为终端事业部 深圳base面试者背景:
本科:西安电子科技大学硕士:哈尔滨工业大学(深圳校区)实习经历:字节跳动抖音电商实习6个月面试轮数:两轮技术面+一轮主管面
一面面试过程
1. 面试官:同学你好,请你先做一个简单的自我介绍吧!然后讲一讲笔试第一题的思路!我:我本科毕业于西电,硕士就读于哈工大深圳的计算机专业,曾在字节跳动的电商部门做过6个月的后端研发实习。主要负责电商退款与流程购买相关的接口开发与调试。笔试的第一题考察的是一个状态压缩数组的动态规划题目,解题方法只需要建立状态转换方程,进行遍历求得最优解即可。小结:正常面试的自报家门介绍,同时在这里提一下,华为每一轮面试,可能也需要看面试官心情,一般来说,每一轮都会对笔试的算法题目进行思路复习与研讨。华为的笔试三道算法题,100分,200分,300分,共600分,100分以上才能进入面试!华为OD也是需要进行笔试的!2.面试官:MySQL数据库中的全局锁、表锁、行级锁三种锁的应用场景有哪些?我:在MySQL数据库中,全局锁、表锁和行级锁是用于管理并发访问和修改数据的不同锁级别,它们各自适用于不同的应用场景。全局锁用于锁定整个数据库实例,通常用于数据库备份、维护、升级等操作。在使用全局锁期间,其他用户无法对数据库进行读写操作。表锁用于锁定整个数据库表。对整个表进行操作,而不需要锁定单独的行时,使用表锁。当需要执行大批量数据的加载、删除或更新操作时,可以使用表锁来防止其他事务同时干扰。行级锁用于锁定单独的数据行,当多个用户需要同时访问同一表的不同行时,行级锁是必要的,以允许并发访问。小结:问这个的主要原因是,由于在字节的实习项目主要基于Mysql数据库相关的接口开发,在聊到电商的订单流数据同步的时候进行的提问,算是比较有含金量和难度的题目。3. 请你谈谈分布式系统的设计中的CAP定理是什么?我:CAP定理是在分布式系统中三个核心属性之间的权衡关系。其定理核心在于一个分布式系统在这三个属性之间无法同时满足,只能选择其中两个。
一致性,在分布式系统中的所有节点上,数据复制必须保持一致。可用性,分布式系统不能因为某个节点或部分节点的故障而导致整个系统不可用。分区容忍性,分布式系统中必然会发生网络分区或故障,导致节点之间的通信中断。4.手写代码实现LeetCode第93题:复原 IP 地址
小结:面试官直接让登录LeetCode网站,选一道你没做过的算法题目,现场要求手撕,回溯法,直接AC了。面试结果:两天后约了二面...
二面面试过程
1. 面试官:同学你好,看了一下,一面面试官的面评还是不错的,我这里有一道场景题:
总共有四亿不重复的int值,假如有源源不断新来的int值,怎么设计数据结构来判断新来的int值是否已存在?我:使用数据结构布隆过滤器,将已有的四亿不重复的int值插入到布隆过滤器中。为每个值计算多个哈希值,并将对应的位设置为1。当新的int值到来时,你可以使用布隆过滤器来判断是否已存在。将新值计算多个哈希值,然后检查对应的位是否都为1。如果有任何一个位为0,那么新值肯定不存在。小结:如果所有位都为1,那么新值可能存在,但也可能是误判。布隆过滤器的一个重要参数是误判率,可以根据需求来调整该参数。增加哈希函数的数量可以降低误判率,但也增加了存储和计算的开销。2.面试官:Redis数据库支持哪五种数据结构?我:字符串String,字符串数据结构可以用于缓存、计数器、分布式锁等应用;
列表List,有序的字符串元素集合,支持从两端进行插入和删除操作。它可以用于实现队列、堆栈等数据结构。
集合Set,Redis的集合是无序的字符串元素的集合,不允许重复元素。有序集合Sorted Set,有序集合是集合的扩展,每个元素都关联一个分数,元素根据分数进行排序。
散列Hash,,它用于存储字段和与字段关联的值的映射关系。小结:基础的八股文,多解释一下内容进行一下扩展,因为越来越多的面试官,不太喜欢“教科书”式回答的方法。3.面试官:Redis缓存数据库的数据结构中Sorted Set的底层实现以及使用场景?我:Redis的有序集合的底层实现主要依赖于跳跃表和哈希表(Hash Table)两种数据结构。Sorted Set的典型应用包括实时排行榜,通过分数排序,可以轻松实现游戏排行榜、社交媒体关注者排名等以及计分系统,用于记录用户分数、评分或评级。4.InnoDB存储引擎使用的是B+树的索引结构,其叶子节点大小是多少?我:这个还忘了,随便说了一个4KB... 面试官摇了摇头。小结:对于InnoDB存储引擎来说,它使用了16KB大小的数据页(page),而叶子节点通常存储在这些数据页中。这并不是说叶子节点的大小限制是16KB,而是说一个数据页的大小是16KB。因此答案应该是16KB。5. 手写代码实现LeetCode第300题:最长递增子序列小结:动态规划+贪心,不难,直接秒了,以下是Java的解题代码:
class Solution {
public int lengthOfLIS(int[] nums) {
int len = nums.length;
if(len==0){
return 0;
}
int[] dp = new int[len];
Arrays.fill(dp,1);
int Maxlen = 1;
for(int j=1;j<len;j++){
for(int i=0;i<j;i++){
if(nums[i]<nums[j]){
dp[j] = Math.max(dp[i]+1,dp[j]);
}
Maxlen = Math.max(Maxlen,dp[j]);
}
}
return Maxlen;
}
}
面试结果:当天约了主管面,但是主管出差了,一个星期后才能面试。主管面面试过程1、谈谈你对华为狼性文化的加班看法?我:我觉得没有问题,刚毕业奋斗几年挺好的,只能努力才能进步。2、你目前有没有其他的Offer?我:目前为止,有一家字节跳动转正的Offer,不过我更想来华为,因为家是深圳的,更想来深圳。3、部门主要人员是在东莞,是否考虑?主要从事鸿蒙系统的后端开发,你有过安卓平台开发的经验吗?我:有过,不过主要是从事web端的后端开发,安卓开发只做过简单的开发。4、你的技术栈主要是Java,我们这边C++语言用的更多一些?你愿意转技术栈吗?
我:可以的,不过还是想原生的Java后端开发,更加擅长。小结:以上的三个问题算是关键采分点,剩下基本都是纯聊天,基本保持着热爱加班,支持狼性文化,就认准选定华为的原则进行回答,应该不会出现问题的,但是确实可能业务方向不太匹配,候选人多的话,就不好说了...面试结果:可能真是业务方向不匹配,主管面面试完半小时,HR告知,对不起同学没有通过...整体面试总结:华为的面试体验还是挺不错的,但是只说好的地方,就失去了面经的意义。说说注意事项:1. 华为的笔试从19年之后,难度变得很大,三道笔试题目,有两道都是hard难度
2. 技术岗位的面试,很少刷人,主管面挂了,同一个流水线的部分都不能投递了,看得出来主管的权利很大。2023年还剩下最后两个月的时间,祝愿大家都能找到满意的工作,一起升职加薪!