师傅常怀徒弟心你好!大家好,我是小七,程序员界的学徒小七打算在轻松幽默的对话中分享一些技术。如果你觉得通过小七的文章有所收获,那就给小七点赞吧,持续更新,微信搜索【小七JAVA访谈】即可第一时间阅读,回复【资讯】我已经为你准备好了福利!回复【项目】有一些项目源码我给大家准备好了。回复【简历模板】我有一份简历模板给你。@[TOC]前言摘自上一章。我昨天玩了一天游戏。我的操作非常激烈。我看到记录是0-5。最后网管看不下去拔了开关,说我影响了网吧的整体中奖率。我在一群小学生的哀求下离开了网吧(小学生:兄弟,求求你了,你走吧,我们还想玩)。昨天回到家,继续投简历。不要选择任何公司。是海头。你知道这是什么意思吗?幸运的是,伯乐终于出现了。她发现了我的大马,约了我第二天的面试,我们还互发了微信。加了微信也别闲着,先看看朋友圈,根据朋友圈判断这个伯乐好不好(呵呵~)。看了朋友圈,这个伯乐很耿直,就是不知道温柔不温柔,有没有像刘阿姨一样温柔体贴~1.面试1.本地stub面试官:我看你对Dubbo很熟练在你的简历上,你能告诉我吗?什么是Dubbo本地存根?我:我觉得本地存根类似于AOP,通过面向切面来实现一些功能,但不同的是,有些逻辑是在消费者端调用服务端时,在消费者端执行的。比如我们的consumer可以在调用server之前在consumer上校验参数,如果调用server之后出现异常,我们可以在consumer上进行一些自定义的异常处理。官网上的解释是这样的:在客户端使用Dubbo中的本地存根执行一些逻辑上的远程服务后,客户端通常只有接口,实现都在服务端,但有时提供者要执行客户端上的一些逻辑,比如:做ThreadLocal缓存,提前校验参数,调用失败后伪造容错数据等。这时候需要在API中带一个Stub,客户端生成一个Proxy实例,并通过构造函数将Proxy传递给Stub1,然后将Stub暴露给用户,Stub可以决定是否调用Proxy。在spring配置文件中配置如下:或提供Stub的实现:packagecom.foo;公共类BarServiceStub实现BarService{privatefinalBarServicebarService;//构造函数传入真正的远程代理对象publicBarServiceStub(BarServicebarService){this.barService=barService;}publicStringsayHello(Stringname){//这段代码在客户端执行,可以在客户端做ThreadLocal本地缓存,或者预先验证参数是否合法等try{returnbarService.sayHello(姓名);}catch(Exceptione){//你可以容错,你可以做任何AOP拦截项返回“容错数据”;}}}2.本地伪装面试官:那你能告诉我Dubbo本地伪装是什么吗?我:顾名思义,本地伪装就是在消费端本地伪装一个返回参数,直接返回给消费端。原来的流程是消费端调用服务端,服务端返回什么,消费端就返回什么。但是现在如果服务器宕机了,消费者在调用服务器的时候就无法返回自己想要返回的参数类型的数据了。这时候,我们可以假装在消费者身上返回一个参数,这样调用服务器就失败了,或者根本就没有。调用服务端时,可以直接返回本地的伪装数据。如果现在有一个业务场景,就是消费者调用服务端正常返回参数,异常时返回一个“容错数据”。那么我们首先在spring的配置文件中进行如下配置:这相当于BarService是一个本地的伪装接口然后我们在本地提供Mock项目实现伪接口:packagecom.foo;publicclassBarServiceMockimplementsBarService{publicStringsayHello(Stringname){//可以伪造容错数据,只有在RpcException发生时才会执行该方法return"fault-tolerantdata";}}这样当服务端发生异常时,客户端可以返回自己想要返回的数据。采访者:小伙子还不错。什么时候可以回北京参加工作?我:嗯。..等等,还有很多公司在等着谈薪水,我得选一家合适的。面试官:你要多少我给你,来找我我:呃。..然后月薪100W。面试官:哎,你说什么我听不见,信号不好。..我:嘿嘿嘿(哔哔哔哔哔哔……)。2.总结这里的相关内容没有整理,后面会继续更新文章,建议收藏。文中涉及的命令必须像我一样多敲几次。只有在敲打的过程中,才能发现自己是否真正掌握了命令。如果觉得我的文章还不错,请点个赞。另外可以微信搜索【小七JAVA专访】第一时间阅读,回复【资讯】我已经为你准备好了福利!回复【项目】有一些项目源码我给大家准备好了。回复【简历模板】我有一份简历模板给你。