一、Springcloud的工作原理
二、SpringCloud用什么组件发请求
在Spring Cloud中,发送HTTP请求通常使用以下两种方式:
1. RestTemplate:
2. OpenFeign(或Feign):
|
RestTemplate示例代码:
RestTemplate restTemplate = new RestTemplate(); String result = restTemplate.getForObject("http://example.com/resource", String.class);
OpenFeign(或Feign)示例代码:
@FeignClient("service-name") public interface MyClient { @RequestMapping(method = RequestMethod.GET, value = "/resource") String getResource(); }
三、注册中心心跳是几秒
Spring Cloud中的注册中心,比如Eureka, 不是通过固定的“心跳(心眺)”时间来工作的,而是依赖于几个可配置的参数来协同工作,其中包含心跳间隔、实例注册后的续约(续租)时间间隔以及服务端的清理间隔。下面是有关Eureka客户端和服务端的一些默认值:
|
四、消费者是如何发现服务提供者的
- 当⼀一个服务实例例启动,会将它的ip地址等信息注册到eureka;
- 当a服务调⽤用b服务,a服务会通过Ribbon检查本地是否有b服务实例例信息的缓存;
- Ribbon会定期从eureka刷新本地缓存。
五、多个消费者调⽤用同⼀接口,eruka默认的分配⽅式是什么
1. RoundRobinRule
2. BestAvailableRule
3. WeightedResponseTimeRule
4. AvailabilityFilteringRule
5. ZoneAvoidanceRule
|
六、springboot常用注解,及其实现
1. @Bean: 注册Bean
2. @Scope: Bean作用域
3. @Value: 给变量赋值
4. @Autowired: 自动装配
5. @Profile: 环境标识
|
3. @Value给变量赋值示例代码
@Component public class SomeClass { // 注入application.properties或application.yml中的属性值 @Value("${some.property.name}") private String propertyValue; // 注入系统属性的值 @Value("${system.property}") private String systemProperty; // 注入环境变量的值 @Value("${env.VARIABLE_NAME}") private String environmentVariable; // 给变量赋予一个默认值,如果配置没有这个值的话 @Value("${some.property.name:defaultValue}") private String propertyWithDefaultValue; // ... }
七、spring的事务注解是什么?什么情况下事物才会回滚
spring事务实现机制:
- 事务注解@transactional;
- 默认情况下,如果在事务中抛出了未检查异常(继承自 RuntimeException 的异常)或者 Error,则 Spring 将回滚事务。
- @Transactional 只能应用到 public 方法才有效:只有@Transactional 注解应用到 public ⽅法,才能进行事务管理理。这是因为在使用 Spring AOP 代理时,Spring 在调用在图 1 中的 TransactionInterceptor 在⽬标⽅法执行前后进行拦截之前,DynamicAdvisedInterceptor(CglibAopProxy 的内部类)的的 intercept 方法或 JdkDynamicAopProxy 的 invoke ⽅法会间接调用 AbstractFallbackTransactionAttributeSource(Spring 通过这个类获取表 1. @Transactional 注解的事务属性配置属性信息) 的 computeTransactionAttribute ⽅法。
八、spring事物的传播性和隔离级别
七个事传播属性:
|
五个隔离级别:
|
关键词:
九、mysql的引擎有什么?他们的区别
a. InnoDB:
b. MyISAM:
c. 选择:
|
十、innodb如何实现mysql的事务
事务进⾏过程中,每次sql语句执行,都会记录undo log和redo log,然后更新数据形成脏⻚,然后redo log按照时间或 者空间等条件进行落盘,undo log和脏页按照checkpoint进⾏行落盘,落盘后相应的redo log就可以删除了。此时,事务还未 COMMIT,如果发⽣生崩溃,则⾸首先检查checkpoint记录,使⽤用相应的redo log进⾏数据和undo log的恢复,然后查看undo log的 状态发现事务尚未提交,然后就使⽤undo log进⾏事务回滚。事务执⾏COMMIT操作时,会将本事务相关的所有redo log都进⾏落盘,只有所有redo log落盘成功,才算COMMIT成功。然后内存中的数据脏页继续按照checkpoint进⾏落盘。如果此时发⽣了崩溃,则只使⽤redo log恢复数据。
十一、mysql索引
MySQL索引是数据库性能优化的重要方面,它们在数据量大的情况下能够极大地提高查询效率。以下是一些关于MySQL索引的关键点:
1. 索引的类型:
2. 索引的原理:
3. 索引的使用:
4. 索引的创建和管理:
5. 索引的建议:
6. 索引的陷阱: 使用索引并不总是提升性能。在以下情况中,MySQL可能不会使用索引:
|
十二、b+树的原理理
b-tree
- B-tree 利用了磁盘块的特性进行构建的树。每个磁盘块一个节点,每个节点包含了很关键字。把树的节点关键字增多后树的层级比原来的二叉树少了,减少数据查找的次数和复杂度。
- B-tree巧妙利利⽤了磁盘预读原理理,将一个节点的⼤小设为等于一个页(每页为4K),这样每个节点只需要一次I/O就可以全载入。
- B-tree 的数据可以存在任何节点中。
b+tree
B+tree 是 B-tree 的变种,B+tree 数据只存储在叶⼦节点中。这样在B树的基础上每个节点存储的关键字数更多,树的层级更少 所以查询数据更快,所有指关键字指针都存在叶子节点,所以每次查找的次数都相同所以查询速度更稳定;
十三、如何设计索引
设计MySQL索引需要认真考虑查询模式、数据特性和业务需求。以下是设计MySQL索引的步骤:
1. 理解业务逻辑:
2. 分析查询语句:
3. 考虑数据的选择性:
4. 选择索引类型:
5. 考虑创建复合索引:
6. 留意列的数据类型:
7. 避免冗余和无用的索引:
8. 使用数据库工具和命令:
|
十四、git和svn的区别
Git和SVN(Apache Subversion)都是版本控制系统,它们用于追踪源代码的变更历史。尽管他们的目标相同,但是它们在设计原理、特性和使用方式上有很多不同。
1. 分布式与集中式:
2. 支持离线工作:
3. 网络需求与性能:
4. 分支和合并:
5. 存储方式:
6. 数据安全和完整性:
7. 学习曲线:
8. 可移植性和权限管理:
|
十五、git命令的一些底层原理以及流程
Git 工作流程
Git的工作流程大致可以分为以下几个步骤:
|
Git 底层原理
1. 对象存储: Git的核心是一个简单的键值对存储。你可以向Git仓库插入任何类型的内容,它会返回一个唯一的键,该键可以在之后用来再次取出该内容。这种存储系统建立在几种对象之上:
2. 索引:
3. 引用:
4. HEAD:
|
Git 命令流程
一个简单的流程,以展示文件从工作区到暂存区再到存储库的过程是这样的:
|
Git 分支和合并的原理
|