面试题总结

Spring Boot面试题总结

1、什么是SpringBoot
  描述:Spring Boot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目。大多数SpringBoot项目只需要很少的配置文件。
2、SpringBoot核心功能
2.1、独立运行Spring项目
Spring boot 可以以jar包形式独立运行,运行一个Spring Boot项目只需要通过java -jar xx.jar来运行。
2.2、内嵌servlet容器
Spring Boot可以选择内嵌Tomcat、jetty或者Undertow,这样我们无须以war包形式部署项目。
2.3、提供starter简化Maven配置
spring提供了一系列的start pom来简化Maven的依赖加载,例如,当你使用了spring-boot-starter-web,会自动加入如图5-1所示的依赖包。
2.4、自动装配Spring 
SpringBoot会根据在类路径中的jar包,类、为jar包里面的类自动配置Bean,这样会极大地减少我们要使用的配置。当然,SpringBoot只考虑大多数的开发场景,并不是所有的场景,若在实际开发中我们需要配置Bean,而SpringBoot灭有提供支持,则可以自定义自动配置。
2.5、准生产的应用监控
SpringBoot提供基于http ssh telnet对运行时的项目进行监控。
2.6、无代码生产和xml配置  
SpringBoot不是借助与代码生成来实现的,而是通过条件注解来实现的,这是Spring4.x提供的新特性。
3、SpringBoot优缺点
优点:
3.1、快速构建项目。
3.2、对主流开发框架的无配置集成。
3.3、项目可独立运行,无须外部依赖Servlet容器。
3.4、提供运行时的应用监控。
3.5、极大的提高了开发、部署效率。
3.6、与云计算的天然集成。
缺点:
3.1、如果你不认同spring框架,也许这就是缺点。
4、SpringBoot特性
4.1、创建独立的Spring项目
4.2、内置Tomcat和Jetty容器
4.3、提供一个starter POMs来简化Maven配置
4.4、提供了一系列大型项目中常见的非功能性特性,如安全、指标,健康检测、外部配置等
4.5、完全没有代码生成和xml配置文件
6、SpringBoot CLI
SpringBoot CLI 是SpringBoot提供的控制台命令工具。
7、SpringBoot maven 构建项目
spring-boot-starter-parent:是一个特殊Start,它用来提供相关的Maven依赖项,使用它之后,常用的包依赖可以省去version标签。
8、SpringBoot几个常用的注解
(1)@RestController和@Controller指定一个类,作为控制器的注解 
(2)@RequestMapping方法级别的映射注解,这一个用过Spring MVC的小伙伴相信都很熟悉 
(3)@EnableAutoConfiguration和@SpringBootApplication是类级别的注解,根据maven依赖的jar来自动猜测完成正确的spring的对应配置,只要引入了spring-boot-starter-web的依赖,默认会自动配置Spring MVC和tomcat容器
(4)@Configuration类级别的注解,一般这个注解,我们用来标识main方法所在的类,完成元数据bean的初始化。
(5)@ComponentScan类级别的注解,自动扫描加载所有的Spring组件包括Bean注入,一般用在main方法所在的类上 
(6)@ImportResource类级别注解,当我们必须使用一个xml的配置时,使用@ImportResource和@Configuration来标识这个文件资源的类。 
(7)@Autowired注解,一般结合@ComponentScan注解,来自动注入一个Service或Dao级别的Bean
(8)@Component类级别注解,用来标识一个组件,比如我自定了一个filter,则需要此注解标识之后,Spring Boot才会正确识别。

什么是springboot

        用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件) 

                创建独立的spring引用程序 main方法运行

                嵌入的Tomcat 无需部署war文件

                简化maven配置

                自动配置spring添加对应功能starter自动化配置

                

springboot常用的starter有哪些

        spring-boot-starter-web 嵌入tomcat和web开发需要servlet与jsp支持

        spring-boot-starter-data-jpa 数据库支持

        spring-boot-starter-data-redis redis数据库支持

        spring-boot-starter-data-solr solr支持

        mybatis-spring-boot-starter 第三方的mybatis集成starter

        

springboot自动配置的原理

        在spring程序main方法中 添加@SpringBootApplication或者@EnableAutoConfiguration

        会自动去maven中读取每个starter中的spring.factories文件  该文件里配置了所有需要被创建spring容器中的bean

 

springboot读取配置文件的方式

        springboot默认读取配置文件为application.properties或者是application.yml

        

springboot集成mybatis的过程

        添加mybatis的starter maven依赖

                <dependency>

                        <groupId>org.mybatis.spring.boot</groupId>

                        <artifactId>mybatis-spring-boot-starter</artifactId>

                        <version>1.2.0</version>

                </dependency>

        在mybatis的接口中 添加@Mapper注解

        在application.yml配置数据源信息

        

springboot如何添加【修改代码】自动重启功能

        添加开发者工具集=====spring-boot-devtools

        

什么是微服务

        以前的模式是 所有的代码在同一个工程中 部署在同一个服务器中 同一个项目的不同模块不同功能互相抢占资源

        微服务 将工程根据不同的业务规则拆分成微服务 微服务部署在不同的机器上 服务之间进行相互调用

        Java微服务的框架有 dubbo(只能用来做微服务),spring cloud(提供了服务的发现,断路器等)

        

springcloud如何实现服务的注册和发现

        服务在发布时 指定对应的服务名(服务名包括了IP地址和端口) 将服务注册到注册中心(eureka或者zookeeper)

        这一过程是springcloud自动实现 只需要在main方法添加@EnableDisscoveryClient  同一个服务修改端口就可以启动多个实例

        调用方法:传递服务名称通过注册中心获取所有的可用实例 通过负载均衡策略调用(ribbon和feign)对应的服务

 

ribbon和feign区别

        Ribbon添加maven依赖 spring-starter-ribbon 使用@RibbonClient(value="服务名称") 使用RestTemplate调用远程服务对应的方法

        feign添加maven依赖 spring-starter-feign 服务提供方提供对外接口 调用方使用 在接口上使用@FeignClient("指定服务名")

Ribbon和Feign的区别:

        Ribbon和Feign都是用于调用其他服务的,不过方式不同。

        1.启动类使用的注解不同,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients。

        2.服务的指定位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。

        3.调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。

        Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可,

        不需要自己构建http请求。不过要注意的是抽象方法的注解、方法签名要和提供服务的方法完全一致。

        

springcloud断路器的作用

        当一个服务调用另一个服务由于网络原因或者自身原因出现问题时 调用者就会等待被调用者的响应 当更多的服务请求到这些资源时

                导致更多的请求等待 这样就会发生连锁效应(雪崩效应) 断路器就是解决这一问题

                断路器有完全打开状态

                        一定时间内 达到一定的次数无法调用 并且多次检测没有恢复的迹象 断路器完全打开,那么下次请求就不会请求到该服务

                半开

                        短时间内 有恢复迹象 断路器会将部分请求发给该服务 当能正常调用时 断路器关闭

                关闭

                        当服务一直处于正常状态 能正常调用 断路器关闭

 

Redis面试题

1. Redis有哪些数据结构?
字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。 
如果你是Redis中高级用户,还需要加上下面几种数据结构HyperLogLog、Geo、Pub/Sub。 
如果你说还玩过Redis Module,像BloomFilter,RedisSearch,Redis-ML,面试官得眼睛就开始发亮了。

2. 使用过Redis分布式锁么,它是什么回事?
先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放。 
这时候对方会告诉你说你回答得不错,然后接着问如果在setnx之后执行expire之前进程意外crash或者要重启维护了,那会怎么样? 
这时候你要给予惊讶的反馈:唉,是喔,这个锁就永远得不到释放了。紧接着你需要抓一抓自己得脑袋,故作思考片刻,好像接下来的结果是你主动思考出来的,然后回答:我记得set指令有非常复杂的参数,这个应该是可以同时把setnx和expire合成一条指令来用的!对方这时会显露笑容,心里开始默念:嗯,这小子还不错。

3. Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如何将它们全部找出来?
使用keys指令可以扫出指定模式的key列表。 
对方接着追问:如果这个redis正在给线上的业务提供服务,那使用keys指令会有什么问题? 
这个时候你要回答redis关键的一个特性:redis的单线程的。keys指令会导致线程阻塞一段时间,线上服务会停顿,直到指令执行完毕,服务才能恢复。这个时候可以使用scan指令,scan指令可以无阻塞的提取出指定模式的key列表,但是会有一定的重复概率,在客户端做一次去重就可以了,但是整体所花费的时间会比直接用keys指令长。

4. 使用过Redis做异步队列么,你是怎么用的?
一般使用list结构作为队列,rpush生产消息,lpop消费消息。当lpop没有消息的时候,要适当sleep一会再重试。 
如果对方追问可不可以不用sleep呢?list还有个指令叫blpop,在没有消息的时候,它会阻塞住直到消息到来。 
如果对方追问能不能生产一次消费多次呢?使用pub/sub主题订阅者模式,可以实现1:N的消息队列。 
如果对方追问pub/sub有什么缺点?在消费者下线的情况下,生产的消息会丢失,得使用专业的消息队列如rabbitmq等。 
如果对方追问redis如何实现延时队列?我估计现在你很想把面试官一棒打死如果你手上有一根棒球棍的话,怎么问的这么详细。但是你很克制,然后神态自若的回答道:使用sortedset,拿时间戳作为score,消息内容作为key调用zadd来生产消息,消费者用zrangebyscore指令获取N秒之前的数据轮询进行处理。 
到这里,面试官暗地里已经对你竖起了大拇指。但是他不知道的是此刻你却竖起了中指,在椅子背后。

5. 如果有大量的key需要设置同一时间过期,一般需要注意什么?
如果大量的key过期时间设置的过于集中,到过期的那个时间点,redis可能会出现短暂的卡顿现象。一般需要在时间上加一个随机值,使得过期时间分散一些。

6. Redis如何做持久化的?
bgsave做镜像全量持久化,aof做增量持久化。因为bgsave会耗费较长时间,不够实时,在停机的时候会导致大量丢失数据,所以需要aof来配合使用。在redis实例重启时,优先使用aof来恢复内存的状态,如果没有aof日志,就会使用rdb文件来恢复。 
如果再问aof文件过大恢复时间过长怎么办?你告诉面试官,Redis会定期做aof重写,压缩aof文件日志大小。如果面试官不够满意,再拿出杀手锏答案,Redis4.0之后有了混合持久化的功能,将bgsave的全量和aof的增量做了融合处理,这样既保证了恢复的效率又兼顾了数据的安全性。这个功能甚至很多面试官都不知道,他们肯定会对你刮目相看。 
如果对方追问那如果突然机器掉电会怎样?取决于aof日志sync属性的配置,如果不要求性能,在每条写指令时都sync一下磁盘,就不会丢失数据。但是在高性能的要求下每次都sync是不现实的,一般都使用定时sync,比如1s1次,这个时候最多就会丢失1s的数据。

7. Pipeline有什么好处,为什么要用pipeline?
可以将多次IO往返的时间缩减为一次,前提是pipeline执行的指令之间没有因果相关性。使用redis-benchmark进行压测的时候可以发现影响redis的QPS峰值的一个重要因素是pipeline批次指令的数目。

8. Redis的同步机制了解么?
从从同步。第一次同步时,主节点做一次bgsave,并同时将后续修改操作记录到内存buffer,待完成后将rdb文件全量同步到复制节点,复制节点接受完成后将rdb镜像加载到内存。加载完成后,再通知主节点将期间修改的操作记录同步到复制节点进行重放就完成了同步过程。

9. 是否使用过Redis集群,集群的原理是什么?
Redis Sentinal着眼于高可用,在master宕机时会自动将slave提升为master,继续提供服务。 
Redis Cluster着眼于扩展性,在单个redis内存不足时,使用Cluster进行分片存储。
 

 

分布式、微服务和集群相关问题

微服务是一种架构,也是在分布式范畴之内的。多微才叫微?在分布式系统中,微服务更加强调单一职责、轻量级通信(HTTP)、独立性并且进程隔离。好了,没什么好说的了,实践出真知,建议大家多多了解 Spring-Cloud相关微服务组件。

一、分布式

小马正在经营一个在线购物网站,名叫TT猫,有商品管理、订单管理、用户管理、支付管理、购物车等模块,每个模块部署到独立的云服务主机。

现在,程序员小明同学浏览TT猫,想买一款牛逼的cherry机械键盘来提升自己的工作效率。于是他打开TT猫首页、搜索商品、浏览详情以及评论、添加购物车、下单、支付等一系列操作。小明同学一气呵成,流畅地完成了购物,当然也花费了不少银子。

但系统又是如何进行这一系列操作,如下图错综复杂的调用关系(自行忽略部分细节)。用户看不见、摸不着,但整个下单过程却行走在网络之间。

TT猫把所有功能模块分布部署在不同的地方,最终完成了用户一系列的请求,这大概就是一个分布式系统吧。

二、微服务

博主认为微服务是一种架构,也是在分布式范畴之内的。多微才叫微?在分布式系统中,微服务更加强调单一职责、轻量级通信(HTTP)、独立性并且进程隔离。好了,没什么好说的了,实践出真知,建议大家多多了解 Spring-Cloud相关微服务组件。

TT猫,每年都会搞一些活动,比如女生最爱的光棍节(双11),夜深人静的时候会瞬间涌入大量用户,指不定就会把某个服务打趴下。

这时候,问题来了用户下单超时,或者直接500错误,如何去解决?

三、负载均衡集群

这种事情怎么可以在如此重要的活动中出现?其实马爸爸提前购买了多台服务器,工程师们已分别把各个业务功能模块复制部署了多份。

每个相同功能的模块,它们构成了一个组,并以单一系统的模式加以管理。当妹子进行下单操作时,实际上是跟一个集群组发生关系,但系统会确保只跟其中一个发生了关系,具体跟谁,集群组有自己的调度算法,不要担心跟妹子发生不了关系。

举个古代猥琐而不淫荡的例子吧,如果你生活在古代,年18,未婚,高富帅,急需解决个人生理问题。故,你来到了传说中的风月场,咳咳,这个古代可是合法的。这时候老鸨或者大茶壶过来招呼你了,如果没有特殊要求,你会被带进一个屋里,里面有个风尘女子......

画风一转,有没有闪瞎自己的程序员万年钛合金狗眼。你可以这么理解,老鸨就是负载均衡器,内置调度算法,风尘女子就是集组其中的一个。

好了,言归正传,省略号自行脑补,小伙伴们看到这里可能会问了,平时生产环境中我们都用什么做负载均衡器?

财大气粗的用硬件F5

不差钱的使用DNS负载均衡

技术牛逼的用LVS

苦逼的创业型小公司只能使用Nginx

当然,负载均衡器不止以上几种,有兴趣的同学自行谷歌了解。

《论知行》篇中说:知其然知其所以然,简单说下这几种负载均衡器到底是如何行走于网络中的吧,学过网络的朋友大概都清楚七层网络模型。

首先一张图,让大家重温一下大学基础课程。

有没有瞬间课堂书本的感觉,不过瘾?再来一张TCP/IP五层模型。

在每一层都工作着不同的设备,比如财大气粗,不差钱的国企使用的F5工作在4-7层,一般互联网企业使用的LVS工作在传输层,使用最广泛的Nginx工作在应用层。

最后来聊一下DNS负载均衡,虽然DNS最原始也是最简单的方法,但是DNS负载均衡的控制权在域名服务商手里,NDS存在多级解析,缓存A记录的问题,以及网站自身无法做更多的管理。这样导致了一般中小公司很少使用。

当然,自身实力够硬,DNS负载均衡也是个不错的选择。下图是检测TT猫域名的A记录得到的部分信息,仅供参考,自行领悟。

四、高可用集群

既然是集群,就不能够出现单点故障,如果大家关注云服务,可能会接触到以下词汇,“双机热备”,“两地三中心”等等词汇。

双机热备是高可用的一种体现形式,如上图所示,生产环境中我们存在两个负载均衡节点,主节点处于激活状态,另一个节点处于备用状态,当主节点意外宕机,可以通过keepalived检测并迅速切换到备用服务,保障业务正常运转。至于两地三中心,下图可能会让大家理解得更加透彻,图片源于网络。

五、弹性云

小马哥为了准备双十一,购置了大量服务器,但活动一过,平时的用户访问量并不能满足服务器的接客能力,导致大量服务器处于空窗期。

这还了得,不能闲着啊,精明的小马哥一拍脑袋,组建了TT云团队。通过多年的努力开发了按量付费云、弹性IP、共享带宽等等产品为中小企业开源节流。

六、故障转移

小明同学觉得这款键盘不错,美滋滋的点击购买按钮,突然跳到了登陆页面。

什么鬼,裤子我都脱了,你就给我看这个?普通用户可能不会觉得有什么问题,重新登陆一次就是了。但小明作为一只严谨的程序猿,他想弄明白其中到底发生了什么。

经过仔细的查阅资料分析,小明得出了以下结论:

发生以上故障,小明以为自己下单的那台服务挂机了,请求被分发到另一台服务上,但为什么会跳到登陆页面呢?作为一名程序员,小明清楚的知道服务分为有状态和无状态的,尽管我们平时的HTTP请求是无状态的,但是一般会通过cookie或者session来确定用户状态。

到这里,各位看官应该明白到底是个什么鬼了吧。就拿我们比较熟悉的Tomcat来说,我们的用户信息一般存储在session中,而session存储在Tomcat内存中。浏览器通过cookie中的JSESSIONID来与服务器进行认证。

然而服务器挂了,下单请求被分发到另一台服务,自然小明再也找不到他的session了。

小明同学把问题反馈给了TT猫,小马哥一看这还得了,集群都做了还差这点,于是赶紧叫工程师们拿出解决方案。

工程师最终提出了两种方案:

服务器用户状态复制(成本大,需要软硬件支持,有延迟,存在失败的风险)

统一存储用户状态(我不说话,我就笑笑)

最终,工程师们采用第二种方案,使用Redis存储用户状态数据。

知识补充

最近接触并使用了阿里云的负载均衡SLB ,大体了解了一下TT猫的负载均衡实现,以下架构实现源于TT猫。

负载均衡采用集群部署,可实现会话同步,以消除服务器单点故障,提升冗余,保证服务的稳定性。阿里云当前提供四层(TCP协议和UDP协议)和七层(HTTP和HTTPS协议)的负载均衡服务。

四层采用开源软件LVS(Linux Virtual Server)+ keepalived的方式实现负载均衡。

七层采用Tengine实现负载均衡。

如下图所示,各个地域的四层负载均衡实际上是由多台LVS机器部署成一个LVS集群来运行的。采用集群部署模式极大地保证了异常情况下负载均衡服务的可用性、稳定性与可扩展性。

LVS集群内的每台LVS都会进行会话,通过组播报文同步到该集群内的其它LVS机器上,从而实现LVS集群内各台机器间的会话同步。如下图所示,当客户端向服务端传输三个数据包后,在LVS1上建立的会话A开始同步到其它LVS机器上。图中实线表示现有的连接,图中虚线表示当LVS1出现故障或进行维护时,这部分流量会走到一台可以正常运行的机器LVS2上。因而负载均衡集群支持热升级,并且在机器故障和集群维护时最大程度对用户透明,不影响用户业务。

SOA面试题

SOA代表了面向服务的架构。如果你正在准备采取SOA,以下SOA的面试问题和答案可能对你非常有用。基本上,这些SOA的面试题涵盖了整个SOA。涉及SOA的服务特点和原理,服务,合同,地址和绑定的松耦合,SOA对于业务和IT的主要优点,服务与组件的差别,SOA的业务需求等等。

1. 什么是SOA的服务?
  在现实世界中,服务是一种我们花费购买到的一种预期的服务。

  例1 (来自真实世界) :你去餐馆订餐,您的订单首先进入到柜台,然后在厨房进行食物准备,最后服务员提供的食物。因此,为了实现一个餐厅订购服务,您需要三个逻辑部门/服务协同工作(计帐,厨房和服务员)。在软件世界同样的方法称为业务服务。

  例2 (软件世界) :你去亚马逊订购了一本书,有不同的服务,如支付网关,库存系统,货运系统等共同完成一本书的订购。

  所有的服务是自包含的,合乎逻辑。他们就像黑盒子。总之,我们并不需要了解业务服务的内部工作细节。对于外部世界,它只是一个能够使用消息交互的黑盒子。例如在“支付网关”业务服务获得消息“检查信贷”后会给出输出:这个客户的信贷有或没有。对于“订单系统”,“支付网关”的服务是一个黑盒子。

 

2.服务的主要特点是什么?
  以下是服务的SOA的主要特点:

A) SOA组件是松耦合的。当我们说松耦合,这意味着每一个服务是自包含单独存在的逻辑。举例来说,我们采取了“支付网关”的服务,并将它附加到不同的系统。

B) SOA服务是黑匣子。在SOA中,服务隐藏有内在的复杂性。他们只使用交互消息,服务接受和发送消息。通过虚拟化一个服务为黑盒子,服务变得更松散的耦合。

C) SOA服务应该是自定义: SOA服务应该能够自己定义。

D) SOA服务维持在一个列表中: SOA服务保持在一个中央存储库。应用程序可以在中央存储库中搜索服务,并调用相应服务。

E) SOA服务可以编排和链接实现一个特定功能: SOA服务可以使用了即插即用的方式。例如,“业务流程”中有两个服务“安全服务”和“订单处理服务” 。从它的业务流程可以实现两种类型:一,您可以先检查用户,然后处理订单,或反之亦然。是的,你猜对了,使用SOA可以松散耦合的方式管理服务之间的工作流。

3.什么是SOA?
  SOA代表了面向服务的架构。 SOA是一种使用松耦合的黑盒子服务构建业务应用的体系架构,这些服务可以通过编排连接在一起以实现特定的功能。

 

4.什么是合同,地址和绑定?
  这是三个SOA的标准术语。每个服务都必须公开一个或多个端点,以便让该服务提供给客户端调用。

合同是两方或多方之间的协议。它定义了一种客户端如何与服务通信的协议。从技术上讲,它有描述参数和返回值的方法。
地址表明在哪儿能找到这种服务。地址是一个URL,它指向服务的位置。
绑定是决定这个端点如何可以访问。它决定了如何完成通信。例如,你暴露你的服务,可以使用SOAP over HTTP或通过TCP的BINARY进行访问。因此,对于这些通信介质将被创建两个绑定。
 

5. 什么Web服务的SOA?
  SOA是一种思想,它是一个架构理念,Web服务是完成它的技术方法。 Web服务是实现SOA首选的标准。在SOA中,我们需要的服务是松耦合的。 Web服务进行通信使用的SOAP协议是基于XML的,这是非常松散的耦合。它回答了什么是服务的一部分。 SOA服务应该能够来形容自己。 WSDL描述了我们如何可以访问该服务。 SOA服务都位于一个目录: UDDI的描述,从那里我们可以得到Web服务。这其实是SOA注册表的实现。

 

6. 什么是SOA的主要好处?
  SOA有助于建立IT和业务线之间的无缝对接,通过产生更多的 IT灵活性,以支持更大的业务灵活性。您的业务流程变化越来越快以及全球剧烈竞争需要SOA能够提供高的灵活性。 SOA能够帮助您更好地重用现有的IT投资和服务。 SOA通过定义服务之间良好接口更易于集成。 SOA还提供了业务伙伴,客户和供应商的服务集成到一个企业的业务流程体系结构模型中。这降低了成本,提高了客户满意度。

 

7. 什么是可重用的服务?
  服务是一个自主的,可重复使用的,可发现的,无状态的,有一定粒度的功能,并且是一个复合应用程序或一个组合服务的一部分。

可重复使用的服务通过业务活动标识,这个业务活动是使用服务规范(设计时合同)描述的。

一个服务约束是,包括安全性,QoS,SLA,使用策略,可以由多个运行时的合同 多个接口(WSDL中的Web服务)以及多个实现(代码)定义的。

可重复使用的服务应在被管制在其从设计到运行整个企业级生命周期。其重用应通过规范流程来推动,重用应该是可测量的。

 

8。谈谈关于服务的标识,自顶向下 top-down和自底向上bottom-up 的两个方法之间是如何鼓励重用和维护?

  自顶向下的方法是业务驱动的,可以在不同计划上分离业务和IT的不同关注,提供两者之间一个共同的基础。因此,在大多数情况下,如果你想提高重用和中期/长期的投资回报率,可以采取这种方法。

9.在一个SOA中如何实现松耦合?
  实现松耦合一种策略是使用服务接口(WSDL中为SOAP Web服务)来限制服务之间的依赖性,对消费者隐藏服务实现。松耦合可以通过实施服务的功能封装以及限制服务接口的实现变化影响来解决。然而,在某些时候,你需要改变接口,也不会影响服务的消费者,除了管理多个安全约束,多种传输,以及其他方面的考虑。

 

10. 你还记得可以用来实现松散耦合的任何模式?
  调解Mediation 模式,使用企业服务总线(ESB)也有助于实现这一目标。调解模式带来松耦合的最高水平。它将建立所有层面上消费者和供应商之间的独立性,包括消息格式,消息类型(包括SOAP,REST,XML,二进制)和传输协议(包括HTTP,HTTPS,JMS)。从体系结构上讲,这意味着分离关注消费者和提供者之间的传输,消息类型和消息格式的水平。

 

11.SOA的服务应该被设计为无状态或有状态?
  服务应该是无状态的。它有一个无状态的执行上下文,但它不会有中间状态来等待一个事件或一个回调。状态有关的数据的保留一定不能超出的服务的请求/响应。这是因为状态管理消耗了大量的资源,这可能会影响服务的可重用 可伸缩性和可用性。

 

12.什么是服务的组合?
  组合是一个该服务被组合以产生复合应用或合成服务的流程。一个组合应用程序是由产生企业门户或企业流程的服务聚集。组合服务也是产生另一种可重复使用的服务的集合。这就像相结合的电子组件来创建一个电脑主板,然后使用该主板组装一台电脑一样。想想主板作为一个可重用的组合服务,它是计算机的一个组成部分,计算机是作为一个复合应用程序。

 

13. 如何使用SOA集成遗留系统?
  如果遗留老的旧的程序是IT环境的核心。通过正确的技能和工具,将遗留应用程序分立组装,然后基于标准的接口包装成SOA的服务。

 

14. ESB企业总线是什么?
  企业服务总线是SOA的核心要素。 ESB产品提供内部服务之间“任何点到任何点”的连接,并超越您的业务边界连接到您的贸易伙伴。但是,SOA并没有止步于仅仅实现了ESB。您可能需要使用ESB来实现SOA,如消息服务,互动服务和业务流程管理服务中的连接等服务。此外,您将还需要考虑发展服务和IT服务管理服务。 SOA参考架构可以帮助你制定出能够满足您的需求和优先事项的SOA环境。 ESB是这个参考架构的一部分,并提供SOA的骨干,但它不应该在SOA中被单独考虑。

 

15. 在SOA中我们是否需要从头开始构建系统?
  否。如果您需要集成现有系统为业务服务,你只需要创建松耦合的包装,包装您的现有系统,并以一种通用的方式暴露功能给外部世界。

 

16. 什么是服务和组件之间的区别?
  服务组件来实现业务功能的逻辑组件分组。组件是为实现服务这个目标的途径。组件可以使用Java,C#,C,但服务将以通用格式如像Web服务方式被暴露。


17. SOA概念其实不是什么新鲜事,但是为什么每个人在最近几年都开始谈论SOA?
是的,我同意了SOA基本概念其实并不新鲜,但一些技术在发展变化,在过去10年面向服务的体系结构取得了详细实用,比以前应用在更多的组织。其中:

普遍接受的行业标准,如XML以及它的许多变种,和Web服务标准一起促成了SOA新的热点。
数据治理框架,这对于成功的SOA实施是很重要的,多年来已经有完善的测试。
各种有利的技术和工具(例如,建模,开发,基础设施/中间件,管理和测试)已经成熟。
注意到企业和企业战略的不断壮大,注意力从技术转移到人,文化的变化,流程是关键业务成功的因素。
 

18. 什么是你采用SOA最重要的技能?技术或文化?
  当然是文化, SOA确实需要人们去思考业务和技术的不同。但不是首先考虑技术(例如,如果我们实现这个系统,我们可以用它做什么样的事情呢?),从业人员必须首先想到的业务功能或服务的条款(例如,我公司要做这些业务功能,所以我如何设置我的IT系统,以最有效地实现这些事情?)预计采用SOA将改变企业的IT部门,建立以服务为导向,而不是技术导向型)IT组织。

 

19. 什么是实现SOA的主要障碍?
  1。短缺的技能。 2. 过分考虑SOA项目的投资回报率。

 

20. 我可以买一个SOA或者必须自己建立呢?
  将你的组织迁走向更大的服务方向,你需要采取平衡的方式来建立与购买SOA。首先需要创建一个SOA的基础架构,你需要补充而不是替代您现有的IT基础设施的和现成的软件。这是“购买”。在“建立”方面,你也可以选择进入相应的专业并动手参与有效地使用这些软件产品,以获得他们的最大效益。这一基础设施和相关的工具可以帮助您创建您的SOA并运行您的业务服务。

 

21. 我是否需要开始SOA治理吗?
  成功SOA实现的一个关键方面是从一开始就努力参与经营。通过SOA你能够得到的价值是改进业务/ IT集成。 SOA治理提供决策权,流程和业务策略和IT一起工作。当服务被部署,就必须管理到位,以控制和监控服务管理方面的问题。开始您不需要很多SOA治理,但足以与正在实施的SOA水平协调就可以。

 

22 . 什么是SOA切入点?
  若要SOA快速入门,您需要选择重点,选择一个初始项目可以在相当短的时间内完成特定的业务。SOA入口点是已被证明能及时提供商业价值的项目区域。每个入口点提供了一个关键的SOA相关的解决方案:

人们 - 通过协作提高生产力,让员工和合作伙伴创造一个与他人互动的个性化的,综合的方式的能力。

流程 - 优化和动态部署流程以及监视改变流程的有效性。

资讯 - 提高业务洞察力和通过使用行和上下文交付降低信息服务风险。

重用 - 可重用的服务是SOA的基石。重用为用户减少周期时间,消除重复流程的灵活性。

连接性 - 虽然在过去,连接性已经成为需求, 但是SOA带来了更高水平的灵活性。

 

23. 什么是SOA常见的陷阱?
  其中最常见的错误是把SOA作为结束,而不是一种手段。专注于构建SOA解决方案,而不是解决特定业务问题,如创造IT资源之间的复杂,难以管理和不必要的互连。另一个常见的错误是一次试图解决多个问题,而不是解决小部分的问题。

 

24. SOA是真正符合你的要求?

  SOA并不是适合每一个人。虽然SOA带来显著效益和成本节约,SOA要求集中治理以及执行纪律是成功的。对于一些组织,制定和执行这些原则的成本可能比实现带来更高成本而不是收益。
 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值