JAVA
文章平均质量分 67
少年与荆棘
这个作者很懒,什么都没留下…
展开
-
Netty入门基础知识
当调用一次channel.read或者stream.read后,会切换至操作系统内核态来完成真正的数据读取。而读取有分为两个阶段:等待数据阶段、复制数据阶段。原创 2023-12-18 13:49:55 · 75 阅读 · 0 评论 -
微服务介绍以及远程调用
微服务是对传统单体服务进行业务拆分,拆分成多个独立的服务。微服务包括服务集群、服务网关、注册中心、配置中心、消息队列、分布式日志服务、系统监控和链路追踪、分布式缓存、分布式搜索、数据库、 Jenkins持续集成服务器以及Docker web自动打包容器,等经过良好架构设计的分布式架构方案。原创 2022-09-18 22:11:14 · 685 阅读 · 0 评论 -
Java sun.net.ftp.FtpClient判断ftp服务器文件夹是否存在
由于sun.net.ftp.FtpClient本来是没有判断文件夹是否存在的函数的,当文件上传到ftp服务器指定的文件夹的时候就需要对该文件夹做一层判断,判断这个文件夹是否存在。当我点进FtpClient源码的时候,我看到了这个这里它是通过或者指定文件夹来返回一个文件对象的迭代器,所以就可以通过这个迭代器来判断指定的文件夹是否存在具体代码:public static boolean isDirExist(FtpClient ftpClient,String dir){ .原创 2021-08-18 11:46:36 · 1821 阅读 · 0 评论 -
Java定时任务
简单的定时器设置计划任务,也就是在指定的时间开始执行某个任务TimerTask 封装任务Timer类 定时器定时器public class Demo1 { @SuppressWarnings("all") public static void main(String[] args) throws InterruptedException { MyTask task = new MyTask(); Timer timer = new Timer原创 2021-06-28 15:36:59 · 100 阅读 · 0 评论 -
Java并发协作控制
sychronized 同步限定只有一个线程才能进入关键区简单粗暴,性能损失有点大LockLock 也可以实现同步的效果实现更复杂的临界区结构tryLock方法可以预判锁是否空闲,同时tryLock包含了Lock允许分离读写操作,多个读,一个写性能更好ReentrantLock类,可重入的互斥锁ReentrantReadWriteLock类,可重入的读写锁lock和unlock函数案例/** 可重入锁 */private static final Reentra原创 2021-06-28 14:14:53 · 131 阅读 · 1 评论 -
Java并发数据结构
常用的数据结构是线程不安全的ArrayList , HashMap , HashSet非同步的多个线程同时读写,可能会抛出异常或者数据错误传统Vector , Hashtable等同步集合性能过差并发数据结构:数据添加和删除阻塞式集合:当集合为空或者满时,等待非阻塞式集合:当集合为空或者满时,不等待,返回null或者异常ListVector 同步安全,写多读少ArrayList 不安全,不同步Collections.synchronizedList (List list) ..原创 2021-06-27 16:23:49 · 115 阅读 · 0 评论 -
Java并发框架
从JDK 5开始提供Executor Frame Work (java.util.concurrent.*)分离任务的创建和执行者的创建线程重复利用(new线程的代价很大)共享线程的概念预设好的多个Thread,可以弹性增加多次执行很多很小的任务任务的创建和执行过程解耦合程序员无需关心线程池执行任务的过程主要类: ExecutorService,ThreadPoolExecutor,FutureExecutors.newCachedThreadPool / newFixedTh..原创 2021-06-26 18:10:01 · 510 阅读 · 1 评论 -
Java多线程
多进程当前的操作系统都是多任务的操作系统每个独立执行的任务就是一个进程操作系统将时间划分为多个时间片(时间很短)每个时间片内将CPU分配给某个任务,时间片结束,CPU将自动回收,在分配给另外一个任务。从外部看,所有任务是同时在执行的,但是在单核CPU上,任务是按照串行依次运行的,如果是多核,多个进程任务可以并行运行多进程优缺点优点:可以同时运行多个任务程序因IO堵塞,可以释放CPU,让CPU为其他程序服务当系统有多个CPU时,可以为多个程序服务缺点:太笨重,不好管理原创 2021-06-25 16:16:55 · 90 阅读 · 1 评论 -
Java处理PDF文件
Apache PDFBox主要功能:创建、提取文本,分割 / 合并 / 删除 …主要类:PDDocument PDF文档对象PDFTextStripper PDF文本对象PDFMergerUtility 合并工具写入PDF文件public static void main(String[] args) { createPDFFile();}@SuppressWarnings("all")public static void crea原创 2021-06-16 23:14:53 · 3029 阅读 · 1 评论 -
Java处理Excel文件
Apache POI (处理Excel)主要的类有:XSSFWorkbook 整个文档对象 (XLSX格式的)XSSFSheet 单个sheet对象XSSFRow 一行对象XSSFCell 一个单元格对象HSSFWorkbook 整个文档对象 (XLS格式的)HSSFSheet 单个sheet对象HSSFRow 一行对象HSSFCell原创 2021-06-16 21:55:32 · 663 阅读 · 0 评论 -
Java Word文档模板内容替换
Apache POI可处理docx,xlsx,pptx,visio等文件纯Java工具包,无需第三方依赖主要类XWPDFDocument 整个文档对象XWPFParagraph 段落XWPFRun 一个片段(字体样式相同的一段)XWPFPicture 图片XWPFTable 表格Maven导入POI<dependencies> <dependency>原创 2021-06-16 18:05:24 · 3238 阅读 · 2 评论 -
Java处理Word文档
Word文件处理常见功能docx解析,docx生成(完全生成,模板加部分生成)处理的第三方库Jacob,COM4J(Windos平台)POI、docx4j、OpenOffice / Libre Office SDK(免费)Apache POI可处理docx,xlsx,pptx,visio等文件纯Java工具包,无需第三方依赖主要类XWPDFDocument 整个文档对象XWPFParagraph 段落XWPFRun 一个片段(原创 2021-06-16 18:02:38 · 1697 阅读 · 0 评论 -
Java生成读取条形码及二维码
条形码将宽度不等的多个黑条和白条,按照一定的编码规则排序,用以表达一组信息的图像标识符通常代表一串数字 / 字母,每一位有特殊含义一般数据容量30个数字 / 字母二维码用某种特定几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息比一维条形码能存储更多信息,表示更多数据类型能够存储数字 / 字母 / 汉字 / 图片等信息可存储几百到几十KB字符ZxingZxing主要是Google出品的,用于识别一维码和二维码的第三方库主要类:BitMatr原创 2021-06-15 16:09:57 · 2041 阅读 · 1 评论 -
Java文件基本操作
File文件类java.io.File是文件和目录的重要类(JDK6及以前是唯一)目录也使用File类进行表示File类与操作系统无关,但会受到操作系统的权限限制常用方法createNewFile , delete , exists , getAbsolutePath , getName , getParent , getPathisDirectory , isFile , length , listFiles , mkdir , mkdirsFile不涉及到具体的文件内容、只会涉及属性原创 2021-06-14 23:59:59 · 904 阅读 · 0 评论 -
Java中的数据结构
数组数组是一个存放多个数据的容器数据是同一个类型的所有的数据是线性规则排列可通过位置索引来快速定位访问数据需明确容器长度// 数组初始化int[] a; // 没有new即没有申请内存空间int[] a = new int[2]; // 数组长度为2,且元素都为0int[] a = new int[]{ 1, 2, 3 }; // 逐个初始化int[] a = { 1, 2, 3 }; JCFJCF是一个容器框架,容器框架是为了表示和操作容器而规定的一种标准体系结构原创 2021-06-13 23:51:54 · 132 阅读 · 1 评论 -
Java的String、StringBuffer和StringBuilder
Java字符串相关类String类String类是一个不可变对象,加减操作性能较差常用方法方法作用charAt()返回指定索引的字符concat()返回两个字符串的拼接结果concat()判断该字符串是否包含指定字符串endsWith()判断该字符串是否以指定字符串结尾startsWith()判断该字符串是否以指定字符串开头replaceAll()replaceAll()与replace()都是替换全部指定字符串,不同的是repl原创 2021-06-12 17:42:33 · 58 阅读 · 0 评论 -
java double、float类型的比较
在java中,针对double、float类型的运算和比较都最好不要直接进行,可以依靠BigDecimal来进行一、比较大小转换成 long 再比较,(这是long是基本类型,而不是Long对象,对象比较不要用 ==)Double.doubleToLongBits(0.042421d) == Double.doubleToLongBits(0.2342401d) Double.doubleToLongBits(453.02d) > Double.doubleToLongBit.原创 2021-06-12 16:32:48 · 265 阅读 · 0 评论 -
Java流
Stream流Stream流是一个来自数据源的元素队列并具有聚合操作的Stream流包含了如下三个部分元素序列:一个流对外提供一个接口,可以访问到一串特定的数据。流本身是不存储元素的,但可以根据需要进行计算转化数据源:数据来源,如数据结构,数组,文件等聚合操作:流支持像SQL操作或者其他函数式语言的操作,如filter / map / reduce / find / match / sorted等public static void main(String[] args) {原创 2021-06-06 16:08:40 · 129 阅读 · 0 评论 -
Java的Lambda表达式
由于Java是面向对象的开发语言,所以很多功能函数都是通过传递基本类型的变量或者传递对象变量来进行数据交互的,从Java8开始支持Lambda表达式,可以在功能函数上传递方法或者代码块。Lambda表达式如果有返回值,返回值类型会在上下文推断出来,不需声明只在几个分支有返回值是语法错误// 参数,箭头,一个表达式(String first, String second) -> first.length()-second.length() // 参数,箭头,{多个语句}.原创 2021-06-05 22:33:04 · 264 阅读 · 1 评论 -
Java注解
Java修饰注解的注解(元注解)@Target 设置目标范围@Retention 设置保持性@Documented 文档@Inherited 注解继承@Repeatable 此注解可以重复修饰Java自带注解@SuppressWarning 压制警告,修饰变量 / 方法 / 构造函数 / 类等@SuppressWarning(“unchecked”) 忽略unchecked警告原创 2021-06-04 17:50:09 · 113 阅读 · 0 评论 -
Java的代理
代理模式代理模式,是23个经定模式的一种,又称委托模式为目标对象提供(包装)了一个代理,这个代理可以控制对目标对象的访问外界不用直接访问目标对象,而是访问代理对象,由代理对象再调用目标对象代理对象中可以添加监控和审查处理代理作用可以起到一个安全屏障的作用静态代理代理对象持有目标对象的句柄所有调用目标对象的方法,都调用代理对象的方法对每个方法,需要静态编码(理解简单,但代码繁琐)public class Demo1 { public static void m原创 2021-06-04 11:32:20 · 117 阅读 · 1 评论 -
Java编译器API
对.java文件即时编译对字符串即时编译监听在编译过程中产生的警告和错误在代码中运行编译器(并非:Runtime命令行调用javac命令)JavaXompiler类自Java1.6推出,位于javax.tools包中可用在程序文件中的Java编译器接口(代替javac.exe)在程序中编译Java文件,产生class文件run方法(继承自java.tools.Tools):比较简单。可以编译Java源文件,生成class文件,但不能指定输出路径,监控报错信息,调用后就在源码所在目..原创 2021-06-03 21:43:05 · 314 阅读 · 0 评论 -
Java的反射
反射的作用程序可以访问, 检测和修改它本身状态或行为的能力, 即自描述和自控制可以在运行时加载, 探知和使用编译期间完全未知的类反射在java.lang.reflect包中,在Java2就有,在Java5得到完善反射的功能在运行中分析类的能力在运行中查看和操作对象基于反射自由创建对象反射构建出无法直接访问的类set或get到无法访问的成员变量调用不可访问的方法实现通用的数组操作代码实现类似函数指针的功能Java中创建对象的方式java中常用的接口Compa原创 2021-06-03 20:18:30 · 100 阅读 · 2 评论 -
Java中的语法糖
for/for-each1、for-each从JDK5.0开始引入2、for-earch语法更简洁3、for-earch避免越界错误4、for可以删除元素,for-each不可以删除/替换元素5、for-each遍历的时候,是不知道当前元素的具体位置索引6、for-each只能正向遍历,不能反向遍历7、for-each不能同时遍历2个集合枚举类型枚举类型:变量的取值只在一个有限集合内,如性别、星期几等Java5推出enum类型enum关键字声明枚举类型,且都是Enum的子类(但原创 2021-06-03 15:27:57 · 78 阅读 · 1 评论 -
Java操作Redis
简介在Java应用中操作Redis。Jedis几乎涵盖了Redis的所有命令。操作Redis的命令在Jedis中以函数的形式呈现。Jedis的使用和Redis命令一样。使用Jedis使用Maven工程来使用Jedis。需要导入依赖<!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency> <groupId>redis.clients</原创 2021-01-29 22:58:16 · 73 阅读 · 0 评论 -
线程通信及线程池的使用
线程之间的通信由于java中的每个对象都有一把锁,所以在java中提供了几个函数来解决线程之间的通信问题函数名作用wait()表示线程一直在等待,直到其他线程通知,与sleep()不同,会释放锁wait(long timeout)指定等待的毫秒数notify()唤醒一个处于等待状态的线程notifyAll()唤醒同一个对象上所有调用wait()函数的线程,优先级高的线程优先调度注意:均是Object类的函数,都只能在同步函数或者同步代码块中使用,原创 2021-01-27 00:10:59 · 93 阅读 · 0 评论 -
多线程基础(含静态代理)
多线程中的概念程序程序是指令和数据的有序集合,其本身没有任何运行含义,是一个静态的概念进程进程是执行程序的一次执行过程,它是一个动态的概念。是系统志愿分配的单位线程通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程是CPU调度和执行的单位多线程的使用继承Thread来实现public class Thread01 extends Thread{ @Override public void run() { f原创 2021-01-26 15:25:35 · 68 阅读 · 0 评论 -
对锁的理解
CASCompare And Swap(Compare And Exchange)轻量级锁。因为经常配合环境操作,直到完成为止,所以泛指一类操作。比如你上厕所的时候发现厕所内有人,你一直在门外打转等待里面的人出来,你才能上厕所.cas底层实现__asm__ volatile (LOCK_IF_MP(%4) "cmpxchg1 %1,(%3)")MP是指Malti Processors(多核),当判断是多核的时候就在在前面添加LOCK指令,所以最终实现是:cmpxchg=cas改变量值lo原创 2021-01-25 21:07:07 · 398 阅读 · 0 评论 -
从底层理解并发编程
计算机组成1、当计算机要运行一个进程的时候,CPU会把磁盘中的需要执行的进程调到内存中,调到内存后再执行进程中找到对应的Main函数(即主线程),找到主线程后开始读指令,读到一条指令就执行一条指令2、进程是分配资源的基本单位,线程资源执行的基本单位。3、当线程得到的CPU时间段执行完后,需要保存对应的指令和数据就保存到cache(缓存)。当该线程获取到CPU时间的时候就开始从cache读取对应的指令和数据从底层理解线程调度原理由于执行切换是很耗费资源的事情,所以并不是线程越多越好原创 2021-01-25 11:33:20 · 101 阅读 · 1 评论 -
对DCL(双重检查锁 Double Check Lock)及Volatile原理的理解
Java创建对象过程class T{ int m=8;}T t=new T();编译成汇编指令:new #2 <T>dupinvokespecial #3 <T.<init>>astore_1return当执行到new的时候,程序会申请一块内存,由于成员变量中有一个int的m所以在该内存中有一个变量m而且初始化为0。当执行到invokespecial的时候会调用构造函数把内存中的m的值该为8,执行到astore_1的时候会把变量t和new原创 2021-01-24 15:49:17 · 571 阅读 · 0 评论 -
Java并发编程特性
并发特性可见性当多个线程同时具有一个数值的访问权限时其中一个线程修改了其数值,其他线程要及时可见有序性由于程序不一定会按顺序执行,所以要求并发编程中需要有序的执行业逻辑代码原子性并发编程中要保证每个线程执行完指定的逻辑代码后才能给第二个线程继续执行指定的逻辑代码案例1public class T01 { private static int x=0,y=0; private static int a=0,b=0; public static void ma原创 2021-01-21 13:46:43 · 167 阅读 · 4 评论 -
Java线程池理解
线程线程是调度CPU的最小单位,也叫轻量级进程LWP(Light Weight Process)线程模型线程模型分为两种。一种是用户级线程(ULT),一种是内核级线程(KLT)。用户级线程(ULT):用户程序实现,不依赖操作系统核心,应用提供、同步、调度和管理线程池的函数来控制用户线程。不需要用户态\内核态切换,速度快。内核对ULT无感知,线程堵塞则进程(包含它的所有线程)堵塞内核级线程(KLT):系统内核管理线程(KLT),内核保存线程的状态和上下文信息,线程堵塞不会引起进程堵塞。在多处理原创 2021-01-17 14:39:21 · 94 阅读 · 0 评论 -
Java网络编程(URL)
URLurl称为统一资源定位符,用于定位互联网上的某个资源案例public class UrlDown { public static void main(String[] args) throws IOException { /**下载的网络地址 * */ URL url=new URL("https://www.runoob.com/wp-content/uploads/2013/10/bs.png"); /**连接到这原创 2021-01-16 22:29:27 · 63 阅读 · 0 评论 -
Java网络编程(UDP协议)
由于UDP协议没有明确的客户端和服务端,所以UDP是没有建立连接的。案例这里为了区分接收方和发送方所以用Client和Server来区分发送方:public class UDPClient { public static void main(String[] args){ try { /**创建一个socket * */ DatagramSocket socket=new DatagramSoc.原创 2021-01-16 22:01:34 · 71 阅读 · 0 评论 -
Tomcat基础原理
使用TCP来实现Tomcat的基础原理本质和使用TCP来上传文件类似,只不过客户端是浏览器,当浏览器访问这个服务器的时候,在服务器端回写一个html文件到浏览器public class TCPServer { public static void main(String[] args) { /**创建服务器绑定指定端口 * */ ServerSocket server= null; try { serve.原创 2021-01-16 10:39:00 · 137 阅读 · 2 评论 -
Java在文件上传中使用多线程
服务器:public class TCPServer { public static void main(String[] args) { ServerSocket server= null; try { server = new ServerSocket(8888); } catch (IOException e) { e.printStackTrace(); } /*原创 2021-01-15 22:59:10 · 443 阅读 · 0 评论 -
Java网络通信(含文件上传案例)
java中的Socket类Socket类:该类实现客户端套接字,套接字指的是两台设备之间的通信端点在java中,提供了两个类用于实现TCP通信程序:客户端:java.net.Socket类表示,创建Socket对象,向服务器端发出连接请求,服务器端响应请求,两者建立连接开始通信服务器端:java.net.ServerSocket类表示,创建ServerSocket对象,相当于开启了一个服务,并等待客户端的连接构造函数public Socket(String host,int port):原创 2021-01-15 22:32:28 · 135 阅读 · 0 评论 -
SpringBoot集成Thymeleaf模板
Thymeleaf是一个流行的模板引擎,该模板引擎采用java语言开发;Thymeleaf模板既能用于web环境下,也能用于非web环境下,在非web环境下,它能直接显示模板上的静态数据,在web环境下,它能像JSP一样从后台接收数据并替换掉模板;Thymeleaf模板它是基于HTML的,以HTML标签为载体,Thymeleaf要寄托在HTML的标签下实现对数据的展示在Controller层:@Controllerpublic class ThymeleafController { .原创 2020-11-11 16:39:03 · 114 阅读 · 0 评论 -
SpringBoot集成SpringSession
在不同端口的项目中共享session在项目中需要导入的依赖 <!--配置Spring Session起步依赖--> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-core</artifactId> <versi原创 2020-11-07 23:52:35 · 344 阅读 · 0 评论 -
在SpringBoot使用Filter
方式一:MyFilter:@WebFilter(urlPatterns = "/*")public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest,.原创 2020-11-07 23:48:20 · 229 阅读 · 0 评论