
java入门学习
文章平均质量分 91
水中加点糖
天下武功,无坚不破,唯快不破。https://github.com/puhaiyang
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JVM-GC(G1)实践—GC异常定位、参数调整、GC更换
自JDK9的正式发布,G1便成为了JDK9+的默认垃圾回收器,与之对应的提案也算是有了一个正式的完结。查阅javase官网,可对G1有一个大致的了解。简单来说,G1所管理的堆区域由一系列区域(region)组成,每一个region是G1对JVM进行内存管理的最小单元。需要注意的是,在G1中的年轻代和老年代是动态分配的,即:同一个region,在不同的时刻可能属于不同的分代,如时刻A是属于年轻代,时刻B又属于老年代了。原创 2025-03-25 20:15:00 · 1109 阅读 · 0 评论 -
使用Spring AI中的RAG技术,实现私有业务领域的大模型系统
RAG,即,检索增强生成。它是大模型和信息检索技术的结合技术。百度百科上的解释为:当模型需要生成文本或者回答问题时,它会先从一个庞大的文档集合中检索出相关的信息,然后利用这些检索到的信息来指导文本的生成,从而提高预测的质量和准确性。“让大模型为行业赋能”。RAG的工作流程可参考SpringAI中的这张图:即:在用户向大模型检索某个信息时,会携带关于所需要检索的背景知识,这样以让大模型可以参考已有知识来进行应答。使用SpringAI内置的RAG和功能可以快速实现一个针对私有业务领域。原创 2024-11-12 19:00:00 · 3785 阅读 · 1 评论 -
NGINX开启HTTP3,给web应用提个速
如rfc9114所述,http3主要基于QUIC协议实现,在具备高性能的同时又兼备了可靠性的特点,在大多数场景下可提高web应用的访问速率。关于http3和quic的介绍网上资料有很多,这里不再过多赘述。自nginx的1.25.0版本开始,nginx首次对http3进行了正式支持,这也为我们在WEB服务器上部署http3提供了极大的便利。本文以重实践角度出发,使用web服务器——NGINX,分享下如何在NGINX中开启HTTP3。在浏览器中通过ip或域名访问搭建的站点。原创 2024-09-08 12:16:43 · 3766 阅读 · 0 评论 -
聊聊二叉堆、红黑树、时间轮在定时任务中的应用
程序=算法+数据结构。不同的算法与数据结构有着它独特的美,在实际业务运用时也需要从具体的业务出发进行多维度分析,选择一个底层实现最适合的框架,以让您的业务场景运行起来速度又快占用空间又少,岂不美哉。原创 2024-06-07 23:02:37 · 1410 阅读 · 0 评论 -
使用bitmap实现可回收自增id
设计一个方法,每次调用返回一个自增id,同时需要满足以下要求。思路一:如果数据量非常小,直接使用一个集合存储已使用的id,使用循环和维护这个集合即可,但数据量大了,此方法返回数据的时间复杂度和占用的空间都是比较大的。思路二(推荐):建立一个(位图)bitmap,初始时bitmap的每一位都为0,0代表未使用,1代表已使用。每次请求获取id时从此bitmap的第0位开始返回一个未使用的index即可。以一个bitmap长度为65536的bitmap为例,示意图如下:初始时每一个bit位值都为0此时请求id返回原创 2023-11-09 22:47:14 · 400 阅读 · 0 评论 -
idea中analysis之analyze data flow功能体验
周末没啥事,就看了看idea的文档,其中发现了一个感觉挺不错的功能,可以用来分析代码的影响范围,在这里分享记录一下官方文档说明地址https://www.jetbrains.com/help/idea/analyzing-data-flow.html其中对于这个功能的描述为:When working with large codebases, it is sometimes difficult to figure out how data is processed and how the work原创 2022-02-28 20:00:17 · 3020 阅读 · 0 评论 -
使用antlr快速解析SQL
使用antlr快速解析SQL原创 2021-12-26 22:04:27 · 9251 阅读 · 3 评论 -
快速入门JAVA单元测试——mock
背景为了确保代码的质量,对编写的代码进行单元测试是非常有必要的。在JAVA项目中,一般的项目结构比较复杂、依赖众多。在微服务与spring boot大行其道的今天,单纯靠junit来进行单元测试一般很难完成对模块的单元测试。为了让JAVA项目中的单元测试更加灵活便于编写,各种mock框架应运而生,其中最为常用和经典的mock框架非mockito与powermock莫属。为了快速入门,本文将通过几个实例让大家快速了解mokito与powermock的使用方法。同时将对mokito与powermock原创 2021-08-28 14:26:29 · 5602 阅读 · 0 评论 -
常见设计模式对应类图汇总
设计模式对应类图汇总原创 2020-10-27 13:36:20 · 2539 阅读 · 0 评论 -
通过java的nio实例分析tcp握手与SYN泛洪攻击
好吧,对于工作这事我又冲动了.我总是这样一次次的犹豫,失去了一次次的机会.也总是一次次的冲动,让原来可以挽回的事情就这样被我搞砸了.我何时才能不再优柔寡断,成为那个刚毅果决爷们.一定要加油,改变!我还记得对于tcp三次握手和四次挥手的概念和主要过程还是大一时计算机网络课上学过,但是一直没有实际分析过。今天周末,闲来无事,决定来研究一下tcp握手和挥手的过程。实践环境物理机(windows),ip:192.168.85.1虚拟机(ubuntu),ip:192.168.85.136w原创 2020-09-23 21:04:19 · 879 阅读 · 1 评论 -
DelayQueue浮光掠影
现在是2020年8月,正式从大学毕业也已经第三个年头了,现在想想还是挺快。通过最近这段时间对公司项目的改造,在使用spring cloud、spring cloud kuberntes、kubernetes、istio、skywalking、helm这些技术与框架后,个人感觉对于上面这些技术虽然精通远远谈不上,但对于上面这些框架的基本使用和操作还是达到了的,也很感谢公司和领导能让我有机会去进行尝试。由于最近的项目有时忙有时不忙,所以在空余时间又看了关于分布式事务的常用解决方案和同事分享给我的《MySQL原创 2020-08-09 14:05:40 · 483 阅读 · 0 评论 -
JAVA行转列工具类
目录show me the code使用方法测试代码有时为了统计的需要,需要将数据进行行转列,在数据库中一般用CASE WHEN语句来解决,但无法生成生成列标题,如果遇到想动态生成列的情况,用CASE WHEN便不是那么好处理了正好最近我的一个个人小项目中遇到了这个问题,需要根据数据动态生成列标题,同时数据量不多,便想到自己写一个JAVA版通用的数据行转列的工具类show ...原创 2020-04-03 14:55:46 · 6445 阅读 · 10 评论 -
在docker中让java程序支持https双向认证
对于https稍微详细的一点的流程,在之前的文章《java实现http/https抓包拦截》中有过一些记录,这里不再详细说明。https双向认证按照我的个人理解,所谓https的双向认证简单点来说也就是:客户端(client,一般是浏览器)不仅要验证来处服务端(server)的请求是否合法,服务端(server)也还需要验证客户端(client)的合法性。一般对于安全性要求比较高的情况...原创 2020-02-25 21:55:02 · 2387 阅读 · 0 评论 -
java线程池ThreadPoolExecutor通过submit提交runnable的task时,为何不会抛出oom
show me the codeimport java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class ThreadLocalOomTest { public static void main(String[] args) { ExecutorSe...原创 2020-01-20 14:35:57 · 3525 阅读 · 1 评论 -
ReentrantLock是如何实现公平锁与非公平锁的?
Lock作为多线程编程中的一个基础,与Lock对应的关键字为synchronized,同时大家都知道lock与synchronized的一个明显区别是Lock中的锁可以是公平锁,synchronized只能为非公平锁。本文将通过分析jdk的源码来了解ReentrantLock中公平锁和非公平锁的实现原理,这本是一个老生常谈的话题,因为想了解其过程的话比较简单的,网上一搜出来也是一大把,但网上的其它...原创 2019-11-26 17:11:43 · 2876 阅读 · 2 评论 -
java实现http/https抓包拦截
最近在调试一个项目时常常需要对接口进行抓包查看,接口位于微信的公众号内,目前每次调试时都是用的 fiddler进行抓包查看的。但每次打开fiddler去查看对应的接口并找到对应的参数感觉还是有点复杂,正好今天是周末,打算自己来研究下它的原理并自己通过java来写一个(之所以知道java可以实现这个功能是因为著名的web安全检测工具 burpsuite就是用java写的)分析在使用f...原创 2019-11-11 16:25:57 · 13645 阅读 · 35 评论 -
java 实验报告第五个
第一个,一个按钮,点击它,出现第二个窗口代码如下:package javademo;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLab原创 2014-12-17 17:16:51 · 842 阅读 · 0 评论 -
控制台可运行JAR包快速开发--收录
有时由于项目需要,要将开发的一个程序打成JAR包运行,就像springBoot一样。运行时,直接使用命令java -jar命令运行即可。可运行JAR包打包但如果那个项目不是一个springboot的项目该怎么办呢?能实现的方式有很多,比如可以通过写一个sh脚本来实现今天在看presto源码的时候,看到presto-cli(项目地址:https://github.com/prestodb/prest...原创 2018-03-17 20:08:17 · 1181 阅读 · 0 评论 -
那些天,我用错的JAVA线程池用法
最近项目一个项目要结项了,但客户要求TPS能达到上千,而用我写的代码再怎么弄成只能达到30+的TPS,然后我又将代码中能缓存的都缓存了,能拆分的也都拆分了,拆分时用的线程池来实现的;其实现的代码主要为以前写的一篇博客中的实现方式来实现的。如下:多线程之futureTask(future,callable)实例,jdbc数据多线程查询(https://blog.youkuaiyun.com/puhaiyang/...原创 2018-05-31 22:44:22 · 1095 阅读 · 2 评论 -
Classloader与Thread.currentThread().getContextClassLoader()区别
匆匆九月,回到目前的创业公司工作已满二个多月了。回来后每天都有干不完的任务,对于每天的工作每天也很少有时间来进行总结与思考。仿佛让我想到了两年前刚来这家公司时的样子,虽然一直很忙有事干,但有一种瞎忙的感觉,每天看似很充实,但回过头来看其实是很空的,很有一种打酱油的感觉,这样长此以往下去个人感觉对于自己的职业生涯并不是什么好事。时间真的好快,明天又是国庆了,这个月还没有记录过任何文章,今天紧紧抓住2...原创 2018-09-30 22:47:52 · 26114 阅读 · 2 评论 -
java访问非经过信任证书https的方法
由于项目需要,需要调用第三方的API接口,为了简单方便与快速开发,便采用了httpClient来进行调用。<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <vers...原创 2018-11-14 16:29:22 · 3233 阅读 · 0 评论 -
在spring中通过Autowired注解巧妙实现策略模式
在最近的一个项目中由于项目需要,需要将代码进行扩展与兼容处理,我在最开始时是通过配置文件的方式去实现的,但代码写着写着就发现对于某些需要配置的地方比较少的话还好处理,但是对于需要灵活变动的地方太多的话写起来就太麻烦了,而且写起来也感觉比较容易出错,于是考虑到了是否可以用JAVA的策略模式去实现呢?带着这样的想法,便在网上搜了下spring框架与策略模式相关的信息,看了后发现还真有这样的文章,见...原创 2019-01-29 23:19:37 · 10074 阅读 · 3 评论 -
hashmap从入门到死锁,再到分段式锁
本文主要内容如下:在jdk1.7和jdk1.8下hashmap put和get的原理,和可能造成的问题concurrentHashMap的原理hashmap入门直接NEW出来就可以了,想要获取详细信息的这个直接看源码,源码上说的更仔细;主要有两个参数,一个是负载因子(需要扩容的比例),一个是初始化的大小。 /** * Constructs an empty...原创 2019-06-04 20:20:51 · 1138 阅读 · 0 评论 -
Maven项目打包为jar的几种方式
Maven项目打包为jar的几种方式这里收集整理下以往打包MAVEN项目为JAR包的各种方式直接打包,不打包依赖包直接打包,不打包依赖包,仅打包出项目中的代码到JAR包中。在POM中添加如下plugin即可,随后执行maven install &lt;plugin&gt; &lt;groupId&gt;org.apach...原创 2017-10-28 23:15:48 · 123651 阅读 · 9 评论 -
记一次java程序CPU占用过高问题排查
问题是这样的,将项目部署到服务器上后,发现应用程序的响应速度非常慢,于是开始进行了排查。TOP首先查看系统资源占用信息,TOP看一下发现正在运行的JAVA项目CPU占用率很高,百分之200左右了,那么问题一定出在这个程序中Ps -mp pid -o THREAD,tid,time再通过ps命令查看这个程序的线程信息,tid代码线程ID,time代表这个线程...原创 2017-11-29 12:57:19 · 70659 阅读 · 13 评论 -
对JAVA代码设计六大原则的理解
对JAVA代码设计六大原则的理解记得有一次去面试的时候,面试官问了我好几个问题,很尴尬,好几个都没能流利得回答上来。对其中有一个问题比较深刻,他当时是这样问我的:说下代码优化的6大原则,我当时一听,在脑子里快速想了下,很遗憾,不知道。今天想起了这个事,决定一定要搞定这个问题,一是了解这个问题,其次也是为下一次面试做准备 在网上搜了下后,知道了主要是以下六大原则:单一职责开闭原则里氏替换原则原创 2017-10-13 23:54:16 · 4437 阅读 · 0 评论 -
Socket编程基础之服务端与客户端简单通信
服务端代码如下:/** * */package com.baoxiu123.net;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStrea原创 2015-10-05 13:37:55 · 554 阅读 · 0 评论 -
java常用方法之遍历目录,删除指定文件
问题:之前的一个svn中的代码换到另一个svn目录中,但由于svn会将每个项目中的文件夹加上一个“.svn”的目录和一些信息文件,所以当需要更换svn地址时,会由于冲突问题,不能将之前的项目添加到新的svn中去。除非没有.svn这些文件于是有了如下的解决代码:java中的File中的delete方法只能删除空目录或单个文件,所以我的目的是删除整个非空的目录,故需递归遍历来删除impor原创 2015-09-27 20:10:02 · 3321 阅读 · 0 评论 -
eclipse 中安装svn插件
首先先将插件下下来,我下载的是eclipsesvnsite1.6.5.zip这个文件在百度上一搜,下载地址很多下来来之后解压,为了方便,我将它解压在I:\eclipse_svn目录下,截图如下:然后再进入eclipse的目录,在eclipse\dropins目录下创建subclipse.link在里面写上path=I:/eclipse_svn注意符号就OK.原创 2015-02-28 17:01:56 · 509 阅读 · 0 评论 -
java 连接mysql
连接前,需要下载连接的驱动我这里用的是mysql-connector-java-xxxx-bin.jar。并让它加入referenced Libraries.然后,我操作的源码如下:package sql.njtcstudent;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.S原创 2014-12-08 23:56:16 · 691 阅读 · 0 评论 -
java语言基础实验报告 第二个实验
package njtcstudent.com;import java.util.Scanner;public class Seond { public static void main(String[] args) { findMax();//给定一组字符,编程输出里面数值最大者 reverseOrder();//对数组中每一个元素赋值后,按逆序输出 maxToMinO原创 2014-09-30 22:41:21 · 2300 阅读 · 0 评论 -
JAVA上机课,课后四个小题
分别是package njtcstudent.com;import java.util.Scanner;public class test { public static void main(String[] args) { nine();//输入法10个数,输出最大值,最小值 ten();//鸡兔同笼问题 twelve();//输入一个整数,输出各位数字之和 }原创 2014-11-03 15:20:26 · 1011 阅读 · 0 评论 -
图形用户界面设计-基本控件 java实验报告第四个
第一个:编写程序原创 2014-10-03 00:07:16 · 4710 阅读 · 0 评论 -
Java面向对象程序设计 java实验报告第三个
RunYear.java 输出1900到2000年之间的所有润年原创 2014-10-01 13:16:10 · 2663 阅读 · 0 评论 -
java实验报告 第一个
import java.util.Scanner;public class TheFirstDemo { public static void main(String[] args) { Scanner myinput = new Scanner(System.in); System.out.print("请输入你想产生的行数:");原创 2014-09-17 23:14:29 · 1047 阅读 · 0 评论 -
采用基于MQTT的ActiveMQ实现消息推送
由于消息推送,个人感觉人难度,所以到网上找一个开源的系统用,感觉很不错。网上现在主要有两种对于消息推送的开源项目解决方案,一个是基于XMAPP的,还有一个就是基于MQTT的了。由于MQTT相对于XMAPP较轻量点,便试试它,感觉还挺不错的。1.下载服务端我这里,下载的是5.8.0版本的,其所有的ActiveMQ的下载列表地址为:点击打开链接5.8.0的下载地址为:http:原创 2016-05-25 13:46:37 · 27014 阅读 · 19 评论 -
工作流框架Activiti常用功能初探
Activiti项目是一项新的基于Apache许可的开源BPM平台,从基础开始构建,旨在提供支持新的BPMN 2.0标准,包括支持对象管理组(OMG),面对新技术的机遇,诸如互操作性和云架构,提供技术实现。BPMN是由BPMI(The Business Process Management Initiative)开发了一套标准叫业务流程建模符号(BPMN - Business Proces原创 2016-06-28 17:28:58 · 21792 阅读 · 3 评论 -
采用spring,maven,xfire/cxf 实现SOAP的WebService,并用C#作为客户端调用
之前不懂xfire是什么,在网上搜了半天才知道,xfire就是现在的cxf。 由于xfire在几年前就已停止更新了,所以这里采用cxf来实现webService.下文主要是针对soap的.1.服务端开发1.cxf相关maven配置<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org原创 2016-06-13 23:00:50 · 3053 阅读 · 0 评论 -
JAVA LIST分批处理
这是第N次在项目中遇到需要将数据分批处理的情况了。以前在用jdbcTemplate插入数据时,遇到过,当时花了好几分钟进行了分批处理,用LIST的SUBLIST方法进行了分批。此算法比较简单,但想起来,也得花个分把钟,在时间紧急的情况下,还是"拿来主义"比较方便点。现在把它贴出来,存在这,供以后用到时方便查询代码如下:import java.util.ArrayList;import原创 2017-10-13 15:18:10 · 8198 阅读 · 0 评论 -
自定义classloader实现JAVA热替换
这几天学习了下JVM的原理,在看一个视频教程,上面上一个这样的题目:1. 实现热替换。 运行一个程序HelloMain,他会循环调用另外一个类Worker.doit()方法。此时,对Worker.doit()方法做更新。要求 更新后,HelloMain可以发现新的版本。 可以选择替换class文件 ,也可以选择替换jar包。对于这个题目,让我想起了之前在公司的项原创 2017-10-06 15:37:29 · 16171 阅读 · 13 评论