阵列元素是否在工人之间正确发布?
假设我有一个大数组(任何原子数据类型,所以没有long或double),
future.get()).工人不会退货.它只是填充我的阵列.换句话说,它保证了前一个工作者的最后一次写入发生在第一次读取下一个工作者之前?
我是否应该(或者为了最佳实践或某事)让第一个工作人员返回数组,即使引用与我已经拥有的引用相同?
[编辑]一些背景:我使用byte数组或short数组,它们代表图像,每个使用多达500,000,000个元素.我对每个元素执行简单的算术运算.
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
是否存在满足以下规则的锁或其他同步原语:
boolean而不是一个块(duh).我知道我可以使用一个自己构建这个,AbstractQueuedSynchronizer但我从来没有玩过这个,目前我只需要一个开箱即用的无问题解决方案.(我很好奇,如果它存在)
还有一件事:
(这是一个假想的问题,因为它涉及面很广,并且存在针对特定情况的解决方法。)
是否可以原子地将a写入byte[]文件(as FileOutputStream或FileWriter?
如果写入失败,则写入部分数组是不可接受的。例如,如果数组为1,000,000字节,而磁盘在500,000字节后已满,则不应将字节写入文件,或者应以某种方式回滚更改。如果介质在写入过程中物理断开连接,甚至应该是这种情况。
假定数组的最大大小是已知的。
我在我的数据库中找到相似的食物名称时遇到问题(大约有 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)
这需要很多时间。我拥有的产品越多,花费的时间就越多
l = list(v_foods.name[0:5000])
花费时间:~3 分钟l = list(v_foods.name[0:10000])
花费时间:~13 分钟l = list(v_foods.name[0:20000]) …是否可以使类从泛型类型扩展?
我想对不同的组件进行子类化,或者implements为extends所有子类添加统一的功能。
我想要实现的是:
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) 我想使用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/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) 我的问题是,这是否有一个正确的名称.(即之前是否发明过)?
一种(文件高效的)树结构,配置为链接列表树,方式如下:
可以看出,代替每个节点必须记住子列表的"列表",它列出了一个子节点,并且使用链接列表链接到其他兄弟节点.这样,所有节点的空间要求是恒定的(2).
我在'旧'方式和'新'更快的1.7方式扫描目录之间处于两难境地.
我需要扫描驱动器上的所有目录并构建类似的树结构.在1.6中没有问题(除了它慢了10倍),但是使用FileFisitor我有一些很大的障碍.
我如何预先知道目录包含多少项(文件+子目录)?
File[] files = path.listFiles();和files.length就是答案.public FileVisitResult preVisitDirectory(Path path, BasicFileAttributes bfa){},计数在哪里?对每个子目录使用可伸缩数组(ArrayList)肯定会损害性能和已经很大的内存占用,因此我需要使用常规的固定长度数组.我一直在思考的另一种方法是使用可重用的主数组,一旦我知道了长度,就将其复制到目标数组.然而,这与递归性质以及目录和文件交错而不是分组的事实相冲突.我需要一个主数组用于每个递归深度(可能是无限的),除非我可以首先使它成为walk目录,然后是文件(我的研究表明无法完成).
我写了这行代码:
System.out.println(Math.pow(7, 23) % 143); // 7^23 mod 143
Run Code Online (Sandbox Code Playgroud)
我期望输出是,2但输出是93.0.有人知道我做错了什么吗?
java ×8
concurrency ×2
performance ×2
algorithm ×1
file ×1
filesystems ×1
generics ×1
ieee-754 ×1
java-7 ×1
java-8 ×1
java-stream ×1
javascript ×1
jvisualvm ×1
numbers ×1
optimization ×1
python ×1
sorting ×1
stream ×1
temp ×1