从零开始的Java学习之旅
文章平均质量分 93
记录学习Java SE、Java数据结构及Java EE等学习中的收获和问题
比奇堡的天没有云
不会画图的程序员不是一个好作家
展开
-
【Java|Stream流】获取各个数据类型的Stream流
在 Java 中,Stream 流是一种处理集合数据的高级方式,可以方便地对集合进行各种操作,如过滤、映射、排序、聚合等。先得到一条Stream流,并把数据放上去利用Stream流中的API进行各种操作中间方法:方法调用完毕之后,还可以调用其他方法终结方法:最后一步,调用完毕之后,不能调用其他方法。原创 2024-09-02 11:06:35 · 520 阅读 · 0 评论 -
【Java|Stream流】不可变集合
不可变集合:不可以被修改的集合不可变集合优点:安全性由于不可变集合不能被修改,所以可以安全地在多个线程之间共享,而不用担心被意外修改,减少了多线程环境下同步的开销。在将集合传递给其他方法或组件时,不用担心集合被外部代码修改,提高了程序的安全性和可维护性。性能优化不可变集合可以进行一些性能优化,例如缓存哈希码,因为其内容不会改变,所以哈希码也不会改变。易于理解和维护代码中使用不可变集合可以使逻辑更加清晰,因为不需要考虑集合在其他地方被意外修改的情况。原创 2024-09-01 13:57:44 · 932 阅读 · 0 评论 -
【Spring】使用xml配置AOP
在之前的学习中,都是使用注解的方式进行AOP的配置.其实使用xml配置文件也可以配置AOP.定义切面类,定义切点.将目标类和切面类添加到Spring容器中(注解或Bean标签),如果是注解方式,需要添加组件扫描在配置文件中配置AOP在实际开发中,用注解配置AOP比较多,xml配置AOP了解即可。原创 2023-11-21 20:38:20 · 715 阅读 · 6 评论 -
【Spring】AOP进阶-JoinPoint和ProceedingJoinPoint详解
在Spring AOP中,JoinPoint和ProceedingJoinPoint都是关键的接口,用于在切面中获取方法的相关信息以及控制方法的执行。它们的主要区别在于它们在AOP通知中的使用方式和功能。Joinpoint是面向切面编程(AOP)中的一个重要概念,指的是在应用程序执行过程中可以被拦截的特定点。在AOP中,Joinpoint代表了程序执行的某个具体位置,比如方法的调用、异常的抛出等。AOP框架通过拦截这些Joinpoint来插入额外的逻辑,实现横切关注点的功能。原创 2023-11-18 14:10:44 · 7882 阅读 · 63 评论 -
【Spring】超详细讲解AOP(面向切面编程)
目标: 本文围绕AOP相关的注解,各个注解运行的时机,以及@Around相较于其它注解有什么不同,并且如果要执行目标方法需要调用什么方法Spring的AOP(面向切面编程)是Spring框架的一个重要特性,它允许开发人员在应用程序中通过定义切面来实现横切关注点的功能,如日志记录、性能监控、事务管理等。AOP通过将这些关注点从业务逻辑中抽离出来,使得代码更加模块化、可维护和可重用。SpringAOP就是批量对Spring容器中bean的方法做增强,并且这种增强不会与原来方法中的代码耦合。原创 2023-11-16 11:12:07 · 1259 阅读 · 18 评论 -
【Spring】注解
Spring支持使用注解代替xml配置,注解开发可以简化配置.注解相对于XML配置的优点主要体现在编写的简洁性和代码量的减少上。由于注解直接写在源代码中,使得代码看起来更直观和清晰。不过,这也是注解的一个缺点,即一旦需要在源代码中进行维护或修改,就必须改动源代码,并重新编译和部署。相比之下,XML配置有其独特的优势。首先,XML是集中式的元数据,不需要与代码绑定,这使得我们可以独立于源代码进行配置修改,而无需重新编译和部署。原创 2023-11-06 11:09:06 · 229 阅读 · 2 评论 -
【Spring】bean的配置
【Spring】IOC容器与Bean的常用属性配置本文介绍bean的一些其它属性配置.以及静态工厂和实例工厂。原创 2023-11-05 16:00:39 · 272 阅读 · 0 评论 -
【Spring】配置文件-properties和xml
在Spring中,配置文件有两种,properties配置文件和xml配置文件properties配置文件,在Java编程中是一种常见的配置文件形式,文件后缀为“.properties”,属于文本文件。它的内容格式是“键=值”的格式,并且可以使用“#”作为注释。XML配置文件是一种用于存储和传输数据的格式,它以可读性较强的文本形式表示数据结构。XML配置文件通常用于描述软件系统的配置信息、数据库结构、网络拓扑等。原创 2023-11-02 22:23:07 · 727 阅读 · 0 评论 -
XML基础知识讲解
XML(eXtensible Markup Language)是一种用于描述数据的标记语。它以纯文本的方式存储数据,并使用标签来标记数据的结构和含义。XML被设计用于传输和存储数据,同时也可作为配置文件和数据交换的格式。xml文档中只能有一个根标签结束标签比开始标签多了一个标签的定义有开始必须要有结束标签必须是合理嵌套每个标签可以有多个属性,但是属性不能相同属性和属性之间要使用引号(单引号或双引号)属性名称的命名规范和元素名称的命名规范相同示例:-- 注释内容 -->注释不能嵌套。原创 2023-08-05 21:17:01 · 2256 阅读 · 0 评论 -
使用Socket实现TCP版的回显服务器
Socket(Java套接字)是Java编程语言提供的一组类和接口,用于实现网络通信。它基于Socket编程接口,提供了一种简单而强大的方式来实现网络应用程序。Socket类库提供了丰富的方法和功能,用于处理网络通信的各个方面。它支持TCP和UDP协议,可以实现可靠的、面向连接的通信(TCP)或不可靠的、无连接的通信(UDP)。Java Socket还提供了一些高级功能,如多线程处理、异步通信、加密通信等,以满足不同网络应用的需求。本文主要使用Socket实现UDP版的客户端和服务器。原创 2023-08-05 16:31:21 · 1103 阅读 · 0 评论 -
使用Socket实现UDP版的回显服务器
Socket(Java套接字)是Java编程语言提供的一组类和接口,用于实现网络通信。它基于Socket编程接口,提供了一种简单而强大的方式来实现网络应用程序。ocket类库提供了丰富的方法和功能,用于处理网络通信的各个方面。它支持TCP和UDP协议,可以实现可靠的、面向连接的通信(TCP)或不可靠的、无连接的通信(UDP)。Java Socket还提供了一些高级功能,如多线程处理、异步通信、加密通信等,以满足不同网络应用的需求。本文主要使用Socket实现UDP版的客户端和服务器。原创 2023-08-04 14:43:07 · 1017 阅读 · 0 评论 -
【Java】快速入门JVM
JVM(Java虚拟机)是一个名字为Java的进程,是用于执行Java程序的虚拟机。JVM会从操作系统中申请一大块内存空间,又把这个内存空间划分成为几个小的区域堆方法区栈(Java虚拟栈和本地方法栈)程序计数器运行时常量池代码中的局部变量是放在栈上的,成员变量放在堆上,静态变量放在方法区中,程序计数器放的是下一个要执行的指令地址一个JVM进行中,堆和方法区只有一份,单栈和程序计数器,每个线程都有自己的一份。原创 2023-07-31 23:55:21 · 923 阅读 · 1 评论 -
【Java|基础篇】File类和IO流
InputStream和OutputStream:字节流的基类,用于读取和写入字节数据。Reader和Writer:字符流的基类,用于读取和写入字符数据。FileInputStream和FileOutputStream:用于从文件中读取和写入字节数据。FileReader和FileWriter:用于从文件中读取和写入字符数据。同时可以使用Scanner和PrintWriter简化开发,使用完流对象后,一定要记得调用close操作.原创 2023-07-29 16:47:09 · 1239 阅读 · 20 评论 -
【Maven】Maven下载,配置以及基本概念
Maven是一个Java项目管理工具和构建工具,用于管理项目的依赖关系、构建过程以及项目的部署。它是Apache软件基金会的开源项目。Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)注:POM (Project Object Model):项目对象模型使用Maven可以简化项目的构建过程,提供了一种统一的项目结构和构建配置方式。通过定义一个描述项目结构和依赖的pom.xml。原创 2023-07-16 22:42:55 · 4957 阅读 · 0 评论 -
【Java|多线程与高并发】死锁以及哲学家吃饭问题
死锁(Deadlock)是多线程编程中的一个常见问题,指的是两个或多个线程相互等待对方释放资源,导致程序无法继续执行的状态。在一种典型的死锁情况中,有两个或多个线程,每个线程都在持有一个资源的同时试图获得另一个线程持有的资源。当两个线程都在等待对方释放资源时,它们将永远无法继续执行,产生了死锁。System . out . println("t1获取locker1");try {System . out . println("t1获取locker2");} } });原创 2023-07-09 21:04:35 · 270 阅读 · 0 评论 -
【Java|多线程与高并发】JUC中常用的类和接口
JUC是Java并发编程中的一个重要模块,全称为`Java Util Concurrent`(Java并发工具包),它提供了一组用于多线程编程的工具类和框架,帮助开发者更方便地编写线程安全的并发代码。原创 2023-07-01 16:54:36 · 1362 阅读 · 36 评论 -
【Java|多线程与高并发】CAS以及ABA问题
CAS(Compare and Swap,“比较和交换”)是一种并发编程中常用的原子操作,用于解决多线程环境下的数据竞争和并发访问问题。CAS操作包含三个操作数:内存位置(通常是一个共享变量)、预期值和新值。读取内存位置的当前值。比较当前值与预期值是否相等。如果相等,则将内存位置的值更新为新值。如果不相等,则说明有其他线程已经修改了内存位置的值,CAS操作失败。CAS操作是由一条CPU指令,原子的完成的,是线程安全的且效率很高实现原子类实现自旋锁。原创 2023-06-30 11:18:16 · 345 阅读 · 4 评论 -
【Java|多线程与高并发】线程池详解
Java线程池是一种用于管理和重用线程的机制,它可以在需要执行任务时,从线程池中获取线程,执行任务,然后将线程放回池中,以便后续使用。线程池可以有效地管理线程的数量,提高程序的性能和资源利用率。为什么从线程池里面取线程比直接创建线程快呢?创建线程是要在操作系统内核中完成的,涉及"用户态"到"内核态"切换操作. 这个切换是有一定开销的. 而线程池取线程是纯的用户态实现.原创 2023-06-27 09:07:08 · 1177 阅读 · 10 评论 -
【Java|多线程与高并发】定时器(Timer)详解
在Java中,定时器Timer类是用于执行定时任务的工具类。它允许你安排一个任务在未来的某个时间点执行,或者以固定的时间间隔重复执行。在服务器开发中,客户端向服务器发送请求,然后等待服务器响应. 但服务器什么时候返回响应,并不确定. 但也不能让客户端一直等下去, 如果一直死等,就没有意义了. 因此通常客户端会通过定时器设置一个"等待的最长时间".原创 2023-06-25 18:43:12 · 8287 阅读 · 6 评论 -
【Java|多线程与高并发】阻塞队列以及生产者-消费者模型
阻塞队列(BlockingQueue)常用于多线程编程中,可以实现线程之间的同步和协作。它可以用来解决生产者-消费者问题,其中生产者线程将元素插入队列,消费者线程从队列中获取元素,它们之间通过阻塞队列进行协调。阻塞队列的使用可以简化多线程编程的复杂性,避免手动实现线程间的同步和协作逻辑,提高代码的可读性和可维护性。基于阻塞队列的生产者-消费者模型也要重点掌握.。阻塞队列作为生产者和消费者之间的缓冲区,提供线程安全的插入和获取操作,并在队列为空或队列已满时进行阻塞,从而实现线程间的同步。原创 2023-06-25 13:49:31 · 1592 阅读 · 8 评论 -
【Java|多线程与高并发】设计模式-单例模式(饿汉式,懒汉式和静态内部类)
设计模式是一种在软件开发中常用的解决复杂问题的方法论。它提供了一套经过验证的解决方案,用于解决特定类型问题的设计和实现。设计模式可以帮助开发人员提高代码的可重用性、可维护性和可扩展性。设计模式有很多,本文主要介绍单例模式.本文主要介绍了饿汉式,懒汉式和静态内部类三种实现单例模式的方式,其中 懒汉式单例 很重要,要着重理解双重if的含义.需要注意的是,以上方式都可以在多线程环境下保证单例的正确创建,但在特殊情况下,如使用反射或序列化/反序列化等机制,仍然可能破坏单例的唯一性。原创 2023-06-24 11:32:25 · 1088 阅读 · 25 评论 -
【Java|多线程与高并发】wait和notify方法详解
在Java多线程环境中,线程之间是抢占式执行的,线程的调度是随机的.这就很难受了. 在很多情况下我们希望线程以我们想要的顺序来执行. 这就需要wait和notify这两个方法wait和notify方法用于实现线程间的协作和通信.wait方法使线程进入等待状态,notify方法唤醒一个等待线程,notifyAll方法唤醒所有等待线程。通过上述三个方法,可以使线程按照特定的顺序执行或者等待某个条件满足后再执行。希望这篇文章能帮到你!专栏:《从零开始的Java学习之旅》在不断更新中,欢迎订阅!原创 2023-06-22 22:32:18 · 1570 阅读 · 21 评论 -
【JavaWeb】使用Servlet实现输出 hello world
之前讲过如何使用IDEA创建Servlet项目. 因此创建项目这一步就不过多介绍了有需要的可以看一下➡IDEA专业版和社区版创建Servlet项目今天介绍如何使用Servlet输出一个"hello world".原创 2023-06-13 14:36:46 · 2928 阅读 · 1 评论 -
【JavaWeb】IDEA专业版和社区版创建Servlet项目
Servlet 是一种实现动态页面的技术. 是一组 Tomcat 提供给程序猿的 API, 帮助程序猿简单高效的开发一个 web app.,用于处理客户端请求并生成响应。Servlet是JavaWeb应用程序中不可或缺的组件之一,它可以实现Web应用程序的核心功能.本文主要介绍使用IDEA创建Servlet项目考虑到IDEA有专业版和教育版创建的方式不同. 不同之处会进行说明创建Servlet项目,首先要创建Maven项目,引入Servlet依赖(两种方式,在pom.xml引入,使用jar。原创 2023-06-12 12:11:43 · 4535 阅读 · 5 评论 -
【Java|多线程与高并发】volatile关键字和内存可见性问题
和volatile都是Java多线程中很重要的关键字,但它们的作用和使用场景有所不同。synchronized关键字可以保证同一时刻只有一个线程可以访问被synchronized关键字保护的代码块,从而避免多个线程对共享资源的并发访问导致的数据不一致问题。关于关键字更详细的介绍,可以参考我之前写的这篇文章线程安全问题以及synchronized使用实例volatile用于保证变量在多个线程之间的可见性和有序性。本文主要介绍valatite关键字在介绍volatile关键字之前,原创 2023-06-11 18:58:19 · 1259 阅读 · 5 评论 -
【Java|多线程与高并发】线程安全问题以及synchronized使用实例
Java多线程环境下,多个线程同时访问共享资源时可能出现的数据竞争和不一致的情况。线程安全一直都是一个令人头疼的问题.为了解决这个问题,Java为我们提供了很多方式.synchronized关键字、ReentrantLock类等。使用线程安全的数据结构,例如ConcurrentHashMap、ConcurrentLinkedQueue等,避免共享资源使用volatile关键字保证内存可见性等方法。本文主要介绍synchronized关键字。原创 2023-06-09 10:53:19 · 1574 阅读 · 30 评论 -
【Java|多线程与高并发】线程的中断的两种方法
线程中断是指在一个线程执行的过程中,强制终止该线程的执行。虽说是中断,但本质上是让run方法快点执行完,而不是run方法执行到一半,强制结束.本文主要介绍线程中断的两种方法while(!flag) {System . out . println("线程执行中!");try {} } System . out . println("线程执行完了!");});try {} System . out . println("设置标志位,让线程执行结束");原创 2023-06-07 15:21:48 · 838 阅读 · 7 评论 -
【数据结构与算法】详解单向无头非循环链表的基本操作
对于插入数据,只考虑插入位置的特殊性还是不够的,原创 2022-10-19 23:06:28 · 729 阅读 · 39 评论 -
【Java|多线程与高并发】Thread 常见的方法总结
本文主要介绍Thread类常见的方法方法描述getId()获取线程的唯一数字标识getName()获取线程的名字getState()获取线程的状态获取线程的优先级isDaemon()判断线程是否是守护线程设置线程是否是守护线程isAlive()判断内核中线程对象是否存活判断线程是否被中断返回代码段正在被哪个线程调用以上就是一些Thread类常见的方法,但Thread类中的方法远不止这些,还有一些更加重要的方法.欲知后事如何,且听下回分解!希望这篇文章能帮到你!原创 2023-06-03 16:22:52 · 1032 阅读 · 32 评论 -
【Java|基础篇】内部类
内部类就是在一个类中再定义一个类,内部类也是封装的体现.它可以被声明为public、protected、private 或默认访问控制符。内部类可以访问外部类的所有成员变量和方法,包括私有成员。内部类可以用来实现一些特殊的功能,比如实现回调函数、事件处理等。常见的内部类包括实例内部类(成员内部类)、静态内部类、本地内部类、匿名内部类等。内部类在Java中的一个重要特性,要重点掌握实例内部类,静态内部类和匿名内部类.希望这篇文章能帮到你!专栏:《从零开始的Java学习之旅》在不断更新中,欢迎订阅!原创 2023-05-29 17:53:03 · 10803 阅读 · 14 评论 -
【Java|基础篇】详解static关键字和代码块
本文主要讲解static关键字以及代码块的执行顺序以及各部分代码块的作用.static关键字可以用来定义类级别的变量、方法和代码块,通过类名直接访问静态成员变量和静态成员方法. 而代码块的执行顺序以及各部分代码块的作用也很重要.希望这篇文章能帮到你!专栏:《从零开始的Java学习之旅》在不断更新中,欢迎订阅!“愿与君共勉,携手共进!原创 2023-05-22 18:08:45 · 2000 阅读 · 2 评论 -
【Java|基础篇】包和访问权限修饰符
包和访问权限修饰符是Java中两个常用的概念,它们都与访问控制有关.在Java开发中,包和访问权限修饰符通常是一起使用的。使用包可以避免命名冲突和提高代码组织性,使用访问权限修饰符可以控制成员的访问权限,提高程序的安全性和可维护性。希望这篇文章能帮到你!专栏:《从零开始的Java学习之旅》在不断更新中,欢迎订阅!“愿与君共勉,携手共进!原创 2023-05-18 20:44:15 · 967 阅读 · 36 评论 -
【Java|基础篇】面向对象三大特性之封装
面向对象有三个特性:封装,继承和多态,本文主要讲解封装. 封装是面向对象编程的基本原则之一,它可以提高程序的安全性、稳定性、可维护性和可扩展性,减少了代码的冗余,提高了代码的重用性。因此,在进行面向对象编程时,封装是一个非常重要的概念。封装是一种面向对象编程的概念,它指的是将数据与方法组合在一起,形成一个类,在类的内部对数据进行操作和控制,从而达到保护数据、隔离复杂性和提高安全性的目的。封装的原则: 对象代表什么,就应该封装对应的数据,并提供对应的数据对应的行为.原创 2023-05-13 16:40:14 · 1382 阅读 · 4 评论 -
【Java|基础篇】类和对象
本篇文章主要讲解了下面三个问题类的定义和实例化构造方法this关键字众所周知面向过程和面向对象是两种重要的编程思想,而Java是属于面向对象一类的语言.面向对象(Object Oriented Programming,简称 “oop”).封装 继承和多态.这些内容后面会详细介绍.在面向对象的世界里,一切皆为对象。原创 2023-05-11 22:09:37 · 629 阅读 · 26 评论 -
【Java|基础篇】方法的定义使用、重载以及递归
方法就是组织好的,可重复使用的具有某种功能的特定代码块 (类似于函数)在我们平时写代码时,如果遇到会经常使用的一些功能相同的代码时,我们就可以把这段代码写成一个方法,下次使用时直接调用方法即可.就不需要每次使用都要重新写一遍这些代码了.// 语法: 修饰符 返回值类型 方法名称([ 参数类型 形参 . . . ]) {方法体代码;return 返回值;修饰符:方法的修饰符有很多,例如访问限定修饰符,static,final等返回值类型:限定返回值的类型参数类型:用于限定形参的类型。原创 2023-04-19 20:21:59 · 437 阅读 · 1 评论 -
【JavaWeb】Tomcat的下载及使用
Tomcat是Apache软件基金会的一个核心项目, 也是一个开源免费的一个轻量级web服务器.支持servlet/JSP 少量的JavaEE规范,也是我们学习JavaWeb中常用的服务器.Tomcat 也被称为Web容器,Servlet容器.Servlet需要依赖Tomcat才能运行。原创 2023-04-08 15:25:11 · 17807 阅读 · 8 评论 -
【Java|基础篇】逻辑控制-顺序结构、分支结构和循环结构
本篇文章主要讲解了顺序结构,逻辑结构和循环结构.还有continue和break这两个关键字.内含思维导图,可以更好地理解逻辑控制原创 2023-03-13 08:00:00 · 1051 阅读 · 25 评论 -
【Java|基础篇】超详细讲解运算符
文章目录:1. 什么是运算符2. 算术运算符 隐式类型转换强制类型转换 字符串的拼接 字符相加 自增和自减运算符 3.赋值运算符 4. 关系运算符 5. 逻辑运算符 短路与(&&)和短路或(||) 6.三目运算符 7. 位运算符8. 移位运算原创 2023-03-05 11:12:45 · 862 阅读 · 1 评论 -
【Java|基础篇】计算机中数据的存储规则
计算机中数据的存储规则 我们平时生活中使用的是十进制,一位可以表示的数据范围是0~9,逢十进一.二进制也是差不多,一位可以表示的数据范围是0和1,逢二进一计算机中任意的数据都是以二进制的形式进行存储的数字:二进制字母:对应二进制的ASCII码值汉字:查询字符集编码,然后转成二进制进行存储图片:每个像素的RGB三原色进行存储音频:对声波图进行采样再存储希望这篇文章能帮到你!Java专栏在不断更新中,欢迎订阅!原创 2023-03-03 15:48:48 · 699 阅读 · 5 评论 -
【Java|多线程与多并发】PCB和进程调度的基本过程
进程是正在运行的程序的实例(an instance of a computer program that is being executed)进程(process)也叫任务(task)。如果想看电脑的进程,可以按 ctrl + alt + delete 调出任务管理器。进程是重要的”软件资源“,由操作系统内核来负责管理,这里的管理就是描述+组织描述:使用C语言的结构体来描述进程,这里的结构体也叫PCB(进程控制块/进程管理块)组织:使用一个双向链表来把多个进程串在一起。原创 2022-11-21 10:34:50 · 1026 阅读 · 22 评论