小编Boh*_*ian的帖子

有没有办法在JUnit测试用例中运行MySQL内存?

我只是想为访问MySQL数据库的服务添加测试用例,我想重新创建整个模式(对于某些场景,也只是使用带有每个测试用例所需数据的MySQL转储文件).我环顾四周,发现有些人使用SQLite/H2和其他人来做这件事,但我只是在游荡,如果有任何办法在内存中运行MySQL,所以我不需要担心MySQL的任何特定内容方言我可能正在使用我们的服务.

java mysql junit

59
推荐指数
3
解决办法
3万
查看次数

使用String.split()提取单词对

鉴于:

String input = "one two three four five six seven";
Run Code Online (Sandbox Code Playgroud)

是否有一个正则表达式,一次String.split()抓取(最多)两个单词,这样:

String[] pairs = input.split("some regex");
System.out.println(Arrays.toString(pairs));
Run Code Online (Sandbox Code Playgroud)

结果如下:

[one two, three four, five six, seven]
Run Code Online (Sandbox Code Playgroud)

这个问题是关于分裂正则表达式.它不是 "找到一种解决方法"或其他"使其以另一种方式工作"的解决方案.

java regex string split

55
推荐指数
2
解决办法
7328
查看次数

进行JNI呼叫的定量开销是多少?

仅基于性能,大约有多少"简单"的java行是进行JNI调用的等效性能?

或者尝试以更具体的方式表达问题,如果是简单的java操作,例如

someIntVar1 = someIntVar2 + someIntVar3;
Run Code Online (Sandbox Code Playgroud)

给出了一个"CPU工作"索引1,那个JNI调用开销的典型(球场)"CPU工作"索引是什么?


此问题忽略了等待本机代码执行所花费的时间.在电话用语中,它严格来说是呼叫的"旗帜下降"部分,而不是"呼叫率".


提出这个问题的原因是有一个"经验法则",当你知道本地成本(来自直接测试)和给定操作的java成本时,知道何时打算尝试编写JNI调用.它可以帮助您快速避免编写JNI调用的麻烦,只是发现callout开销消耗了使用本机代码的任何好处.

编辑:

有些人对CPU,RAM等的变化感到困惑.这几乎与问题无关 - 我要求java代码行的相对成本.如果CPU和RAM很差,它们对java和JNI都很差,因此环境因素应该平衡.JVM版本也属于"无关"类别.

这个问题不是要求以纳秒为单位的绝对时间,而是以"简单java代码行"为单位的球场"工作努力".

java performance java-native-interface

54
推荐指数
2
解决办法
2万
查看次数

Postgresql插入触发器来设置值

假设在Postgresql中,我有一个表T,其中一个列是C1.

我想在新记录添加到表时触发一个函数T.该函数应检查C1新记录中列的值,如果为null/empty,则将其值设置为'X'.

这可能吗?

postgresql triggers postgresql-9.1

50
推荐指数
2
解决办法
5万
查看次数

如何预测递归方法的最大调用深度?

为了估计最大调用深度,递归方法可以用给定量的存储器实现,在堆栈溢出错误可能发生之前计算所用存储器的(近似)公式是什么?

编辑:

许多人回答"它依赖",这是合理的,所以让我们通过使用一个微不足道但具体的例子来删除一些变量:

public static int sumOneToN(int n) {
    return n < 2 ? 1 : n + sumOneToN(n - 1);
}
Run Code Online (Sandbox Code Playgroud)

很容易证明,在我的Eclipse IDE中运行它会爆炸n不到1000(对我来说非常低).这个调用深度限制是否可以在不执行的情况下估算?

编辑:我不禁认为Eclipse有一个固定的最大调用深度1000,因为我得到了998,但是有一个用于main,一个用于初始调用方法,1000总而言之.这是一个"太圆"的数字恕我直言,是一个巧合.我会进一步调查.我只是Dux开销-Xss vm参数; 它是最大的堆栈大小,所以Eclipse运行器必须-Xss1000设置在某处

java memory stack-overflow recursion jvm

49
推荐指数
2
解决办法
7515
查看次数

可以使用属性启用/禁用弹簧启动@RestController吗?

给出一个"标准"弹簧启动应用程序@RestController,例如

@RestController
@RequestMapping(value = "foo", produces = "application/json;charset=UTF-8")
public class MyController {
    @RequestMapping(value = "bar")
    public ResponseEntity<String> bar(
        return new ResponseEntity<>("Hello world", HttpStatus.OK);
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有阻止端点开始的注释或技术可言,如果/除非某个应用程序属性存在/不存在.

注意:测试方法内的属性并且爆炸不是解决方案,因为端点将存在.

我不关心粒度:即只启用/禁用方法或整个类都很好.


由于配置文件不是属性,因此通过配置文件进行控制并不能解决我的问题.

java spring application-settings spring-boot

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

是否有一种优雅的方式来处理块中的流?

我的确切方案是批量插入数据库,所以我想累积DOM对象然后每1000个,刷新它们.

我通过将代码放入累加器来检测丰满度然后刷新来实现它,但这似乎是错误的 - 刷新控件应该来自调用者.

我可以将流转换为List然后以迭代方式使用subList,但这似乎也很笨拙.

有一个简洁的方法来处理每n个元素然后继续流,而只处理流一次?

java chunking java-8 java-stream

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

Haskell元组构造函数(GHC)和语言及其实现之间的分离

当我意识到这一点时,哈斯克尔再次震惊了我的思绪

(x,y)
Run Code Online (Sandbox Code Playgroud)

只是语法糖

(,) x y
Run Code Online (Sandbox Code Playgroud)

当然我想把它扩展到更大的元组.但

(,) x ((,) y z)
Run Code Online (Sandbox Code Playgroud)

给我

(x,(y,z))
Run Code Online (Sandbox Code Playgroud)

这不是我想要的.一时兴起,我试过了

(,,) x y z
Run Code Online (Sandbox Code Playgroud)

它有效,给出我想要的东西:

(x,y,z)
Run Code Online (Sandbox Code Playgroud)

这提出了一个问题:你能走多远?令我惊讶的是,似乎没有任何限制.以下所有都是有效的运营商:

(,)
(,,)
(,,,)
(,,,,)
--etc
(,,,,,,,,,,,,,,)
(,,,,,,,,,,,,,,,)
--etc
(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)
--etc
Run Code Online (Sandbox Code Playgroud)

这种行为是惊人的,并导致我的实际问题:它是否可以在我自己的功能中模拟?或者它只是元组运算符的GHC特定功能?我认为它是后者,因为我已经阅读了haskell98规范和iirc它说实现只需要为最多15个项目定义元组运算符.而GHC已经全力以赴,让你可以达到任意限制.

那么,是否可以在haskell实现本身中定义这个运算符/函数族,只使用类型系统和现有语言特性(声明,类型签名,函数定义等)?如果是这样,怎么样?或者这是不可能的,你必须考虑编译器来找到这个函数集合的支持框架?

这导致了一个更普遍的问题:Haskell本身支持多少Haskell,通过类型和函数定义,声明等; 以及编译器/实现支持多少?(我知道GHC是用Haskell编写的,但没有回答这个问题)

也就是说,如果你放弃标准库(包括前奏)并在原始的Haskell中从头开始做所有事情; 是否可以使用GHC的所有功能构建一个完整的实现,只使用最少的一组功能?为了使用Haskell构建haskell实现,您需要哪些最小的语言功能集?我是否可以放弃前奏,然后在GHC内手动完全重建?如果你放弃了前奏而从不导入任何东西,你还有什么可以继续使用?

看起来好像我问了一百万个问题,但他们真的都试图用不同的措辞问同样的问题.给你最好的拍摄!

haskell functional-programming tuples comma ghc

35
推荐指数
1
解决办法
5025
查看次数

Java Regex - 使用String的replaceAll方法替换换行符

我有一个字符串,并希望简单地用字符串替换它中的所有换行符" --linebreak-- ".

只写下来就足够了:

string = string.replaceAll("\n", " --linebreak-- ");
Run Code Online (Sandbox Code Playgroud)

我对它的正则表达式部分感到困惑.换行符需要两个斜杠吗?这够好吗?

java regex newline

34
推荐指数
3
解决办法
6万
查看次数

使用流迭代n次而不是使用for循环来创建n个项目

说我要创建n个项目.在Java 8之前,我会写:

List<MyClass> list = new ArrayList<>();
for (int i = 0; i < n; i++) {
    list.add(new MyClass());
}
Run Code Online (Sandbox Code Playgroud)

有一种优雅的方式来使用流来创建n个项目吗?
我想到了这个:

List<MyClass> list = Stream.iterate(0, i -> i).limit(10)
    .map(o -> new MyClass()).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

是否有标准/更好的编码方式?

请注意,实际使用情况稍微复杂一些,使用流会更灵活,因为我可以立即通过一行中的其他函数抽取项目,甚至无需创建对列表的引用,例如对它们进行分组:

Stream.iterate(0, i -> i).limit(10).map(o -> new MyClass())
    .collect(Collectors.groupingBy(...));
Run Code Online (Sandbox Code Playgroud)

loops java-8 java-stream

34
推荐指数
2
解决办法
2万
查看次数