热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于算法:从零到谷歌程序员我的面试刷题心得

本文作者:易潇她的Github:[链接]大家好,我是易潇,也是91算法群里大家相熟的狗头。最近申请和面试根本完结,刚刚过了Google的HC。我的本科读的是商学,所以算是理科转码和0根底转码的一员。在这里想跟大家分享一下我面对面试刷题的心得~注:Google的招人模式比拟特地,过了HC能够视为被Google承受并且曾经完结了所有
  • 本文作者:易潇
  • 她的 Github:https://github.com/lilyzhaoyilu

大家好,我是易潇,也是91算法群里大家相熟的狗头。最近申请和面试根本完结,刚刚过了Google的HC

我的本科读的是商学,所以算是理科转码0根底转码的一员。在这里想跟大家分享一下我面对面试刷题的心得~

注:Google的招人模式比拟特地,过了HC能够视为被Google承受并且曾经完结了所有技术性面试,简称过了。具体对于申请Google的信息会在后续的文章中跟大家分享,敬请期待。

我的刷题状况

在谷歌面试的时候,我大略刷了550道题左右:其中大略150道简略,310道中等,90道艰难。其中有中国站一些剑指和面试经典的反复题。对于前200和一些高频题,我刷了两遍以上或者更多。

如上图是我刷图论的模板题。左侧是我的提交记录,右侧是我的代码。

我在四月份之前断断续续的大略刷过60道题左右,而后在四月份的时候我新开了一个过程并且开始好好刷题。实现最初一个面试是7月20日。

刷题心得

依照一个基于tag/topic的打算开始刷题

tag/topic的定义:在力扣题库界面的上方能够看到不同的标签(tag),点进去就能够进入每个标签的列表。

依照标签刷题的益处是它能帮忙你坚固你对某个数据结构的了解,并且一直的改过和提高。

网上有很多大佬分享过刷题程序和题单,或者你也能够本人创立一个列表。我感觉不必太纠结“到底哪个列表最好”,作为一个刚开始刷题的人,明天先学A或者B一般来说影响不会太大 — 反正到最初都是要学的。最重要的是“开始学”,不要胆怯打算不完满。打算必定不会是完满的,是会随着本人的认知和进度而修改的。

对于我集体来说,我侥幸的加入了力扣加加举办的91天算法。91算法要求每天一起打卡一道题,并且每个礼拜的题都是围绕一个数据结构。这样依照一个标签集中刷题很好的验证本人对某个数据结构的常识并且修改了本人一些谬误的认知。

建设一个有正向反馈的Todo List

为什么我这么举荐依照打算刷题呢,还有一个起因是Todo List是一个很不便建设正向反馈的工具。为什么建设正向反馈很重要呢 — 你如果打过游戏,那么你肯定有过“呀就打了一会儿游戏怎么就这么点啦”的感觉。打游戏的时候工夫过的飞快就是因为大多数设计好的游戏都会一直的给予玩家正向反馈。同理,咱们想要始终刷题,那么就要给本人发明一个有继续正向反馈的环境。

Todo List就是这样一个工具。我刷题的时候应用的是ipad + goodnotes + ElenaLin_青青的电子手账模板 + apple pencil。一般来说,我每天会制订第二天须要做什么事件,并且尽量把它拆分成小的、容易实现的步骤。比如说我想学习字典树,那么我就会把打算拆分成:

  • 看91算法的字典树专题
  • 写91算法的字典树模板题 LC208
  • 写91算法的字典树举荐题

    • LC211
    • LC212
    • LC472
    • LC648
    • LC820
    • LC1032
  • (如果还有精力)做力扣上字典树标签里的高频5道题

一般来说,除了学习某个专题,我的一天还会有一些其余事件,比方打卡91算法每日一题,打卡力扣每日一题,看邮件,投递申请等等。大部分时候,我起床之后坐在电脑前,都本能的感觉“太难了”,以至于“我不想干”。每当我有这种感觉的时候,我就在所有的待办事项当选一个我感觉最容易实现的我的项目并且开始做。换句话说 — 别想那么多,兄弟,冲就完了!(好吧我是个fps游戏玩家)。我个别会抉择先做91每日一题,因为它不会太难,而且打卡了之后会被其余刷题小伙伴看到,这让我有种感觉本人很棒棒的感觉。只有开始建设 “克服困难” -> “执行工作” -> “实现之后感觉本人很棒棒” 的行为模式之后,所有都会变得简略起来。

ElenaLin的电子手账应用教程可参考这个视频 https://www.bilibili.com/vide…

贴一个我中期的日程表,这个时候我曾经建设了比拟好的循环,所以会看到每天实现的工作多了起来,而且我也曾经不太依赖“在实现每个工作之后划掉”这个动作了。我的笔记也并没有很整洁或者好看,只有本人能看懂就能够。

当然,在工具上不肯定要跟我一样。本子和笔也能够。不过我强烈推荐用一个本子,因为周末和月末的时候回顾看看也会持续加深下面提到的有正向反馈的行为模式。

学会站在伟人的肩膀上

一道题看10分钟如果没有思路就不要太浪费时间在谬误的办法下面,学会看和学习他人的题解。

个别力扣解题区的高票题解都很好。一个题解如果看不懂也没关系,首先照着它写一遍,而后通过各种打印和调试搞清楚每一行代码都是在做什么;如果还是不分明为什么,能够把某一段代码正文掉再点提交。这个时候零碎会报错,你再拿着这个输出一行行的剖析题解,就能明确这一段代码在做什么、为什么必须要存在在题解里。(这样提交成功率会变低,然而变低又怎么样呢,咱们的指标又不是成为提交成功率最高的仔)。

当然,问其他人也能够,然而我更举荐带有具体目的性的发问,而不是“这道题怎么做?”这种宽泛的问题。一般来说,问题越具体,越好答复,被答复的几率越高。

数量还是品质?

其实都须要。肯定的数量是熟练度的保障和见过大部分题型的根底。

熟练度在面试中很重要:面试一共那么长时间,其余条件不变,写代码越快,能做的其余事件就越多。其余事件能够是多跟面试官交换,答复一些follow up,做一些优化等等。这些都是面试加分的我的项目。

见过大部分题型也很重要:见题型多的实质其实是对于某一类问题是否更好的形象。比方对于堆来说,91算法始终强调它的实质是“动静求极值”。刚读完我是不了解的,做了一道题我可能略微有点了解了,做了三道题我就会感觉“哇塞还能这样,哦果然能这样!”领有形象问题的能力就等同于领有以不变应万变的能力,在遇到没见过的题的时候就能够不慌。在面试中遇见原题的概率的确也不大,所以锤炼形象能力很重要。

当然,刷题的品质也重要。当咱们说刷题的品质的时候,咱们在说什么呢?我感觉品质是指:一道题是否真的了解它在求什么。对于每一种这道题可能的思路,使用了哪些数据结构,用这种数据结构的劣势和劣势在哪里。比方两数和,哈希表是常见的工夫优化解法。这里利用了哈希表能用O(1)工夫取得对应key的值的个性,就义了空间复杂度,而优化了工夫复杂度。

温习和反复

温习和反复是很重要的,毕竟“孰能生巧”嘛。对于我来说,每个数据类型的模板题是我写的最多的,多到我能一遍过的根底上每隔一段时间还要刷一下。我在面试之前对于每个常见的数据类型都有本人喜爱的模板写法,并且能依据每道题对模板进行改良。

我记得我过后学堆的时候感觉太难了,我就照着91算法讲师小漾写过的堆写了一个礼拜 — 就是从早到晚始终写的那种一个礼拜。之后我常常打趣说 “就算你中午三点把我拉起来让我手写一个堆都不会有任何bug”。 凑巧的是,我在面试某个pre-ipo公司的时候就考到了跟堆相干的常识。过后的运行环境是hacker rank,须要把代码跑进去并且通过实例(注:并不是每个公司都要求代码能在环境中运行,有的公司面试更像在白板上写代码)。我当即给面试官表演了一段速写最大堆,因为太熟了,所以行云流水零打碎敲。写完了之后我发现两位面试官的眼睛放光,起初recruiter被动反馈说面试后果十分十分好。在给offer的时候给了比申请的级别高了一点,而且最初谈薪资的时候还被动加了12%。

有很多一起刷题的小伙伴

刷题,尤其是一开始刷题,都是令人感到艰难的。很多时候这件事并不难,然而这种“好难啊”的感觉才是真正妨碍咱们开始的货色。当有了很多小伙伴的时候,有了四周人的压力和激励,这种感觉会削弱一些。

刷题的中后期也会常常感到迷茫和焦虑,有很多小伙伴也能很好的加重迷茫感。甚至很多时候,因为刷题群、技术群里很多大佬都上岸了,大佬们还会分享职位信息,堪称是两全其美。

对于我来说,我在决定要刷题的初期在网上加了很多技术群和刷题群。在我刷题的大部分工夫里, 我每天早上睁眼看微信都是一页的刷题群未读音讯。每次看到这个,我就有种我也要连忙起床刷题的紧迫感。每次刷题感觉郁闷了,去群里跟大家聊聊天相互激励,也会一会儿就感觉元气满满。

在哪里找这些群呢 — 力扣题解区有一些沉闷的大佬们的刷题群都不错,力扣的讨论区也常常有人拉刷题群。

适应面试环境

就算是算法面试,和在家本人悠闲刷题的感觉还是不一样的。算法面试要求疾速的锁定思路并且进行精准打击。(呃,如同游戏打多了…)这方面我强烈推荐力扣的周赛和进行一些模仿面试。模仿面试能够找敌人,也有一些提供相似服务的网站。我在interviewing.io模仿了三次,感觉还是挺有用的。

我当初的比赛分大略是1780。已经我也很焦虑的问Lucifer比赛/面试一缓和没思路怎么办。Lucifer的回复很简略也很无效:“先打20场再说”。

Just do it

“先打20场再说”是面向面试刷题中最重要的指导思想了。 开始总是让人感觉十分艰难,然而事件往往没有想的那么难。我也经常因为胆怯本人“做不好”而节约很多工夫在寻找“最完满的”开始办法上 — 实际上,当一个人开始学习某一项技能的时候,大概率这个学习办法是不完满的。所以如果你也想开始面向面试刷题,请把它想成一款游戏 — 先开始打了再说,打了之后再依据需要和网上的攻略调整本人打游戏的形式就能缓缓变成大神啦。

爱心三连击

  1. 看到这里了就点个在看反对下吧,你的在看是我创作的能源。
  2. 关注公众号力扣加加,获取更多算法硬核文章!加个星标,不错过每一条成长的机会。
  3. 如果你感觉本文的内容对你有帮忙,就帮我转发一下吧。
  • 后盾回复:「电子书」,获取我精心制作的算法刷题电子书(20+万字)
  • 后盾回复:「背包」,主动获取《背包九讲》pdf
  • 后盾回复:「脑图」,主动获取我制作的算法脑图总结
  • 后盾回复:「刷题插件」,主动获取上万人都在用的力扣刷题插件

另外你还能够回复具体的算法专题获取相应的文章,比方 「二分」,「堆」,「树」,「链表」等等


推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
author-avatar
湘刘涛
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有