当前位置: 首页 > 面试题库 >

您将如何有效地实施尾巴?

金阳曜
2023-03-14
问题内容

在* NIX中实现tail的有效方法是什么?我提出(编写)了两个简单的解决方案,都使用一种圆形缓冲区将线加载到圆形结构中(数组|双向链接的圆形列表-
很有趣)。我已经看到了busybox中较旧的实现的一部分,并且据我了解,他们使用fseek查找EOF,然后“向后”阅读内容。有没有更干净,更快的东西?我在面试时被问到了,问问者看起来并不满意。先感谢您。


问题答案:

我认为没有其他解决方案不同于“保留最新的N行,同时向前读取数据”或“从头开始,然后向后退,直到您读取第N行”以外的解决方案。

关键是您将根据上下文使用一个或另一个。

当尾部访问随机访问文件时,或者当数据足够小以存储在内存中时,“尾随后退”更好。在这种情况下,运行时间被最小化,因为您扫描了必须输出的数据(因此,它是“最佳”的)

当以流水线填充尾部或数据量很大时,您的解决方案(保留N条最新行)更好。在这种情况下,其他解决方案浪费了太多内存,因此不切实际,并且在源慢于tail的情况下(很可能)扫描所有文件也没有太大关系。



 类似资料:
  • 问题内容: 我有一个使用Spring框架以Java 1.5开发的Web应用程序。应用程序包含“仪表盘”,这些仪表盘是简单的页面,在其中可以重新组合一堆信息,并且用户可以在其中修改某些状态。经理们希望我在数据库中为这三个仪表板添加一个日志记录系统。每个仪表板都有不同的信息,但是应该通过日期和用户登录来跟踪日志。 我想做的是实现这样的Strategy模式: Appcontext.xml: 因此,在此解

  • 问题内容: 我具有以下功能,可以将PDF转换为一系列图像(每页一个图像): 这可以很好地工作,性能并没有那么快,但这并不重要。我的问题与内存消耗有关。假设我要转换一个较长的PDF(Apple的10-Q,长达51页): 到最后一页的末尾,内存使用量一直增加到〜11GB! 我还注意到一些注意事项: 当我通过Instruments运行此程序时,它出乎意料地显示没有泄漏。两个大记忆猪是和。它们似乎没有在两

  • 问题内容: 这个问题一定是以前问过的,但是我找不到。 我正在使用第3方库来检索JSON格式的数据。图书馆将数据作为数据提供给我。我想将此映射到POJO(普通Java对象)以简化访问/代码。 对于映射,我目前以这种方式使用Jackson图书馆中的: 据我所知,上述代码可以得到显着优化,因为当前已经解析的中的数据将再次通过方法馈入序列化- 反序列化链,然后再馈入。 我想避免这两次转换(和解析)。有没有

  • 在Perl中,使用Moo,可以围绕sub实现sub,它将围绕类中的其他方法。 如何在Raku中实现这种行为,最好使用角色?

  • 我正在尝试实现身份验证 可以请求任何微服务的API网关。 用户微服务-我存储所有用户的地方。实现在此微服务中对用户进行身份验证。按应有的方式工作,登录路由返回我用于在此微服务中对用户进行身份验证的令牌。 其他5个微服务,未经任何身份验证或授权。 问题是:使用身份验证的正确方法是什么

  • 问题内容: 既然maven-3确实放弃了对快照工件的false的支持,看来您确实需要使用带有时间戳的SNAPSHOTS。特别是在内部确实使用maven 3的m2eclipse似乎受到它的影响,当SNAPSHOTS不是唯一的时,update-snapshots无法正常工作。 将所有快照设置为uniqueVersion=false之前,这似乎是最佳实践 现在,切换到带有时间戳的版本似乎没什么大问题,毕