2020-03 华为校招CloudBU&AI两轮技术面试

网络远程面试,开了摄像头,见到了亲切的戴着口罩的面试官hhh

早上十点开始面试,面了两轮技术面,到十二点十分结束,等待下午最后一轮的主管面

流程

两轮技术面的流程差不多,都是自我介绍+基础知识+算法编写

  1. 自我介绍
  2. 介绍自己的项目,科研经历和实习经历,重点项目面试官还是很喜欢问的
  3. 问技术问题:进程线程,分页分段,java函数式编程,tcp/udp都是一些非常基础的问题
  4. 现场编码

算法编写题目

  • 编码过程面试官也不催,就是看我安安静静地写,编程语言也没限制,用自己熟悉的即可,记得提前配置环境

  • 第一轮技术面是实现LRU置换算法,面试官给了题目和要求,还很认真的解释了要求,但是忘了截图了。。具体我的实现是这个样子,大概十五分钟

class LRUcache:
    def __init__(self,length = 10):
        self.dic = {}
        self.keys_queue = []
        self.max_length = length

    def put(self,key = None,value = None):
        if key is None or value is None:
            raise ValueError("key or value cannot be None")
        self.dic[key] = value
        self.update_key(key)

    def get(self,key = None):
        if key is None:
            raise ValueError("Error: key cannot be none")
        if key not in self.dic.keys():
            print("Warning: key",key ," cannot be found!")
        self.update_key(key)
        return self.dic[key]

    def update_key(self,key):
        if key in self.keys_queue:
            self.update_key(key)
        else:
            self.keys_queue.insert(0, key)
        if len(self.keys_queue) > self.max_length:
            self.keys_queue.pop(len(self.keys_queue) - 1)

    def move_head(self,key):
        self.keys_queue.pop(self.keys_queue.index(key))
        self.keys_queue.insert(0,key)


if __name__ == "__main__":
    lru = LRUcache(length=2)
    lru.put(1,10)
    print(lru.keys_queue)
    lru.put(2,20)
    print(lru.keys_queue)
    print(lru.get(1))
    print(lru.get(2))
    print(lru.keys_queue)
    lru.put(3,30)
    print(lru.keys_queue)

测试用例是自己想的,面试官也会随机往上边加

  • 第二轮面试是实现字符串内类似消消乐的算法(三个以上相同的字符抵消),比上一道题简单一丢丢,花了十分钟搞定:
class StringCombiner:
    def __init__(self,init_string = "abbbaaacd"):
        self.init_string = init_string
        self.init_string += "@"
        self.accumulate_length = 2

    def combine_boom(self):
        while True:
            start,end = self.lookup()
            if(start == -1 and end == -1):
                break
            self.remove_string(start,end)
        self.init_string = self.init_string[:-1]

    def lookup(self):
        accumulate = 0
        current_letter = None
        for i in range(len(self.init_string)):
            if(current_letter is None):
                current_letter = self.init_string[i]
            else:
                if(current_letter == self.init_string[i]):
                    accumulate += 1
                else:
                    if (accumulate >= self.accumulate_length):
                        return i - 1 - accumulate, i - 1
                    current_letter = self.init_string[i]
                    accumulate = 0
        return -1,-1

    def remove_string(self,start,end):
        self.init_string = self.init_string[:start]+self.init_string[end+1:]

if __name__ == "__main__":
    sc = StringCombiner(init_string="abbbaaacd")
    sc.combine_boom()
    print(sc.init_string)

    sc = StringCombiner(init_string="bbbbbbbbaaacdeee")
    sc.combine_boom()
    print(sc.init_string)
  • 面试给人的印象就是面试官非常有耐心,而且对代码质量要求比较高。就比如我在第一道题里边的update_key, move_head两个函数没有标记成私有,面试官就耐心的指出来了。
  • 包括ide自动指出来的不规范的地方也尽量改过来,这样可以给面试官一个良好的印象。

不得不说华为面试安排的还是非常井井有条的

最后祝愿大家都能顺顺利利的拿到理想的offer~

你可能感兴趣的:(找工作)