小编Seb*_*ber的帖子

S3/CloudFront,提供标题为"Cache-Control:max-age = 365000000,immutable"的所有文件

我有一个S3存储桶,其上面有CloudFront CDN.

这个S3存储桶是"不可变的",这意味着一旦我在那里上传文件,我就永远不会删除它或更新它.所有客户端都可以非常积极地缓存来自S3/CloudFront的文件.

目前,Etags工作得非常好,客户大多数时间都会收到304回复.但是获得304响应仍然需要通过更积极的缓存来避免往返.

所以我想要这样的行为:

  • CloudFront CDN缓存永远不会失效,因为S3缓存永远不会更改.CloudFront不需要再次向S3询问文件多次.我想我已经使用CloudFront分配设置成功配置了它.

  • CloudFront应该使用标头提供所有文件Cache-Control: max-age=365000000, immutable(截至2016年,immutable是一个新的,部分支持的值)

我不明白我怎样才能达到预期的效果.我应该在CloudFront或S3级别处理吗?我已经阅读了一些关于为每个S3文件配置适当标头的内容.是不是有一个全局设置来提供我可以使用的自定义http标头的所有文件?

caching cache-control amazon-s3 amazon-web-services amazon-cloudfront

7
推荐指数
1
解决办法
4563
查看次数

处理多平台(dev/integ/valid/prod ...)开发的最佳解决方案是什么?交货过程

我不是那么有经验,但我在一些大型Java EE项目(使用maven2)上工作,使用非常独特的方式来处理不同平台上的安装/交付.

1)其中之一是使用快照进行开发,然后发布组件和主要Web应用程序的maven版本.因此交付是:

  • 战争/耳朵文件
  • 项目清单
  • 属性文件
  • sgdb文件
  • 其他一些人

团队将使用该文件将新的应用程序版本放在不同的平台上.我认为这个过程是严格的,并且允许你总是容易地保持生产中传递的不同配置,但它不是很灵活,过程有点沉重,它让我们有时做一些肮脏的事情,比如重写一类战争补丁回归......这是一个电子商务网站,每月有1000万独立访客,可用率为99.89%.

2)我看到的另一个是检查每个平台上的源,然后将快照工件安装在本地存储库中.然后,应用程序服务器将使用.m2文件夹的这些快照.没有真正的交付流程,因为要将新版本投入生产,我们只需要更新组件/ webapps的来源,做一些maven clean install并重新启动应用程序服务器.我认为它更灵活,但我看到一些缺点,这种方法对我来说似乎很危险.这个网站有一个前台,我不知道数字,但它远远少于第一个.它还为13万人公司的大多数员工提供了一个很大的后台.

我想根据网站,公众展示和所需的可用性,我们必须根据需要调整交付策略.

我不是在问这个解决方案是最好的,但想知道你是否看到了不同的东西,以及你会在哪种情况下使用哪种策略?

java svn git maven-2 java-ee

6
推荐指数
1
解决办法
538
查看次数

关于访客模式的问题(Java中的示例)

我只是想了解使用访问者模式的主要好处.

这是一个Java实现示例

///////////////////////////////////
// Interfaces
interface MamalVisitor {
    void visit(Mammal mammal);
}
interface MammalVisitable {
    public void accept(MamalVisitor visitor);
}
interface Mammal extends MammalVisitable {
    public int getLegsNumber();
}
///////////////////////////////////


///////////////////////////////////
// Model
class Human implements Mammal {
    @Override
    public void accept(MamalVisitor visitor) {  visitor.visit(this);  }
    @Override
    public int getLegsNumber() { return 2; }
}
//PIRATE HAS A WOOD LEG
class Pirate extends Human { 
    @Override
    public int getLegsNumber() { return 1; }
    public int getWoodLegNumber() { return 1; } …
Run Code Online (Sandbox Code Playgroud)

java design-patterns visitor

6
推荐指数
2
解决办法
3558
查看次数

为什么我们可以使用带通用引用的数组

在回答有关此问题的问题时:https://stackoverflow.com/a/9872630/82609

我试着做以下事情:

Comparator<String>[] comparators = new Comparator[] {...};
Run Code Online (Sandbox Code Playgroud)

有用!但以下不是:

Comparator<String>[] comparators = new Comparator<String>[] {...};
Run Code Online (Sandbox Code Playgroud)

在相关问题上,我做了以下假设:

我想这是因为最初的数组合约可能是这样的:

如果你创建一个X类型的数组,你将永远不能在其中放入任何IS-NOT-AN X.如果你尝试,你会得到一个ArrayStoreException

因此,允许使用泛型创建的数组会导致不同的规则,例如:

如果你创建一个类型的数组X<Y>,你将永远不能放置任何IS-NOT-AN X.如果你尝试,你将得到一个ArrayStoreException.但是你可以添加两个X<Y>X<Z>对象,因为类型擦除!


但是考虑一下,它真的会成为一个问题:

Comparator<String>[] comparators = new Comparator<String>[] {...};
Run Code Online (Sandbox Code Playgroud)

我真的不明白为什么它不可能,因为使用这样的东西会:

  • 检查在运行时插入的类
  • 检查在编译时插入的类类型

最后,我们可以使用具有泛型类型引用的数组,并且由于不可能创建具有泛型类型的数组,我想很多人甚至不知道它是可能的.

我只是想知道是否有人知道这个选择背后的原因?

这有点像强迫人们使用List<String> = new ArrayList();而不是使用List<String> = new ArrayList<String>();


dimitrisli你从约书亚布洛赫的着名书中给出了一个很好的例子.正如您/他解释的那样,使用泛型数组+协方差并且可能导致ClassCastException是危险的,而我们期望使用协方差从数组中获取ArrayStoreException.

但请注意以下内容仍然合法且导致相同:

List<String>[] stringLists = new List[1];
List<Integer> intList = Arrays.asList(42);
Object[] objects = stringLists;
objects[0] = intList;
String s = stringLists[0].get(0);
Run Code Online (Sandbox Code Playgroud)

但是,它会在编译时生成未经检查的强制转换警告,正如您所提到的,在运行时会产生ClassCastException.

java generics scjp java-ee

6
推荐指数
1
解决办法
581
查看次数

Elasticsearch - EdgeNgram + highlight + term_vector =错误的亮点

当我使用带有edgengram的分析器(min = 3,max = 7,front)+ term_vector = with_positions_offsets

使用text ="CouchDB"的文档

当我搜索"couc"时

我的亮点是"cou"而不是"couc"


似乎我的亮点仅在于最小匹配令牌"cou",而我希望在准确的令牌上(如果可能)或至少找到最长的令牌.

它使用term_vector = with_positions_offsets分析文本时工作正常

删除term_vector = with_positions_offsets的性能有什么影响?

java lucene search n-gram elasticsearch

6
推荐指数
1
解决办法
3018
查看次数

单个monad的多个flatMap方法?

在Monad中定义多个flatMap(或>>=/ bind在Haskell中)方法是否有意义?极少数单子我实际使用(Option,Try,Either投影)只定义一个flatMap方法.

例如,定义一个flatMap方法Option可以生成一个函数Try吗?那么这样Option[Try[User]]就会被夷为平地Option[User]?(考虑失去异常不是问题......)

或者monad应该只定义一个flatMap方法,采用产生相同类型monad的函数?我想在这种情况下,Either预测不会是monad?是吗?

monads haskell scala

6
推荐指数
1
解决办法
502
查看次数

403尝试下载远程图像时

我想从一些网址下载图片.对于一些图片它工作正常,但对于其他人我得到403错误.

例如,这个:http://blog.zenika.com/themes/Zenika/img/zenika.gif

此图片访问不需要任何身份验证.您可以单击链接上的自己,并使用200状态代码验证它是否可用于您的浏览器.

以下代码生成异常:new java.net.URL(url).openStream().同样的,在引擎盖下org.apache.commons.io.FileUtils.copyURLToFile(new java.net.URL(url), tmp)使用相同的openStream()方法.

java.io.IOException: Server returned HTTP response code: 403 for URL: http://blog.zenika.com/themes/Zenika/img/zenika.gif
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1626) ~[na:1.7.0_45]
at java.net.URL.openStream(URL.java:1037) ~[na:1.7.0_45]
at services.impl.DefaultStampleServiceComponent$RemoteImgUrlFilter$class.downloadAsTemporaryFile(DefaultStampleServiceComponent.scala:548) [classes/:na]
at services.impl.DefaultStampleServiceComponent$RemoteImgUrlFilter$class.services$impl$DefaultStampleServiceComponent$RemoteImgUrlFilter$$handleImageUrl(DefaultStampleServiceComponent.scala:523) [classes/:na]
Run Code Online (Sandbox Code Playgroud)

我使用Scala/Play Framework开发.我试图使用内置的AsyncHttpClient.

// TODO it could be better to use itetarees on the GET call becase I think AHC load the whole body in memory
WS.url(url).get.flatMap { res =>
  if (res.status >= 200 && res.status < 300) {
    val bodyStream = res.getAHCResponse.getResponseBodyAsStream …
Run Code Online (Sandbox Code Playgroud)

java scala playframework-2.0

6
推荐指数
1
解决办法
3152
查看次数

创建永不匹配的mongo表达式的最佳方法

我正在寻找的是某种程度上相当于在SQL中做:

WHERE 1 = 0
Run Code Online (Sandbox Code Playgroud)

我正在寻找这样的东西,因为我正在构建一个类型安全的DSL来对我的域执行查询,支持连接和析取.有时,添加一个永远不匹配任何内容的查询可能更容易,而不是在代码中处理它.

例如,在我的用例中:

StampleFilters().underCategoryIds(sharedCategoryIds.toList)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它不能按预期工作,因为它sharedCategoryIds是空的,因此它会导致查询$(),但不会过滤任何内容.对于一个空列表,我宁愿构建一个永远不会返回任何内容的查询.

有没有一种简单的方法来做这样的事情,对表演没有任何影响?

我可能会添加一些查询,{ somefield: unexistingvalue }但我想知道是否没有更好的.

编辑

我希望表达式是可组合的.我的意思是它应该在查询中工作,例如$or(exp1,exp2,exp3)在哪里例如exp1永远不匹配的表达式.

如果您有任何建议,那么解释为什么一个比其他人更好以及它如何影响查询引擎性能(或不是)会更好

mongodb

6
推荐指数
1
解决办法
235
查看次数

在React/Flux中管理商店数据依赖性

我有一个使用Facebook的Flux架构开发的网络应用程序.该页面有两个视图:一个显示TODO项目列表.第二个视图显示一组随机的TODO项目.

显然,商店需要管理两个问题.第一个是可用的TODO列表.第二个是随机选择的TODO项目列表.

因此TODOStore,我有一个,他唯一关心的是管理可用的TODO项目.它有行动loadTODOs,addTODO,deleteTODO,editTODO.在启动时,此商店不会加载所有TODO项目.我希望它仅在必要时从数据库中检索TODO项目列表.

第二家商店是RandomTODOListStore.它的职责是管理随机选择的TODO项目.在我看来RandomTODOListStore应该通过TODOStore使用来访问TODO项目TODOStore.getTODOItems().

function RandomTODOListStore() {
   var $randomTODOs = [];

   dispatcher.register(function(payload) {
        var action = payload.action;

        switch (action.actionType) {
            case Constants.LOAD_RANDOM_TODO:
                loadRandomTODO();
                break;
        }
    });

    function loadRandomTODO() {
        $randomTODOs = selectRandom(TODOStore.getTODOList());
        emit("change");
    }
}
Run Code Online (Sandbox Code Playgroud)

这个问题是,如前所述,TODOStore它不会在启动时加载TODO项目.

问题是:"如何RandomTODOListStore保证TODOStore已经检索到TODO项目?" .

javascript reactjs-flux

6
推荐指数
1
解决办法
3809
查看次数

React.cloneElement - >添加className元素

假设我有一个ReactElementclassName,我想在其className中添加一个新类,而不覆盖现有的className.我该怎么做?

我尝试了以下但它确实覆盖了现有的className:

var hello = <Hello name="World" className="base"/>;
hello = React.cloneElement(hello,{className: "text1"});
hello = React.cloneElement(hello,{className: "text2"});
Run Code Online (Sandbox Code Playgroud)

但是这个解决方案有效

var hello2 = <Hello name="World" className="base"/>;
hello2 = React.cloneElement(hello2,{className: hello2.props.className + " test1"});
hello2 = React.cloneElement(hello2,{className: hello2.props.className + " test2"});
Run Code Online (Sandbox Code Playgroud)

但是这样安全ReactElement.props吗?它是ReactElement的公共API的一部分,并且应该在将来保持反向兼容吗?我无法在文档中找到它.

还有另一种方法来实现这一目标吗?

javascript reactjs

6
推荐指数
1
解决办法
5095
查看次数