当前位置: 首页 > news >正文

大厂技术面试中的手撕代码应该如何准备?

文章目录

  • 手撕代码是什么
  • 为什么要考察手撕代码
  • 如何准备手撕代码
  • 手撕代码注意事项
  • 华为OD算法/大厂面试高频题算法练习冲刺训练

不管是秋招还是社招,互联网大厂的技术面试中的手撕代码这一部分总是绕不过去的一关。不只是后端开发和算法岗,现在就连前端、运维、测试、数据等岗位也要考手撕代码了。

咱们从是什么、为什么、怎么做来分析这个问题。

手撕代码是什么

手撕代码其实是广大求职者的一种略带戏谑的叫法,指的是在技术面试过程中,面试官给候选人出一道题目(大部分情况下是算法题,少数情况会出SQL题),让候选人在规定的时间内将题目完成。

之所以叫做手撕,大概是因为在口罩事件之前,一些线下面试会让候选人在一张白纸上直接写出代码/伪代码,而不会直接在电脑上运行程序。

由于目前大部分的技术面试都在线上进行,手撕代码的形式也就变成了在IDE或者在线编译网站中完成代码。

为什么要考察手撕代码

很多同学对手撕代码叫苦不迭,工作又不是做题,为什么偏偏要在面试中考察这样一个看似和未来业务关联不大的内容呢?

如果你吐槽数据结构与算法在未来用不上,那难道项目、八股就用得上吗?难道面试官会不清楚这一点吗?

实际上,相比起笔试可以代考、项目可以编造、八股可以硬背,面试的手撕代码部分反而是最公平、最能考察候选人水平的方式。

  1. 考察候选人的coding能力。假设候选人笔试分数很高,但是面试的手撕写得磕磕绊绊,连一些最基础的语法都写不好,那显然前面的笔试就很有可能是作假的,自然也就不能通过面试。

  2. 考察候选人在短时间、高压下解决问题的能力。面试通常是非常紧张的,但如果在这种高压状态下也可以很好地完成任务,说明候选人能够胜任具有挑战性的、紧急性的工作。

  3. 考察候选人抽象的逻辑思维能力。算法题通常而言都比较抽象,能够较好地解决算法题的候选人,通常具有较好的逻辑思维。

  4. 考察候选人的阅读理解、提炼信息能力。除了LeetCode上常规的经典题以外,现在也慢慢出现了一些题干较长、描述较复杂的题目,这需要候选人沉下心提炼关键信息,把已有信息转化为简单问题,再转换为代码语言。

  5. 考察候选人的沟通交流、语言表达能力。这一点其实很多人会忽视。在做完手撕代码后,一般都需要向面试官讲解你的思路和代码,如果能把一个相对复杂的算法(比如dp)讲清楚,那么说明候选人语言表达能力是过关的,在未来也能够胜任团队协作的工作。

  6. 考察候选人是否具有持之以恒、坚持不懈的学习决心。算法学习非一日之功,一般来说都需要经过1-2个月的系统学习和刷题。能够把常见算法学好的同学,说明都是有毅力有决心之人。

另外,从用人单位降本增效的角度来看,与其让更多的面试官花时间经历深挖简历,**还不如一场算法笔试、一次手撕代码对人才的筛选力度大,**这对企业来说是更加节约成本的招聘方式。

如何准备手撕代码

手撕代码和笔试是可以一起准备的,因为本质上考察的都是数据结构与算法知识。

算法题的考察实际上是一种半标准化考试:虽然没有考试大纲,但常考的知识点就是那些,题目通常以变换题干或结合不同知识点的方式来考察候选人能力。

各个知识点的难度可以大致用以下表格划分

难度知识点
入门数组、字符串、链表、排序
简单栈、队列、哈希表、双指针、贪心
中等二叉树、堆、单调栈、滑窗、二分、位运算
困难DP、DFS、BFS、回溯、并查集、前缀树

上述表格只是一个非常粗糙的划分,需要循序渐进地进行准备和刷题。如果暂时无法自己想到解题思路,则可以先看答案,模仿他人代码,过段时间(比如一周)之后再重新尝试自己实现代码。

如果时间充裕且自我总结的能力强,那么完全可以自学网上的免费内容(比如代码随想录等),注意刷题过程中要做好每一个知识点的归纳。

如果时间紧张或者缺乏自驱力,那么找一个靠谱的算法老师或者参加算法培训,让有经验的人带着你一起学习,能够会得到事半功倍的效果。

另外,手撕代码和秋招笔试最大的不同在于讲这个动作。所以还得有意识地培养自己逐行讲解代码,讲解思路的能力。

这个其实有点像费曼学习法的过程:如果你能够把一道题目给其他人讲懂,那么说明你自己一定是真正学会了。

手撕代码注意事项

假设你已经把算法学得相对透彻,那么在技术面试的具体过程中,我们在一场手撕代码中向面试官展示出自己的水平呢?

  1. **仔细读题。**把题目理解正确毋庸置疑是非常重要的。有一些描述的细微区别,比如数字范围是整数/正整数,子序列是连续/不连续,字符串包含/不包含数字,数组已排序/不排序等等,都有可能影响整个题目的代码,甚至使用完全不同的算法。尤其在遇到题干费解的题目时,在正式作答之前一定要向面试官再三确认题目是否理解正确。

  2. 做好注释。这不是说在写代码的过程中一定要加上注释,而是为了保证后续的讲解能够更加流畅,可以在适当的位置加上一些简单注释。比如dp问题,那么可以加上dp数组的含义、动态转移方程、dp数组的初始化这三个关键点相关的注释,这既是写给面试官看,也是写给自己看的。当然,如果你的能力强到可以一边写一遍讲解代码,那是最好不过的了。另外,也要尽可能地也保持良好的代码规范,比如" = "前后加上空格,变量名命名清晰等等。

  3. 条理清晰。完成题目之后,面试官通常而言会要求你讲解代码或者算法,那么我们可以使用总-分-总的形式来进行讲解。

    1. **总:**代码用了什么算法?为什么可以使用这种算法?时间复杂度和空间复杂度分别是多少?
    2. **分:**按行或按代码块来解释代码。关键的变量在哪个位置发生了变化?用到哪些API?程序在运行过程中是如何一步步得到答案的?
    3. 总(这一点不是必须的):除了代码所示的算法(比如用了DFS),还有哪些可能的算法(那么BFS可能也是可以做的)?其优缺点是什么?
  4. **虚心请教。**如果题目写不出来,或者完全没有思路,可以向面试官求助,虚心请教本题思路是什么?有什么建议?一般而言面试官都会给你一些点拨。如果在提示下能够较好地完成题目、写出正确的代码,也会给面试官留下不错的印象。

另外,手撕代码和笔试略有不同的地方在于,更大概率会考察经典题,主要以LeetCode中的简单题和中等题为主,而且考察种子题的概率更大。所以一定要多加练习经典题型。


华为OD算法/大厂面试高频题算法练习冲刺训练

  • 华为OD算法/大厂面试高频题算法冲刺训练目前开始常态化报名!目前已服务100+同学成功上岸!

  • 课程讲师为全网50w+粉丝编程博主@吴师兄学算法 以及小红书头部编程博主@闭着眼睛学数理化

  • 每期人数维持在20人内,保证能够最大限度地满足到每一个同学的需求,达到和1v1同样的学习效果!

  • 60+天陪伴式学习,40+直播课时,300+动画图解视频,300+LeetCode经典题,200+华为OD真题/大厂真题,还有简历修改、模拟面试、专属HR对接将为你解锁

  • 可上全网独家的欧弟OJ系统练习华子OD、大厂真题

  • 可查看链接 大厂真题汇总 & OD真题汇总(持续更新)

  • 绿色聊天软件戳 od1336了解更多

相关文章:

大厂技术面试中的手撕代码应该如何准备?

文章目录 手撕代码是什么为什么要考察手撕代码如何准备手撕代码手撕代码注意事项华为OD算法/大厂面试高频题算法练习冲刺训练 不管是秋招还是社招,互联网大厂的技术面试中的手撕代码这一部分总是绕不过去的一关。不只是后端开发和算法岗,现在就连前端、运…...

阿里影业+大麦,开启大文娱新纪元?

被“精心呵护”长达十年后,阿里大文娱在今年终于踏上了关键节点。 3月份,阿里“16N”组织大变革后,大文娱集团独自上路。8月,“分家”后的第一份财报显示,阿里大文娱集团成功大幅扭亏,实现了首次季度经调整…...

springboot整合mybatis入门程序

1.准备工作(创建springboot工程、数据库表user、实体类User) 创建数据表: create table user(id int unsigned primary key auto_increment comment ID,name varchar(100) comment 姓名,age tinyint unsigned comment 年龄,gender tinyint unsigned comment 性别, 1…...

【BI看板】Superset2.0+图表二次开发初探

Superset图表功能也很丰富了,但一些个性化的定制需求就需要二次开发了。网上二开的superset版本大多是0.xxx版本的或1.5xxx版本,本次用的是2.xxx。 源码相关说明 源码目录 superset-2.0\superset-frontend\plugins\plugin-chart-echarts Yeoman 生成器 …...

微服务学习--1入门

写在前面: 最近摆了几天,现在重新开始学习。《本文没啥用》。 文章目录 概念概括优劣势特征 SpringCloud 概念 概括 微服务技术是分布式架构的一种,因为一个机器的能力有限,需要集群来进行同时解决,但是分布式也就…...

docker系列6:docker安装redis

传送门 docker系列1:docker安装 docker系列2:阿里云镜像加速器 docker系列3:docker镜像基本命令 docker系列4:docker容器基本命令 docker系列5:docker安装nginx Docker安装redis 通过前面4节,对docke…...

计算机网络(三):数据链路层

参考引用 计算机网络微课堂-湖科大教书匠计算机网络(第7版)-谢希仁 1. 数据链路层概述 1.1 数据链路层在网络体系结构中所处的地位 链路 (Link) 就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点 数据链路 (Data Link)…...

【计算机组成 课程笔记】7.2 DRAM和SRAM

课程链接: 计算机组成_北京大学_中国大学MOOC(慕课) 7 - 2 - 702-DRAM和SRAM(13-22--)_哔哩哔哩_bilibili 从【计算机组成 课程笔记】7.1 存储层次结构概况_Elaine_Bao的博客-CSDN博客中,我们了解到:SRAM比较快&#x…...

1802_在Linux系统上开发ARM单机片机嵌入式软件

全部学习汇总: GreyZhang/little_bits_of_linux: My notes on the trip of learning linux. (github.com) 1. 在Linux上也有嵌入式的开发环境,或许还有很多。不过,我现在接触到的大部分还是Windows居多。这一份文件介绍的是一个mbed platform…...

【计算机网络-自顶向下方法】应用层(HTTP、FTP)

目录 1. Principles of network applications创建一个网络应用1.1 网络应用架构1.1.1 客户-服务器架构1.1.2 P2P架构1.1.3 两种架构的比较 1.2 不同终端上的进程通信1.3 应用需要什么样的传输服务1.4 因特网能够提供的传输服务1.5 应用层协议1.6 小结 2. Web and HTTPWeb应用画…...

CSS文本超出显示小数点

目录 1、单行文本溢出 2、多行文本溢出 1、基于高度截断 2、基于行数截断 1、单行文本溢出 如果解决文本溢出显示省略号,需要满足的三个条件: 先强制一行内显示文本 white-space:nowrap;/*默认normal 自动换行*/ 超出的文本隐藏起来。 overflow:…...

怎么把图片压缩小一点?4个简单的压缩办法

怎么把图片压缩小一点?因为图片太大而带来的不良影响可说是非常的多,例如因为图片体积太大导致电脑中的存储空间越来越小,使得电脑使用起来越来越慢;当我们打开一张体积非常大的图片时无法开,甚至一度让电脑卡死&#…...

react嵌套路由

react嵌套页面 先从路由身上导出 import { HashRouter, Routes, Route, Navigate } from react-router-dom; //引入页面; import Home from ./view/Home; import About from ./view/About; import Integrated from ./view/Integrated; import Sidebar from ./vie…...

代码随想录 单调栈 Ⅰ

739. 每日温度 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替 思路&#…...

C++返回引用

在本文中&#xff0c;您将学习如何在函数中通过引用返回值&#xff0c;以及如何在程序中有效地使用它。 在C 编程中&#xff0c;不仅可以通过引用将值传递给函数&#xff0c;还可以通过引用返回值。 示例&#xff1a;通过引用返回 #include <iostream> int c; int add…...

010:连续跌3天,同时这三天收盘价都在20日均线下,第四天上涨的概率--以京泉华为例

对于《连续跌三天&#xff0c;压第四天上涨的盈利计算》&#xff0c;我们可以继续优化这个策略&#xff0c;增加条件&#xff1a;同时三天都收盘在20日均线下。 因为我们上一篇《获取20日均线数据到excel表中》获得了20日均线数据&#xff0c;我们可以利用均线数据来编写新的脚…...

MATLAB与Python:优势与挑战

本文旨在探讨MATLAB与Python在特定领域内的使用情况&#xff0c;并分析两者之间的优势和挑战。 MATLAB和Python都是流行的编程语言&#xff0c;广泛应用于科学计算、数据分析和机器学习等领域。在某些领域&#xff0c;如航空航天工程、自动化和电子工程嵌入式系统开发等&#…...

CSP-J第二轮试题-2019年-1、2题

文章目录 参考&#xff1a;总结 [CSP-J2019] 数字游戏题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示答案答案2 [CSP-J 2019] 公交换乘题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示…...

深入理解 python 虚拟机:原来虚拟机是这么实现闭包的

深入理解 python 虚拟机&#xff1a;原来虚拟机是这么实现闭包的 在本篇文章当中主要从虚拟机层面讨论函数闭包是如何实现的&#xff0c;当能够从设计者的层面去理解闭包就再也不用死记硬背一些闭包的概念了&#xff0c;因为如果你理解闭包的设计原理之后&#xff0c;这些都是…...

【数据结构-哈希表 一】【原地哈希】:缺失的第一个正整数

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【原地哈希】&#xff0c;使用【数组】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

Android写一个捕获全局异常的工具类

项目开发和实际运行过程中难免会遇到异常发生&#xff0c;系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler&#xff0c;它是Thread的子类&#xff08;就是package java.lang;里线程的Thread&#xff09;。本文将利用它将设备信息、报错信息以及错误的发生时间都…...

[特殊字符] 手撸 Redis 互斥锁那些坑

&#x1f4d6; 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作&#xff0c;想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁&#xff0c;也顺便跟 Redisson 的 RLock 机制对比了下&#xff0c;记录一波&#xff0c;别踩我踩过…...