怎样准备面试中的手写算法

怎样准备面试中的手写算法

在程序员找工作的过程中考察算法是一个必不可少的环节,尤其是校招面试,应届生如果没有啥项目经验,面试官只能通过手写算法来了解你的基本功。下面讲一讲准备面试中的手写算法需要注意的几点。

1. 确定刷题的语言

编程语言只是一个工具,不要太纠结,每一门语言都是相通的,不过这里还是推荐主流的语言,后端尽量选择c++/java/go,测试开发尽量选择python,前端尽量选择js。一旦选择了语言,一定要对它的语法,常用api,内存机制,优缺点等烂熟于心。

比如你在手写算法的时候想使用优先队列,是没办法现场去查api文档的,如果你对优先队列常用的api不熟悉,即使你思路再清晰也是写不出来的。

有些面试官喜欢出一些设计题,比如让你实现一个字典树,或者实现一个简单的C++的智能指针,这个时候就看语言的掌握情况了,如果你连构造函数,析构函数的定义都写不出来,那基本就凉凉。

2. 刷多少题才够?

刷题量因人而异,我见过一道题没刷过,项目经历比较亮眼,直接拿到阿里星offer和字节ssp offer的。当然也遇到过刷了近千道题,最后折在一道快速排序上的。

刷题数量不是目的,刷题的目的是掌握常见的考点。

常用的数据结构: 数组、字符串、链表、二叉树、图、前缀树、集合、映射、栈、队列、堆。

常用的解题方法: 递归、迭代、二分法、回溯、贪心、动态规划、位运算、双指针、模拟、拓扑排序、桶排序、单调栈、深度优先搜索、广度优先搜索。

对于求职而言掌握上面这些已经足够了,有更多的时间可以去把基础打牢,去参加一些有意义的开源项目或大企业举行的比赛,或者在自己的研究方向做出一点成就,不必执着于刷题。

这里提供一个经典的题目列表 blind 75 仅供参考。

3. 刷完需要达到什么效果?

  1. 形成自己的代码风格,代码一定要整洁,变量命名要让人一看就知道是啥意思,代码流程清晰明了,小的功能可以抽出来封装成一个单独的函数。

  2. 常用的数据结构和常用的解题方法必须是要完全掌握的。时空复杂度要会分析,常用数据结构的查找、插入、删除的时空复杂度要牢记。

  3. 常见的排序算法实现及其复杂度分析必须要手到擒来。快排,堆排等也是面试的高频。

  4. 简单的测试用例需要会构造,代码写完了,面试官让你自测一下,这个时候如果不会了,那就太可惜了。

  5. 要会调试代码,使用OJ上的编辑器写代码最常用的调试方法就是使用语言自带的打印函数把关键逻辑点的变量打印出来,然后构造一个简单的测试用例,根据打印的结果分析代码逻辑是否正确。平时利用本地IDE写代码,不理解的函数也可以把关键逻辑打印出来,比如你对递归的流程感到比较疑惑,你可以在递归结束的条件和递归函数的入口加一些打印,通过分析这些打印,递归的整个过程就很清晰了。

  6. 有些用c++刷题的同学要注意对内存的操作,申请的内存用完要记得释放,不要使用未分配内存的指针,c++中定义一个指针,如果不初始化为NULL指针,它是随机指向一块内存的,这个时候如果对它指向的内存操作,会发生未知的错误,在一些大型项目中可能会导致整个服务的崩溃。良好的内存操作习惯也会让面试官觉得你写代码很严谨。

4. 多跟面试官交流

面试过程中多和面试官交流,题目描述不清可以多追问一下,如果遇到没有思路的问题可以让面试官提示一下,让面试官看到你在积极处理问题。如果一看没思路,直接放弃,基本就凉凉了。

5. 多注意细节

手写算法只是面试的一部分,有时候虽然代码你写出来了,面试官问的其他问题也都答出来了,你以为胜券在握,但是最后挂掉了。这可能是很小的一个细节决定的,比如写代码边界条件考虑不周或者在回答一些问题的时候表达的不自信,回答问题一定不要用“可能如何如何”这样的词语,不懂的问题也不要乱说,可以有根据的推理,但是胡乱说是大忌。多向你懂的领域引导面试官,让他发现你更多的闪光点。平时可以找一些已经工作有经验的学长学姐进行模拟面试,多找下自己的不足。

先写到这里,后面有时间继续分享求职面试相关的一些东西,觉得有帮助就赏一个关注吧。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目描述: 给定一篇手写笔记的图片,要求用代码实现将其还原成文字。 示例: 输入: ![handwriting](https://cdn.luogu.com.cn/upload/image_hosting/jz2h2y1f.png) 输出: ``` Hello, world! This is a handwriting recognition problem. Can you solve it? Let's see. 1. First, let's import some libraries. - numpy: a popular library for numerical computing - PIL: Python Imaging Library, for image processing - tensorflow: a popular library for machine learning 2. Next, let's load the image and preprocess it. - Convert it to grayscale - Resize it to a fixed size - Invert the colors 3. Now we can use a pre-trained OCR model to recognize the text. - We'll use Tesseract, an open-source OCR engine. - It works best on clean, high-quality images, so we'll need to do some post-processing. 4. Finally, let's print the recognized text and see how well we did. - We should be able to get pretty good accuracy if the image is clear and the text is legible. ``` 解思路: 1. 首先需要加载一些常用的 Python 库,如 numpy、PIL 和 tensorflow。 2. 接着需要读取手写笔记的图片,并对其进行预处理。具体来说,需要将其转换为灰度图像、调整大小并反转颜色。 3. 接下来,可以使用一个预训练的 OCR 模型来识别文本。这里使用的是 Tesseract,一个开源的 OCR 引擎。需要注意的是,Tesseract 在处理高质量、清晰的图像时表现最佳,因此在处理后需要进行一些后处理。 4. 最后,将识别出的文本打印出来,以便进行检查。 代码实现: ```python import numpy as np from PIL import Image import pytesseract # Step 1: Load the image and preprocess it img = Image.open('handwriting.png').convert('L') img = img.resize((int(img.size[0] * 2), int(img.size[1] * 2))) img = ImageOps.invert(img) # Step 2: Use Tesseract to recognize the text text = pytesseract.image_to_string(img) # Step 3: Post-process the recognized text text = text.replace('\n\n', '\n') text = text.strip() # Step 4: Print the recognized text print(text) ``` 其,`pytesseract` 库需要提前安装。在 Ubuntu 系统下,可以使用以下命令进行安装: ``` sudo apt install tesseract-ocr sudo apt install libtesseract-dev pip install pytesseract ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值