![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
转载
文章平均质量分 90
九师兄
可免费问问题,可以一次订阅,终身免费问问题。工作多年遇到的问题,与一些总结,注意事项等,有些是源码级别的讲解,同时整个博客是成体系的,里面有很多连接互相连接,问题都是拆开的,能让大家遇到问题的时候方便的解决问题,或者提供思路。也可以单独找我解决问题。
展开
-
【java】为什么 0.1 + 0.2 = 0.300000004
因为 0.2 和 0.1 只是指数稍有不同,所以上图中只展示了 0.1 对应的单精度浮点数,从上图的结果我们可以看出,0.1 和 0.2 在浮点数中只能用近似值来代替,精度十分有限,因为单精度浮点数的小数位为 23,双精度的小数位为 52,同时都隐式地包含首位的 1,所以它们的精度在十进制中分别是。浮点数系统的设计是一个比较有趣的工程问题,因为操作系统一般都是 32 位或者 64 位的,浮点数充分利用了 32/64 位的比特,将每一位的作用都发挥到极致,使用最紧凑和简洁的方式实现了尽可能高的精度。转载 2024-07-22 00:30:00 · 12 阅读 · 0 评论 -
【java】java 类型擦除 type erasure
类型擦除),那么到底什么是类型擦除呢?类型擦除指的是通过类型参数合并,将泛型类型实例关联到同一份字节码上。编译器只为泛型类型生成一份字节码,并将其实例关联到这份字节码上。类型擦除的关键在于从泛型类型中清除类型参数的相关信息,并且再必要的时候添加类型检查和类型转换的方法。类型擦除可以简单的理解为将泛型java代码转换为普通java代码,只不过编译器更直接点,将泛型java代码直接转换成普通java字节码。类型擦除的主要过程如下: 1.将所有的泛型参数用其最左边界(最顶级的父类型)类型替换。转载 2024-07-19 00:15:00 · 14 阅读 · 0 评论 -
【Spring】Apache的BeanUtils与SpringBean的BeanUtils对比
在Java中,除了 基本数据类型之外,还存在 类的实例对象这个引用数据类型,而一般使用 “=”号做赋值操作的时候,对于基本数据类型,实际上是拷贝的它的值,但是对于对象而言,其实赋值的只是这个对象的引用,将原对象的引用传递过去,他们实际还是指向的同一个对象。而浅拷贝和深拷贝就是在这个基础上做的区分,如果在拷贝这个对象的时候,只对基本数据类型进行了拷贝,而对引用数据类型只是进行引用的传递,而没有真实的创建一个新的对象,则认为是浅拷贝。转载 2024-07-04 00:45:00 · 37 阅读 · 0 评论 -
【Spring】美团二面:spring事务不生效的15种场景
就当复习了一下。日常开发中,我们经常使用到spring事务。最近一位朋友去美团面试,被问了这么一道面试题: Spring 事务在哪几种情况下会不生效?今天田螺哥跟大家聊聊,spring事务不生效 的15种场景。转载 2024-07-03 00:45:00 · 28 阅读 · 0 评论 -
【Spring】Spring Bean 的生命周期
这里面有些图不清晰了,但是图画的很好,有个全局概念。在对于Spring的所有解读中,Bean的生命周期都可谓是重中之重,甚至还有人称Spring就是个管理Bean的容器。Bean的生命周期之所以这么重要,被反复提及,是因为Spring的核心能力,比如对象创建(IOC)、属性注入(DI)、初始化方法的调用、代理对象的生成(AOP)等功能的实现,都是在bean的生命周期中完成的。转载 2024-07-03 00:30:00 · 27 阅读 · 0 评论 -
【Spring】Spring 使用状态机实现订单支付
先来解释什么是“状态”( State )。现实事物是有不同状态的,例如一个自动门,就有 open 和 closed 两种状态。我们通常所说的状态机是有限状态机,也就是被描述的事物的状态的数量是有限个,例如自动门的状态就是两个 open 和 closed。状态机,也就是 State Machine ,不是指一台实际机器,而是指一个数学模型。说白了,一般就是指一张状态转换图。例如,根据自动门的运行规则,我们可以抽象出下面这么一个图。转载 2024-07-03 00:30:00 · 45 阅读 · 0 评论 -
【Netty】Netty经典问题
在Netty中,每个Channel都有一个与之关联的ChannelPipeline,用于处理该Channel上的事件和请求。ChannelPipeline是一种基于事件驱动的处理机制,它由多个处理器(Handler)组成,每个处理器负责处理一个或多个事件类型,将事件转换为下一个处理器所需的数据格式。转载 2024-07-02 00:45:00 · 31 阅读 · 0 评论 -
【java】接口文档设计的12个注意点!
后端开发,经常需要定义接口文档。如何写好接口文档,真的很重要。今天给大家带来接口文档设计的12个注意点~转载 2024-07-02 00:45:00 · 40 阅读 · 0 评论 -
【java】关于 RoaringBitmap 的线程安全问题
在整个流程中,如果有其他线程触发了收缩则可能触发数组下标越界异常。故在我的分布式 bitmap 服务中,采用了 ReentrantReadWriteLock 去保证多线程下 bitmap 的线程安全,在 ReentrantReadWriteLock 的官方文档中,其中举例即使用了 ReentrantReadWriteLock 去保证 TreeMap 的线程安全问题。转载 2024-07-02 00:30:00 · 21 阅读 · 0 评论 -
【java】java IdentityHashMap
最近使用 ANTLR4 时看到其 ParseTreeProperty 类用到了 IdentityHashMap,本文简要记录。根据 IdentityHashMap 的 Java Doc 可知:null?转载 2024-07-01 00:45:00 · 20 阅读 · 0 评论 -
【大数据】RoaringBitmap 的底层数据结构
我曾开发过基于 RoaringBitmap 的分布式去重服务,用于在线用户数去重统计及离线计算中的去重统计,本文基于 0.9.8 简要分析 RoaringBitmap 的底层数据结构。Java 中基本类型 int 为有符号实现,可表示的范围为,即整个范围段长达 42 亿之多,即使是仅使用正数部分也有 21 亿,对于大部分公司的用户维度的统计已经足够,所以我们选择基于 32 位 int 的 RoaringBitmap 进行分析。。转载 2024-07-01 00:45:00 · 27 阅读 · 0 评论 -
【java】java 中的 switch
转载:Java 7中,switch的参数可以是String类型了,这对我们来说是一个很方便的改进。但是,作为一个程序员我们不仅要知道他有多么好用,还要知道它是如何实现的,switch对整型的支持是怎么实现的呢?对字符型是怎么实现的呢?String类型呢?有一点Java开发经验的人这个时候都会猜测switch对String的支持是使用equals()方法和hashcode()方法。那么到底是不是这两个方法呢?接下来我们就看一下,switch到底是如何实现的。转载 2024-07-01 00:30:00 · 20 阅读 · 0 评论 -
【java】java StringJoiner 字符串拼接
StringJoiner是java.util包中的一个类,用于构造一个由分隔符分隔的字符序列(可选),并且可以从提供的前缀开始并以提供的后缀结尾。虽然这也可以在StringBuilder类的帮助下在每个字符串之后附加分隔符,但StringJoiner提供了简单的方法来实现,而无需编写大量代码。StringJoiner类共有2个构造函数,5个公有方法。其中最常用的方法就是add方法和toString方法,类似于StringBuilder中的append方法和toString方法。转载 2024-07-01 00:30:00 · 35 阅读 · 0 评论 -
【java】java BigDecimal 禁止使用 equals 方法比较
BigDecimal是一个非常好用的表示高精度数字的类,其中提供了很多丰富的方法。但是,他的equals方法使用的时候需要谨慎,因为他在比较的时候,不仅比较两个数字的值,还会比较他们的标度,只要这两个因素有一个是不相等的,那么结果也是false、如果读者想要对两个BigDecimal的数值进行比较的话,可以使用compareTo方法。转载 2024-07-01 00:15:00 · 20 阅读 · 0 评论 -
【java】java 禁止在API中使用枚举
大概就是以上的内容,看起来还是很简单的,提示的错误信息就是在AType这个枚举类中没有找到P_M这个枚举项。于是经过排查,我们发现,在线上开始有这个异常之前,该应用依赖的一个下游系统有发布,而发布过程中是一个API包发生了变化,主要变化内容是在一个RPC接口的Response返回值类中的一个枚举参数AType中增加了P_M这个枚举项。但是下游系统发布时,并未通知到我们负责的这个系统进行升级,所以就报错了。我们来分析下为什么会发生这样的情况。转载 2024-06-30 04:00:00 · 25 阅读 · 0 评论 -
【java】java 逃逸分析 案例
所以,如果以后再有人问你:是不是所有的对象和数组都会在堆内存分配空间?那么你可以告诉他:不一定,随着JIT编译器的发展,在编译期间,如果JIT经过逃逸分析,发现有些对象没有逃逸出方法,那么有可能堆内存分配会被优化成栈内存分配。但是这也并不是绝对的。就像我们前面看到的一样,在开启逃逸分析之后,也并不是所有User对象都没有在堆上分配。转载 2024-06-30 00:45:00 · 19 阅读 · 0 评论 -
【Java】java小技巧、如何初始化我们的hashMap容量
集合是Java开发日常开发中经常会使用到的,而作为一种典型的K-V结构的数据结构,HashMap对于Java开发者一定不陌生。关于HashMap,很多人都对他有一些基本的了解,比如他和hashtable之间的区别、他和concurrentHashMap之间的区别等。这些都是比较常见的,关于HashMap的一些知识点和面试题,想来大家一定了熟于心了,并且在开发中也能有效的应用上。转载 2024-06-30 00:45:00 · 14 阅读 · 0 评论 -
【FastJson】FastJson AutoType
之前有网友对比过:当然,转载 2024-06-30 04:30:00 · 64 阅读 · 0 评论 -
【java】内存管理设计精要
在深入分析垃圾回收之前,我们需要先明确垃圾回收中垃圾的定义,明确定义能够帮助我们更精确地理解垃圾回收解决的问题以及它的职责。计算机科学中的垃圾包括对象、数据和计算机系统中的其他的内存区域,这些数据不会在未来的计算中使用,因为内存资源是有限的,所以我们需要将这些垃圾占用的内存交还回堆并在未来复用4。垃圾可以分成语义垃圾和语法垃圾两种语义垃圾(Semantic Garbage)是计算机程序中永远不会被程序访问到的对象或者数据;语法垃圾(Syntactic Garbage)转载 2024-06-30 02:30:00 · 24 阅读 · 0 评论 -
【MySQL】为什么数据库不应该使用外键
外键提供的几种在更新和删除时的不同行为都可以帮助我们保证数据库中数据的一致性和引用合法性,但是外键的使用也需要数据库承担额外的开销,在大多数服务都可以水平扩容的今天,高并发场景中使用外键确实会影响服务的吞吐量上限。在数据库之外手动实现外键的功能是可能的,但是却会带来很多维护上的成本或者需要我们在数据一致性上做出一些妥协。我们可以从可用性、一致性几个方面分析使用外键、模拟外键以及不使用外键的差异:不使用外键牺牲了数据库中数据的一致性,但是却能够减少数据库的负载;转载 2024-06-30 00:45:00 · 15 阅读 · 0 评论 -
【MySQL】为什么 MySQL 的自增主键不单调也不连续
早期 MySQL 的主键既不是单调的,也不是连续的,这些都是在当时工程上做出的一些选择,如果严格地按照关系型数据库的设计规范,MySQL 最初的设计造成问题的概率也比较低,只有当被删除的主键被外部系统引用时才会影响数据的一致性,但是今天使用方式的不同却增加出错的可能性,而 MySQL 也在 8.0 中持久化了 AUTO_INCREMENT 以避免该问题的出现。转载 2024-06-30 00:30:00 · 3 阅读 · 0 评论 -
【TCP】为什么 TCP 协议有 TIME_WAIT 状态
在某些场景下,60 秒的等待销毁时间确实是难以接受的,例如:高并发的压力测试。当我们在主机上通过几千个并发来测试服务器的压力时,这些用于压力测试的连接会迅速消耗主机上的 TCP 连接资源,几乎所有的 TCP 都会处于 TIME_WAIT 状态等待销毁。转载 2024-06-30 00:45:00 · 17 阅读 · 0 评论 -
【docker】Docker 核心技术与实现原理
大多数 Linux 的发行版都有着非常相似的子系统,而之所以将上面的 cpuset、cpu 等东西称作子系统,是因为它们能够为对应的控制组分配资源并限制资源的使用。转载 2024-06-30 00:45:00 · 17 阅读 · 0 评论 -
【Spring】Spring 循环依赖的一个案例
此 demo 主要演示了 Spring Boot 项目如何通过 AOP 结合 Redis + Lua 脚本实现分布式限流,旨在保护 API 被恶意频繁访问的问题,是 spring-boot-demo-ratelimit-guava 的升级版。切面类RedisRateLimiterAspect。这里出现了循环依赖值得注意一下。转载 2024-06-30 01:00:00 · 16 阅读 · 0 评论 -
【Spring】Spring Bean生命周期详解
转载:Bean生命周期详解扩展文章:【Spring】Spring Bean 生命周期本文主要详解bean的生命周期,分为12个环节,每个环节中spring都提供了一些扩展点,我们都将进行详细说明,让大家全面掌握这块的知识。阶段1:Bean元信息配置阶段阶段2:Bean元信息解析阶段阶段3:将Bean注册到容器中阶段4:BeanDefinition合并阶段阶段5:Bean Class加载阶段阶段6:Bean实例化阶段(2个小阶段)Bean实例化前阶段Bean实例化阶段阶段7:合并后的BeanDef转载 2024-06-30 00:30:00 · 75 阅读 · 0 评论 -
【Spring】@Conditional通过条件来控制bean的注册
转载:Spring教程 -> @Conditional通过条件来控制bean的注册先看几个问题2.@Conditional注解@Conditional注解是从才有的,可以用在任何类型或者方法上面,。比如可以通过@Conditional来控制bean是否需要注册,控制被@Configuration标注的配置类是需要需要被解析等。效果就像这段代码,相当于在spring容器解析目标前面加了一个条件判断:@Conditional源码:这个注解只有一个value参数,Condition类型的数组,Cond转载 2024-06-30 00:30:00 · 12 阅读 · 0 评论 -
【java】深入理解java注解
代码中注释大家都熟悉吧,注释是给开发者看的,可以提升代码的可读性和可维护性,但是对于java编译器和虚拟机来说是没有意义的,编译之后的字节码文件中是没有注释信息的;而注解和注释有点类似,唯一的区别就是注释是给人看的,而注释是给编译器和虚拟机看的,编译器和虚拟机在运行的过程中可以获取注解信息,然后可以根据这些注解的信息做各种想做的事情。转载 2024-06-30 00:30:00 · 24 阅读 · 0 评论 -
【Spring】SpringMVC 内容协商
简单点理解,媒体类型就是用来表示内容的格式,比如可以用来表示http请求体和响应体内容的格式。英文称呼:MineType或者MediaType本文的内容是非常非常重要的一个知识点,建议大家多看2遍,敲一敲+debug,测试测试,掌握就比较容易了;掌握这些之后才能更好的用好SpringMVC和SpringBoot。git地址。转载 2024-06-30 00:45:00 · 20 阅读 · 0 评论 -
【Spring】Spring CookieValue、SessionAttribute、RequestAttribute 注解
RequestAttribute注解标注的参数的值来源于org.springframework.web.servlet.mvc.method.annotation.RequestAttributeMethodArgumentResolver解析器,源码。方案2:将@RequestAttribute标注的参数类型调整为java8中的java.util.Optional类型,上面的接口2的site参数类型可以调整为Optional类型,即可解决问题。转载 2024-06-30 00:15:00 · 14 阅读 · 0 评论 -
【Spring】Spring源码分析 参数解析器 HandlerMethodArgumentResolver
RequestParam注解我们用到的比较多,被这个注解标注的参数,会从request的请求参数中取值,参数值为request.getParameter(“@RequestParam注解name的值”)/*** 对应request中参数名称*//*** 同value*//*** 请求中是否必须有这个参数*//*** 默认值*/转载 2024-06-30 00:30:00 · 14 阅读 · 0 评论 -
【Spring】ResponseBodyAdvice:对@ResponseBody进行增强
*** rest接口通用返回值数据结构//接口状态(成功还是失败) private Boolean success;//错误码 private String code;//提示信息 private String msg;//数据 private T data;return msg;return success(data , "操作成功!");} }转载 2024-06-30 00:45:00 · 29 阅读 · 0 评论 -
【Spring】 RequestBodyAdvice:对@ReuqestBody进行增强
/①:获取http请求中原始的body String body = IOUtils . toString(inputMessage . getBody() , encoding);//②:解密body,EncryptionUtils源码在后面 String decryptBody = EncryptionUtils . desEncrypt(body);转载 2024-06-30 00:45:00 · 14 阅读 · 0 评论 -
【Spring】源码解析SpringMVC容器的启动过程
这里是重点:这个方法中干了4件事情创建父容器,只是实例化了,并未启动创建了监听器ContextLoaderListener,这是一个ServletContextListener类型的监听器,稍后会在这个监听器中启动父容器创建springmvc容器,只是实例化了,并未启动,启动的事情会在DispatcherServlet#init中做,稍后会说Servlet容器中注册DispatcherServlet下面,咱们来详细看这几个步骤,把这几个步骤作为阶段来解读。转载 2024-06-30 00:45:00 · 11 阅读 · 0 评论 -
【Spring】源码解析SpringMVC处理请求的流程
否则继续向下step3。springmvc的所有请求,最终都会到达org.springframework.web.servlet.DispatcherServlet#doDispatch这个方法,整个请求的大致处理过程都在这个方法中,咱们从这个方法开始分析,源码如下,大家注意代码中的注释,带有标号,比如①、②、③这样需要的注释,大家需要注意了,这些是关键的步骤,稍后会对这些步骤做详细的说明。否则继续向下step2。转载 2024-06-30 00:15:00 · 10 阅读 · 0 评论 -
【Spring】Spring @Controller、@RequestMapping
RequestMaping中value、path、consumers、producers稍微用到的多一些,其他几个属性用到的比较少,了解即可。关于6种规则,大家可以自己去试试,会springboot的朋友,可以直接使用springboot快速写一些用例结合postman测试下,加深记忆和理解。转载 2024-06-30 00:30:00 · 9 阅读 · 0 评论 -
【ElasticSearch】如何设计一个高性能 Elasticsearch mapping
Elasticsearch 中支持动态 mapping 和显示 mapping 两种,在使用中有时候可以先插入一条数据到临时索引,等自动生成 mapping 之后,在对现有 mapping 进行修改调整,在字段上尤其要考虑好 text 类型和 keyword 类型的设置,如果需要支持全文搜索和分词搜索,则需要使用 text 类型,需要支持关键字模糊搜索或者聚合排序等操作可以考虑使用 keyword 字段。转载 2024-06-30 00:15:00 · 14 阅读 · 0 评论 -
【Spring】SpringBoot系列Mybatis之Mapper注册的几种方式
这是我以前不知道的,我以为只有SpringBoot项目中借助Mybatis来操作数据库,对大部分java技术栈的小伙伴来说,并不会陌生;我们知道,使用mybatis,一般会有下面几个本片博文中的注解,放在Mapper上,你知道注册Mapper有几种方式么(这个问题像不像”茴”字有几个写法😬)转载 2024-06-30 00:30:00 · 32 阅读 · 0 评论 -
【Spring】Spring 实现一个自定义的@Autowired
参照@Autowired的定义,实现一个自定义的注解(缩减版)@Target({实现BeanPostProcessor,在bean初始化之后,扫描field/method,为了做一个区分,下面创建一个代理类,注入依赖Class转载 2024-06-30 00:45:00 · 11 阅读 · 0 评论 -
【Spring】WebClient之retrieve与exchange的使用区别
前面介绍了几篇WebCilent的使用姿势博文,其中大部分的演示case,都是使用retrieve来获取返回ResponseBody,我国我们希望获取更多的返回信息,比如获取返回头,这个时候exchange则是更好的选择;本文将主要介绍一下,在WebClient中retrieve和exchange的各自使用场景本项目借助SpringBoot 2.2.1.RELEASE + maven 3.5.3 + IDEA进行开发。转载 2024-06-30 00:15:00 · 35 阅读 · 0 评论 -
【Spring】WebClient之文件上传
转载;本项目借助SpringBoot 2.2.1.RELEASE + maven 3.5.3 + IDEA进行开发使用WebClient,最主要的引入依赖如下(省略掉了SpringBoot的相关依赖,如对于如何创建SpringBoot项目不太清楚的小伙伴,可以关注一下我之前的博文)借助WebFlux,写一个简单的文件上传的REST接口(关于WebFlux的使用姿势不属于本文重点,下面的代码如有不懂的地方,可以直接忽略掉或者关注一下接下来的WebFlux系列博文)转载 2024-06-30 00:30:00 · 33 阅读 · 0 评论