金三银四,跳槽,你准备好了么?

金三银四,正是换工作的热点时期,你蠢蠢欲动了么?反正我是动了。

前些天同事刚帮我把简历内推到一家某在线教育上市公司,昨天中午刚吃完午饭准备午休之际,对方公司就来电进行电话面试了,在毫无准备的情况之下,面试可想而知是有多么的糟糕了,问的一些问题大部分都没答上来。不过,咱也不气馁,就当是一次收集面试的经历了。

以下是这次面试问的问题,以及我后来找出的一些答案解析,希望对你有所帮助。

图片

1、问:RabbitMQ如何保证消息的100%投递,也是说如何保证消息不会丢?

图片

答:此问题要分三个角度回答。MQ服务器端:接受到消息会持久化到磁盘中;生产者:保证消息一定能发送到MQ服务器,通过ACK确认机制,把消息持久化到数据库或是缓存中。若消息发送失败,可以进行补偿;消费者:成功消费消息后,通过ACK确认机制,通知MQ,MQ会立即删除此消息(注意:RocketMQ和Kafka不会立即删除,而是通过偏移量消费下一条消息。 )

2、问:Redis分布式锁会出现死锁情况吗?

答:不会,因为通常使用分布式锁的话都会设置过期时间。

3、问:看你项目里用了MongoDB,说说MongoDB的集群方式有哪些?

答:MongoDB 有三种集群部署模式,分别为主从复制(Master-Slaver)、副本集(Replica Set)和分片(Sharding)模式。

  • Master-Slaver 是一种主从副本的模式,目前已经不推荐使用。

  • Replica Set 模式取代了 Master-Slaver 模式,是一种互为主从的关系。Replica Set 将数据复制多份保存,不同服务器保存同一份数据,在出现故障时自动切换,实现故障转移,在实际生产中非常实用。

  • Sharding 模式适合处理大量数据,它将数据分开存储,不同服务器保存不同的数据,所有服务器数据的总和即为整个数据集。

4、问:了解JVM内存结构吗?(请注意,Java 内存模型(JMM)和 JVM 内存结构真不是一回事,这里特别容易混淆)

图片

答:JVM 内存结构,描述的是线程运行所设计的内存空间,分为5个区域,其中线程独占的区域是栈、本地方法栈、程序计数器,线程共享的区域是堆、方法区。

  • Java 内存模型,描述的是多线程允许的行为,Java内存模型规定了变量的访问规则,保证操作的原子性、可见行、有序性。

5、问:JVM的垃圾回收器有哪些?

图片

答:Serial、SerialOld、ParNew、CMS、ParallelScavenge、ParallelOld、G1。

6、问:MySQL的联合索引,A、B、C三个字段,AB能命中索引吗?AC能命中吗?说说索引的数据结构及实现原理?

答:AB能命中索引,AC也能命中索引,BC不能命中索引,因为组合索引遵循最左匹配,如果其中有字段是范围查询,那么:命中的字段只会到范围查询那个字段。MySQL索引的数据结构是B+树,实现原理:其数据本身就是索引文件,树的叶节点data域保存了完整的数据记录。在搜索主索引时,直接找到Key所在的节点就可以取出数据;在根据辅助索引查找时,则需先取出主键的值,在走一边主索引。因此,在设计表的时候,不建议使用过长的字段作为主键。

7、问:SpringCloud中Fegin的调用原理?

答:

  • 主程序入口添加了@EnableFeignClients注解开启对FeignClient扫描加载处理。根据Feign Client的开发规范,定义接口并加@FeignClient注解。

  • 当程序启动时,会进行包扫描,扫描所有@FeignClients的注解的类,并且讲这些信息注入Spring IOC容器中,当定义的的Feign接口中的方法呗调用时,通过JDK的代理方式,来生成具体的RequestTemplate.当生成代理时,Feign会为每个接口方法创建一个RequestTemplate对象,该对象封装可HTTP请求需要的全部信息,如请求参数名,请求方法等信息都是在这个过程中确定的。

  • 然后RequestTemplate生成Request,然后把Request交给Client去处理,这里指的时Client可以时JDK原生的URLConnection,Apache的HttpClient,也可以时OKhttp,最后Client被封装到LoadBalanceClient类,这个类结合Ribbon负载均衡发器服务之间的调用。

8、问:单点登录的实现原理是什么?

答:相比于单系统登录,sso需要一个独立的认证中心,只有认证中心能接受用户的用户名密码等安全信息,其他系统不提供登录入口,只接受认证中心的间接授权。间接授权通过令牌实现,sso认证中心验证用户的用户名密码没问题,创建授权令牌,在接下来的跳转过程中,授权令牌作为参数发送给各个子系统,子系统拿到令牌,即得到了授权,可以借此创建局部会话,局部会话登录方式与单系统的登录方式相同。

已上就是这次面试的主要内容了,如果本文对你有帮助,不要忘了收藏点赞支持一下。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java升级之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值