求职服务

2023/2024华为笔试机考校招/社招软件工程师岗位考什么?三道编程题C/C++/Python软件开发工程师笔试题(1)

来源:原创 作者:晚风 2023/08/31 17:49:23 1481人看过

华为校招机考的题型:

图片


编程:软件测试工程师,算法,OD岗,三道编程题不限语言【C++,Python,Java】

校招:600分 120分钟,100/200/300

社招:400分 150分钟, 100/100/200

华为的校招和社招编程考试通常覆盖了以下主要领域和知识点:

数据结构与算法:

  • 基本数据结构:数组、链表、栈、队列、哈希表、集合、树、图等。

  • 常见算法:排序(冒泡、选择、插入、快速、归并等)、查找(二分查找、广度优先搜索、深度优先搜索等)、动态规划、贪心算法、回溯法等。

  • 常见问题:字符串操作、链表操作、二叉树遍历、图遍历、最短路径问题、最大子序列问题、最长公共子序列问题、背包问题等。


计算机基础知识:

  • 操作系统:进程、线程、内存管理、文件系统、进程间通信、死锁等。

  • 计算机网络:OSI 七层模型、TCP/IP 协议栈、IP 地址、子网划分、路由协议、HTTP 协议、DNS、网络安全等。

  • 计算机组成原理:数据表示、运算器、控制器、存储器、输入输出设备、指令系统、总线、中断等。


编程语言及编程技巧:

  • 掌握至少一门主流编程语言(如 C、C++、Java、Python 等),了解语言的基本语法、数据类型、控制结构、函数、类等概念。

  • 熟悉常用库和API的使用,例如:STL(C++)、Java 标准库、Python 标准库等。

  • 熟悉编程的基本技巧,例如:调试、代码优化、内存管理、时间复杂度和空间复杂度分析等。


软件工程及项目管理:

  • 软件开发过程、软件开发方法论(如敏捷开发)、需求分析、设计、编码、测试、维护等阶段的知识。

  • 熟悉软件质量保证、软件测试方法、软件配置管理等概念。

  • 了解项目管理的基本原理,如项目规划、进度管理、风险管理、成本管理等。


数据库原理及应用:

  • 熟悉关系型数据库原理,如 MySQL、Oracle、SQL Server 等,了解数据库设计、范式、SQL 语言、事务处理、并发控制等。

  • 了解 NoSQL 数据库(如 MongoDB、Redis 等)的基本概念和应用。

在准备华为编程考试时,可以针对以上知识点进行复习,并通过在线编程平台练习


点主页可以看更多文章,每天一道编程题,分析思路以及解题代码。


下面给大家分享一个题的案例:

给定一个整数数组arr,将这个数组中的值进行解码。

解码规则:将数组中的元素转换成对应的ASCII码,解码后能拼出“csdnn”就视为解码成功(每个元素只能用一次)。解码成功返回1,否则返回0。

说明:数组中的数值均在小写字母之间(97-122),小写’a’的ASCII码是97,小写‘z’的ASCII码值是122。


示例1:

输入:[99,100,101,110,115]

输出:0

示例2:

输入:[99,100,110,101,115,110]

输出:1

二、C代码实现

代码如下:

#include<stdio.h>

int decoding(int* arr, int arrLen) {
   int a = 0, b = 0, c = 0, d = 0, e=0;
int i=0;
for(;i<arrLen;i++){
       if (arr[i] == 99)
           a = 1;
       if (arr[i] == 115)
           b = 1;
       if (arr[i] == 100)
           c = 1;
       if (arr[i] == 110 && d == 1)
           e = 1;
       if (arr[i] == 110)
           d = 1;
   }

   if (a&&b&&c&&d&&e) {
       return 1;
   }
   else {
       return 0;
   }
}

测试示例1:

int main() {
   int arr[5] = {99,100,101,110,115};
   int arrLen = 5;
   int x=decoding(arr, arrLen);
printf("%d",x);

getchar();
return 0;
}

运行结果:
0

测试示例2:

int main() {
   int arr[6] = {99,100,110,101,115,110};
   int arrLen = 6;
   int x=decoding(arr, arrLen);
printf("%d",x);

getchar();
return 0;
}

运行结果:
1

三、C++代码实现

代码如下:

#include<iostream>

using namespace std;

int decoding(int *arr, int arrLen)
{
   int a = 0, b = 0, c = 0, d = 0, e = 0;
   for (int i = 0; i < arrLen; ++i)
   {
       if (arr[i] == 99)
           a = 1;
       if (arr[i] == 115)
           b = 1;
       if (arr[i] == 100)
           c = 1;
       if (arr[i] == 110 && d == 1)
           e = 1;
       if (arr[i] == 110)
           d = 1;
   }
   if (a && b && c && d && e)
       cout << 1 << endl;
   else
       cout << 0 << endl;
   return 0;
}

测试示例2:

int main() {
   int arr[6] = { 99,100,110,101,115,110 };
   int arrLen = 6;
   decoding(arr, arrLen);

   return 0;

}

运行结果:

1

四、Python代码实现:

def decode(arr):
   # 计算数组中每个元素的出现次数
   count = {}
   for num in arr:
       if num in count:
           count[num] += 1
       else:
           count[num] = 1

   # 检查“csdnn”中的每个字符的ASCII码是否在哈希表中,并且出现次数正确
   target = "csdnn"
   for ch in target:
       ascii_code = ord(ch)
       if ascii_code not in count or count[ascii_code] == 0:
           return 0
       count[ascii_code] -= 1

   return 1

# 测试示例
arr1 = [99, 100, 101, 110, 115]
arr2 = [99, 100, 110, 101, 115, 110]
print(decode(arr1))  # 输出:0
print(decode(arr2))  # 输出:1

这个解决方案的时间复杂度是 O(n),其中 n 是数组的长度。

这个问题用到的知识点有

  1. 哈希表:用来存储数组中每个元素的出现次数。

  2. 字符串:我们需要检查目标字符串 "csdnn" 中的每个字符。

  3. ASCII 码:我们需要将目标字符串中的每个字符转换为它们对应的 ASCII 码,以便在哈希表中查找。

解题思路:

  1. 遍历输入数组,使用哈希表(Python中的字典)计算每个元素的出现次数。

  2. 遍历目标字符串 "csdnn",将每个字符转换为对应的 ASCII 码。

  3. 检查当前字符的 ASCII 码是否在哈希表中,并且出现次数大于 0。如果不满足这个条件,则返回 0。

  4. 如果当前字符的 ASCII 码在哈希表中,将其出现次数减 1。

  5. 如果所有字符的检查都通过,返回 1。

以下是我们邀请的华为导师MR.Zhangyu给大家的一些建议:

建立良好的编程基础:掌握至少一门主流编程语言,熟悉基本语法、数据类型、控制结构、函数和类等概念。同时熟悉常用的库和API,提高编程效率。
系统地学习数据结构和算法:学习常见的数据结构(如数组、链表、栈、队列、哈希表等)和算法(如排序、查找、动态规划、贪心算法等),并掌握它们的应用场景。理解时间复杂度和空间复杂度分析,优化代码性能。
多做练习:通过在线编程平台(如 LeetCode、牛客网等)做题,提高解题速度和技巧。针对华为的题目特点,关注一些典型问题和模式。
熟悉面试题库:参考华为历年编程题,了解题目类型和难度,找到自己的薄弱环节进行针对性的学习。
学会调试和优化:掌握使用调试工具排查问题的方法,学会分析代码性能,优化算法和内存管理。
加强计算机基础知识:复习操作系统、计算机网络、计算机组成原理等课程,强化对基本概念的理解。
模拟考试环境:在实际考试前,模拟考试环境,限时完成编程题,提高自己在压力下的应变能力。
保持良好的心态:面对编程考试,保持积极的心态,相信自己的实力,克服紧张情绪,发挥自己的最佳水平。
合理安排时间:在准备过程中,合理安排学习时间,避免临时抱佛脚,确保充足的复习时间。
交流与分享:和同学、朋友一起学习和讨论问题,分享解题经验,共同进步。

最后,祝你在机考中取得好成绩!华为10年经验多次OT留学生博士


这边推荐大家一个最新测试题库获取渠道:

淘宝店铺:皮皮网教材 和 学霸offer

在进行华为笔试测评时,通常只有一次机会。

如果测评未通过,不论是在面试前还是面试后,都会终止面试流程测评机会。

------------------------------------------------------------------------

华子辅导微信:MAX88Z 

华为专业老师,团队均5-10年经验

社招 校招 全岗位 编程 机考 面试 均可辅导

内推保offer全球可预定

(备用微信:offer1889)

【代做100%包过,集团级专业机构老师参与,承诺不过全额退费!!!】图片

图片

图片

图片

图片

图片

图片


图片