精华内容
下载资源
问答
  • 五分钟熟悉 SpringCloud整体架构

    万次阅读 2020-12-06 09:19:53
    SpringCloud整体架构概览 什么是SpringCloud 目标 协调任何服务,简化分布式系统开发。 简介 构建分布式系统不应该是复杂的,SpringCloud对常见的分布式系统模式提供了简单易用的编程模型,帮助开发者构建弹性、...

    SpringCloud整体架构概览

    什么是SpringCloud

    • 目标

    协调任何服务,简化分布式系统开发。

    • 简介
      构建分布式系统不应该是复杂的,SpringCloud对常见的分布式系统模式提供了简单易用的编程模型,帮助开发者构建弹性、可靠、协调的应用程序。 SpringCloud是在SpringBoot的基础上构建的,使开发者可以轻松入门并快速提高工作效率。 SpringCloud为开发人员提供了快速构建分布式系统架构的工具,例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁定,领导选举,分布式会话,集群状态等。

    整体架构

    在这里插入图片描述

    SpringCloud的版本关系

    SpringCloud是一个由许多子项目组成的综合项目,各子项目有不同的发布节奏。 为了管理SpringCloud与各子项目的版本依赖关系,发布了一个清单,其中包括了某个SpringCloud版本对应的子项目版本。 为了避免SpringCloud版本号与子项目版本号混淆,SpringCloud版本采用了名称而非版本号的命名,这些版本的名字采用了伦敦地铁站的名字,根据字母表的顺序来对应版本时间顺序,例如Angel是第一个版本, Brixton是第二个版本。 当SpringCloud的发布内容积累到临界点或者一个重大BUG被解决后,会发布一个"service releases"版本,简称SRX版本,比如Greenwich.SR2就是SpringCloud发布的Greenwich版本的第2个SRX版本。

    • SpringCloud和SpringBoot版本对应关系

    SpringCloud Version SpringBoot Version
    Hoxton 2.2.x
    Greenwich 2.1.x
    Finchley 2.0.x
    Edgware 1.5.x
    Dalston 1.5.x

    • SpringCloud和各子项目版本对应关系

    Component Edgware.SR6 Greenwich.SR2
    spring-cloud-bus 1.3.4.RELEASE 2.1.2.RELEASE
    spring-cloud-commons 1.3.6.RELEASE 2.1.2.RELEASE
    spring-cloud-config 1.4.7.RELEASE 2.1.3.RELEASE
    spring-cloud-netflix 1.4.7.RELEASE 2.1.2.RELEASE
    spring-cloud-security 1.2.4.RELEASE 2.1.3.RELEASE
    spring-cloud-consul 1.3.6.RELEASE 2.1.2.RELEASE
    spring-cloud-sleuth 1.3.6.RELEASE 2.1.1.RELEASE
    spring-cloud-stream Ditmars.SR5 Fishtown.SR3
    spring-cloud-zookeeper 1.2.3.RELEASE 2.1.2.RELEASE
    spring-boot 1.5.21.RELEASE 2.1.5.RELEASE
    spring-cloud-task 1.2.4.RELEASE 2.1.2.RELEASE
    spring-cloud-gateway 1.0.3.RELEASE 2.1.2.RELEASE
    spring-cloud-openfeign 暂无 2.1.2.RELEASE
    注意:Greenwich版本是基于SpringBoot 2.1.x版本构建的,不适用于1.5.x版本。随着2019年8月SpringBoot 1.5.x版本停止维护,Edgware版本也将停止维护。

    SpringCloud子项目简介

    • Spring Cloud Config

    集中配置管理工具,分布式系统中统一的外部配置管理,默认使用Git来存储配置,可以支持客户端配置的刷新及加密、解密操作。

    • Spring Cloud Netflix

    Netflix OSS 开源组件集成,包括Eureka、Hystrix、Ribbon、Feign、Zuul等核心组件。

    • Eureka

    服务治理组件,包括服务端的注册中心和客户端的服务发现机制;

    • Ribbon

    负载均衡的服务调用组件,具有多种负载均衡调用策略;

    • Hystrix
      服务容错组件,实现了断路器模式,为依赖服务的出错和延迟提供了容错能力;
    • Feign
      基于Ribbon和Hystrix的声明式服务调用组件;
    • Zuul
      API网关组件,对请求提供路由及过滤功能。
    • Spring Cloud Bus

    用于传播集群状态变化的消息总线,使用轻量级消息代理链接分布式系统中的节点,可以用来动态刷新集群中的服务配置。

    • Spring Cloud Consul

    基于Hashicorp Consul的服务治理组件。

    • Spring Cloud Security

    安全工具包,对Zuul代理中的负载均衡OAuth2客户端及登录认证进行支持。

    • Spring Cloud Sleuth

    SpringCloud应用程序的分布式请求链路跟踪,支持使用Zipkin、HTrace和基于日志(例如ELK)的跟踪。

    • Spring Cloud Stream

    轻量级事件驱动微服务框架,可以使用简单的声明式模型来发送及接收消息,主要实现为Apache Kafka及RabbitMQ。

    • Spring Cloud Task

    用于快速构建短暂、有限数据处理任务的微服务框架,用于向应用中添加功能性和非功能性的特性。

    • Spring Cloud Zookeeper

    基于Apache Zookeeper的服务治理组件。

    • Spring Cloud Gateway

    API网关组件,对请求提供路由及过滤功能。

    • Spring Cloud OpenFeign

    基于Ribbon和Hystrix的声明式服务调用组件,可以动态创建基于Spring MVC注解的接口实现用于服务调用,在SpringCloud 2.0中已经取代Feign成为了一等公民。
    后续
    后续将为大家详细讲解springcloud每个技术组件的使用及原理,请大家保持关注

    五分钟学会 Spring Cloud Eureka:服务注册与发现(小白必看,一看就会教程)

    五分钟学会 Spring Cloud Ribbon:负载均衡的服务调用(小白必看,一看就会教程)

    五分钟学会 Spring Cloud Hystrix:服务容错保护(小白必看,一看就会系列教程)

    五分钟学会 Spring Cloud Zuul:API网关服务(小白必看,一看就会教程)

    五分钟学会 Spring Cloud Config:外部集中化配置管理(小白必看,一看就会教程)

    五分钟学会 Spring Cloud Sleuth:分布式请求链路跟踪(小白必看,一看就会教程)

    五分钟学会 Spring Cloud Consul:服务治理与配置中心(小白必看,你看就会教程

    五分钟学会 Spring Boot Admin:微服务应用监控(小白必看,一看就会教程)

    五分钟学会 Spring Cloud Alibaba:Nacos 作为注册中心和配置中心使用(小白必看,一看就会教程)

    五分钟学会 Spring Cloud Alibaba:Sentinel实现熔断与限流(小白必看,一看就会教程)

    五分钟学会 Spring Cloud Bus:消息总线(小白必看,一看就会教程)

    对于技术交流和探讨,或者想跳槽加薪的可以关注我的公众号,免费领取面试资料和技术书籍
    在这里插入图片描述

    展开全文
  • Camera HAL3的整体架构和流程(

    千次阅读 2020-08-24 00:08:12
    本文基于Android P的Camera HAL3架构,以MTK平台为例,分析Camera HAL3的体系结构和调用流程。本文是描述关于MTK平台如何重写Android所定义的ICameraProvider, ICameraDevice, ICameraDeviceSession HIDL interfaces...

    本文基于Android P的Camera HAL3架构,以MTK平台为例,分析Camera HAL3的体系结构和调用流程。本文是描述关于MTK平台如何重写Android所定义的ICameraProvider, ICameraDevice, ICameraDeviceSession HIDL interfaces并实现Camera HAL3。

    这篇文章只是帮助了解HAL层的结构,不涉及具体的代码。

    Camera整体架构

    下图是Android Camera的整个架构。

    Android Camera 整体结构

    首先上层的APK应用通过Activity或Service来调用相机功能,分别获取APIv2中的CameraDevice和CameraManager。翻译成大白话就是获取相机设备和相机管理器,有了相机设备(CameraDevice)才能拍照,而相机管理器(CameraManager)就是用来管理预览,拍照,存储等命令的。

    然后怎样才能获得这两个东西呢,通过Binder的方式来获取,图中蓝色部分可以看成客户端,灰色部分也就是图中的CameraService是服务端,他们之间属于进程间通信

    最后CameraService再通过HIDL接口调用到HAL(Hardware Abstract Layer)层,HAL继续往下一次是Driver层和HW(HardWare)层,就不赘述了,在获取到该相机设备或管理器后调用Callback接口。

    如果你不懂Binder和HIDL是什么,请看HIDL是什么,Binder是什么?

    总结一下:APK应用–>CameraAPI2(客户端)–>CameraService(服务端)–>HAL

    HAL3的内部架构

    大概介绍完了Android Camera的整体结构,接下来是HAL结构的具体内容。

    HAL(Hardware Abstract Layer)硬件抽象层,顾名思义,是用来抽象硬件的。HAL是硬件依赖的,不同的 CPU(例如MTK和Qualcomm) 的 HAL 是不同的,但HAL 也有相同的地方,那就是 HAL 的目的——为上层软件提供一致的 API

    有了HAL层,上层软件就可以做到硬件无关。应用程序可以直接使用 HAL 提供的 API 来操作硬件,而不用管硬件的上电方式,更新组件等差异问题。

    下图是MTK平台的HAL结构。

    HAL具体结构

    MTK HAL分为MiddlewarePipeline(含HWNode,FeaturePipe)。

    Middleware

    其中Middleware主要包括一些接口:ICameraProvider,ICameraDevice,ICameraDeviceSession

    • ICameraProvider
      ICameraProvider会枚举可用的Camera Device,并提供有关设备状态更改(例如连接,断开连接等)的更新。ICameraProvider负责生成相机设备服务名称列表,然后可以在以后打开。
    • ICameraDevice
      ICameraDevice是Android框架中的CameraService用来操作相机设备的。 ICameraDevice接口的实例可以通过ICameraProvider :: getCameraDeviceInterface_vN_x()方法获取,其中N是ICameraDevice接口的版本。
    • ICameraDeviceSession
      ICameraDeviceSession翻译过来就是相机设备会话,它由ICameraDevice创建,顾名思义,它的作用是建立相机设备与上层的会话。

    总结:
    ICameraProvider通过getCameraDeviceInterface_v3_x()来获取ICameraDevice实例,此时还没有对设备进行上电操作,当上层应用获得相机设备实例后,通过ICameraDevice的open函数来对设备进行上电,然后再create一个ICameraSession的实例来让应用操作Device实例。
    在这里插入图片描述

    Pipeline结构

    在这里插入图片描述

    Pipeline由PipeModel, HWNode, FeaturePipe组成,其中PipeModel会针对不同的用户场景来创建对应的HWNode,而不同的HWNode又需要不同的FeatureNode来响应。

    PipeModel在后续的文章会讲到,应当先了解PipeModel的输入和输出是:

    • input:应用请求
    • output:图像流和原始数据

    HWNode负责整合硬件功能,软件算法和第三方算法,其中各个Node的作用如下:

    • P1Node
      它是pipeline的根节点
      输入数据来自上一层
      输出是接下来的P2CaptureNode和P2StreamingNode
      使用ISP-P1

    • P2CaptureNode
      将RAW数据转化为YUV
      支持裁剪
      使用ISP-P2
      处理所有第三方算法(通过CaptureFeaturePipe)

    • P2StreamingNode
      将RAW数据转化为YUV
      支持裁剪
      使用ISP-P2
      处理所用第三方算法(通过StreamingFeaturePipe)

    • JPEGNode
      将YUV转化为JPEG
      输入数据为P2StreamingNode或者P2CaptureNode
      输出数据给应用

    下一篇文章是Camera HAL的调用流程,微信公众号将同步更新该系列文章。

    在这里插入图片描述

    展开全文
  • 在这个Spring框架大行其道的软件开发世界里,尚有很多工程师天天在用,但是从来不会去思考下,Spring框架的整体架构到底是什么样子的啊。 、首先通过维基百科看看什么是Spring框架 维基百科的地址:Spring框架的...

    Spring

    在这个Spring框架大行其道的软件开发世界里,尚有很多工程师天天在用,但是从来不会去思考下,Spring框架的整体架构到底是什么样子的啊。
    一、首先通过维基百科看看什么是Spring框架
    维基百科的地址:Spring框架的维基百科

    二、看一下官网的介绍
    Spring Framework 是一个开源的Java/Java EE全功能栈(full-stack)的应用程序框架,以Apache License 2.0开源许可协议的形式发布,也有.NET平台上的移植版本。该框架基于 Expert One-on-One Java EE Design and Development(ISBN 0-7645-4385-7)一书中的代码,最初由Rod Johnson和Juergen Hoeller等开发。Spring Framework提供了一个简易的开发方式,这种开发方式,将避免那些可能致使底层代码变得繁杂混乱的大量的属性文件和帮助类。

    Spring中包含的关键特性:
    强大的基于JavaBeans的采用控制反转(Inversion of Control,IoC)原则的配置管理,使得应用程序的组建更加快捷简易。
    一个可用于Java EE等运行环境的核心Bean工厂。
    数据库事务的一般化抽象层,允许声明式(Declarative)事务管理器,简化事务的划分使之与底层无关。
    内建的针对JTA和单个JDBC数据源的一般化策略,使Spring的事务支持不要求Java EE环境,这与一般的JTA或者EJB CMT相反。
    JDBC 抽象层提供了有针对性的异常等级(不再从SQL异常中提取原始代码),简化了错误处理,大大减少了程序员的编码量。再次利用JDBC时,你无需再写出另一个’终止’(finally)模块。并且面向JDBC的异常与Spring通用数据访问对象(Data Access Object)异常等级相一致。
    以资源容器,DAO实现和事务策略等形式与Hibernate,JDO和MyBatis、SQL Maps集成。利用众多的翻转控制方便特性来全面支持,解决了许多典型的Hibernate集成问题。所有这些全部遵从 Spring 通用事务处理和通用数据访问对象异常等级规范。
    灵活的基于核心 Spring 功能的MVC网页应用程序框架。开发者通过策略接口将拥有对该框架的高度控制,因而该框架将适应于多种呈现(View)技术,例如JSP、FreeMarker、Velocity、Thymeleaf 等。值得注意的是,Spring 中间层可以轻易地结合于任何基于MVC框架的网页层,例如Struts、WebWork或Tapestry。
    提供诸如事务管理等服务的AOP框架。
    在设计应用程序 Model 时,MVC模式(例如Struts)通常难于给出一个简洁明了的框架结构。Spring 却具有能够让这部分工作变得简单的能力。程序开发员们可以使用Spring的JDBC抽象层重新设计那些复杂的框架结构。

    了解一下Spring的版本历史:
    1.第一版由 Rod Johnson 开发,并在2002年10月发布在 Expert One-on-One J2EE Design and Development 一书中。2003年6月,Spring Framework 第一次发布在 Apache 2.0 许可证下。2004年3月,发布了里程碑的版本1.0,2004年9月以及2005年3月,又发布了新的里程碑版本。2006年,Spring Framework 获得了 Jolt 生产力奖 和 JAX 创新奖。

    2.2006年10月发布Spring 2.0,2007年11月 Spring 2.5,2009年12月 Spring 3.0,2011年 Spring 3.1,2013年11月 Spring 3.2.5,2013年12月发布了4.0版本。[4]值得注意的是,Spring 4.0 版本中增加了对 Java SE 8, Groovy 2, Java EE7 的一些方面以及 WebSocket 的支持。

    3.2017年9月 Spring Framework 正式发布了 5.0 版本,此版本引入了 Spring WebFlux,一个高性能、响应式、异步的 Web 框架。Spring 5.0 重点加强了对函数式编程、响应式编程(reactive programming)的支持能力,是一个非常大的进步。

    三、Spring的整体描述
    Spring Framework 作为一个优秀的开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。
    现在的Spring已然发展成了一个平台,引用Spring官网的原话:
    From configuration to security, web apps to big data – whatever the infrastructure needs of your application may be, there is a Spring Project to help you build it. Start small and use just what you need – Spring is modular by design.

    四、Spring有非常多的主要项目的支持
    Spring主要的项目支持
    这里写图片描述
    下面例举几个比较常用的:
    Main Projects:
    Spring Framework
    Spring Boot
    Spring Cloud
    Spring Security
    Spring Data
    ……

    五、Spring的整体架构(Spring Framework 3.x)
    Spring Framework总共有十几个组件,其中核心组件只有三个:Core、Context 和 Beans。
    Spring Framework 3.x 的总体架构图
    这里写图片描述

    六、组件说明
    组成 Spring Framework的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:
    Spring Core(核心容器):核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
    Spring Context(上下文):Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如:JNDI、EJB、电子邮件、国际化、校验和调度功能。
    Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
    Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
    Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
    Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
    Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。

    从图中可以看出,IOC(控制反转) 的实现包 spring-beans 和 AOP(依赖注入) 的实现包 spring-aop 也是整个框架的基础,而 spring-core 是整个框架的核心,基础的功能都在这里。
    在此基础之上,spring-context 提供上下文环境,为各个模块提供粘合作用。
    在 spring-context 基础之上提供了 spring-tx 和 spring-orm包,而web部分的功能,都是要依赖spring-web来实现的。

    七、Spring Framework 4.x 的系统架构
    这里写图片描述

    八、Spring Framework 4.x 和Spring Framework 3.2.x的架构变化
    1.从图中可以看出,总体的层次结构没有太大变化,变化的是 Spring 4.0.3去掉了 struts 模块(spring-struts包)。现在的 Spring mvc的确已经足够优秀了,大量的 web 应用均已经使用了 Spring mvc。而 struts1.x 的架构太落后了,struts2.x 是 struts 自身提供了和 Spring 的集成包,但是由于之前版本的 struts2 存在很多致命的安全漏洞,所以,大大影响了其使用度,好在最新的2.3.16版本的 struts 安全有所改善,希望不会再出什么大乱子。

    2.web 部分去掉了 struts 模块,但是增加 WebSocket 模块(spring-websocket包),增加了对 WebSocket、SockJS 以及 STOMP 的支持,它与 JSR-356 Java WebSocket API 兼容。另外,还提供了基于 SockJS(对 WebSocket 的模拟)的回调方案,以适应不支持 WebSocket 协议的浏览器。

    3.同时,增加了 messaging 模块(spring-messaging),提供了对 STOMP 的支持,以及用于路由和处理来自 WebSocket 客户端的 STOMP 消息的注解编程模型。spring-messaging 模块中还 包含了 Spring Integration 项目中的核心抽象类,如 Message、MessageChannel、MessageHandler。

    4.如果去看源代码的话,还可以发现还有一个新增的包,加强了 beans 模块,就是 spring-beans-groovy。应用可以部分或完全使用 Groovy 编写。借助于 Spring 4.0,能够使用 Groovy DSL 定义外部的 Bean 配置,这类似于 XML Bean 声明,但是语法更为简洁。使用Groovy还能够在启动代码中直接嵌入Bean的声明。

    5.API的变动,可以参考:变动报告
    第三方类库至少使用2010/2011年发布的版本,尤其是Hibernate 3.6+, EhCache 2.1+, Quartz 1.8+, Groovy 1.8+, and Joda-Time 2.0+。Hibernate Validator要求使用4.3+,Jackson 2.0+。

    6.对JDK的支持:Java 8支持。当然也支持Java6和Java7,但最好在使用Spring框架3.X或4.X时,将JDK升级到Java7,因为有些版本至少需要Java7。

    7.对JavaEE的支持:Java EE 6和7。使用Spring4.x时Java EE版本至少要6或以上,且需要JPA 2.0和Servlet 3.0 的支持,所以服务器,web容器需要做相应的升级。一个更具前瞻性的注意是,Spring4.0支持J2EE 7的适用级规范,比如JMS 2.0, JTA 1.2, JPA 2.1, Bean Validation 1.1和JSR-236并发工具包,在选择这些jar包时需要注意版本。
    使用Groovy DSL定义外部Bean。

    8.核心容器提升:
    8.1 支持Bean的泛型注入,比如:@Autowired Repository customerRepository
    8.2 使用元注解开发暴露指定内部属性的自定义注解。
    8.3 通过 @Ordered注解或Ordered 接口对注入集合或数组的 Bean 进行排序。
    8.4 @Lazy 注解可以用在注入点或 @Bean 定义上。
    8.5 为开发者引入 @Description 注解。
    8.6 引入 @Conditional 注解进行有条件的 Bea n过滤。
    8.7 基于 CGLIB 的代理类不需要提供默认构造器,因为 Spring 框架将 CGLIB 整合到内部了。
    8.8 框架支持时区管理,比如 LocalContext

    9.Web提升
    9.1 增加新的 @RestController 注解,这样就不需要在每个 @RequestMapping 方法中添加 @ResponseBody 注解。
    9.2 添加 AsyncRestTemplate,在开发 REST 客户端时允许非阻塞异步支持。
    为 Spring MVC 应用程序开发提供全面的时区支持。

    10.WebSocket,SockJS 和 STOMP 消息。
    11.测试提升
    11.1 spring-test 模块里的几乎所有注解都能被用做元注解去创建自定义注解,来减少跨测试集时的重复配置。
    11.2 活跃的 bean 定义配置文件可以编程方式解析。
    11.3 spring-core 模块里引入一个新的 SocketUtils 类,用于扫描本地可使用的 TCP 和 UDP 服务端口。一般用于测试需要 socket 的情况,比如测试开启内存 SMTP 服务,FTP 服务,Servlet 容器等。
    11.4 由于 Spring4.0 的原因,org.springframework.mock.web 包现在基于 Servlet 3.0 API。

    十、Spring 4.x的新特性:Spring 4.X新特性

    十一、Spring的设计理念
    Spring 是面向 Bean 的编程(BOP, Bean Oriented Programming),Bean 在 Spring 中才是真正的主角。Bean 在 Spring 中作用就像 Object 对 OOP 的意义一样,没有对象的概念就像没有面向对象编程,Spring 中没有 Bean 也就没有 Spring 存在的意义。Spring 提供了 IOC 容器通过配置文件或者注解的方式来管理对象之间的依赖关系。
    控制反转模式(也称作依赖性介入)的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器 (在 Spring 框架中是 IOC 容器) 负责将这些联系在一起。
    在典型的 IOC 场景中,容器创建了所有对象,并设置必要的属性将它们连接在一起,决定什么时间调用方法。

    十二、面向切面编程
    面向切面编程,即 AOP(Aspect Oriented Programming),是一种编程技术,它允许程序员对横切关注点或横切典型的职责分界线的行为(例如日志和事务管理)进行模块化。AOP 的核心构造是方面,它将那些影响多个类的行为封装到可重用的模块中。
    AOP 和 IOC 是补充性的技术,它们都运用模块化方式解决企业应用程序开发中的复杂问题。在典型的面向对象开发方式中,可能要将日志记录语句放在所有方法和 Java 类中才能实现日志功能。在 AOP 方式中,可以反过来将日志服务模块化,并以声明的方式将它们应用到需要日志的组件上。当然,优势就是 Java 类不需要知道日志服务的存在,也不需要考虑相关的代码。所以,用 Spring AOP 编写的应用程序代码是松散耦合的。
    AOP 的功能完全集成到了 Spring 事务管理、日志和其他各种特性的上下文中。

    十三、IOC 容器
    Spring 设计的核心是 org.springframework.beans 包,它的设计目标是与 JavaBean 组件一起使用。这个包通常不是由用户直接使用,而是由服务器将其用作其他多数功能的底层中介。下一个最高级抽象是 BeanFactory 接口,它是工厂设计模式的实现,允许通过名称创建和检索对象。BeanFactory 也可以管理对象之间的关系。

    BeanFactory 支持两个对象模型:
    单例 模型提供了具有特定名称的对象的共享实例,可以在查询时对其进行检索。Singleton 是默认的也是最常用的对象模型。对于无状态服务对象很理想。
    原型 模型确保每次检索都会创建单独的对象。在每个用户都需要自己的对象时,原型模型最适合。
    bean 工厂的概念是 Spring 作为 IOC 容器的基础。IOC 将处理事情的责任从应用程序代码转移到框架。

    具体其中还有很多的细节问题需要详细的讨论。祝大家学习愉快!

    展开全文
  • 架构师推荐书籍

    千次阅读 2020-05-24 23:18:49
    大家老是让我推荐书单,我就安排波吧,我不会全部推荐技术书籍,因为我觉得收获最大的反而是我看的一些非技术书籍。 友情提示:实体买多了,搬家会累死个人,能买电子书的还是电子书,不过技术书籍看电子书又很...

    大家老是让我推荐书单,我就安排一波吧,我不会全部推荐技术书籍,因为我觉得收获最大的反而是我看的一些非技术书籍。

    友情提示:实体书买多了,搬家会累死个人,能买电子书的还是电子书,不过技术书籍看电子书又很麻烦,所以大家抉择一下,我个人喜欢看实体书,偶尔也会微信读书看看一些散文(纯粹为了以后水文辞藻更丰富,情感表达更文艺)。

    非技术书籍在最后
    推荐书单
    Java核心技术·卷 I(原书第10版)| Core Java Volume

        讲的很全面,书中的代码示例都很好,很适合Java入门。

        但是作者不太厚道的是把现在没人用的GUI编程放在了第一卷,基本上10~13章是可以不用读的。

    深入理解Java虚拟机(第3版)| 周志明

        浅显易懂。最重要的是开启一扇理解虚拟机的大门。

        内存管理机制与Java内存模型、高效并发这三章是特别实用的。

    Redis 深度历险:核心原理与应用实践|钱文品

        真心不错,数据结构原理+实际应用+单线程模型+集群(sentinel, codis, redis cluster), 分布式锁等等讲的都十分透彻。

        一本书的作用不就是系统性梳理,为读者打开一扇窗,读者想了解更多,可以自己通过这扇窗去Google。这本书的一个瑕疵是最后一章吧,写的仓促了。不过瑕不掩瑜。

    Redis设计与实现

        这本书很顺利的看完了,收获很多。

        尽管本书有部分内容陈述有点啰嗦,但也正是这一部分啰嗦把复杂内容讲的非常清晰和易懂,能把不易理解的原理讲的清晰易懂本身就是高水平的体现。本书作者就是这一代表,此书值得推荐。 另外,本书中使用大量图表、伪代码,也让读者理解底层实现有非常大的帮助,另外,作者的语句表达也很流畅。

        我的redis就是看的这两本力荐

    架构探险分布式服务框架 | 李业兵

        刚看前几章的时候,心里满脑子想得都是这特么贴一整页pom文件代码上来干鸡毛,又是骗稿费的,买亏了买亏了,后来到序列化那章开始,诶?还有那么点意思啊。

        到服务注册中心和服务通讯,60块钱的书钱已经赚回来了。

        知识是无价的,如果能花几十块钱帮你扫了几个盲区,那就是赚了。

    Java编程思想(第4版)

        Java领域极具影响力和价值的经典著作!《Software Development》杂志Jolt大奖得主畅销十余年,经典不衰, 程序员案头必备宝典。

        本书赢得了全球程序员的广泛赞誉,即使是非常晦涩的概念,在Bruce Eckel具有亲和力的文字和小而直接的编程示例面前也会化解于无形。

    深入分析JavaWeb技术内幕 | 许令波

        与这本书相识大概是四年前是在老家的北方图书城里,当时看到目录的感觉是真的惊艳,对当时刚入行的自己来说,这简直就是为我量身定做的扫盲科普集啊。

        但是可惜的是,这本书在后来却一直没机会读上。然后经过四年的打怪升级之后,这次的阅读体验依旧很好。

        其中,java编译原理、 Servlet工作原理、 Tomcat、spring和iBatis这几章的收获很大。

    漫画算法:小灰的算法之旅

        近期入手了,有点儿遗憾没有拿到签名款。

        不过这本书真的非常很棒,用漫画的形式讲解知识,生动又形象(感觉小灰和大黄应该是真爱),里面的例子也都非常贴切。总之是一本很棒的算法入门书籍。

    Java并发编程实战

        Jolt大奖提名图书,JavaOne大会最畅销图书,了解Java并发编程必读佳作!线程是Java平台的基础组成部分之一。

        随着多核处理器逐渐成为主流,如何高效地使用并发已成为构建高性能应用程序的重要因素。

        本书涵盖了Java并发中几乎所有基础知识点,并且配有实际案例,深入浅出地介绍了Java线程和并发,是一本完美的Java并发参考手册。

    设计模式:可复用面向对象软件的基础(典藏版)

        本书是引导读者走出软件设计迷宫的指路明灯,凝聚了软件开发界几十年的设计经验。四位顶尖的面向对象领域专家精心选取了颇具价值的设计实践,加以分类整理和命名,并用简洁而易于复用的形式表达出来。

        本书已经成为面向对象技术人员的圣经和词典,书中定义的23个模式逐渐成为开发界技术交流所必备的基础知识和词汇。

    ZooKeeper:分布式过程协同技术详解

        如果无法使分布式应用协同工作,构建分布式应用就会非常困难。

        本书为你展示Apache ZooKeeper如何帮助你管理分布式系统,以使你可以更关注应用本身的逻辑。

        即使拥有ZooKeeper,实现协作任务也并非一帆风顺,不过本书提供的一些好的方法和实践经验为你奠定了良好的开端,同时也为开发人员和运维人员提供了一些使用中的注意事项。

    深入理解计算机系统(原书第3版)

        本书是一本将计算机软件和硬件理论结合讲述的经典教程,内容覆盖计算机导论、体系结构和处理器设计等多门课程。

        本书的最大优点是为程序员描述计算机系统的实现细节,通过描述程序是如何映射到系统上,以及程序是如何执行的,使读者更好地理解程序的行为,以及造成效率低下的原因。

    MySQL技术内幕:InnoDB存储引擎 第2版

        资深MySQL专家撰写,全球知名MySQL数据库服务提供商Percona公司CTO作序推荐,国内多位数据库专家联袂推荐。

        基于MySQL 5.6,结合源代码,从存储引擎内核角度对InnoDB的整体架构、核心实现和工作机制进行深入剖析

    MYSQL实战45讲

        这个我觉得是MySQL必读的,因为实战经验真的很nice,看过的人都知道丙丙没瞎推荐。

        我是跪着看完的,真心不错,去极客时间看就好了。

    半小时漫画世界史 | 陈磊

        和上一本中国史一样,阅读体验很轻松,如果是对这段历史毫无概念的话,真的砸墙推荐。但是如果是要有了一定的知识储备的话,那就没啥意思了,半小时也别指望能讲多深了。

        巴黎和罗马真的是太值得去一次的了。

    穷查理宝典 | 查理芒格

        查理芒格的思想集和演讲稿编,知识面跨学科,洞察力才能足够深,包括数学、物理、生物、历史、经济等这些硬学科,从而形成一个多学科的思维框架。

        致富也不只是赚了多少钱那么简单,而是在道德品质、阅读能力和个人生活上全面提升的过程。应该专注于正在做的事情,多阅读,特别是传记,来和“伟人”交朋友,减少物欲,满足自己已经拥有的,不嫉妒别人。

    影响力

        大多数心理学的东西其实很不好看,信息密度高的书学术性太强,太枯燥,可读性高的书基本都在胡说八道。而这本书是可读性与学术性兼有之,非常适合普通人阅读。

        我喜欢的芒格爷爷推荐过这本书。

    小狗钱钱

        这本书是童话体写成的,本来就是写给小孩子看的,但是大部分成年人财商基本为0,所以看这本书同样适用,他先讲了消费主义的危害、理财的必要性、如何面对贷款、股票、基金、面对下跌时我们应该具备的心态。

        因为是故事体写成的,没有一个专业的名词,甚是生动,也不枯燥,理财还是很有必要的。

    伊凡.伊里奇之死【俄国】列夫.托尔斯泰

        托尔斯泰是文学界神一样的存在。

        写书有现实感,这可能听起来是个很一般的夸奖方式,但我觉得这就是托尔斯泰的可怕之处,怎么说呢,你拿起书,就像拿了一个麻袋,你看书,就像在往里面钻,随着故事的深入,你已经套在里面出不来了。

        他能触发人类精神世界中最敏感的那一部分,你觉得不再是看小说,就是在看现实。

    白夜行|东野圭吾

        把小说写成这样绝对是开挂了吧,除了连番登场的几十号人物,随处雕琢的大时代的背景也让人叹为观止。对人性的挖掘比起吉田修一还是弱一些,就是纯好看,从第一句开始吸住你逐渐往往里掉。

    嫌疑人X的献身|东野圭吾

        这个社会 每一个人都是时钟上的齿轮,为了自己的意愿,也不该牺牲掉他人,哪怕那是出于爱,一个错误尚且为错,付出更大的努力用更大错误也扭转不了的,

        这毕竟不是数学的负负得正,逻辑之所以没法解决罪恶的问题,只因为最初就规避了人性。

    追风筝的人|卡勒德·胡赛尼

        为什么忠诚善良的人反而遭到这样的结局,面对阿米尔的污蔑,他和阿里选择离去。

        当房屋需要他时,他又毅然决然的选择坚守,为了阿米尔能够得到父亲的赞许,哈桑却受到那样的凌辱,换来的却是懦弱的阿米尔的回避,身份,阶级,好可笑的头衔,生命与忠诚在那些虚无的名誉不值一提。

        犹如草芥浮萍....

    龙族I-IV|江南

        我十六岁的时候,看《缥缈录》,心中念着那个拿着虎牙枪的少年。

        如今我二十三岁了,看《龙族》,面对一堆白烂中二的吐槽不知所措。

        就像拿枪的少年穿起了风衣,救美的英雄接受了金币。我看着商业化写作对一个作者的侵蚀和改变,这让我觉得难过极了。

    三体I-Ⅲ|刘慈欣

        《三体》就是那种让你在读完三部之后掩卷抬头,感觉眼中的世界都从此不一样了的书。

    流浪地球|刘慈欣

        觉得文笔胜于三体,且惊觉是三体之前的作品。

        对于其中地球变轨后的生态变化仍存在疑惑,那段地球与木星擦肩表现力强,不错的作品。

    活着|余华

        为啥安利这个,大家懂就好了,看完别哭就好了,有点压抑。

        都给我哭!

    你知道的越多,你不知道的越多,

    注:如果本篇博客有任何错误和建议,欢迎人才们留言,你快说句话啊!

    原文链接:https://blog.csdn.net/qq_35190492/article/details/106235335

    展开全文
  • muduo网络库源码分析——整体架构

    千次阅读 2018-10-09 22:54:29
    muduo的源代码中,虽然不考虑可移植性,但还是划分了很多小的类(Channel、Socket、TcpConnection、Acceptor,不知道是不是参考了java中的概念),类之间大量通过boost::...本文的主要目的:从整体架构上分析muduo的...
  • PMP 项目管理整体架构思维导图 解读 PMP 项目管理(01)引论思维导图 解读 PMP 项目管理(02)项目运行环境思维导图 解读 PMP 项目管理(03)项目经理角色思维导图 解读 PMP 项目管理(04)项目整合管理思维导图...
  • 读《如何阅读一本书》乱摘

    千次阅读 2016-06-09 23:28:00
    《如何阅读一本书》 - 莫提默•J.艾德勒 & 查尔斯•范多伦 著 - 郝明义 朱衣 译 来自简书。 如何第一次读本书? 我们每个人都有这样的体经验:对一本难读的书抱有高度期望,以为它能启发我们,结果却只是在...
  • 10Java架构师必读书籍

    千次阅读 2019-10-18 11:15:42
    本书围绕大型网站和支撑大型网站架构的Java中间件的实践展开介绍。 从分布式系统的知识切入,让读者对分布式系统有基本的了解;然后介绍大型网站随着数据量、访问量增长而发生的架构变迁;接着讲述构建Java中间件的...
  • 7.第七课:区块链的整体架构

    千次阅读 2020-06-09 10:04:41
    区块链本身不是新技术,可以说它是种技术架构。无论你擅长什么编程语言,都能够参考这种设计去实现款区块链产品。 我们的课程也是按照区块链的技术架构,从底层数据层慢慢讲起,讲到上层的应用。 二、架构图 从...
  • 大数据的热度在持续的升温,继云计算之后大数据成为又大众所追捧的新星。我们暂不去讨论大数据到底是否适用于您的组织,至少在互联网上已经被吹嘘成无所不能的超级战舰。好像一夜之间我们就从互联网时代跳跃进了...
  • 怎样成为个优秀的架构师?

    万次阅读 多人点赞 2019-10-08 17:15:37
    架构师是个既能掌控整体又能洞悉局部瓶颈并依据具体的业务场景给出解决方案的团队领导型人物。看似完美的“人格模型”背后,是艰辛的探索。 架构师不是个人,他需要建立高效卓越的体系,带领团队去攻城略地,在...
  • 网站架构技术的核心架构要素  部分是本书的重点,涉及中第3章到第8章6个章节的内容,占了全书内容的大半篇幅。其中第三章是后面五章的概述和总结,而第四到第八章则分别介绍了性能、可用性、伸缩性、扩展性和...
  • 《软件架构设计》一书目录

    千次阅读 2012-01-20 09:48:12
    部分 软件架构概念与思想篇 1 第1章 解析软件架构概念 3 1.1 软件架构概念的分类 3 1.1.1 组成派 4 1.1.2 决策派 5 1.2 软件架构概念大观 5 1.2.1 Booch、Rumbaugh和Jacobson的定义 5 1.2.2 ...
  • 企业数字档案馆整体架构及其层次模型研究 2010-5-14  蔡盈芳 内容摘要  本文论述了企业数字档案馆总体架构的研究现状、研究的意义,提出了企业数字档案馆总体架构的层次...
  • muduo库的源代码分析1--整体架构

    千次阅读 多人点赞 2017-01-12 22:44:50
    但是在学习muduo源代码的过程中,还是感觉代码架构比较复杂,个是和boost相关的内容比较多,对现代C++编程理念不了解的人,可能感觉莫名其妙。(关于什么是现代C++,可参考此链接:...
  • 、背景所开发版本目标是构建个电信辅助软件系统,帮某运营商提升网络管理能力,降低维护...作为个兼职的版本架构师(部门原架构师大牛已转其它部门),之前未参与过正式版本的架构设计(自学过架构相关的一些书籍)
  • 读书笔记涉及中的第章——**大型网站架构演变**和第二章——**大型网站架构模式**。在架构演变这块,通过使用**缓存**、**集群**、**分布式**等手段实现网站架构的不断升级以应对业务需要。架构模式则分别介绍...
  • 测试架构师修炼之道--读书笔记

    千次阅读 2018-04-30 14:07:50
    部分 瓶颈:软件测试工程师该如何进行职业规划第1章 软件测试工程师的“三年之痒”1.1 软件测试发展简史:调试--证实--证伪--预防--模型--全周期;1.2 中国的软件测试行业:起点高;困境和迷局(不了解、不理解...
  • 架构,又名软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。 关于什么是模式,这个来自建筑学的词汇是这样定义的:“每个模式描述了个在我们周围不断重复发生的问题及该...
  • 高级消息队列协议AMQP是个异步消息传递所使用的应用层协议规范。消息队列在openstack中是计算节点nova-compute、存储节点nova-volume、网络节点nova-network以及API和各个功能模块之间相互通信写作的重要媒介。...
  • 作者 | 章烨明杏仁医生CTO。中老年程序员,关注各种技术和团队管理。引子这个月读了一本书,《系统架构》。然而这本书讲的不仅仅是软件系统的架构,而是更高一个层面,它讲的是...
  • 如何阅读一本书

    千次阅读 2009-08-11 01:36:00
    《如何阅读一本书》 作者简介 莫提默·J.艾德勒(1902-2001) 以学者、教育家、编辑等多重面貌享有盛名。除了写作《如何阅读一本书》外,以主编《西方世界德经典》,并担任1974年第十五版《大英百科全书》的编辑...
  • 最近读了一本书籍《大型网站技术架构核心原理与案例分析》,觉得写得非常好,所以来写一写读书笔记。今天的笔记是简单介绍一个大型网站从小到大的演化。 每一个大型网站都是从小型网站逐渐演化过来的,大多数网站的...
  • 架构设计之如何写架构设计说明

    千次阅读 2015-06-04 13:55:09
    架构设计是需求分析到软件实现的桥梁,...作为架构师,我想尝试一下根据这三个过程对不同能力需要,写次系列文章,包括《架构设计三部曲之如何写架构设计说明》、《架构设计三部曲之如何评审架构设计说明》以
  • 篇:Siebel CRM概述什么是客户关系治理?客户关系治理(CRM)就建立企业与顾客关系、提高企业核心竞争力而言是一套先进的治理思想及技术手段,它通过将人力资源、业务流程与专业技术进行有效的整合,最终为...
  • 简短的读后感极其推荐的一本书,其实我是第二遍读这本书了,第一遍读的时候还没有毕业,读到一半发现很多都没有经历过,便放弃了。正好正在经历着一个大项目的成长中,如今再次读起这本书,多了几分熟悉,多了几分...
  • 在京东阅读看到秋叶大叔的《如何高效读懂一本书》,看到了150页后,果断放弃电子书,在淘宝发了19元买纸质书,我相信是正版的,因为还有书套夹。这本书给我极大的震撼,读书也可以很有趣,读书也可以让人明智理,...
  • 强烈推荐10程序员必读的

    万次阅读 多人点赞 2020-01-26 03:42:34
    很遗憾,这个春节注定是刻骨铭心的,新型冠状病毒让每个人的神经...我花了天的时间,挑选了 10 我最喜欢的,你可以挑选感兴趣的来读读。读书不仅可以平复恐惧的压力,还可以对未来充满希望,毕竟苦难终将会...
  • 《如何阅读一本书

    千次阅读 2006-09-10 13:15:00
    《如何阅读一本书》 作者简介 莫提默·J.艾德勒(1902-2001) 以学者、教育家、编辑等多重面貌享有盛名。除了写作《如何阅读一本书》外,以主编《西方世界德经典》,并担任1974年第十五版《大英百科全书》的编辑...
  • java架构师之路:推荐的15本书

    千次阅读 2016-01-19 09:13:30
    一 对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这个阶段需要你快速的掌握Java基础语法和基本用法,宗旨就是...这个时候《Java编程思想》是一本让你知其所以然的好书,它对于基本的面向对象知识

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,502
精华内容 24,200
关键字:

一本书的整体架构