【数独游戏】2023秋软工实践 第二次结对编程作业

本文讲述了两位学生在数独作业中面临的多线程编程、并发求解、前端后端协作及跨域问题等技术挑战,分享了他们在编码、争论和复审过程中的学习与解决策略。
这个作业属于哪个课程https://bbs.youkuaiyun.com/forums/fzusdn-0831
这个作业要求在哪里https://bbs.youkuaiyun.com/topics/617335682
个人学号102101637
结对成员学号102101324
GitHub 仓库地址https://github.com/xinyang-Grind/SodokuS.git

老师学长学姐好~102101637施彭湃

我的队友是——102101324陈昕杨

承接上文 我们首先分析一下我们需要做什么:

  • 解出我们生成的数独
  • 解出我们的数独
  • 能直接用户在题目数独键入后答案答案

归结到最后我们需要实现两个功能:

  • 并发求解生成数独
  • 可以处理用户修改后的数独(包括求解、提示错误)

1.本次作业的PSP表格,包括预估耗时和实际耗时。

阶段预估时间 (分钟)实际时间 (分钟)
计划5020
设计2020
设计复审00 (双方都非常满意)
代码规范检查6030
具体编码240300
测试报告6060

2.给出你认为的是重点或难点功能、编程思考,至少2点。

多线程编程是一种并发编程的技术,伴随着一些难点和挑战,其中包括:

1.死锁:死锁是指多个线程在等待某些资源的释放时,因为互相阻塞而无法继续执行的情况。解决死锁通常需要仔细设计和管理线程之间的资源获取顺序。
2.上下文切换:在多线程环境中,操作系统会频繁地进行线程之间的上下文切换,这会带来一定的性能开销。有效地管理线程的数量和调度策略对性能至关重要。

一些前端响应后端时可能面临的难点:

1.跨域问题:由于浏览器的同源策略,前端可能会面临跨域问题,即无法直接访问不同域名下的后端服务。要解决这个问题,需要使用跨域资源共享或代理服务器等方法。
2.测试:前端需要编写和维护单元测试、集成测试和端到端测试,以确保前端与后端的协作正常工作。

3.详细写出运用的算法和技术,包括并发性求解算法等。

要并发地求解9个数独问题,可以将每个数独问题分配给一个线程来独立求解,然后收集它们的解决方案。以下是一个描述如何使用线程池来并发求解9个数独问题的算法:

创建一个包含9个不同数独棋盘的列表。每个数独棋盘都代表一个需要解决的问题,可以是完全不同的数独谜题,也可以是不同的数独问题难度级别。

创建一个线程池,其中包含多个线程,每个线程负责解决一个数独问题。线程池的大小通常取决于计算机的处理器核心数量和可用资源。

每个线程的工作方式如下:

从数独棋盘列表中选择一个未被处理的数独问题。
使用回溯算法或其他数独求解算法,尝试解决选定的数独问题。
如果成功找到解决方案,将解决方案存储在一个结果列表中。
如果无法找到解决方案,可以选择继续尝试或宣告该数独问题无解。
主线程等待线程池中的所有线程完成工作。
收集所有线程中找到的解决方案,将它们存储在一个列表中。
返回包含所有解决方案的列表。

这个算法允许多个线程同时独立地求解不同的数独问题,从而提高了求解效率。需要确保线程之间的解决方案不会互相干扰,通常通过复制数独棋盘来实现线程间的独立性。同样,也需要使用锁来保护共享数据结构(如结果列表)的访问,以避免竞态条件。

在Python中,可以使用concurrent.futures库来创建线程池,并将不同的数独问题分配给线程池中的线程来求解。这种并发方法可以显著加速解决多个数独问题的过程。

4.实现代码的GitHub链接,注意仓库要设置为公开,方便助教检查。

已公开

接下来是具体展示

5.给出照片若干张,包括纸画原型、结对的同学、工作地点、计算机等,可选项包括其他能表达结对编程工作经历的物品或场景。

在这里插入图片描述
在这里插入图片描述

6.给出至少3项在编码、争论、复审等活动中花费时间较长,给你较大收获的事件。

  • 编码前后端响应讨论了比较久 关于何时响应
  • 复审时针对最后呈现的页面不够美观 又进行返工
  • 编码风格不一样 导致我们互相读不懂代码 需要讲解
  • 工作过程中不够专心 有分心原因

7.总结本次作业,遇到的难点以及如何解决、第二次结对编程的体验等等,两位同学分别总结。

spp的总结:

在前端编程作业中,我面临了一些挑战和难点,包括但不限于:

异步通信和数据处理: 与后端交互通常需要进行异步通信。处理异步请求以及有效地解析和展示从后端返回的数据是一个重要的难点。

跨域问题: 如果前端和后端位于不同的域名下,可能会遇到跨域问题。这需要使用跨域资源共享(CORS)或代理服务器等技术来解决。

状态管理: 复杂的前端应用通常需要管理大量的状态信息,如用户登录状态、组件状态等。合理的状态管理和数据流是前端开发的重要方面。

性能优化: 前端性能是用户体验的关键因素之一。减少页面加载时间、数据传输量以及优化渲染性能是挑战之一。

兼容性和移动适配: 确保应用在不同浏览器和移动设备上的兼容性是前端开发中的挑战之一。

为了解决这些难点,我深入学习了前端技术栈,包括HTML、CSS、JavaScript、前端框架(如React、Vue)、网络通信和性能优化等。与同学讨论以及查阅相关文档和教程也帮助我更好地应对这些挑战。

cxy的总结:

在后端编程作业中,我也遇到了一些挑战和难点,包括但不限于:

数据处理和存储: 后端需要有效地处理和存储数据,通常涉及数据库管理和查询。设计数据库模型、编写SQL查询以及确保数据的一致性是关键任务。

性能和扩展性: 后端应用需要处理大量请求并保持高性能,同时具备良好的可扩展性,以应对未来的增长。

并发和多线程编程: 处理并发请求以及编写线程安全的代码是后端开发中的难点之一。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值