进入六月,秋招已经近在咫尺了。因为没有投实习,所以早早地准备提前批了。

VIVO这个提前批算是相当早了,据称不影响秋招,所以先投一投涨涨经验。

第一个工作就是要写简历,建议在学长的模版上改,突出项目经验与专业技能。因为有内推码加上学校还可以,所以投的志愿很顺利的进入笔试了,第一个岗位是嵌入式。(牛客网上有985学校没填内推被刷的,可见有内推的话还是填一下比较好)


笔试时间6.4 

笔试之前,要调试好chrome浏览器,摄像头,以及确保网络好使。本来以为是选择题与计算题编程题结合,没想到是三道编程题,一个小时。

题目描述:

1、A、B两个数组,要求输出A中存在而B中不存在的元素。

2、一个单向链表,输入m,n,要求在第m和第n区间之内的元素倒序存储并输出此链表。

3、有n种礼品,每个礼品对应一个热度值,总金额为k,每个礼品只能买一次,如何购买可以使得所有礼品的总热度值最高。

注意事项:

vivo是给出部分代码,让你完成空着的部分,因此首先就是要搞清楚到底一道题有几个部分需要补充,不止功能函数,主函数也有可能缺失。

第一题相对容易:

rlistb = []
res = []
for i in b:
    listb.append(i)
for j in a:
    if j not in listb:
    res.append(j)
return res
    

第二题,涉及到新建链表与反转链表操作:

新建链表示例: https://blog.csdn.net/hotpotbo/article/details/78390342

#! conding:utf-8
__author__ = "hotpot"
__date__ = "2017/10/30 9:20"

class Linknode(object):
    def __init__(self,val=None,next=None):
        self.val = val
        self.next = next

def list_2_linknode(array):
    tem_node = Linknode()
    node = Linknode()
    for i  in array:
        #记得是判定val是否有值,并且用一个node记住头节点,然后返回的是头节点          
        if not tem_node.val:
            tem_node.val =i
            node = tem_node
        else:
            tem_node.next = Linknode(i)
            tem_node = tem_node.next
    return node

if __name__ == '__main__':
    array = [1,2,3,4,5]
    print(list_2_linknode(array).next.next.val)#

本题中的linknode没有输入,因此要改成如下形式。

class Linknode(object):
    def __init__(self):
        self.val = None
        self.next = None
def list_2_linknode(array):
    tem_node = Linknode()
    node = Linknode()
    for i  in array:
        #记得是判定val是否有值,并且用一个node记住头节点,然后返回的是头节点          
        if not tem_node.val:
            tem_node.val =i
            node = tem_node
        else:
            tem_node.next = Linknode()
            tem_node.next.val = i
            tem_node = tem_node.next
    return node

对于反转链表,可以利用数组反转,代码如下:

class Linknode(object):
    def __init__(self):
        self.val = None
        self.next = None
def list_2_linknode(array):
    tem_node = Linknode()
    node = Linknode()
    for i  in array:
        #记得是判定val是否有值,并且用一个node记住头节点,然后返回的是头节点          
        if not tem_node.val:
            tem_node.val =i
            node = tem_node
        else:
            tem_node.next = Linknode()
            tem_node.next.val = i
            tem_node = tem_node.next
    return node
def printnode(link):
    p1 = link
    reslink = []
    while p1:
        reslink.append(p1.val)
        p1 = p1.next
    return reslink
def reversenode(link,m,n):
    pass 
     
array = [1,2,3,4,5,6]
m = 2
n = 6
#linka = list_2_linknode(array)
reversearray = array[m-1:n]
reversearray.reverse()

array = array[0:m-1] + reversearray 
linka = list_2_linknode(array)
print(printnode(linka))

用链表反转的话,代码如下:

        if not pHead:
            return None
        last = None
        p1 = pHead
        while p1:
            pnext = p1.next
            p1.next = last
            last = p1
            p1 = pnext
            
        return last

在本题中,需要反转后再链接起来:

改写如下:

def reversenode(link,m,n):
    first = link
    count = 0
    for i in range(m-2):
        link = link.next
        count +=1
    linkpre = link #要反转的前一个
    link = link.next
    linkm = link  #反转的第一个,反转后的最后一个
    last = None 
    p1 = link
    while p1 and count< n-1:
        nextp1 = p1.next
        p1.next = last
        last = p1
        p1 = nextp1
        count +=1
    linkm.next = p1  #反转后最后一个指向后半截第一个
    linkpre.next = last #要反转的前一个指向反转后第一个
    return first

比较麻烦,在纸上画一下比较清晰

第三题是背包问题,需要用到动态规划,以后博客专题再讲。

总之笔试只过了一道题,第二题看错题意直接gg,第三题没时间看了...


6.5 更新

查询官网状态,嵌入式岗位进入面试了

等待后续更新...


更新,面试时间定在了6.11号,那天正好考系统辨识与自适应控制,问了下不能网面,只能拒了。截图纪念下...

总之还是感谢vivo能给我面试的机会,秋招再见!


更新,一个同学去面了,大概问的是C++,多线程,另外就是唠项目,感觉答得还行但是没进HR面..感觉这次还是挺严格的...