C/C++笔试和面试过程中难免会要手撕代码,那么手撕代码,面试官或者看试卷的人一般会看哪些点呢?我列举了一些我认为的点(码农适用):

  • 算法思想是否正确
  • 代码逻辑是否清晰明了
  • 代码风格是否美观简洁
  • 注释和变量命名
  • STL/C++11
  • 不要雷同!

算法正确这是最主要的点,如果算法都不对,就是直接0分了;代码逻辑要清晰明了,考虑问题要全面,逻辑一混乱,基本就是60分左右了;如果代码风格很丑,基本是不会看的,又或者很简单的一个题,写了一百多行代码,这也是不会看的;如果算法不是常规的算法,建议最好写出注释,不然有些面试官看不懂就直接GG了,变量命名一定要有含义,不要通篇都是a, aa, b这种;STL/C++11, 这可以表现你的知识面的宽度,能用上肯定是加分的;最后一点,不要雷同!不要雷同!不要雷同!很多人都是拿来主义,网上一搜,Ctrl + C, Ctrl + V完事,很多博客上的代码不一定正确,且你会这么复制大法,别人也会,这么多试卷,那就有很多雷同的,这种情况是直接0分,所以说复制也要有态度。

手撕代码考察的就是上面的几点,其实手撕代码和OJ那种考察的侧重点不一样,OJ那种是结果导向,你的结果是正确的,我管你怎么来的,考察算法较多,这种OJ的题一般会比手撕代码难一些,而手撕代码考察的是的工程能力,因为招你进来做C/C++项目的,你给写了一个这么挫的代码,改都难改,所以手撕代码考察实践较多,做码农就要有做码农的觉悟,且只要你满足上面几点,即使你的代码有一些细节错误,也会给满分。

且,这种手撕代码的题一般都是要你补全一个函数,而且大部分会和字符串相关,因为字符串类的题目最考细节了,难度不大,但是能看出一个人的编程素养。

举个例子,实现一个函数,这个函数的作用是把IPv4类的点分式地址转化成一个无符号的32位整数,如果转化不了,请抛出异常。

不难吧,但是代码怎么写才是最简洁最高效的呢?先分析下这个过程该怎么做。

  • 把点分式的IPv4地址的四个整数字符串提取出来,并判断输入是否合法
  • 把这四个字符串转化成整数,并判断输入是否合法
  • 拼接这四个整数

就是这三个步骤,用C++代码实现出来,补全这个函数ConvertIPv4ToUint32

std::uint32_t ConvertIPv4ToUint32(const std::string & address)
{static const int NUM = 4;int digit[NUM];char skip[1 << 10];int num = std::sscanf(address.c_str(), "%d.%d.%d.%d%s", &digit[0], &digit[1], &digit[2], &digit[3], skip);if (NUM == num) {if (std::all_of(digit, digit + NUM, [] (int x) { return x >= 0 && x < 256; })) {uint32_t ret = 0;for (int i = 0; i < NUM; ret |= digit[i] << (8 * i), ++i) {}return ret;}elsethrow std::invalid_argument("out of range");} elsethrow std::invalid_argument("paste error");
}

上面这个代码还是比较简洁的,用到的几个点如下:

  • sscanf的运用
  • L a m b d a Lambda Lambda表达式
  • std::all_of
  • std::invalid_argument异常

这里提供一些测试用例,如果这些用例没问题,那就没什么问题了。

std::vector<std::string> arr
{"1.2.3.4","255.255.255.255","3 3 3 3","256.255.255.255","x.x.x.x","0.-2.2.2","0.0x3.2.2","0.02.2.2","0.02.2.2.2","0.02.2.2a","ab.0.0.0.0","0.123..0"
};   for (auto & ele : arr) {std::cout << ele << std::endl;try {printf("%x\n", ConvertIPv4ToUint32(ele));} catch (const std::invalid_argument & e) {std::cerr << e.what() << std::endl;}
}

总结一下,没事的时候还是多动动手写写代码,多了解一些新的知识。Offer自然就到手了。

C/C++笔试面试手撕代码注意事项相关推荐

  1. 2023华为OD面试手撕代码真题

    很多小伙伴后台私信我,让我出一些面试中的手撕代码题. 一般面试的时候每一轮技术面都会出一到两个手撕代码题,这些题的特点就是,非常短小,易于理解.不可能会再出阅读理解一样的机试题的.但是这些题目也非常注 ...

  2. 蛇形打印数组(某宝典公司面试手撕代码题)

    背景杂谈 不知道为什么,可能脑袋一下放空了,一不小心就想到了大约2年前,在某个知名的宝典公司面试中,遇到了一道手撕代码题,和多年前的google的那道螺旋遍历数据有异曲同工之妙.现脑洞大开,想写下与大 ...

  3. 前端date format_前端面试-手撕代码篇

    前言 在前端面试有一个非常重要的环节,也是面试者最担心的一个环节.对"手撕代码"的考察需要面试者平时总结和积累(临时抱佛脚是不好使的),在这里笔者就自己如何攻破"手撕代码 ...

  4. 2023华为OD面试手撕代码经验分享

    我们先来看下这个同学的面试经历吧,非常有借鉴的意义. [22届考研渣渣的od求职之旅,推荐一下两个人,德科hr和牛客的老哥] "*********",hr给了机会吧,一开始我都没想 ...

  5. FPGA秋招面试手撕代码20+

    目录 前言 1.序列检测器 (1)三段式状态机实现方式 (2)移位寄存器实现方式 2.序列生成器 (1)移位寄存器方式实现 (2)计数器方式实现 (3)三段式状态机方式实现 3.分频 (1)偶数分频 ...

  6. 华为面试手撕代码 leetcode 上重点题 附C++解法

    剑指18 删除链表的节点 ListNode* deleteNode(ListNode* head, int val) {if(!head) return head;if(head->val == ...

  7. 数字IC面试手撕代码(一)

    1.最近看别人有面试说遇到这样一个问题.用状态机实现类似序列检测的题目:生成01011011101111-依次类推.针对这个问题,我设计如下的三段式状态机代码,用了4个状态,2个计数器. 设计之初,本 ...

  8. 算法面试手撕代码高频题汇集

    目录 一.字符串与数组 二.链表专题 三.栈与队列 四.树 五.图与回溯

  9. 数字IC手撕代码-兆易创新笔试真题

    前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...

最新文章

  1. snabbdom源码解析(七) 事件处理
  2. jq校验输入框值变化时_谈谈自己对CRC校验的理解
  3. JeecgBoot与MongoDB集成实战文档
  4. LA 3695 Distant Galaxy
  5. 计算机网络实验(router_sim)工具
  6. 面向对象进阶 各种可以自定制的内置方法
  7. java web自动化测试_Python和Java语言,哪个更适合做自动化测试?
  8. phpQuery中文手册(更新中)
  9. solidity msg.sender.transfer发送给谁
  10. Python输出菱形图案
  11. android短信显示内容,Android获取手机短信SMS收件箱内容
  12. 我的世界服务器商店系统指令,我的世界自动商店指令 | 手游网游页游攻略大全...
  13. 永久删除的文件如何恢复?
  14. 配置SSH服务远程连接空闲超时退出时间(包括SSH无法登录、登录缓慢)
  15. CUDA/cudnn/CUDA Toolkit/NVCC区别简介
  16. Lucas Kanade 光流法(来自wiki 百科)
  17. 腾讯、阿里、华为等各大互联网公司年终奖到底发了多少?
  18. 天梯赛 L1-079 天梯赛的善良(c语言)
  19. DCA1000EVM使用说明
  20. A_A01_001 KEIL4-KEIL5软件安装

热门文章

  1. debian时间同步_如何在Debian 10上设置时间同步
  2. selenium之select
  3. Excel 2019 插入图片缩放后模糊解决办法
  4. python音乐推荐
  5. stp实验心得_STP实验报告
  6. 超详细neo4j安装教程
  7. 基于android的数码交流社区
  8. 基于python pyvisa模块控制GPIB设备识别不到设备资源号问题
  9. python opencv教程pdf_机器学习 使用OpenCV和Python进行智能图像处理.pdf
  10. 5G视频营销时代,10种提高视频编辑技能的工具神器