面试让你造飞机,上班让你拧螺丝?
- 确实,在实际工作当中,大部分的工作内容都是围绕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),直到满足时间戳条件。
- 写代码需要时刻审视自己代码的效率,看上去简单的功能,如果执行效率比较低的话,需要及时反省,找到性能的瓶颈。
以上所述就是小编给大家介绍的《实际工作中用不上数据结构和算法吗?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- R中用线性回归进行预测建模
- 在Markdown中用mermaid语法绘制图表
- iOS面试题·项目中用过 Runtime 吗?
- 在docker中用Tomcat运行web项目
- 在项目实践中用更优雅的方式处理数组问题
- ajax中用josnp接收josn数据的实现方法
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
构建高性能Web站点
郭欣 / 电子工业出版社 / 2009-8 / 59.00元
本书围绕如何构建高性能Web站点,从多个方面、多个角度进行了全面的阐述,涵盖了Web站点性能优化的几乎所有内容,包括数据的网络传输、服务器并发处理能力、动态网页缓存、动态网页静态化、应用层数据缓存、分布式缓存、Web服务器缓存、反向代理缓存、脚本解释速度、页面组件分离、浏览器本地缓存、浏览器并发请求、文件的分发、数据库I/O优化、数据库访问、数据库分布式设计、负载均衡、分布式文件系统、性能监控等。......一起来看看 《构建高性能Web站点》 这本书的介绍吧!