自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

TMesh的博客

记录自己遇到的问题、自己学习的记录、自己感兴趣的技术记录

  • 博客(101)
  • 收藏
  • 关注

原创 Java 多任务异步导出数据到excel

这是我在工作种遇到实际问题,百万数据量导出,由于长时间占据资源,导致系统无法响应其他请求。最后采用的任务队列的方式,利用线程池,将需要导出的任务加入线程池的等待队列种,并提供任务详情页面提供对应功能,采用将线程转为阻塞态的方式来让其他请求能抢到资源。完整代码地址:gitee:https://gitee.com/tmesh/export-taskgithub:https://github.com/ThousandMeshZ/export-task/tree/master遇到的一个百万数据量导出资源瓶颈问题。

2025-02-23 22:50:40 985

原创 Java Stream 流

Stream(流)是 Java 8 引入的一个新的抽象概念,它代表着一种处理数据的序列。简单来说,Stream 是一系列元素的集合,这些元素可以是集合、数组、I/O 资源或者其他数据源。Stream API 提供了丰富的操作方法,可以对 Stream 中的元素进行各种转换、过滤、映射、聚合等操作,从而实现对数据的处理和操作。Stream API 的设计目标是提供一种高效、可扩展和易于使用的方式来处理大量的数据。

2025-02-04 12:39:47 934

原创 SpringAOP

AOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP 是 OOP 的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。作用:在程序运行期间,在不修改源码的情况下对方法进行功能增强。

2025-01-30 21:36:22 861

原创 Netty

同步阻塞:丢衣服->等洗衣机洗完->再去晾衣服同步非阻塞:丢衣服->去做其他事情,定时去看衣服是否洗完->洗完后自己去晾衣服异步非阻塞:丢衣服-> 去做其他事情不管了,衣服洗好会自动晾好,并且通知你晾好了五种 I/O 模型:阻塞 IO、非阻塞 IO、多路复用 IO、信号驱动 IO、异步 IO,前 4 种是同步 IO,在内核数据 copy 到用户空间时是阻塞的核心:可以同时处理多个 connection,调用系统 select 和 recvfrom函数每一个socket 设置为 non￾blocking 阻

2025-01-30 21:25:44 995

原创 JVM参数

为了解决暂停问题和promotion failed问题,最后我设置-XX:SurvivorRatio=1 ,并把MaxTenuringThreshold去掉,这样即没有暂停又不会有promotoin failed,而且更重要的是,年老代和永久代上升非常慢(因为好多对象到不了年老代就被回收了),所以CMS执行频率非常低,好几个小时才执行一次,这样,服务器都不用重启了。用-XX作为前缀的参数列表在jvm中可能是不健壮的,SUN也不推荐使用,后续可能会在没有通知的情况下就直接取消了;

2025-01-30 21:10:48 872 1

原创 Java Set接口

是Set接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序不一致)。底层的实现其实是一个支持,由于我们暂时还未学习,先做了解。HashSet是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存取和查找性能。hashCode与equals方法。//创建 Set集合//添加元素//遍历cbaabcbactips:根据结果我们发现字符串"cba"只存储了一个,也就是说重复的元素set集合不存储。

2025-01-30 20:58:16 349

原创 Java List的子类

集合数据存储的结构是数组结构。元素增删慢,查找快,由于日常开发中使用最多的功能为查询数据、遍历数据,所以。集合数据存储的结构是链表结构。方便元素添加、删除的集合。提供了大量首尾操作的方法。对一个集合元素的添加与删除经常涉及到首尾操作,而。

2025-01-30 15:50:19 145

原创 Java List集合

接口继承自Collection接口,是单列集合的一个重要分支,习惯性地会将实现了List接口的对象称为List集合。在List集合中允许出现重复的元素,所有的元素是以一种线性方式进行存储的,在程序中可以通过索引来访问集合中的指定元素。另外,List集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序一致。List它是一个元素存取有序的集合。例如,存元素的顺序是11、22、33。那么集合中,元素的存储就是按照11、22、33的顺序完成的)。

2025-01-30 15:36:50 285

原创 Java ArrayList类

到目前为止,我们想存储对象数据,选择的容器,只有对象数组。而数组的长度是固定的,无法适应数据变化的需求。为了解决这个问题,Java提供了另一个容器。的实现,存储在内的数据称为元素。此类提供一些方法来操作内部存储的元素。ArrayList对象不能存储基本类型,只能存储引用类型的数据。在JDK 7后,右侧泛型的尖括号之内可以留空,但是<>仍然要写。,但是存储基本数据类型对应的包装类型是可以的。所以,想要存储基本类型数据,对于元素的操作,基本体现在——增、删、查。集合类,让我们可以更便捷的存储和操作对象数据。

2025-01-30 15:35:10 256

原创 Java Collection集合

集合:集合是java中提供的一种容器,可以用来存储多个数据。集合和数组既然都是容器,它们有啥区别呢?数组的长度是固定的。集合的长度是可变的。数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储。

2025-01-30 14:42:47 310

原创 Java Collections类

Override//以学生的年龄降序});@Override// 年龄降序//年龄降序if(result==0){//第一个规则判断完了 下一个规则 姓名的首字母 升序});

2025-01-30 14:34:04 433

原创 Java StringBuilder类

查阅的API,StringBuilder又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。原来StringBuilder是个字符串的缓冲区,即它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种操作。它的内部拥有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加入新内容。StringBuilder会自动维护数组的扩容。原理如下图所示:(默认16字符空间,超过自动扩充)

2025-01-30 14:29:54 377

原创 Java File类

类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。

2025-01-30 14:22:22 955

原创 Java 字节流、字符流

生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了ctrl+s,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢?键盘、内存、硬盘、外接设备等等。我们把这种数据的传输,可以看做是一种数据的流动,按照流动的方向,以内存为基准,分为输入input和输出output,即流向内存是输入流,流出内存的输出流。Java中I/O操作主要是指使用java.io包下的内容,进行输入、输出操作。输入也叫做读取数据,输出也叫做作写出数据。继承于。

2025-01-30 14:03:47 752

原创 Java中的finally一定会被执行吗

答案:肯定不是。

2025-01-29 21:51:52 324

原创 Java 转换流

计算机中储存的信息都是用二进制数表示的,而我们在屏幕上看到的数字、英文、标点符号、汉字等字符是二进制数转换之后的结果。,是Reader的子类,是从字节流到字符流的桥梁。它的字符集可以由名称指定,也可以接受平台的默认字符集。,是Writer的子类,是从字符流到字节流的桥梁。它的字符集可以由名称指定,也可以接受平台的默认字符集。比如说,按照A规则存储,同样按照A规则解析,那么就能显示正确的文本符号。但是,当读取Windows系统中创建的文本文件时,由于Windows系统的默认是GBK编码,就会出现乱码。

2025-01-29 21:50:16 894

原创 Java 序列化流

Java 提供了一种对象序列化的机制。用一个字节序列可以表示一个对象,该字节序列包含该对象的数据对象的类型和对象中存储的属性等信息。字节序列写出到文件之后,相当于文件中持久保存了一个对象的信息。反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化。对象的数据对象的类型和对象中存储的数据信息,都可以用来在内存中创建对象。

2025-01-29 21:46:43 486

原创 Java 日期时间类

类 表示特定的瞬间,精确到毫秒。继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日期对象。:分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。:分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。tips: 由于我们处于东八区,所以我们的基准时间为1970年1月1日8时0分0秒。

2025-01-29 21:43:21 755

原创 Java 缓冲流

缓冲流,也叫高效流,是对4个基本的FileXxx字节缓冲流字符缓冲流缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率。

2025-01-29 20:40:12 253

原创 Java 包装类

基本类型对应的包装类(位于java.lang包中)byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBoolean。

2025-01-29 20:13:47 260

原创 Java内存区域(运行时数据区域)和内存模型(JMM)

Java 内存区域和内存模型是不一样的东西,内存区域是指 Jvm 运行时将数据分区域存储,强调对内存空间的划分。而内存模型(Java Memory Model,简称 JMM )是定义了线程和主内存之间的抽象关系,即 JMM 定义了 JVM 在计算机内存(RAM)中的工作方式,如果我们要想深入了解Java并发编程,就要先理解好Java内存模型。

2025-01-28 21:26:04 977

原创 Java 对象进行深拷贝

说了这么多深拷贝的实现方法,哪一种方法才是最好的呢?最简单的判断就是根据拷贝的类(包括其成员变量)是否提供了深拷贝的构造函数、是否实现了Cloneable接口、是否实现了Serializable接口、是否实现了默认的无参构造函数来进行选择。深拷贝方法优点缺点构造函数1.底层实现简单2.不需要引入第三方包3.系统开销小4.对拷贝类没有要求,不需要实现额外接口和方法1.可用性差,每次新增成员变量都需要新增新的拷贝构造函数重载clone()方法1.底层实现较简单2.不需要引入第三方包。

2025-01-28 21:19:00 1544

原创 Java 函数式接口

有且仅有一个抽象方法的接口。函数式接口,即适用于函数式编程场景的接口。而Java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导。“语法糖”是指使用更加方便,但是原理不变的代码语法。例如在遍历集合时使用的for-each语法,其实底层的实现原理仍然是迭代器,这便是“语法糖”。从应用层面来讲,Java中的Lambda可以被当做是匿名内部类的“语法糖”,但是二者在原理上是不同的。

2025-01-28 20:50:23 956

原创 Java 接口

接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JDK 8),私有方法(JDK 9)。接口的定义,它与定义类方式相似,但是使用interface关键字。它也会被编译成.class文件,但一定要明确它并不是类,而是另外一种引用数据类型。引用数据类型:数组,类,接口。接口的使用,它不能创建对象,但是可以被实现(implements,类似于被继承)。

2025-01-28 20:45:15 685

原创 Java 流程控制

在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说,程序的流程对运行结果有直接的影响。所以,我们必须清楚每条语句的执行流程。而且,很多时候我们要通过控制语句的执行顺序来实现我们要完成的功能。循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形成死循环。

2025-01-28 20:43:20 840

原创 Java 面向对象思想

Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计、开发计算机程序。这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。面向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去操作实现。类:是一组相关属性和行为的集合。

2025-01-28 20:35:12 693

原创 Java 内部类

将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。

2025-01-28 20:25:22 347

原创 Java 匿名对象

创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。虽然是创建对象的简化写法,但是应用。小贴士:一个匿名对象,只能使用一次。

2025-01-28 20:24:00 253

原创 Java 权限修饰符

在 Java 中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限,public :公共的。protected :受保护的default :默认的private :私有的。

2025-01-28 20:22:57 182

原创 Java final 关键字

学习了继承后,我们知道,子类可以在父类的基础上改写父类内容,比如,方法重写。那么我们能不能随意的继承 API 中提供的类,改写其内容呢?显然这是不合适的。为了避免这种随意改写的情况,Java 提供了final关键字,用于修饰不可改变内容。不可改变。可以用于修饰类、方法和变量。类:被修饰的类,不能被继承。方法:被修饰的方法,不能被重写。变量:被修饰的变量,不能被重新赋值。

2025-01-28 20:14:37 317

原创 Java 数组

容器:是将多个数据存储到一起,每个数据称为该容器的元素。生活中的容器:水杯,衣柜,教室数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度];数组定义格式详解:数组存储的数据类型: 创建的数组容器可以存储什么数据类型。\[] : 表示数组。数组名字:为定义的数组起个变量名,满足标识符规范,可以使用名字操作数组。new :关键字,创建数组使用的关键字。数组存储的数据类型: 创建的数组容器可以存储什么数据类型。

2025-01-28 20:12:19 957

原创 Java 异常

异常,就是不正常的意思。异常:指的是程序在执行过程中,出现的非正常的情况,最终会导致 JVM 的非正常停止。在 Java 等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java 处理异常的方式是中断处理。异常指的并不是语法错误,语法错了,编译不通过,不会产生字节码文件,根本不能运行.我们说了 Java 中不同的异常类,分别表示着某一种具体的异常情况,那么在开发中总是有些异常情况是 SUN 没有定义好的,此时我们根据自己业务的异常情况来定义异常类。

2025-01-28 16:40:09 975

原创 Java 运算符

【代码】Java 运算符。

2025-01-28 16:31:00 601

原创 Java 方法引用

在使用 Lambda 表达式的时候,我们实际上传递进去的代码就是一种解决方案:拿什么参数做什么操作。那么考虑一种情况:如果我们在 Lambda 中所指定的操作方案,已经有地方存在相同方案,那是否还有必要再写重复逻辑?

2025-01-28 16:26:17 985

原创 Java 方法入门

我们在学习运算符的时候,都为每个运算符单独的创建一个新的类和main方法,我们会发现这样编写代码非常的繁琐,而且重复的代码过多。能否避免这些重复的代码呢,就需要使用方法来实现。方法:就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能。当我们需要这个功能的时候,就可以去调用。这样即实现了代码的复用性,也解决了代码冗余的现象。定义格式:修饰符 返回值类型 方法名 (参数列表){代码 . . . return;定义格式解释:修饰符: 目前固定写法。

2025-01-28 16:24:18 272

原创 Java 泛型

在前面学习集合时,我们都知道集合中是可以存放任意对象的,只要把对象存储集合后,那么这时他们都会被提升成 Object 类型。当我们在取出每一个对象,并且进行相应的操作,这时必须采用类型转换。//由于集合没有做任何限定,任何类型都可以给其中存放//需要打印每个字符串的长度,就要把迭代出来的对象转成 String 类型程序在运行时发生了问题。为什么会发生类型转换异常呢?我们来分析下:由于集合中什么类型的元素都可以存储。导致取出时强转引发运行时 ClassCastException。

2025-01-23 16:03:06 737

原创 Java 反射

反射(Reflection),Java 中的反射机制是指,Java 程序在运行期间可以获取到一个对象的全部信息。反射机制一般用来解决 Java 程序运行期间,对某个实例对象一无所知的情况下,如何调用该对象内部的方法问题。case 1:// 通过反射创建一个 Dog 类对象,不提供代码,只是文字说明break;上面代码中,根据 key 的值选择创建 Cat/Dog 对象,但是在代码编译时,编译器会先检查程序中是否存在 Cat 类,如果没有,则会编译报错;

2025-01-23 15:48:36 1032

原创 Java 常用数据结构

Java 数据存储的常用结构有:栈、队列、数组、链表和红黑树

2025-01-23 08:54:02 759

原创 Java 抽象类

父类中的方法,被它的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和方法主体,只有声明还有意义,而方法主体则没有存在的意义了。我们把没有方法主体的方法称为抽象方法。Java 语法规定,包含抽象方法的类就是抽象类。抽象方法:没有方法体的方法。抽象类:包含抽象方法的类。使用abstract关键字修饰方法,该方法就成了抽象方法,抽象方法只包含一个方法名,而没有方法体。修饰符 abstract 返回值类型 方法名 (参数列表);

2025-01-23 08:49:42 238

原创 Java 变量和数据类型

对象化: 包装类使基本数据类型可以作为对象处理,允许与 Java 的集合框架配合使用。不可变性: 包装类对象是不可变的,即一旦创建,其值不能更改。类型转换: 包装类可以自动进行基本类型与对象之间的转换(自动装箱和拆箱)。自动装箱:将基本数据类型自动转换为对应的包装类。拆箱:将包装类对象自动转换为对应的基本数据类型数据类型变量名数据值。

2025-01-22 16:07:08 959

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除