关于实时数据库开发人员的面试题

本文提供了一种名为死区压缩的数据压缩算法,并提出具体的编程实现要求,包括压缩函数及根据时间快速查找数据的函数。此外,还给出了数据结构定义及函数原型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多朋友问我:你对新员工在技能上有什么要求呀。

看看下面两个面试题吧,如果能在1小时之内将它们上机编程调试通过,那么,你就是我要找的人了。

死区压缩的算法原理是:
一段按时间顺序从小到大排列的数据,只有前后数据变化的绝对值超过常量COMPRESS_RATE才被保存。
举例(假定COMPRESS_RATE为1.0):
100 100.5 110  109.9 109.4 108.9 109
结果:100 110 108.9

设数据的结构为:
typedef struct stDataInfo
{
 time_t nSecond; // 时间,以秒为单位
 short nMill; // 毫秒
 double fValue; // 值
} DataInfo;

请编程实现该算法

1、压缩函数

#define COMPRESS_RATE 1.0
int Compress(DataInfo *pDataList, int nDataCount, DataInfo *pResultDataList)

其中:
pDataList为数据列表,已按时间排序
nDataCount为数据个数

pResultDataList为压缩后的数据列表,由调用者申请了空间,最大长度为nDataCount
返回值为压缩后的数据个数

2、压缩后的数据,需要快速查询出来(顺序查找会不会慢了点?)

typedef struct stTimeInfo
{
 time_t nSecond; // 时间,以秒为单位
 short nMill; // 毫秒
} TimeInfo;


#define RET_SUCCESS  0 // 刚好找到对应的时间点
#define RET_NO_EQUAL  1 // 未找到对应的时间点,但找到两个时间之间的点,需要进行二分插值
#define RET_BEYOND_MIN  2 // 时间比最小时间小
#define RET_BEYOND_MAX  3 // 时间比最大时间大
#define RET_NO_DATA  4 // 数据列表无数据
#define RET_PARAMETER_ERROR 5 // 参数错误

#define COMPRESS_RATE 1.0
int FindDataByTime(DataInfo *pDataList, int nDataCount, TimeInfo *pTime, double *pResultData)
其中:
pDataList为已压缩的数据列表,按时间排序
nDataCount为数据个数
pTime为查询的时间
返回结果:
如果为RET_SUCCESS和RET_NO_EQUAL,pResultData为对应的值
如果为RET_BEYOND_MIN,则pResultData为最小时间点的值
如果为RET_BEYOND_MAX,则pResultData为最大时间点的值
如果为RET_NO_DATA和RET_PARAMETER_ERROR,则为pResultData不需要处理

以上面试题只对程序员有效,你心动了吗?

转载于:https://www.cnblogs.com/linkman/archive/2007/04/09/706370.html

面试高级开发的期间整理的面试题目,记录我面试遇到过的数据库题目以及答案,比如说mvvc还有数据库调优,索引。 目录如下 数据库 数据库事务隔离级别; 事务的并发导致的问题; 数据库事务设置不同的隔离级别会导致的不同并发问题 当前读和快照读的意义; mvcc:多版本控制: 指的是一种提高并发的技术,其解决问题是什么; MVCC实现过程; mvcc三大组件; RC、RR级别下的InnoDB快照读有什么不同:17 mysql面试题01.vep 描述一下mysql的乐观锁和悲观锁,以及mysql锁的种类; mysql如何做分库分表的; mysql描述一下mysql主从复制的机制的原理;mysql主从复制主要有几种模式 在mysql开启Binlog(为了其他非事务引擎复制所以引入binlog,比如说主从)后,如何保证binlog和InnoDB redo日志的一致性呢; binlog和redo log和区别; mysql涉及到的log有哪些; 阿里要求尽量少用join,为什么; 索引 索引分类 索引的数据结构; b树和b+树的区别 索引失效的情况: 数据库优化 查询计划的结果中看哪些关键数据; mysql 如何调优; 索引是建的越多越好吗; 在表查询中,一律不要使用 * 作为查询的字段列表,原因是什么; 描述一下InnoDB和MyISAM的区别; 当前读和快照读的意义; 13 mvcc:多版本控制: 指的是一种提高并发的技术,其解决问题是什么; 14 MVCC实现过程; 14 mvcc三大组件; 15 RC、RR级别下的InnoDB快照读有什么不同:17 mysql面试题01.vep 17 描述一下mysql的乐观锁和悲观锁,以及mysql锁的种类; 17 mysql如何做分库分表的; 18 mysql描述一下mysql主从复制的机制的原理;mysql主从复制主要有几种模式 19 在mysql开启Binlog(为了其他非事务引擎复制所以引入binlog,比如说主从)后,如何保证binlog和InnoDB redo日志的一致性呢; 20 binlog和redo log和区别; 22 mysql涉及到的log有哪些; 23 阿里要求尽量少用join,为什么; 23 索引 24 索引分类 24 索引的数据结构; 24 b树和b+树的区别 26 索引失效的情况: 26 数据库优化 27 查询计划的结果中看哪些关键数据; 27 mysql 如何调优; 27 索引是建的越多越好吗; 29 在表查询中,一律不要使用 * 作为查询的字段列表,原因是什么; 29 描述一下InnoDB和MyISAM的区别; 29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值