文章目录
- 回顾
- 序言
- 第一章课后题
- 填空
- 选择
- 简答
- 第二章课后题
- 填空
- 选择
- 编程
- 计划
- 第三章课后题
- 填空
- 选择
- 简答
- 编程
- 第四章课后题
- 填空
- 选择
- 简答
- 编程
- 第五章课后题
- 填空
- 选择
- 简答
- 编程
- 第六章课后题
- 说明
- 第七章课后题
- 填空
- 选择
- 简答
- 编程
- 第八章课后题
- 填空
- 选择
- 简答
- 编程
- 第九章课后题
- 填空
- 选择
- 简答
- 编程
- 总结
回顾
- 湘潭大学软件工程专业选修 SOA 期末考试复习(一)
序言
发现之前那本书搞错了,好像是服务端的书?不知道。现在重新看一眼前面三章的题。最近感觉事情比较多,虽然课比较少。一件一件事情来,现在继续复习 SOA ,至少先过一遍大概的。
这个书有简答题和编程题,感觉考试就是这样了。感觉课件啥的随便看一下,然后记一记课后题就差不多了。
对了,要是文章里面有错误,麻烦在评论区或者私信告诉我。我们最后会忘了那个题的答案,但是会记得那段时间,那时的感受,就像我不记得英语老师讲的阅读理解是啥了,只记得他说的那些口头禅,ok ,fine ,whatever,interesting ,那些夸张的表情和态度,总是能在我们无助的时候给我们一些力量。以前有个人说,在她老了之后,在火炉旁,会想起以前一块的点点滴滴,细碎的美好像是涓涓细流,温暖人心。
第一章课后题
填空
1.Spring Boot
2.版本号;小版本名称
3.兼容性
4.HTTP 或者消息队列(例如 RabbitMQ)等协议
5.Spring
选择
1.ABCD
2.D
3.B
4.C
简答
(1)微服务架构是一种将大型应用拆分成一组独立的小服务的架构风格,每个服务都具有独立的业务功能和数据存储。微服务架构的特点和优势包括高内聚、低耦合、独立部署、技术栈灵活、弹性扩展、故障隔离、易于迁移和重构等方面。高内聚、低耦合表示每个服务只关注自己的业务功能,易于维护和扩展;独立部署表示每个服务可以独立部署,方便测试和发布;技术栈灵活表示每个服务可以选择适合自己的技术栈,无需强制统一;弹性扩展表示可以根据需求对每个服务进行水平扩展,提高系统的容量和性能;故障隔离表示一个服务的故障不会影响整个系统的正常运行;易于迁移和重构表示可以根据业务需求灵活调整和重构各个服务。
软件工程这门课好像也考了这个题,感觉只能背一背,然后多写点儿。
(2)这个网上找到的答案列举了好多组件。我感觉太全面了点。下面的答案来自课件
Spring Cloud Eureka注册发现中心,主要负责完成微服务架构中的服务治理功能;Spring Cloud Config分布式配置中心,可以实现动态修改配置文件;Spring Cloud Hystrix熔断器,通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力
第二章课后题
填空
1.Eureka Server 和 Eureka Client
2.@EnableEurekaServer
3.application.properties
4.90 秒(课件上面写的)
5.server.port
选择
1.A
注意和前面的 90 秒做一个区别,30 秒是续约心跳,90 秒是剔除服务。
2.BCD
3.ABD
编程
这个编程就是之前头歌上面的作业。现在再看一眼。假设出题的话,需要我们写一些什么呢?
说实话这块没有自己写的啥代码,最多考一考注解吗。
计划
干脆一次性把课后题都整理完算了。有时候可以养生佛系,有时候可以上上强度。嘿嘿。今天还有几个小时,不知道能不能把课后题全部看一遍。然后明天再把课件全部看一遍,还剩 7 章的课件。 (完稿的时候已经是第二天下午了,我高估了自己的效率)
第三章课后题
填空
1.分离均衡;混同均衡 (总感觉不对,又查了一下,感觉这个更对:硬件负载均衡,软件负载均衡)
2.Eureka ; Consul RestTemplate 和 Feign
3.@Controller 和 @ResponseBody
4.@LoadBalanced
5.@ConfigurationProperties
选择
1.A
2.ACD(这题查了一下,确实是选这三个选项)
3.ABCD
简答
轮询:简单但不考虑服务器负载。
加权轮询:适用于处理能力不同的服务器。
最小连接数:根据当前服务器负载动态分配请求。
加权最小连接数:结合服务器性能和负载的动态分配方式。
随机:简单但不一定能实现负载均衡。
或者按照课件回答,可能课件是更官方的答案,但是就是有点不好记,一堆英文。
使用负载均衡可以帮助系统提升可用性、性能、扩展性和安全性,从而支持更高的并发处理、优化资源使用、避免单点故障,并且简化系统的维护和升级工作。
编程
创建项目的时候需要添加 Ribbon 依赖,但是头歌上面没有 idea 这个环境,感觉不会让写依赖之类的东西。
@Configuration
public class RibbonConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate(RestTemplateBuilder builder){return builder.build();}
}
我感觉这些注解有可能考。其他的感觉不方便考察。
第四章课后题
填空
1.@EnableFeignClients
2.@EnableFeignClients;@FeignClient
可以发现要写注解的这种题挺多的。
3.OFF NONE
4.TRACE FULL
选择
1.C
2.B
3.B(A 选项是因为能用那个注解,用于定义客户端的基础的 URL ,C 选项是因为只需要和注册中心中注册的服务名称一致,D 选项是因为不是都对哈哈哈)
简答
1.这个题感觉出的很好。
Feign:是一个声明式 HTTP 客户端,内部自动集成了负载均衡,使用 @FeignClient 注解来简化服务间的调用,并且默认通过 Ribbon 实现负载均衡。使用 Feign 的优点是简洁、易于使用,但缺乏灵活性。
Ribbon:是一个客户端负载均衡器,适合与 RestTemplate 一起使用,能够更加灵活地控制负载均衡的策略,适合对负载均衡有细粒度控制要求的场景。
两者的选择通常依赖于具体的应用场景:
如果你想要快速实现微服务间的调用,推荐使用 Feign。
如果你需要更多的控制或复杂的负载均衡策略,使用 Ribbon 配合 RestTemplate 更合适。
2.这个题网上找到的答案不如课件里面的答案。下面是课件里面的答案。
另外,当时写这个作业的时候,看课件感觉怎么也做不完这个实验,几十页的课件,无比漫长,完全看不到头。现在看到这一章的课件还是很害怕。
编程
感觉复习编程这个题型,就是看一下课件就好了。源代码里面没啥重要的内容,关键的东西都会放在课件上,稍微记一记就好了。
引入依赖的时候要引入 Web 和 Feign 依赖。虽然感觉不会考,但是还是记一下。
主要看第二行的启动 Feign 的注解
@EnableEurekaClient
@EnableFeignClients
@SpringBootApplication
public class EurekaFeignClientApplication {public static void main(String[] args) { SpringApplication.run(EurekaFeignClientApplication.class, args);}
}
感觉这种可能会考,就是比较简单,老师认为我们会的代码。定义一些实体类。
public class User { private String name;private Integer age;public User() { }public User(String name, Integer age) {this.name = name;this.age = age;}public String getName() {return name;
}
有读者知道 GET 和 POST 的区别吗,感觉这里面有点讲究,但是真是太细节了。
GET 适用于数据检索操作,安全、简单、快速,但数据量小,不能传输敏感信息;
POST 适用于提交数据、创建或修改资源、上传文件等,能够处理较大的数据量和敏感数据,但可能会改变服务器的状态。
@RequestMapping(value = "/hello2",method = RequestMethod.GET)public User hello(@RequestParam("name") String name,@RequestHeader("age") int age);@RequestMapping(value = "/hello3",method = RequestMethod.POST)public String hello(@RequestBody User user);
算了,感觉完全把握不住编程题,有点想放弃这个题型了。
第五章课后题
填空
1.@EnableCircuitBreaker和@CircuitBreaker
这个可能因为教材版本的原因,老师上课的时候是说用新版本的,前面是旧版本的,后面是新版本的。
这个题,可能还是以文档为准吧,那就是图片里面的答案。(课件上没有提及这个内容)
2.Hystrix Dashboard
dashboard 是仪表盘的意思
3.@EnableHystrixDashboard
感觉这个启动类的注解就是 @Enable + 名字,注意驼峰命名。
4.@EnableTurbine
选择
1.这个选择题找不到答案,有点无奈。不太敢相信 ai 给的答案,担心他瞎说哈哈哈。不过我有点双标了,有些填空题我就是问的 ai ,可能我感觉 ai 在回答填空题和简答题会正确一些,回答那种稍微绕一些的,感觉就要出问题了。
可以发现是 B ,熔断器打开,命令执行熔断表示 Hystrix 命令执行失败
可以先找课件,再找官方文档,再在网上找。
2.A
3.D
简答
我整理答案应该首选课件的。下面的答案都是先从课件上面找。
1.
2.在eureka-hystrix-client的启动类中添加 @EnableHystrix 注解启动熔断功能,在项目的启动类添加 @EnableTurbine 注解,开启聚合监控功能,添加 @EnableHystrixDashboard 注解,启用Hystrix-Dashboard功能
和前面的填空题撞了,所以感觉是考试重点。
编程
课件里面用的另外一个代替的熔断,因为这个 Hystrix 停止维护了。
引入依赖的时候要引入 Feign、Ribbon、resilience4j 这些依赖。总结一下到这块,项目用到的一些技术,首先是一个框架,服务端,生产者消费者之类的,第二是负载均衡,讲了两个,Ribbon 和 Feign ,第三是熔断,也是讲了两个,Hystrix 和 resilience4j 。
可能需要知道 mapping 后面跟的是 url
@RequestMapping("/hi")
public String hi(String id){return "Hello World, I'm from resilience4j!"+id;}
其他的,感觉不像是能考的,编程题真难。
第六章课后题
说明
这个书和课件都不太一样。上课的时候老师说主要是操作,现在操作的分数只有一点点,考理论的还是挺多的。课件里面大部分也是一些代码和操作步骤。现在感觉就是把题目稍微看一看,然后之后再记一记知识点就去考试了。
不一样就不整理了。这章的题随便看看好了。应该不会考。
第七章课后题
填空
1.@EnableConfigServer;@EnableConfigClient
2.spring.cloud.config.server.git.uri(把题干里面的信息串一串,因为 yaml 文件的格式大概就是这样子的,树状结构)
3.@RefreshScope
选择
1.A
2.AC
3.ABCD (这题网上搜到的答案是全选,ai 给的答案是 BC ,我研究一下到底选啥……)研究了一下,应该是选 BC
简答
服务器
客户端
编程
这个实验我按照课件做没做出来。当时的错误还记得比较清楚,就是 white page not found ,就是一个白色的网页,最下面的数字要么是 404 ,要么是 500
代码里面经常有 uri ,有时候又会看到 url ,下面说一下这两者的区别。
所有的 url 都属于 uri ,url 是可以直接访问的链接。uri 表示的是唯一的身份,Uniform Resource Identifier,url 的那个 l 表示的是 locator
完整地把代码看了一遍,感觉没啥好考的,这一章。看一下注解感觉差不多了,有些代码类似于填表格一样,还有的应该就是集成开发环境直接自动补全的。
第八章课后题
填空
1.@EnableBinding
2.Sink
3.@StreamListener(就是中译英,感觉这些项目单看都是比较简单直观的,可能难在于组合这些模块,写一些有逻辑性的业务代码比较难)
4.spring.rabbitmq.host
(就像下面这样子,但是这就和填表格一样,真会考这种吗,配置文件我感觉都很直观,应该不会考吧)
spring:rabbitmq:host: 127.0.0.1 # RabbitMQ 服务的地址port: 5672 # 默认的 RabbitMQ 端口username: guest # 用户名password: guest # 密码
选择
1.ABCD
2.BC
3.ABCD
简答
课件上面没有直接回答这个问题。文档上面也没写。感觉简答题可能最好拿分,就是自己多写一点字就好了。
嗷嗷,不是没有写,是分成好几页课件,中间还有图,造成了干扰。
编程
这个当时是安装了一个 RabbitMQ 的服务,感觉和 Tomcat 一样,都是在任务管理器里面打开的。但是好像不是正确的打开方式,因为我 Tomcat 虽然能正常显示网页,但是在启动项目的时候提示没有 xx 权限,我也不懂是啥情况。RabbitMQ 对新手还是比较友好,没有出现什么问题。
这个流程大概就是在本地项目文件里面输入一条消息,在 RabbitMQ 的网页里面能看到产生了相应的结果。
代码里标记重要的两个注解,感觉可以记一下。
@EnableBinding(Sink.class) #重要
public class SinkReceiver {private static Logger logger= LoggerFactory.getLogger(StreamHelloApplication.class);@StreamListener(Sink.INPUT) # 重要public void receive(Object payload){logger.info("Received:"+payload);}
}
其他的代码不知道啥是重点。
第九章课后题
填空
1.RabbitMQ 或 Kafka
2.@EnableZipkin(从 Spring Cloud 2020 起已被移除,改为自动配置)
3.
4.持久化存储和查询分析
选择
1.AD
2.A
3.D
简答
但是有一个问题,就写这么几个字,是不是够了呢?
这样子每一个特点后面加一个分析才感觉更安心一些。
编程
这一章的代码好像也没啥重点,随便看看好了。
总结
本来想在网上找教材的答案的,但是没找到,找到了这个网站,感觉可能有点帮助,里面的知识点浏览起来比较方便,算是看到这儿的一个彩蛋,哈哈哈。
黑马程序员官方文档
另外挂了梯子分享链接可能对方访问不了,幸好我刚点了一下,不然看到的就是“服务器不可用”了。
在网上看到一句话,我可以告诉你当年我也一样郁闷吗?,真好奇以后的我们会怎么看待现在的自己。
SOA 到这儿就算完结了,课件我感觉随便看一看,然后上面那个文档看一看,课后题看一看,差不多了。
编程题这块,感觉还可以看看最后实验的电商系统的代码,那个里面可能有一些业务代码,比如说什么订单,用户,是怎么写的,随便看看。
在发布之前校对了一遍,更正了一些错误。