作者:木舟遥
链接: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、负载均衡都有那些算法呢?
- 随机:负载均衡方法随机的把负载分配到各个可用的服务器上,通过随机数生成算法选取一个服务器,然后把连接发送给它。虽然许多均衡产品都支持该算法,但是它的有效性一直受到质疑,除非把服务器的可运行时间看的很重。
- 轮询:轮询算法按顺序把每个新的连接请求分配给下一个服务器,最终把所有请求平分给所有的服务器。轮询算法在大多数情况下都工作的不错,但是如果负载均衡的设备在处理速度、连接速度和内存等方面不是完全均等,那么效果会更好。
- 加权轮询:该算法中,每个机器接受的连接数量是按权重比例分配的。这是对普通轮询算法的改进,比如你可以设定:第三台机器的处理能力是第一台机器的两倍,那么负载均衡器会把两倍的连接数量分配给第3台机器。
- 动态轮询:类似于加权轮询,但是,权重值基于对各个服务器的持续监控,并且不断更新。这是一个动态负载均衡算法,基于服务器的实时性能分析分配连接,比如每个节点的当前连接数或者节点的最快响应时间等。
- 最快算法:最快算法基于所有服务器中的最快响应时间分配连接。该算法在服务器跨不同网络的环境中特别有用。
- 最少连接:系统把新连接分配给当前连接数目最少的服务器。该算法在各个服务器运算能力基本相似的环境中非常有效。
- 观察算法:该算法同时利用最小连接算法和最快算法来实施负载均衡。服务器根据当前的连接数和响应时间得到一个分数,分数较高代表性能较好,会得到更多的连接。
- 预判算法:该算法使用观察算法来计算分数,但是预判算法会分析分数的变化趋势来判断某台服务器的性能正在改善还是降低。具有改善趋势的服务器会得到更多的连接。该算法适用于大多数环境。
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、工厂模式怎么用的?有什么优点?
balabalabala。。。。。。
14、谈谈IOC和AOP
balabalabala。。。(又忘说底层的动态代理和反射了)
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杯子里面。。。(说着说着就畅快了,仿佛抓住了希望的那种感觉)
到了最后面试官很急地挂了,没问我有啥想问他的。。。心里凉了半截
因为好多高级的知识只答了个大体,好多细节底层实现都没说,大数据也不会。。。现在状态还一直在复试中没有更新。。。
感觉凉了一半,就怕突然变灰。