面试题、一

1.描述下数据库中的事务--ACID各个的特点

原子性(Atomicity):事务中的操作要么全部成功要么全部失败。

一致性(Consistency):事务前后数据的完整性必须保持一致。

隔离性(Isolation):多个并发的事务之间是相互隔离的,互不干扰的。

持久性(Durability):事务提交后,数据是永久改变的。

2.什么是springboot?你们公司是用的哪个版本?

SpringBoot是Spring推出用于解决传统框架配置文件冗余,装配组件操作繁杂并基于Maven的解决方案,主要目的是能够快速搭建单个微服务。

Spring boot 的优点

轻松创建独立的Spring应用程序

内联Tomcat、jetty等web容器,不需要部署WAR文件。 提供一系列的“starter”来简化的Maven配置

开箱即用,尽可能自动配置Spring

版本号:2.1.6

3.什么是redis?

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

Redis优势

  • 性能极高-Redis能读的速度是110000次/s,写的速度是81000次/s 。

  • 丰富的数据类型-Redis支持二进制案列的String,Lists,Hashes,Sets及Ordered Sets 数据类型操作。

  • 原子—Redis的所有操作都是原子性(不可再分)的,意思就是要么成功执行要么失败不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。

  • 丰富的特性—Redis还支持publish/subscribe,通知,key过期等等特性**

4.如何理解springcloud微服务项目中,eureka,provider,consumer它们之间的关系?

eureka:提供服务注册于发现 provider:服务提供方法将自身注册到eureka,让消费方找到 consumer:服务消费方从eureka获取注册服务列表,能够消费服务

5.mysql默认的存储引擎是什么?

Mysql在V5.1之前默认存储引擎是MyISAM; 在此之后默认存储引擎是InnoDB。 MyISAM不支持事务,InnoDB支持事务。 MyISAM不支持外键,InnoDB支持外键, MyISAM支持全文索引,InnoDB不支持全文索引。

6.什么是跨域?

要了解跨域,先要说说同源策略。所谓同源是指,域名,协议,端口相同,有一个不一样则是跨域。

同源策略一般又分为以下两种:

DOM同源策略:禁止对不同源页面DOM进行操作。这里主要场景是iframe跨域的情况,不同域名的iframe是限制互相访问的。

XmlHttpRequest同源策略:禁止使用XHR对象向不同源的服务器地址发起HTTP请求。

跨域,指的是从一个域名去请求另外一个域名的资源。即跨域名请求!跨域时,浏览器不能执行其他域名网站的脚本,是由浏览器的同源策略造成的,是浏览器施加的安全限制。

跨域的严格一点来说就是只要协议,域名,端口有任何一个的不同,就被当作是跨域。

7.什么是token?

Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌。 当第一次登录后,服务器生成一个Token便将此Token返回给客户端, 以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

token的生成规则

首先是token头部 :常以token开头表明用户是PC端或者App端登陆的:PC/App

使用MD5来将用户登录的密码进行加密

设置时间戳的格式添加UID**

为什么使用token而不使用session的原因

token是一串字符串,没有任何状态 解决了PC端和移动App端默认不支持session共享的问题**

8.什么是RESTful?

首先rest是一种API的模式,常以JSON格式编写。符合rest约束风格和原则的应用程序或设计就是RESTful。

9.SpringCloud解决了哪些问题?

与分布式系统相关的复杂性 – 包括网络问题,延迟开销,带宽问题,安全问题。 处理服务发现的能力 – 服务发现允许集群中的进程和服务找到彼此并进行通信。 解决冗余问题 – 冗余问题经常发生在分布式系统中。 负载平衡 – 改进跨多个计算资源(例如计算机集群,网络链接,中央处理单元)的工作负载分布。 减少性能问题 – 减少因各种操作开销导致的性能问题。

10.微服务中什么是熔断?什么是服务降级?

服务熔断的作用是当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用。 服务降级是为了预防某些功能(业务场景)出现负荷过载或者响应慢的情况,在其内部暂时舍弃对一些非核心的接口和数据的请求,而直接返回一个提前准备好的fallback(退路)错误处理信息。

11.微服务的优缺点是什么?

每个服务足够内聚,足够小,代码容易理解这样能聚焦一个指定的业务功能或业务需求。

2)、开发简单,开发效率提高,一个服务可能就是专一的只干一件事。

4)、微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的。

5)、微服务能使用不同的语言开发。

6)、易于第三方集成,微服务允许使用容易且灵活的方式集成自动部署,通过持续集成集成工具,如Jenkins、Hudson等。

9)、微服务知识业务逻辑代码,不会和 HTML 和 CSS 其他界面组件混合。

10)、每个微服务都有自己的存储能力,可以有自己的数据库,也可以由统一的数据库。

缺点:1)、开发人员要处理分布式系统的复杂性。

2)、多服务运维难度,随着服务的增加,运维的压力也在增加。

3)、系统部署依赖。

4)、服务间通讯成本。

5)、数据一致性。

6)、系统集成测试。

7)、性能监控.....

12.微服务之间如何独立通讯的?

同步通信:dobbo通过 RPC 远程过程调用、springcloud通过 REST接口json调用等。

异步:消息队列,如:RabbitMq、ActiveMq、Kafka 等。

13.SpringCloud 和 Dubbo 有哪些区别?

首先他们都是分布式管理框架。 dubbo 是二进制传输,占用带宽会少一点。SpringCloud是http 传输,带宽会多一点,同时使用http协议一般会使用JSON报文,消耗会更大。 dubbo 开发难度较大,所依赖的 jar 包有很多问题大型工程无法解决。SpringCloud 对第三方的继承可以一键式生成,天然集成。 SpringCloud 接口协议约定比较松散,需要强有力的行政措施来限制接口无序升级。 最大的区别: Spring Cloud抛弃了Dubbo 的RPC通信,采用的是基于HTTP的REST方式。 严格来说,这两种方式各有优劣。虽然在一定程度上来说,后者牺牲了服务调用的性能, 但也避免了上面提到的原生RPC带来的问题。而且REST相比RPC更为灵活,服务提供方和调用方的依赖只依靠一纸契约, 不存在代码级别的强依赖,这在强调快速演化的微服务环境下,显得更为合适。

14.SpringBoot 和 SpringCloud 之间关系?

SpringBoot:专注于快速方便的开发单个个体微服务(关注微观);

SpringCloud:关注全局的微服务协调治理框架,将SpringBoot开发的一个个单体微服务组合并管理起来(关注宏观);

SpringBoot可以离开SpringCloud独立使用,但是SpringCloud不可以离开SpringBoot,属于依赖关系。

15.eureka和zookeeper的区别?

eureka和zookeeper都可以提供服务注册与发现的功能,

zookeeper 是CP原则,强一致性和分区容错性。

eureka 是AP 原则 可用性和分区容错性。

zookeeper当主节点故障时,zk会在剩余节点重新选择主节点,耗时过长,虽然最终能够恢复,但是选取主节点期间会导致服务不可用,这是不能容忍的。

eureka各个节点是平等的,一个节点挂掉,其他节点仍会正常保证服务。

16.mycat是什么?你们公司分库分表的分片规则是什么?

Mycat是基于MySQL的数据库中间件,用来协调切分后的数据库,使其可以进行统一管理。

分片规则:取模分片 PartitionByMode

17.什么是集合?

集合有两个父接口,一个collection,一个Map;

而collection有两个子接口,一个List,一个Set;

List有两个常见的实现类 ArrayList,LinkedList;

Set有两个常见的实现类 HashSet,TreeSet;

Map有两个常见的实现类 HashMap,HashTable。

18.什么是dubbo?

Dubbo和Springcloud都是分布式服务中常用的框架。dubbo与cloud不同,dubbo基于RPC协议。它提供了三大核心功能:

Dubbo按照分层的方式来架构,可以最大限度地松耦合。Dubbo采用一种非常简单的模型, 要么提供方提供服务, 要么是消费方消费服务, 所以基于这一点可以抽象出服务提供方和服务消费方两个角色

面向接口的远程方法调用:提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。****

智能容错和负载均衡:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。** **

服务自动注册和发现:基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以滑增加或减少机器**

19.什么是spring?

Spring是一个开源的轻量级的Java开发框架。是一种简化应用程序的开发。 在spring出来之前,service层调用dao层都是用new的方式,在spring出来之后,service层和到dao层都会放在spring容器去管理,这是spring的第一种特性,我们称之为IOC,控制反转。 spring还有一种特性,我们称之为AOP,大白话,所谓“面向切面”,说白了就是专门的人干专门的事。在项目很多公有的或是要被重复被调用的模块可以被抽取出来,利用的就AOP的特性,例如日志模块。

 

原文地址:https://www.cnblogs.com/zhaozhitong/p/12449997.html