今天和大家分享一次面试经历,希望可以对还在找工作的朋友们提供一点查缺补漏的方向。
先说下面试的整体情况吧:这次面试的是一家教育培训的准上市公司,公司环境还不错,对待面试者态度也挺好的,带进一个小会议室,桌上还配置了企业的宣传手册,看的出来,该公司对企业文化的建设还是挺重视的。面试的过程中,面试官也挺耐心的,还会引导你答题的方向。不过,由于自己回答得不是特别理想,没能打动面试官,面试结果也就只能回去等通知了。
面试嘛,重要的是过程,结果就看缘分吧。毕竟开发工作当中大部分都是业务操作,很少会关注其底层原理,但是面试当中主要都是考察技术原理实现,所以我总结了一下这次面试主要问的一些问题及解析:
SpringCloud用过吧,说说都有哪些组件?
答:服务发现与注册(Eureka),负载均衡(Ribbon),服务调用(Feign)、熔断器(Hystrix)、配置中心(Config)、网关(Zuul)
熔断器Hystrix的原理是什么?平时工作上具体是怎么用的?
答:“ 断路器 ” 本身是一种开关装置,当某个服务单元发送故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或抛出调用方无法处理的异常,这样就保证了服务调用方的线程不会被长时间、不必要地占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。
工作中的用法:
1、通过feign客户端调用服务,可以使用feign内置的Hystrix功能,注意需要在配置文件中需要开启此功能。另外需要写实现类来继承你的Feign客户端,并且实现相应接口,实现的内容就是发生异常时你需要处理的流程,也就是熔断机制。
2、通过注解方式,@HystrixCommand注解是方法级别的,在你需要捕获的方法上加上注解。
SpringIOC有哪些实现方式?
答:基于注解注入、构造方法注入、setter方法注入
SpringAOP是什么?有哪些应用场景?
答:AOP是面向切面思想,有两种方式实现:Jdk动态代理和Cglib动态代理。通常应用在权限校验、日志记录、统计等场景
SpringBoot的自动装配原理是什么?
答:springBoot启动的时候,通过AutoConfigurationImportSelector类,从类路径下的spring.factories中获取EnableAutoConfiguration指定的值(各种xxxAutoConfiguration),以全类名反射的创建方式,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作。
说一说Mybatis的一级、二级缓存的原理?
答:1)一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该 Session 中的所有 Cache 就将清空,默认打开一级缓存。
2)二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap 存储,不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如 Ehcache。默认不打开二级缓存,要开启二级缓存,使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置 <cache/> ;
3)对于缓存数据更新机制,当某一个作用域(一级缓存 Session/二级缓存Namespaces)的进行了C/U/D 操作后,默认该作用域下所有 select 中的缓存将被 clear。
Mybatis的一对多是怎么做的?
答:有联合查询和嵌套查询。联合查询是几个表联合查询,只查询一次,通过在resultMap里面的collection节点配置一对多的类就可以完成;嵌套查询是先查一个表,根据这个表里面的 结果的外键id,去再另外一个表里面查询数据,也是通过配置collection,但另外一个表的查询通过select节点配置。
Redis的数据结构有哪些?
答:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合)
最后,给大家准备了一点小福利,有需要的可以关注领取喔!
扫描下方二维码关注公众号,回复:面试题,即可免费领取相关面试题目。