杂项

简介: 本文介绍了依赖与继承的区别、Lombok 使用、TreeMap 与 TreeSet 的比较输出机制、哈希码生成方式、TreeSet 排序原理、Java 流操作注意事项、类型转换问题及解决方案等内容,涵盖 Java 开发中的常见知识点与实践技巧。

依赖和继承的区别

  • 依赖:工程间的 “功能复用”,通过调用其他工程的 public 代码实现,是业务逻辑层面的关联。
  • 继承(父工程):工程间的 “配置复用”,通过统一管理配置简化维护,是构建层面的关联
  • 并且使用版本锁定(dependencyManagement)中父工程只是为了声明版本,做版本的控制,只有当子工程显示引入,才会下载道maven仓库
  • 子工程模块更像是项目内部的 "业务组件",负责封装特定业务逻辑;而第三方依赖(比如lomnok)更像是 "基础设施工具",提供通用能力。两者相辅相成:

1.lomdbk使用

lombdk导入,项目工程要导入,运行的模块也要导入

2.treemap与treeset在进行比较输出时

如果比较的对象相同,会默认把靠后的给输出时给删除

原因:在存储map是用对象作为键,则当利用键的某个属性进行比对时,默认会把这个属性作为键,所以碰到相同的,会进行覆盖

3.整型的hashcod就是整型值?,hashcode是如何生成的

integer的对应对象的值就是其哈希值

类类型

哈希码生成依据

示例

默认(Object)

内存地址

new Object().hashCode()

包装类

内部值

Integer.valueOf(42).hashCode() → 42

String

字符序列

"abc".hashCode() → 96354

自定义类

关键属性组合(重写)

Objects.hash(name, age)

4.treeSet排序字符串怎么排序

大概率看首字母,可自定义compare进行比较

5.treeset排序的原理

调用compardto或者自定义实现,默认是升序

6.重写形参类型是父类,重写也必须是父类,类型要保持一致??

方法重写(Override)要求子类方法的参数类型必须与父类方法完全一致

如果参数类型发生变化,会被认为是重载

7.使用流之后要有一个对象去承接,不然等于没有操作;使用流操作完返回的是流,要进行转换

示例:

Stream.concat(play2.stream(), l1.stream().skip(l1.size() - 3))

错误1:仅仅对对流进行了合并,结果仍然是流,未用对应属性对象去承接,

在输出打印play2无任何变化

Stream.concat(play2.stream(), l1.stream().skip(l1.size() - 3)).toList();

错误2:使用tolist方法转化为list集合,但是结果依旧没有保存

正确写法:

play2 = Stream.concat(play2.stream(), l1.stream().skip(l1.size() - 3)).toList();

更改了play2

8.

  • TreeSet:构造时必须指定排序规则(Comparator Comparable),插入元素时自动排序。
  • 默认必须调用
  • ArrayList:构造时无需排序规则,需要排序时手动调用 sort() 方法。

9.sort(null)含义

  • 自然排序:使用元素类型(这里是 Student实现的 Comparable 接口中的 compareTo 方法进行排序。
  • 要求:元素类型必须实现 Comparable 接口,否则会抛出 ClassCastException
l1.sort(null); // 等价于 l1.sort(Comparator.naturalOrder());

10.int转化为string 使用(string)int不行,解决方案

原因:int 是基本类型,与 String 没有继承关系,因此无法直接强制转换

Java 的强制类型转换仅适用于具有继承关系的引用类型,不能用于基本类型和引用类型之间。

public class Main {
    public static void main(String[] args) {
        // 方法1
        int num1 = (int)(Math.random()*33+1);
        String str1 = String.valueOf(num1);
        System.out.println("方法1: " + str1);
        // 方法2
        int num2 = (int)(Math.random()*33+1);
        String str2 = Integer.toString(num2);
        System.out.println("方法2: " + str2);
        // 方法3
        String str3 = "" + (int)(Math.random()*33+1);
        System.out.println("方法3: " + str3);
        // 方法4
        String str4 = String.format("%d", (int)(Math.random()*33+1));
        System.out.println("方法4: " + str4);
    }
}

方法

优点

缺点

String.valueOf()

简洁明了,不易出错

无明显缺点

Integer.toString()

明确是类型转换操作

需要先声明整数变量

字符串连接

无需调用方法,代码更简短

性能略低,可能降低可读性

String.format()

可进行复杂格式化

用于简单转换时显得冗余


相关文章
|
11月前
|
消息中间件 NoSQL Java
延时实现
本节介绍了多种关闭过期订单的实现方案,包括定时任务、JDK延迟队列、Redis过期监听、Redisson延迟队列、RocketMQ延迟消息及RabbitMQ死信队列。各自优缺点明显,适用于不同业务场景,如定时任务适合小数据量,RocketMQ适合高并发解耦场景,而Redisson则使用简单且高效。选择时需综合考虑系统复杂度、数据量及可靠性要求。
|
11月前
|
消息中间件 网络性能优化
了解MQ
消息堆积处理核心在于平衡生产与消费速度,可通过限流生产、优化消费者处理能力及异步机制缓解。RabbitMQ通过持久化、确认机制保障消息可靠性,MQTT则依赖QoS等级确保传输。延迟消息常用死信队列实现,而幂等性可通过唯一ID避免重复消费。MQ广泛用于异步处理、系统解耦及分布式事务等场景。
|
11月前
|
存储 算法 Sentinel
熔断降级
本内容介绍了微服务中熔断降级的实现原理及Sentinel的底层机制。通过OpenFeign集成Sentinel,利用断路器统计异常和慢请求比例,触发熔断并降级,提升系统稳定性。还讲解了Sentinel使用的限流算法,如滑动窗口、令牌桶和漏桶算法,以应对不同场景下的流量控制需求。
|
11月前
|
负载均衡 网络性能优化
了解EMQ
EMQ通过MQTT协议的QoS机制保障消息可靠传输,支持QoS 0、1、2三个等级,分别实现消息最多一次、至少一次和恰好一次传递。对于延迟消息,EMQ X支持通过特殊主题前缀`$delayed/{DelayInterval}`实现延迟发布。点对点通信可通过不带群组的共享订阅(如`$queue/t/1`)实现,结合负载均衡策略如随机、轮询等,确保消息仅由一个订阅者接收;发布订阅模式则通过带群组的共享订阅(如`$share/组名称/t/1`)实现,确保每组一个订阅者收取消息。
|
11月前
|
SQL XML 安全
初识MP
本文介绍了 MyBatis-Plus 在复杂应用中的使用技巧,涵盖条件构造器(如 QueryWrapper、UpdateWrapper 及其 Lambda 表达式版本)、自定义 SQL 的优化方式,以及分页和多表查询的处理方法。重点比较了 LambdaQueryWrapper 与 QueryWrapper 的适用场景,推荐单表操作优先使用 Lambda 方式以提升类型安全性,而多表联查则更适合使用 QueryWrapper 的灵活性。同时,通过示例说明了如何结合 Wrapper 与自定义 SQL 来构建高效、可维护的数据库操作逻辑。
|
11月前
|
SQL Java 数据库连接
了解ORM
MyBatis与MyBatis-Plus区别在于:MyBatis是半自动ORM框架,需手动编写SQL,适合复杂查询场景;而MyBatis-Plus是其增强工具,提供零SQL的CRUD操作,简化开发流程,适用于简单增删改查场景,提升开发效率。
|
11月前
|
Docker 容器
初始ollama
Ollama 按需加载模型,不持续运行,闲置时自动卸载,节省内存。模型响应请求时驻留内存,保留时间由 OLLAMA_KEEP_ALIVE 控制。类似 Docker 部署方式,但无单模型启停命令,默认时间内自动停止。可间接通过停止服务或配置多端口实现管理。
|
11月前
|
SQL JavaScript Java
三层架构理解(实现前后端分离)
本文介绍了三层架构实现前后端分离的流程,从前端Vue发起请求,到后端Spring处理数据,最后返回结果并由前端渲染展示。同时详细解析了Bean重复问题的解决方案,包括使用@Service、@Primary、@Qualifier和@Resource注解进行依赖注入控制。此外还介绍了MyBatis中#{}与${}的区别及使用场景,以及三层架构中各组件的协作方式。
|
11月前
|
JSON JavaScript 前端开发
初识别三层架构
本文介绍了三层架构在Web开发中的工作流程,从前端请求到后端处理,再到数据返回与页面渲染,详细解析了客户端、Controller、Service、Dao各层之间的调用关系及前后端交互过程。
|
11月前
|
前端开发 JavaScript Java
MVVM 状态管理
MVVM 实现数据驱动视图,通过 ViewModel 自动更新 View,支持双向绑定,生命周期管理控制流程。async/await 使异步代码更接近同步结构,提升可读性与调试效率。