面试汇总

2020 04 19

面试遇到被提问到的问题

1、说说你对微服务的理解

2、redis是单线程的还是多线程的

3、redis高并发如何解决

一、说说你对微服务的理解

1、 什么是单体架构,以及单体架构的优缺点

1.1 单体架构的概述:
一般的单体架构分三层,表现层,业务逻辑层,持久层(数据访问层),这样子的架构把所用的业务场景都放在一个工程中,一次编译,部署在一个服务器。架构图如下

面试汇总_第1张图片

1.2、单体架构的优缺点
优点:单体架构的开发难度相对较低,开发成本低,开发速度快
缺点:单体架构的业务耦合度相对较高,而且,随着并发量越来越高,单体架构的并发能力短板就显露出来了
(如果一个系统部署在一个tomcat上,一个tomcat的同时访问量是500),随着代码量的增加,代码的可读性就
降低了,而且业务功能的叠加也困难

2、微服务

微服务架构是分布式架构的一种,简单来说微服务是把一个系统拆分成若干个功能模块,通过模块间的相互调用来完成
系统的工作内容。
好处:1、每个微服务的可以单独部署,运行,利于分工,将复杂的问题简单化,微服务之间不相互影响,一个微服务挂了不影响其它的微服务。 
	 2、微服务是一个分布式架构,业务与业务之间完全解耦,具有极强的横向扩充能力。
	 3、微服务技术栈不受限,不同的微服务完全可以用不同的编程语言来写
	 4、局部修改容易部署,哪个模块出现了bug我们只需要解决那个模块的bug就可以了,解决完bug之后,我们只需要重启这个模块的服务即可,部署相对简单,不必重启整个项目从而大大节约时间
	 5、由于微服务单个模块就相当于一个项目,开发这个模块我们就只需关心这个模块的逻辑即可,代码量和逻辑复杂度都会降低,从而易于开发和维护
缺点:
	 1、运维要求较高
	 	对于单体架构来讲,我们只需要维护好这一个项目就可以了,但是对于微服务架构来讲,由于项
	 目是由多个微服务构成的,每个模块出现问题都会造成整个项目运行出现异常,想要知道是哪个模块造成的问题往往
	 是不容易的,因为我们无法一步一步通过debug的方式来跟踪,这就对运维人员提出了很高的要求。
	 2、分布式的复杂性
		 对于单体架构来讲,我们可以不使用分布式,但是对于微服务架构来说,分布式几乎是必会用的技术,由于分布式
	本身的复杂性,导致微服务架构也变得复杂起来。
	 3、接口调整成本高
	 	比如,用户微服务是要被订单微服务和电影微服务所调用的,一旦用户微服务的接口发生大的变动,那么所有依赖
	它的微服务都要做相应的调整,由于微服务可能非常多,那么调整接口所造成的成本将会明显提高。

二、redis是单线程的还是多线程的

redis是单线程的

(1) 绝大部分请求是纯粹的内存操作(非常快速)
(2) 采用单线程,避免了不必要的上下文切换和竞争条件
(3) 非阻塞IO - IO多路复用
IO多路复用中有三种方式:select,poll,epoll。需要注意的是,select,poll是线程不安全的,epoll是线程安全的
redis内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io上浪费一点时间 这3个条件不是相互独立的,特别是第一条,如果请求都是耗时的,采用单线程吞吐量及性能可想而知了。应该说redis为特殊的场景选择了合适的技术方案。

线程池的原理
hashTable和hashMap的区别
springboot常用注解
mysql脏读
mysql,innoDb原理
redis排序
为什么重写equals()方法的同时也要重写hashCode()方法
为了保证相同的两个对象的hashCode值相等。
				两个对象相等,hashcode一定相等
				两个对象不等,hashcode不一定不等
				hashcode相等,两个对象不一定相等
				hashcode不等,两个对象一定不等

你可能感兴趣的:(研发管理,分布式,java,spring)