Java
文章平均质量分 87
验证码有毒
2017年7月毕业于东莞猴赛雷社会学院。码农届的搬砖员
展开
-
【Springboot】新增profile环境配置应用启动失败
最近接受了一个新的项目,为了不污染别人的环境,我新增了一个自己的环境配置。结果,在启动的时候总是失败,就算是反复也是无效。现象一:报错现象二:卡住无法进行下一步。原创 2024-07-15 15:08:02 · 302 阅读 · 0 评论 -
【Maven】使用idea将sdk打包部署到本地仓库
如题。近日在接入外部支付的sdk,突然有点忘了如何引入外部sdk到自己的maven仓库中。就想着记录一下吧。原创 2024-07-04 16:31:56 · 417 阅读 · 0 评论 -
【分布式微服务专题】从单体到分布式(四、SpringCloud整合Sentinel)
相对来说,Sentinel的学习难度比之之前的Dubbo要低了不少。不过在学习过程中也遇到了一些认知局限带来的困难。比如,虽然还是学习了Sentinel,但是不知道生产环境该如何配置才是最佳的状态。说到底,Sentinel还是没有提供很好的文档支持。比如:生产最佳实践方案。官方也确实提供了一个,但是总感觉不太完备。另外在学习的过程中再次提醒了我:不要盲目的添加中间件,中间件的引入势必会造成系统复杂度上升,也带来了一定的运维成本。所以,若非有必要的,不一定要特定地去引入某个中间件。原创 2024-01-11 11:35:35 · 1280 阅读 · 0 评论 -
【分布式微服务专题】SpringSecurity OAuth2快速入门
这里面的笔记都是我这里抄抄那里抄抄得来的,然后也经过了一些简单的测试,主要是用来拓宽知识面用的,毕竟到了项目开发中,不会裸用这些技术框架,通常都是采用第三方集成框架。另外需要说明的是,这里要介绍的框架应该有点过时了,在Spring官网已经没有了项目介绍,现在项目似乎已经升级,并且迁移为项目。所以我打算学习完现在的OAuth2之后,继续学习。OAuth2.0协议介绍OAuth(Open Authorization,开放授权)是一个关于授权(authorization)的开放网络标准协议。原创 2024-01-09 15:04:57 · 1739 阅读 · 0 评论 -
【分布式微服务专题】SpringSecurity快速入门
系列上一篇文章:《官方介绍:Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。它是用于保护基于 Spring 的应用程序。Spring Security 是一个框架,侧重于为 Java 应用程序提供身份验证和授权。与所有 Spring 项目一样,Spring 安全性的真正强大之处,在于它很容易扩展以满足定制需求Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。原创 2024-01-01 19:51:25 · 1887 阅读 · 0 评论 -
【Arthas】Arthas线上trace匿名函数/Lambda表达式/函数式接口
Arthas是一个非常牛B的东西,我非常喜欢用,特别是在定义线上问题的时候,牛逼大发!非常建议所有Java玩家都去学习一下。原创 2023-12-26 12:15:04 · 1669 阅读 · 2 评论 -
【分布式微服务专题】从单体到分布式(三、SpringCloud整合Dubbo)
本片笔记主要是记录我整合Dubbo的过程。引入Dubbo主要是为了实现微服务之间的调用,即:RPC(Remote-Process-Call,远程过程调用)。本次整合Dubbo可谓是曲折坎坷,耗费了不少时间和精力。不过也是收获挺多的,有些项目问题,真的不亲身经历,终是【纸上谈兵】。举个鲜明的例子:我为什么要自己从0开始搭建微服务项目?因为我想要获得【从0开始搭建项目】的经验和能力!maven的基本知识。原创 2023-12-17 14:41:08 · 286 阅读 · 0 评论 -
【分布式微服务专题】从单体到分布式(二、SpringCloud整合Nacos)
本篇笔记主要是记录我整合Nacos项目进来的过程。以实现服务注册发现,以及分布式配置管理。Nacos官网传送门Nacos使用详解》)原创 2023-12-07 22:42:52 · 1335 阅读 · 0 评论 -
【分布式微服务专题】从单体到分布式(一、SpringCloud项目初步升级)
从本节课开始,我将自己手写一个基于SpringCloud框架的web服务集群,中间会引入常用的微服务中间件。如:配置中心、网关、链路追踪、断路器等等。本节课只是简单地从原有单体项目,然后升级成SpringCloud架构。为了升级演示效果,我写了一个简单的SpringBoot单体应用,架构如下:然后实现的功能也很简单,直接list获取库里面所有的数据。会员管理模块:提供一个/user/list接口,获取数据库里面所有用户数据钱包管理模块:提供一个接口,获取数据库里面所有钱包数据。原创 2023-12-06 11:47:48 · 1472 阅读 · 0 评论 -
【微服务专题】微服务架构演进
事实上,我个人对单体到微服务架构的演进尽管能够理解,但总是觉得差点意思,所以这边在学习之余,顺便写个笔记总结一下,加深一下印象吧。Spring Cloud提供了一些可以让开发者快速构建微服务应用的工具,比如配置管理、服务发现、熔断、智能路由等,这些服务可以在任何分布式环境下很好地工作。Distributed configuration,分布式配置Service registration and discovery,服务注册与发现Routing,服务路由。原创 2023-11-28 22:35:49 · 1594 阅读 · 1 评论 -
【Netty专题】Netty调优及网络编程中一些问题补充(面向面试学习)
很直接哈,最近去面试的时候遇到了一些Netty网络编程,序列化框架上的问题,当时回答的不是很好,所以赶紧回来学习了一下,顺便做一下笔记,沉淀一下了。什么是序列化/反序列化?我在前面的文章中有提到过,但那时候没有写的很仔细,我自己也忘了,罪过啊。其实我知道,序列化/反序列化在网络编程中是很重要的概念,只不过被我自己疏忽了。言归正传。什么是序列化、反序列化?我们知道,数据在网络中传输不可能是原文传输的,人家机器设备只认得二进制01串。所以,把原文转换为01串字节流这个过程就是序列化;反之,则叫做反序列化。原创 2023-11-25 17:03:20 · 1622 阅读 · 0 评论 -
【微服务专题】SpringBoot自动配置简单源码解析
想要搞懂自动装配,需要当前系列前两篇笔记内容打底。不过我上一篇笔记写的不好,没有什么突出的重点,主要也是当时跟着课程看了源码之后,也没发现什么特别的,直到在看自动装配源码的时候,才后知后觉遗漏了一些重要的知识点。但是总体来说不影响这一节课的笔记记录吧。我们说起SpringBoot,总会不自觉的联想到自动配置约定大于配置等标签,但说实在,我是有一点困惑的,这个【约定和配置】到底是什么意思,或者说,它们具体指的是哪些内容啊?!我在想,像我这种,只是用过那么一年多SSM/SSH。原创 2023-11-24 23:47:59 · 1486 阅读 · 0 评论 -
【微服务专题】Spring启动过程源码解析
这部分只是个人的自结,方便后面回来看源码的时候跟踪,个人感觉看完之后没什么需要特别学习的地方。大家绕道走吧。原创 2023-11-15 23:49:32 · 969 阅读 · 2 评论 -
【微服务专题】手写模拟SpringBoot
SpringBoot最大的特点是什么大家伙还记得吧?自动配置 + 约定大于配置原则。简单学习了一下SpringBoot的启动流程简单学习了一下SPI机制,及其在Java和Spring中的使用。原创 2023-11-11 00:53:55 · 1249 阅读 · 0 评论 -
【ES专题】ElasticSearch功能详解与原理剖析
使用:搜索和聚合操作语法,理解分词,倒排索引,相关性算分(文档匹配度)优化: 数据预处理,文档建模,集群架构优化,读写性能优化学习了ES的预处理器弄明白了ES的读写流程,以及ES写原理。原创 2023-11-07 22:26:31 · 655 阅读 · 0 评论 -
【ES专题】ElasticSearch集群架构剖析
使用何种通信协议去同步数据,互相通信采用何种策略同步数据(异步还是同步)如何保证一致性,保证到什么程度(【最终一致性】 or【实时一致性 / 强一致性】)使用何种算法去选举主次节点(感觉这个比较随意,通常为了快速恢复服务,选举流程是怎么快怎么来,但是不能出现【脑裂问题】)原创 2023-11-05 22:13:08 · 3372 阅读 · 0 评论 -
【ES专题】ElasticSearch 高级查询语法Query DSL实战
语法结构比较陌生没有中文文档, 只能看英文其他博客也比较少介绍语法结构。比如说,为什么查询中会出现query关键词就跟Mysql有自己的查询语言一样,ES作为一款优秀的分布式文档存储和【搜索引擎】,它也有自己的查询语言。即:Query DSL(查询Domain Specific Language),查询领域专用语言。Query DSL是利用RESTfull风格API传递JSON格式的请求体(RequestBody)数据与ES进行交互,这种方式的丰富查询语法让ES检索变得更强大,更简洁。原创 2023-10-31 23:38:09 · 2372 阅读 · 0 评论 -
【POI-EXCEL-下拉框】POI导出excel下拉框数据太多导致下拉框不显示BUG修复
最近在线上遇到一个很难受的BUG,我一度以为是我代码逻辑出了问题,用了Arthas定位分析之后,开始坚定了信心:大概率是POI的API有问题,比如写入数据过多。PS:上图为正常的下拉框。但是,当下拉选项过多时(跟多少无关,而是跟字节数有关),会导致下拉框内容显示失败。原创 2023-10-31 11:29:46 · 1245 阅读 · 2 评论 -
【ES专题】ElasticSearch快速入门
现在有一个【搜索】的场景,在CSDN中 【搜索】【Java设计模式】,你会看到如下页面:看,大伙有没有想过,上面这种搜索,到底是怎样实现的?就假设他们就是存在一个Mysql里面了,那我们不妨来反推一下,上面这个搜索,它们背后的表结构是怎样的。id标题title内容content1Java中23种设计模式Java中23种设计模式,包括简单介绍,适用场景以及优缺点等2Java常见设计模式总结设计模式是一套经过反复使用的代码设计经验,目的是为了重用代码、让代码更容易被他人理解、保证代码可靠性。原创 2023-10-30 23:38:42 · 1397 阅读 · 0 评论 -
【并发专题】CAS&Atomic 原子操作详解
什么是原子性,什么是原子操作,我想大家应该都知道吧。原子操作就是【一系列方法,要么全部执行,要么全部不执行】,这就是原子操作。最典型的就是数据库事务里面的操作。在并发里,同样存在原子性,他跟上面说到的原子操作是一样的内涵和概念。假定有两个操作A和B都包含多个步骤,如果从执行A的线程来看,当另一个线程执行B时,要么将B全部执行完,要么完全不执行B,执行B的线程看A的操作也是一样的,那么A和B对彼此来说是原子的。Java提供的Atomic系列的原子操作类,原创 2023-07-17 17:57:42 · 248 阅读 · 0 评论 -
【LeetCode】统计N以内的素数(质数)
给定一个值n,统计2~n以内,素数的个数说明:素数,即质数。除0、1以外,只能被1和自身整除的自然数,即为素数。例:输入:100输出:25。原创 2023-08-02 16:40:08 · 731 阅读 · 0 评论 -
【LeetCode】链表反转
题目:给定单链表头节点,将单链表的链接顺序反转过来例:输入:1->2->3->4->5输出:5->4->3->2->1要求:按照两种方式实现。原创 2023-08-01 11:08:58 · 282 阅读 · 0 评论 -
【并发专题】阻塞队列BlockingQueue实战及其原理分析
当阻塞队列插入数据时,如果队列已满,线程将会阻塞等待直到队列非满;从阻塞队列取数据时,如果队列已空,线程将会阻塞等待直到队列非空。并发包下很多高级同步类的实现都是基于BlockingQueue实现的。ArrayBlockingQueue是一个典型的有界队列,它是基于数组结构来存储元素。初始化时需要指定容量大小,利用 ReentrantLock 实现线程安全。LinkedBlockingQueue是一个基于链表实现的阻塞队列,默认情况下,原创 2023-07-23 22:34:57 · 319 阅读 · 0 评论 -
【并发专题】从0开始深入理解并发、线程与等待通知机制(上——前置知识)
编写可靠的代码编写高性能代码优化用户体验充分利用 CPU 的资源… …但是在学习之前,我们需要学习一些概念。即,什么是进程和线程?学习了一些计算机基础原理知识,重新认识一下进程、线程的概念学习了CPU核心数与线程数的关系,以及CPU核心数跟逻辑核心数,还有Runtime.getRuntime().availableProcessors()的返回内容本质学习了上下文切换的概念学习了并行与并发的概念*上下文切换。原创 2023-07-12 22:03:49 · 117 阅读 · 0 评论 -
【并发专题】手写LinkedBlockingQueue
下面只是简单的实现了。原创 2023-08-01 22:10:14 · 203 阅读 · 0 评论 -
【并发编程】ForkJoinPool工作原理分析
归并排序(Merge Sort)是一种基于分治思想的排序算法。归并排序的基本思想是将一个大数组分成两个相等大小的子数组,对每个子数组分别进行排序,然后将两个子数组合并成一个有序的大数组。因为常常使用递归实现(由先拆分后合并的性质决定的),所以我们称其为归并排序。将数组分成两个子数组对每个子数组进行排序合并两个有序的子数组归并排序的时间复杂度为O(nlogn),空间复杂度为O(n),其中n为数组的长度。原创 2023-07-30 00:31:44 · 494 阅读 · 0 评论 -
【并发专题】导致JVM内存泄露的ThreadLocal详解
学习了ThreadLocal的基本使用学习了ThreadLocalMap,并且知悉它与ThreadLocal和Thread的关系学习了为什么需要ThreadLocalMap学习了ThreadLocalMap使用中,容易导致JVM溢出的场景。原创 2023-07-15 22:56:30 · 369 阅读 · 0 评论 -
【并发专题】JUC并发工具类在大厂的应用场景详解
ReentrantLock是一种可重入的独占锁,它允许同一个线程多次获取同一个锁而不会被阻塞。它的功能类似于synchronized是一种互斥锁,可以保证线程安全。Semaphore(信号量)是一种用于多线程编程的同步工具,用于控制同时访问某个资源的线程数量。它通过维护若干个许可证来控制线程对资源的访问。当许可证数量大于零时,线程可以访问;反之,则拒绝,并阻塞线程让其等待。许可证的数量,就是最多可访问线程数。原创 2023-07-18 23:07:31 · 413 阅读 · 0 评论 -
【并发专题】线程池ThreadPoolExecutorl底层原理源码分析
线程池严格来说是一种池化技术,重在资源重复利用,它就是一种多线程存在形式。在多线编程中,创建和销毁线程一项开销较的操作,所以线程池通过预先创建一组线程,并将任务分配给这些线程来提供高效的线程管理。线程池通常包括一个线程队列和一个任务队列。线程队列中保存着可供复用的线程,任务队列中保存着需要执行的任务。从上面我们可以看到,线程池有着显著的优点:降低资源消耗、提高响应速度、方便管理;可以复用线程、控制最搭并发数、管理线程等。原创 2023-07-25 23:31:04 · 201 阅读 · 0 评论 -
【JVM专题】JVM调优实战及常量池详解
你是否遇到过如下生产问题?告诉大家一个好消息,上面这些个问题,arthas都能实现,而且入门不难(精通难)接下来是卖家秀时间(别误会,Arthas目前是不收费的)dashboard:该命令可以查看整个进程的运行情况,线程、内存、GC、运行环境信息(集top -p转H、jstat -gc)thread:该命令有点像是jstack命令,输入thread [线程id]可以查看线程堆栈或者thread -n 3 -i [取样时间],相当于top -H -p ,列出 1000ms 内最忙的 3 个线程栈原创 2023-07-10 23:15:20 · 185 阅读 · 0 评论 -
【并发专题】深入理解AQS独占锁之ReentrantLock源码分析
方法介绍:使用CAS方式设置state状态。在这里并没有直接对【共享变量:state】字段做操作,而是通过【当前对象地址+偏移量】的方式索引state字段,再调用本地native方法CAS设置【共享变量:state】字段值为1。(PS:这里是第1次尝试获取锁)方法介绍:这个方法本质上是调用了后面要提到的两个和方法。也是一个用来获取锁的方法方法介绍:将当前线程封装成Node节点,添加到等待队列当中。原创 2023-07-21 18:04:51 · 302 阅读 · 0 评论 -
【并发专题】从0开始深入理解并发、线程与等待通知机制(下——Java线程间的通信和协作)
关键字: 可以修饰方法或者以同步块的形式来进行使用,它主要确保多个线程在同一个时刻,只能有一个线程处于方法或者同步块中,它保证了线程对变量访问的可见性和排他性,使多个线程访问同一个变量的结果正确,它又称为内置锁机制。// 线程t1,对count增加了10000次 Thread t1 = new Thread(() -> {i < 10000;i ++) {} System . out . println("t1计数完了,我这里的count=" + test . getCount());原创 2023-07-14 22:48:15 · 241 阅读 · 0 评论 -
【并发专题】深入理解并发可见性、有序性、原子性与JMM内存模型
Java内存模型(Java Memory Model简称JMM),它是一种抽象的概念,并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。我们知道,JVM运行Java程序的本质,是运行线程。原创 2023-07-30 23:32:07 · 205 阅读 · 0 评论 -
【并发专题】一节课学透面试必问并发安全问题
学习了线程安全相关知识学习了死锁产生的原因,及如何打破死锁认识了活锁学习了单例模式的线程安全特性。原创 2023-07-17 23:08:54 · 107 阅读 · 0 评论 -
【JVM专题】JVM调优工具详解及调优实战
线程死锁Java进程CPU使用率爆表等等问题。很多人遇到上述问题通常都是重启解决,然后事后再分析原因。但是我们都知道,这样处理甚至连治标都算不上,有时候重启也不一定有效。其实市面上也有很多可视化分析工具,但是从本质上来说,他们往往都是基于JDK自带的工具来实现的。他们就是:jps,jmap,jstack,jinfo,jstat命令java诊断与调优常用命令jmap、jstack、jstat使用实战》文章Java的jinfo命令使用详解》文章。原创 2023-07-10 16:01:51 · 359 阅读 · 0 评论 -
【并发专题】从0开始深入理解并发、线程与等待通知机制(中——认识JAVA里的线程)
一个 Java 程序从 main()方法开始执行,然后按照既定的代码逻辑执行,看似没有其他线程参与,但实际上 Java 程序天生就是多线程程序,因为执行 main()方法的是一个名称为 main 的线程。而一个 Java 程序的运行就算是没有用户自己开启的线程,实际也有有很多JVM 自行启动的线程,一般来说有:[6] Monitor Ctrl-Break //监控 Ctrl-Break 中断信号的[5] Attach Listener //内存 dump,线程 dump,类信息统计,获取系统属性等[原创 2023-07-12 23:40:51 · 208 阅读 · 0 评论 -
【并发专题】操作系统模型及三级缓存架构
学习了一些计算机系统模型学习了CPU三级缓存结构。原创 2023-07-30 21:58:31 · 1445 阅读 · 0 评论 -
【并发专题】手写MyReentantLock
事实上,上面的很多东西AQS已经帮忙实现了,所以想要复刻一个不是很难。Lock至于为什么需要实现这三个接口,看如下注释:总的来说:实现lock()是因为我们需要实现可重入的话,需要自己写逻辑;实现,则是因为提供一种机制,让任务尽量可能在进入阻塞队列之前,能获取到锁。因为,进了阻塞队列之后,这个代价是昂贵的;实现,则是因为这个方法是【释放锁】的核心方法。想要实现可重入的逻辑就得维护这个方法。原创 2023-08-01 15:38:41 · 148 阅读 · 0 评论 -
【Redis专题】Redis核心数据结构实战与高性能原理解析
比如数据集, 那么这个数据集的基数集为, 基数(不重复元素)为5。基数估计就是在误差可接受的范围内,快速计算基数复习了redis基本数据类型学习了Redis高性能原理,学习其IO模型。原创 2023-09-04 23:39:27 · 509 阅读 · 0 评论 -
【RocketMQ专题】快速实战及集群架构原理详解
MQ:即MessageQueue,消息队列。是在互联网中使用非常广泛的一系列服务中间件。Message:消息。消息是在不同进程之间传递的数据。这些进程可以部署在同一台机器上,也可以分布在不同机器上Queue:队列。队列原意是指一种具有FIFO(先进先出)特性的数据结构,是用来缓存数据的。对于消息中间件产品来说,能不能保证FIFO特性,尚值得考量。但是,所有消息队列都是需要具备存储消息,让消息排队的能力。广义上来说,只要能够实现消息跨进程传输以及队列数据缓存,就可以称之为消息队列。原创 2023-09-18 23:10:54 · 1115 阅读 · 0 评论