Java
文章平均质量分 83
杰深入学习计算机
莫道桑榆晚,为霞尚满天。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Java 问题】基础——泛型
什么是泛型?Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。泛型一般有三种使用方式:泛型类、泛型接口、泛型方法。1.泛型类:2.泛型接口 :3. 泛型方法泛型常用的通配符有哪些?常用的通配符为: T,E,K,V,??表示不确定的 java 类型T (type) 表示具体的一个 java 类型。原创 2024-10-08 17:01:46 · 417 阅读 · 0 评论 -
【Java 问题】集合——Map
将元素放在table数组上面,是用hash值%数组大小定位位置,而HashMap是用hash值&(数组大小-1),却能和前面达到一样的效果,这就得益于HashMap的大小是2的倍数,2的倍数意味着该数的二进制位只有一位为1,而该数-1就可以得到二进制位上1变成0,后面的0变成1,再通过&运算,就可以得到和%一样的效果,并且位运算比%的效率高得多。阈值为什么要选8呢?理想情况下,使用随机哈希码,链表里的节点符合泊松分布,出现节点个数的概率是递减的,节点个数为8的情况,发生概率仅为0.00000006。原创 2024-10-21 15:21:56 · 734 阅读 · 0 评论 -
【Java 问题】集合——List
ArrayList是基于数组的集合,数组的容量是在定义的时候确定的,如果数组满了,再插入,就会数组溢出。ArrayList的序列化不太一样,它使用 transient 修饰存储元素的 elementData 的数组, transient 关键字的作用是让被修饰的成员属性不被序列化。出于效率的考虑,数组可能长度100,但实际只用了50,剩下的50不用其实不用序列化,这样可以提高序列化和反序列化的效率,还可以节省内存空间。ArrayList的扩容是创建一个1.5倍的新数组,然后把原数组的值拷贝过去。原创 2024-10-10 09:04:27 · 1583 阅读 · 0 评论 -
【Java 问题】基础—— jdk1.8 新特性
当我们定义了 一个方法,这个方法返回的对象可能是空,也有可能非空的时候,我们就可以考虑用 Optional 来包装它,这也是在 Java 8 被推荐使用的做法。Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。Stream 流,简单来说,使用 java.util.Stream 对一个包含一个或多个元素的集合做各种操作。count 是一个终端操作,它能够统计 stream 流中的元素总数,返回值是 long 类型。原创 2024-10-08 17:29:28 · 1037 阅读 · 0 评论 -
【Java 问题】基础——反射
什么是反射?我们通常都是利用 new 方式来创建对象实例,这可以说就是一种“正射”,这种方式在编译时候就确定了类型信息。而如果,我们想在时候动态地获取类信息、创建类实例、调用类方法这时候就要用到反射。通过反射你可以获取任意一个类的所有属性和方法,你还可以调用这些方法和属性。反射最核心的四个类:反射的应用场景?一般我们平时都是在在写业务代码,很少会接触到直接使用反射机制的场景。但是,这并不代表反射没有用。相反,正是因为反射,你才能这么轻松地使用各种框架。原创 2024-10-08 17:15:47 · 455 阅读 · 0 评论 -
【Java 问题】基础——注解
再比如 Spring 常见的 Autowired ,就是 RUNTIME 的,所以在运行的时候可以通过反射得到注解的信息,还能拿到标记的值 required。Java注解本质上是一个标记,可以理解成生活中的一个人的一些小装扮,比如戴什么什么帽子,戴什么眼镜。例如我们常见的AOP,使用注解作为切点就是运行期注解的应用;有了标记之后,我们就可以在编译或者运行阶段去识别这些标记,然后搞一些事情,这就是注解的用处。所以我上文写的是解析的时候,没写具体是解析啥,因为不同的生命周期的解析动作是不同的。原创 2024-10-08 17:11:01 · 336 阅读 · 0 评论 -
【Java 问题】基础——序列化
什么是序列化,序列化就是把Java对象转为二进制流,方便存储和传输。所以反序列化就是把二进制流恢复成对象。类比我们生活中一些大件物品的运输,运输的时候把它拆了打包,用的时候再拆包组装。Serializable接口有什么用?这个接口只是一个标记,没有具体的作用,但是如果不实现这个接口,在有些序列化场景会报错,所以一般建议,创建的JavaBean类都实现 Serializable。serialVersionUID 又有什么用?serialVersionUID 就是起验证作用1。原创 2024-10-08 16:22:53 · 1211 阅读 · 0 评论 -
【Java 问题】基础——IO
装饰器模式的关键优点是它提供了比继承更灵活的扩展功能的方式。通过使用装饰器,可以动态地添加或删除功能,而不需要修改现有代码。Java IO体系中的装饰器模式允许开发者根据需要组合不同的流来创建具有复杂功能的流处理管道。原创 2024-09-26 14:57:24 · 1278 阅读 · 0 评论 -
【Java 问题】基础——异常
Throwable 又分为 Error 和 Exception ,其中Error是系统内部错误,比如虚拟机异常,是程序无法处理的。但其实,在执行 finally 之前,JVM 会先将 i 的结果暂存起来,然后 ϐ inally 执行完毕后,会返回之前暂存的结果,而不是返回 i,所以即使 i 已经被修改为 3,最终返回的还是之前暂存起来的结果 2。ϐ inally 的基础用法,在 return 前会先执行 ϐ inally 语句块,所以是先输出finally 里的 3,再输出 return 的 1。原创 2024-09-26 14:39:42 · 413 阅读 · 0 评论 -
【Java 问题】基础——常用类
因为根据实践发现大部分的数据操作都集中在值比较小的范围,因此 Integer 搞了个缓存池,默认范围是 -128 到 127,可以根据通过设置 JVM-XX:AutoBoxCacheMax= 来 修改缓存的最大值,最小值改不了。如果整型字面量的值在-128到127之间,那么自动装箱时不会new新的Integer对象,而是直接引用缓存池中的Integer对象,超过范围 a1==b1的结果是false。如果拼接多次,那么会生成多个中间对象。String的确是不可变的,“+”的拼接操作,其实是会生成新的对象。原创 2024-09-26 11:32:10 · 1077 阅读 · 0 评论 -
【Java 问题】基础——面相对象
方法实现: 接口中的方法默认是公开的(public), 并且不能有任何实现. 从 Java8 开始, 接口中的方法可以有默认实现, 而抽象类可以包含非抽象的方法.变量: 接口中只能包含静态(static)和常量(final)变量, 不能有其他类型的变量. 而抽象类中可以包含任意类型的变量.实现: 一个类可以实现多个接口, 但只能继承一个抽象类. 接口自身可以通过 extends 关键字扩展多个接口。原创 2024-09-25 22:05:20 · 1098 阅读 · 0 评论 -
【Java 问题】基础——基础语法
装箱: 将基本类型用它们对应的引用类型包装起来;拆箱: 将包装类型转换为基本数据类型;// 自动封箱,将整数10赋值给Integer对象// 自动拆箱,将Integer对象的值转换为int类型Java可以自动对基本数据类型和它们的包装类进行装箱和拆箱。自动拆箱和自动装箱使得基本数据类型和包装类之间的转换更加方便, 提高了代码的简洁性和可读性. 它们是 Java 语言中的语法糖, 由编译器在编译时进行相应的转换.原创 2024-09-24 17:14:00 · 693 阅读 · 0 评论 -
【Java 问题】基础——Java 概述
Java 是一门面向对象的编程语言, 不仅吸收了 C++ 语言的各种优点, 还摒弃了 C++ 里难以理解的多继承、指针等概念,因此Java 语言具有功能强大和简单易用两个特征。Java 语言作为静态面向对象编程语言的有限代表,几号地实现了面向对象理论,运行程序员以优雅的思维方式进行复杂的编程。所谓跨平台性,是指 Java 语言编写的程序,一次编译后,可以在多个系统平台上运行。原创 2024-09-23 15:01:45 · 762 阅读 · 0 评论 -
【Java & 多线程 & 哈希表】 HashTable, HashMap, ConcurrentHashMap 之间的区别
HashTable、HashMap和ConcurrentHashMap都是Java中用于存储键值对的集合框架的一部分,但它们之间存在一些重要的联系和区别。原创 2024-03-14 16:45:31 · 292 阅读 · 0 评论 -
【Java & 多线程】synchronized优化的过程
如果后续有其他线程来竞争该所(刚才已经在锁对象中记录了当前锁属于哪个线程了,很容易识别当前申请锁的线程是不是之前记录的线程), 那就取消原来的偏向锁状态, 进入一般的轻量级锁状态。JVM 将 synchronized锁分为 无锁,偏向锁,轻量级锁,重量级锁,会依据情况来进行锁的升级。偏向锁不是真的 “加锁”, 只是给对象头中做一个偏向锁的标记, 记录这个锁属于哪个线程。随着其他线程进入竞争, 偏向锁状态被消除, 进入轻量级锁状态(自适应的自旋锁)编译器+JVM 判断锁是否可消除. 如果可以, 就直接消除.原创 2024-03-14 14:58:17 · 433 阅读 · 0 评论 -
【Java & 多线程】synchronized 和 死锁问题
死锁是多线程编程中的一种常见问题, 它发生在两个或多个线程永久性地阻塞, 每个线程等待其他线程释放锁, 但这些锁又被其他线程持有, 导致没有线程能够继续执行, 形成了一个闭环的等待的关系。通过理解死锁的成因,我们可以采取相应的策略来避免或解决死锁。在设计多线程程序时,合理地管理锁和资源,遵循锁的使用规范,可以大大降低死锁发生的可能性。通过以上对synchronized的特性、使用和锁机制的总结,我们可以更好地理解和使用synchronized来实现线程同步,从而避免并发中的线程安全问题。原创 2024-03-13 14:12:43 · 953 阅读 · 0 评论 -
【JavaEE & Spring & 项目】消息队列的设计
其中, Broker 是最核⼼的部分. 负责消息的存储和转发.关系结构图这些概念, 既需要在内存中存储, 也需要在硬盘上存储.对于 Broker 来说, 要实现以下核心 API, 通过这些 API 来实现消息队列的基本功能另⼀⽅⾯, Producer 和 Consumer 则通过⽹络的⽅式, 远程调⽤这些 API, 实现 ⽣产者消费者模型.对于 RabbitMQ 来说, 主要支持四种交换机类型其中 Header 这种⽅式⽐较复杂, ⽐较少⻅. 常⽤的是前三种交换机类型. 此处也主要实现这三种.Exchan原创 2024-03-12 10:58:47 · 677 阅读 · 0 评论 -
【JavaEE & Spring & 项目】在线 OJ 系统
项目的基本需求题目列表页题目详情页``代码编辑框提交给服务器编译运行展示结果利用了多进程编程, 基于多进程编程(Runtime) 封装了一个 CommandUtils 类, 就可以创建进程执行一个具体的任务, 同时把输出结果记录到指定的文件中;创建了一个 Task 类, 调用 CommandUtils 封装了一个 完整的 “编译-运行” 过程, 后面又给 Task 类扩充了一个基于黑名单的安全代码校验设计了数据库, 封装了数据库操作, OJInfo, OJMapper。原创 2024-02-24 18:32:20 · 1612 阅读 · 0 评论 -
【JavaEE & Spring】Spring 原理
Application scope就是对于整个web容器来说, bean的作⽤域是ServletContext级别的. 这个和singleton有点类似,区别在于: Application scope是ServletContext的单例, singleton是⼀个ApplicationContext的单例. 在⼀个web容器中ApplicationContext可以有多个. (了解即可)默认情况下, Spring容器中的bean都是单例的, 这种⾏为模式, 我们就称之为Bean的作⽤域.原创 2024-02-07 14:21:38 · 1755 阅读 · 0 评论 -
【JavaEE & Spring & 项目】博客系统
使⽤SSM框架实现⼀个简单的博客系统共5个⻚⾯⽤⼾登录博客发表⻚博客编辑⻚博客列表⻚博客详情⻚⽤⼾登录成功后, 可以查看所有⼈的博客. 点击 可以查看该博客的正⽂内容. 如果该博客作者为当前登录⽤⼾, 可以完成博客的修改和删除操作, 以及发表新博客⻚⾯预览⽤⼾登录博客列表⻚博客详情⻚博客发表/修改⻚JWT全称: JSON Web Token官⽹: https://jwt.io/JWT组成。原创 2024-02-05 14:13:37 · 4519 阅读 · 0 评论 -
【JavaEE & Spring】Spring事务和事务传播机制
事务是⼀组操作的集合,是⼀个不可分割的操作.事务会把所有的操作作为⼀个整体,⼀起向数据库提交或者是撤销操作请求.所以这组操作要么同时成功,要么同时失败.事务传播机制就是:多个事务⽅法存在调⽤关系时,事务是如何在这些⽅法间进⾏传播的.⽐如有两个⽅法A,B都被@Transactional 修饰, A⽅法调⽤B⽅法A⽅法运⾏时,会开启⼀个事务.当A调⽤B时,B⽅法本⾝也有事务,此时B⽅法运⾏时,是加⼊A的事务,还是创建⼀个新的事务呢?这个就涉及到了事务的传播机制.原创 2024-02-03 13:26:32 · 1216 阅读 · 0 评论 -
【JavaEE & Spring】Spring AOP
AOP是Spring框架的第⼆⼤核⼼(第⼀⼤核⼼是IoC)什么是 AOP?AspectOrientedProgramming(⾯向切⾯编程)什么是⾯向切⾯编程呢?切⾯就是指某⼀类特定问题,所以AOP也可以理解为⾯向特定⽅法编程.简单来说: AOP是⼀种思想是对某⼀类事情的集中处理什么是SpringAOP?AOP是⼀种思想,它的实现⽅法有很多,有SpringAOP,也有AspectJ、CGLIB等.AOP就可以做到在不改动这些原始⽅法的基础上,针对特定的⽅法进⾏功能的增强.原创 2024-02-01 15:47:42 · 1282 阅读 · 0 评论 -
【JavaEE & spring】SpringBoot 统一功能处理
统⼀的数据返回格式使⽤ @ControllerAdvice 和 ResponseBodyAdvice 的⽅式实现@ControllerAdvice 表⽰控制器通知类添加类 ResponseAdvice , 实现 ResponseBodyAdvice 接⼝, 并在类上添加@ControllerAdvice 注解@Override@Override。原创 2024-01-31 13:33:46 · 1424 阅读 · 0 评论 -
【JavaEE & Spring】MyBatis 操作数据库 - 进阶
之前的插⼊⽤⼾功能,只是有⼀个 gender 字段可能是选填项,如果有多个字段,⼀般考虑使⽤标签结合标签,对多个字段都采取动态⽣成的⽅式。我们可以对重复的代码⽚段进⾏抽取,将其通过 标签封装到⼀个SQL⽚段,然后再通过 标签进⾏引⽤。注册分为两种字段:必填字段和⾮必填字段,那如果在添加⽤⼾的时候有不确定的字段传⼊,程序应该如何实现呢?在xml映射⽂件中配置的SQL,有时可能会存在很多重复的⽚段,此时就会存在很多冗余的代码。对集合进⾏遍历时可以使⽤该标签。原创 2024-01-23 15:32:31 · 690 阅读 · 0 评论 -
【JavaEE & Spring】MyBatis 操作数据库(基础操作)
MyBatis是⼀款优秀的 持久层 框架,⽤于简化JDBC的开发。MyBatis 官网介绍持久层:指的就是持久化操作的层, 通常指数据访问层(dao), 是⽤来操作数据库的.简单来说 MyBatis 是更简单完成程序和数据库交互的框架,也就是更简单的操作和读取数据库⼯具。原创 2024-01-23 14:22:34 · 1529 阅读 · 0 评论 -
【JavaEE & Spring】SpringBoot 日志
为什么要学习日志对于平常来说, 我们就在使⽤来打印⽇志了随着项⽬的复杂度提升, 我们对⽇志的打印也有了更⾼的需求, ⽽不仅仅是定位排查问题.有时候我们需要将日志持久化, 进行对应的数据分析, 但是不能很好的满⾜我们的需求, 我们就需要使⽤⼀些专⻔⽇志框架(专业的事情交给专业的⼈去做).日志的用途通过前⾯的学习, 我们知道⽇志主要是为了发现问题, 分析问题, 定位问题的, 但除此之外, ⽇志还有很多⽤途系统监控数据采集⽇志审计SLF4J是⻔⾯模式的典型应⽤(但不仅仅使⽤了⻔⾯模式).原创 2024-01-21 00:14:39 · 1344 阅读 · 0 评论 -
【JavaEE & Spring】SpringBoot 配置文件
properties 是以 key = value 的形式配置的键值类型的配置文件, yml 使用的是树形配置方式.读取配置文件内容, 使用 @value 注解, 注解内使用 “${}” 的格式读取.yml 层级之间使用换行缩进的方式配置, key 和 value 之间使用 “:”(英文冒号) 加空格的方式设置, 并且空格不可省略.properties 为早期并且默认的配置文件格式, 其配置存在一定的冗余数据, 使用 yml 可以很好的解决冗余的问题, 但不适合复杂配置.原创 2024-01-20 16:14:13 · 1430 阅读 · 0 评论 -
【JavaEE】深入理解Java线程池- 多线程篇(12)
本文将对Java线程池的参数、工作流程以及使用Executors创建常见线程池进行详细总结,帮助读者深入理解线程池的概念和应用。corePoolSize: 核心线程数, 即始终存在的线程数量, 默认为0;maximumPoolSize: 最大线程数, 即当任务队列满时, 可创建的最大线程数量, 默认为Integer.MAX_VALUE.keepAliveTime:线程的空闲时间,即当线程数大于核心线程数时,多余的空闲线程在终止前等待新任务的最大时间,默认为60秒。原创 2024-01-07 00:00:35 · 530 阅读 · 0 评论 -
【JavaEE】总结线程安全问题的原因和解决方案- 多线程篇(11)
线程安全问题通常发生在多线程环境中,当多个线程尝试同时访问和修改共享资源时,可能会导致数据不一致、竞态条件、死锁等问题。原创 2024-01-06 23:42:53 · 452 阅读 · 0 评论 -
【JavaEE】Java多线程状态-- 多线程篇(10)
线程相关的概念原创 2024-01-06 22:28:45 · 556 阅读 · 0 评论 -
【JavaEE&Spring】Spring, Spring Boot 和Spring MVC的关系以及区别
Spring Boot是对Spring的一个封装, 为了简化Spring应用的开发而出现的, 中小型企业, 没有成本研究自己的框架, 使用 Spring Boot 可以更加快速的搭建框架, 降低开发成本, 让开发人员更加专注于Spring应用的开发, 而无需过多关注xml配置和一些底层的实现。最后⼀句话总结: Spring MVC和Spring Boot都属于Spring,Spring MVC 是基于Spring的⼀个MVC 框架,⽽Spring Boot 是基于Spring的⼀套快速开发整合包.原创 2023-11-09 17:03:44 · 308 阅读 · 0 评论 -
【JavaEE&Spring】Spring IoC&DI
IoC 是⼀种思想,也是"⽬标", ⽽思想只是⼀种指导原则,最终还是要有可⾏的落地⽅案,⽽ DI 就属于具体的实现。所以也可以说, DI 是IoC的⼀种实现.IoC: Inversion of Control (控制反转), 也就是说 Spring 是⼀个"控制反转"的容器。当同⼀类型存在多个bean时, 使⽤@Autowired会存在问题。@Autowird 与 @Resource的区别。这种场景, 我们就需要使⽤⽅法注解 @Bean。为什么要这么多类注解?bean 的命名规则。方法注解 @Bean。原创 2023-11-09 16:46:50 · 236 阅读 · 0 评论 -
【JavaEE&Spring】Spring Web MVC⼊⻔
MVC 是 Model View Controller 的缩写它是软件⼯程中的⼀种软件架构设计模式,它把软件系统分为模型、视图和控制器三个基本部分View(视图) 指在应用程序中专门用来与浏览器进行交互, 展示数据的资源Model(模型) 是应用程序的主体部分, 用来处理程序中数据逻辑的部分Controller(控制器) 可以理解为一个分发器, 用来决定对于视图发来的请求, 需要用哪一个模型来处理, 以及处理完成后需要跳到哪一个视图;即用来连接视图和模型。原创 2023-11-09 16:07:51 · 775 阅读 · 0 评论 -
【JavaEE&Spring】认识Spring
框架(Framework) ,意思是框架、机制、准则。通俗的来讲: 框架是实现某种功能的半成品, 他提供了⼀些常⽤的⼯具类, 我们在框架的基础上, 可以更加⾼效的进⾏开发后端框架: Spring, SpringBoot, Mybatis等前端常⽤的框架:Vue、Node这些框架都有⼀个共同的特点,就是简单、⾼效,这极⼤的提⾼了我们的开发效率.Spring让Java程序更加快速, 简单和安全. Spring对于速度、简单性和⽣产⼒的关注使其成为世界上最流⾏的Java框架。原创 2023-11-09 15:18:28 · 386 阅读 · 0 评论 -
【JavaEE】JVM 剖析
对于java来说, 回收其实是 “对象” 而不是 “字节”, GC 并非判定几个字节是不是垃圾, 进一步的进行回收的。一个基本的"经验规律"(通过实验观察, 总结出来的规律) : 一个东西存在的越久, 继续存在的可能性就很高。每一轮 GC 留下的有效对象都不多, 复杂算法的开销不大。Java中对象的年龄是依据 GC 扫描次数来增长的, 挺过一次扫描就增长一次。JVM 中有好几个内存区域, GC 回收的是哪里的对象?类加载的之后, 就不需要再次加载了;按照对象的年龄来指定不同的回收策略。原创 2023-11-04 16:59:17 · 648 阅读 · 0 评论 -
【JavaEE】cookie和session
cookie的数据从哪里来?服务器返回给浏览器的cookie的数据长什么样?cookie 中是键值对结构的数据, 并且这里的键值对都是程序员自己定义的cookie的作用是什么?cookie就可以在浏览器这边存储一些 “临时性的数据”其中最典型的一种使用方式, 就是用来存储 “身份标识” – sessionIDcookie 到哪里去?cookie的内容会在下次访问该网站的时候, 自动被带到HTTP请求中cookie 怎么存?原创 2023-10-31 18:09:43 · 554 阅读 · 0 评论 -
【JavaEE】表白墙案例 -- 前后端的交互过程
通过前后端的配合, 即可完成想要的效果, 但是还有数据永久性的问题(此时后端只是将数据存储在了内存), 想要持久化, 需要搭配数据库。对于上述的方法, 都可以使用, 具体使用哪个不重要, 重要的是双方要约定好使用统一的格式!通常都是使用 json 格式来组织数据~调整 pom.xml。原创 2023-10-31 10:43:02 · 169 阅读 · 0 评论 -
【JavaEE】HTTP协议
平时我们俗称的 “网址” 其实就是说的 URL (Uniform Resource Locator 统一资源定位符).互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它分析具体的URL :https: 协议方案名v.bite.vip : 表示的是域名, 域名通过DNS服务器解析成IP地址端口号: 如果未显示说明, 就会根据协议方案来确定端口号 , 这里会https的端口号就是443, 如果是http就是80端口号。原创 2023-10-29 01:12:10 · 588 阅读 · 0 评论 -
【JavaEE】Java的文件IO
Java 中通过 java.io.File 类来对一个文件(包括目录)进行抽象的描述。原创 2023-10-22 20:17:47 · 468 阅读 · 0 评论 -
【JavaEE】线程安全的集合类 -- 多线程篇(9)
相比于 Hashtable 做出了一系列的改进和优化. 以 Java1.8 为例。只是简单的把关键方法加上了 synchronized 关键字.HashMap 本身不是线程安全的.原创 2023-10-21 23:17:57 · 799 阅读 · 0 评论
分享