作者:木舟遥
链接:https://www.nowcoder.com/discuss/165558答案部分原作者,小编整理修改
二面是真的难 都不问你基础知识 大三暑期实习 中午11点视频面试 没让写代码(30min) 下面的回答是当时的回答,不是准确答案哈~
1、自我介绍
2、说下项目,主要用了什么技术?
3、如果现在让你改进项目的话你会怎么做? 可以先把mysql数据库用docker改进为PXC集群,用haproxy进行负载均衡,在后端用redis集群,nginx负载均衡,再到后期的话可以采用分布式dubbo+zookeeper。
4、zookeeper用过吗?怎么实现的? 有了解过没用过,答得很浅,只回答了数据的同步、锁相关,节点下有一个版本序列进行控制。 详情: https://blog.51cto.com/13732225/2177083
5、集群要考虑什么? 要考虑节点承受不住太多数据而宕机的情况,因此要进行负载均衡进行分配请求等等。。。答得不是很深 供参考: https://www.cnblogs.com/kevingrace/p/6031392.html
6、负载均衡都有那些算法呢?
7、BIO和NIO的区别? 这个很简单,推荐一个简单理解的博客: https://blog.csdn.net/skiof007/article/details/52873421
8、select和epoll的区别? NIO虽说是非阻塞的但其实select还要轮询去等待获取消息,epoll是让内核去处理再通知它就行了,这点答得很浅而且不太准确,没从底层去答,因为底层实在不太了解。 总结: https://www.cnblogs.com/Anker/p/3265058.html
9、你用redis做过什么呢,有什么优点呢? 做过分布式的锁和后端的redis集群。
10、你在后台用nginx进行集群的负载均衡,那新加一个节点怎么保证数据一致?谈谈一致性哈希算法,会产生什么问题? 各个节点形成一个封闭环,数据顺时针加入离它最近的节点里balabala。。。还提到了数据倾斜的问题,设置虚拟节点就好了。
11、了解过微服务吗? 了解过一点,像分布式那样,不过拆分的粒度更小了,每个业务都单独地拆分出来,降低了耦合性。
12、用过什么设计模式吗? 单例模式、工厂模式、模板方法模式(竟然忘了说代理模式了我对动态代理的源码还是比较了解的。。。)
13、工厂模式怎么用的?有什么优点? 轻松看懂java设计模式简单工厂模式
14、谈谈IOC和AOP 面试被问烂的 Spring IOC(求求你别再问了)
15、刚才谈AOP的时候提到了事务,那你说说mysql的事务特性都有什么? ACID 原子性、一致性、隔离性、持久性 大致解释了一下
16、你做项目时遇见过数据库查询缓慢吗?当时是什么原因怎么解决的? 刚开始有表设计方面问题,之后又发现在联合查询时没用到索引。
17、如果你表里有一亿条数据怎么去有效的查询数据? (当时有点小懵,按理说不应该问索引引擎方面的问题吗?)答了mysql的分表,水平拆分和垂直拆分大致说了一下 这篇文章很好: http://www.cnblogs.com/lonelyxmas/p/3632020.html
18、除了分表还有其他方式吗?有用过大数据吗?了解过ai吗? (这才知道想问的是大数据)表示没学过大数据,但很愿意去学,因为大数据好多也是基于java的,之后肯定会学的。至于ai,之前课程里有用python写过一点很浅的东西,但深层次的不太了解
19、出个逻辑题啊,一个5L杯子一个6L杯子从河里取水,怎么得到3L水? (有点猝不及防)让我想一下啊。。。过了10s左右。。。嘴里嘟囔着先考虑这种情况,先用6L的取满水倒5L杯子里,6L的就剩1L,再把5L的倒掉,再把6L剩余的倒5L杯子里面。。。(说着说着就畅快了,仿佛抓住了希望的那种感觉)
到了最后面试官很急地挂了,没问我有啥想问他的。。。心里凉了半截 因为好多高级的知识只答了个大体,好多细节底层实现都没说,大数据也不会。。。现在状态还一直在复试中没有更新。。。 感觉凉了一半,就怕突然变灰。