小编Mar*_*mus的帖子

执行程序服务的并发数组访问

阵列元素是否在工人之间正确发布?

假设我有一个大数组(任何原子数据类型,所以没有longdouble),

  • 我创建了一个填充数组的工作者,我传递给它的构造函数,
  • 我提交工人执行人,并等待,直到它完成(future.get()).工人不会退货.它只是填充我的阵列.
  • 然后,我立即在其构造函数中创建并提交具有相同数组的另一个worker.它看到了最新的价值吗?

换句话说,它保证了前一个工作者的最后一次写入发生在第一次读取下一个工作者之前?

我是否应该(或者为了最佳实践或某事)让第一个工作人员返回数组,即使引用与我已经拥有的引用相同?

[编辑]一些背景:我使用byte数组或short数组,它们代表图像,每个使用多达500,000,000个元素.我对每个元素执行简单的算术运算.

java concurrency executorservice happens-before

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

为什么更新/更快的Java 8排序方式更糟?

List<Point> pixels = new ArrayList<>(width * height); // 1280*960

for (int y = 0; y < height; y++)
    for (int x = 0; x < width; x++)
        pixels.add(new Point(x, y));

// Java 7 sorting
Collections.sort(pixels, comparator);

// Java 8 sorting
pixels = pixels.stream().parallel().sorted(comparator).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

使用任何排序方法时,我首先会获得较慢的性能,之后会有所改善.我期待这一点,因为JIT编译器需要时间来优化高使用率的代码.

奇怪的是,旧的分拣机起初有点慢,而新的分拣机则更加缓慢,超过60%.过了一会儿,新的分拣机变得更快,正如预期的那样.但前两个/三个执行速度如此之慢的方式简直是不可接受的.

Java 7 collection sorter
0.258992413
0.265509443
0.536536068
0.117830618
0.136303916
0.111004611
0.134771877
0.108078261

Java 8 stream sorter
0.631757108
0.868032669
0.076455248
0.087101852
0.070401965
0.056989645
0.072018371
0.078908912
0.074237648
Run Code Online (Sandbox Code Playgroud)

规格:
CPU:Intel I7 3770(8核8M/1M/128K缓存)
cmd:javaw -server -cp bin Myclass

  • 有没有其他人经历过较新(流)操作的糟糕表现? …

java sorting performance java-8 java-stream

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

一个拒绝相同线程可重入但允许不同线程重入的锁

是否存在满足以下规则的锁或其他同步原语:

  • 锁具有无限许可,
  • 任何单个线程最多只能获得一个许可,
  • 没有持有许可证的线程可以随时获得许可证,
  • 当一个线程被拒绝一个许可证(它已经拥有一个)时,它应该返回一个boolean而不是一个块(duh).

我知道我可以使用一个自己构建这个,AbstractQueuedSynchronizer但我从来没有玩过这个,目前我只需要一个开箱即用的无问题解决方案.(我很好奇,如果它存在)

还有一件事:

  • 除了添加一个或两个额外类之外,不允许使用库

java concurrency java.util.concurrent

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

以原子方式将byte []写入文件

(这是一个假想的问题,因为它涉及面很广,并且存在针对特定情况的解决方法。)

是否可以原子地将a写入byte[]文件(as FileOutputStreamFileWriter

如果写入失败,则写入部分数组是不可接受的。例如,如果数组为1,000,000字节,而磁盘在500,000字节后已满,则不应将字节写入文件,或者应以某种方式回滚更改。如果介质在写入过程中物理断开连接,甚至应该是这种情况。

假定数组的最大大小是已知的。

java file stream

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

如何优化算法以更快地找到带有fuzzywuzzy的相似字符串?

我在我的数据库中找到相似的食物名称时遇到问题(大约有 10 万个产品名称)。我决定使用 fuzz.token_sort_ratiofrom libfuzzywuzzy来查找相似的产品名称。这是它的工作原理:

s1 = 'Pepsi Light'
s2 = 'Light Pepsi'
fuzz.token_sort_ratio(s1, s2)
Run Code Online (Sandbox Code Playgroud)

100

现在我想找到所有具有相似词的产品名称,结果fuzz.token_sort_ratio>= 90 这里我的代码:

#Find similar
start=datetime.now()
l = list(v_foods.name[0:20000])
i=0
df = pd.DataFrame(columns=['name1', 'name2', 'probab_same'])
for k in range(len(l)):
    for s in range(k+1,len(l)):
        probability = fuzz.token_sort_ratio(l[k], l[s])
        if  probability >= 90:
            df.loc[i] = [l[k], l[s], probability]
            i +=1
print('Spent time: {}' .format(datetime.now() - start))           
df.head(5)   
Run Code Online (Sandbox Code Playgroud)

这需要很多时间。我拥有的产品越多,花费的时间就越多

  1. l = list(v_foods.name[0:5000]) 花费时间:~3 分钟
  2. l = list(v_foods.name[0:10000]) 花费时间:~13 分钟
  3. l = list(v_foods.name[0:20000]) …

python algorithm optimization

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

从泛型类型参数(类型变量)扩展的类?

是否可以使类从泛型类型扩展?

我想对不同的组件进行子类化,或者implementsextends所有子类添加统一的功能。

我想要实现的是:

class MyTable extends MyAbstractComponent<JTable> {...}
class MyPanel extends MyAbstractComponent<JPanel> {...}
Run Code Online (Sandbox Code Playgroud)


    MyAbstractComponent t = new MyTable();
    MyAbstractComponent p = new MyPanel();
    container.add(t);
    container.add(p);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我该如何表述MyAbstractComponent
我尝试了以下操作,但它给了我错误“找到类型:参数 C.预期:类”:

abstract class MyAbstractComponent<C extends Component> extends C {...}
Run Code Online (Sandbox Code Playgroud)

java generics abstract-class

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

JVisualVM:"无法检测到本地应用程序"

我想使用JVisualVM监视本地Java应用程序.当我启动时,会显示弹出的"本地java应用程序无法监视"或"无法检测到本地应用程序".我在这里读到这是一个权限问题.每当我%TMP%hsperfdata_MY_USER_ID向我(已登录用户)和所有人(Windows用户)授予对文件夹的完全访问权限时,我启动JVisualVM时会重置权限.

我知道另一个解决方案是删除hsperfdata_MY_USER_ID,但为什么权限技巧不起作用?权限文件夹是否重置Windows功能?

系统:Windows 7

在cmd上测试以管理员身份启动.我使用相同的帐户,我没有传递任何JVM参数,如com.sun.management.jmxremote.port = XXXX.

java temp jvisualvm

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

JavaScript 中双精度和浮点精度之间的转换

如何将数字从双精度转换为单精度并返回?

例如,我在 Java/C/C# 中有这样的:

double x = 0.00001;
float f = (float)x; // should be 0.000009999999747378752 not 0.0000100000000000000008180305391403
int n = Math.floor(1001 * f / x); // should be 1000 not 1001.
Run Code Online (Sandbox Code Playgroud)

(别问。这是一些毛茸茸的 C 代码的简化版本,我需要 1:1 移植它)

另一个例子:

double y = Math.floor((double)(float)5.999999876); // should be 6.0
Run Code Online (Sandbox Code Playgroud)

我已经尝试过的:

var f:float = x; // syntax error
var f = x as float; // syntax error
var f = parseFloat(x); // returns full double-precision (0.0000100000000000000008180305391403)
var f = toFixed(x, ...); // Can't use …
Run Code Online (Sandbox Code Playgroud)

javascript floating-point ieee-754

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

链表树

我的问题是,这是否有一个正确的名称.(即之前是否发明过)?

一种(文件高效的)树结构,配置为链接列表树,方式如下:在此输入图像描述

可以看出,代替每个节点必须记住子列表的"列表",它列出了一个子节点,并且使用链接列表链接到其他兄弟节点.这样,所有节点的空间要求是恒定的(2).

data-structures

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

以递归方式使用FileVisitor?

我在'旧'方式和'新'更快的1.7方式扫描目录之间处于两难境地.

我需要扫描驱动器上的所有目录并构建类似的树结构.在1.6中没有问题(除了它慢了10倍),但是使用FileFisitor我有一些很大的障碍.

我如何预先知道目录包含多少项(文件+子目录)?

  • 老办法:File[] files = path.listFiles();files.length就是答案.
  • 新方法:在回调函数中public FileVisitResult preVisitDirectory(Path path, BasicFileAttributes bfa){},计数在哪里?

每个子目录使用可伸缩数组(ArrayList)肯定会损害性能和已经很大的内存占用,因此我需要使用常规的固定长度数组.我一直在思考的另一种方法是使用可重用的主数组,一旦我知道了长度,就将其复制到目标数组.然而,这与递归性质以及目录和文件交错而不是分组的事实相冲突.我需要一个主数组用于每个递归深度(可能是无限的),除非我可以首先使它成为walk目录,然后是文件(我的研究表明无法完成).

java filesystems performance java-7

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

Java总是给我错误的数字

我写了这行代码:

System.out.println(Math.pow(7, 23) % 143);   // 7^23 mod 143
Run Code Online (Sandbox Code Playgroud)

我期望输出是,2但输出是93.0.有人知道我做错了什么吗?

java numbers

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