金三银四,当前是各互联网大厂,公司的人才流动最大的时期,候选人忙着面试,招聘人员忙着招人,安排面试。近期本人进行了各大厂的面试,同时也与周边去大厂面试的同事进行了交流,
所以在此总结了一些经验、心得,拿出来和大家分享一下。
大厂对在线程编程、数据结构算法的重视程度比较高,特别是在线编程看的越来越重视。
在线编程常刷的网站主要有两个
1、力扣网 https://leetcode-cn.com/ 题量比较大,题解写的比较好,题目的输入输出不需要自己处理,只需要实现算法逻辑,返回正确结果即可。
2、牛客网 https://www.nowcoder.com/ 题目比较多,跟大厂合作比较多,多个大厂使用牛客网的题库进行在线编程考试,但输入输出比较麻烦,需要自己构建输入输出。
包含头文件、输入输出如下:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double num = 0;
cin >> num;
cout << round(num);
return 0;
}
在线编程的考点主要有两点,
1、计算机常识考察;考察常见的基础数据结构的认知,如:数组、栈、队列、树、图 等。在编程过程中很容易用到,C语言的比较吃亏,需要自己实现,像C++、JAVA,python等面向对象的语言,有现成的库函数和结构,直接拿来即用即可,C则需要自己实现一下。
除了基础的数据结构可能还有别的考察点,如:素数、二叉树、子序列等 基础概念,有可能出的题目,不会解释基本的概念。
2、常规的编程算法、技巧考察。常规的编程算法、技巧总结如下:
1)逻辑推理的暴力解法(常见)
这类的题目,一般偏向写逻辑,只要认真阅读题目,准确的判断逻辑,一般都能解出相应的题目。
2)比较排序(常见)
此类题目一般会给出一个队列,会按照多个维护进行排序给出结果,参考练习题目:
406. 根据身高重建队列 https://leetcode-cn.com/problems/queue-reconstruction-by-height/
767. 重构字符串 https://leetcode-cn.com/problems/reorganize-string/
621. 任务调度器 https://leetcode-cn.com/problems/task-scheduler/
1636. 按照频率将数组升序排序 https://leetcode-cn.com/problems/sort-array-by-increasing-frequency/
3)双指针和滑动窗口解法
解决判断某个区间满足对应的条件场景,参考练习题目: 3. 无重复字符的最长子串 https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/
1004. 最大连续1的个数 III https://leetcode-cn.com/problems/max-consecutive-ones-iii/
4)单调栈解法
一般是维护一个单调增或单调减的栈,根据题目情况,参考练习题目:901. 股票价格跨度 https://leetcode-cn.com/problems/online-stock-span/
5)栈的使用
使用栈的 先进后出特点,满足相应的条件场景,参考练习题目:227. 基本计算器 II https://leetcode-cn.com/problems/basic-calculator-ii/
6)DFS和BFS(难度较大、出现的机率偏少)
深度优先和广度优先一般适用与递归操作的场景,参考练习题目:
997. 找到小镇的法官 https://leetcode-cn.com/problems/find-the-town-judge/
207. 课程表 https://leetcode-cn.com/problems/course-schedule/
200. 岛屿数量 https://leetcode-cn.com/problems/number-of-islands/
7)动态规划(机率偏少 )
一般是第N步的输入为第N-1步的输出,可以通过数学函数表示的,如:F(n) = F(n-1) + F(n-2) 此类问题。
参考练习题目:746. 使用最小花费爬楼 https://leetcode-cn.com/problems/min-cost-climbing-stairs/
除上述总结的常用解法外,要学会使用常见的数据结构,了解其基本特性,并在编程时能够灵活应用,拓扑排序、并查集、分治法等高阶算法如果能够掌握更好。
在进行上机编程题时,如何才能够拿到高分呢?这里有些小技巧
1、首先战略上要正确,先全局过一遍,先做简单题,然后再做难度大的题。一般上机编程题至少两、三道题,不会是一道题,所以先全局看遍,针对完全没有思路的要先放一下,针对见过的题型,或是一看就有思路的,可以先进行下手。
2、其次是方法上,采用先写测试用例,然后再开始写代码。有些题目开始是有思路的,可是在写代码的过程中,会发现开始的思路是错的,这个时候需要重新调整思路,再进行编程,但先写测试用例,可以快速的验证新的思路是否考虑全面,是否有遗漏点。
3、注意备份,或是IDE 的撤销恢复功能,节约时间,提升效率。人在紧张的情况,很可能没有想通,着急调整编程思路,但发现原来的思路更容易继续下去,这个时候,需要快速恢复可以节约重新敲代码的时间。
4、学会舍弃,有些题目,可能某些比较偏的场景不太好实现,这个时候,不要花费大量的精力去实现这种比较偏的场景了,而是只需要实现部分场景即可,把一些你当前能快速实现的场景先适配完了,等其它题目都写的差不多了,再来深度思考比较难实现的场景。
在此总结一点内容,希望能够帮助后面参加面试,以及在线编程的同学们,希望你们能够做出一些好成绩