如何准备面试,拿下offer

现在几乎所有大厂的软件岗位面试都会有算法题的面试,那么该如何准备算法面试呢?

什么是算法面试?

算法面试只是技术面试的一部分,大家要意识到算法只是技术的一部分,技术还包括计算机基础知识、项目中的经验,解决问题的思路等等,因此不要把算法面试当作技术面试的全部。不要一提到软件岗位就是刷题。

能够解出来算法题很重要,但是拥有合理的解题思路更重要,也是解决问题的前提,面试考算法,也是在考查你的思考方式,如何思考算法题的,需要你向面试官展示你的思考问题的方式。善于与面试官进行沟通,不要上来就写代码,先好好思考这个题可能出现的情况,然后与面试官沟通是否需要处理某些特殊情况等等。与面试官一起探讨这些问题一是更加深入理解问题,二是趁机显示自己的功利,有意识的将自己会的知识告诉面试官,让他的问题向这个方面靠拢。

对于一个算法题目的正确解答还包括你对这个问题自己的独特的见解;在解决出来之后,还能做进一步的优化;写出来的代码对于非法输入都有良好的处理,代码规范性很好;如果一个算法问题很难,不要灰心,尝试将自己的想法与面试官沟通,不要气馁。

算法面试好不一定代表着技术面试优秀

还是强调算法面试只是技术面试的一部分,一般公司上来会先让你写一道算法题目,然后围绕这个算法题目展开一些讨论。但是这只是面试中的一部分,另一部分就是项目,所以准备面试还要充分准备项目。如何充分准备项目呢?我觉得有以下几点。

1.找到你所面试岗位所关注的技术,然后找到能在项目中体现的地方,重点突出出来。比如汇顶科技的单片机岗位,他们关注的就是你是否使用过单片机,用单片机解决了什么问题,如何应用的。我一个同学面试,简历就没有提及这个内容,面试官第一句就是你用过单片机吗,然后直接就pass了。

2.准备好项目中的相关联的知识点,因为面试官很可能是从你项目中去引申出去,去提问你。比如我做的嵌入式软件项目,都会用到中断的嘛,所以不论是中兴还是海康威视在面试中都根据项目中的这个描述,问了一些关于中断的问题。现在一般软件的项目应该都会用到计算机网络,所以很可能就会延伸去问计算机网络的相关知识。这里还需要注意的是自己不会的东西千万别往简历写,因为你不写问道了,可以说不会,也不会怎么样,但是你写了,却说不会,会让面试官感到反感。

3.准备好项目的介绍。面试官在面试你的时候,首先会让你挑一个项目或者他选一个项目让你去讲一讲。这也是一个关键的内容,一个可以展示你对项目的了解和你在项目中所做的工作,另一个展示你的表达能力,能不能把事情讲解明白。所以这一部分也需要好好准备一下。我在提前批的面试中,其实这部分做的非常不好,因为面试官面试完之后,没有觉得面试官表现出什么兴奋感或者说很满意的感觉,觉得很一般的水平或者说达不到他们的标准。后面经过反思,修正和自己的尝试,到华为面试的时候,面完之后,面试官都是满意的笑容,甚至还称赞几句。所以说同样的项目,不同的表达方式和突出的重点不同,获得的面试效果是不同的。

介绍一下我自己的心得。

  • 对于一个项目,首先简单介绍一下这个项目的背景,做的什么,解决什么问题,让面试官稍微了解一下背景和需要实现的任务(也就是用户需求),划重点——简单,别说的太多,这里不是重点,可以结合纸笔一类的,在纸上画一画项目系统的组成等等。
  • 然后就可以介绍整个项目的所有功能,人员分配以及如何分工的,你是负责哪一部分的呢。一个是很多企业对于你们如何合作也是关心的,另一个是展示出你的总体能力,对于整个项目的了解和你所做的工作在整个项目中的地位有很深的理解。
  • 在之后就可以详细介绍了你具体做了什么工作。划重点,请注意此处你的工作里一定要出现亮点,比如你提出了什么特别的办法,解决了什么难题;或者是你在原来实验室的基础上做了什么改进。比如我自己的话,一般就是提我们实验室的代码写的很乱,我在项目中应用的时候就是将整个代码重构,按照功能层级重新封装架构代码。
  • 最后,介绍完自己的所做的工作和工作中的亮点之后,可以总结一下这个项目取得的成就。介绍完的最后你在给面试官抛出几个亮点来。你在项目过程中遇到的几个棘手的问题,如何发现问题,定位问题,解决问题。这个亮点一出,一个是体现你在实际项目中的解决问题的思维过程,这也是企业对于一个人的重要考量。另一个也是能够体现出你对项目的真正了解,展示你真正参与了这个项目。这个问题我记得在中兴、华为二面三面还有tplink的面试中都有问过。其中华为问的最深,我觉得也是想深入了解你是否真正参加过这个项目。

4.提前准备好一些能够体现你行为方式问题的答案。这些问题比如说

  • 遇见过的最大挑战
  • 犯过的错误,如何解决的
  • 与合作的人工作中遇到冲突如何解决的
  • 做的与众不同的事情

5.面试的最后,一般面试官会让你向他提问,提前准备好问题。

  • 内部如何对待新人的培训
  • 我会有怎样的发展机会

如何准备算法面试

要多关注基础的数据结构与算法,基础的算法设计思想。面试中的题目不会特别难。高级数据结构除非特定岗位才会考查。

  • 各种排序算法(手写快排)
  • 基础的数据结构和算法实现:堆、二叉树、图
  • 基础算法:如图的遍历、二分查找
  • 算法设计思想:递归与回溯、分治、贪心和动态规划

一味地刷题效果是不明显的,只是盲目的刷题,只是关心题的正确与否,是很片面的,你可能只是会了一道题,如果使用相同方法的新题目出现,你可能就不会了,所以还是要先巩固好基础的算法与数据结构,算法设计思想,通过题来巩固这些知识,要掌握好学习和做题之间的平衡。后面在来总结一下学习算法的经验。这里先不展开了。

如何解决算法面试问题

1.关注题目中的条件

  • 给定一个有序数组,有序可能就是二分查找
  • 设计一个O(nlogn)的算法,可能就是先排序或者分治算法
  • 不需考虑额外的空间,可能就是以空间换时间

2.不会做的时候,就暴力法,先把暴力法写出来,然后在进行优化

3.如何优化

  • 在脑子查找一遍常用的算法思想看看能不能用上(递归、回溯、动态规划)
  • 常见的数据结构(一般是栈、队列)
  • 使用哈希表来实现空间换时间
  • 对数组进行预处理,排序去重之类的,比如有重复数字的全排列问题

4.写代码的时候,注意考虑边界条件

指针为空,数组为空,字符串为空等。

这就是我个人对面试中的一些经验总结,希望对大家有用。
https://pan.baidu.com/share/init?surl=lo21tZ97PaB_gGrbaWOrNA
h22o

#面经##面试流程#
全部评论
请问楼主对没有项目的孩子有什么建议吗,自己准备的话项目必须有大的创新性吗
点赞 回复
分享
发布于 2020-07-01 20:58

相关推荐

2 11 评论
分享
牛客网
牛客企业服务