面试背八股文真的重要吗?

        我相信大家总开玩笑的说面试造火箭,工作拧螺丝。觉得八股文只是为了应对面试官,进去了你肯定用不上。其实怎么说呢,这东西就像书到用时方恨少。如果公司业务趋于平稳,或者没有什么挑战性的项目,也不追求性能啥的确实像底层知识这些可能确实没啥用,但是职业生涯中总会遇到一些需要你"头脑风暴"一下的。

        小编其实也才工作两年不到,这边文章也主要是给一些刚入行的兄弟们谈谈自己一些看法。比如我们常常会面试问道mysql除了最基础ACID,还会问一些索引,索引的数据结构,索引的分类,引擎,日志文件的作用,mysql的缓存等等一些原理。其实这些我觉得实用性挺大的。比如索引,如果你不了解索引的作用以及原理,那么你写sql的性能肯定会打折扣。就举一些常用的例子,主键为什么要自增,为什么不使用uuid?我们现在的mysql一般都是使用的innerdb引擎,而聚簇索引就是主键自增的时候创建的,走聚簇索引的时候查询是最快的。这也是为什么建议更新和查询详情的时候只用主键id作为条件。我们还有普通索引,聚簇索引,唯一索引等,为什聚簇索引快,只有了解了各个索引的作用和效率我们在创建索引的时候才会选择最优解,也只有了解了索引的数据结构才知道怎样的数据会影响到性能,再着我们执行sql的有时候会发现第一次执行效率比较慢,后面执行就比较快了,这就是缓存起了作用,而且缓存不仅仅对查询有用,其实更新也是先更新缓存,在通过日志文件刷到磁盘,那这里就要了解个个日志文件的作用。这里就不细讲了。

        除了mysql,还有java本身相关的,比如jvm。如果我们不去了解jvm原理和一些相关命令,排查工具,那么遇到内存报警,gc频繁的时候就会不止所错,小编也是经常晚上受到公司服务器报警,这是头疼的一c。再来看基础必问的集合,什么集合的原理,数据结构,时间复杂度啥的的肯定都被问过,但是时间工作中可能也就hashmap,list这些用的比较多了,发现知道原理这些没啥用,其实也有用的,就比如时间复杂度,比如我们会在一个循环中使用集合的contains方法来进行判断,Arraylist的contains方法的时间复杂度就是O(n),hashset的时间复杂度大多数都是oO1),最低也是O(log n),所以集合数量过大的时候可以将list集合转成set,虽然转换一次也是O(n),但是也比在循环里面变成O(n2)要好。

        再来谈多线程,这也是基础必问,如果不连接线程池的核心参数什么意思,以及线程池的运行流程,那么自己再创建线程池的时候可能就不知道怎么设置参数,比如核心线程数,最大线程数根据实际业务场景该怎么设置。设置多了占用内存,设置少了效率又起不来。

        然后就是spring全家桶,这个相信大家接触的比较多,spring就需要了解创建对象到销毁的过程,spring到底是怎么管理对象的,这点可以通过spring的refresh()方法去了解流程。为什么要说这个呢,小编这个公司用的是自己的rpc,web框架,自己自研的一套云平台,再看源码的过程中发现引入的spring的包,最底层对象的管理就是直接用的spring的refresh()方法,包括一些前置处理后置处理,设计模式其实都是差不多的,包括es所使用的lucene搜索引擎里面的流程都是相通的。所以知道原理还是有很大帮助的。

        

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值