Java基础
文章平均质量分 57
java基础base学习历程记录
tanxinji
站在巨人的肩膀上
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ReentrantLock源码中公平锁和非公平锁的差异比较
ReentrantLock的公平锁与非公平锁核心差异在于获取锁的顺序策略。公平锁(FairSync)严格遵循先到先得原则,锁释放时优先唤醒队列中队首线程,新线程直接排队;非公平锁(NonfairSync)允许"插队",新线程可尝试直接CAS抢锁(提供两次插队机会),可能导致队列线程饥饿。关键代码差异体现在lock()入口和tryAcquire逻辑:非公平锁在lock()时立即尝试CAS抢锁,而公平锁直接进入队列;tryAcquire时非公平锁不检查队列直接CAS,公平锁需先验证队列原创 2025-11-18 14:39:54 · 362 阅读 · 0 评论 -
可重入锁ReentrantLock源码深度解析
ReentrantLock是可重入锁,允许同一线程多次获取同一把锁。其核心基于AQS框架,通过state字段记录锁状态和重入次数。获取锁时,非公平锁会先尝试直接CAS抢锁,失败才进入队列;公平锁则会检查队列,确保先来先服务。线程被包装为Node加入CLH队列尾部,通过自旋和阻塞等待唤醒。解锁时释放state并唤醒后继节点。这种设计既保证了线程安全,又支持了锁的可重入特性。原创 2025-11-18 12:11:43 · 1054 阅读 · 0 评论 -
Netty编写Echo服务器
本文介绍了使用Netty框架实现Echo服务器的全过程。服务器端采用主从Reactor线程模型,创建bossGroup(负责连接)和workerGroup(处理I/O)两个事件循环组,通过ServerBootstrap配置NIO通道、编解码器(StringDecoder/StringEncoder)和业务处理器(EchoServerHandler)。客户端使用Bootstrap配置类似组件(EchoClientHandler)。服务端收到消息后会原样返回,展示了Netty的基本网络通信流程。原创 2025-11-16 23:10:36 · 710 阅读 · 0 评论 -
RabbitMQ四种交换器类型详解及示例
RabbitMQ提供四种交换机类型,适用于不同消息路由场景: Direct交换机:精确匹配路由键,适用于点对点任务分发和RPC调用 Fanout交换机:广播模式,忽略路由键,适用于发布订阅场景 Topic交换机:支持通配符模式匹配,适合基于多维度属性的动态路由 Headers交换机:根据消息头属性匹配,用于复杂路由条件(较少使用)原创 2025-11-16 17:30:19 · 1123 阅读 · 0 评论 -
三级缓存为什么解决不了构造器注入的循环依赖?
Spring循环依赖处理机制分析:通过对比Setter注入和构造器注入的流程差异,揭示Spring处理循环依赖的核心机制。Setter注入时,Spring通过三级缓存(提前暴露对象工厂)成功解决循环依赖;而构造器注入由于需要在实例化阶段就完成依赖注入,导致无法提前暴露引用,最终抛出BeanCurrentlyInCreationException。源码分析表明,只有在实例化完成后才会将对象工厂加入三级缓存,这是构造器注入无法解决循环依赖的关键原因。实际测试也验证了这一结论。原创 2025-10-22 16:03:28 · 397 阅读 · 0 评论 -
Java Kaptcha生成验证码
Java Kaptcha生成验证码。原创 2025-10-19 11:44:40 · 266 阅读 · 0 评论 -
Java实现霍夫曼编码对文件解压缩
霍夫曼压缩算法实现包括压缩和解压两个流程。压缩过程通过统计字节频率构建霍夫曼树,生成编码表,将原始数据转换为编码后的二进制位流。解压过程则利用霍夫曼树逆向还原原始数据。核心数据结构是霍夫曼树节点类,包含字节数据、频率和左右子节点。实现细节包括:1) 频率统计和树构建;2) 递归生成编码;3) 位流操作类处理二进制读写;4) 压缩文件头存储频率表和实际位数。该算法通过变长编码有效减少文件体积,适合重复数据较多的场景。原创 2025-09-28 18:52:20 · 295 阅读 · 0 评论 -
Web server failed to start. Port 8888 was already in use.
① 在 Unix/Linux/Mac 上,使用。②在 Windows 上,使用。替换为占用端口的进程ID。替换为占用端口的进程ID。强制终止占用端口的进程。记下显示的进程ID。原创 2023-12-08 07:00:00 · 980 阅读 · 0 评论 -
BeanUtils.copyProperties将一个 Java 对象的属性值复制到另一个对象
在进行属性拷贝时,如果属性类型不匹配,可以通过注册自定义的转换器来进行类型转换,或者使用其他工具库来实现更复杂的属性拷贝逻辑。是 Apache Commons BeanUtils 库提供的一个工具类,用于简化在 Java 对象之间进行属性拷贝、属性查找和属性赋值的操作。该方法会将源对象中的属性值复制到目标对象中,属性名和类型必须在目标对象中存在。是 Apache Commons BeanUtils 库中的一个方法,用于将一个 Java 对象的属性值复制到另一个对象中。在上面的示例中,创建了一个。原创 2023-12-05 17:04:21 · 1508 阅读 · 0 评论 -
mybatis中<association> 和 <collection>
association用于配置一对一的关联关系,表示两个对象之间的关系是一对一的。例如,一个订单对象关联一个用户对象。collection用于配置一对多的关联关系,表示一个对象关联多个对象。例如,一个部门对象关联多个员工对象。原创 2023-12-01 17:05:09 · 4874 阅读 · 0 评论 -
springboot跨域问题
浏览器实施了同源策略(Same-Origin Policy),这是一种安全机制,限制了来自不同源的页面之间的交互。域名不同:当浏览器中的 JavaScript 代码发起请求时,请求的目标地址与当前页面的域名不同,就会触发跨域问题。使用 Spring Security 进行跨域配置:如果你的应用程序使用了 Spring Security,你可以在配置类中添加跨域配置。端口不同:即使两个页面的域名相同,但如果它们使用了不同的端口,也会被视为跨域请求。),而另一个页面使用的是普通的 HTTP 协议(如。原创 2023-11-30 16:59:11 · 1097 阅读 · 0 评论 -
java stream流map和flatmap的区别
flatMap()操作将每个人员的技能列表转换为一个流,并将多个技能流合并为一个扁平化的流。结果列表为[“Java”, “Python”, “SQL”, “JavaScript”, “HTML”, “CSS”, “C++”, “C#”, “Ruby”]。在这个例子中,map()操作将每个字符串映射为它们的长度,生成了一个新的流。适用于将一个元素展开为多个元素的场景,例如将列表展开为单独的元素,或者将字符串拆分为单词。假设有一个包含多个单词的字符串列表,获取每个单词的长度,并生成一个包含所有单词长度的列表。原创 2023-11-28 20:00:00 · 1718 阅读 · 0 评论 -
java stream流的执行流程
Stream流是Java 8引入的一种用于处理集合数据的函数式编程概念。它提供了一种流式处理数据的方式,可以进行过滤、映射、排序、聚合等操作。在执行终端操作时,流会根据操作链依次处理每个元素。它会按需处理数据,避免不必要的计算。中间操作:一旦有了流,可以对其进行中间操作。中间操作是对数据进行转换、过滤、映射等处理,但并不会立即执行。创建流:首先,需要有一个数据源,可以是集合、数组、I/O通道等。如果需要对同一数据源进行多个操作链的处理,可以通过创建新的流来实现。这些操作可以连接在一起,形成一个操作链。原创 2023-11-28 07:00:00 · 1045 阅读 · 0 评论 -
java数据转换为stream的方法
要将数据转换为Java中的Stream,有几种常见的方法,具体取决于数据类型和数据来源。原创 2023-11-27 14:22:44 · 1294 阅读 · 0 评论 -
java stream流常用方法
【代码】java stream流常用方法。原创 2023-11-25 16:16:18 · 948 阅读 · 0 评论 -
Java给图片重新设置高度和宽度,并且整体大小不变形自适应
需要调整图片的高度和宽度,又不影响图片的整体效果,就是图片的缩小或者扩大。原创 2023-11-02 23:15:00 · 2418 阅读 · 0 评论 -
Java poi无法导出excel报错Sheet name cannot be blank, greater than 31 chars, or contain any of /\*?[]
使用java poi导出excel表报错。修改excel表名不要带有/ \ *?就可以导出excel了。原创 2023-10-30 11:00:53 · 605 阅读 · 0 评论 -
安装tomcat后可能出现的问题
1. 没有开tomcat服务在浏览器的地址栏中输入localhost:8080 回车会出现如下界面 tomcat没有开服务。在cmd中输入startup.bat。不要关闭开启的tomcat窗口。 2.路径错误 在浏览器中输入url显示404,可能是输入的路径不存在或输入错误路径。3. Java JDK环境变量未设置好 在cmd输入startup....原创 2022-01-02 11:09:32 · 1367 阅读 · 1 评论 -
Idea2020 创建web项目
目录一、创建一个空项目二、创建一个web模块三、模块配置四、常用的软件设置一、创建一个空项目进入idea界面,点击File -》 New -> Project选择Project SDK内 的jdk之后,点击next 点击Next 给项目起名和设置路径之后,点击Finish。 一个名为Test的空项目就建好了!二、创建一个web模块 一个项目就可以创建多个模块的! ...原创 2022-01-03 02:00:00 · 13008 阅读 · 1 评论 -
Maven下载和配置
maven可以用来自动构建项目一、下载Maven 从官网下载压缩包 官网链接 进入官网链接下滑点击如下压缩包下载 下载的是压缩包,需要解压。解压完之后可以将该文件复制到C盘根目录下。如下图所示。 并且复制当前路径 C:\apache-maven-3.8.4二、配置环境变量 跟配置jdk的环境变量的地方一样。1.在电脑中进入修改环境变量的位置 在桌面点击此电脑右键点击属性 下滑选择高级系统设置 进入系统属性后,点击环境变量 进入如下界面点击系统变量下的新建 点击新建后输原创 2022-02-10 16:34:01 · 1375 阅读 · 0 评论 -
解决IDEA启动tomcat控制台乱码
点击Help 选择-> Edit Custom VM Options 在弹出的idea64.exe.vmoptions文件中,加入-Dfile.encoding=utf-8 重启IDEA,在次运行tomcat就不会乱码了原创 2022-03-28 20:39:05 · 1044 阅读 · 0 评论 -
linux目录跳转指令
1、查看当前目录pwd2、跳转至 绝对路径会从根目录/ 开始跳转。cd /目录名3、直接跳转至根目录下cd ~4、跳转至当前目录下的某一个文件 cd 目录名5、跳转至上一目录跳转到当前目录的父目录去cd .. ...原创 2022-01-07 15:12:32 · 10106 阅读 · 0 评论 -
postman软件下载和基本使用
postman软件可以方便用来测试通过servlet返回的数据是否正确。 1.postman下载 前往官网下载Download Postman | Get Started for FreeTry Postman for free! Join 17 million developers who rely on Postman, the collaboration platform for API development. Create better ...原创 2022-01-07 13:27:34 · 12085 阅读 · 0 评论 -
Idea2020创建一个Servlet
前言:在创建一个web项目的基础上,创建一个ServletIdea2020 创建web项目_txj的博客-CSDN博客目录一、创建一个空项目二、创建一个web模块三、模块配置四、常用的软件设置一、创建一个空项目进入idea界面,点击File -》 New -> Project选择Project SDK内 的jdk之后,点击next 点击Next 给项目起名和设置路径之后,点击Finish。 一个名为Test的空项目就建好了!二、创建一个web模块 一个项目就可以创建多个模块的! ......原创 2022-01-06 12:48:37 · 2189 阅读 · 2 评论 -
HTTP请求响应报文
HTTP报文就是通过http协议浏览器向服务器请求和响应的数据块。分为请求报文和响应报文。 例如:客户端发送GET /index.html HTTP/1.0Host:www.baidu.com服务器响应HTTP/1.0 200 OKContent-type: text/html Content-length:1902 <html> </html>一、http报文的组成成分 请求报文和响应报文都是由三个部分组成,分别是起始行,首部,数据主体 每一行原创 2022-02-04 16:56:06 · 2296 阅读 · 0 评论 -
Tomcat 8.5在window 10下的安装流程
在window10的环境下安装Tomcat 8.5目录一、前往官网下载压缩包二、配置环境变量三、检测是否安装成功一、前往官网下载压缩包 点击链接: https://tomcat.apache.org/download-80.cgi 下滑到最下面 window10选择 下述箭头的版本下载。 软件解压之后,进入该文件。进入到出现如下界面的时候,复制该路径。如:我当前的路径是D:\sof...原创 2021-12-25 20:09:49 · 1848 阅读 · 3 评论 -
linux定时定点指令
1.定时在某时执行某指令2.定点 在某点执行某指令原创 2022-01-18 21:01:08 · 723 阅读 · 1 评论 -
tomcat修改访问端口号和添加管理用户
一、修改访问端口号 在安装tomcat路径下的conf找到server.xml。使用记事本打开。 如下图出现的port = "8080" ; 在" "内修改你要访问的端口号二、添加管理用户 当我们登录成功localhost:8080时,发现右边的那个按钮登录不了。 例如,点击第三个按钮出现如下界面: 我们可以任意输入用户名和密码他就会出现如下报错 ...原创 2022-01-02 10:59:19 · 910 阅读 · 0 评论 -
Ajax入门
ajax全名为Asynchronous Javascript And XML 异步js和xml。可以在不重新加载页面的前提下,向服务器发送和接收数据。使用方式1、创建XMLHttpRequest对象var xmlHttp;if(window.XMLHttpRequest){ xmlHttp = new XMLHttpRequest(); //网景浏览器创建的方式}else if(window.ActiveXObject){ xmlHttp = new ActiveXObjec原创 2022-01-28 23:42:20 · 1641 阅读 · 0 评论 -
修改本地映射地址
在文件栏输入C:\Windows\System32\drivers\etc 点击回车 用记事本(notepad++)打开hosts 添加映射地址: 127.0.0.1 hello 。格式为地址 映射名 启动tomcat测试: 因为上述添加了 127.0.0.1 hello,我们可以通过hello:8080/index.html来访问了...原创 2022-04-03 19:45:22 · 2341 阅读 · 0 评论 -
IDEA创建Maven项目
一、设置IDEA默认Maven配置。 进入IDEA设置界面File -> Settings 在左上角搜索 Maven 在点击Build Tools下的Maven 设置成自己电脑下载Maven的路径。参考 Maven下载和配置 C:/apache-maven-3.8.4 C:\apache-maven-3.8.4\conf\settings.xml 你也可以点击如下,自己去寻找安装Maven的路径 settings.xml设置对的话,Local repository会自动同原创 2022-02-12 15:10:08 · 12007 阅读 · 2 评论 -
Java SWT 表格Table如何动态显示信息
让Table显示信息用到的是TableItem类。创建一个TableItem类对象,通过调用该对象的setText( new String[ ] )方法可以显示一行数据,循环调用则可以显示多条不同的数据。一、步骤: 1. 创建Table类 。最好将Table类设置为全局变量。并且设置该表格有多少列。在Table对象的基础上创建一列的类为TableColumn。可以创建多列。Table table = new Table(shell, SWT.BORDER | SWT.FULL_SELECTION);原创 2022-03-08 17:05:23 · 1503 阅读 · 0 评论 -
Java SWT 下拉框Combo动态展示信息和事件监听
在Java SWT中 Combo类可以创建一个下拉框。一、基本使用 需要导包import org.eclipse.swt.widgets.Combo ,然后使用Combo类创建该对象。Combo combo = new Combo(shell, SWT.NONE); 示例:Shell shell = new Shell();shell.setSize(583, 466);shell.setText("SWT Application");Combo combo = new Combo(sh原创 2022-03-09 21:03:25 · 3615 阅读 · 0 评论 -
Java SWT 表格Table实时刷新数据
当对表格展示的数据进行删除和增加的时候,想实时进行表格数据更新显示。用到的方法是,首先将表格数据全部删掉,然后在读取数据库最新的数据显示到表格中。 可以将显示表格信息的代码封装成一个方法,当对当前表格进行插入和删除数据之后,调用之前封装的方法即可。 清空表格。Table table.removeAll();...原创 2022-03-13 10:26:38 · 4536 阅读 · 0 评论 -
解决Java SWT报错:java.lang.IllegalArgumentException: Argument cannot be null
建了一个Java Swt项目,动态展示table信息时出现如下错误: 原项目: 解决: 后来发现是因为 table还有创建对象,就通过TableItem使用了Table对象。先创建好Table对象之后在使用TableItem就好了。 调换顺序即可:...原创 2022-03-07 19:57:58 · 3292 阅读 · 1 评论 -
在eclipse中创建SWT可视化
在较新的eclipse软件中自带WindowBuilder,可以创建SWT项目可视化,通过窗口拖移来添加SWT组件。 一、创建一个SWT项目 点击左上角的File - > New -> Other... 进入后搜索SWT ,选中在WindowBuilder下的SWT Designer 下的SWT/JFace Java Project 点击next 只需要在Project name中...原创 2021-12-27 22:53:04 · 3674 阅读 · 1 评论 -
Java SWT封装Table显示数据
一个表格就类似于一张二维表。第一行为关系模型,就是每一列的列名。从第二行开始就是表的数据,简称元组。下面实现对其Table的封装。首先显示一个窗口。创建一个Table。将在showTableInfos()方法对Table表格进行封装。package JavaSWT表格的显示数据;import org.eclipse.swt.widgets.Display;import org.eclipse.swt.widgets.Shell;impo...原创 2021-12-10 10:52:14 · 1121 阅读 · 1 评论 -
Java从Oracle中插入和读取图片
下面以SWT效果来展示。 1.插入图片。 在java代码中读取图片存入字节数组,然后将其存放在数组中。原创 2021-12-27 21:20:56 · 1643 阅读 · 2 评论 -
Java中CyclicBarrier类
创建CyclicBarrier对象时需要传入一个int数值parties。某个线程调用await()方法会阻塞程序,需要parties个线程调用了await()方法才会全部解除阻塞。 主程序也是一个线程。 如: CyclicBarrier barrier = new CyclicBarrier(3); //需要3个线程调用await()方法才会全部解除阻塞。 barrier.await(); // 阻塞程序 代码示例:为了能够很明显的体现出效果,创建CyclicB原创 2022-05-01 07:00:00 · 324 阅读 · 1 评论 -
Java中的信号量Semaphore
信号量机制可以用来保证线程互斥 创建Semaphore对象: 传入一个整形参数,类似于公共资源 常用方法: acquire();获取一个公共资源,公共资源-1,如果公共资源原创 2022-06-20 19:24:08 · 577 阅读 · 1 评论
分享