- 博客(590)
- 资源 (14)
- 问答 (1)
- 收藏
- 关注
原创 一文带你读懂JDK源码:Lambda表达式
点击上方 蓝字 关注我们Lambda和Stream是Jdk1.8中引入的两个重要特性。Lambda是函数式编程,可以将匿名方法像参数一样传递,本章节将从4个方面来介绍lambda:Lam...
2021-01-04 00:58:42 432
原创 带你读懂《Java并发编程》:第3章 助于线程安全的三剑客:final & volatile & 线程封闭...
点击上方蓝字关注我们我们简要的回顾前文:《第1章 多线程安全性与风险》介绍了并发编程,在维护难度、性能以及活跃性三个方面,所带来的风险与优势;《第2章影响线程安全性的原子性和加锁机制》...
2020-12-14 20:27:21 137
原创 一文带你读懂String类源码
点击上方蓝字 关注我们!String 是日常开发非常频繁的类,此外我们常用的操作还有字符串连接操作符等等。String对象是不可变的,查看JDK文档,我们不难发现String类的每个修改...
2020-12-05 02:52:37 262
原创 一文读懂《Java并发编程实战》:第2章 影响线程安全性的原子性和加锁机制
点击上方蓝字关注我们上文《Java并发编程实战》的第1章“多线程安全性与风险”,讲述了多线程带来的好处与风险。本文承接上文,继续总结《Java并发编程实战》的第二章:线程安全性。下文挑选...
2020-11-30 01:02:45 214
原创 一文带你读懂Object类源码
点击上方蓝字关注我们Object类是一个比较特殊的类,是所有类的超级父类,java中如果一个类没有用 extends关键字 明确指出继承于某个类,那么它默认继承Object类。下面我们一...
2020-11-22 22:31:35 185
原创 一文读懂《Java并发编程实战》:第1章 多线程安全性与风险
点击上方蓝字关注我们!多线程是在同一个程序内部并行执行,因此会对相同的内存空间进行并发读写操作。如果一个线程在读一个内存时,另一个线程正向该内存进行写操作,那进行读操作的那个线程将获得什...
2020-11-17 22:30:00 218
原创 一文带你读懂HTTP协议的前世今生
点击上方蓝字关注我们HTTP,Hypertext Transfer Protocol,超文本协议,是在万维网上传输文件(如文本、图形图像、声音、视频和其他多媒体文件)的规则集。如果web...
2020-11-15 22:33:07 835
原创 一文带你读懂:系统线程模型与实现原理
点击上方蓝字关注我们各种操作系统均提供了线程的实现(内核线程),线程是 CPU 进行工作调度的基本单位。线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配和执行调度...
2020-11-05 00:05:36 274
原创 一文带你读懂后台开发技术栈
- 程序员你是否厌倦编程工作千篇一律的增删改查?- 程序员你是否迷茫于职业技术的方向瓶颈?- 程序员你是否有个突破自己的小小冲动却无从下手?在公众号这里,用简明扼要的语言和知识重点,帮助我们在有限时间中理解技术原理,达到事半功倍的学习效果,掌握有效的开发技术点,在工作中更加得心应手。后台技术汇技术点Java基础,安身立命的底气:不可不熟透的多态继承封装,不能不精通的容器技术/反射与泛型,不得不兼顾的访问权限与异常,jdk的相关知识都在这总结好了。编程艺术,掌握..
2020-10-07 11:27:20 2254 4
原创 一文带你读懂 BigDecimal 源码
点击上方「蓝字」关注我们本章带来的是BigDecimal类的源码解读。BigDecimal类是 Java 在 java.math 包中提供的API类,用来对超过16位有效位的数进行精确的...
2020-08-29 18:01:50 888
原创 消息中间件之Kafka史上最强原理总结
点击上面“蓝字”关注我们 前言最近项目使用到中间件,自己以前也对kafka原理应用垂涎已久了,故这个周末抽空总结一波。Kafka 是什么?Apache Kafka是分布式发布-订阅...
2020-06-27 13:18:07 476
原创 深刻理解Redis集群(上):RDB快照和AOF日志
RDB快照save同步阻塞客户端服务端.conf配置文件# The filename where to dump the DBdbfilename dump.rdb# rdb-del-sync-files是Redis配置文件中的一个选项,它的作用是在主节点上执行BGSAVE或AOF持久化操作时,删除同步锁文件,以释放磁盘空间。当这个选项设置为yes时,Redis会自动删除同步锁文件;当这个...
2024-09-28 22:41:31 462
原创 深刻理解Redis集群(下):Redis 哨兵(Sentinel)模式
背景现在对3个节点的sentinel进行配置。sentinel的配置文件在redis的安装目录中已经存在,只需要复制到指定的位置即可。sentinel是独立进程,有对应的脚本来执行。基于之前的redis 一主二从的架构,我们继续启动3个sentinel进程。哨兵模式的架构图如下:启动哨兵们sentinel6379.confprotected-mode noport 26379daemoni...
2024-09-28 22:41:31 924
原创 深刻理解Redis集群(中):Redis主从数据同步模式
背景目前实现Redis高可用的模式主要有三种:主从模式、哨兵模式、集群模式。今天我们先来聊一下主从模式。Redis 提供的主从模式,是通过复制的方式,将主服务器上的Redis的数据同步复制一份到从 Redis 服务器,这种做法很常见,MySQL通过binlog进行的主从复制也是这么做的。主节点的Redis我们称之为master,从节点的Redis我们称之为slave,主从复制为单向复制,只能由主到...
2024-09-28 22:41:31 828
原创 源码分析:@SchedulerLock分布式锁
背景@SchedulerLock源码分析思路总结:一个中心(围绕@EnableDiscoveryClient开展)、两个基本点(两个方法级别的注解:@SchedulerLock和@Scheduled)。我们都知道@SchedulerLock有两种分布式锁的方案:一个是Mysql,一个是Redis,分布式锁的底层原理不难:如果是采用Mysql,则通过磁盘记录的一张表,用于存储分布式锁信息如果是采用R...
2024-09-27 16:35:27 661
原创 SpringCloud源码:服务端分析(一)- 对Client事件的处理
背景从昨日的两篇文章:SpringCloud源码:客户端分析(一)- SpringBootApplication注解类加载流程、SpringCloud源码:客户端分析(二)- 客户端源码分析。我们理解了客户端的初始化,其实跟SpringBootApplication初始化机制息息相关,也和自动化配置类有关。同时我们也留意到了,客户端的四个动作:注册服务、续约服务、拉取注册列表、取消注册;这4个操作...
2024-09-26 15:47:19 413
原创 SpringCloud源码:服务端分析(二)- EurekaServer分析
背景从昨日的两篇文章:SpringCloud源码:客户端分析(一)- SpringBootApplication注解类加载流程、SpringCloud源码:客户端分析(二)- 客户端源码分析。我们理解了客户端的初始化,其实跟SpringBootApplication初始化机制息息相关,也和自动化配置类有关。现在我们一起来分析下服务端的初始化流程,开始之前,我们先梳理下几个常用的框架注解。@Impo...
2024-09-26 15:47:19 1402
原创 SpringCloud源码:客户端分析(二)- 客户端源码分析
背景我们继续分析EurekaClient的两个自动化配置类:自动化配置类功能职责EurekaClientAutoConfiguration配置EurekaClient确保了Eureka客户端能够正确地:- 注册到Eureka服务端- 周期性地发送心跳信息来更新服务租约- 下线时通知Eureka服务端- 获取服务实例列表;更侧重于Eureka客户端的基本配置和功能实现EurekaDiscoveryC...
2024-09-25 23:16:16 802
原创 SpringCloud源码:客户端分析(一)- SpringBootApplication注解类加载流程
总结一句话用@EnableDiscoveryClient注解客户端-启动类,配合@springbootapplication,完成两个步骤:自动读取spring-factories文件的全限定类名内容通过selectImport对这些类进行初始化背景spring.factories作用在maven依赖:spring-cloud-netflix-eureka-client/2.2.6.RELEASE...
2024-09-25 23:16:16 797
原创 SpringCloudEureka实战:搭建EurekaServer
1、依赖引入<dependencies> <!-- 注册中心 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka...
2024-09-24 23:49:54 216
原创 SpringCloudEureka实战:搭建EurekaServer集群
1、前言分布式环境下,考虑发生故障的情况,要构建高可用的注册中心,以增强系统的可用性。2、解决办法注册中心,互相注册,形成一组集群,以实现服务清单的互相同步,达到高可用效果。3、多注册中心集群3.1 DS Replicas在Spring Cloud Eureka中,DS Replicas(数据副本)是指Eureka Server集群中各个节点之间同步注册表信息的副本。3.2注册中心1配置文件ser...
2024-09-24 23:49:54 151
原创 SpringCloudEureka简介
背景SpringCloudEureka是基于NetfliEureka做了二次封装,负责微服务架构的服务治理功能。SpringCloud通过为Eureka增加SpringBoot风格的自动化配置,只需要简单的引入依赖和注解配置,就能让SpringBoot构建的微服务应用轻松和Eureka服务治理体系整合。功能各个微服务实例的注册与发现。每个服务单元向注册中心登记自己提供的服务,将主机与端又号、版本号...
2024-09-24 23:49:54 263
原创 Kafka消息堆积问题排查
背景业务架构图根据 微服务重构:Mysql+DTS+Kafka+ElasticSearch解决跨表检索难题所描述,我们使用了Es解决微服务重构中遇到的Mysql库拆分问题,业务架构图如下所示:Kakfa消息堆积导致的数据一致性问题在下午14:15左右,收到用户反馈,短暂时间内,出现了业务数据一致性问题具体表现是:用户提交了一个页面操作,但是在查询接口里,没有返回最新的操作结果具体校验是:通过问题反...
2024-09-15 08:18:46 985 1
原创 微服务重构:Mysql+DTS+Kafka+ElasticSearch解决跨表检索难题
1、背景在微服务拆分过程里,会对数据库模块重新进行建模拆分,导致部分表和数据,出现物理隔离,导致跨库JOIN的SQL不可行,并在数据检索上也有性能损耗的风险。下面我们来一起探讨一下,具体的解决方案。1.1 方案比较业界一般解决方案包括不限于下面几个方案实现手段优点缺点应用程序层面改造通过子查询、UNION ALL或进行JOIN操作来实现类似的效果灵活性高、易于实现:可以根据具体需求定制查询逻辑性能...
2024-09-10 22:21:17 1570
原创 基于SpringMVC的API灰度方案
一、背景在微服务重构时,我们常遇到这个业务场景:同样是/api/test,我们实现了新逻辑和老逻辑,然后根据定制的灰度策略,通常灰度API和老API两者都需要支持用户使用。那么是否有比较好解决方案,协助我们完成同名同方法同参数列表的API灰度动态路由的方案呢?我们就基于SpringMVC,通过对底层RequestMappingInfo的参数定制化,实现了methodHandler的动态路由决策,从...
2024-09-08 17:28:10 1383
原创 JDK源码讲解:Bean生命周期案例(初始化/销毁)
背景初始化bean@PostConstruct注解需要结合@Configuration、@Service、@Component注解一起使用,如此一来会在Bean的依赖注入完成之后, 执行被 @PostConstruct 修饰的方法。注意:一个类只能有一个用 @PostConstruct 修饰的方法。@Bean(initMethod = "initMethod")需要结合@Configuration...
2024-09-06 14:39:05 459
原创 SQL治理经验谈:索引覆盖
背景explain - formatid: query sql 的标识idSELECT_TYPE: 查询的类型(SIMPLE/PRIMARY/SUBQUERY/DERIVED/UNION/UNION RESULT/DEPENDENT SUBQUERY/DEPENDENT UNION)table: 表名Partitions: 表连接的分区数type: 查询中使用的访问类型(system/const/...
2024-09-05 23:13:53 1377
原创 理解到位:灾备和只读数据库
背景企业的数据容灾管理目标1、提供数据安全保障,规避业务风险。2、确保应用高可用性,消除计划外的停机时间,减少计划外的停机时间,提高业务连续性。3、考虑结合的方案,提高投资回报。三种线下灾备方案1、本地容灾:业务高可用和读写分离,以提高业务连续性2、同城容灾:兼顾业务连续性和数据安全,应对地区级以3、异地容灾:以数据安全为目标,应对地区级数据风险。每种灾备方式面向的管理目标不同,需要采用不同的方案...
2024-09-04 19:40:17 533
原创 SQL性能治理经验谈
背景SQL数据类型数值这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL 和 NUMERIC),以及近似数值数据类型(FLOAT、REAL 和 DOUBLE PRECISION)。类型大小范围(有符号)范围(无符号)用途TINYINT1 Bytes(-128,127)(0,255)小整数值SMALLINT2 Bytes(-32 768,32 767)(0,65 535)...
2024-09-04 19:40:17 1188
原创 JDK源码分析:HashMap
介绍HashMap 是 Java 开发工具包 (JDK) 中提供的一个关键类,它实现了 Map 接口,用于存储键值对(key-value pairs)。HashMap 是一种基于哈希表的 Map 实现,它允许使用任何对象作为键(key)和值(value),并且它不保证元素的顺序。底层是一个Node单向链表结点数组。以下是 HashMap 类的一些主要特点和用法:主要特点非同步:HashMap 不是...
2024-09-01 22:08:06 753
原创 Mybatis链路分析:JDK动态代理和责任链模式的应用
背景此前写过关于代理模式的文章,参考:代理模式动态代理功能:生成一个Proxy代理类,Proxy代理类实现了业务接口,而通过调用Proxy代理类实现的业务接口,实际上会触发代理类的invoke增强处理方法。责任链功能:可以动态地组合处理者,增加或删除处理者,而不需要修改客户端代码;可以灵活地处理请求,每个处理者可以选择处理请求或将请求传递给下一个处理者。MybatisAutoConfigurati...
2024-08-30 00:34:28 1104
原创 如何理解select(1)、select(*)、select(column)背后的差异?
先说结论select(1)、select(*)都是基于结果集进行的行数统计,统计到NULL行select(column)则受到索引设置的影响,默认会排除掉NULL行在数据库查询中,SELECT语句用于从数据库表中检索数据。SELECT (1)、SELECT (*)和SELECT (column)之间的差异主要在于它们返回的数据类型和范围:SELECT (1):这个语句返回一个单一的值,即数字1。它...
2024-08-28 23:59:13 426
原创 servlet的过滤器filter和springmvc的拦截器Interceptor
背景Servlet的过滤器(Filter)和Spring MVC的拦截器(Interceptor)都是用于在请求处理过程中对请求进行拦截和处理的组件。它们之间的主要区别在于它们的作用范围和使用方式。作用范围Filter:过滤器是基于Servlet规范的,它可以在整个Web应用程序中对所有请求进行拦截和处理。过滤器可以用于处理诸如身份验证、日志记录、数据压缩等通用任务。Interceptor:拦截器...
2024-08-28 23:59:13 757
原创 Mybatis插件-租户ID的注入&拦截应用
背景Mybatis是一个半自动化的ORM(对象关系映射)框架,它通过XML或注解的方式将Java对象和SQL语句进行映射,从而实现对数据库的增删改查操作。Mybatis ORM简介基本概念:Mybatis简化了数据访问层的开发,通过映射配置文件或注解将Java对象与数据库表进行映射,实现了对象关系映射。优点:Mybatis提供了灵活的SQL编写方式,支持动态SQL,易于与Spring等框架集成,同...
2024-08-26 22:58:14 766
原创 JDK源码解析:ArrayList
1、背景我们咨询一下阿里通义大模型,什么是“LinkedList”。以下是通义大模型的回答:ArrayList 是 Java 编程语言中的一种动态数组实现,它是 java.util 包中的一个类。ArrayList 实现了 List 接口,能够存储元素的有序集合,并且允许插入重复项。与传统的固定大小的数组不同,ArrayList的大小可以根据需要动态增长或缩小。当添加新的元素时,如果当前...
2024-08-26 22:58:14 567
原创 Ollama是什么?安装部署指南
前言此前写过2篇关于大模型思考的文章:《浅谈大模型时代的后台技术发展》、《AGI 时代的破局之道 》;对于大模型的本地部署和使用,下面我们了解一下。Ollama是什么?一个本地部署运行大模型的工具,一行命令一键启动,支持linux、windows和mac操作系统的安装。Ollama支撑哪些大模型?访问:https://ollama.com/library,列表下的大模型,它都支持。Ollama运行...
2024-08-22 20:43:49 745
原创 Llama3.1大模型
背景Llama 3.1是一款由Meta(前Facebook)推出的先进大型语言模型。它在自然语言处理领域具有显著优势,为用户提供高质量的文本生成、理解和推理能力。Transformer架构Transformer是一种神经网络架构,可以处理文本、音频、视频和图像等顺序数据(作为图像补丁的序列)。Transformer不使用任何循环层或卷积层。它的基础层叫做Attention(注意力)。它还包含其他基...
2024-08-22 20:43:49 318
原创 大模型安装部署、测试、接入SpringCloud应用体系
背景大模型通常指的是具有庞大数据的神经网络模型,如OpenAI的GPT系列、Google的BERT等。这些模型对计算资源的需求极高,因此通常部署在云服务器或高性能计算集群上。安装部署大模型时,需要考虑模型的兼容性、计算资源的需求、存储空间的分配以及模型的优化策略。SpringCloud是一个用于构建微服务架构的框架,它提供了一系列的开发工具和服务,如服务发现、配置管理、负载均衡等。将大模型接入Sp...
2024-08-22 20:43:49 296
原创 再谈单例模式
前言此前写过设计模式的文章:《单例模式》,谈过单例模式,但对背后的底层知识阐述的还不够到位,比如下面几个问题剖析的不够仔细:静态内部类的实现方案,为何是线程安全的?DCL优化(双重校验模式),为何会线程不安全?又该如何优化?枚举类为何天生特殊,一定线程安全?概念创建型模式是用来创建对象的模式,抽象了实例化的过程,帮助一个系统独立于其他关联对象的创建、组合和表示方式。单例模式的目的:保证一个类仅有一...
2024-08-19 22:02:19 724
转载 JVM:浅谈静态代码块和<clinit>方法
概念静态内部类形式的单例可保证线程安全,也能保证单例的唯一性,同时也延迟了单例的实例化。理论依据是<clinit>方法:<clinit>()方法是编译器给某些类(带有静态代码块,或者静态变量、静态内部类)自动生成的方法,目的是,确保静态语句块有序顺序的执行,并且只会执行一次。下面是取材于《深入理解JVM虚拟机》第7章-7.3.5节的内容:虚拟机会保证一个类的<clin...
2024-08-19 22:02:19 25
tornado-4.5.2-cp36-cp36m-win_amd64
2017-10-08
Mysql FULL JOIN 遇到的一个语法错误;麻烦网友指教,谢谢!!
2018-10-20
TA创建的收藏夹 TA关注的收藏夹
TA关注的人