博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实际工作中用不上数据结构和算法吗?
阅读量:6328 次
发布时间:2019-06-22

本文共 1251 字,大约阅读时间需要 4 分钟。

面试让你造飞机,上班让你拧螺丝?

  • 确实,在实际工作当中,大部分的工作内容都是围绕curd。但是,有些时候,对于数据结构和算法没有深入理解的人来说,一个小问题,需要磨很久才能搞定。举个实际工作当中的例子。
  • 项目中有一个同步数据的需求,同步数据的接口返回如下内容。最小的offset和最大的offset,以及需要同步的内容(这些内容需要作为其他接口的请求参数),请求参数包含偏移量offset和页数page_size。
{    "message_list": {        "media_message_outer_dto": [{            "offset": 123,            "show_id": "lwi912lka",            "time_stamp": "2018-11-12",            "type": "SHOW",            "video_id": "123",            "video_source_type": "YOUKU"        }]    },    "max_offset": 54678656,    "min_offset": 54671234}
  • 现在问题来了,第一次的请求参数中的offset肯定是设为0,请求之后拿到 min_offset 和 max_offset 的值。这个接口会返回过去一个月的更新记录,而项目需要的只是同步昨天的更新。也就是说,需要在min_offset 和 max_offset 之间找到offset的值,这个值对应昨天更新的开始。要怎么样去找到这个值呢?
  • 最终简化一下问题: 现在库里边有若干数据,数据里会包含当前数据更新的时间戳,已经按照更新时间排序,这些数据存放的偏移量最小是min_offset,最大是max_offset。现在最需要取出最近更新的那一小部分数据。问从什么位置(offset)开始取效率最高?
  • 最low的办法肯定就是啥也不管,从头开始取,只要是早于昨天的数据就丢弃。这种办法就不评论了。
  • 可能有人会抖机灵,说请求一次之后知道max_offset了,从max_offset往回捯就行。看似巧妙,实际上逻辑行不通!假设A数据在昨天更新了两次,往回捯的话,昨天第一次的更新就会更改第二次的更新。但是,第二次更新的A才是最终需要同步的,因为它更加新。这种方法看似简便,实际上会出现数据不一致的问题!更加致命!
  • 一个非常熟悉的办法就可以高效地解决这个问题。二分查找!第一次请求拿到min_offset 和 max_offset之后计算0.5 (min_offset+max_offset),请求之后判断时间戳是否晚于前天,不是则继续计算新的offset,0.5 (当前offset + max_offset),直到满足时间戳条件。
  • 写代码需要时刻审视自己代码的效率,看上去简单的功能,如果执行效率比较低的话,需要及时反省,找到性能的瓶颈。

转载地址:http://bcwoa.baihongyu.com/

你可能感兴趣的文章
SQLI LABS Stacked Part(38-53) WriteUp
查看>>
oracle异常
查看>>
from django.contrib.auth.models import AbstractUser 的继承
查看>>
java基础——java基本数据类型
查看>>
十天冲刺开发第五天个人工作总结
查看>>
jQuery选择器
查看>>
Hibernate4.3 并发控制
查看>>
Oracle Minus 取差集
查看>>
C# 该行已经属于另一个表 的解决方法
查看>>
malloc分配内存
查看>>
透明度的写法
查看>>
了解测试系统的架构
查看>>
asp.net服务器控件弹出确认窗口
查看>>
[Android]mac下开发环境搭建
查看>>
PL/SQL Developer 8注册码
查看>>
Java核心技术读书笔记02
查看>>
js alert(“”)弹框 自定义样式
查看>>
GCC和G++详解
查看>>
用dblink执行DDL
查看>>
Android视图状态及重绘流程分析,带你一步步深入了解View(三)
查看>>