手记

面试回答问题的小套路

2018-03-29 08:55:109599浏览

若鱼1919

2实战 · 7手记 · 1推荐

先把结论抛出来,如果感觉有道理就继续往下看,如果不认同就省了浪费时间了:(1)面试回答问题不是做选择题,更不是做判断题,面试回答的问题全都是需要展开回答的作文题;(2)要引导面试官往你自己会的题目上问问题,切忌就问题回答问题;(3)首先要分析问题,然后再提出解决的方案。

举一个栗子

问:单例模式哪一种实现效率高?

错误的回答:静态内部类延迟加载效率高,或者:DCL效率高。

正确的回答:单例模式有很多种实现方式,第一种是直接new一个单例做为类的static成员,这种方式的好处是简单,而且没有线程安全问题,缺点是无论单例是否被使用到,都要做实例化,假如没有使用到就会浪费了。第二种是。。。,优点是。。。,缺点是。。。,第三种。。。。。

解析:我们一开始就说了,面试不是让你做选择题,对于这个问题来说,你应该去分析有多少种实现方式,然后说明每一种的优缺点,答案自然而然就出来了。

再举一个栗子:

什么是AOP?Spring中为啥要引入AOP或者AOP有什么好处?

错误的回答:AOP就是面向切面编程。引入AOP可以提高代码的可读性和可维护性。

正确的回答:AOP简单了说就是在目标方法执行前可以自定义一些操作,在方法执行中或者执行后也可以自定义操作,所以,一般都是基于代理模式来实现,Spring支持两种代理模式,jdk原生的代理和cglib代理。

AOP可以给程序带良好的扩展性和封装性,可以实现业务代码与非业务代码的隔离。比如:可以在不改变目标代码的前提下,实现目标方法的增强,比如做方法执行时间监控,记录方法访问日志,再比如:数据库的connection.close()默认是把连接关闭掉,但是数据库连接池的场景中,为了不改变用户的使用习惯,一般调用close的时候是把连接重新放回到池中,这是因为从数据库连接池中拿到的连接实际上是原生连接的一个代理类,所以内部把close给重写了。实际上代理模式的优点实际上也是AOP的优点。

解析:面向切面编程是什么鬼?单纯的解释字面意思没有任何意义!你得分析通过问这个问题的他想考察你什么,我们这么回答首先说出了AOP的实现方式,还说了如何使用,还说了代理模式。面试官很有可能会接着问:那你说说JDK的代理和Cglib代理有啥区别?或者会问:除了代理模式,你还知道哪些设计模式?成功引出新的话题。这就是我们一开始说的,要引导面试官问你会的话题。

最后再举一个栗子

问:秒杀的场景下,如何解决库存超卖问题?

错误的回答:通过加分布式锁,通过数据库的乐观锁。。。

正确的回答:秒杀场景下,并发会特别的大,有两种情况会导致库存卖超:(1)一个用户同时发出了多个请求,如果库存足够,没加限制,用户就可以下多个订单。(2)减库存的SQL上没有加库存数量的判断,并发的时候也会导致把库存减成负数。对于(1)前端加验证码,防止合法用户快速点鼠标同时发出多个请求,在后端的miaosha_order表中,对user_id和goods_id加唯一索引,确保就算是刷接口一个用户对一个商品绝对不会生成两个订单。对于(2)需要在扣减库存的SQL上加上库存数量的判断,只有扣减库存成功才可以生成订单:

秒杀相关的话题可以学习秒杀这门实战课:链接描述

解析:首先要分析问题的原因,然后再给出解决方案,不要上来就怎么怎么样,连问题都不清楚,谈何解决啊!

以上简单说了下面试回答问题的一些小思路,希望对求职路上的同学有所帮助。当然打铁还需自身硬,只有技巧没有真本事一样无法获得自己心仪的工作,代码撸起来吧,小伙伴们!

48人推荐
随时随地看视频
慕课网APP

热门评论

若鱼老师你好,update miaosha_goods set stock_count = stock_count - 1 where goods_id = #{goodsId} and stock_count > 0这个sql语句是会让库存不会扣成负的,但是也不会导致事务回滚,也就是会造成订单和秒杀订单创建成功,但是库存却没有扣减这个bug

若鱼老师,您的这篇手记太给力了。今天面试问到了,并发情况下的,库存超出,如何解决。参考您的手记,并加上自己的回答,顺利回答,谢谢您

查看全部评论