字节跳动面试:java取模只能用在整数

程序员DCS阿里 程序员DCS阿里     2022-12-09     713

关键词:

一、业务场景介绍

先来给大家说一个业务场景,假设咱们现在开发一个电商网站,要实现支付订单的功能,流程如下:

创建一个订单之后,如果用户立刻支付了这个订单,我们需要将订单状态更新为“已支付”

扣减相应的商品库存

通知仓储中心,进行发货

给用户的这次购物增加相应的积分

针对上述流程,我们需要有订单服务、库存服务、仓储服务、积分服务。整个流程的大体思路如下:

用户针对一个订单完成支付之后,就会去找订单服务,更新订单状态

订单服务调用库存服务,完成相应功能

订单服务调用仓储服务,完成相应功能

订单服务调用积分服务,完成相应功能

至此,整个支付订单的业务流程结束

下图这张图,清晰表明了各服务间的调用过程:

好!有了业务场景之后,咱们就一起来看看Spring Cloud微服务架构中,这几个组件如何相互协作,各自发挥的作用以及其背后的原理。

二、Spring Cloud核心组件:Eureka

咱们来考虑第一个问题:订单服务想要调用库存服务、仓储服务,或者是积分服务,怎么调用?

订单服务压根儿就不知道人家库存服务在哪台机器上啊!他就算想要发起一个请求,都不知道发送给谁,有心无力!

这时候,就轮到Spring Cloud Eureka出场了。Eureka是微服务架构中的注册中心,专门负责服务的注册与发现。

咱们来看看下面的这张图,结合图来仔细剖析一下整个流程:

如上图所示,库存服务、仓储服务、积分服务中都有一个Eureka Client组件,这个组件专门负责将这个服务的信息注册到Eureka Server中。说白了,就是告诉Eureka Server,自己在哪台机器上,监听着哪个端口。而Eureka Server是一个注册中心,里面有一个注册表,保存了各服务所在的机器和端口号

订单服务里也有一个Eureka Client组件,这个Eureka Client组件会找Eureka Server问一下:库存服务在哪台机器啊?监听着哪个端口啊?仓储服务呢?积分服务呢?然后就可以把这些相关信息从Eureka Server的注册表中拉取到自己本地缓存起来。

这时如果订单服务想要调用库存服务,不就可以找自己本地的Eureka Client问一下库存服务在哪台机器?监听哪个端口吗?收到响应后,紧接着就可以发送一个请求过去,调用库存服务扣减库存的那个接口!同理,如果订单服务要调用仓储服务、积分服务,也是如法炮制。

总结一下:

Eureka Client:负责将这个服务的信息注册到Eureka Server中

Eureka Server:注册中心,里面有一个注册表,保存了各个服务所在的机器和端口号

三、Spring Cloud核心组件:Feign

现在订单服务确实知道库存服务、积分服务、仓库服务在哪里了,同时也监听着哪些端口号了。但是新问题又来了:难道订单服务要自己写一大堆代码,跟其他服务建立网络连接,然后构造一个复杂的请求,接着发送请求过去,最后对返回的响应结果再写一大堆代码来处理吗?

这是上述流程翻译的代码片段,咱们一起来看看,体会一下这种绝望而无助的感受!!!

友情提示,前方高能:

看完上面那一大段代码,有没有感到后背发凉、一身冷汗?实际上你进行服务间调用时,如果每次都手写代码,代码量比上面那段要多至少几倍,所以这个事儿压根儿就不是地球人能干的。

既然如此,那怎么办呢?别急,Feign早已为我们提供好了优雅的解决方案。来看看如果用Feign的话,你的订单服务调用库存服务的代码会变成啥样?

看完上面的代码什么感觉?是不是感觉整个世界都干净了,又找到了活下去的勇气!没有底层的建立连接、构造请求、解析响应的代码,直接就是用注解定义一个 FeignClient接口,然后调用那个接口就可以了。人家Feign Client会在底层根据你的注解,跟你指定的服务建立连接、构造请求、发起靕求、获取响应、解析响应,等等。这一系列脏活累活,人家Feign全给你干了。

那么问题来了,Feign是如何做到这么神奇的呢?很简单,Feign的一个关键机制就是使用了动态代理。咱们一起来看看下面的图,结合图来分析:

首先,如果你对某个接口定义了@FeignClient注解,Feign就会针对这个接口创建一个动态代理

接着你要是调用那个接口,本质就是会调用 Feign创建的动态代理,这是核心中的核心

Feign的动态代理会根据你在接口上的@RequestMapping等注解,来动态构造出你要请求的服务的地址

最后针对这个地址,发起请求、解析响应

四、Spring Cloud核心组件:Ribbon

说完了Feign,还没完。现在新的问题又来了,如果人家库存服务部署在了5台机器上,如下所示:

192.168.169:9000

192.168.170:9000

192.168.171:9000

192.168.172:9000

192.168.173:9000

这下麻烦了!人家Feign怎么知道该请求哪台机器呢?

这时Spring Cloud Ribbon就派上用场了。Ribbon就是专门解决这个问题的。它的作用是负载均衡,会帮你在每次请求时选择一台机器,均匀的把请求分发到各个机器上

Ribbon的负载均衡默认使用的最经典的Round Robin轮询算法。这是啥?简单来说,就是如果订单服务对库存服务发起10次请求,那就先让你请求第1台机器、然后是第2台机器、第3台机器、第4台机器、第5台机器,接着再来—个循环,第1台机器、第2台机器。。。以此类推。

此外,Ribbon是和Feign以及Eureka紧密协作,完成工作的,具体如下:

首先Ribbon会从 Eureka Client里获取到对应的服务注册表,也就知道了所有的服务都部署在了哪些机器上,在监听哪些端口号。

然后Ribbon就可以使用默认的Round Robin算法,从中选择一台机器

Feign就会针对这台机器,构造并发起请求。

对上述整个过程,再来一张图,帮助大家更深刻的理解:

最后

看完上述知识点如果你深感Java基础不够扎实,或者刷题刷的不够、知识不全面

小编专门为你量身定制了一套<Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法>

image

针对知识面不够,也莫慌!还有一整套的<Java核心进阶手册>,可以瞬间查漏补缺

image

全都是一丢一丢的收集整理纯手打出来的——收整在***【我的学习笔记大全】***,有需要的朋友可以自取

更有纯手绘的各大知识体系大纲,可供梳理:Java筑基、MySQL、Redis、并发编程、Spring、分布式高性能架构知识、微服务架构知识、开源框架知识点等等的xmind手绘图~

image

自取

更有纯手绘的各大知识体系大纲,可供梳理:Java筑基、MySQL、Redis、并发编程、Spring、分布式高性能架构知识、微服务架构知识、开源框架知识点等等的xmind手绘图~

[外链图片转存中…(img-8KUEdbtw-1626698417285)]

image

字节跳动大数据研发岗位面试题目

java题求平方根,返回类型是整数,结果只保留整数的部分,小数部分将被舍去sql题目基础的编程语言数据结构和算法MySql和Hive的区别除了同样是存储数据的工具,再无其他的相同之处,1.存储位置不同RDBMSHDFS2.... 查看详情

字节跳动面试——c++研发工程师

目录一面二面三面一面首先做了自我介绍,然后简单回答了面试官对于项目中的一些疑问,没有太多的深入。一面面试官比较和蔼,问的问题比较专业,比较基础,简单做了一下回忆:virtual函数能不能用在构造函数中,为什么... 查看详情

字节跳动面试经验汇总

...之后就重新规划了一下自己的职业方向,最终目标定在了字节跳动,比较年轻化的一家互联网公司,近几年的发展速度也比较快,综合方面来说比较适合自己,所以就投了字节的简历,Java研发方向的,之后接到面试通知,总共... 查看详情

工作三年终于社招进字节跳动!字节跳动,阿里,腾讯java岗面试经验汇总

...补充基础知识等。也是有些辛苦。终于是在前不久拿到了字节跳动的offer,现在我也来写面经,希望能帮助到大家!面经Java基础0.HashMap的源码,实现原理,JDK8中对HashMap做了怎样的优化。拉链结构,数组+链表,原理是hash找数组... 查看详情

java面试者的经历,吐血分享字节跳动的java面试经验技巧

...享一份资深Java面试官整理的「 大厂高频核心面试题 」字节跳动面试题Http协议cookiesession介绍一下session表结构怎么设计,储存在哪里?你们的sessioncookie在项目里运用到哪里?算法题:[删除链表中重复的节点]在... 查看详情

字节跳动开发面试题——ios

目录字节一面内容:字节二面内容:字节三面内容:字节一面内容:1、自我介绍2、介绍一下简历中的一个项目3、面向对象的三个要素4、多态?5、Java,python,OC运行效率孰高?6、Property,其中copy如何?7、Property(nonatomatic,copy)NSM... 查看详情

字节跳动java面试:java编程规范考试答案

面试整体事项简历要准备好,联系方式一定要正确清晰醒目,项目经历按照时间倒序阐述,注意描述自己在项目中承担的职责,简历的模板尽量选择简洁的,毕竟程序员大部分还是喜欢简单明了的。推荐boss直... 查看详情

字节跳动java岗面试题;新电脑配置java环境

SpringSecurity观后感——手绘思维脑(供参考)SpringSecurity手绘思维脑图手绘的思维导图,是我自己根据自身的情况读完这套阿里出品的SpringSecurity王者晋级文档之后所绘的,相当于是一个知识的总结与梳理,我将其分为***... 查看详情

字节跳动面试分享:java反射作用与意义

阿里一面:介绍一下自己。*项目参与的核心设计有哪些*java反射原理,注解原理?*ArrayList和LinkedList的插入和访问的时间复杂度?*说说一致性Hash原理*HashMap及线程安全的ConcurrentHashMap,以及各自优劣势*https和htt... 查看详情

字节跳动2-1算法二轮面试202203-29(代码片段)

罗马数字包含以下七种字符: I, V, X, L,C,D 和 MI      1V      5X      10L      50C      100D      500M      1000这道题对应的是leetcode 中的12.整数转罗马数字packageexample;publicclass... 查看详情

字节跳动面试必问:免费java培训课程

20道常见MySQL数据库面试题+解析事务四大特性(ACID)原子性、一致性、隔离性、持久性?事务的并发?事务隔离级别,每个级别会引发什么问题,MySQL默认是哪个级别?MySQL常见的三种存储引擎(... 查看详情

字节跳动面试官:java线程池详解

Netty实战无论是想要学习Spring5、Spark、Cassandra等这样的系统,还是通过学习Netty来构建自己的基于Java的高性能网络框架,或者是更加具体的高性能Web或者游戏服务器等,本书都将是你的超强拍档。本书共分为4个部分&#x... 查看详情

字节跳动java实习面试凉凉经,含答案解析

Java虚拟机内存模型Java虚拟机内存模型中定义的访问操作与物理计算机处理的基本一致!Java中通过多线程机制使得多个任务同时执行处理,所有的线程共享JVM内存区域mainmemory,而每个线程又单独的有自己的工作内存&#... 查看详情

字节跳动java金三银四解析:java面试选择题及答案

第1章快速入门1.1Kafka简介1.2以Kafka为中心的解决方案1.3Kafka核心概念1.4Kafka源码环境第2章生产者2.1KafkaProducer使用示例2.2KafkaProducer分析ProducerInterceptors&cProducerInterceptorKafka集群元数据Serializer&DeserializerPartitioner2.3Re 查看详情

编程实践系列:字节跳动面试题

字节跳动面试题面试3轮技术面+1轮HR整体分三大块:项目经验计算机基础编程题(每轮一题)项目经验架构+业务做了什么核心设计优化解决了什么难题体现思考业务理解架构设计能力项目需求设计demo:如何... 查看详情

字节跳动java岗面试题;java帮助文档手机版

一面:阿里巴巴面试答案文末可以领取!1.触发新生代GC,如果存活对象总量大于survivor区容量,咋办2.如果任务很多,线程池的阻塞队列会撑爆内存的哪个区域3.栈在堆上吗4.GCroot有哪些5.实例变量可以是GCroot吗... 查看详情

字节跳动java面试挂了以后,流泪总结了这份大厂常问面试题

前言某天下午五点半突然接到了一个北京来电,是字节跳动打来的,当时心里一阵发慌,由于还在上班,就和面试官约定6点下班之后再来。挂完电话,心里忐忑得不行,感觉自己这也没准备好,那也没... 查看详情

离开外包之后,花了10000小时,最后我走进字节跳动拿到了offer

...c;那就只能拉高努力的占比。2020年7月,我有幸成为了字节跳动的一名Java后端开发,正如标题所说,我从外包辞职了,10000小时后,走进字节跳动拿下了offer。相信同行都清楚,从外包进大厂有多难,运... 查看详情