【问题标题】:Optimized way of doing string.endsWith() work.优化 string.endsWith() 工作的方式。
【发布时间】:2013-03-11 10:44:22
【问题描述】:

我需要查找 Application Server 收到的所有 Web 请求,以检查 URL 是否具有 .css、.gif 等扩展名

提到了 tomcat 如何监听每个请求并选择正确配置的 Servlet 来提供服务。 CharChunkMessageBytesMapper

这是我的实现想法:

  • 加载所有我们喜欢比较的扩展并获取字节 他们的代表。
  • 通过对字节数组中的字节求和来获得此扩展的唯一值 // 例如:“css”.getBytes()
  • 将结果值添加到排序列表中
  • 每当我们收到请求时,获取 URL 的字节表示 // 例如:“flipkart.com/eshopping/images/theme.css”.getBytes()
  • 开始对字节数组的最后一个索引中的字节求和,并在遇到“.”时中断。点字节值
  • 使用排序列表搜索由此求和的值的存在 // 在此处使用二分搜索

如果有任何问题,请就实施和问题提供反馈。

-感谢克里希纳

【问题讨论】:

  • 查找“完美哈希”。

标签: java regex string algorithm bytearray


【解决方案1】:

这听起来方式比它需要的复杂。

  • 使用String.lastIndeXOf 查找网址中的最后一个点
  • 使用String.substring获取基于此的扩展
  • HashSet<String> 用于一组受支持的扩展,或者HashMap<String, Whatever> 如果您想将扩展映射到其他东西

当我发现这种简单的方法被证明是性能瓶颈时,我会非常震惊 - 而且我确实怀疑它会比您建议的方法有效,因为它不需要将整个 URL 转换为字节数组...(尚不清楚为什么您的方法仍然使用字节数组而不是从 char 值形成哈希。)

从根本上说,我更喜欢的性能方法是:

  • 围绕以后难以在架构上更改的内容进行前期设计和测试
  • 对于其他一切:
    • 首先确定性能标准,以便您知道何时可以停止
    • 编写最简单的代码
    • 使用真实数据进行测试
    • 如果性能不够好,请使用分析器(等)找出瓶颈所在,并对其进行优化,确保您可以证明使用现有测试的好处

【讨论】:

  • 优化的第一条规则:不要这样做。大多数时候都是正确的。
猜你喜欢
  • 2012-11-13
  • 2021-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-24
  • 2011-03-19
  • 1970-01-01
相关资源
最近更新 更多