银盛⽀付java岗社招面经

银盛⽀付

1. 说说springcloud的⼯作原理

springcloud由以下⼏个核⼼组件构成:

Eureka:各个服务启动时,Eureka Client都会将服务注册到Eureka Server,并且Eureka Client还可以反过来从Eureka Server拉

取注册表,从⽽知道其他服务在哪⾥

Ribbon:服务间发起请求的时候,基于Ribbon做负载均衡,从⼀个服务的多台机器中选择⼀台

Feign:基于Feign的动态代理机制,根据注解和选择的机器,拼接请求URL地址,发起请求

Hystrix:发起请求是通过Hystrix的线程池来⾛的,不同的服务⾛不同的线程池,实现了不同服务调⽤的隔离,避免了服务雪崩

的问题

Zuul:如果前端、移动端要调⽤后端系统,统⼀从Zuul⽹关进⼊,由Zuul⽹关转发请求给对应的服务

2. ⽤什么组件发请求

在Spring Cloud中使⽤Feign, 我们可以做到使⽤HTTP请求远程服务时能与调⽤本地⽅法⼀样的编码体验,开发者完全感知不到

这是远程⽅法,更感知不到这是个HTTP请求。

3. 注册中⼼⼼跳是⼏秒

1、Eureka的客户端默认每隔30s会向eureka服务端更新实例,注册中⼼也会定时进⾏检查,发现某个实例默认90s内没有再收到

⼼跳,会注销此实例,这些时间间隔是可配置的。

2、不过注册中⼼还有⼀个保护模式(服务端在短时间内丢失过多客户端的时候,就会进⼊保护模式),在这个保护模式下,他

会认为是⽹络问题,不会注销任何过期的实例。

4. 消费者是如何发现服务提供者的a.当⼀个服务实例启动,会将它的ip地址等信息注册到eureka;

b.当a服务调⽤b服务,a服务会通过Ribbon检查本地是否有b服务实例信息的缓存;

c. Ribbon会定期从eureka刷新本地缓存。

5. 多个消费者调⽤同⼀接⼝,eruka默认的分配⽅式是什么

6. 说说常⽤的springboot注解,及其实现?

7. spring的事务注解是什么?什么情况下事物才会回滚

8. 说说spring事物的传播性和隔离级别

9. mysql的引擎有什么?他们的区别

10. 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恢复数据。

11. mysql索引谈⼀谈

12. 说说b+树的原理

a. B-tree:B-tree利⽤了磁盘块的特性进⾏构建的树。每个磁盘块⼀个节点,每个节点包含了很关键字。把树的节点关键字增多后树的层级

⽐原来的⼆叉树少了,减少数据查找的次数和复杂度。

B-tree巧妙利⽤了磁盘预读原理,将⼀个节点的⼤⼩设为等于⼀个⻚(每⻚为4K),这样每个节点只需要⼀次I/O就可以完全载

⼊。

B-tree的数据可以存在任何节点中。

1. B+tree:

B+tree是 B-tree的变种,B+tree数据只存储在叶⼦节点中。这样在B树的基础上每个节点存储的关键字数更多,树的层级更少

所以查询数据更快,所有指关键字指针都存在叶⼦节点,所以每次查找的次数都相同所以查询速度更稳定;

13. 让你设计⼀个索引,你会怎么设计

a. mysql默认存储引擎innodb只显式⽀持B树索引,对于频繁访问的表,innodb会透明建⽴⾃适应hash索引,即在B树索引基础

上建⽴hash索引,可以显著提⾼查找效率,对于客户端是透明的,不可控制的,隐式的。

14. 还问了git和svn的区别

1、Git是分布式的,⽽Svn不是;

2、GIT把内容按元数据⽅式存储,⽽SVN是按⽂件

3、分⽀不同:git分⽀切换很⽅便;svn分⽀就是版本库的另外⼀个⽬录;

4、GIT没有⼀个全局的版本号,⽽svn有,SVN的版本号实际是任何⼀个相应时间的源代码快照。

5、GIT的内容完整性要优于SVN(GIT的内容存储使⽤的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和⽹络问题

时降低对版本库的破坏。)

15. git命令的⼀些底层原理以及流程

https://www.jianshu.com/p/2b47a3078a46

a. git init:使⽤git init初始化⼀个新的⽬录时,会⽣成⼀个.git的⽬录,该⽬录即为本地仓库。⼀个新初始化的本地仓库是这样

的:

1 !"" HEAD

2 !"" branches

3 !"" config

4 !"" description

5 !"" hooks

6 !"" objects

7 # !"" info

8 # $"" pack9 $"" refs

10 !"" heads

11 $"" tags

description⽤于GitWeb程序

config配置特定于该仓库的设置(还记得git config的三个配置级别么)

hooks放置客户端或服务端的hook脚本

HEAD传说中的HEAD指针,指明当前处于哪个分⽀

objectsGit对象存储⽬录

refsGit引⽤存储⽬录

branches放置分⽀引⽤的⽬录

其中description、config和hooks这些不在讨论中,后⽂会直接忽略。

b. git add:Git commit之前先要通过git add添加⽂件:

可以看到,多了⼀个index⽂件。并且在objects⽬录下多了⼀个9f的⽬录,其中多了⼀个

4d96d5b00d98959ea9960f069585ce42b1349a⽂件。

其实9f4d96d5b00d98959ea9960f069585ce42b1349a就是⼀个Git

 


#银盛支付##面经##社招##java工程师#
全部评论
牛逼!
点赞 回复 分享
发布于 2021-08-13 08:10

相关推荐

ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
3 32 评论
分享
牛客网
牛客企业服务