自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 收藏
  • 关注

原创 Map使用中的坑

在 Java 中,Map接口是一个非常重要的数据结构,用于存储键值对。Map提供了很多常用的方法,以下是一些常用的Map方法及其功能功能:如果Map中不存在指定的键,则插入该键值对。如果键已存在,则不做任何操作。// 如果 "apple" 不存在,则插入super K,?功能:仅当指定键不存在时,才会根据给定的函数计算并插入该键值对。// 如果 "apple" 不存在,则插入 "apple" -> 5super K,?super V,?功能:仅当指定键存在时,基于当前的值进行计算并更新该键的值。

2025-01-24 20:00:00 592

原创 ThreadLocal使用中的坑

被用于存储每个线程的userId。可以为每个线程提供独立的存储空间,使得每个线程可以安全地操作它自己的数据,而不需要担心线程间的干扰。wrong()使用时,必须确保在每次使用完之后调用remove()来清理数据,尤其是在多线程环境中,避免内存泄漏和数据污染。right()方法通过正确的清理方式(finally块中的remove())解决了wrong()方法中的问题,确保了每个线程的数据隔离性。

2025-01-21 21:00:00 459

原创 原生类型转换为List中的坑

如果传递的是一个原生类型数组(如 int[]),Arrays.asList() 会将整个数组作为一个单一元素,并返回一个包含该数组的单元素列表。原因是原生类型数组在 Java 中是一个特殊的对象(即基本类型数组),并不是直接可以作为元素拆分的对象数组Arrays.asList(...) 在处理原生类型数组时,会将整个数组作为一个单独的元素包装在一个列表中。对于原生类型数组(如 int[]),返回的列表将包含这个数组作为唯一元素,导致看起来像是“二维数组”。

2025-01-20 16:42:43 128

原创 List<E> subList(int fromIndex, int toIndex)会存在什么问题呢

subList是原始list的视图,修改subList或原始list的结构时,必须小心。在修改list结构后,最好不要再访问subList,或者将subList转换为独立的列表(如ArrayList),以避免发生并发修改异常 () 或数据不一致问题。

2025-01-12 10:00:00 747

原创 ArrayList和LinkList的比对

面试时,大家都会说ArrayList用于查询比较频繁的操作,LinkedList:插入和删除比较频繁的操作。提示:以下是本篇文章正文内容,下面案例可供参考ArrayList适用于读取操作频繁,尤其是需要快速随机访问的场景。当你知道元素个数不会频繁变化,或者只是少量插入/删除时,ArrayList也是合适的选择。LinkedList适用于插入和删除操作频繁,尤其是在头部或尾部操作时。当你需要频繁的增删操作而不关心访问速度时,LinkedList可能是更好的选择。

2025-01-11 18:00:00 1449

原创 Spring Boot自动装配

一、什么是SpringBoot?  springboot框架是为了能够帮助使用spring框架的开发者快速高效的构建一个基于spirng框架以及spring生态体系的应用解决方案。它是对“约定优于配置”这个理念下的一个最佳实践。因此它是一个服务于框架的框架,服务的范围是简化配置文件。二、Spring Boot四大核心组件EnableAutoConfiguration 自动装配Starter组件, 开箱即用Actuator 监控Spring Boot Cli 为Spring Cloud 提供

2021-08-01 16:15:00 252

原创 SpringCloud Alibaba Seata处理分布式事务

一、分布式事务问题分布式前:单机库存没这个问题、从1:1->1:N->N:N分布式之后:总结:一次业务操作需要垮多个数据源或需要垮多个系统进行远程调用,就会产生分布式事务问题二、Seata简介Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。一个典型的分布式事务过程:分布式事务处理过程ID+三组件模型处理过程:本地@Transational、全局@GlobalTranstional...

2021-08-01 16:00:30 219

原创 Spring Cloud之服务治理

限流一、常见限流算法计数器算法:对于每次服务调用,可以通过AtomicLong#incrementAndGet()方法来给计数器加1并返回最新值,通过这个最新值和阈值进行比较。漏洞算法:可以准备一个队列,用来保存请求,另外通过一个线程池(ScheduledExecutorService)来定期从队列中获取请求并执行,可以一次性获取多个并发执行。令牌桶算法:可以准备一个队列,用来保存令牌,另外通过一个线程池定期生成令牌放到队列中,每来一个请求,就从队列中获取一个令牌,并继续执行。实现方

2021-08-01 15:52:41 301

原创 Spring Cloud 消息总线

回顾 Spring 事件/监听package com.segumentfault.spring.event;​import org.springframework.context.ApplicationEvent;import org.springframework.context.ApplicationEventPublisher;import org.springframework.context.annotation.AnnotationConfigApplicationContext;

2021-08-01 15:44:17 359

原创 Spring Cloud 服务调用

Spring Cloud Feign增加 spring-cloud-starter-feign 依赖<!-- 添加 Spring Cloud Feign 依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</art...

2021-07-31 15:20:46 222

原创 Spring Cloud 服务短路

传统 Spring Web MVC以 web 工程为例创建 DemoRestController:package com.segmentfault.spring.cloud.lesson8.web.controller;​import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;​import j..

2021-07-31 15:13:48 116

原创 Spring Cloud Netflix Ribbon 源码分析

利用 RibbonLoadBalancerClient新建一个工程三个模块: user-api:公用 API user-robbon-client:客户端应用 user-service-provider:服务端应用 实现 user-robbon-client配置信息application.properties:## 用户 Ribbon 客户端应用spring.application.name = user-ribbon-client​## 服务端口

2021-07-25 20:08:03 154

原创 Spring Cloud 负载均衡

Netflix Ribbon引入Maven 依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId></dependency>激活 Ribbon 客户端package com.segumentfault.springcloudle

2021-07-25 20:04:37 93

原创 Spring Cloud 高可用服务治理

Spring Cloud EurekaEureka 客户端配置多Eureka 注册中心## 应用名称spring.application.name = spring-cloud-eureka-client​## 客户端 端口随即可用server.port = 0​## 配置连接 Eureka 服务器## 配置多个 Eureka 注册中心,以"," 分割eureka.client.serviceUrl.defaultZone = \ http://localhost:9090

2021-07-25 20:02:21 282

原创 Spring Cloud 服务发现/注册

Spring Cloud Netflix EurekaEureka 服务器引入 Maven 依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId></dependency>激活 Eureka 服务器package com...

2021-07-25 20:00:30 431

原创 Spring Cloud 配置服务器

搭建 Spring Cloud Config Server基于文件系统(File System)创建本地仓库 激活应用配置服务器 在引导类上标注@EnableConfigServer package com.segmentfault.springcloudlesson3configserver;​import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfig

2021-07-25 19:57:20 301

原创 Spring Cloud 之配置客户端

EnvironmentEnvironment: PropertySources = 1:1PropertySources: PropertySource = 1:N[0] PropertySource (Map)spring.application.name = spring-cloud-config-client[1] PropertySource(Map)spring.application.name = spring-cloud-config-client-demoSpri

2021-07-25 19:53:26 703

原创 Spring Boot之Web高级篇

传统 Servlet 回顾什么是Servlet? Servlet 是一种基于 Java 技术的 Web 组件,用于生成动态内容,由容器管理。类似于其他 Java 技术组件,Servlet 是平台无关的 Java 类组成,并且由 Java Web 服务器加载执行。什么是Servlet容器? Servlet 容器,有时候也称作为 Servlet 引擎,作为Web服务器或应用服务器的一部分。通过请求和响应对话,提供 Web 客户端与 Servlets 交互的能力。容器管理Servlets实例以..

2021-07-25 19:45:50 91

原创 Spring Boot之Web基础

静态 Web 内容HTTP 请求内容由Web 服务器文件系统提供,常见静态Web内容如:HTML、CSS、JS、JPEG、Flash等等。特点:计算类型:I/O 类型、交互方式:单一、资源内容:相同(基本)、资源路劲:物理路径(文件、目录)、请求方法:GET(主要)常见使用场景:信息展示、样式文件(CSS)、脚本文件(JS)、图片(GIF、JPEG、JPEG)、多媒体(Movie)、文件下载。常见Web服务器:Apache HTTP Server、Nginx、GWS。为什么Java We

2021-07-25 19:25:05 87

原创 Spring Boot自定义监听器

1、配置spring.factories## 自定义 Spring Boot ApplicationListenerorg.springframework.context.ApplicationListener=\com.segmentfault.springbootlesson18.context.CustomizedSpringBootApplicationListener2、自定义类public class CustomizedSpringBootApplicationList

2021-07-25 14:12:20 139

原创 Spring Boot之配置

Spring Boot 应用的外部配置资源,这些配置资源能够与代码相互配合,避免硬编码 方式,提供应用数据或行为变化的灵活性。类型Properties 文件YAML 文件环境变量Java 系统属性命令行加载顺序热加载测试命令行Servlet参数(ServletConfig,ServletContext)JNDI先系统属性,再环境变量application-{profile}.properties(先外后内)application.propertie

2021-07-25 14:02:18 144

原创 Spring Cloud核心组件Eureka

Eureka 是微服务架构中的注册中⼼,专⻔负责服 务的注册与发现。如上图所示,库存服务、仓储服务、积分服务中都有⼀个 Eureka Client 组件,这个组件专⻔负 责将这个服务的信息注册到 Eureka Server 中。说⽩了,就是告诉 Eureka Server,⾃⼰在哪台机 器上,监听着哪个端⼝。⽽ Eureka Server 是⼀个注册中⼼,⾥⾯有⼀个注册表,保存了各服务 所在的机器和端⼝号;订单服务⾥也有⼀个 Eureka Client 组件,这个 Eureka Client .

2021-07-18 10:42:48 183

原创 Spring IoC 依赖查找

1、单一类型依赖查找接口 - BeanFactory2、集合类型依赖查找接口 - ListableBeanFactory3、层次性依赖查找接口 - HierarchicalBeanFactory4、线程安全5、内建可查找的依赖AbstractApplicationContext 内建可查找的依赖注解驱动 Spring 应用上下文内建可查找的依赖(部分)6、依赖查找中的经典异常...

2021-07-17 21:10:24 90

原创 Spring Bean的基本概念

1、定义 Spring Bean :BeanDefinition一下代码只是BeanDefinition中的部分代码,如果想详细了解,可以自行查找API/** * A BeanDefinition describes a bean instance, which has property values, * constructor argument values, and further information supplied by * concrete implementations.

2021-07-17 21:00:23 120

原创 SpringBoot的拦截器中通过流 ( request.getInputStream() ) 的方式读取body中传来的数据会导致controller接收不到值

目前项目一般都前后端分离,但是前端再访问后端服务器时,都会有接口校验,如果用户没有登录是无法访问该接口的,因此我们需要定义拦截器,而在拦截器中验证有没有访问该接口的权限;1、我们需要配置拦截器@Configurationpublic class WebConfigurer implements WebMvcConfigurer { @Autowired private LoginInterceptor loginInterceptor; @Autowired

2021-07-17 20:47:17 2725 1

原创 Spring Boot全局异常处理

我们在开发项目时难免需要处理异常,但是怎样优雅的处理一场呢?今天就给大家介绍一下。1、请求参数校验异常处理 现在项目一般都已经前后端分离了,而表单校验或者JSON参数校验,一般都要求前后端都校验,而以前后端校验都是通过if判断空或者字符串长度,导致我们代码看起来很恶心,因此我们需要统一处理;首先我们需要定义全局异常处理器,并且将需要拦截的异常定义一下@RestControllerAdvice(该注解对Controller进行增强的,可以全局捕获spring mvc抛的异常。)...

2021-07-17 20:20:52 623

原创 Spring 中使用了那些设计模式呢?

一、 Spring 中常见的设计模式工厂模式 : BeanFactory装饰器模式: BeanWrapper代理模式: AopProxy单例模式: ApplicationContext委派模式: DispatcherServlet策略模式: HandlerMapping适配器模式: HandlerApdapter模板方法模式: JdbcTemplate观察者模式: ContextLoaderListener二、Spring 的四大模块及典型的设计模式  1、Spr

2021-07-17 16:51:03 1015

原创 Spring事务明明开启了,为什么没起作用???

一、事务的特性(ACID)  1、原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。  2、一致性(Consistency):执行事务前后,数据保持一致;  3、隔离性(Isolation):并发访问数据库时,一个用户的事物不被其他事物所干扰,各并发事务之间数据库是独立的;  4、持久性(Durability):一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。二、事务的属.

2021-07-17 16:50:11 151

原创 Spring中声明式事务存在的优缺点以及注意事项!

事务管理在系统开发中是不可缺少的一部分,Spring提供了很好事务管理机制,主要分为编程式事务和声明式事务两种。关于事务的基础知识,如什么是事务,数据库事务以及Spring事务的ACID、隔离级别、传播机制、行为等,就不在这篇文章中详细介绍了。默认大家都有一定的了解。本文,作者会先简单介绍下什么是声明式事务和编程式事务,再说一下为什么我不建议使用声明式事务。编程式事务基于底层的API,如PlatformTransactionManager、TransactionDefinition和Tr..

2021-07-17 16:46:36 745

原创 Spring的常用注解

1)、@Autowired:自动注入: @Autowired:构造器,参数,方法,属性;都是从容器中获取参数组件的值 1)、[标注在方法位置]:@Bean+方法参数;参数从容器中获取;默认不写@Autowired效果是一样的;都能自动装配 2)、[标在构造器上]:如果组件只有一个有参构造器,这个有参构造器的@Autowired可以省略,参数位置的组件还是可以自动从容器中获取 3)、放在参数位置: 使用方法: 1)、默认优先按照类型去容器中找..

2021-07-17 16:37:45 357

原创 Spring Security实战之三~使用数据库进行验证

3

2021-03-10 15:11:47 424

原创 Spring Security实战之二~验证

2

2021-03-10 15:10:25 281

原创 Spring Security实战之一

1、

2021-03-10 15:08:25 134

原创 Spring Cloud Gateway 之获取请求体(Request Body)的几种方式

一、直接在全局过滤器(随便一个全局过滤器中就可以,可参考https://blog.youkuaiyun.com/qqqqqqhhhhhh/article/details/114401668)中获取,伪代码如下private String resolveBodyFromRequest(ServerHttpRequest serverHttpRequest){ Flux<DataBuffer> body = serverHttpRequest.getBody();

2021-03-05 17:04:11 7209 4

原创 Spring Cloud Gateway之全局过滤器在工作中的使用场景

一、使用注意事项1、全局过滤器作用于所有的路由,不需要单独配置。2、通过@Order来指定执行的顺序,数字越小,优先级越高。二、默认全局拦截器的整体架构三、实战场景,例如,校验token、记录请求参数(可参考这边https://www.cnblogs.com/hyf-huangyongfei/p/12849406.html)、替换负载均衡以后的路由等等。1、校验token@Slf4jpublic class AuthenFilter implements GlobalFilt

2021-03-05 16:47:30 978 3

原创 Spring Cloud Gateway之全局异常拦截器

因Spring Cloud Gateway作为网关是异步的因此日志记录很重要,下面异常类是我再工作中长期使用的​/** * @version 2019/8/14 * @description: 异常拦截器 * @modified: */@Slf4jpublic class JsonExceptionHandler implements ErrorWebExceptionHandler { /** * MessageReader */ private

2021-03-05 16:24:13 2005

原创 Spring Cloud Gateway之动态路由(数据库版)

1、实现动态路由的关键是RouteDefinitionRepository接口,该接口存在一个默认实现(InMemoryRouteDefinitionRepository)通过名字我们应该也知道,该实现是将配置文件中配置的信息加载到内存中。因此无法实现动态路由。2、如果想实现动态路由,我们可以参考默认实现,自己定义一个实现类,代码如下:@Componentpublic class UnifiedRouteRepositoryImpl implements RouteDefinition...

2021-03-05 16:19:07 1872

原创 项目中使用Spring Security,但是还想通过统一认证平台实现单点登录

最近接到一个新的需求,就是将原本的项目集成到公司的统一认证平台,实现单点登录。相比于单系统登录,SSO需要一个独立的认证中心,只有认证中心能接受用户的用户名密码等安全信息,其他系统不提供登录入口,只接受认证中心的间接授权。间接授权通过令牌实现,SSO认证中心验证用户的用户名密码没问题,创建授权令牌,在接下来的跳转过程中,授权令牌作为参数发送给各个子系统,子系统拿到令牌,即得到了授权,可以借此创建局部会话,局部会话登录方式与单系统的登录方式相同。这个过程,也就是单点登录的原理。上面我大致介绍了一下单点登录

2021-03-05 15:32:25 747 3

转载 Java语言十五讲(总结)

讲完了。你们或许会问,难道这十几讲就涵盖了Java的主要方面了吗?当然不是,有些很重要的内容我都没有提及,比如网络编程。我们的讲座不是编写教材,并不全面,主要是通过一些主题让大家对Java有一个进阶的理解。一开头我就说了,听众是相关专业毕业并有一年左右的Java编程基础的人。要看入门教科书和语言参考书,有很多选择,我决心不再走人的老路,我想结合自己的经历,为大家展示一位自认为Java布道者的理解。我的一系列讲座,从Java语言,到Web框架探索,到设计模式和算法,再到文本分析和自然语言理解,都是按照这个思路

2021-02-25 19:39:14 382

转载 Java语言十五讲(第十五讲容器框架三)

我们到此已经把ArrayList, HashSet,HashMap讲过了。JDK里面还有一些实现,如Queue,Deque,TreeSet,TreeMap等等,我就不一一讲了。现在回顾一下:Collection保存单一的元素,而Map把保存键值对。用泛型技术,就可以将制定类型的对象放到容器中,不会出现类型错误的元素,取出来的时候也不需要再进行类型转换。Collection和Map都不定长,向里面添加更多元素的时候,会自动调整容量。跟数组一样,List维持位置索引和对象的关联,因此是由确定次序的容器。

2021-02-25 19:38:21 225

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除