自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

wthfeng的专栏

我的架构师成长之路 http://blog.wthfeng.com

  • 博客(91)
  • 资源 (2)
  • 收藏
  • 关注

原创 一文深入分析AQS(原理篇)

之前写过AQS的文章 AbstractQueuedSynchronizer整体解析),当时只是简单介绍了下,没有涉及源码分析和实现细节,但这毕竟是java同步中最重要的类,于是重写了部分内容,添加了源码分析和其他细节。本文分成两个部分,第一部分从整体上分析AQS的实现机制和原理,第二部分深入源码探究。好了,那就开始吧整体介绍从AQS类的注释中,我们可以了解到:该类是一个用于构建锁或其他同步器的基础框架,使用一个int的成员变量表示同步状态。另外,还有一个内置的先进先出的队列可储存竞争同步状态时排队的线

2021-06-09 14:44:35 1098

原创 深入源码剖析spring实现原理

spring的重要性不用多说了,本文从源码角度深入分析spring的实现原理和一些关键点。争取一篇文章让你对spring有更整体深刻的理解。一、整体分析在分析源码之前,先从整体上了解下spring,这对后面源码分析是很重要的。注:本文基于目前(2021-6)spring最新版本5.3.7我们知道spring主要特性是ioc和aop,而这两者中最重要的还是ioc,它提供了管理bean的容器,其他特性都是基于此容器的。那么要了解spring,主要是看看它是怎么构建ioc的。找到bean定义根据

2021-06-06 23:54:08 794 5

原创 redis 缓存穿透等问题解决方案

在使用redis中可能会发生以下情况:缓存出现的问题缓存穿透访问redis一个(或多个)不存在的数据,击穿redis到达DB。查询DB仍返回空。大量这样的访问可能会使DB崩溃。缓存雪崩缓存系统同一时间有大量数据失效。大量数据打到DB使DB压力过大。缓存并发和上面类似,不过这个是当一个key过期时大量请求打到DB。解决方法以上三种情况区别在于缓存穿透是恶意的,即通过大量构造不存在的...

2019-02-19 20:19:48 652

原创 AbstractQueuedSynchronizer整体解析

AbstractQueuedSynchronizer整体解析前言在此之前,我们深入源码分析过ReentrantLock系列,在那里就探讨过AbstractQueuedSynchronizer(下称AQS)类,称其是同步组件乃至整个并发包的基础类。这篇文章就深入AQS,从AQS的角度了解同步器以及ReentrantLock、ReentrantReadWriteLock等的实现机制,实现自定义的同步组件

2017-12-10 23:11:57 533 2

原创 ReentrantLock原理探究(一)

前言ReentrantLock类是synchronized语义的替代品,可以实现与其相同的功能,了解其实现原理对并发编程无疑是很有帮助的。其次,ReentrantLock 的实现基础AQS(AbstractQueuedSynchronizer)也是java并发编程中相当重要的一个类,所以无论如何,我们都要了解一番。

2017-05-21 10:16:32 1347 3

原创 java的内存模型与volatile关键字详解

由于各种硬件及操作系统的内存访问差异,java虚拟机使用java内存模型(java Memory Model,JMM)来规范java对内存的访问。这套模型在jdk 1.2中开始建立,经jdk 1.5的修订,现已逐步完善起来。什么是java内存模型什么是java内存模型,为什么会有这个模型?关于这个问题,就不得不从并发的问题讲起。在多核系统中,处理器一般设置缓存来加速数据的读取,缓存大大提升了程序性能

2017-02-05 10:19:48 2590

原创 微调 vs RAG vs Prompt:企业落地时到底选哪条路

企业做 AI 落地,最常见的错误就是"技术驱动选型"——因为微调听起来很酷就选微调,因为 RAG 是热门就选 RAG。正确的做法是需求驱动:先搞清楚你的问题属于哪一类,再选最适合的技术。很多时候,最好的方案不是选一个,而是组合使用。RAG 管知识更新,微调管格式风格,prompt 管通用理解——各干各的事。

2026-05-23 10:35:19 365

原创 副本机制与 ISR 设计:为什么 Kafka 这么快又这么可靠

很多人把 Kafka 的副本理解成"数据备份"——怕数据丢了,多存几份。这个理解不能说错,但很片面。Kafka 的副本设计,本质是为了"可用性",而不是"持久性"。持久性靠的是刷盘策略和日志结构。副本解决的是"当某个节点挂了,系统还能正常服务"的问题。Kafka 能成为消息队列领域的事实标准,不是因为它功能多。恰恰相反——它因为功能少而强大。Kafka 的设计者删掉了很多"看起来有必要"的功能(比如复杂的路由、事务消息、优先级队列),把精力集中在把"存-转"这个核心路径做到极致。

2026-05-21 00:22:57 380

原创 LLM 应用可观测性:为什么你的 AI 服务出了问题你不知道

传统软件的可观测性是"服务有没有挂"。LLM 应用的可观测性是"模型有没有变笨"。后者更难,但也更重要。因为"变笨"比"挂了"更隐蔽——用户不会看到错误页面,他们只是觉得"这个 AI 好像不太聪明了",然后默默离开。能第一时间发现"变笨"的团队,才能在用户流失之前把问题修好。

2026-05-20 23:29:36 387

原创 2026 年 Java 趋势:AI 浪潮下,Java 会过时吗?

Java 不是一个性感的语言。它不会让人"眼前一亮",也很少上 Hacker News 头条。但 Java 是一个"靠谱"的语言。它稳定、成熟、有大量的人才库和工具链。在技术选型的时候,"可靠"比"性感"更值钱。在企业做决策的时候,"能招到人"比"性能好"更重要。在长期维护的时候,"生态成熟"比"语法优雅"更关键。Java 的未来不在于跟 Go 比并发、跟 Rust 比性能、跟 Python 比简洁。Java 的未来在于:当一个技术负责人要保证一个系统稳定运行十年的时候,他会选哪个语言。答案不言自明。

2026-05-20 23:21:04 549

原创 01 Java 在 AI 时代的真实位置:不是替代 Python,而是兜住 Python 搞不定的那部分

摘要: Java在AI时代扮演着生产环境兜底者的角色,而非替代Python。文章通过金融风控案例揭示Python在实验室表现优异(AUC 0.89),但生产环境中面临并发瓶颈(200 QPS)、内存泄漏等问题;而Java重构后实现2500 QPS、稳定内存管理和半年无重启。核心差异在于: 分工:Python擅长模型训练,Java解决高并发、系统集成和可观测性 生态:Spring AI、LangChain4j和ONNX Runtime等工具使Java能无缝承接Python训练的模型 定位:Java开发者应聚焦

2026-05-20 20:32:18 37

原创 Browser-Use 实战指南:让 AI 自己操控浏览器的 7 个实用场景

有时候标准的 Agent 不够用,你需要注入自定义逻辑。browser-use 提供了Tools@tools.action(description="将文本写入本地文件,filename是文件名,content是内容")

2026-05-18 11:42:25 561

原创 安装minikube网络访问问题解决

minikube出现网络下载问题,使用国内的镜像仓库代理即可,具体可使用minikube start --help 查看说明文档

2022-10-06 14:39:29 1646

原创 Thread的join()方法解析

一般用join方法实现主线程等待其他异步线程完成,今天就看看它到底是咋实现的。先看下示例 // 子线程 static class SleepThread implements Runnable { @Override public void run() { try { System.out.println("子线程开始"); Thread.sleep(1000);

2021-06-08 12:45:40 517

原创 关于网上一个jedisLock锁问题的探讨

关于网上一个jedisLock锁问题的探讨前言前段时间项目有关redis分布式锁的代码经常出现锁超时的情况,经排查终于发现了个隐藏的问题,现记录下来以备忘。问题复现引用的jedis锁项目是 <groupId>com.github.jedis-lock</groupId> <artifactId>jedis-lock</artifactId> <version>1.0.0</version>项目很简单,就一个java类,

2021-04-22 23:19:39 563

原创 mysql加锁分析(一)等值查询

mysql加锁分析(一)等值查询等值查询的加锁分析相对简单,这篇先从等值查询开始。前言先确认本篇内容,分析在RC(读已提交)和RR(可重复读)下关于等值查询的加锁分析。关于范围查询待下篇讲起。mysql默认的隔离级别是RR。隔离级别的查询及调整如下:select @@global.transaction_isolation; ## 查询全局事务隔离级别select @@session.transaction_isolation; ## 查询会话事务隔离级别set session(glob

2021-04-22 23:17:34 1195

原创 mysql的InnoDB和MyISAM引擎区别

InnoDB特点:行级锁支持事务处理支持外键,使用B+树。聚集索引主键mysql5.6版本开始支持已全文索引InnoDB中数据文件本身就是索引文件。索引也使用B+树实现,叶子节点储存数据。索引文件本身需要按主键构建(所以InnoDB需要必须有主键,没有指定会默认生成)。InnoDB的辅助索引底层储存的是主键的值。然后再根据主键的值去主键索引(也相当于数据文件)去查找相应的值。...

2019-04-16 19:52:51 357

原创 数据库事务总结与整理(一)

前言提数据库就会讲到数据库的事务问题,常见的一个问题就是:你的数据库是如何保证事务的?这里的数据库可以是关系型数据库,如mysql,或者是非关系型的,如MongoDB或是其他数据库。令人头疼的是,这样的问题很常见却不知怎么回答,一个原因是没有涉及过事务相关的操作,还有项目中有事务,往往也是一个注解搞定,根本不深入。今天就来全面总结下有关事务的问题。事务的若干概念ACID特性一般来说,事务具...

2019-04-16 19:30:12 536

原创 java的异常、finally和return

前言本文主要讲解java的异常体系及有关finally和return的返回问题。继承体系java中所有异常类的基类都是Throable类。它的两大子类分别是Error和Exception。Error表示错误,是程序处理不了的。Exception类又分为运行时异常(RuntimeException异常)和非运行时异常(或称为受检异常)。顾名思义,运行时异常是程序在运行时才能被检查出来的异常,...

2019-04-16 12:53:38 1598 2

原创 java基础体系整理(三)Spring框架相关

前言本文spring框架相关知识包括Spring、Spring MVC,Spring Boot 以及Mybatis,Hibernate等常见与Spring集成相关的框架。常见问题对Spring IOC、AOP的理解AOP的实现方式都有哪些?AOP中切面、切点是指什么?Spring MVC请求流程,拦截器在哪里执行的? 监听器是指什么?Mybatis中怎样在一次插入中返回该行主键(如...

2019-04-06 20:55:20 492

原创 关于HashMap在高并发下的问题

前言总所周知,HashMap不是线程安全的,在高并发情况下会出现问题。特别是,在java1.7中,多线程的HashMap会出现CPU 100%的严重问题。这个问题是怎样产生的,后续版本还会有这个问题吗(指java8及后续版本)?下面就来用通俗的语言讲解下。解析关于这个问题,是由于java7多线程扩容机制下链表变为循环链表,再获取该链表导致的。看下java7中扩容的代码。java7中Hash...

2019-04-02 15:23:38 1718

原创 java知识体系整理(二)JVM、GC回收及调优

本部分涉及JVM内存结构及GC算法,java调优等知识。JVMJVM内存结构划分(堆、栈、方法区、程序计数器等)标记清除、标记整理及复制算法。常用GC参数常见垃圾回收器及优缺点程序CPU 100%怎样排查?常见的JVM工具有哪些JVM优化栈上分配 当开启逃逸分析后,JVM会把确定不会溢出的对象放到栈上分配,是JVM的一项优化技术,基本思想是对线程私有的对象将他们打散分...

2019-04-01 21:44:54 506

原创 java知识体系整理(一)基础知识

基础知识基础知识主要涉及java语法及常见知识点。包括IO、类加载,反射、注解、异常,集合类等。下面以这几个大类分别做汇总,并引出其中若干小问题。知识梳理java的集合体系及继承关系,以及主要类的用法及原理。java类加载机制BIO与NIO、AIO区别及联系,什么是Reactor模型。异常类继承关系,受检异常和非受检异常。反射知识梳理。其他java特性(枚举,注解,synchro...

2019-04-01 20:39:08 6372 1

原创 zookeeper笔记摘要

zookeeper不能基于临时节点创建子节点,临时节点只能作为叶子节点。节点版本表示节点自创建后变更次数。客户端当发生网络问题会自动重连,会是CONNECTED和CONNECTING两者之一。服务器是根据配置文件中服务器个数确定是启动集群模式还是单机模式。在刚启动时状态是LOOKING,选举状态。(此状态认为当前集群没有leader,会进入选举状态,尝试向其他节点发送投票信息)进入选举...

2019-03-27 21:24:26 361

原创 zookeeper 原理简介随笔

zookeeper 原理简介随笔两部分: 文件系统和通知机制。文件系统,全量数据存于内存。zk主要有2种节点类型,临时节点和持久节点。又细分为普通临时节点顺序临时节点普通持久节点顺序持久节点临时节点的生命周期和客户端一致。如果客户端会话失效,则节点会被自动销毁。临时节点没有子节点顺序节点中,只会为其直接子节点维持顺序二阶段提交协议分为事务询问和执行事务两个部分。...

2019-02-27 20:48:05 324

原创 MySQL数据库InnoDB与MyISAM区别

数据库存储引擎区别### InnoDB特点: 行级锁,支持事务处理,支持外键,行锁实现,根据索引条件检索数据使用行锁。MyISAM表锁,支持全文索引。表锁,分为表共享锁和表独占锁。读和读之间使用共享锁,读写之间使用独占锁。数据结构B树,又称多路平衡查找树。所有节点中孩子节点的最大值为此树的阶(用m表示)。每个节点关键字的个数最少有[m/2-1]个,最多有[m-1]个。也即一个m为4...

2019-02-26 12:25:43 2374

原创 BIO、NIO以及AIO特点及比较

BIO、NIO以及AIO特点及比较BIO传统阻塞式IO的瓶颈在于每个连接都要创建线程,当连接过多时不能处理大量连接。讨论为什么传统IO会阻塞?首先说明一下socketsocket是支持TCP/IP网络通信的基础,是网络通信端点的抽象表示。可以使用5元组表示socket。为 协议,源ip,源port,目标ip,目标port。协议可选TCP或UDP,是TCP/IP协议的封装和应用。soc...

2019-02-20 21:52:16 1115

原创 mongoDB 笔记随笔(一)

可复制集mongoDB可复制集本质上是对主从复制模型的增强。在主从复制的基础上增加了自动化切主、平滑迁移的功能。最小的可复制集群至少有3个节点,主、从节点和一个裁判节点。裁判节点不包含数据,只在主节点down后进行重新选主操作。构建可复制集群构建一个包含3个节点的集群。一个主节点,一个从节点,一个裁判节点。mongod --replSet myrepl --dbpath /data/d...

2019-02-11 11:56:52 435

原创 Flume简要说明笔记

## 前言flume是Apache旗下的开源日志收集、传输框架(由Cloudera于2009年捐赠)。可支持收集来自文本、HDFS、HBase等多种数据源的日志记录,并可传输到多种数据源。由于其稳定的性能及表现,目前已被广泛采用。主体介绍Event(事件)是Flume的基本传输单元,可理解为传输的数据如日志等。Agent是Flume的核心运行逻辑。一个Agent就是一个完整的数据收集工具(...

2018-11-18 20:28:52 362

原创 java I/O体系总结(五)netty架构浅析

java I/O体系总结(五)netty架构浅析简介netty是使用java编写的高性能IO框架,旨在为高并发场景提供支持。netty可提供多种IO模型的支持,如OIO,NIO等。一般来说,非阻塞IO更适合于大规模高并发场景,我们使用netty主要也因为其封装了原生NIO,规避了其中复杂易出错的细节,更加易用、通用。从示例讲起netty既然是以java NIO为基础构建的(当然...

2018-09-17 17:41:19 342

原创 java I/O体系总结(四) 使用socket构建HTTP服务器

java I/O体系总结(四) 使用socket构建HTTP服务器前言在 java I/O体系总结(三)中,已使用阻塞和非阻塞的方式分别构建了一个简单的服务器。HTTP作为Web浏览器和Web服务器之间通信的标准协议,在网络编程中有也重要位置。下面就深入HTTP协议,尝试使用NIO构建简单的HTTP服务器。HTTP协议我们都知道,HTTP协议是应用层协议,全称超文本传输协议...

2018-09-14 18:04:54 362

原创 java I/O体系总结(二) java IO补充

java I/O 体系总结二前言继续说java的I/O体系,主要补充下上文没有提到的知识点或类。java有关io的类在java.io包中。主要有以下几个部分。java i/o流部分(也是IO的主体部分)io辅助类,如File、RandomAccessFile或FileDescriptor,Closeable及Flushable等。io异常类io流分类根据数据...

2018-09-14 12:00:45 381

原创 java I/O体系总结(三) java NIO

java 新IO IO NIO 特点 面向流 面向缓冲 是否阻塞 阻塞IO 非阻塞IO 无 选择器java 新IO主要部分:Buffer(缓冲区)、Channel(通道)、Selectors(选择器)Java NIO的非阻塞模式,如使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数...

2018-09-13 21:23:05 522

原创 java I/O体系总结

java I/O体系总结I/O流的理解先看看流的概念 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。通俗的说,有两个文件A和B,想要把A的内容拷贝到B中,可以假设两文件间有一个通道,把A的数据按字节或是字符的形式传送给B。这个通道就是java...

2018-09-10 16:57:20 640 2

原创 spring初始化接口InitializingBean

spring初始化接口InitializingBeanInitializingBean接口用于初始化bean。此接口只有一个方法afterPropertiesSet, 继承此接口的bean,在bean的属性初始化会执行这个方法。下面看一下此接口定义/** * 当需要在BeanFactory设置完bean的所有属性后,还需做一些初始化的操作,可让该bean实现此接口 */pu...

2018-09-08 10:21:21 2228

原创 使用注解方式构建dubbo服务

使用注解方式构建dubbo服务前言Dubbo是阿里巴巴开源的一个高性能优秀的服务框架,通过使用RPC实现服务调用。在业界尤其国内使用广泛。下面就从头开始构建dubbo的简单demo,配置使用注释方式完成,以zookeeper为注册中心。构建项目以 IntelliJ IDEA 为例,创建一个多模块的项目,项目结构如下图所示。其中,dubbo-demo是父项目,其下有3...

2018-09-07 17:12:58 20759 5

原创 Wait/Notify通知机制解析

Wait/Notify通知机制解析前言我们知道,java的wait/notify的通知机制可以用来实现线程间通信。wait表示线程的等待,调用该方法会导致线程阻塞,直至另一线程调用notify或notifyAll方法才可另其继续执行。经典的生产者、消费者模式即是使用wait/notify机制得以完成。在这篇文章中,我们将深入解析这一机制,了解其背后的原理。

2017-12-09 22:49:04 10592 7

原创 ElasticSearch笔记-5.X版本若干变化

写在前面:去年写的有关Elastic的一些知识是基于2.x版本的,目前最新的版本是5.6(2017-10),一些重要的API与用法已经发生改变。这篇文章在之前系列的基础上,重点从API角度讲讲变化的部分。

2017-10-15 11:36:15 2741

原创 java8的内置函数式接口总结

java8引入了函数式的编程,在提高代码简洁和可读性的同时也 增强了程序并发执行的能力。这篇文章我们主要关注java8的函数式接口,以及其内置的若干函数式接口。

2017-10-02 10:56:57 3621

原创 快速排序(QuickSort)算法介绍

算法简介快速排序(Quicksort)是对冒泡排序的一种改进算法。由C. A. R. Hoare在1960年提出。该算法使用广泛、效率很高,是最重要的排序算法之一。该算法的实现基本可分为以下几步:

2017-09-20 09:47:38 63689 12

java 8 API英文版

Java 8 API,学习java的必备自来哦

2015-06-28

Putty远程登录工具

远程登录工具最出名的软件之一,体积小,免安装

2015-06-28

空空如也

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

TA关注的人

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