面试题中遇到的问题(21)

本文是小编真实的面试题,大致分为5块,以对话形式展开

ps:我把答案都放在解析下面了,我只是知识的搬运工

  1. 设计模式

面试官:你用过什么设计模式?最常用的是那种设计模式

我:最常用的就是连接数据库的jdbc使用的是桥接设计模式,还有javaweb使用的mvc设计模式,controller层用的工厂设计模式,关闭数据库用的代理模式。。。。

面试官:那如果我想在原有的方法上加新的方法,怎么办?

我:可以考虑装饰者设计模式,在原有的方法上做增强,对该方法做扩展,使其更加强大
面试官:

  1. 算法

面试官:常用的算法有什么,会什么

我:关于jvm相关算法,学了可达性分析算法,关于主从数据库,学了raft算法,还有。。

面试官:讲一下可达性分析算法跟raft算法都是干嘛的

我:可达性分析算法:以GC Roots为根节点,向下开始搜索,搜索走过的路径称之为引用链,当一个对象没有被引用链相连时,即为垃圾对象,在执行system.gc的时候会被清理

面试官:为什么不用引用计数算法改用可达性分析算法

我:有,如果有两个对象A,B 当A访问B,B访问A,的时候,他们的计数器一直都为1,不被清除,但是实际上他们已经是垃圾对象了,但是引用计数算法不会将他们视为垃圾对象

面试官:讲一下raft算法

我:在学raft算法前我还学了CAP理论,raft算法就是为了CP而“定制”的算法
CAP理论:
一致性(Consistency):分布式系统中多个主机之间是否能够保持一致性的特性。即,当系统数据发生更新操作后,各个主机中的数据仍然处于一致的状态
可用性(Availabillity):系统提供的服务必须一直处于可用的状态,即对于用户的每一个请求,系统总是可以在有限的时间内对用户做出响应
分区容忍性(Partion tolerance):分布式系统在遇到任何网络分区故障时,仍能保证对外提供满足一致性和可用性的服务。对于分布式系统,网络环境是不可控的,出现网络分区是不可避免的,因此系统必须具备备份分区容错性。但其并不能同时保证一致性与可用性
Raft算法(CP):是一种非常易于理解的分布式共识算法。Raft算法可以保障分布式系统数据的强一致性,解决分布式容错系统的共识问题。在容错性与性能表现方面等同于老牌复杂的paxos共识算法

面试官:下一题

  1. mysql

面试官:说说MySQL索引的底层数据结构
我:首先他底层是个是一个B+树
B+树有三个优点:
1. B+树是个平和N叉树,其每个节点下面可以有多个子节点
2. B+树的叶子节点(最下面的节点没有子节点的节点)是一个双向链表(每个节点存储了值,上个节点的地址值,下个节点的地址值),目的是为了方便查找,不用从根节点找起
3. B+数的叶子结点有个data数据(就是数据库中的字段数据)
面试官:阿尔法狗是用二叉树替换N叉树的,为什么mysql用的是B+数
我:阿尔法狗之所以用二叉树,他采用的是左孩子右兄弟法则,用时间换空间,mysql为数据库,当然希望更快的搜索出数据,所以采用的是B+树,用空间换时间
面试官:那怎么优化mysql呢?
我:建立索引,就像给他们加上了目录
面试官:怎么加?
我:就是把经常要用到的查询条件的字段建立一个联合索引,这样用一个索引树可以将多个字段建立索引
面试官:下一题

  1. springboot

面试官:简述springboot

我:springboot有很多优点比如
他能够快速开发spring应用的框架
他自带了tomcat,不需要单独安装容器,jar包直接就是一个web应用
简化maven配置,用parent这种方式,一站式引入需要的各种依赖
基于注解的零配置思想,约定大于配置
和各种流行框架,spring web mvc,mybatis,spring cloud无缝整合

面试官:下一题

  1. springcloud

面试官:试着讲一下框架的演变史

我:
1. 是集中式框架,适合流量小的应用,将所有功能部署在一起,节约成本
在这里插入图片描述

优点:
系统开发速度快
维护成本低
适用于并发要求较低的系统
缺点:
代码耦合度高,后期维护困难
无法针对不同模块进行优化
无法水平扩展
单点容错率低,并发能力差
2. 垂直拆分,当访问量增大的时候,单一应用无法满足需求的时候
在这里插入图片描述
优点:
系统拆分实现了流量分担,解决了并发问题
可以针对不同模块进行优化
方便水平扩展,负载均衡,容错率提高
缺点:
系统间相互独立,会有很多重复开发工作,影响开发效率
3. 分布式服务,当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式调用是关键。
在这里插入图片描述
优点:
将基础服务进行了抽取,系统间相互调用,提高了代码复用和开发效率
缺点:
系统间耦合度变高,调用关系错综复杂,难以维护
4. 服务治理(SOA)面向服务的架构:它是一种设计方法,其中包含多个服务, 服务之间通过相互依赖最终提供一系列的功能。一个服务通常以独立的形式存在于操作系统进程中。各个服务之间通过网络调用。
在这里插入图片描述
SOA缺点:每个供应商提供的ESB产品有偏差,自身实现较为复杂;应用服务粒度较大,ESB集成整合所有服务和协议、数据转换使得运维、测试部署困难。所有服务都通过一个通路通信,直接降低了通信速度。
5. 微服务架构是使用一套小服务来开发单个应用的方式或途径,每个服务基于单一业务能力构建,运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API,并能够通过自动化部署机制来独立部署。这些服务可以使用不同的编程语言实现,以及不同数据存储技术,并保持最低限度的集中式管理。
在这里插入图片描述
微服务的特点:
单一职责:微服务中每一个服务都对应唯一的业务能力,做到单一职责
面向服务:面向服务是说每个服务都要对外暴露服务接口API。并不关心服务的技术实现,做到与平台和语言
无关,也不限定用什么技术实现,只要提供REST的接口即可。
自治:自治是说服务间互相独立,互不干扰
团队独立:每个服务都是一个独立的开发团队。
技术独立:因为是面向服务,提供REST接口,使用什么技术没有别人干涉
前后端分离:采用前后端分离开发,提供统一REST接口,后端不用再为PC、移动段开发不同接口
数据库分离:每个服务都使用自己的数据源

面试官:简述你用过的springcloud中的组件
我:Elasticsearch分词器组件
简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的检索数
据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。ES使用Java开发。Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。还有。。。。(没说完)
面试官:非常不错,面试通过了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

今晚不想睡沙发

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

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

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

打赏作者

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

抵扣说明:

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

余额充值