5.21第一次项目总结

一.java聊天室项目总结

(1)项目完成度总结

1. 项目基础功能点都已完成,但是部分功能点具有问题,或者考虑不周(如没有实现NIO,在线状态没有考虑到心跳机制解决断网等情况,常用语没有删除等)。

2.创新功能点只有一个:聊天功能的消息提示,可以对接收的消息进行来电提示,也可以对消息提示进行保存,更新。

(2)项目存在的问题

1.首先对于项业务实现逻辑单一,普遍相同,没有独特点;并且对于部分业务的需求了解不够,使得做出的项目缺少业务逻辑,用户体验差。

2.其次是对于项目功能点的创新性,拓展性不够,没有自己的想法,照搬照抄(但也没有抄好)项目业务中规中矩,没有亮点。

3.项目的框架结构糟糕,缺少java基本业务的框架,代码风格杂乱无章,(就我而言项目初期没有将服务端和客户端分离,没有注意命名规范,类的创建和使用有问题,没有使用标准的javabean,类中的变量没有用private修饰,也没有使用get和set方法进行类中变量的使用等)

(3)项目答辩中总结的问题

1.java基础过于薄弱,对于很多java的知识了解太少,只知道皮毛(例如在回答学长问的序列化和反序列化的问题),java面向对象的特性也没有很好的了解,更没有将其融入到项目中。

2.项目的部分功能点考虑不周,业务逻辑模糊,不够了解,比如在线状态的功能点时,没有考虑到断网时等特殊情况的处理(心跳机制)。

(4)问题解决方案和改进措施

1.首先巩固java基础,java的基础知识肯定是做好项目的必备条件,准备重新花费2-3周的时间,再次学习巩固java知识,深入去了解java知识的联系。

2.总结项目中出现的问题,加强对业务逻辑的理解,学会创新,拓展功能点,提高用户的体验。

3.修改代码的结构,养成良好的编写代码习惯

二.java聊天室项目结束后的改正

首先是对于学长提出问题的解决

(1)序列化和反序列化

Serialization(序列化):将java对象以一连串的字节保存在磁盘文件中的过程,也可以说是保存java对象状态的过程。序列化可以将数据永久保存在磁盘上(通常保存在文件中)。

deserialization(反序列化):将保存在磁盘文件中的java字节码重新转换成java对象称为反序列化。

java是面向对象的开发方式,一切都是java对象,想要在网络中传输java对象,可以使用序列化和反序列化去实现,发送发需要将java对象转换为字节序列,然后在网络上传送,接收方收到字符序列后,会通过反序列化将字节序列恢复成java对象。

在Java中,序列化是将对象转换为字节流的过程,而反序列化是将字节流转换回对象的过程。序列化的主要目的有几个:

  1. 1.数据持久化: 通过序列化,可以将对象的状态保存到磁盘上,以便在程序重新启动时恢复状态。这在需要保存用户配置、应用程序状态或数据库中的对象时非常有用。
  2. 2.对象传输: 在分布式系统中,可以使用序列化将对象从一个 JVM 实例传输到另一个 JVM 实例。例如,在客户端-服务器通信、远程方法调用(RMI)或消息传递系统中,序列化使得在网络上传输对象变得简单。
  3. 3.深拷贝对象: 通过将对象序列化为字节流,然后反序列化回一个新的对象,可以实现深拷贝,即创建对象的完全独立副本。这在需要创建对象副本而不想与原始对象共享引用时非常有用。
  4. 4.版本控制: 序列化也可用于版本控制。通过在对象中包含版本号,可以在反序列化期间检查版本号,并根据需要执行相应的升级或兼容性逻辑。

总之,序列化在Java中是一种重要的机制,它提供了一种灵活而强大的方式来处理对象的持久化、传输和复制。

java序列化的优点:

  • 实现了数据的持久化,通过序列化可以把数据持久地保存在硬盘上(磁盘文件)。
  • 利用序列化实现远程通信,在网络上传输字节序列。

 

 

 (2)IO和NIO的区别

传统的阻塞式IO(IO)和新的非阻塞式IO(NIO)在处理IO操作时有几个重要的区别:

  1. 阻塞 vs 非阻塞

    • IO:传统IO是阻塞的。当应用程序执行IO操作时,它会被阻塞,直到数据准备好或者操作完成。
    • NIO:非阻塞IO是非阻塞的。当应用程序执行IO操作时,它会立即返回,无论数据是否准备好。应用程序需要通过轮询或事件驱动的方式来检查IO操作是否完成。
  2. 单线程 vs 多路复用

    • IO:传统IO通常采用一对一的模式,即一个线程处理一个IO连接。这导致在高并发场景下,需要创建大量线程来处理连接,而且线程之间的切换开销较大
    • NIO:非阻塞IO采用多路复用器(Selector)来管理多个IO连接。通过一个线程可以管理多个连接,避免了大量线程的创建和线程切换开销
  3. 缓冲区 vs 直接内存

    • IO:传统IO通常使用缓冲区来进行数据传输
    • NIO非阻塞IO可以使用直接内存来进行数据传输,从而避免了数据在Java堆和本地堆之间的拷贝,提高了性能。
  4. 面向流 vs 面向缓冲区

    • IO:传统IO是面向流的,即数据通过一个字节流逐个字节地读取或写入。
    • NIO:非阻塞IO是面向缓冲区的,即数据首先被读取到缓冲区,然后从缓冲区中读取或写入。

总的来说,NIO相比于传统IO在高并发、大数据量和低延迟的场景下具有更好的性能和可扩展性。然而,NIO的编程模型相对复杂一些,需要更多的代码和理解来正确地使用。

(3)项目功能点创新(部分)

目前优化了群聊的功能和聊天的使用,首先群聊增加了禁言功能,其次可以将聊天消息进行撤回

 

 

 后序还会进行语言等功能的扩展。

  • 11
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值