杂项

简介: 本文介绍了依赖与继承的区别、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()

可进行复杂格式化

用于简单转换时显得冗余


相关文章
|
3月前
|
消息中间件 存储 缓存
再次了解kafka
Kafka通过offset机制解决消息重复消费问题,支持手动提交偏移量及唯一ID去重。它保证分区内的消息顺序消费,结合集群、副本与重平衡实现高可用。高性能设计包括顺序读写、分区、页缓存、零拷贝等。数据清理依赖保留时间或大小策略,点对点和发布订阅模式则通过消费者组实现。
|
3月前
|
消息中间件 NoSQL Java
延时实现
本节介绍了多种关闭过期订单的实现方案,包括定时任务、JDK延迟队列、Redis过期监听、Redisson延迟队列、RocketMQ延迟消息及RabbitMQ死信队列。各自优缺点明显,适用于不同业务场景,如定时任务适合小数据量,RocketMQ适合高并发解耦场景,而Redisson则使用简单且高效。选择时需综合考虑系统复杂度、数据量及可靠性要求。
|
3月前
|
存储 算法 Sentinel
熔断降级
本内容介绍了微服务中熔断降级的实现原理及Sentinel的底层机制。通过OpenFeign集成Sentinel,利用断路器统计异常和慢请求比例,触发熔断并降级,提升系统稳定性。还讲解了Sentinel使用的限流算法,如滑动窗口、令牌桶和漏桶算法,以应对不同场景下的流量控制需求。
|
3月前
|
负载均衡 网络性能优化
了解EMQ
EMQ通过MQTT协议的QoS机制保障消息可靠传输,支持QoS 0、1、2三个等级,分别实现消息最多一次、至少一次和恰好一次传递。对于延迟消息,EMQ X支持通过特殊主题前缀`$delayed/{DelayInterval}`实现延迟发布。点对点通信可通过不带群组的共享订阅(如`$queue/t/1`)实现,结合负载均衡策略如随机、轮询等,确保消息仅由一个订阅者接收;发布订阅模式则通过带群组的共享订阅(如`$share/组名称/t/1`)实现,确保每组一个订阅者收取消息。
|
3月前
|
XML JSON Java
Spring框架中常见注解的使用规则与最佳实践
本文介绍了Spring框架中常见注解的使用规则与最佳实践,重点对比了URL参数与表单参数的区别,并详细说明了@RequestParam、@PathVariable、@RequestBody等注解的应用场景。同时通过表格和案例分析,帮助开发者正确选择参数绑定方式,避免常见误区,提升代码的可读性与安全性。
|
3月前
|
SQL JavaScript Java
三层架构理解(实现前后端分离)
本文介绍了三层架构实现前后端分离的流程,从前端Vue发起请求,到后端Spring处理数据,最后返回结果并由前端渲染展示。同时详细解析了Bean重复问题的解决方案,包括使用@Service、@Primary、@Qualifier和@Resource注解进行依赖注入控制。此外还介绍了MyBatis中#{}与${}的区别及使用场景,以及三层架构中各组件的协作方式。
|
3月前
|
负载均衡 Java Nacos
微服务架构中的服务注册与发现流程
本内容介绍了微服务架构中的服务注册与发现流程,包括服务注册中心(如Nacos)、服务提供者和调用者的角色分工。服务启动时自动注册信息至注册中心,调用者通过客户端负载均衡(如Spring Cloud Loadbalancer)选取服务实例进行远程调用。同时,内容还讲解了OpenFeign的工作原理,其作为HTTP客户端集成负载均衡,通过接口定义、代理生成、请求发送与结果解析,实现服务间的高效通信。
|
3月前
|
负载均衡 Java 应用服务中间件
杂项10
Spring Cloud Alibaba 与 Spring Cloud 均基于 Spring Boot 构建微服务,遵循相同规范且组件可协同使用。区别在于,Spring Cloud Alibaba 使用 Nacos 实现服务发现与配置管理,推荐 Sentinel 作为断路器,并支持 Dubbo 与 Feign 远程调用。Nginx 可通过配置 upstream 实现负载均衡,作为反向代理,其“反向”体现在外网通过 Nginx 访问内部服务器。
|
3月前
|
存储 NoSQL 算法
Redis的集群架构与使用经验
本文介绍了Redis的集群架构与使用经验,包括主从复制、哨兵集群及Cluster分片集群的应用场景与实现原理。内容涵盖Redis主从同步机制、数据分片存储方式、事务支持及与Memcached的区别,并讨论了Redis内存用尽时的处理策略。适用于了解Redis高可用与性能优化方案。
|
3月前
|
XML Java Maven
@Bean`注解的使用方法及其作用
本文介绍了Spring框架中`@Bean`注解的使用方法及其作用,包括如何将第三方类库加入Spring容器,配置类与`@Configuration`的配合使用,以及通过`@ConditionalOnClass`、`@ConditionalOnMissingBean`等条件注解控制Bean的加载。同时讲解了Maven父子模块间的依赖关系及配置方式,帮助开发者更好地管理项目结构与依赖注入。