热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

总结_OO第二单元单元总结

本文由编程笔记#小编为大家整理,主要介绍了OO第二单元单元总结相关的知识,希望对你有一定的参考价值。
本文由编程笔记#小编为大家整理,主要介绍了OO第二单元单元总结相关的知识,希望对你有一定的参考价值。



总述

  OO的第二单元主题是电梯调度,与第一单元注重对数据的输入输出的处理、性能的优化不同,第二单元的重心更多的是在线程安全与线程通信上。这此次单元实验之前,我并未对线程有过了解,更谈不上“使用经验”,整体上第二单元三个实验也做的较为吃力。三次实验,也算是对线程的一步步入门吧,以及由于对于线程不是很熟悉,所以我总是下意识的把程序分割,尽量减少通信量。


第一次实验

  基本需求:单电梯、无捎带要求、基本无性能要求。

  基本实现:一个主线程或者一个主线程与一个电梯线程

  我采用的方法是使用一个主线程,因为实际上,对于第一个实验唯一让人认为要使用线程的地方可能就是模拟电梯上下层所需要的时间了,但是事实上我们可以通过让主线程sleep的方式来完成此功能。以下是相关类图....

 技术图片

  总结:第一次实验是入门的铺垫,对于线程相关要求很低,对于我而言,可以说是给予了一定的缓存时间来完成两个之间单元的切换。


第二次实验

  基本需求:单电梯、傻瓜式捎带。

  基本实现:多线程

  第二次实验与第一次实验最大的不同在于,由于存在捎带也就有了一定的性能要求,故而很难去用一个主线程去做。事实上,我认为如果牺牲性能,就第二单元的电梯调度而言,是可以用一个主线程去模拟的。一个显而易见的做法就是一次只乘一个人。不过这又是另外的事情了。话说回来,第二次实验我采用的方法是,一个主线程负责接收请求,一个电梯线程负责模拟电梯的运行以及内部自行调度

  说到调度,由于电梯运行是一个在线问题,关于调度的优化算法很难去证明是否有效(严格证明优化算法的期望性能是一件很难的事情),即使做出了期望性能优秀的算法,还有可能会因为数据的边界性而表现糟糕。总的而言,就是很难优化,优化了之后也不见得有什么用。基于以上思想,对于调度算法,我的实现并不复杂,基本是按照指导书的傻瓜式捎带而写成的。

  这里值得一提的是,采用贪心可能有一定效果,不过最终还是看脸,至于其他的许多算法感觉都是在面向个例优化(这里只是个人感觉,无其他任何意思)。以下是第二次电梯的相关类图

 技术图片

  总结:从日常交流来看,第二次实验有许多大佬花了很多时间在做相关调度优化。而我由于实力有限,把重心主要放在了对线程的安全、线程的通信控制上面,我的理念是降低耦合,降低结构复杂度,能不锁就不锁,能自己分析清楚的,就不交给安全机制来写。


第三次实验

  基本需求:多电梯多楼层、捎带换乘,有一定性能的要求。

  基本实现:多线程

  第三次实验在第二次的基础上,增加了电梯的数量,并且每一个电梯有了自己的容量、区间、运行时间等等信息。并且在这种情况下,对程序的性能提出了要求。我采用的方法与第二次实验类似使用一个主线程处理请求,另外设置一个电梯线程来负责调度。之所以这样做,一方面是自己懒惰了,另一方面也是过于相信自己的码力了,到最后才发现自己驾驭不了。以下是第三次实验的类图。

 技术图片

  总结:第三次实验我的强测分没有及格,究其原因一方面是没有进行有效的对拍测试,一方面是过于注重对于线程安全方面的考量而忽略了程序本身的业务逻辑。不过这也是由于缺乏信心,多线程还是接触的少了,总是担心会出现各种线程安全的问题。


Bug分析及相关测试策略

  三次实验我都没有去测试其他同学,主要是因为多线程本身的不确定性,以及对于多线程很难去对拍测试实现自动化,又不想用其他人的。所以最后结果就是自己被测爆了。不过私下交流主流的测试策略应该都是实现自动化,然后随机数据跑,判断结果的正确性就按照指导书的正确性判断思路。

  在第三次实验,我在强测中出现了bug,在互测中也被同学发现了bug,具体bug原因是因为我的调度逻辑考虑的不周全,具体情况是,在某些情况下,一个电梯可能会在同一个楼层反复接一个人,这虽然只是影响性能,但是由于我的设计中压根没有想到有这种情况发生,所以导致了我的电梯会出现连续arrive同一层的错误输出。修改起来还是挺方便的,对于arrive的输出判断一下就行了。


心得体会:

  线程安全总是会纠结“加不加锁”、“加几个锁”,“加多了结构复杂怎么办”等等问题,我在三次实验中对于线程安全的处理总原则就是,能不加就不加,能不写锁就不写锁,能降耦合就降耦合。

  这样做的好处就是程序的结构不会看起来特别的复杂、零乱,坏处就是对于一些隐式的线程安全问题的分析,需要考虑全面,否则容易造成死锁等等。

       有得有失吧,其实有时候程序的结构复杂一点,也只是编码上繁琐 一点吧,实现上还是挺方便的,这一点仁者见仁,智者见智吧。

 

 

 

 

 

 

 

 


推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • FinOps 与 Serverless 的结合:破解云成本难题
    本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 深入解析:阿里实战 SpringCloud 微服务架构与应用
    本文将详细介绍 SpringCloud 在微服务架构中的应用,涵盖入门、实战和案例分析。通过丰富的代码示例和实际项目经验,帮助读者全面掌握 SpringCloud 的核心技术和最佳实践。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • 深入理解一致性哈希算法及其应用
    本文详细介绍了分布式系统中的一致性哈希算法,探讨其原理、优势及应用场景,帮助读者全面掌握这一关键技术。 ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 本文深入探讨了 Redis 的两种持久化方式——RDB 快照和 AOF 日志。详细介绍了它们的工作原理、配置方法以及各自的优缺点,帮助读者根据具体需求选择合适的持久化方案。 ... [详细]
author-avatar
LYJ189_163
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有