互联网(IT)大厂面试技巧(面经)

目录

前言

面试的正确姿势

实战

最后的总结


前言

虽然资历尚浅,但是也面过不少试,有Google、微软等外企大佬,也有BAT等国内巨头,工作的这几年也有幸当过几次面试官,小鹿这里呢就结合自己的亲身经历,聊一聊我对面试的一些小想法(*^▽^*)
我们面试是在面什么?

  • technology

  • thinking

  • communication

这是小鹿自己总(意)结(淫)地面试的主要考核内容。首先呢,毋庸置疑,我们面试肯定是要检验候选人是否有过硬的专业技术算法、项目经历,不同的公司、不同的职位有不同的侧重,但是具体的专业技术的考核肯定是逃不开的。
可是除此之外呢?除了显式的技术考核以外,还有很多往往被我们忽略的隐形考核。小鹿觉得主要是思维方式交流能力这两点。并且这部分反而更需要我们广大的程序员小哥哥们多多注意。不要让交流的问题,妨碍面试官发现你的思维之光,阻碍你展示出自己超强的专业素养呢(ノ≧∀≦)ノ!

面试实际上是工作的一个简单模拟。

一场面试,面试官其实只需要得到一个问题的答案,那就是和你一起工作是否开心。关于这个问题,有的外企会直接作为面试记录。虽然我们国内的企业不会这么直接,但是小鹿觉得这确实是面试中最直击灵魂的拷问。


面试的正确姿势

面试实际上是通过提出问题、回答问题,在你来我往中进行交流,模拟实际工作的情形。那么当面试官抛出话碴,提出一个问题之后,我们应该怎么更好的完成我们之间的对话呢?

小鹿以为,不管是具体的算法还是项目问题,面试官向你抛出的问题往往是开放的,没有灰常灰常清晰的定义、十分确定的唯一解的。针对这种情况,小鹿觉得切忌!!

不要直接给一个确切的回答,即使你的回答大概率是面试官心中想要的答案。

首先,我们可以尝试着去复述(当然不是一字不变的重复),用自己理解的语言去确认是否清楚的理解了面试官的问题。其次,这个问题可能存在一些没有定义清楚的模糊地带,一定要逐个向面试官去确认。当问题已经比较清晰的情况下,我们可以提出一个解决方案,这个方案可以是非常naive但是只要确实可行就ok啦。

大胆说出自己觉得可行的方案,即使这个方法看起来很简(智)单(障)。能解决问题的方法就是好方法( ̄▽ ̄)/

当然啦,实际中我们需要精益求精寻求更优的解决方案。但是大家不用太有压力,我们可以和面试官一起,沟通交流,碰撞思维的火花,共同讨论出一个较优的方案。最后实现(写code),测试,over~~

所以,小鹿划重点啦,面试的正确姿(步)势(骤)应该是这个样子滴~~

  • step 1: 正确的理解问题并复述

  • step 2: 清晰问题

  • step 3: 提出一个可行的解决方案(不一定是最优的)

  • step 4: 讨论出一个较优方案

  • step 5: 执行实现

  • step 6: 测试

实战

读到这里是不是觉得小鹿就是一个纯理论派(差点意思🙄️),那么我们就以小鹿最近的一次面试来实操一下吧!

Q1: 寻找三角数组的最大值

满足先单调递增再单调下降的array为三角数组,如[1,2,3,2,1].

  • step 1: 复述 (内心OS...这道题怎么这么简单,我有没有正确理解题意呢-O-)

  • step 2: 数组为空怎么办呐(╯﹏╰)b?

  • step 3: 可行方案**「遍历**,时间复杂度为O(n),空间复杂度为O(1)

  • step 4: 更优方案「二分查找,时间复杂度为O(logn),空间复杂度为O(1)

  • step 5: coding

  • step 6: test

Q2: 判断一个数组是否是三角数组

  • step 1: 复述(小鹿此处就省略啦)

  • step2: 数组为空?长度小于等于2的特殊情况?💡试官明确边界,只有长度大于等于3的数组才可能是三角数组💡

  • step 3: 可行方案**「**遍历」****遍历数组,如果数组只有一个拐点Xi-1<Xi且Xi > Xi+1,则为三角数组。时间复杂度为O(n),空间复杂度为O(1)。

  • step 4: 更优方案?请勇敢的说出没有更优方案,没有比O(n)更高效的算法啦 (▼へ▼メ)

**Q3:**当数组非常大,无法直接放入内存时,如何判断其是否是三角数组?

考核大家思维能力的关键时刻到啦!

首先我们可以提出一个大致的解决思路。小鹿有一个不成熟的小想法,可以用map reduce,把数组进行切分,逐个处理每一小部分数组,再整合判断整个数组是否是三角数组。

这个时候呢,我们的解决方案并不完整,比如如何分割数组,map和reduce到底怎么定义还不清晰。但是呢没有关系,我们先抛出自己idea,然后根据面试官的反馈,确定我们的方向是否正确(ง •_•)ง

当我们得到面试官的肯定后,就需要进一步细化这个solution啦。
三角数组有且仅有一个拐点。直接切分数组(比如n等分),「**map」****分别数每个切分数组的拐点数,「**reduce」****对所有拐点数求和,如果拐点数为1则为三角数组。

             

但是??如果切分的位置正好遇到拐点怎么办呢?

       

不要害羞,说出自己的思考过程,善良的面试官会给你发(提)糖(示)。

💡我们可以有重叠的切分,这样就能保证万无一失啦( ̄▽ ̄)/💡请看图,把数组划分为红、黄、蓝三个部分,其中重叠部分变成了橙色和绿色。这样就能保证即使把数组切分,也不损失整个数组的信息。        

最后的总结

当我们面试大厂的时候,保持平常心,把面试当成和同学、同事的交流,是非常重要的。在自身实力一定的情况下,不同的面试方式可能产生不同的面试结果。大家不妨也回顾总结一下自己的面试心得,有好的面试技巧可以在评论区留言,和大家一起交流学习哦~~~

希望大家面无不胜,逢考必过( ̄︶ ̄)↗

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值