小编Rob*_*ino的帖子

删除重复行而不进行排序

我在Python中有一个实用程序脚本:

#!/usr/bin/env python
import sys
unique_lines = []
duplicate_lines = []
for line in sys.stdin:
  if line in unique_lines:
    duplicate_lines.append(line)
  else:
    unique_lines.append(line)
    sys.stdout.write(line)
# optionally do something with duplicate_lines
Run Code Online (Sandbox Code Playgroud)

这个简单的功能(uniq无需先排序,稳定排序)必须作为简单的UNIX实用程序提供,不是吗?也许是管道中过滤器的组合?

询问的原因:在我无法从任何地方执行python的系统上需要此功能

shell scripting filter uniq

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

如何JUnit测试两个List <E>包含相同顺序的相同元素?

上下文

我正在为该类编写一个简单的JUnit测试MyObject.

MyObject可以从静态工厂方法,该方法的可变参数来创建字符串.

MyObject.ofComponents("Uno", "Dos", "Tres");
Run Code Online (Sandbox Code Playgroud)

在存在期间的任何时候MyObject,客户端都可以通过该方法以List <E>的形式检查它所创建的参数.getComponents().

myObject.ofComponents(); // -> List<String>: { "Uno", "Dos", "Tres" }
Run Code Online (Sandbox Code Playgroud)

换句话说,MyObject两者都会记住并公开使其存在的参数列表.关于这份合同的更多细节:

  • 顺序getComponents将与为对象创建选择的顺序相同
  • 允许并按顺序保留重复的后续String组件
  • 行为null是未定义的(其他代码保证没有null到达工厂)
  • 在对象实例化之后,没有办法改变组件列表

我正在编写一个简单的测试,它MyObjectString列表中创建一个并检查它是否可以返回相同的列表.getComponents().我立即这样做,但这应该发生在一个真实的代码路径中的距离.

在这里我的尝试:


List<String> argumentComponents = Lists.newArrayList("One", "Two", "Three");
List<String> returnedComponents =
    MyObject.ofComponents(
        argumentComponents.toArray(new String[argumentComponents.size()]))
        .getComponents();
assertTrue(Iterables.elementsEqual(argumentComponents, returnedComponents));
Run Code Online (Sandbox Code Playgroud)

  • 谷歌番石榴 Iterables.elementsEqual()最好的办法,只要我有库在我的构建路径,那些两个列表比较?这是我一直在苦恼的事情; 我应该使用这个辅助方法,它超过了 …

java junit guava

72
推荐指数
6
解决办法
9万
查看次数

Vim:执行当前文件?

如果我有一个带有shebang行的文件(例如#!/bin/bash)在Vim中打开并且该文件具有执行权限(即chmod +x),我知道我可以键入它来执行它而无需离开编辑器:

:! %:p
Run Code Online (Sandbox Code Playgroud)
  • : 用于命令模式
  • ! 运行shell命令
  • % 引用当前缓冲区中的文件
  • :p 使用当前文件的完整路径

这个频繁的任务是否有更短的捷径?

例如,有一个ZZ快捷方式:wq

vim

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

Vim:我如何清除所有标记?

我想"清除所有标记".

可选注释:(随意跳过它们)

一些带编号的标记是指我很久没有编辑的文件,我不知道它们为什么存在,它们是如何创建的,它们是如何有用的,因为它们引用了网络驱动器上的文件,我怀疑它们可能是是我的MacVim问题的一部分,在关闭和退出时偶尔会挂起100%的CPU利用率.后者是一种可能完全毫无根据的"迷信",但我已经没有东西要检查,所以我在绝望中试图脱口而出.

vim

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

Vim找到最后一次出现

在一个大缓冲区中,我想向下滚动到最后一次出现的模式模式.

如果我在第一次出现时,它是很容易搜索模式 /,扭转移动到下一个出现 nN并获得了最后..

如果我处于一系列事件的中间..是否有更好的跳跃方式?

vim

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

Java int []数组到HashSet <Integer>

我有一个int数组:

int[] a = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)

我需要一个类型集:

Set<Integer> s;
Run Code Online (Sandbox Code Playgroud)

如果我执行以下操作:

s = new HashSet(Arrays.asList(a));
Run Code Online (Sandbox Code Playgroud)

当然,它认为我的意思是:

List<int[]>
Run Code Online (Sandbox Code Playgroud)

而我的意思是:

List<Integer>
Run Code Online (Sandbox Code Playgroud)

这是因为int是一个原语.如果我使用过String,那么一切都会起作用:

Set<String> s = new HashSet<String>(
    Arrays.asList(new String[] { "1", "2", "3" }));
Run Code Online (Sandbox Code Playgroud)

如何轻松,正确和简洁地从:

A) int[] a...
Run Code Online (Sandbox Code Playgroud)

B) Integer[] a ...
Run Code Online (Sandbox Code Playgroud)

谢谢!

java generics collections

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

可靠的Java单元测试自动化?(JUnit的/ Hamcrest/...)

意图

我正在寻找以下内容:

  • 坚实的单元测试方法
    1. 我的方法中缺少什么?
    2. 我做错了什么?
    3. 我在做什么是不必要的?
  • 一种尽可能自动完成的方法

目前的环境

目前的做法

结构体

  • 每个类测试一个测试类
  • 方法测试分组在静态嵌套类中
  • 测试方法命名以指定测试的行为+预期结果
  • Java Annotation指定的预期异常,而不是方法名称

方法

  • 注意null价值观
  • 注意空列表<E>
  • 注意空字符串
  • 注意空数组
  • 注意由代码更改的对象状态不变量(后置条件)
  • 方法接受记录的参数类型
  • 边界检查(例如Integer.MAX_VALUE等...)
  • 通过特定类型记录不变性(例如Google Guava ImmutableList <E>)
  • ......有这个列表吗?好的测试列表示例:
    • 在数据库项目中检查的事项(例如CRUD,连接,日志记录......)
    • 要检查多线程代码的事情
    • 要检查EJB的事情
    • ......?

示例代码

这是一个人为的例子来展示一些技巧.


MyPath.java

import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Arrays;
import com.google.common.collect.ImmutableList;
public class MyPath {
  public static final MyPath ROOT = MyPath.ofComponents("ROOT");
  public static final String SEPARATOR …
Run Code Online (Sandbox Code Playgroud)

java eclipse junit unit-testing

23
推荐指数
1
解决办法
3388
查看次数

制片人/消费者多线程

背景

缺少学校的钱,我正在收费的夜班工作,并使用互联网教自己一些编码技能,希望明天更好的工作或我做的一些应用程序的在线销售.漫长的夜晚,很少有客户.

我正在处理多线程作为一个主题,因为我遇到了很多使用它的文献中的代码(例如Android SDK),但我仍然觉得它很模糊.

精神

我在这一点上的方法是:尝试编写我能想到的最基本的多线程示例代码,将我的头撞到墙上一点点,然后看看我是否可以伸展我的大脑以适应一些新颖的思维方式.我正在暴露自己的极限,希望超越它们.随意批评,挑剔,并指出做我想做的事情的更好方法.

目的

  • Get some advice on how to do the above, based on my efforts so far (code provided)

练习

这是我定义的范围:

定义

创建两个类,它们在数据对象的生成和消耗方面协同工作.One Thread创建对象并将它们传递到共享空间以供另一个接收和使用.让我们调用生产线程Producer,消费线程Consumer和共享空间SharedSpace.产生对象以供另一方消费的行为可以通过类比这种情况来同化:

`Producer`    (a busy mum making chocolate-covered cakes for his child, up to a limit)
`Consumer`    (a hungry child waiting to eat all cakes the mum makes, until told to stop)
`SharedSpace` (a kitchen table on which the cakes are put …
Run Code Online (Sandbox Code Playgroud)

java multithreading

17
推荐指数
1
解决办法
3339
查看次数

C++子集和2 ^ n /递归错误/澄清

这不是家庭作业,我没有钱上学,所以我在高速公路上的收费站工作班次(长时间没有顾客).

我正在尝试实现一个简单的子集求和算法,给定一个整数数组,返回它的一个子集,其总和等于所需的总和,报告它找到它需要多少次调用.

我使用Collections在Java中实现了一个实现,但这是非常臃肿的代码,即使我能够返回所有集合,加上所需的数字,并告诉函数在第一场比赛时停止.

我对这段代码的问题如下:而不是在2 ^ n时间内运行(这对于没有找到结果的实现是正确的,不是吗?)它在[2 ^(n + 1)]中运行 - 1次; O(2 ^ n)由评论指出.我可以看出为什么我会在更深层次上检查(runningTotal == targetTotal),实际上我自己添加了额外的深度,不是吗?我试图尽可能干净地模拟基本情况,如果你发现任何"代码味道",请告诉我.我一看到(runningTotal +考虑)== targetTotal,我应该立即打破吗?

注意:我不认为这属于"Code Review",因为我在询问特定的代码行,而不是整体方法(如果我需要改变方法,那么就这样吧,我这样做是为了学习).

在这里我的尝试(这是"可通过的"C/C++,除了上面提到的缺乏优化?):

#include <iostream>
using namespace std;
bool setTotalling(int chooseFrom[], int nChoices, int targetTotal,
    int chooseIndex, int runningTotal, int solutionSet[], int &solutionDigits,
    int &nIterations) {
  nIterations++;
  if (runningTotal == targetTotal) {
    return true;
  }
  if (chooseIndex >= nChoices) {
    return false;
  }
  int consider = chooseFrom[chooseIndex];
  if (setTotalling(chooseFrom, nChoices, targetTotal, chooseIndex + 1,
      runningTotal + consider, solutionSet, solutionDigits, nIterations)) {
    solutionSet[solutionDigits++] …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm subset

16
推荐指数
1
解决办法
622
查看次数

Bash:文件描述符

我是Bash的初学者,但我正在努力学习这个工具,以便在这些日子里找到一份计算机工作.

我现在正在尝试自学文件描述符.让我分享一些我的实验:


#!/bin/bash

# Some dummy multi-line content
read -d '' colours <<- 'EOF'
        red
        green
        blue
EOF

# File descriptor 3 produces colours
exec 3< <(echo "$colours")

# File descriptor 4 filters colours
exec 4> >(grep --color=never green)

# File descriptor 5 is an unlimited supply of violet
exec 5< <(yes violet)

echo Reading colours from file descriptor 3...
cat <&3
echo ... done.

echo Reading colours from file descriptor 3 again...
cat <&3
echo ... done.

echo Filtering …
Run Code Online (Sandbox Code Playgroud)

bash

15
推荐指数
1
解决办法
4328
查看次数