程序猿一次逆风翻盘的机会(第二期)

2023-12-28 00:59

本文主要是介绍程序猿一次逆风翻盘的机会(第二期),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景:

某一天,老板突发奇想,想要做一款有趣又好玩的答题游戏,给你两天时间完成,但是希望你能理解公司因为疫情经营也不太景气,所以要求技术人员必须能够做到以最少的资源达到最好的性能,游戏是答题闯关游戏,选项呢是多选项,做好了,咱们就单车换摩托,做不好咱们就法制节目见,为了养家糊口,苦逼程序员就接下需求开干了

 

于是程序员开始提炼老板的需求要点:

①答案是多选项的

②要求节省资源

 

首先需要设计好多选项的存储模型,该如何设计呢,看看第二个要求,也没啥选择了,那就从压榨数据库上着手吧,既然节省资源,那就奔着以下两个要点来吧:

 

更小的通常更好

应该尽量使用可以正确存储数据的最小数据类型

。更小的数据类型通常更快, 因为它们占用更少的磁盘、 内存和

CPU缓存, 并且处理时需要的CPU周期也更少。

但是要确保没有低估需要存储的值的范围, 因为在schema中的

多个地方增加数据类型的范围是一个非常耗时和痛苦的操作。如果

无法确定哪个数据类型是最好的, 就选择你认为不会超过范围的最

小类型。最小的类型当然是tinyint了

简单就好

简单数据类型的操作通常需要更少的CPU周期。例如, 整型比

字符操作代价更低, 因为字符集和校对规则(排序规则) 使字符比

较比整型比较更复杂。ok,这里依然选择tinyint

 

实现:

类型选好了,那怎么表示多选项呢,能不能把多个选项用一个字段来存储呢?程序员灵机一动,想起来用位操作来表示多个选项,同时又能用一个字段来存储,哈哈 完美,达到了极尽所能的节省了资源,提高了性能。

 

可以把8个位包装到一个TINYINT 中, 按位操作来使用。在应用中为每个位定义名称常量来简化这个工作。

基于面向对象的设计思路抽象出两个数据模型:①题目 ②选项,于是进行了如下的表设计,

题目表:topic

序列列名类型描述
1idbigint(20)主键
6answer

tinyint(1)

答案

15

topic_desc

varchar(100)

题面文案

选项表:option

序列列名类型描述
1idbigint(20)主键
3numbertinyint(1)

选项在二进制中的位置

6textvarchar(100)选项文案

 

来个例子:

题目:范冰冰哪里美?

选项:A.大长腿 B.小蛮腰  C.爷们性格

 

依据大众的审美观,答案当然是A和B了,那按照顺序,A在二级制倒序中的排位是第一位,B是第二位,用8位二进制标识是,00000011,换算成十进制就是3,所以存储的数据如下:

题目表数据:

idanswertopic_desc
13范冰冰哪里美?

 

选项表数据:

idtext
1大长腿
2小蛮腰
3爷们性格

 

至此,程序猿设计完了老板交代的游戏,并且交付,老板很满意,然而经营并非那么好,程序猿还是没能单车换摩托。

 

—————END—————

 

 

喜欢本文的朋友,关注 程序猿的十万个为什么,收看更多精彩内容


 

欢迎关注以上二维码,是对小猿最大的支持!

这篇关于程序猿一次逆风翻盘的机会(第二期)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/544733

相关文章

将Java程序打包成EXE文件的实现方式

《将Java程序打包成EXE文件的实现方式》:本文主要介绍将Java程序打包成EXE文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录如何将Java程序编程打包成EXE文件1.准备Java程序2.生成JAR包3.选择并安装打包工具4.配置Launch4

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

如何用java对接微信小程序下单后的发货接口

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok... 目录配置参数 调用代码获取Access_token调用发货的接口类注意点总结配置参数 首先需要获取Ac

基于Python开发PDF转Doc格式小程序

《基于Python开发PDF转Doc格式小程序》这篇文章主要为大家详细介绍了如何基于Python开发PDF转Doc格式小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用python实现PDF转Doc格式小程序以下是一个使用Python实现PDF转DOC格式的GUI程序,采用T

将java程序打包成可执行文件的实现方式

《将java程序打包成可执行文件的实现方式》本文介绍了将Java程序打包成可执行文件的三种方法:手动打包(将编译后的代码及JRE运行环境一起打包),使用第三方打包工具(如Launch4j)和JDK自带... 目录1.问题提出2.如何将Java程序打包成可执行文件2.1将编译后的代码及jre运行环境一起打包2

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

Python判断for循环最后一次的6种方法

《Python判断for循环最后一次的6种方法》在Python中,通常我们不会直接判断for循环是否正在执行最后一次迭代,因为Python的for循环是基于可迭代对象的,它不知道也不关心迭代的内部状态... 目录1.使用enuhttp://www.chinasem.cnmerate()和len()来判断for

电脑多久清理一次灰尘合? 合理清理电脑上灰尘的科普文

《电脑多久清理一次灰尘合?合理清理电脑上灰尘的科普文》聊起电脑清理灰尘这个话题,我可有不少话要说,你知道吗,电脑就像个勤劳的工人,每天不停地为我们服务,但时间一长,它也会“出汗”——也就是积累灰尘,... 灰尘的堆积几乎是所有电脑用户面临的问题。无论你的房间有多干净,或者你的电脑是否安装了灰尘过滤器,灰尘都