杂项3

简介: 本内容为Java编程相关知识点整理,涵盖集合遍历、动态代理、网络编程、多线程、注解、IO流操作及POJO、DTO、VO的区别等内容,适合开发者学习与参考。

o.get理解

Set<Map.Entry<String, Integer>> entries = m1.entrySet();
for (Map.Entry<String, Integer> entry : entries) {
    entry.getValue()+entry.getKey()
}

hashmap的遍历

Map.Entry<String, Integer>这是set集合的泛型,entries是set类型,键值对集合,entry是Entry类型这个类型的内容就是个键值对

Optional<Map.Entry<String, Integer>> o = m1.entrySet().stream().max((o1, o2) -> o1.getValue()-o2.getValue());
Map.Entry<String, Integer> entry = o.get();  //o.get()如何理解//o.get()是optional的方法,获取内容,键值对(Entry类型)

o.get()是optional的方法,获取optional类中的内容,

针对tcp连接。客户端和服务器端均会有端口

客户端定义时指定的端口是与服务器端连接的端口,但是在程序运行时还会默认动态生成一个端口

在服务器端和客户端,调用输入输出的getInputStream();.getOutputStream()两个基本的字节数输入流,都需要客户端对象,而不是服务器端对象

DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());

IUser proxy = ProxyFactory.getProxy(u1);  //直接使用泛型;**接口类型**接收代理对象。

理解:ProxyFactory.getProxy(u1)返回的对象必须使用接口来接;IUser是接口

原因:由于 Java 类只能继承一个父类,而动态生成的代理类已经继承了java.lang.reflect.Proxy,因此无法再继承目标类。只能通过实现接口来定义代理行为。

两种方法,一个带参数,一个不带参数

动态代理时,要传输形参的内容时把agrs写上,然后去判断,根据参数的不同表示不同赋值给另一个零食参数,最后进行打印输出;invoke()只写一次

method.invoke(u1, args);
String paramsString;
if (args == null) {
    paramsString = "[]";
} else {
    paramsString = Arrays.toString(args);
}

添加运行时期的是元注解(注解的注解)

/**
 @Target(ElementType.TYPE)  用于描述注解可以使用在哪里
 TYPE,类,接口
 FIELD,成员变量
 METHOD,成员方法
 PARAMETER,方法参数
 CONSTRUCTOR,构造器
 LOCAL_VARIABLE,局部变量
 */
@Target({ElementType.TYPE,ElementType.METHOD})  //可以用在类或接口上和方法上
//上述一旦著名,下面要写RUNTIME,**不然在测试是就默认消失了**/因为默认是class
    //@Retention
    //作用:声明注解的保留周期。
    //@Retention(RetentionPolicy.RUNTIME)
    //SOURCE:只作用在源码阶段,字节码文件中不存在。
    //        CLASS(默认值):保留到字节码文件阶段,运行阶段不存在,
    //       ** RUNTIME(开发常用):一直保留到运行阶段。推荐使用**
    //        * */
    @Retention(RetentionPolicy.RUNTIME)
    public  @interface MyBook3 {
    String value();
}

在Java中:相对路径是以工程目录为基准,所以找某个文件,要以模块名为起始往下找

线程理解

start方法只能调用一次(一个线程),多次调用会报错

直接调用线程重写的run方法,没用通过start方法去调用(调用start方法,默认创建线程,调用run方法),则不会创建线程,调用的run方法仍是main在执行

sleep不释放锁

&:只有当两个位都为 1 时,结果才为 1,否则为 0

^: 对于每一对二进制位,只有当两个位都为 1 时,结果才为 1,否则为 0

pojo dto vo

  • POJO:最基础的 “数据箱子”,跟数据库表对应,在哪都能用。
  • DTO:“传输专用箱子”,在系统间传数据时用,按需裁剪字段。
  • VO:“前端展示专用箱子”,字段完全按页面需要来,拿来就能显示。

pojo最基础的,dto用于c-s-m三层之间使用,vo主要用于展示给前端的

controller层(方法参数pojo )->传给service层(方法参数dto)->传到mapper层(方法参数dto)

->mapper返回(返回值 vo)->service层返回(返回值 vo)->controller层返回(返回值 vo)

如果是多表则controller层(方法参数dto )->传给service层(方法参数转化为单表操作)->传到mapper层(方法参数单表

->mapper返回(返回值 vo)->service层返回(返回值 vo)->controller层返回(返回值 vo)

多表到s-c层要裁剪, dto属性少于(不包括多表)pojo则,传递用dto

总结:字段设计原则

类型

字段来源 / 设计原则

例子(假设数据库有 user

表)

POJO

与数据库表字段严格一一对应

id

, username

, password

, createTime

DTO

根据业务需求裁剪或组合(可跨表)。多表常用

注册时:username

, password

(无 id

VO

根据前端 UI定制,可能包含计算值。

展示时:fullName

, formattedTime

(无 password

关键区别

  • POJO数据库的忠实映射,不做任何加工。
  • DTO:服务间传输的 “最小必要数据”,比如注册时不需要 id,查询列表时可能需要关联其他表的数据。
  • VO:前端的 “最终展示形态”,可能包含拼接、格式化、过滤后的数据。
相关文章
|
4月前
|
存储 前端开发 JavaScript
初始前端3
本文介绍了前端开发中的表单交互设计与数据绑定技巧,包括按钮点击事件处理、表单模型与实例的创建及使用、单向与双向数据绑定的区别与应用,以及表格数据展示等内容,适用于 Vue 框架下的 Element UI 组件实践。
|
4月前
|
存储 SQL 缓存
spring基础2
本文介绍了 MyBatis 动态 SQL 的执行原理及常用标签,AOP 的实现原理与应用场景,Spring 的三级缓存机制及其在解决循环依赖中的作用,以及事务传播行为及其使用场景,帮助理解 Java 开发中的核心概念与实现机制。
|
4月前
|
NoSQL IDE MongoDB
Studio 3T 2025.14 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
Studio 3T 2025.14 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
186 0
Studio 3T 2025.14 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
|
存储 前端开发 Java
一文理解什么是DTO、VO、BO、PO、DO,并推荐一款IDEA转换插件
一文理解什么是DTO、VO、BO、PO、DO,并推荐一款IDEA转换插件
1750 0
一文理解什么是DTO、VO、BO、PO、DO,并推荐一款IDEA转换插件
|
JSON Java Apache
Bean自动映射工具对比及VO、DTO、PO、DO对象之间的转换
在实际的开发过程中,常常遇到各个层之间对象转换,比如 VO、DTO、PO、DO 等,而如果都是手动set、get,一旦属性较多时,操作起来不仅麻烦,而且浪费时间,因此经常会使用一些工具类,进行对象之间的转换,下面将对象与对象之间转换的方式进行对比,一级对象间的使用进行总结。
Bean自动映射工具对比及VO、DTO、PO、DO对象之间的转换
|
JSON 前端开发 Java
Springboot中整合knife4j接口文档
Springboot中整合knife4j接口文档
1430 0
|
5月前
|
监控 安全 Java
SpringBoot应用-Actuator监控
Spring Boot Actuator 是 Spring Boot 提供的一个独立模块,旨在通过简单的方式提供应用程序的监控和管理功能。Actuator 内置了多种端点(Endpoints),可以用于查看应用的健康状况、配置属性、日志级别等。
940 1
|
11月前
|
Linux Docker 容器
Linux 中停止 Docker 服务报 warning 导致无法彻底停止问题如何解决?
在 Linux 系统中,停止 Docker 服务时遇到警告无法彻底停止的问题,可以通过系统管理工具停止服务、强制终止相关进程、检查系统资源和依赖关系、以及重置 Docker 环境来解决。通过以上步骤,能够有效地排查和解决 Docker 服务停止不彻底的问题,确保系统的稳定运行。
776 19
|
机器学习/深度学习
RNN 和 Transformer 复杂度比较
RNN 和 Transformer 复杂度比较
382 0
|
Shell 调度 Docker
在Docker中,如何清理批量后台停止的容器?
在Docker中,如何清理批量后台停止的容器?