大厂技术面试中的手撕代码应该如何准备?
文章目录
- 手撕代码是什么
- 为什么要考察手撕代码
- 如何准备手撕代码
- 手撕代码注意事项
- 华为OD算法/大厂面试高频题算法练习冲刺训练
不管是秋招还是社招,互联网大厂的技术面试中的手撕代码这一部分总是绕不过去的一关。不只是后端开发和算法岗,现在就连前端、运维、测试、数据等岗位也要考手撕代码了。
咱们从是什么、为什么、怎么做来分析这个问题。
手撕代码是什么
手撕代码其实是广大求职者的一种略带戏谑的叫法,指的是在技术面试过程中,面试官给候选人出一道题目(大部分情况下是算法题,少数情况会出SQL题),让候选人在规定的时间内将题目完成。
之所以叫做手撕,大概是因为在口罩事件之前,一些线下面试会让候选人在一张白纸上直接写出代码/伪代码,而不会直接在电脑上运行程序。
由于目前大部分的技术面试都在线上进行,手撕代码的形式也就变成了在IDE或者在线编译网站中完成代码。
为什么要考察手撕代码
很多同学对手撕代码叫苦不迭,工作又不是做题,为什么偏偏要在面试中考察这样一个看似和未来业务关联不大的内容呢?
如果你吐槽数据结构与算法在未来用不上,那难道项目、八股就用得上吗?难道面试官会不清楚这一点吗?
实际上,相比起笔试可以代考、项目可以编造、八股可以硬背,面试的手撕代码部分反而是最公平、最能考察候选人水平的方式。
-
考察候选人的coding能力。假设候选人笔试分数很高,但是面试的手撕写得磕磕绊绊,连一些最基础的语法都写不好,那显然前面的笔试就很有可能是作假的,自然也就不能通过面试。
-
考察候选人在短时间、高压下解决问题的能力。面试通常是非常紧张的,但如果在这种高压状态下也可以很好地完成任务,说明候选人能够胜任具有挑战性的、紧急性的工作。
-
考察候选人抽象的逻辑思维能力。算法题通常而言都比较抽象,能够较好地解决算法题的候选人,通常具有较好的逻辑思维。
-
考察候选人的阅读理解、提炼信息能力。除了LeetCode上常规的经典题以外,现在也慢慢出现了一些题干较长、描述较复杂的题目,这需要候选人沉下心提炼关键信息,把已有信息转化为简单问题,再转换为代码语言。
-
考察候选人的沟通交流、语言表达能力。这一点其实很多人会忽视。在做完手撕代码后,一般都需要向面试官讲解你的思路和代码,如果能把一个相对复杂的算法(比如dp)讲清楚,那么说明候选人语言表达能力是过关的,在未来也能够胜任团队协作的工作。
-
考察候选人是否具有持之以恒、坚持不懈的学习决心。算法学习非一日之功,一般来说都需要经过1-2个月的系统学习和刷题。能够把常见算法学好的同学,说明都是有毅力有决心之人。
另外,从用人单位降本增效的角度来看,与其让更多的面试官花时间经历深挖简历,**还不如一场算法笔试、一次手撕代码对人才的筛选力度大,**这对企业来说是更加节约成本的招聘方式。
如何准备手撕代码
手撕代码和笔试是可以一起准备的,因为本质上考察的都是数据结构与算法知识。
算法题的考察实际上是一种半标准化考试:虽然没有考试大纲,但常考的知识点就是那些,题目通常以变换题干或结合不同知识点的方式来考察候选人能力。
各个知识点的难度可以大致用以下表格划分
难度 | 知识点 |
---|---|
入门 | 数组、字符串、链表、排序 |
简单 | 栈、队列、哈希表、双指针、贪心 |
中等 | 二叉树、堆、单调栈、滑窗、二分、位运算 |
困难 | DP、DFS、BFS、回溯、并查集、前缀树 |
上述表格只是一个非常粗糙的划分,需要循序渐进地进行准备和刷题。如果暂时无法自己想到解题思路,则可以先看答案,模仿他人代码,过段时间(比如一周)之后再重新尝试自己实现代码。
如果时间充裕且自我总结的能力强,那么完全可以自学网上的免费内容(比如代码随想录等),注意刷题过程中要做好每一个知识点的归纳。
如果时间紧张或者缺乏自驱力,那么找一个靠谱的算法老师或者参加算法培训,让有经验的人带着你一起学习,能够会得到事半功倍的效果。
另外,手撕代码和秋招笔试最大的不同在于讲这个动作。所以还得有意识地培养自己逐行讲解代码,讲解思路的能力。
这个其实有点像费曼学习法的过程:如果你能够把一道题目给其他人讲懂,那么说明你自己一定是真正学会了。
手撕代码注意事项
假设你已经把算法学得相对透彻,那么在技术面试的具体过程中,我们在一场手撕代码中向面试官展示出自己的水平呢?
-
**仔细读题。**把题目理解正确毋庸置疑是非常重要的。有一些描述的细微区别,比如数字范围是整数/正整数,子序列是连续/不连续,字符串包含/不包含数字,数组已排序/不排序等等,都有可能影响整个题目的代码,甚至使用完全不同的算法。尤其在遇到题干费解的题目时,在正式作答之前一定要向面试官再三确认题目是否理解正确。
-
做好注释。这不是说在写代码的过程中一定要加上注释,而是为了保证后续的讲解能够更加流畅,可以在适当的位置加上一些简单注释。比如dp问题,那么可以加上dp数组的含义、动态转移方程、dp数组的初始化这三个关键点相关的注释,这既是写给面试官看,也是写给自己看的。当然,如果你的能力强到可以一边写一遍讲解代码,那是最好不过的了。另外,也要尽可能地也保持良好的代码规范,比如
" = "
前后加上空格,变量名命名清晰等等。 -
条理清晰。完成题目之后,面试官通常而言会要求你讲解代码或者算法,那么我们可以使用总-分-总的形式来进行讲解。
- **总:**代码用了什么算法?为什么可以使用这种算法?时间复杂度和空间复杂度分别是多少?
- **分:**按行或按代码块来解释代码。关键的变量在哪个位置发生了变化?用到哪些API?程序在运行过程中是如何一步步得到答案的?
- 总(这一点不是必须的):除了代码所示的算法(比如用了DFS),还有哪些可能的算法(那么BFS可能也是可以做的)?其优缺点是什么?
-
**虚心请教。**如果题目写不出来,或者完全没有思路,可以向面试官求助,虚心请教本题思路是什么?有什么建议?一般而言面试官都会给你一些点拨。如果在提示下能够较好地完成题目、写出正确的代码,也会给面试官留下不错的印象。
另外,手撕代码和笔试略有不同的地方在于,更大概率会考察经典题,主要以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++返回引用
在本文中,您将学习如何在函数中通过引用返回值,以及如何在程序中有效地使用它。 在C 编程中,不仅可以通过引用将值传递给函数,还可以通过引用返回值。 示例:通过引用返回 #include <iostream> int c; int add…...
010:连续跌3天,同时这三天收盘价都在20日均线下,第四天上涨的概率--以京泉华为例
对于《连续跌三天,压第四天上涨的盈利计算》,我们可以继续优化这个策略,增加条件:同时三天都收盘在20日均线下。 因为我们上一篇《获取20日均线数据到excel表中》获得了20日均线数据,我们可以利用均线数据来编写新的脚…...
MATLAB与Python:优势与挑战
本文旨在探讨MATLAB与Python在特定领域内的使用情况,并分析两者之间的优势和挑战。 MATLAB和Python都是流行的编程语言,广泛应用于科学计算、数据分析和机器学习等领域。在某些领域,如航空航天工程、自动化和电子工程嵌入式系统开发等&#…...
CSP-J第二轮试题-2019年-1、2题
文章目录 参考:总结 [CSP-J2019] 数字游戏题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示答案答案2 [CSP-J 2019] 公交换乘题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示…...
深入理解 python 虚拟机:原来虚拟机是这么实现闭包的
深入理解 python 虚拟机:原来虚拟机是这么实现闭包的 在本篇文章当中主要从虚拟机层面讨论函数闭包是如何实现的,当能够从设计者的层面去理解闭包就再也不用死记硬背一些闭包的概念了,因为如果你理解闭包的设计原理之后,这些都是…...
【数据结构-哈希表 一】【原地哈希】:缺失的第一个正整数
废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【原地哈希】,使用【数组】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为&…...
【C++设计模式之迭代器模式】分析及示例
简介 迭代器模式是一种行为型设计模式,它提供了一种顺序访问聚合对象元素的方法,而又不需要暴露聚合对象的内部结构。迭代器模式通过将遍历算法封装在迭代器对象中,可以使得遍历过程更简洁、灵活,并且符合开闭原则。 描述 迭代…...
【代码随想录】LC 27. 移除元素
文章目录 前言一、题目1、原题链接2、题目描述 二、解题报告1、思路分析2、时间复杂度3、代码详解 三、知识风暴 前言 本专栏文章为《代码随想录》书籍的刷题题解以及读书笔记,如有侵权,立即删除。 一、题目 1、原题链接 27. 移除元素 2、题目描述 二、…...
crash工具分析dma设备内存踩踏(一)
背景介绍 我们的客户在利用我们提供的SDK参考方案开发相关产品时,在产品方案上进行一些基础老化测试时,极低概率出现kernel随机panic问题,由于场景复杂,无法单独针对特定模块或功能进行拆解来进行实验排查,只能基于已…...
C#上位机——根据命令发送
C#上位机——根据命令发送 第一步:设置窗口的布局 第二步:设置各个属性 第三步:编写各个模块之间的关系...
BEVFormer代码跑通
1 环境配置 1.1 环境安装 # 1 拉取源码 github加速代理https://ghproxy.com/ git clone https://github.com/fundamentalvision/BEVFormer.git# 2 创建虚拟环境 conda create -n bev python3.8 -y# 3 激活虚拟环境 conda activate bev# 4.1 安装torch,torchvision,torchaud…...
kafka安装
kafka安装 1 kafka概念 1.1 kafka介绍 kafka是最初有Linkedin公司开发的,是一个分布式,分区,多副本,多生产者,多订阅者,基于zookeeper协调的分布式日志系统。具有高吞吐量,可扩展性和可容错性…...
Mac上安装Java的JDK多版本管理软件jEnv
JDK的多版本管理软件主要有以下三种: jEnv jEnv 是一个命令行工具,可以帮助您管理和切换不同版本的 Java 环境。它可以让您在不同的项目之间轻松切换 Java 版本。您可以使用 jenv global 命令设置全局 Java 版本,也可以使用 jenv local 命令…...
linux常见命令以及jdk,tomcat环境搭建
目录 Is pwd cd touch cat echo vim 复制粘贴 mkdir rm cp jdk部署 1. yum list | grep jdk进行查找编辑 2.安装编辑 3.再次确认 4.判断是否安装成功 tomcat安装 1.下载压缩包,把压缩包上传至linux(可能需要yum install lrzsz) 2.解压缩unzip 压缩包名&…...
将表情存入数据库
概念: 表情是一种比较特殊的字符串,为unicode编码,unicode编码要存入数据库一般情况下,是存不了的,有两种解决方式,一种将数据表编码方式改为unicode编码方式,但是这种情况适用于功能刚开始设计…...
H桥级联型五电平三相逆变器Simulink仿真模型
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
怎么做淘客推广网站/竞价软件哪个好
Fragment Fragment叫做碎片,是一种可以嵌入在活动中的UI片段,可以充分利用大屏幕的空间,在平板应用上应用的比较广泛,Fragment的定义为小活动,也就是Fragment是比一个活动更细化的管理空间,可以理解为小活…...
十大购物网站排名/今日热榜官网
SpringBoot项目中,使用Kafka可以实现数据异步处理 目录下载安装KafkaSpringBoot引入Kafka引入依赖pom.xml配置 application.yml消费者生产者消息发送和接收参考下载安装Kafka # 从清华镜像下载 wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.8.2/kafk…...
东莞阳光官方网/济南seo网站排名优化工具
全文共1983字,预计学习时长5分钟图源:unsplash写代码必然会出现错误,而错误处理可以针对这些错误提前做好准备。通常出现错误时,脚本会停止运行,而有了错误处理,脚本就可以继续运行。为此,我们需…...
毕设做网站具体步骤/网络培训平台有哪些
Linux文件管理一、文件系统及Shell的基本概念1.文件系统的含义文件系统是用来管理和组织保存在磁盘驱动器上数据的系统软件2.Linux的文件系统Linux系统采用虚拟文件系统技术(VFS)、结构采用倒立树型、VFS使Linux支持以下文件系统&…...
做调查问卷赚钱网站有哪些/网络营销经典案例
Indent Guides 为每个缩进绘制一条虚线; Highlight all occurrences of selected word 高亮相关代码; Productivity Power Tools 微软官方推出的扩展,标记补全、复制引用、增强的滚动条等,详见《免费的精品: Productivity Power T…...
做soho的网站/国际新闻热点事件
在日常办公室中如何添加本地打印机,打印机是必不可少的设备,但是有时将打印机连接到计算机时会遇到很多问题. 连接本地打印机对于我们的工作效率非常重要. 让我们看一下如何添加打印机.无法将打印机添加到win10系统,如下所示:添加打印机时&am…...