骆驼整理说
这个作者很懒,什么都没留下…
展开
-
Nginx
作为web服务器:Nginx可以处理静态页面,支持CGI协议的动态语言(如perl、php等),但不直接支持Java。- 在中国大陆,许多知名网站如百度、京东、新浪、网易、腾讯、淘宝等都使用Nginx作为他们的web服务器或反向代理服务器。- Nginx的特点包括占有内存少、并发能力强,能经受高负载的考验,有报告表明能支持高达50,000个并发连接数。对于新建站点,建议使用最新稳定版作为生产版本。- 反向代理:Nginx常用于作为反向代理,帮助接收用户的请求,然后将请求按照规则转发到不同的服务器节点。原创 2024-07-15 17:44:00 · 153 阅读 · 0 评论 -
分布式系统
在一个分布式系统中,一组独立的计算机展现给用户的是一个统一的整体。自治性:系统中的各个节点都包含自己的处理机和内存,各自具有独立的处理数据的功能。节点之间在地位上是平等的,既可以自治地进行工作,又能利用共享的通信线路来传送信息,协调任务处理。分布式系统是一个复杂但功能强大的架构,它能够有效地处理大量数据和任务,提供高可用性和高并发的服务,是现代计算机领域中不可或缺的一部分。分布性:分布式系统由多台计算机组成,它们在地域上是分散的,可以散布在一个单位、一个城市、一个国家,甚至全球范围内。原创 2024-05-25 11:31:20 · 202 阅读 · 0 评论 -
SpringBoot
SpringBoot的应用场景广泛,它简化了Spring应用的搭建和开发过程,使得开发者可以更加专注于业务逻辑的实现。SpringBoot通过简化配置和提供一系列开箱即用的功能,大大降低了Spring应用的开发难度,提高了开发效率,使得开发者能够更加轻松地构建出高质量的Spring应用。自动化配置:根据项目中引入的依赖和约定,自动配置应用程序中的各种组件和功能,减少了开发者手动编写大量XML或注解配置的工作量,降低了出错的可能性。原创 2024-05-24 22:33:14 · 170 阅读 · 0 评论 -
Web环境中的SpringMVC
在 web.xml 中,已经配置了 ContextLoaderListener,它是 Spring 提供的类,是为在 Web 容器 中建立 IoC 容器 服务的,它实现了 ServletContextListener 接口,这个接口是在 Servlet API 中定义的,提供了与 Servlet 生命周期 结合的回调,比如上下文初始化 contextInitialized()方法 和 上下文销毁 contextDestroyed()方法。具体说来,这个启动过程是和Web容器的启动过程集成在一起的。原创 2024-05-24 22:20:00 · 19 阅读 · 0 评论 -
Spring事物传播方式
事务的传播机制,多个事务方法之间调用,事务如何在这些方法之间传播。方法A是一个事务的方法,方法A执行的时候调用了方法B,此时方法B有无事务以及是否需要事务都会对方法A和方法B 产生不同的影响,而这个影响是由两个方法的事务传播机制决定的。方法持有事务方法未持有事务REQUIRED支持当前事务,如果没有事务会创建一个新的事务SUPPORTS支持当前事务,如果没有事务的话以非事务方式执行MANDATORY支持当前事务,如果没有事务抛出异常创建一个新的事务并挂起当前事务创建一个新的事务。原创 2024-04-22 18:55:19 · 30 阅读 · 0 评论 -
Spring三级缓存
这是一个工厂对象的缓存。2. 如果此时Bean A需要依赖Bean B,并且Bean B也还没有被创建,Spring会检查二级缓存(earlySingletonObjects)中是否有Bean B的早期对象。1. 当一个Bean A正在创建过程中,Spring会先为Bean A创建一个早期对象,并把这个对象的工厂放入三级缓存(singletonFactories)。6. 最后,Bean A也会完成所有依赖的注入,并从三级缓存中获取自己的早期对象引用(如果需要的话),然后完成初始化,并被放入一级缓存。原创 2024-04-22 17:41:26 · 140 阅读 · 2 评论 -
@Autowired和@Resource
,默认情况下要求依赖对象必须存在,如果不存在会抛出异常,要想允许依赖对象为null值,可以设置required属性为false,@Autowired(required=false),如果使用名称装配,可以结合使用@Qualifier,@Autowired@Qualifier(“name”)。@Resource(该注解由J2EE提供),默认按照名称进行装配,名称可以通过name属性进行指定,如果未指定name属性,当注解写在字段上时,默认取字段名查找,当找不到名称匹配的bean时,才按照类型进行装配。原创 2024-04-22 17:08:37 · 55 阅读 · 0 评论 -
Spring IOC工作流程
先获取资源定位,然后创建了一个默认的bean工厂,然后创建了一个Reader用来读取xml文件,将创建的defaultListableBeanFactory作为参数传递给Reader,表示为此工厂创建Reader,用Reader读取配置信息,并将解析的bean定义注册到defaultListableBeanFactory 中。这样bean工厂就正确初始化了,调用工厂的getBean()方法获取实例了。Spring用ApplicationContext包含了上面所有步骤。Person类作为bean。原创 2024-04-22 17:00:17 · 70 阅读 · 0 评论 -
Spring自带工具类
断言是一个逻辑判断,用于检查不应该发生的情况,Assert关键字在JDK1.4中引入,可通过JVM参数-enableassertions开启,SpringBoot中提供了Assert断言工具类,通常用于数据合法性检查。原创 2024-04-14 20:30:58 · 215 阅读 · 0 评论 -
依赖注入 DI
Spring支持使用@Resource@Inject三个注解进行依赖注入。@Component(“id”) id可选,告诉spring这是一个组件,交由spring管理, 相当于xml当中的配置。@Autowired 默认按类型进行装配(该注解由spring提供,原创 2024-04-14 20:29:31 · 53 阅读 · 0 评论 -
Spring容器获取bean实例
并将自己继承的类注入到Spring容器中,继承ApplicationObjectSupport来获取ApplicationContext。的一种方法,这个方法常见于SpringMVC实现的web项目中。将Bean注入到Spring容器中,通过注解,或者配置均可。对象,这个方法很常见于SpringMVC构建的web项目中。并将自己继承的类注入到Spring容器中。接口,在Spring容器启动的时候将。从工厂中直接获取Bean实例,但是。5.使用Spring提供的工具类。方法提供的方法也是常用的获取。原创 2024-04-14 20:27:05 · 170 阅读 · 0 评论 -
Spring循环依赖
这可以打破循环依赖,因为当Bean A尝试获取Bean B时,如果Bean B被标记为`@Lazy`,那么Bean B的初始化会被推迟,直到Bean A完全初始化并准备好使用Bean B时再进行。如果循环依赖中的Bean都可以通过构造函数注入来初始化,那么这是最简单的解决方案。4. 使用`@Qualifier`注解:当存在多个同类型的Bean时,`@Qualifier`注解可以帮助你指定注入哪一个Bean。良好的设计和编程习惯,如使用依赖注入、降低类之间的耦合度等,都是避免循环依赖的有效方法。原创 2024-04-14 20:25:15 · 277 阅读 · 1 评论 -
Spring Bean作用域
Sping中bean的scope的值可以是singleton、prototype、request、session、global session。默认singleton。只有在web容器中才能使用request、session、global session。singleton:单例模式,spring容器中有且仅有一个对象,init方法在创建容器时仅执行一次。关闭容器会导致bean实例的销毁,调用destroy方法一次。原创 2024-04-14 20:23:47 · 443 阅读 · 0 评论 -
Spring IOC源码解析
控制反转(Inversion Of Control),将对象的创建和依赖关系(对象之间的依赖关系可以通过配置文件或者注解来建立)交给第三方容器处理,用的时候告诉容器需要什么然后直接去拿就行了。原创 2024-04-14 20:21:46 · 128 阅读 · 0 评论 -
Spring Batch
Spring Batch 构建了人们期望的 Spring Framework 特性(生产力,基于 POJO 的开发方法和一般易用性),同时使开发人员可以在必要时轻松访问和利用更高级的企业服务。Spring Batch 提供了可重用的功能,这些功能对于处理大量的数据至关重要,包括记录/跟踪,事务管理,作业处理统计,作业重启,跳过和资源管理。在 Spring Batch 中一个 job 可以定义很多的步骤 step,在每一个 step 里面可以定义其专属的 ItemReader 用于读取数据。原创 2024-04-14 20:18:22 · 97 阅读 · 1 评论 -
Spring ORM
而常见的一些 ORM 框架,比如 Hibernate、EclipseLink、OpenJPA 等等,其实都是提供了对 JPA 规范的支持,是 JPA 规范的具体实现提供者,用于辅助 Java 程序对数据库数据的操作。④为了规范 ORM 的具体使用,Java 5.x 开始制定了基于 ORM 思想的 Java 持久化层操作 API 规范,也即 JPA(注意,JPA 只是一个基于 ORM 的 Java API 规范,供各个 ORM 框架提供 API 时遵循),当前主流 ORM 框架都是支持 JPA 规范的。原创 2024-04-14 20:13:00 · 70 阅读 · 0 评论 -
Spring Message
监听注册的主要方法org.springframework.jms.config.JmsListenerEndpointRegistrar#registerEndpoint(org.springframework.jms.config.JmsListenerEndpoint, org.springframework.jms.config.JmsListenerContainerFactory原创 2024-04-14 20:10:08 · 209 阅读 · 0 评论 -
Redis服务设置密码
客户端使用config get requirepass命令查看密码,使用config set requirepass xx命令设置密码,密码设置完,执行命令config get requirepass验证通过密码,否则所有操作不可用,使用auth password验证密码,获取密码命令config get requirepass,取消密码命令config set requirepass。给redis-server.exe指定使用这个 redis.windows.conf。重启服务后,客户端重新登录后发现。原创 2022-03-29 17:48:43 · 2819 阅读 · 0 评论 -
Spring Bean的生命周期
Spring Bean的生命周期指的是从Bean的创建到销毁的整个过程。在Spring框架中,Bean的生命周期包括多个阶段,这些阶段由Spring容器来管理。原创 2024-03-18 16:34:19 · 801 阅读 · 2 评论 -
Spring框架核心模块
对数据访问的支持、与不同数据源的集成和事务管理的功能,提供了对JDBC、ORM(Hibernate、MyBatis)、NoSQL(如Redis、MongoDB)、JMS等的支持。提供了对应用程序安全保护的功能,包括认证(Authentication)和授权(Authorization),支持基于角色的访问控制和其他安全功能。提供了对单元测试和集成测试的支持,包括对JUnit、TestNG等测试框架的集成以及对Spring应用程序的自动化测试的功能。原创 2024-03-13 15:54:37 · 1236 阅读 · 0 评论 -
Redis支持的数据类型
redis数据类型原创 2022-03-31 20:30:27 · 2280 阅读 · 2 评论 -
MQ消息队列
最终请求总耗时3ms+ 300ms + 450ms + 200ms = 953ms,接近1s,用户通过浏览器发起请求到响应,等待耗时1s,时间有点长(一般每个请求都必须在200ms以内完成,对用户几乎是无感知的)如果A系统接受到请求直接把消息发布到MQ队列中,耗时5ms,从接受到请求到返回响应给用户,总耗时3ms + 5ms = 8ms。高峰期一过,到了下午就成了低峰期,可能也就1w的用户同时在网站上操作,每秒中的请求数量可能也就50个请求,对整个系统几乎没有任何的压力。,但GitHub上的活跃度不高)。原创 2022-02-05 22:22:23 · 1287 阅读 · 0 评论 -
MyBatis体系架构
生如蝼蚁 当立鸿鹄之志 命薄如纸 应有不屈之心 大丈夫生于天地间 岂能郁郁久居人下 乾坤未定 你我皆是黑马Mybatis持久层框架具有轻量级、解耦(业务逻辑和数据访问分离,使系统结构更清晰、易维护,更易单元测试)的特点,分为以下几层。原创 2022-02-28 21:01:34 · 963 阅读 · 0 评论 -
Redis与Memcached的区别
Redis和Memcached原创 2022-03-30 20:51:11 · 1394 阅读 · 0 评论 -
IBatis和Mybatis、Mybatis-Plus
iBATIS一词来源于"internet"和"abatis"的组合,是apache的一个开源项目(由Clinton Begin在2001年发起的开放源代码项目)。于2010年6月16号这个项目由apache software foundation 迁移到了google code(被谷歌托管)并且改名为MyBatis ,2013年11月迁移到Github。是一个基于映射支持和.NET的。原创 2024-03-13 14:45:35 · 899 阅读 · 0 评论 -
IBatis与MyBatis区别
在sql优化上,mybatis要比hibernate方便一些,由于mybatis的sql都是写在xml里,因此优化sql比hibernate方便很多。hibernate虽然也支持原生sql,但开发模式上却与orm不同,需要转换思维,因此使用上不是非常方便。hibernate通过它强大的映射结构和hql语言,大大降低了对象与不同数据库(oracle、MySQL等)的耦合性,而mybatis由于需要手写sql,因此sql中很容易包含一些不同的数据库不兼容的函数或者语法,移植性也会随之降低很多,成本很高.原创 2024-03-13 14:49:01 · 608 阅读 · 0 评论 -
Redis主从架构
单机Redis能够承载的QPS大概就在上万到几万不等,一般都是读并发多。架构做成主从(master-slave)架构,一主多从,主负责写,从负责读。可以水平扩容,支撑读高并发。Redis replication -> 主从架构 -> 读写分离 -> 水平扩容支撑读高并发。原创 2023-01-13 10:56:53 · 358 阅读 · 0 评论 -
Spring WebFlux
传统的基于Servlet的Web框架,如Spring MVC,在本质上都是阻塞和多线程的,每个连接都会使用一个线程。在请求处理的时候,会在线程池中拉取一个工作者( worker )线程来对请求进行处理。同时,请求线程是阻塞的,直到工作者线程提示它已经完成为止。首先webflux不是spring mvc的替代方案,webflux强调的是异步非阻塞,spring mvc强调的是同步阻塞,如果方案大部分偏向于非同步,则spring webflux才是首选。原创 2023-02-09 15:29:14 · 642 阅读 · 0 评论 -
Spring相关源码解析
MethodOverride,Conditional,MultiValueMap原创 2022-12-08 12:51:27 · 714 阅读 · 0 评论 -
MQ消息队列数据丢失问题
数据的丢失问题可能出现在生产者、MQ服务器、消费者中,以RabbitMQ和Kafka为例来分析一下。RabbitMQ生产者弄丢了数据生产者将数据发送到RabbitMQ的时候,可能数据就在半路给搞丢了,因为网络问题等都有可能。可以用RabbitMQ提供的事务功能,生产者发送数据之前开启RabbitMQ事务channel.txSelect(),然后发送消息,如果消息没有成功被RabbitMQ接收到,生产者会收到异常报错,此时就可以回滚事务channel.txRollback(),然后重试发送消息原创 2023-01-20 12:19:25 · 4334 阅读 · 0 评论 -
Mybatis代码生成器
【代码】Mybatis代码生成器。原创 2024-03-13 14:54:28 · 331 阅读 · 0 评论 -
消息队列中间件架构思路
首先MQ得支持可伸缩性,就是能够快速扩容增加吞吐量和容量,设计成分布式的,就像kafka的设计,broker -> topic -> partition,每个partition放一个机器,就存一部分数据。如果资源不够了,就给topic增加partition,然后做数据迁移,增加机器,就可以存放更多数据了,提供更高的吞吐量。一致性问题:A系统处理完了直接返回成功了,用户都以为你这个请求就成功了,要是BCD三个系统,BD两个系统写库成功了,结果C系统写库失败了,数据就不一致了。服务器挂了,整个系统可用性降低。原创 2023-01-20 12:54:07 · 241 阅读 · 0 评论 -
mybatis Binding
Binding原创 2022-12-06 20:17:28 · 309 阅读 · 0 评论 -
Hystrix断路器执行原理
状态机Hystrix断路器有三种状态,分别是关闭(Closed)、打开(Open)与半开(Half-Open),三种状态转化关系如下:Closed断路器关闭:调用下游的请求正常通过 Open断路器打开:阻断对下游服务的调用,直接走 Fallback 逻辑 Half-Open断路器处于半开状态:SleepWindowInMillisecondsEnabledHystrixCommandProperties.Setter() .withCircuitB原创 2023-02-02 09:56:00 · 655 阅读 · 0 评论 -
Hystrix降级机制
用 Hystrix 构建高可用服务架构参考Hystrix Home。Hystrix 是什么?在分布式系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务,有的时候某些依赖服务出现故障也是很正常的。Hystrix 可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制。Hystrix 通过将依赖服务进行资源隔离,进而阻止某个依赖服务出现故障时在整个系统所有的依赖服务调用中进行蔓延;同时 Hystrix 还提供故障时的 fallback 降.原创 2022-02-28 20:34:53 · 208 阅读 · 0 评论 -
限流和熔断
限流 熔断 降级原创 2022-02-28 20:34:27 · 138 阅读 · 0 评论 -
Zookeeper注册中心
分布式协调、分布式锁、元数据/配置信息管理、HA高可用性。原创 2023-02-04 17:18:13 · 439 阅读 · 0 评论 -
MyBatis日志和反射源码解析
Mybatis日志、数据源、反射源码解析原创 2022-08-10 21:59:23 · 387 阅读 · 0 评论 -
Hystrix如何达到高可用
小型电商网站的页面展示采用页面全量静态化的思想。数据库中存放了所有的商品信息,页面静态化系统,将数据填充进静态模板中,形成静态化页面,推入Nginx服务器。用户浏览网站页面时,取用一个已经静态化好的html页面,直接返回回去,不涉及任何的业务逻辑处理。用户每次浏览一个页面,不需要进行任何数据库的交互逻辑,也不需要执行任何代码,直接返回一个html页面就可以了,速度和性能非常高。对于小网站很实用也简单,Java中可以使用velocity、freemarker、thymeleaf等等,然后做个cms原创 2023-02-02 08:39:06 · 428 阅读 · 0 评论 -
分布式搜索引擎(ES)
分布式搜索引擎 ES原创 2022-02-14 17:06:43 · 1305 阅读 · 0 评论