
Java
文章平均质量分 83
Java各类知识
第五季度
想忽略生活的琐事,一直奔跑在知识的田野上。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Java】设计模式之生产者/消费者
这个设计模式使用一个消息队列对生产者和消费者进行解耦。它与保护性暂停最大的区别就是它并不需要产生结果者与消费结果者一一对应,而是可以多对多。而且这个设计模式它传递消息会存在一定的延迟,而保护性暂停传递信息是十分及时的。消费者从消息队列中取消息,如果消息队列为空,消费者会进入阻塞状态;如果消息队列不为空,消费者会取出消息队列头的消息然后唤醒所有生产者。生产者将消息放入消息队列中直到消息队列满,这时候生产者会进入阻塞状态;如果消息队列不满,生产者将消息放入消息队列后会唤醒所有的消费者。原创 2024-01-08 13:08:04 · 605 阅读 · 0 评论 -
【Java】设计模式之顺序控制
如果有多个线程进行顺序打印,使用ReentrantLock的条件变量、await、sigal会能比synchronized获得更好的性能,因为synchronized每次都唤醒所有的线程。比如说有n个线程,让n个线程循环依次打印n个数字,这时候可以让ReentrantLock创建n个条件变量,每个线程对应一个条件变量。所以,想要按顺序执行,一开始让所有线程都停下来,接下来手动触发一个线程运行,并让这个线程只运行一次就结束或阻塞,并触发下一个线程运行,以此类推就能按顺序进行线程的执行。原创 2024-01-08 13:08:19 · 608 阅读 · 0 评论 -
【Java】设计模式之保护性暂停
线程2也对保护对象加锁,当它执行完毕之后,将结果记录在保护对象的response之中然后执行notifyAll()方法唤醒线程1。线程1被唤醒,它就可以从保护对象的response属性中拿到线程2处理的结果。想要让一个线程等待另一个线程的执行结果,可以让这两个线程都关联上同一个 Guarded 0bject保护对象,让对象的管程的waitset来充当通知的桥梁,使用对象的wait()/notify()方法来进行通知。有一个结果需要从一个线程传递到另一个线程,传递只进行一次,用设计模式保护性暂停。原创 2024-01-07 15:25:18 · 752 阅读 · 0 评论 -
【Java】设计模式之两阶段终止
有一个场景:一个监控线程在监控计算机中的cpu使用情况、内存占用情况等信息。现在使用者不想要监控了,按下了停止按钮,如何让该线程终止?命名为两阶段终止,是因为代码中设置了两次打断。要设置第二次打断的原因是阻塞状态被打断会清空打断标志,需要重新设置一次打断才能终止线程。它的思想是,如何在一个线程T1中优雅地终止线程T2?这里的【优雅】指的是给T2一个料理后事的机会。是用来终止线程的套路。原创 2024-01-07 15:21:55 · 677 阅读 · 0 评论 -
【Java】JUC并发编程(重量锁、轻量锁、偏向锁)
预备:创建一个maven工程,导入lombok和logback的依赖。原创 2023-12-31 23:59:49 · 1091 阅读 · 0 评论 -
【后端】Docker学习笔记
Java项目可以通过docker进行部署,这就需要会使用docker制造一个镜像。镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。准备一个linux服务器安装jre并配置环境变量拷贝jar包运行jar包看似,镜像中只需要jre和jar包就足够了,但是Java程序需要jre中的jvm去执行,jvm是需要跟操作系统进行交互的,所以还需要准备好具体的操作系统环境。具体来说,是操作系统的系统函数。问题来了,需要用到哪些系统函数呢?原创 2023-12-31 23:36:56 · 1616 阅读 · 1 评论 -
【Java】MybatisPlus
mybatis-plus原创 2023-12-25 12:07:40 · 1713 阅读 · 3 评论 -
【Java】lambda表达式和方法引用详解(jdk1.8新特性)
当匿名内部类的引用传递给接口类型或者抽象类类型,如果发现类型是函数式接口,那很明显匿名内部类重写的方法必定是函数式接口的唯一方法,因此,匿名内部类的写法可以得到简化。如果某个lambda表达式中,只有一个类调用了它的静态方法,并且传入静态方法的参数与lambda表达式的参数类型一致,那么可以使用方法引用进行简化。lambda表达式是对函数式接口的匿名内部类的简化,那lambda表达式之中创建的对象、调用的方法是否有机会进行简化呢?lambda表达式是用来简化函数式接口的匿名内部类的写法的。原创 2023-12-25 15:00:00 · 1275 阅读 · 0 评论 -
【Java】springboot
只需要导入mybatis和mysql的依赖,然后在springboot的配置文件中编写数据源,然后为数据层接口添加注解@Mapper,接下来为接口中方法添加各种mybatis注解/编写sql映射文件,就可以调用接口中各种方法执行数据库查询操作了。一个是继承的依赖starter-parent,springboot最基础的依赖,springboot所有的东西都建立在其之上。另外,starter-web这个依赖中存在starter这个依赖,如果不添加start-web依赖,也必须要添加start依赖。原创 2023-12-24 16:15:38 · 1055 阅读 · 0 评论 -
【Java】springmvc
然后在这个类中写方法拦截异常。注意:这个类要被springmvc的配置类加载到。然后要在这个类的方法中写一个注解:@ExceptonHandler,里边写上表现层抛出的异常类型,根据异常类型到这个方法中执行。原创 2023-12-24 16:15:01 · 1061 阅读 · 0 评论 -
【Java】spring
spring的核心作用就是管理bean。==只需要将实现类注解成bean就可以了接口不用注解成bean。==使用的时候只使用接口。因为spring会根据接口自动获取实现类注入接口。原创 2023-12-22 22:09:11 · 2091 阅读 · 0 评论 -
【Java】Mybatis
JavaEE三层框架:表现层、业务层、持久层。现在开始学习持久层。持久层就是负责与数据库打交道的代码。框架:就是一个半成品软件。在框架的基础上,可以更加高效地写出代码。原创 2023-12-22 15:00:00 · 909 阅读 · 0 评论 -
【Java】Maven
如果模块1是模块2、模块3、模块4的父模块,模块2、模块3共用一些依赖,提到父模块之中去;模块3、模块4共用一些依赖,也提到父模块之中去。把想要聚合的所有模块放入聚合模块之中,并且把这些模块写入聚合模块的pom文件之中(不是依赖引入,而是在。又出现了一个问题:多个模块中如果引入了大量相同的依赖,不仅增加了代码量,而且管理起来很麻烦(要改动某一个依赖的版本需要把所有相同依赖的版本都更新一遍),于是就有了继承的思想。所以,想要在一个模块中使用另一个模块中的内容,可以在模块的pom文件中导入被引用模块的坐标。原创 2023-12-21 09:15:45 · 1379 阅读 · 0 评论 -
【Java】MySql
查询数据库创建数据库CREATE DATABASE 数据库名称;-- 更好地创建数据库CREATE DATABASE IF NOT EXISTS 数据库名称;删除数据库DROP DATABASE 数据库名称;-- 更好地删除数据库DROP DATABASE IF EXISTS 数据库名称;使用数据库-- 查看当前正在使用的数据库-- 使用数据库USE 数据库名称;上边是DDL定义数据库,接下来是DDL定义表查询表-- 查询当前数据库下所有表。原创 2023-12-21 09:14:55 · 1009 阅读 · 0 评论 -
【Java】反射
反射是一种非常强大的机制。反射跟注解配合,就天衣无缝了。动态语言和静态语言**动态语言:**是一类在运行时可以改变其结构的语言.例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。动态语言主要有JavaScript、python、c#等。**静态语言:**与动态语言相对应,运行时不能改变的语言称为静态语言。静态语言主要有C、C++、Java。原创 2023-12-20 11:10:30 · 1175 阅读 · 0 评论 -
【Java】注解
不是程序本身,但是可以对程序作出解释(这一点跟注释没有什么区别),但是注释没有功能,注解是有功能的可以被其他程序(编译器等)读取可以在package、class、method、field等上面使用注解,相当于给这些东西添加了额外的辅助信息,可以通过反射机制实现对注解的访问使用@Interface可以自定义注解。它会自动继承java.lang.Annotation接口。原创 2023-12-20 11:07:12 · 927 阅读 · 0 评论 -
【JVM】9.自动垃圾回收(垃圾回收器)
比如吞吐量99,说明用户执行时间占99%,垃圾回收的时间占1%)。(默认45%)),就会触发混合回收Mixed GC,回收年轻代中所有Region的垃圾对象和老年代中部分Region的垃圾对象以及老年代中Humongous区中的所有对象。HotSpot之中垃圾回收器分为年轻代和老年代,年轻代和老年代有着不同的垃圾回收算法实现,除了最特殊的G1垃圾回收器以外,其他垃圾回收器都必须两两配对使用(年轻代和老年代)。G1垃圾回收器可以说整合了jdk8之前的垃圾回收器的优点,jdk9之后强烈推荐使用G1垃圾回收器。原创 2023-12-17 08:47:18 · 502 阅读 · 0 评论 -
【JVM】7.自动垃圾回收(五种引用方式)
当内存不够用,哈希表中软引用存放的学生数据会被回收,此时只需要获得软引用队列,弹出已经被回收数据的软引用,从哈希表中移除键值对,之后软引用也会被回收。可达性分析算法中描述的引用,一般都是强引用,即是GC Root对象对普通对象有引用关系,只要这层关系存在,那么普通对象就不会被回收。上文说到,如果一个对象在它的引用链上没有GC Root对象,那么这个对象就可以被回收,如果有GC Root对象,那么这个对象就不能被回收。对象本身没有软引用,如果想让一个对象软引用,需要new出一个软引用。保存想要软引用的对象。原创 2023-12-13 09:00:00 · 186 阅读 · 0 评论 -
【JVM】5.运行时数据区(堆、方法区、直接内存)
程序计数器、虚拟机栈、本地方法栈是线程不共享的。每一个线程都有自己的程序计数器、虚拟机栈以及本地方法栈。堆、方法区是线程共享的。不同线程共享堆和方法区。因为静态变量是在堆中的,所以静态变量是线程共享的。原创 2023-12-12 10:00:00 · 112 阅读 · 0 评论 -
【JVM】4.运行时数据区(程序计数器、虚拟机栈)
方法调用就入栈,方法结束就出栈。记录了每个变量的编号(第几个变量),PC开始位置,以及长度(其实就是作用域,PC可以访问多长的位置,超过这个长度就不能使用这个变量了),在数组中的索引(序号),变量的名字。显然,栈帧中局部变量过多,会引起局部变量表过大,操作数栈深度变大,也会影响一个栈帧的大小,从而影响虚拟机栈能够存放栈帧的个数。:当前类的字节码指令引用了其他类的属性或者方法时,需要将符号引用(编号)转换成对应的运行时常量池中的内存地址,动态链接就保存了编号到运行时常量池的内存地址的映射关系。原创 2023-12-11 21:30:26 · 82 阅读 · 0 评论 -
【JVM】2.字节码文件详解
常量池里边其实也是有分类型的:字符串对象(保存着指向字符串常量的编号)、方法名、类名、字符串常量。类加载器Classloader、运行时数据区域(JVM管理的内存)、执行引擎(即时编译器、解释器、垃圾回收器等)、本地接口(本地已经编译的方法比如虚拟机中提供的c/c++方法)。字节码文件是以二进制进行存储的,win上的记事本、notepad++等软件都无法打开查看。方法区域是存放字节码指令的核心位置,字节码指令的内容存放在方法的code属性之中。在学这些之前,先了解一下输入JVM的字节码文件是怎么回事。原创 2023-12-11 21:15:54 · 213 阅读 · 0 评论 -
【JVM】3.类加载器
这样一来,一个类或者接口就这样被JVM加载到内存中了。(2)类的连接阶段连接阶段可以分为三个步骤:验证、准备、解析。原创 2023-12-01 22:05:08 · 105 阅读 · 0 评论 -
【JVM】1.初识JVM
JVM本质上是一个程序,它的职责是运行Java字节码文件(.class)。源代码文件是.java,使用javac编译(javac是Java编译器的前端部分,这个过程主要是进行语法检查,不涉及性能优化),变成Java字节码文件.class,之后JVM将.class文件解释为机器码。通过不同平台上的不同JVM将字节码文件解释成对应平台的机器码,能够让Java源代码“一次编译,到处运行”。原创 2023-12-01 11:13:15 · 86 阅读 · 0 评论 -
【运筹优化】粒子群算法(PSO)实现等误差直线逼近复杂曲线(附PSO Java源码)
曲线逼近、粒子群算法源码。原创 2023-11-30 09:23:06 · 1269 阅读 · 1 评论