Java 执行string.endsWith()工作的优化方法。

Java 执行string.endsWith()工作的优化方法。,java,regex,string,algorithm,bytearray,Java,Regex,String,Algorithm,Bytearray,我需要查找应用服务器接收到的所有web请求,以检查URL是否具有.css、.gif等扩展名 提到tomcat是如何侦听每个请求的,他们选择了正确配置的Servlet来提供服务。 , 以下是我要实施的想法: 加载我们想要比较的所有扩展,并获取字节 他们的代表性 通过对字节数组中的字节求和,获取此xtension的唯一值//例如:“css”.getBytes() 将结果值添加到排序列表中 每当我们收到请求时,获取URL的字节表示//例如:“flipkart.com/eshopping/images

我需要查找应用服务器接收到的所有web请求,以检查URL是否具有.css、.gif等扩展名

提到tomcat是如何侦听每个请求的,他们选择了正确配置的Servlet来提供服务。 ,

以下是我要实施的想法:

  • 加载我们想要比较的所有扩展,并获取字节 他们的代表性
  • 通过对字节数组中的字节求和,获取此xtension的唯一值//例如:“css”.getBytes()
  • 将结果值添加到排序列表中
  • 每当我们收到请求时,获取URL的字节表示//例如:“flipkart.com/eshopping/images/theme.css”。getBytes()
  • 开始对字节数组最后一个索引中的字节求和,遇到“.”点字节值时中断
  • 搜索是否存在用排序列表求和的值//在此处使用二进制搜索
请就实施情况和问题(如有)给出反馈

-感谢你,奎师那这听起来比它需要的复杂多了

  • 使用
    String.lastIndeXOf
    查找URL中的最后一个点
  • 使用
    String.substring
    获取基于该字符串的扩展名
  • 对于一组受支持的扩展名,请使用
    HashSet
    ,如果要将扩展名映射到其他扩展名,请使用
    HashMap
当我发现这个简单的方法被证明是一个性能瓶颈时,我绝对会感到震惊——事实上,我怀疑它会比您建议的方法更有效,因为它不需要将整个URL转换为字节数组。。。(不清楚为什么您的方法使用字节数组,而不是从
char
值形成散列。)

从根本上说,我首选的绩效方法是:

  • 在架构上,围绕以后很难更改的内容进行前期设计和测试
  • 其他方面:
    • 首先确定性能标准,以便知道何时可以停止
    • 编写最简单的代码
    • 用真实的数据进行测试
    • 如果它的性能不够好,请使用探查器(etc)找出瓶颈所在,并对其进行优化,确保您可以使用现有测试证明其好处
    • 这听起来比实际需要复杂得多

      • 使用
        String.lastIndeXOf
        查找URL中的最后一个点
      • 使用
        String.substring
        获取基于该字符串的扩展名
      • 对于一组受支持的扩展名,请使用
        HashSet
        ,如果要将扩展名映射到其他扩展名,请使用
        HashMap
      当我发现这个简单的方法被证明是一个性能瓶颈时,我绝对会感到震惊——事实上,我怀疑它会比您建议的方法更有效,因为它不需要将整个URL转换为字节数组。。。(不清楚为什么您的方法使用字节数组,而不是从
      char
      值形成散列。)

      从根本上说,我首选的绩效方法是:

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

      查找“完美哈希”。查找“完美哈希”。优化的第一条规则:不要这样做。这是最正确的十倍。优化的第一条规则:不要这样做。这差不多是正确的十倍。