2020年秋招面试经验--持续更新

一. 联发科笔试加面试

MTK是现场宣讲会完成直接笔试,笔试的岗位是嵌入式软件开发。笔试令我比较映像深的几道题目是:

  1. 一个完全二叉树的总共有700个节点,求叶结点有多少个:
    这个和网上一个题目变种而来: 题目:一个具有n个节点的完全二叉树,其叶子节点的个数为多少?

分析:

   设叶子节点个数为n0,度为1的节点个数为n1,度为2的节点个数为n2

   则有 
            n0+n1+n2=n                (1)

   对于二叉树有:

            n0=n2+1                       (2)

   由(1)(2) ==>

            n0=(n+1-n1)/2              (3)

   由完全二叉树的性质可知:n1=0 或 1

总结:

    (a):当n1=0时(即度为1的节点为0个时,此时n为奇数)或者n为奇数时

          n0= (n+1)/2;

    (b):当n1=1时(即度为1的节点为1个时,此时n为偶数)或者n为偶数

         n0= n/2;

  综合(a)(b)可得:

    (结论):一个具有n个节点的完全二叉树,其叶子节点的个数n0为: n/2 向上取整,或者(n+1)/2 向下取整

这题的结论是350个叶子节点。

面试:主要a两道leetcode随机的题目,第一道题目是链表排序,第二道是罗马数转数字。

二. 华为面试

华为面试有三面;一二面是技术面,有两道题。华为喜欢考dp。
第一道是:给一串数字,求这串数字中可以组成三角形的最大周长是什么?
我是直接使用暴力求解的:
直接三层循环:

int findmax(vector<int> num){
	if(num.size()<3)
		return 0;
		int max = 0;
	for(int i=0;i<nums.size();i++){
			for(int j=i+1;j<nums.size();j++){
				for(int k=j+1;k<nums.size();k++){
						if(nums[i]+nums[j] > nums[k] && .. ..)  //两边之和大于第三边  两边之差小于第三边
										if(max< nums[i]+nums[j]+nums[k])
													max = nums[i]+nums[j]+nums[k];
			}
		}
		return max;
	}
}

没有想出比较优化的方法;

第二道题动态规划题目:
最大连续子序列乘积
因为要考虑负数和0这种特殊情况,所有保存最大值的同时也要保存最小值。

int maxProduct(int A[], int n) {
    int maxEnd = A[0];
    int minEnd = A[0];
    int maxResult = A[0];

    for (int i = 1; i < n; ++i)
    {
        int end1 = maxEnd * A[i], end2 = minEnd * A[i];
        maxEnd   = max(max(end1, end2), A[i]); 
        minEnd   = min(min(end1, end2), A[i]);
        maxResult = max(maxResult, maxEnd);
    }
    return maxResult;
}

三 地平线嵌入式面试

一面技术面,主要询问基础知识,主要有嵌入式知识,内存对齐、嵌入式系统上电启动过程、操作系统、一段代码编程二进制文件的过程等等。还有就是项目。

二面技术面,主要询问C/C++基础知识,static的作用,问了一个使用vector<对象>定义的一个数组对象,然后使用memset初始化会出现什么问题,项目的整体流程图,项目的难点和创新点等等。然后手撕一个简单的代码。

三面主管面,主要问项目,问的很细,问项目的深度很有难度,然后挂了。

四 高通面试

就一面 三个面试官。主要是介绍项目,然后根据项目询问问题,因为我的项目涉及到了安卓相关的,问了Binder的实现机制和原理,然后问了多线程同步(互斥锁和信号量有什么区别),加入线程为什么使用join(),做了简单的一个移动n位,把某个字节的位清零。考察英语,主要涉及到英语自我介绍和对话等。最后一个面试官问了我一个问题,我大概是没听懂他题目的意思。意思就说一个表,里面的数是排序的,怎么通过二分查找,查找我给定数 在表的前后位置,但是每次读这个表只能读取一部分。问我怎么设计这个表?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值