- 博客(17)
- 收藏
- 关注
原创 java多线程(一)
正确的场景应该是 WaitSet中等待的是相同的条件,唤醒任一个都能正确处理接下来的事项,如果唤醒的线程无法正确处理,务必确保继续notify()下一个线程,并且自身需要重新回到WaitSet中.当你调用run()方法的时候,只会是在原来的线程中调用,没有新的线程启动,start()方法才会启动新线程。wait() 应配合while循环使用,不应使用if,务必在wait()调用前后都检查条件,如果不满足,必须调用notify()唤醒另外的线程来处理,自己继续wait()直至条件满足再往下执行。
2025-01-03 21:42:14
892
原创 java集合(二)
1、位运算效率更高:位运算(&)比取余运算(%)更高效。当长度为 2 的幂次方时,hash % length 等价于 hash & (length - 1)。2、可以更好地保证哈希值的均匀分布:扩容之后,在旧数组元素 hash 值比较均匀的情况下,新数组元素也会被分配的比较均匀,最好的情况是会有一半在新数组的前半部分,一半在新数组后半部分。扩容机制变得简单和3、高效:扩容后只需检查哈希值高位的变化来决定元素的新位置,要么位置不变(高位为 0),要么就是移动到新位置(高位为 1,原索引位置+原容量)
2024-12-29 19:40:18
866
原创 java集合(一)
这时,Java 集合就派上用场了。LinkedList 采用链表存储,所以在头尾插入或者删除元素不受元素位置的影响(add(E e)、addFirst(E e)、addLast(E e)、removeFirst()、 removeLast()),时间复杂度为 O(1),如果是要在指定位置 i 插入和删除元素的话(add(int index, E element),remove(Object o),remove(int index)), 时间复杂度为 O(n) ,因为需要先移动到指定位置再插入和删除。
2024-12-26 20:06:30
801
原创 java基础(六)
如果我们需要持久化 Java 对象比如将 Java 对象保存在文件中,或者在网络传输 Java 对象,这些场景都需要用到序列化。简单来说:序列化:将数据结构或对象转换成可以存储或传输的形式,通常是二进制字节流,也可以是 JSON, XML 等文本格式反序列化:将在序列化过程中所生成的数据转换为原始数据结构或者对象的过程。
2024-12-20 21:56:17
773
原创 java基础(五)
Java 泛型(Generics) 是 JDK 5 中引入的一个新特性。使用泛型参数,可以增强代码的可读性以及稳定性。编译器可以对泛型参数进行检测,并且通过泛型参数可以指定传入的对象类型。比如 ArrayList persons = new ArrayList() 这行代码就指明了该 ArrayList 对象只能传入 Person 对象,如果传入其他类型的对象就会报错。
2024-12-19 22:15:12
870
原创 java基础(四)
1、保存字符串的数组被 final 修饰且为私有的,并且String 类没有提供/暴露修改这个字符串的方法。2、String 类被 final 修饰导致其不能被继承,进而避免了子类破坏 String 不可变。
2024-12-18 21:45:44
477
原创 java基础(二)
继承是使⽤已存在的类的定义作为基础 建⽴新类的技术,新类的定义可以增加新的数据或新的功能,也可以⽤⽗类的功能,但不能选择性地 继承⽗类。如果我们⾃⼰添加了类的构造⽅法(⽆论是否有参),Java 就不会再添加默认的⽆ 参数的构造⽅法了,我们⼀直在不知不觉地使⽤构造⽅法,这也是为什么我们在创建对象的时候后⾯ 要加⼀个括号(因为要调⽤⽆参的构造⽅法)。⼦类可以⽤⾃⼰的⽅式实现⽗类的⽅法。如果⼦类重写了⽗类的⽅法,真正执⾏的是⼦类覆盖的⽅法,如果⼦类没有覆盖⽗类的⽅法,执⾏的是⽗类的⽅法。
2024-12-16 22:02:15
891
原创 java基础(三)
继承是使⽤已存在的类的定义作为基础 建⽴新类的技术,新类的定义可以增加新的数据或新的功能,也可以⽤⽗类的功能,但不能选择性地 继承⽗类。如果我们⾃⼰添加了类的构造⽅法(⽆论是否有参),Java 就不会再添加默认的⽆ 参数的构造⽅法了,我们⼀直在不知不觉地使⽤构造⽅法,这也是为什么我们在创建对象的时候后⾯ 要加⼀个括号(因为要调⽤⽆参的构造⽅法)。⼦类可以⽤⾃⼰的⽅式实现⽗类的⽅法。如果⼦类重写了⽗类的⽅法,真正执⾏的是⼦类覆盖的⽅法,如果⼦类没有覆盖⽗类的⽅法,执⾏的是⽗类的⽅法。
2024-12-13 20:44:42
852
原创 java基础(一)
在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的⽂件),它不⾯向任何特定 的处理器,只⾯向虚拟机。Java 语⾔通过字节码的⽅式,在⼀定程度上解决了传统解释型语⾔执⾏ 效率低的问题,同时⼜保留了解释型语⾔可移植的特点。所以, Java 程序运⾏时相对来说还是⾼效 的(不过,和 C++,Rust,Go 等语⾔还是有⼀定差距的),⽽且,由于字节码并不针对⼀种特定的 机器,因此,Java 程序⽆须重新编译便可在多种不同操作系统的计算机上运⾏。
2024-12-12 22:09:38
445
原创 Mybatis的一对多与多对一
一、Mybatis一对多与多对一XML映射器MyBatis 的真正强大在于它的语句映射,这是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 致力于减少使用成本,让用户能更专注于 SQL 代码。resultMapresultMap 元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并
2020-07-09 15:39:27
865
原创 Mybatis01-初识Mybatis
一、简介什么是Mybatis?MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。Mybatis框架1、在我们学习Java基础的时候我们那时候学的是通过jdbc来操作数据库,但是操作的代码是否的繁琐
2020-06-06 14:44:17
440
原创 Spring:DI(依赖注入)
Spring之DI(依赖注入)1、DI(依赖注入)解释Spring官网上的解释为:依赖注入(DI)是一个过程,通过该过程,对象仅通过构造函数参数,工厂方法的参数或在构造或创建对象实例后在对象实例上设置的属性来定义其依赖关系(即,与它们一起工作的其他对象)。从工厂方法返回。然后,容器在创建bean时注入那些依赖项。此过程从根本上讲是通过使用类的直接构造或服务定位器模式来控制bean自身依赖关系的实例化或位置的bean本身的逆过程(因此称为Control Inversion)。是不是看着官网的解释
2020-05-16 11:10:56
574
原创 第一个Spring程序:HelloSpring
HelloSpring1、导入Spring依赖 <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifact
2020-05-15 17:04:08
226
原创 初学spring
初学spring认识springSpring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。上面是官网的解释,简单来说S...
2020-05-07 16:32:50
176
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人