日常刷题
准备路线: 代码随想录 + 力扣top100 + 牛客面试必刷top101 + 剑指offer
总结参考:labuladong 的算法笔记
这里不得不安利一下代码随想录,刷题顺序可以看的出是精心安排的,从易到难,很适合新手开始,我的算法总结大都是根据他来的~
我是从研一就断断续续的刷题,权当消遣;真正开始系统准备是在研二,这里建议大家平时一定要总结,我个人刷题比较有用的方式:
一个是思维导图:
主要是按照数组、链表等分为各子模块,然后记录每个子模块的经典题目,总结方法,方便后期复习回顾。我之前的文章也有对应模块的总结和题目解析~
当然,后续我们也可以把一些算法整理为模板,方便做题时快速思考。
一个是表格记录:
这个的好处是更直观的查看自己的刷题情况,而且需要二刷的题目可以加粗标注或者备注,对查缺补漏很有帮助。
笔试题
大多数公司的笔试分为两部分: 非编程题(选择,填空), 编程题 。
所以需要面试者补充基础知识,尽量做好非编程题,比如sql语言,linux 命令,语言基础等
而对于编程题,通常会考察图论、动态规划的知识,可以重点准备。
另外对于笔试编程题的一些tips:
-
笔试大多是acm模式!也就是需要自己输入输出数据的,所以一定要提前熟悉这种模式,牛客就有acm练习模式
-
一定注意理解题意!!仔细阅读题目,竟然会有一些思维理解上的偏差,导致简单的题也做不出来;
-
编程题没有思路也要尽可能通过一些测试样例,尽可能得分;比如返回true 或false 的题目,return true 就可以得到50%的分数了。当然,现实肯定不会这么简单,但也有骗分的空间。
-
牛客会有一些公司的真题,可以提前刷一下了解风格牛客公司真题
-
可以用本地IDE的尽量用本地IDE,方便debug
-
一些测试样例不通过的原因:
- 变量的类型开的太大或者太小, 经常有那种int 改为long就可以的情况,所以一定要注意数据溢出;
- 边界条件, 比如空数组, 只有一个元素的数组等,容易被遗漏
技术面手撕代码
面试大概60分钟,通常前40分钟问技术问题,留下20分钟手撕代码:
- 准备途径:牛客公司真题 + codetop 对应公司题目 + 面经。不要小看面经,很多部门其实是有题库的,所以这种情况下幸运点还可能遇到原题;
- 一般会考察的题目类型:链表!!反转链表,链表的排序,合并两个升序链表,反转链表指针等等;还有一些二叉树的题目,回溯,动态规划等;整体来说中等,不算难;
- 平台:大多是自己公司的面试和代码平台,白板写;部分用牛客平台
- 在拿到题目后,有思路可以先说一下自己的核心思想和做法,以及复杂度,然后再写;
- 代码思路尽量简洁有效,逻辑易于理解,即使你有一个简洁的写法,但逻辑不符合常人理解,那么也不太好(本人就被说过逻辑奇怪)
- 实在没有思路的,直接和面试官坦白,说出自己的思考和想到的解决办法,表明问题,问有没有什么提示。不用担心,没有手撕出来并不代表整个面试的失败。
- 另外除了lc的题,有的面试官还会让你写一下其他的,比如面试中我提到过的生产者消费者模型,让我实现。
个人一些算法题目整理
文章leetcode专栏中
- Leetcode哈希篇总结(c++)
- Leetcode数组篇总结(c++)
- Leetcode链表篇总结(c++)
- 动态规划,贪心,单调栈。。。