学习日报2023年6月26日
(2023-06-26 21:50:42)
标签:
it教育 |
分类: 两年成长日记 |
时间:6:35-7:00
内容:英语百词斩打卡+英语单词学习
时间:8:00-8;10
内容:元宇宙项目组晨会
时间:8:30-8:55
内容:对于java事务进行宏观了解和学习,以及需要学习那些东西
总结:完成计划
两分钟思考总结:1.及时总结的必要性:在对java事务进行学习的时候,通过了之前学习的事务的总结,以及学习培养计划的总结笔记。节省了不少找资料的时间,能够快速建立事务的宏观都包含哪些部分。
时间:9:20-9:45
内容:57_传智播客汤阳光OA项目视频__阶段6__论坛模块__论坛业务介绍与整体说明剩余30%+58_传智播客汤阳光OA项目视频__阶段6__论坛模块__版块管理1__增删改查
50%
总结:完成计划,知识面:实现方式:当选中或取消一个权限时,也同时选中或取消所有的下级权限,选中一个权限时,也要选中所有的直接上级权限
两分钟思考总结:暂无
时间:10:00-10:25
内容:58_传智播客汤阳光OA项目视频__阶段6__论坛模块__版块管理1__增删改查
50%+59_传智播客汤阳光OA项目视频__阶段6__论坛模块__版块管理2__实现上下移动1
50%
总结;完成,59完成30%
两分钟思考总结:修改原码的方式之一:1.在项目中创建与原码的包路径相同的文件夹;2.将jar包中的原码拷贝一份放入新建的文件夹名中;3.由于类加载机制的原因,优先加载classpath路径下的.class文件,如果没有找到才会去jar包中进行查找和加载。
时间:10:40-11:50
内容:解决不愿意主动交流的问题
时间:13:30-14:10
内容:阅读
时间;14:35-15:00
内容:对问题进行梳理之后找马总进行协助:
各个颗粒参与类中的save方法如何使用外部类的对象
问题/现象:为什么对于普通的Controller来说,将内部类设置成public访问修饰符之后,反序列化成功。2.将内部类分访问修饰符设置为private,并显示提供无参构造函数,反序列化成功。
而对于在程序运行时生成的Controller来说,将内部类设置成public访问修饰符之后,反序列化失败。2.将内部类分访问修饰符设置为private,并显示提供无参构造函数,反序列化失败。
总结:
目的:
想要在内部类中调用到当前外部类的对象
问题:
静态内部类中无法通过(外部类.this的方式)调用到外部类的对象。
解决方式:
目前解决的方式,将静态内部类改为非静态内部类,但是遇到反序列化的问题。
15:14
找到问题点,问题点不在于普通Controller和动态生成的Controller,而在于这两个Controller使用的参数上,普通的Controller使用的是Actor,动态生成的Controller使用的是继承Actor类的Student类。
Actor类与Student类是有一定差异的,先找到差一点,再逐步排查问题。
时间:15:18-15:43
内容:问题排查:Actor类与Student类是有一定差异的,先找到差异,再逐步排查问题。
总结:
找到了原因,非静态内部类需要依赖外部类的实例才能实例化
当请求体为Actor类时,反序列化成功的原因是由于Actor类本身就是一个独立的类,不是任何其他类的内部类。在反序列化过程中,Jackson库可以直接使用
Actor类的无参构造函数来实例化对象,因为它没有依赖于其他外部类的实例。
相反,当请求体为Student类时,Student类继承了Actor类,并且TopicParticipation是Actor类的非静态内部类。非静态内部类需要依赖外部类的实例来进行实例化,而在默认的反序列化过程中,Jackson无法直接实例化非静态内部类对象。
因此,当请求体为Actor类时,由于它不涉及非静态内部类的实例化,反序列化过程可以顺利进行。但当请求体为Student类时,涉及到非静态内部类的实例化,因此会导致反序列化失败的异常。
解决的办法可能就是:1.如果保持非静态内部类则需要自定义反序列化器。以便在反序列化过程中处理内部类的实例化逻辑。
2.将其改回静态内部类
两分钟思考总结:实践和再次明确,找不同,看差异的解决问题的方法。体现在关于寻找反序列化出现问题的原因,以及如何解决反序列化。
时间:15:50-16:15
内容:梳理出想要在各个颗粒参与类(内部类)中的save方法如何使用外部类的对象的方案。
优化点:在各个颗粒参与类(内部类)中的save方法使用外部类的对象。
当内部类为非静态内部类出现反序列化过程失败的原因:
备注:调用参与颗粒的请求是请求体为Student
这里是做的测试和验证,寻找反序列化出错的原因,下面为具体的原因:
当请求体为Actor类时,反序列化成功的原因是由于Actor类本身就是一个独立的类,不是任何其他类的内部类。在反序列化过程中,Jackson库可以直接使用
Actor类的无参构造函数来实例化对象,因为它没有依赖于其他外部类的实例。
相反,当请求体为Student类时,Student类继承了Actor类,并且TopicParticipation是Actor类的非静态内部类。非静态内部类需要依赖外部类的实例来进行实例化,而在默认的反序列化过程中,Jackson无法直接实例化非静态内部类对象。
因此,当请求体为Actor类时,由于它不涉及非静态内部类的实例化,反序列化过程可以顺利进行。但当请求体为Student类时,涉及到非静态内部类的实例化,因此会导致反序列化失败的异常。
考虑实现自定义反序列化器,以便在反序列化过程中处理内部类的实例化逻辑。
优化的方案:
方案一:将内部类修改为非静态内部类,通过在内部类中通过Actor.this的方式获取当前Actor对象
优势:1.符合面向对象也不多此一举
劣势:实现相对复杂,需要为每一个内部类自定义反序列化过程(将json类型的数据,为实体属性赋值)
方案二:2.将内部类修改为静态内部类
优势:1.符合面向对象
劣势:但是通过方法传参的方式将Actor类型的对象传给内部类的save方法
目前是采用的方案二
补充:静态成员在内存中只有一份副本,因此它们在多个实例之间是共享的。
时间:16:30-16:40
内容:元宇宙项目组领导沟通会
时间:16:40-16:45
内容:整理关于反序列化失败是如何解决的,并给马总汇报。
时间:16:45-17:05
内容:找米老师进行主动交流
时间:17:13-17:38
内容:代码优化:
isOneToManyMapping方法中把属性和属性的类型当做参数传递合理吗,属于面向对象吗
预计40%
总结:未完成,完成30%
时间:17:43-18:00
内容;isOneToManyMapping方法中把属性和属性的类型当做参数传递合理吗,属于面向对象吗
预计完成30%
总结:完成计划
时间:19:00-19:10
内容:英语单词学习
时间:19:30-19:55
内容:代码优化:
1046行的递归调用如果遇到循环依赖的情况会发生什么?
了解什么是循环依赖,梳理解决方法
总结:
A对象有一个属性是B,B对象有一个属性是A,当A对象生成的时候依赖B对象,B对象生成的时候需要依赖A对象,这个时候就很容易形成一个闭环,如果这样一直死循环下去。
时间:20:05-20:30
内容:思考如何实现多对多关联映射的思路(并考虑双向关联映射)
总结:目前想到的是使用注解的方式去实现(自定义注解/使用JPA提供的注解)注解起到一个标记的作用,标记为什么关联,外键是什么,中间表是什么。
时间:20:40-21:20
内容:设计通过判断注解的形式如何实现一对一,一对多,多对一,多对多的关联映射(建表和保存)
总结:21:18完成计划
时间:21:20-21:40
内容:协助解决思琪的问题和制定明天的开发计划
明日计划:
1.OA视频4个番茄
2. 事务的学习-两个番茄
3.主动找米老师进行交流
3.已经分配项目开发任务
前一篇:学习日报2023年6月22日
后一篇:学习日报2023年6月27日