最近公司有新的项目需要招人,HR部门筛选了很多的简历,新的团队还没有找到负责人,便让我来负责技术面试。
我来技术面试一般会先问对方的项目经验,包括项目结构,模块,某个难点或复杂点的实现方式,并且会给时间去思考有没有好的优化方式,比如加快查询和计算的速度,比如提升服务器处理并发的性能,然而,最近几天面试情况下来,发现很多人甚至对自己所做项目的一些基本架构都不了解,并且也不愿意思考优化方案,也许是紧张的不会思考了吧。
接下来我会根据面试人员面试的相关职位对其进行相关的基础知识掌握度进行了解。一般会根据面试者的应聘职位来了解其对相关的技术掌握程度,包括:
●线程的几种实现方式,为什么会有这几种方式,什么情况选择什么方式,线程的wait和sleep哪一个会占用资源等相关问题,
●jvm缓存相关问题,
●jdk各版本的区别,jdk的流计算,
●tomcat配置优化,
●Spring原理,SpringMvc,SpringBoot和SpringCloud实现原理,内置web容器原理,
●分布式事务种类及实现方式,mybates的事务,Spring的事务,阿里开源的分布式事务中间件等,
●SQL查询优化,
●一些数据结构题,
●一些算法题(描述实现思想或在白纸上写出相关代码实现,推荐程序员可以刷LeetCode中的算法题),
●redis相关问题,比如缓存穿透,缓存击穿,缓存雪崩,持久化的几种方式以及不同场景怎么选择持久化方式,某种场景下怎么去使用redis等,
●Zookeeper怎么搭建集群,实现原理,怎么动态添加节点,什么是分布式锁,集群的升级和迁移怎么做,
●某种需求下怎么选择项目相关的架构等,
●微服务怎么搭建集群,怎么注册服务和使用服务,怎么做负载均衡,服务器配置和性能不同的情况下怎么做动态负载均衡等,
●。。。
如果是刚毕业的新人,我只会问基础问题,如果是已经毕业2、3年的后面的架构问题是一定会问的。如果还保持着对技术的浅显使用却不深究内核原理,那么你在互联网寒冬的今天是没有任何竞争力的。如果你想进大公司,好公司,并且在里面茁壮成长保持竞争力,不会因为寒冬被裁,上面各种问题必须要会,如果你想进BAT等顶级公司,只会上面的问题还是远远不够的,必须掌握的更多。
很多程序员抱怨自己没有时间学习,或者没有好的学习渠道,在我看来其实你只是给自己的 懒 找了一个借口,据某部门的统计普通程序员一天的工作时间,只有10%-20%是有效工作时间,其余时间:
●看新闻、刷微博、看小说、玩游戏、
●在技术群和非技术群里面吹牛或者看别人吹牛、
●在各种技术网站找各种牛叉的帖子然后转发或者复制粘贴到自己的博客上、
●看一堆的技术公众号发的各种技术文章,浏览一遍然后点个收藏,甚至不经过思考是否合理是否有用,想着以后有时间再看,然后再也没有看过,还安慰自己是充分利用碎片化时间进行碎片化学习、
这也许是大部分程序员的通病吧,年复一年的搬砖写代码,还自嘲搬砖使我快乐。
有的程序员工作一年能抵别人3-5年经验,有些人却是一年经验重复使用3-5年。在互联网如此发达的今天学习一个技能已经是有很多做的很好的渠道,比如腾讯课堂、网易云课堂、Udacity优达学城等,里面有很多技术大牛在兢兢业业的分享自己的技术心得和各种技术底层原理,如果愿意投入时间,跟着学习是绝对比自己独自摸索来的快。网上也有很多IT知识图谱,上面详细的介绍了各种技术栈,如果想要提升自己的竞争力就跟着上面的清单开始学。因为很多知识图谱上有广告,这里就不贴了,以免有打广告的嫌疑。