JAVA基础
文章平均质量分 73
泗水长流
克明俊德 格物致知
展开
-
win10下maven安装与配置
去下载最新版的安装包,然后解压到安装目录。原创 2023-12-05 22:20:16 · 462 阅读 · 0 评论 -
深入理解java的Proxy-静态代理和动态代理(附代码演示)
代理模式的描述,静态代理、动态代理。静态代理的优缺点,动态代理的两种方式:jdk动态代理和cglib动态代理,其中jdk动态代理采用反射包中Proxy和InvocationHander来生成,必须基于接口,cglib采用ASM码,采用拦截器方法。为什么jdk动态代理要基于几接口,因为从生成的$Proxy0代理类中可以看到,它继承了Proxy类,而java是单继承,所以必须要基于接口实现原创 2023-03-17 14:37:47 · 795 阅读 · 1 评论 -
Java IO:字节流、字符流、缓冲流分析及案例说明
java IO类库我一直觉得是一个比较难理解的类库,从我在小白时期学习的时候就觉得比较难。最近又重新学习思考了下,把自己的一些分析和思考分享一下。 IO在计算机中指Input、Output,即输入和输出,是计算机中应用程序与各种外部设备之间的数据传递,比如磁盘(文件)、网络(网络连接)、键盘等这些设备,其中这里Input和Output的是以计算机的角度来看待的。 从这个图上门看到,Java IO非常庞大,但是层次上还是比较清晰的,所有的其实都是围绕着两个大的主干(字节流和字符流)来扩展的。原创 2023-03-15 17:30:49 · 478 阅读 · 0 评论 -
LinkedList正确的遍历方式-附源码分析
LinkedList实现了List接口、Deque接口、Cloneable接口、Serializable接口,同时继承了AbstractSequentialList抽象类。通过实现Deque接口,使其具有了Queue队列类型的特点,通过实现Cloneable、Serializable接口,可以实现克隆和序列化。通过它的继承与实现类我们看到,与ArrayList相比,它并没有实现RandomAccess随机访问接口,在一定程度上说明了它不具备随机访问的特性。原创 2023-02-21 13:46:46 · 1810 阅读 · 0 评论 -
ArrayList删除元素时导致的java.util.ConcurrentModificationException错误的分析及源码解读
集合对于开发者来说都不陌生,可以说是我们日常开发中使用最频繁的对象之一,尤其是ArrayList,可是对于一些开发者并不真正了解它,只是使用习惯了,也就按照集合中基础的一些api使用了,但有时候却因为错误的使用集合导致代码的性能较差,甚至出现致命错误的代码。前几天在做代码review的时候,发现有同事提交了这么一段代码,它的意图就是从文章列表中删除标题不合法的的文章。这位同事还不是很服气,觉得这么写没多大问题,之前很多代码就是这么写的啊。基于此,我们从头分析一下。原创 2023-02-20 14:12:22 · 1080 阅读 · 0 评论 -
再谈Java的String字符串
String这个类是被final修饰,是不可变的。这个intern()方法,它的作用是如果字符串常量池已经包含一个等于此String对象的字符串,则返回字符串常量池中这个字符串的引用, 否则将当前String对象的引用地址(堆中)添加到字符串常量池中并返回。原创 2023-02-17 17:52:22 · 1070 阅读 · 0 评论 -
Java反射的基本知识
java反射原创 2023-02-07 11:58:36 · 600 阅读 · 0 评论 -
Java是静态语言还是动态语言?
Java是静态语言还是动态语言原创 2023-02-01 17:12:25 · 743 阅读 · 0 评论 -
聊一聊ThreadLocal的那些事
聊一聊ThreadLocal的那些事1.ThreadLocal的简介2.ThreadLocal的简单实例3.ThreadLocal的原理3.1 ThreadLocal.set()方法的原理3.2 ThreadLocalMap为什么使用ThreadLocal的弱引用作为key3.3 ThreadLocal.get()方法的原理3.4 ThreadLocal.remove()方法的原理4. ThreadLocal的使用场景5. ThreadLocal在使用时候的一些坑5.1 忘记使用remove,造成数据的错乱原创 2021-07-26 17:44:00 · 153 阅读 · 0 评论 -
Spring中事务嵌套:Transaction rolled back because it has been marked as rollback-only 异常处理
Springboot中事务嵌套:Transaction rolled back because it has been marked as rollback-only 异常处理1.实验基本介绍2.实验过程2.1 A方法加事务,B方法不加事务,同时A方法捕获B方法的异常,那么此时的结果:-------A和B都不回滚----2.2 A方法加事务,B方法不加事务,A方法捕获B方法的异常,并且在捕获异常时,将当前事务的回滚状态变成true,(TransactionAspectSupport.currentTran原创 2021-05-21 13:48:34 · 1134 阅读 · 2 评论 -
JAVA到底是值传递还是引用传递?结论:值传递
JAVA到底是值传递还是引用传递?结论:值传递1.形参和实参2.值传递与引用传递3.JAVA中的值传递4.小结Java到底是值传递还是引用传递呢?可能我们背过很多次,说java是值传递(当然,网上也有一些同学信誓旦旦的说java是引用传递,错误),但是当我突然再问你java为什么是值传递的?那可能就有点懵了。1.形参和实参JAVA是一种面向对象的编程语言,一个类中有属性和方法,我们这里重点说下方法的定义。package com.donkey;public class Person {原创 2021-04-25 23:18:00 · 648 阅读 · 1 评论 -
Future和改进版的ListenableFutrue
Future和改进版的ListenableFutrue一、Future二、ListenableFutrue这里只是通过两个非常简单的示例,说明一下这两个的区别。一、Future我们知道,通过Callable和Future接口创建的线程,可以获得返回值,同时也可以声明抛出异常。这就比Runnable提升了很多。我们先看下面的例子:/** * @author lvxincao * @Description Future的demo示例 * @Date 2021/1/26 17:08 * @Ver原创 2021-01-26 18:00:29 · 184 阅读 · 0 评论 -
JAVA创建线程的三种方式
JAVA创建线程的三种方式一、通过继承Thread类定义的线程类二、通过实现Runnable接口定义的线程类三、通过Callable和Future接口创建线程一、通过继承Thread类定义的线程类代码示例:/** * @author lvxinchun * @Description 通过继承Thread类定义的线程类 * @Date 2021/1/25 17:17 * @Version V1.0 */public class MyThread extends Thread { @O原创 2021-01-25 17:40:50 · 75 阅读 · 0 评论 -
lombok的简单使用
lombok的简单使用一.lombok简介二、lombok安装1.lombok的jar包安装2.IDE安装对lombok的支持插件3.常用API一.lombok简介Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.Never write another getter or equals method again, with on原创 2021-01-25 16:17:52 · 154 阅读 · 1 评论 -
windows和linux文件路径问题及在java中的使用
windows和linux文件路径问题及在java中的使用1.各系统路径表示方法2.各系统兼容表示方法3.建议1.各系统路径表示方法windowslinux/或者\或者\/2.各系统兼容表示方法使用/来表示,windows和linux都通用或者在java中使用如下:路径分隔符用:File.separator3.建议建议使用 /或者File.separator...原创 2021-01-21 11:48:47 · 696 阅读 · 0 评论 -
LocalDate、LocalTime、LocalDateTime的一些基本用法
LocalDate、LocalTime、LocalDateTime的一些基本用户1.LocalDate的基本用法2.LocalTime基本用法3.LocalDateTime基本用法4.格式化5.日期时间的简单计算6.LocalDate转化为Date7.Date转化为LocalDate8.LocalDateTime转化为Date9.Date转化为LocalDateTime10.LocalDateTime与数据库中datetime类型的使用1.LocalDate的基本用法@Test public v原创 2021-01-21 10:51:30 · 960 阅读 · 0 评论 -
短信验证码的几种生成方式(JAVA)
短信验证码的几种生成方式1.前言2.生成方式1.第一种方式2.第二种生成方式3.第三种方式3.三种方式的比较1.代码编写上比较2.数字去重3.性能1.前言在用户登录模块中,利用手机号+短信验证码的方式进行登录,是目前比较常见的一种登录方式,那么短信验证码怎么生成呢?这里所说的短信验证码,通畅是指6位的随机数字,那么下面我就说一下我们开发中用到过的几种验证码生成方式,仅供参考。2.生成方式1.第一种方式 /** * 生成?位的数字类型的短信验证码 * @param count原创 2021-01-03 22:14:46 · 7320 阅读 · 1 评论 -
我在开发中遇到的密码存储方式
我在开发中遇到的密码存储方式1.密码存储方式1.1 明文1.2 hash(明文)1.3 hash(明文 + 盐)2. 盐的几种实现2.1统一的盐2.2 用户不可变的特征信息的盐2.3随机盐(保存数据库)2.4随机盐(从密码取)3.小结最近有同事做了一个机遇用户名+密码的注册登录功能,看了它采用的密码存储的方式,我觉得不是很安全,所以我把我在开发中遇到的密码存储方式总结一下。1.密码存储方式1.1 明文在我开始学习编程的时候,密码存储直接使用明文方式存储,那时候还觉得这样存储比较方便,可以很方便的修改原创 2020-12-26 21:18:13 · 357 阅读 · 2 评论 -
从头学习java的注解
注解是从JDK1.5以后引入的,现在它早已经成为JAVA开发平台中非常重要的一部分。对于稍有经验的开发工程师来说,我们在平时工作中都大量运用的注解。那么我们不禁要提出这样的疑问:1.那么注解是什么?2.JAVA为什么要引入注解?3.注解的本质是什么?4.我们平时都有哪些常见的注解?5.我们如何编写自定义的注解?一、什么是注解Annontation,中文成为注解,它提供可一种安全的雷石玉注释的机制,用来将任何的信息或者元数据(metadata)与程序元素(类、方法、变量等)进行关联,为程序的元素原创 2020-12-16 10:20:58 · 229 阅读 · 1 评论 -
深入理解SPI机制
一、什么是SPISPI ,全称为 Service Provider Interface,是一种服务发现机制。它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类。这一机制为很多框架扩展提供了可能,比如在Dubbo、JDBC中都使用到了SPI机制。我们先通过一个很简单的例子来看下它是怎么用的。1、小栗子首先,我们需要定义一个接口,SPIServicepackage com.viewscenes.netsupervisor.spi;public转载 2020-12-14 16:17:55 · 142 阅读 · 0 评论 -
Tomcat的系统架构简介
Tomcat的系统架构简介1.Servlet2.Tomcat整体架构1.总括2.Tomcat的组件-连接器(Connector)1.IO模型及应用层协议2.连接器与Servlet容器的总体关系3.连接器的执行过程4.连接器的三大组件1.ProtocolHandler 组件1.ProtocolHandler 组件之Endpoint2.ProtocolHandler 组件之Processor2.Adapter 组件3.Tomcat的组件-Servlet容器1.Tomcat容器的层次结构1.Servlet在介原创 2020-09-29 17:20:47 · 202 阅读 · 0 评论 -
从源码角度来分析JAVA线程池的实现(核心属性和方法)
从源码角度来分析JAVA线程池的实现1.引言2. JAVA线程池源码解析1.ThreadPoolExecutor的核心属性和方法2.ThreadPoolExecutor#Worker内部类3.ThreadPoolExecutor#workers属性三级目录1.引言在上篇博客《浅谈JAVA线程池实现原理及与一般池化技术的区别》中,我介绍了java线程池的基本原理以及一下简单的用法,但感觉还是不很透彻,这篇博客我打算从源码角度来分析JAVA线程池的实现。2. JAVA线程池源码解析1.ThreadPoo原创 2020-09-28 18:19:45 · 188 阅读 · 0 评论 -
浅谈JAVA线程池实现原理及与一般池化技术的区别
浅谈JAVA线程池实现原理及与一般池化技术的区别1.为什么要使用线程池2.JAVA线程池与一般池化技术的本质区别3.JAVA线程池基本实现原理简介1.手写线程池2.JAVA中的线程池3.注意事项1.为什么要使用线程池我们经常使用线程池,那为什么要用线程池呢?它解决了什么问题呢?有的同学说,这还不简单,因为频繁手动创建线程会造成的开销大。但是这样的回答显示是太过于笼统了。JAVA创建一个对象,只需要在JVM堆上分配一块内存,但是要创建一个线程,则需要调用系统内核的API,然后操作系统为线程分配一系列的资原创 2020-09-27 16:03:27 · 449 阅读 · 0 评论