
spring
文章平均质量分 87
Java烂猪皮V
专注于分享Java后端架构核心技术知识点以及最新面试宝典。
展开
-
阿里经典面试题:Spring Boot中的条件注解底层是如何实现的?
分析完了条件注解的执行逻辑之后,接下来的问题就是SpringBoot是如何让这些条件注解生效的?SpringBoot使用ConditionEvaluator这个内部类完成条件注解的解析和判断。在Spring容器的refresh过程中,只有跟解析或者注册bean有关系的类都会使用ConditionEvaluator完成条件注解的判断,这个过程中一些类不满足条件的话就会被skip。原创 2023-05-31 11:17:21 · 116 阅读 · 0 评论 -
【23】Spring 中 @Transactional 是如何实现的?
Transactional是spring中声明式事务管理的注解配置方式,相信这个注解的作用大家都很清楚。@Transactional注解可以帮助我们把事务开启、提交或者回滚的操作,通过aop的方式进行管理。通过@Transactional注解就能让spring为我们管理事务,免去了重复的事务管理逻辑,减少对业务代码的侵入,使我们开发人员能够专注于业务层面开发。原创 2023-05-26 18:05:50 · 241 阅读 · 0 评论 -
看完就理解Spring中的IOC和AOP两大特征
一、spring 的优点?1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦2.可以使用容易提供的众多服务,如事务管理,消息服务等3.容器提供单例模式支持4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能5.容器提供了众多的辅助类,能加快应用的开发6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等7.spring属于低侵入式设计,代码的污染极低8.独立于各种应用服务器9.spring的DI机制降低了业务对原创 2021-04-15 14:19:49 · 250 阅读 · 0 评论 -
Spring框架总结的「无比详细」,看完还说不懂别学了
1、IOC和DIIOC: 控制反转即控制权的转移,将我们创建对象的方式反转了,以前对象的创建时由我们开发人员自己维护,包括依赖关系也是自己注入。使用了spring之后,对象的创建以及依赖关系可以由spring完成创建以及注入,反转控制就是反转了对象的创建方式,从我们自己创建反转给了程序创建(spring)DI: Dependency Injection 依赖注入spring这个容器中,替你管理着一系列的类,前提是你需要将这些类交给spring容器进行管理,然后在你需要的时候,不是自己去定义,而是原创 2021-02-23 14:44:38 · 314 阅读 · 0 评论 -
分布式消息中间件 — MQ
消息队列(Message Queue,简称 MQ)是阿里巴巴集团中间件技术部自主研发的专业消息中间件。用于保证异构应用之间的消息传递。应用程序通过MQ接口进行互连通信,可以不必关心网络上的通信细节,从而将更多的注意力集中于应用本身。分布式消息系统作为实现分布式系统可扩展、可伸缩性的关键组件,需要具有高吞吐量、高可用等特点。对象•消息 (Message)•队列 (Queue)•队列管理器(Queue...原创 2018-06-04 21:14:20 · 1500 阅读 · 0 评论 -
Dubbo原理何源码解析之服务暴露
一、框架设计在官方《Dubbo 用户指南》架构部分,给出了服务调用的整体架构和流程:另外,在官方《Dubbo 开发指南》框架设计部分,给出了整体设计:以及暴露服务时序图:本文将根据以上几张图,分析服务暴露的实现原理,并进行详细的代码跟踪与解析。二、原理和源码解析2.1 标签解析从文章《Dubbo原理和源码解析之标签解析》中我们知道,<dubbo:service> 标签会被解析成 Ser...原创 2018-06-14 21:00:20 · 394 阅读 · 0 评论 -
老生常谈,HashMap的死循环
问题最近的几次面试中,我都问了是否了解HashMap在并发使用时可能发生死循环,导致cpu100%,结果让我很意外,都表示不知道有这样的问题,让我意外的是面试者的工作年限都不短。由于HashMap并非是线程安全的,所以在高并发的情况下必然会出现问题,这是一个普遍的问题,虽然网上分析的文章很多,还是觉得有必须写一篇文章,让关注我公众号的同学能够意识到这个问题,并了解这个死循环是如何产生的。如果是在单...原创 2018-05-31 23:19:48 · 443 阅读 · 0 评论 -
Redis 的 5 个常见应用场景
前言Redis 是一个强大的内存型存储,具有丰富的数据结构,使其可以应用于很多方面,包括作为数据库、缓存、消息队列等等。如果你的印象中Redis只是一个 key-value 存储,那就错过了Redis很多强大的功能,下面就是实际应用场景中5个最普遍的案例。1. 全页面缓存如果你使用的是服务器端内容渲染,你又不想为每个请求重新渲染每个页面,就可以使用 Redis 把常被请求的内容缓存起来,能够大大的...原创 2018-06-08 17:41:47 · 10596 阅读 · 0 评论 -
分布式服务Dubbo的前世今生
SOA与服务治理SOA(面向服务的体系结构)概念由来已久,在10多年前便开始进入到我们广大软件开发者的视线中。SOA是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。SOA可以看作是B/S模型、Web Service技术之后的自然延伸。服务治理,也称为SOA治理,是指用来管理SOA的采用和实现的过程。以下是在2006年时IBM对于服务治理要点的总结...原创 2018-06-01 22:32:52 · 1745 阅读 · 0 评论 -
使用并发工具实现 RPC 调用流量控制
前言RPC 服务中,每个服务的容量都是有限的,即资源有限,只能承受住给定的网络请求,所以,在设计 RPC 框架的时候,一定要考虑流量控制这个问题。而 Java 中,实现流量控制有很多中方式,今天说 2 种。Semaphore 实现流控代码:代码中,我们模拟了 100 个线程,每个线程无限调用 RPC。同时使用另一个定时任务,定时更新 Semaphore 可用许可为 100。客户端线程调用时,会尝试...原创 2018-06-08 21:43:11 · 802 阅读 · 0 评论 -
如何优雅的使用MQ-详述功能场景
消息队列(MQ)是一种不同应用程序之间(跨进程)的通信方法。应用程序通过写入和检索出入列队的数据(消息)来通信,而无需通过专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用(Remote Procedure Call. RPC)的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的...原创 2018-06-09 16:18:23 · 410 阅读 · 0 评论 -
Nginx 架构初探
引言:众所周知,Nginx 服务器是一个高性能的 Web 和反向代理服务器。Nginx 在激烈的 Web 服务器竞争中依旧保持良好的发展势头,一度成为 Web 服务器市场的后期之秀,这一切跟 Nginx 的架构设计是分不开的。一. Nginx 模块化设计高度模块化的设计是 Nginx 的架构基础。Nginx 服务器被分解为多个模块,每个模块就是一个功能模块,只负责自身的功能,模块之间严格遵循“高内...原创 2018-06-09 16:41:31 · 806 阅读 · 0 评论 -
深度解读Tomcat中的NIO模型
一、I/O复用模型解读Tomcat的NIO是基于I/O复用来实现的。对这点一定要清楚,不然我们的讨论就不在一个逻辑线上。下面这张图学习过I/O模型知识的一般都见过,出自《UNIX网络编程》,I/O模型一共有阻塞式I/O,非阻塞式I/O,I/O复用(select/poll/epoll),信号驱动式I/O和异步I/O。这篇文章讲的是I/O复用。这里先来说下用户态和内核态,直白来讲,如果线程执行的是用户...原创 2018-06-09 17:16:31 · 523 阅读 · 0 评论 -
读懂Netty的高性能架构之道
Netty是一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。作为当前最流行的NIO框架,Netty在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,一些业界著名的开源组件也基于Net...原创 2018-06-07 22:58:12 · 540 阅读 · 0 评论 -
两个月拿到N个offer,看看我是如何做到的
前言:北京-三年经验-Java,在金三银四这两个月期间(在五月初还去面试了几家,主要是三四月份期面试剧居多),我跳槽面试,前前后后我面试十五家公司,最终,成功拿到了offer。现在已经正常上班,所以,现在才有时间静下心来把前面两个多月的面试经历做一个总结,来聊聊当时我面试15家大厂的感受以及总结。(文章有点长,请读者耐心观看,谢谢~~~~)面试经历1、阿里面试第一轮:电话初面第二轮:技术面谈【技术...原创 2018-05-30 22:10:37 · 442 阅读 · 0 评论 -
MySQL-性能优化-优化设计和设计原则
MySQL-性能优化-优化设计和设计原则MySQL性能优化目的如何合理的设计数据库?什么样的数据库设计才能给后期DBA优化提供基石?数据库设计与程序设计的差异?数据库设计早期优化1. 关系明确(理清表之间的关系,可以通过冗余的方式提高效率)2. 节省空间(根据业务经验,设置字段长短)3. 提高效率数据库表开发流程原型=>逐步完善(表的设计也是如此)数据库种类1. 层级数据库(注册表) 如:W...原创 2018-05-30 17:13:03 · 614 阅读 · 0 评论 -
阿里架构师眼里JVM可以说的那些事
前言对于C语言开发的程序员来说,在内存管理方面,必须负责每一个对象的生命周期,从有到无。对于Java程序员你来说,在虚拟机内存管理的帮助下,不需要为每个new对象都匹配free操作,内存泄露和内存溢出等问题也不太容易出现,不过也正是因为把内存管理交给了虚拟机,一旦运行中的程序出现了内存泄露问题,给排查过程造成很大困难。所以只有理解了Java虚拟机的运行机制,才能够运筹帷幄于各种代码。本文以HotS...原创 2018-06-04 22:06:32 · 331 阅读 · 0 评论 -
基于Spring Cloud微服务集群的服务治理思考
Spring介绍1.核心组件: Beans:表示的是Spring对所有Bean对象的管理,主要包含了对象间的关系配置以及一些对象实例化操作.Core:包含了最底层的开发支持,例如:依赖注入关系,资源文件的访问,数据类型的转换;Context:提供的是一个完整的容器上下文,在这个上下文可以处理对象生命周期或者是事务.表达式语言模块:利用SpEL实现表达式语言的操作,以增强String的功能,2.切面...原创 2018-05-24 22:37:11 · 518 阅读 · 0 评论 -
10 个常用的软件架构模式
你是否曾经思考过如何设计大型的企业级系统?在决定启动软件开发之前,首要的是选择恰当的架构来指引系统的功能及质量属性设计。因此在将软件架构应用于设计之前,必需要了解常用的架构模式。什么是架构模式?Wikipedia 的解释:在软件架构中,架构模式是对特定环境下常见问题的通用且可重用的解决方案。架构模式与软件设计模式很相似,但架构模式的层次更高,且外延更大。这篇文章将简述常见的 10 种架构模式的概念...原创 2018-05-29 21:39:25 · 518 阅读 · 0 评论 -
基于Spring Cloud的微服务落地
微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,并且能够发挥该架构模式的重要作用,则需要微服务框架的支持。在Java生态圈,目前使用较多的微服务框架就是集成了包括Netfilix OSS以及Spring的Spring Cloud。它包括:Spring Cloud Config:配置管理工具,支持使用Git存储配置内容,可以实现应用配置的外部化存...原创 2018-05-29 22:30:25 · 620 阅读 · 0 评论 -
MySQL 内核深度优化
MYSQL数据库适用场景广泛,相较于Oracle、DB2性价比更高,Web网站、日志系统、数据仓库等场景都有MYSQL用武之地,但是也存在对于事务性支持不太好(MySQL 5.5版本开始默认引擎才是InnoDB事务型)、存在多个分支、读写效率瓶颈等问题。所以如何用好MYSQL变得至关重要,一方面需要通过MYSQL优化找出系统读写瓶颈,提高数据库性能;另一方面需要合理涉及数据结构、调整参数,以提高用...原创 2018-06-20 22:05:56 · 439 阅读 · 0 评论 -
RabbitMQ进程结构分析与性能调优
RabbitMQ是一个流行的开源消息队列系统,是AMQP(高级消息队列协议)标准的实现,由以高性能、健壮、可伸缩性出名的Erlang语言开发,并继承了这些优点。业界有较多项目使用RabbitMQ,包括OpenStack、Spring、Logstash等。腾讯云在开发云消息队列系统(CMQ)时,对RabbitMQ进行了大量的学习和优化,包括瓶颈分析、内存管理、参数调优等。下文结合Erlang和Rab...原创 2018-06-20 22:10:04 · 761 阅读 · 0 评论 -
MySQL 数据库设计总结
规则1:一般情况可以选择MyISAM存储引擎,如果需要事务支持必须使用InnoDB存储引擎。注意:MyISAM存储引擎 B-tree索引有一个很大的限制:参与一个索引的所有字段的长度之和不能超过1000字节。另外MyISAM数据和索引是分开,而InnoDB的数据存储是按聚簇(cluster)索引有序排列的,主键是默认的聚簇(cluster)索引,因此MyISAM虽然在一般情况下,查询性能比Inno...原创 2018-06-20 22:19:44 · 378 阅读 · 0 评论 -
如何设计一个 RPC 系统
RPC是一种方便的网络通信编程模型,由于和编程语言的高度结合,大大减少了处理网络数据的复杂度,让代码可读性也有可观的提高。但是RPC本身的构成却比较复杂,由于受到编程语言、网络模型、使用习惯的约束,有大量的妥协和取舍之处。本文就是通过分析几种流行的RPC实现案例,提供大家在设计RPC系统时的参考。由于RPC底层的网络开发一般和具体使用环境有关,而编程实现手段也非常多样化,但不影响使用者,因此本文基...原创 2018-06-20 22:21:52 · 1066 阅读 · 0 评论 -
MySQL 数据库的高可用性分析
MySQL数据库是目前开源应用最大的关系型数据库,有海量的应用将数据存储在MySQL数据库中。存储数据的安全性和可靠性是生产数据库的关注重点。本文分析了目前采用较多的保障MySQL可用性方案。MySQL ReplicationMySQL Replication是MySQL官方提供的主从同步方案,用于将一个MySQL实例的数据,同步到另一个实例中。Replication为保证数据安全做了重要的保证,...原创 2018-06-20 22:23:49 · 378 阅读 · 0 评论 -
谈谈为什么需要服务治理(Dubbo)
服务治理主要针对于当前分布式架构下多服务、微服务等。服务是分布式系统下的一个不大不小的部分,有了服务的组成,整个系统才能活起来。随着业务的增长,服务不能一味地随之增长,需要管理、治理。没有服务治理的分布式系统不一定会失败,但是随着业务的增长,这个系统一定会很痛苦。服务治理的目标服务治理严格意义上应该划分为三个阶段,包含了服务的整个生命周期。其中服务设计期主要针对于服务的设计期、开发期,而服务运行期...原创 2018-06-09 17:21:51 · 1697 阅读 · 0 评论 -
淘宝面试回来,想对程序员们谈谈
起因:因为我是一个不管做什么事情都喜欢进行总结的一个人。所以对于在上周去淘宝面试的经历,现在面试回来总结,我想对所有程序员们谈谈。之前我是在一家外企工作的,待遇还算不错,自己也做了快五年了,因为考虑到家庭的原因,所以在前面几周辞职回了杭州。在朋友听到我辞职回来后,好多关系比较好的同事朋友也向我推荐了好多家企业。如:蚂蚁金服;支付宝;蘑菇街;阿里云;淘宝;挖财等~~~~这几家公司我都去面试了,情况还...原创 2018-06-30 17:45:51 · 1101 阅读 · 0 评论 -
深入理解阿里分布式消息中间件
什么是分布式消息中间件什么是分布式消息中间件?对于分布式消息中间件,首先要了解两个基础的概念,即什么是分布式系统,什么又是中间件。 分布式系统:“A distributed system is one in which components located at networked computers communicate and coordinate their actions only by...原创 2018-07-06 21:54:45 · 1773 阅读 · 0 评论 -
基于 Docker 的微服务架构实践
本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践}前言基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 DevOps,也见证了 Docker 的技术体系的快速发展。本文主要是结合在公司搭建的微服务架构的实践过程,做一个简单的总结。希望给在创业初期探索如何布局服务架构体系的 DevOps,或者想初步...原创 2018-07-26 21:28:43 · 674 阅读 · 0 评论 -
轻松搞定RocketMQ入门
RocketMQ是一款分布式、队列模型的消息中间件,具有以下特点: 能够保证严格的消息顺序 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅机制 亿级消息堆积能力 RocketMQ网络部署特(1)NameServer是一个几乎无状态的节点,可集群部署,节点之间无任何信息同步(2)Broker部署相对复杂,Broker氛围...原创 2018-08-09 22:14:57 · 532 阅读 · 0 评论 -
spring+springmvc+kafka分布式消息中间件集成方案
onghu的消息服务平台已经抛弃了之前的ActiveMQ,改用高吞吐量比较大的Kafka分布式消息中间件方案:kafka消息平台使用spring+kafka的集成方案,详情如下:1. 使用最高版本2.1.0.RELEASE集成jar包:spring-integration-kafka2. Zookeeper、Kafka分布式集群使用init.properties配置化方案。 Ja...原创 2018-09-08 13:48:37 · 873 阅读 · 0 评论 -
微服务写的最全的一篇文章
今年有人提出了2018年微服务将疯狂至死,可见微服务的争论从未停止过。在这我将自己对微服务的理解整理了一下,希望对大家有所帮助。 1.什么是微服务 1)一组小的服务(大小没有特别的标准,只要同一团队的工程师理解服务的标识一致即可) 2)独立的进程(java的tomcat,nodejs等) 3)轻量级的通信(不是soap,是http协议) ...原创 2018-09-26 22:19:47 · 828 阅读 · 0 评论 -
Springboot 2.0 - 集成redis
最近在入门SpringBoot,然后在感慨 SpringBoot较于Spring真的方便多时,顺便记录下自己在集成redis时的一些想法。 从springboot官网查看redis的依赖包 <dependency> <groupId>org.springframework.boot</groupId> ...原创 2018-10-04 22:38:54 · 342 阅读 · 0 评论 -
Spring事务事件监控
前面我们讲到了Spring在进行事务逻辑织入的时候,无论是事务开始,提交或者回滚,都会触发相应的事务事件。本文首先会使用实例进行讲解Spring事务事件是如何使用的,然后会讲解这种使用方式的实现原理。1. 示例 对于事务事件,Spring提供了一个注解@TransactionEventListener,将这个注解标注在某个方法上,那么就将这个方法声明为了一个事务事件处理器,而具...原创 2018-10-21 15:29:05 · 1700 阅读 · 0 评论 -
Dubbo和Spring Cloud微服务架构
微服务架构是互联网很热门的话题,是互联网技术发展的必然结果。它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。虽然微服务架构没有公认的技术标准和规范或者草案,但业界已经有一些很有影响力的开源微服务架构框架提供了微服务的关键思路,例如Dubbo和Spring Cloud。各大互联网公司也有自研的微服务框架,但其模式都于这二者相差不大。微服务主要的优势如下:...原创 2018-10-23 22:17:13 · 397 阅读 · 0 评论 -
深入理解分布式系统kafka知识点
Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一个分布式的,可划分的,冗余备份的持久性的日志服务。它主要用于处理活跃的流式数据。在大数据系统中,常常会碰到一个问题,整个大数据是由各个子系统组成,数据需要在各个子系统中高性能,低延迟的不停流转。传统的企业消息系统并不是非常适合大规模的数据处理。为了能在同时搞定在线应用(消息)和...原创 2018-07-05 22:26:19 · 347 阅读 · 0 评论 -
Spring核心——Bean的定义与控制
在前面两篇介绍Sring核心与设计模式的文章中,分别介绍了Ioc容器和Bean的依赖关系。如果阅读过前2文就会知道,Spring的整个运转机制就是围绕着IoC容器以及Bean展开的。IoC就是一个篮子,所有的Bean都向里面扔。除了提供篮子功能创建并存放Bean之外,IoC还要负责管理Bean与Bean之间的关系——依赖注入。之前也提到Bean是Spring核心容器的最小工作单元,Spring一些...原创 2018-06-28 21:44:28 · 505 阅读 · 0 评论 -
最近刷爆朋友圈的一道面试题
前言:最近在网上有一道面试题掀起了劲爆的浪潮,好多家公司都模仿提问了这么一道面试题,而且好多人也都在讨论这道面试题要是自己回答的话该怎么回答!这道题也是在个网站上刷爆了。面试题 如果不用Spring,你打算怎么做开发工作?就是这么一道spring面试题,要是面试官问你,你该如何回答?答案各有千秋,接下来看看网友们是怎么说的。开源动弹知乎度娘问答社区看了这些截图,相信你们自己心中也有了属于自己的答案...原创 2018-07-02 23:07:18 · 1347 阅读 · 0 评论 -
阿里消息中间件之JMS实践(ActiveMQ)
1、消息中间件作用作为一个消息传递中间层,方便信息发送者和接受者通信。2、消息中间件好处1、信息解耦:信息发送方和接收方通过中间件通信,不需要直接通信。2、异步:消息被中间件处理,发送方和接收方都不用直接通信。3、安全可靠:中间件做的还是很可靠地。。4、横向扩展:支持多信息发送方和接收方5、顺序保证:中间件功能。3、常见消息中间件JMS(Java Message Service):java平台中面...原创 2018-06-19 22:54:37 · 484 阅读 · 0 评论 -
SpringBoot使用RabbitMQ消息队列
RabbitMQ简介AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语...原创 2018-06-19 22:57:11 · 460 阅读 · 0 评论