首页 > 面试记录 Huawei
头像
摸鱼是一件快乐的事情
编辑于 2022-08-15 14:46
+ 关注

面试记录 Huawei 内部员工回复

一面 2022.8.13 14:30pm :

1. 正常自我介绍
2. 面试官:谈一下个人技术栈?
后端技术栈SSM 、spring boot、spring cloud、dubbo,大数据相关:大数据存储hadoop、amazon s3,大数据离线计算:hive、spark,大数据实时计算:flink、spark streaming,其他相关大数据组件:kafka 、flume都有使用和开发经验。部分数据挖掘比如NLP中NER和情感分类。实习过程中速刷了前端react。
3. 面试官:会的挺多,主要问问你简历里这两个项目(提到了一个springcloud的项目和一个实时计算数仓的项目)。你对spring cloud相关技术组件有多少了解呢,你这个项目用到了哪些?
主要用的是阿里生态的spring cloud,nacos统一管理配置中心、让每个微服务能够自己注册并发现配置中心,基于spring boot来写每个微服务模块,还有统一验证网关gateway、在里面控制配置负载均衡和各类验证信息,不同微服务模块之间通过feign来调用,此外还有elastic search和通过docker来部署服务器项目等。
4. 你提到了你是用docker来部署这个项目,那你对docker容器了解有多少呢?(说实话都没复习这块)
自己项目主要是对每个微服务模块来部署,每个模块根据具体功能来分配容器数量。然后谈了一下docker里面container相关的八股文。
5. 了解k8s吗?
一个容器编排引擎,对容器化应用进行部署管理的一个框架(?)。有相关了解,但是没有具体部署和使用过。(没钱给我这样造次。。)
6. 你这个数仓项目涉及到的技术栈,你可以画个图来解释一下吗?
离线数仓大概就是两个流程:logfile-flume-kafka-flume-hive(ods-dim-dwd-ads)-BI、mysql和mysql-datax-kafka-flume-hive(ods-dim-dwd-ads)-BI等
实时数仓大概就是:mysql-flume-kafka-flink-flume-kakfa/hive
画图确实挺折磨的,随手开了one note就直接画了,然后画的有点乱就打开了自己之前写的项目博客然后再让面试官对比图和博客上面用visual paradigm让他看,然后他又问了一点细节上的区别啥的。
7. 你这里有涉及到mysql,还有后面提到了数仓数据导出到mysql?想问问你对mysql的负载均衡和高并发操作之类的有了解吗?
提到了一些mysql相关的读写锁相关的,对这块不是那么熟悉于是就通过以前设计自己写数据库引擎相关的经验扯了一下,从mysql表的角度说了一下乐观锁悲观锁、独享锁共享锁,然后撤了一下jdbc相关的连接管理和读取时候用到的一些实际的锁代码。
8. 事务这个概念了解吗?
主要聊了一下事务的一个操作要符合ACID四个原则。(面试官插话:ACID里I是什么)隔离性,然后解释了一下原子性、一致性、隔离性、持久性是什么意思。(当时突然脑子抽了想不起来D是什么,面试官提了一下durability才想起来)
9. 就问这么多吧,现在来一道算法题。
题目不难很简单,一道mid的dp,但是用贪心直接做可以简化不少流程,五分钟a了然后本地测试一下输入输出就给面试官看了,就是后面和面试官说思路的时候有点难解释,然后解释的时候又写了一下dp的状态转移方程,看到方程之后面试官可能觉得我确实是会的然后就说可以了。有点类似lc122买卖股票那道题。
10. 面试结束互相吹嘘了一下然后退了。后续才知道面试官是部门的“年轻有为架构师”。

• 二面 2022.8.13 15:30pm :

    事先以为只排了一场,后续问两个主管大哥才知道打算然后一下午把三面全直接过了。面试官是个看起来挺慈祥的中年人,但是后续才知道他多狠。。。
1. 正常自我介绍加技术栈谈了一下。中途面试官觉得热去开空调去了(
2. 问了一下在校学习的课程有哪些。说了os、计网、数据库之类的,谈了一下一些基础的概念,比如进线程、锁之类的,然后问了一下分页管理和分块管理的区别。
3. 问了一下简历里提到的数仓项目,没有问具体的项目,盯上了写的项目整个流程是在自己部署的三台虚拟机服务器上这个字眼,然后问了一下自己是怎么部署的,然后自己是怎么管理三台服务器的之类的。
解释了一下自己是怎么搭建虚拟机的,一个不投入使用的树根虚拟机,里面安装了大数据相关的组件,还有一些其他的相关技术支持等,比如mysql、tomcat等。然后另外三台虚拟机则是在通过这台根虚拟机拷贝出来的,然后再根据具体组件来写相关的配置文件和启用组件就行了。比如大数据很多组件都是master-slave架构,于是我这里就用hadoop102这台机子当作master,相应的他的内存和磁盘分配都会比另外两台机子配置要高。
4. 我明白你的意思,我就是想知道加入有新的业务需求进来,你每次都要像这样填写一次配置文件吗?
(疑惑,不是很理解这个问题,强行解释了一下)只需要配置hadoop102上master相关的配置文件就可以了,这台根结点虚拟机已经实现配置了很多相关的操作。
5. 我其实是看到了你另外一个项目提到了用到了spring cloud,想问问你对于自动注册配置的理解?
(说实话当时有点烦了,突然就说到其他地方去了也没有暗示,就很奇怪)噢,然后提到了一下用到的是阿里的nacos来作为配置中心,然后在其他微服务模块的代码里面增加添加nacos的配置信息,微服务模块就能注册发现到nacos里面了。
6. 那你虚拟机,假设你有一台新的服务器要加入到这三个服务器里面,那你能不能参考这样的方式呢?
(当时就想吐槽,那你稍微明示一下不行嘛,那我自己玩的项目肯定怎么方便怎么来解决啊)
对于微服务模块的每个模块我可能有使用过这种自动发现然后注册的功能,但是在虚拟机、服务器这个层级还没有这样尝试过,面试官给的这个思路挺好的,有空我试试看(忍气吞声!)
7. 好的,那想问问你这三台服务器之间是怎么进行通信的呢?
服务器之间的通信主要还是看这些大数据组件内部支持和实现的,大部分大数据组件其实内部都是基于RPC通信协议来的,然后可能一些其他的进程会通过http协议来进行通信(提到虚拟机通信当时就想到他可能要问计网了,但是涉及到RPC相关的只是以前看过论文学过一点,没有深究,但是http我可是背过面经的,想稍微扯一下面试的方向)。
8. 好的,那你能不能说一下你对RPC的了解呢?(虽然不是很熟,但是毕竟也学过也基于这个协议写过相关代码,吹吹看吧。。)
呃在我这个项目里面涉及到RPC通信协议的主要有这些,比如hadoop里面客户端想要获取hdfs服务端里面的数据会用到RPC这个协议,此外还有jdbc连接hive也会用到基于RPC协议实现的thrift,除了项目里可能涉及到的,课外了解过谷歌的gRPC相关实现。
9. 能不能再详细的说一下RPC呢?
RPC相比于HTTP少了三次握手的过程,然后客户端是相当于直接调用服务器端暴露的一个接口来,就比如虽然两台机子之间是物理意义上区分的,但是通过RPC协议来调用接口就相当于在自己客户端本地上运行了一段服务器端上的代码。协议更小,效率更加高效。一般在企业内部定制化使用比较多巴拉巴拉啥的。
10. 其实我想问的是RPC底层是基于其他什么实现的?
RPC通信协议可以基于应用层HTTP协议,也可以基于传输层的TCP、UDP协议。(提问,能谈谈具体实现吗)。RPC通信协议主要包括传输协议和序列化协议,传输协议主要是刚刚提到的TCP UDP协议,序列化协议一般是公司内部自定义的(其实是我忘了是啥),RPC协议流程:客户端发送序列化后的消息,server反序列化消息,server处理消息后,再序列化后发送回去,客户端接收到该序列化消息之后反序列化得到最终结果。
11. 嗯对,但其实我想问的是在操作系统层级这些过程是怎么处理的,就是说你能不能站在进程的角度描述一下RPC通信协议的一个过程呢?
(此时我人已经麻了,就不能一直问清除,然后大概指明一下问题是啥嘛。。)呃我对RPC的了解不是那么深入,对于底层进线程是怎么处理RPC协议的确实不太了解,只知道进线程能涉及到的通信方式(估计面试官也看不下去了,四连问RPC,越来越深,然后问了一下通信方式相关的)主要是管道:匿名管道和命名管道的区别,提了一下linux命令里的grep和|操作符,然后问了一下信号量和信号的区别,还有消息队列中消息的格式问题(需要统一格式之类的小问题)。
12. 好的,提问就到这里吧,现在我们来做一道题。(以前题目都是准备好了的,然后发个截图或者展示一下就直接开始做,这个面试管直接当场描述当场出题)
题目描述:每个人都有手机,然后手机里面都会有通话薄,假设你的手机通过某些功能存储了“数以千万计”的电话号码,然后我相匹配出相关的符合条件的号码,比如这有几个号码(列举了几个),然后我想实现这样一个小功能,就是我输入1的时候能给我获取到所有以1开头的电话号码,然后我再输入3现在是13的时候有13的所有电话号码,类比到后面137 138的情况等等,就想让你实现一下这个功能。(有一说一噢,题目本身不难,但是如果你听面试官口述题目再来做真的很容易蒙蔽的)。你有什么其他问题吗?
§ 问题一:数以千万计的含义:这个词在大数据里太常见了,啥sql查询都会提到这个词然后笔试问这些问题都会让你写sql然后优化查询,已经ptsd了,然后问面试官是不是想让我写sql来查询。面试官说:你就正常当一道算法题来写就行了。
§ 问题二:号码存储的时候是有序存储还是无序存储(此时脑子里想的是二分查找来做),面试官说你就当有序处理就行。
问完之后我就直接开始做了,然后面试官直接打断我说你能不能说一下你的思路
§ 思路一:二分查找做,刚刚问了一下号码存储是有序的,那我只要用二分找到这一串号码里面符合输入前缀的号码的左右边界就可以了,处理一下比较时mid和left、right三个指针的大小变化关系就可以了。
面试官说:这样也是可以做的,但是我想问问你还有其他做法吗?
§ 思路二:前缀数,把号码的每一位当作一个树结点存储,然后遍历树来依次向叶子走,如果在中间节点发现符合前缀的号码就获取相关号码就行了,如果中间结点不存在直接输出空就行。
面试官说,嗯,那你就按照你这个思路写吧
前缀树挺容易的,按照字典树那样写就可以了,十分钟的样子写了一个大概的流程,因为没有测试数据所以面试官就让我创建一个列表当输入数据来处理即可。写的时候在存储号码的时候就已经把每个号码匹配到对应节点然后存储在节点的set里面了,所以很容易写过去了。
写完之后讲了一下自己的思路,然后面试官说,你有没有觉得你自己的代码在数据存储的时候有点过于冗余呢,比如1开头的号码,你就要存储11个一样的号码。我说:这样冗余存储能够保证在匹配到最少前缀的时候就可以直接输出结果了,不需要再往更底层的树去找数据了,但是如果担心存储空间不够可以只存储在最后的叶子结点,然后一直往深层遍历,最后回溯一下结果就可以了。面试官没错,思路是对的。然后我问了句需要改吗,我现在有思路了很快能写出来,他说不用了,知道你有这个思路,你面试后自己私底下改一下就行。之后我又和他说,但是面试官,这样的冗余存储其实也有自己的好处,就是比如如果我只匹配138的时候,我不需要再往后面遍历了,如果在极端情况下,138开头的所有号码我都有的话,那我可能需要遍历10^8次结点才能获取所有符合条件的号码,这样时间换取空间不一定值当,如果不是号码题目是其他更长的数据,可能情况会更严重。面试官长噢了一下说你的想法也是对的,然后夸了一下(
13. 面试结束,还有其他想问的嘛,我截图代码的时候可以回答你(手撕后的代码面试官需要截图备份):
面试官,其实课内计网基本不会涉及RPC相关的,一般都是讲HTTP比较多,RPC我是课外因为学分布式相关的比较多,所以也看过论文或者博客知道一点相关的。面试官说了句这样嘛,可能怎么可能不讲之类的话,当时给我搞得一脸懵。。

• 三面:综面  2022.8.13 17:00pm :

    二面面了一个半钟,连负责我的主管都觉得吃惊,然后和我说他去看看二面面试评价什么的,我就直接开始三面了。三面是非技术面,说简单也简单,说不简单也不简单,说错话貌似后果挺严重的。
1. 在校经历:实验室、学生助理、课外生活之类问了一下。
2. 技术栈:遇到不喜欢的项目或者需要你去做不喜欢的事怎么解决之类的,提到了不喜欢AI算法,就是暗示自己不读研不留学(找工作一定要暗示自己没有留学读研的打算。
3. 如何看待网上对菊的各种说法,比如压力大,加班多之类的。
4. 如何看待菊在被外国打压的情况下的环境:风险与机遇并存之类的。
5. 对海外拓展业务的看法。
6. 对base的选择:东莞,离家近等等。。
7. 还有其他想问的嘛?直接过了,少问不该问的避免踩雷((

全部评论

(13) 回帖
加载中...
话题 回帖
历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐