去年夏天的时候,笔者去北京参加了几家大公司的面试,下面就总结一下面试的时候被问到到了哪些问题。一方面是为了总结下自己的不足,一方面是为了给新人一些面试帮助。
笔者是从事php方面的,所以下面谈的这些面试问题主要都是php方面的,当然其它的语言面试有些问题也会被问到。
如果你经常参加面试的话,你就会发现几乎所有的面试开场白都是进行自我介绍,这是因为一方面面试官是刚从HR那里得到你的信息的,面试之前他可能不太了解你的具体信息,所以他希望你通过自我介绍这个环节,了解一下你的过往经历,还有就是他利用这个时间看下你的简历。
自我介绍过后,大部分面试官都会问下你的项目经历,然后会问下你最满意的项目经验是什么,还有就会问你项目中遇到的最大难题是什么,你是怎么解决的。
自我介绍和项目经历是必问的两个问题,也是面试的一个基本流程。接下来就会问下具体的相关知识。
PHP基础语法
这个有的公司会问,有的不会问。他们可能会问一些貌似冷门,但是在项目中却经常会使用到的一些基本函数或者语法。比如可能会问你php怎么合并两个数组,你可能会想到array_merage这个函数,如果面试官问你还有其它的方法吗?如果你能答出来还有+这个合并的方法,你就会赢得面试官的好感。如果你还能说出这两种方法的区别,那么你一定会让面试官很满意。有些面试官还会让你枚举出你经常使用到的数组函数,一方面是考验你临场能力,一方面是看你平时写代码是否高效,因为有些人明明php里面已经封装好了数组操作函数,他还自己造轮子,不但效率低下,还有可能产生BUG。总之,平时多夯实基础知识还是很有必要的。
常用算法
这个可以说是大公司必考的内容,要么是基础的排序算法,要么是分治算法,背包算法,路径算法等等。有些人可能会抱怨我会这些算法有什么用,平时用得也少,如果用的时候,网上查找不就行了,笔者之前也是这么认为的,但是后来反思一下,为什么所有大公司都会考呢?那些面试官也是从新人过来的的啊,他们也应该知道这些啊,后来原因被我找到了,那就是算法是考察一个程序员潜力的天平。当你的算法可以轻松应对面试的时候,说明未来工作中你遇到其它问题也是可以迎刃而解的。
数据库优化
这个也是笔者面试了这么多家公司必问的一个问题,他们会问你平时如何优化数据库,对于索引的优化,知道如何分析数据库性能,会问你数据库的事务的应用,还会问你数据库的4种隔离级别,总之,这里会问你很多东西,会问你mysql的B+树的结构,为何采用这种数据结构等等一些列问题,这里笔者推荐《高性能mysql》这本书,看过之后,受益匪浅。
大数据
这个问题也是笔者被问得最多的问题,它里面设计很广,从高并发,到高可用,从服务器到前端,从底层代码到架构,总之,这里的问题基本是给你定级的问题,如果你回答得好的话,你的入职级别或者薪水就会高一些,否则就会低一些或者被拒。这里我主要挑一些主要的问题罗列一下。
1消息队列的使用场景,常用消息队列RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq的区别,还有如何配置它们。
2memcache,redis底层原理剖析,如何使用它们实现高并发,限时抢购等场景的问题解决。
3如何配置集群,集群中的session如何保存等问题。
4有哪些负载均衡解决方案,平时有使用过哪些方案
5微服务和分布式解决方案在生产中如何使用
软件工程
优雅的代码和高可用的代码,还有可扩展的代码一直是我们追寻的目标。要实现这些目标,平时我们就需要在我们的代码中或者设计中使用设计模式,所以设计模式也是必问的一个知识点,同时产品的发布流程,从设计到验收是怎样一步一步上线的,这些都会被问到。
总之,面试大厂要粗中有细,不仅要有广度,更要有深度。知识点要扎实,同时也不能有太多盲点。还有就是可以时不时地去大厂面试一下,不一定去那里工作,但是去那里面试可以让自己的技术不至于落伍。别人总结的再多,也不如自己亲自去体验来的真实,不要怕被拒,大厂一般6个月左右就会更新简历库,你又有机会去面试,此外,大厂各个部门其实沟通是很闭塞的,一个部门被拒,可以面试另一个部门的,我相信经过多次面试,你不仅可以快速掌握经验,更能获得自己满意的offer。