前奏
前几天Hr给了我一份简历,说来应聘资深java开发让我面一下。我打开简历一看,满脸问号,24岁!?资深java开发!?我这小小的高级开发不敢面呀[手动狗头]简历给错了吧。跟hr简单再三确认是资深java开发之后,简历没有错,应聘岗位也没有错。我内心那是慌得一批,怕对面来了个王者,吓得我瑟瑟发抖。
24岁java程序员,竟然来我司应聘资深java工程师,直击面试全过程面试开始
下面就称呼面试者为呆萌同学
我:XX同学你好,先坐下自我介绍吧。
呆萌同学:好的,我是xx年毕业于东北xx大学英语专业,大学期间我是计算机社团的社长,从小对计算机比较感兴趣。在大二期间就开始做项目了,算上实习期目前为止大概有4年工作经验.....巴拉巴拉(后面的我没记住,都是不重要的,建议大家在做自我介绍的时候可以简单介绍下自己的背景,重点说一下自己的技术栈,有开源项目的当然更好,主要是多说一些关于技术方面的东西,这样面试官才有兴趣听下去。自我介绍一般2~3分钟就可以了,不要占用面试的太长时间。 )
我:好的,大概了解了。简单的介绍下你最近的项目吧。
呆萌同学:嗯。最近的是一个p2p项目,我主要参与了抢购活动的后端开发工作。整体项目是用的SpringCloud微服务架构,用redis做缓存,巴拉巴拉...(其实这个环节,大家在回答的时候要着重介绍下自己参与或者独立完成了****那些****功能,使用了什么设计模式,用到了那些技术,方便面试官可以基于你上面的回答展开往下讨论)
我:嗯,不错。上面你说到你们用了redis做分布式锁,那你有没有想过为什么用redis做分布式锁呢?它会有什么样的风险。你们是如何规避这个风险的呢?
呆萌同学:redis对于应用来说,是单线程的。不管有多少应用来请求redis,它只会一个一个的顺序执行,所以当应用服务来抢锁的时候,只会有一台服务抢到了锁资源,其他服务没有抢到的话可以选择轮询或者放弃抢锁。(分布式锁其实是一个挺重要的知识点,可以展开讨论,建议面试者要有充足的准备去征服面试官。比如说redis、zk、和数据库锁他们都可以作为分布式锁,他们也有各自的优缺点和风险点,如何规避,要考虑他们各自的****适用****场景)
我:嗯,不错,那你了解过它有什么缺陷么?或者说你有了解过其他的分布式锁实现方式么?呆萌同学:redis分布式锁的缺陷...没了解过,不过我知道ZooKeeper,它是基于watch机制,实现一个临时有序的节点列表,获取最小节点的那个服务拥有有锁。我还知道redis的 redLock。我:嗯不错,咱们继续下一个话题。你用java这么多年了,肯定用户HashMap吧,有深入了解过么?呆萌同学:HashMap底层就是数组加链表嘛。
我:那具体点呢?比如说HashMap的put 方法有看过源码么?它的扩容机制了解过么?
呆萌同学:额... 这个没了解过。(HashMap 和 ConcurrentHashMap 面试之前是需要重点准备的,常用的数据结构都要大概过一遍)
我:好吧,那你了解过线程安全么?解释下什么情况下会发生线程不安全。
呆萌同学:额...这个,是不是volatile呀。
我:不是的,volatile 的作用是禁止指令重排序、每次访问变量时去内存中读最新的值,仅此而已。它只是java并发编程的一个知识点,建议可以去看下多线程情况下i++ 这个经典场景。
呆萌同学:好的,谢谢
我:咱们继续下一个话题,mysql用的多吧,InnoDB了解么?它的存储结构是啥呀的呀?索引类型知道么?
呆萌同学:mysql还是比较常用的,InnoDB是mysql的默认存储引擎嘛,存储结构的话我不怎么了解。索引类型就是唯一索引、普通索引、和全文索引嘛。索引方法的话就是B+锁 和 Hash索引嘛。
我:不错,那你知道InnoDB的B+树索引结构嘛?它跟Hash索引的区别是啥?
呆萌同学:额...这个没有了解过。
我:好的,那XX同学,咱们今天的面试就到这里啦。
24岁java程序员,竟然来我司应聘资深java工程师,直击面试全过程面试结束
整个面试大概40分钟左右,其中很多已经记不住了。结局就是这位同学面试没有通过,各位看到这里其实应该也明白了,这位同学其实从面试情况来看平时应该是参与了不少开发的工作(上面问项目的时候其实问了不少,好几天了,我都忘了问的啥了)。但可惜的是,平时在开发过程中思考的太少了。当你准备用一个技术的时候,一定要先了解它,知道它的风险点在哪里,能不能解决,不能解决有没有可替代方案,有没有其他方案也能实现,对比下他们的优缺点,以及实现代码复杂度都要对比一下,只有这样才能写出优雅的代码。
面试准备建议
建议大家在面试的时候至少要准备以下知识点,各位大侠可以在评论区补充。非常推荐大家看一些书,这样学习是最快的,而且知识也是成体系的。
24岁java程序员,竟然来我司应聘资深java工程师,直击面试全过程java多线程方面:要很清楚的对线程池有一个了解,线程是怎么在池子里流转的,创建线程池的必要参数是啥,线程池的拒绝策略都有哪些,有界队列和无界队列的区别,他们对于的是哪个类。什么是线程安全,java的线程模型是啥,怎么让一个线程有返回值,线程内抛出异常了怎么办,ThreadLocal实现原理。其实就问什么是线程安全 ,这道题很多同学都不一定答得上来(线程池非常重要,web容器的入口就是一个线程池,数据库访问层也是由线程池来控制的,很多优秀的中间件也都用了线程池。线程池是一个总体把控应用并发能力的入口)
java基础方面:基本常用的数据结构一定要知道,ArrayList,LinkedList,HashMap,ConcurrentHashMap像这些经典的数据结构就不用我说了吧,static final volatile 这些关键字深入了解一下,内容也就那么多。Jvm方面:Jvm的分区就不多说了,网上一大堆资料。这里着重准备下gc相关的内容。基础的垃圾回收算法,CMS垃圾收集器,G1垃圾收集器 他们都是怎么玩的,优缺点在哪。关于Jvm调优的可以去知乎上搜索一下,有一些很不错的文章。
中间件数据库方面:剩下的主要是 redis、Mq、mysql。redis 要知道都有哪些数据结构,可不能只说出5种就完事儿了,redis的高可用都有哪些,这里有一个经典面试题就是:redis为啥会这么快?。常用的Mq要先去大概的了解一下,然后要有自己擅长的一个可以着重去说,比如他们的高可用架构,使用Mq的时候要考虑哪些风险点,为什么要使用Mq。Mysql的话InnoDB是一定要深入了解下的,索引类型、索引方法、事物隔离级别、锁,这些都是面试当中高频出现的。MyISAM也要了解一下,它跟InnoDB的区别是啥,使用场景是啥,为啥需要事物。
框架方面:Spring问的还是比较多,比如说Spring的Bean生命周期,Spring是如何解决循环依赖的,SpringMVC的请求调用流程(这个自己要能画出图来)。SpringBoot的启动流程,SpringCloud Ribbon的负载均衡策略,Netty也要了解下,Bio、Nio、Aio 都要了解下。TCP/IP协议 HTTP协议都要有深刻的理解。
最后小编整理了一套技术资料,希望出去面试的同学,你们都有充足的准备,吊打面试官。加油,奥利给!
24岁java程序员,竟然来我司应聘资深java工程师,直击面试全过程海量电子书,珍藏版
24岁java程序员,竟然来我司应聘资深java工程师,直击面试全过程JAVA核心面试题库(1000+题)
24岁java程序员,竟然来我司应聘资深java工程师,直击面试全过程JAVA常见面试题库(3000+题)
24岁java程序员,竟然来我司应聘资深java工程师,直击面试全过程程序员简历模板(230份)
这里也给大家一些大佬们的简历模板,可以让你在面试官那里大大加分(已分类整理,这里仅作为学习之用,分享给大家)
24岁java程序员,竟然来我司应聘资深java工程师,直击面试全过程以上资料领取步骤
1、加微信获取
1892324-20200408173704995-149739833.png
网友评论