三面美团终拿offer,分享面试题:Spring,java基础入门第二版课后题答案

  • 隔离性 (isolation): 一个事务执行的过程中,不应该受到其他事务的干扰

  • 持久性(durability) : 一个事物一旦提交,它对数据库的改变就是永久的

9、Spring事务七个传播特性(七种面试说一两个即可)

  • Propagation.REQUIRED (默认) 面试必须说出来这个。调用方已经存在事务,则加入到同一个事务中运行,否则,自启一个事务

  • Propagation.REQUIRES_NEW。无论何时自身都会开启新事务

  • Propagation.SUPPORTS。调用方存在事务,则加入到同一个事务中运行,若不存在事务,则以非事务的方式运行

  • Propagation.NOT_SUPPORTED。调用方存在事务,则会被挂起,直到被调用方运行完毕后,事务恢复。

  • Propagation.MANDATORY。调用方存在事务,则加入到同一个事务中运行,若不存在,则抛出异常

  • Propagation.NEVER。调用方存在事务,则抛出异常

  • Propagation.NESTED。若调用方存在事务,则运行一个嵌套事务,若调用方不存在事务,则以Propagation.REQUIRED的方式运行,即开启一个新的事务

10、简述Spring Bean的生命周期

实例化、初始化、使用、销毁。

关键词:BeanFactoryPostProcessor 、BeanPostProcessor 、init-method/destroy-method

[图片上传失败…(image-b401f-1611732924344)]

第二部分. Dubbo面试专题

======================================================================================

1、Dubbo的容错机制有哪些?

Dubbo官网提出总共有六种容错策略

  • Failover Cluster模式:失败自动切换,当出现失败,重试其它服务器。(默认)

  • Failfast Cluster:快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。

  • Failsafe Cluster:失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。

  • Failback Cluster:失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。

  • Forking Cluster:并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过forks=”2”来设置最大并行数。

  • Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错。(2.1.0开始支持)通常用于通知所有提供者更新缓存或日志等本地资源信息。

总结:在实际应用中查询语句容错策略建议使用默认Failover Cluster,而增删改建议使用Failfast Cluster或者使用Failover Cluster(retries=”0”)策略防止出现数据重复添加等等其它问题。建议在设计接口时候把查询接口方法单独做一个接口提供查询。

2、使用dubbo遇到过哪些问题?

增加提供服务版本号和消费服务版本号

这个具体来说不算是一个问题,而是一种问题的解决方案,在我们的实际工作中会面临各种环境资源短缺的问题,也是很实际的问题,刚开始我们还可以提供一个服务进行相关的开发和测试,但是当有多个环境多个版本,多个任务的时候就不满足我们的需求,这时候我们可以通过给提供方增加版本的方式来区分.这样能够剩下很多的物理资源,同时为今后更换接口定义发布在线时,可不停机发布,使用版本号.引用只会找相应版本的服务,例如:

 

image.png

第三部分. Redis专题

====================================================================================

1.什么是Redis?

答:Remote Dictionary Server(Redis)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

2.Redis的特点什么是?

  • 支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基数估算)

  • 支持持久化操作,可以进行aof及rdb数据持久化到磁盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失的手段。

  • 支持通过Replication进行数据复制,通过master-slave机制,可以实时进行数据的同步复制,支持多级复制和增量复制,master-slave机制是Redis进行HA的重要手段。

  • 单进程请求,所有命令串行执行,并发情况下不需要考虑数据一致性问题。

3.Redis数据类型有哪些?

答:

  • String(字符串)

  • Hash(hash表)

  • List(链表)

  • Set(集合)

  • SortedSet(有序集合zset)

4. Redis的配置以及持久化方案有几种?

答:以下两种

  • RDB方式

  • AOF方式

第四部分. Zookeeper专题

========================================================================================

1. Zookeeper是什么框架

分布式的、开源的分布式应用程序协调服务,原本是Hadoop、HBase的一个重要组件。

应用场景:Zookeeper的功能很强大,应用场景很多,结合我实际工作中使用Dubbo框架的情况,Zookeeper主要是做注册中心用。

基于Dubbo框架开发的提供者、消费者都向Zookeeper注册自己的URL,消费者还能拿到并订阅提供者的注册URL,以便在后续程序的执行中去调用提供者。而提供者发生了变动,也会通过Zookeeper向订阅的消费者发送通知。

2. Zookeeper有哪几种节点类型

  • 持久:创建之后一直存在,除非有删除操作,创建节点的客户端会话失效也不影响此节点。

  • 持久顺序:跟持久一样,就是父节点在创建下一级子节点的时候,记录每个子节点创建的先后顺序,会给每个子节点名加上一个数字后缀。

  • 临时:创建客户端会话失效(注意是会话失效,不是连接断了),节点也就没了。不能建子节点。

  • 临时顺序:不用解释了吧。

3. Zookeeper对节点的watch监听通知是永久的吗?

不是。

官方声明:一个Watch事件是一个一次性的触发器,当被设置了Watch的数据发生了改变的时候,则服务器将这个改变发送给设置了Watch的客户端,以便通知它们。

为什么不是永久的,举个例子,如果服务端变动频繁,而监听的客户端很多情况下,每次变动都要通知到所有的客户端,这太消耗性能了。

一般是客户端执行getData(“/节点A”,true),如果节点A发生了变更或删除,客户端会得到它的watch事件,但是在之后节点A又发生了变更,而客户端又没有设置watch事件,就不再给客户端发送。

在实际应用中,很多情况下,我们的客户端不需要知道服务端的每一次变动,我只要最新的数据即可。

4. Zookeeper集群如果有3台机器,挂掉一台集群还能工作吗?挂掉两台呢?

记住一个原则:过半存活即可用。

集群支持动态添加机器吗

其实就是水平扩容了,Zookeeper在这方面不太好。两种方式:

  • 全部重启:关闭所有Zookeeper服务,修改配置之后启动。不影响之前客户端的会话。

  • 逐个重启:顾名思义。这是比较常用的方式。

第五部分. 微服务专题

==================================================================================

1. 为什么要使用微服务跟踪?它解决了什么问题?

1. 微服务调用的现状?

  • 微服务的现状:随着业务的发展,单体架构变为微服务架构,并且系统规模也变得越来越大,各微服务间的调用关系也变得越来越复杂。

  • 多服务协同工作:在微服务的应用中,一个由客户端发起的请求在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果。

  • 复杂的调用链条容易出错:在复杂的微服务架构系统中,几乎每一个前端请求都会形成一-个复杂的分布式服务调用链路,在每条链路中任何一个依赖服务出现延迟超时或者错误都有可能引起整个请求最后的失败。

2. 微服务跟踪解决了什么问题?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我可以给你一些关于 Java面试资料: 1. 《Java 编程思想》(Thinking in Java)这本书是一本关于 Java 编程的经典教程,包含了 Java基础知识和一些比较复杂的主,对于准备 Java 面试非常有帮助。 2. 《Java 面试宝典》这是一本关于 Java 面试的专业书籍,包含了大量的 Java 面试答案,可以帮助你更好地准备面试。 3. 《Java 核心技术·卷 I》(Java SE)这本书是 Oracle 出Java 官方文档,包含了 Java SE 的所有核心知识,对于准备 Java 面试也是非常有帮助的。 4. 网上的模拟面试系统,比如 InterviewBit、LeetCode、HackerRank 等,都可以帮助你更好地准备面试,通过模拟面试的方式练习面试。 希望这些资料能帮助你准备 Java 面试。 ### 回答2: 很高兴为您提供关于Java面试的推荐资料。 首先,我建议您可以从以下几个方面来寻找相关的Java面试资料: 1. 书籍推荐:有许多经典的Java面试书籍可以帮助您准备面试。其中比较知名的包括《Java程序员面试宝典》、《剑指Offer》等。这些书籍中包含了大量的常见的Java面试及其解析,可以帮助您对Java面试有一个全面的了解。 2. 在线教育平台:目前有许多在线教育平台提供了丰富的Java面试资料,比如知乎、CSDN、博客园等。可以通过搜索关键词“Java面试”来获取大量相关资料,这些资料往往由经验丰富的Java工程师分享,包括常见的编程、算法、设计模式等。 3. 面试准备网站:有一些专门为面试准备提供资料的网站,比如牛客网、LeetCode等。这些网站提供了大量的编程和算法,可以帮助您熟悉常见的面试类型和解答思路,同时还可以通过参与在线编程竞赛提高解能力。 最后,我建议您在准备Java面试时,不仅要注重答案的准确性,还要理解其中的原理和背后的思想。此外,注意平衡理论与实践,多进行实际的编码练习,熟悉Java常用的开发工具和框架,这样在面试时才能更加游刃有余。祝您面试顺利! ### 回答3: 在准备Java面试过程中,推荐以下几种Java面试资料: 1. 《Java编程思想》:这是一本广为流传的Java经典书籍,不仅深入浅出地讲述了Java编程的基础知识,还涵盖了许多常见的面试。 2. 网上Java面试集:可以通过搜索引擎找到很多网上整理的Java面试集。一些知名的技术博客和论坛上也有Java面试必备库,可以多多搜索和收集。 3. Java相关的MOOC课程:选择一门优质的Java相关的在线课程,学习课程中的练习和考试目,这些目一般会紧密结合实际应用场景,有助于提升实战能力。 4. IT技术社区和博客:加入一些知名的IT技术社区或关注几个知名的技术博客,这些平台上的经验分享和技术讨论往往会涉及到一些面试相关的问,可以增加一些思路和解技巧。 5. 面试经验分享:在各种面试准备网站或社交媒体上,可以找到很多关于Java面试经验的分享。这些分享中有些会提到一些常问的问和经典的面试,可以作为参考。 需要注意的是,Java面试主要涵盖基础知识、算法与数据结构、多线程、IO、网络编程、设计模式等领域,建议综合多个资料和资源进行学习和准备,灵活选择适合自己的面试资料。同时,还要结合自己的实际经验和项目经历,进行针对性的准备和答技巧的培养。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值