小编gra*_*hez的帖子

当某些模块没有编译时,如何在IntelliJ中运行单元测试?

我已经获得了一个快速修复bug的遗留项目.这是一个基于蚂蚁的项目,所以我使用eclipse文件将其导入intellij.项目有几个模块,其中一些模块没有正确编译.我想做的是:

我有我需要编译的模块,我需要编写一些单元测试来覆盖我的更改.但由于其他模块没有编译,我无法运行这些测试.我无法从项目中删除这些模块,因为我正在使用的这些模块使用这些模块中的一些类(ant magic).

有没有办法不编译和制作整个项目,只需单个模块?我希望能够像在eclipse中一样使用它,即使其他代码被破坏,你也可以随时运行测试.

java testing intellij-idea

5
推荐指数
1
解决办法
1215
查看次数

Hadoop中的Mappers和Reducers必须是静态类吗?

我试图在Hadoop中做一些简单的事情,并发现当编写映射器和reducer时,到处定义为静态.我的任务将被分解为几个map部分和一个最终部分reduce.如果我想在其他工作中重复使用我的一个映射器怎么办?如果我将mapper类定义为内部类,static我可以在其他工作中使用它吗?此外,非平凡的问题可能需要更多更复杂的映射器,因此将它们全部放在一个巨大的文件中会在维护时变得非常糟糕.

有没有办法让mappers和reducer作为常规类(可能甚至在单独的jar中)而不是作业本身?

java hadoop mapreduce

5
推荐指数
1
解决办法
2364
查看次数

单独的前端应用程序 - 构建和部署策略

有一种观点认为,在构建丰富的浏览器应用程序(JS-heavy)时,应将其视为单独的应用程序,而不是"后端"应用程序的一部分.我想知道在这样的设置中如何实现构建和部署?

假设我有java WAR文件暴露基于JSON的API(无论是JAX-RS还是其他) - 没有视图.然后我有我的前端应用程序的静态内容:js脚本html视图,CSS样式,图像等.我可以使用专用的构建工具,例如GruntJS,用于缩小/预处理等项目.

但现在我有点卡住了.这种构建应该是什么结果?仅使用Grunt创建的静态文件来分隔WAR?部署怎么样?我应该将这些WAR混合到一个完整的应用程序中,还是部署两个单独的例如example.com服务静态和那些静态用于api.example.com获取数据.

另一个问题是关于发展.因此,我希望我的js和css连接和缩小,但它对开发来说不太好(调试很难等).有什么技巧可以在开发模式下使用单独的源文件并仅在prod构建时连接?

javascript java frontend gruntjs

5
推荐指数
1
解决办法
716
查看次数

在AngularJS应用程序中使用普通的javascript对象是好还是坏的做法?

假设我需要一些不依赖于AngularJS的通用对象(例如,实现了一些特殊行为的特定集合).

我可以在AngularJS之外完全实现它,然后在服务/控制器中使用它.我也可以将其作为服务/工厂,并在其他组件中使用它.

我不知道在AngularJS之外编写代码然后在应用程序中使用它是好还是坏.一个重大的胜利是,在测试此类代码时,它更容易,因为它不需要AngularJS依赖项.

您是否将整个应用程序代码保存在应用程序的AngularJS世界中?

javascript angularjs

5
推荐指数
1
解决办法
620
查看次数

在这种情况下如何避免instanceof运算符

我正在编写简单的游戏,其中的细胞可以处于两种状态,由玩家自由拍摄.

interface Cell {
    int posX();
    int posY();
}

abstract class BaseCell implements Cell {

    private int x;
    private int y;

    public int posX() {
        return x;
    }

    public int posY() {
        return y;
    }

    ...
}

class FreeCell extends BaseCell {
}

class TakenCell extends BaseCell {
    private Player owningPlayer

    public Player owner() {
        return owningPlayer;
    }

}
Run Code Online (Sandbox Code Playgroud)

在每个回合中,我需要检查所有细胞以使用如下方法计算下一个细胞状态

// method in class Cell
public Cell nextState(...) {...}
Run Code Online (Sandbox Code Playgroud)

收集Set所有尚未服用的细胞.上面的方法返回,Cell因为单元格可能从Free变为Taken或相反.我正在做类似下面的事情来收集它们:

for (Cell cell …
Run Code Online (Sandbox Code Playgroud)

java oop polymorphism design-patterns

4
推荐指数
1
解决办法
1003
查看次数

这是在Ruby中保持连接池的首选方法吗?

我对ruby(在日常编写java)方面不是很有经验,而且我正试图找到保持连接池之类的"Ruby方式".我有多个线程的独立Ruby应用程序,我想出了类似下面的内容.

请注意,MongoClient由蒙戈本地Ruby驱动程序提供保持连接错误游泳池内,让所有我需要的是能够保持的一个实例MongoClient各地

require 'mongo'

module MongoPool

  # module instance var to ensures only one exists
  @mongo = nil

  def self.lazy_create
    @mongo ||= Mongo::MongoClient.new('localhost', 27017, :pool_size => 5, :timeout => 5)
  end

  # when getting connection lazily create pool by assigning to @mongo only if nil
  def connection
    MongoPool.lazy_create
  end

end

class PeopleRepository

  include MongoPool

  def random_person
    coll = connection['test']['people']
    coll.find_one
  end

end

# usage
PeopleRepository.new.find_one
Run Code Online (Sandbox Code Playgroud)

我知道有效(检查过几次调用object_id@mongo保持不变),但这是保持一切的首选方法吗?

可能有多个存储库,因此每个存储库都可以包含MongoPool和使用它的连接.上述解决方案有任何缺点吗?还有其他方法我应该注意吗?

注意:问题更多的是关于如何以Ruby方式执行操作,而不是关于如何一般地执行此操作(因为我使用它).

ruby module mongodb

3
推荐指数
1
解决办法
3273
查看次数

sinatra重定向错误

我在Sinatra模块化应用程序中重定向错误时遇到问题.我正在Heroku上部署,当出现错误时,应用程序就会死掉.

我希望它能够捕获此错误,重定向到错误页面并正常运行.

我在基类中设置了如下内容:

set :raise_errors, false
Run Code Online (Sandbox Code Playgroud)

error do
    redirect to('/')
end
Run Code Online (Sandbox Code Playgroud)

但是当我raise从路径块中发生错误时,它就会转到标准的Sinatra错误页面.

我需要做些什么来捕捉我的错误并重定向?

ruby heroku sinatra

2
推荐指数
1
解决办法
1968
查看次数

浏览器中的javascript:异步任务执行模型

我试图解决这个问题,并了解javascript异步如何在单线程浏览器环境中工作.

作为异步,我们可以同时处理定时器和xhr请求.现在假设我有类似下面的内容

function doStuff() {
    for(var i=0; i<100000000; i++) {
        // do something to make proc busy
        if(i%1000 === 0) {
            console.log('in for loop');
        }
    }
}


setTimeout(function() {
    console.log('timed out')
}, 2);
doStuff();
doStuff();
doStuff();
Run Code Online (Sandbox Code Playgroud)

定时器设置为非常小的值(2ms),所以我认为它应该如下工作:

1)定时器回调排队

2)doStuff()执行(作为一个整体?),需要一些时间(超过2毫秒)

3)运行定时器回调,因为一次doStuff()执行和另一次执行之间有一个时刻

4)接下来doStuff()

4)最后doStuff()被叫

我所看到的是所有三doStuff()件事都是在定时器回调触发之前完成的.它比那些2ms长得多.是的,我知道这个时间值setTimeout不能保证.

我的问题是javascript如何执行代码?在调用异步队列的某些内容之前,将立即执行的最小的原子块是什么?

javascript browser asynchronous

2
推荐指数
1
解决办法
1130
查看次数

javascript如何通过返回执行方法来简化此代码?

我正在玩JS,并有以下代码片段

var Dog = function(name) {
    this.name = name
}

Dog.prototype= {
    'bark': function() {
        alert(this.name + ' is barking');
    },
    'run': function() {
        alert(this.name + ' is running');
    }
}

var dogs = [new Dog('first'), new Dog('second'), new Dog('third')];


function invokeOnDog(what) {
    if(what === 'bark') {
        for(var i=0; i<dogs.length; i++) {
            dogs[i].bark();
        }
    }
    if(what === 'run') {
        for(var i=0; i<dogs.length; i++) {
            dogs[i].run();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想做的是简化这个invokeOnDog功能,因为它重复两次相同的模板.我正在考虑以某种方式返回应该在对象上调用的方法,但不知道如何做到这一点.

你能帮帮我吗?

编辑:

感谢您的快速回复.如果"what"与调用方法具有相同的名称,则它们都可以.但如果这两者之间没有匹配怎么办?

invokeOnDog('aggresive')应该调用bark方法并invokeOnDog('scared')应该调用run

javascript refactoring functional-programming

0
推荐指数
1
解决办法
105
查看次数