Google Protocol Buffers和ASN.1(使用PER编码)之间最明显的区别是什么?对于我的项目,最重要的问题是序列化数据的大小.有没有人在两者之间做过任何数据大小的比较?
我正在尝试将ProGuard作为Maven构建过程的一部分.问题是官方的Maven插件使用的是ProGuard 4.3,它不支持Java 7.有没有简单的方法让插件使用Proguard 4.8?
我已经尝试指定插件的依赖项,但ProGuard似乎有一个新的Maven模块结构(proguard-base,proguard-parent等),所以插件不能使用任何版本> 4.4.这是我目前的pom看起来如何:
<plugin>
<groupId>com.pyx4me</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<proguardVersion>4.8</proguardVersion>
<obfuscate>true</obfuscate>
<options>
<option>-allowaccessmodification</option>
<option>-keep public class com.degoo.ui.ClientBackendStarter { public *; public static *; }</option>
</options>
<injar>${project.build.finalName}.jar</injar>
<outjar>${project.build.finalName}-small.jar</outjar>
<outputDirectory>${project.build.directory}</outputDirectory>
<libs>
<lib>${java.home}/lib/rt.jar</lib>
<lib>${java.home}/lib/jsse.jar</lib>
</libs>
<addMavenDescriptor>false</addMavenDescriptor>
</configuration>
<dependencies>
<dependency>
<groupId>net.sf.proguard</groupId>
<artifactId>proguard</artifactId>
<version>4.8</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</plugin>
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我正在优化名为PackJPG的C++库的编码步骤
我用英特尔VTune描述了代码,发现当前的瓶颈是PackJPG使用的算术编码器中的以下功能:
void aricoder::encode( symbol* s )
{
// update steps, low count, high count
unsigned int delta_plus_one = ((chigh - clow) + 1);
cstep = delta_plus_one / s->scale;
chigh = clow + ( cstep * s->high_count ) - 1;
clow = clow + ( cstep * s->low_count );
// e3 scaling is performed for speed and to avoid underflows
// if both, low and high are either in the lower half or in the higher half
// …
Run Code Online (Sandbox Code Playgroud) 我目前正在开发Azure表存储的应用程序.在该应用程序中,我有一个表,它将具有相对较少的插入(几千/天),并且这些实体的主键将在另一个表中使用,该表将具有数十亿行.
因此,我正在寻找一种方法来使用自动递增的整数而不是GUID作为小表中的主键(因为它将节省大量存储和插入的可伸缩性并不是真正的问题).
关于这个主题已经有过一些讨论,例如http://social.msdn.microsoft.com/Forums/en/windowsazure/thread/6b7d1ece-301b-44f1-85ab-eeb274349797.
但是,由于并发问题可能很难调试和发现,我对自己实现这一点感到有点不舒服.因此,我的问题是,是否有一个经过充分测试的阻止?
concurrency primary-key auto-increment identity-column azure-storage
我正在尝试提高我所拥有的Java函数的性能,该函数确定给定的搜索字符串是否包含集合中> 0的字符串.这可能看起来像是过早优化但功能被称为A LOT,因此任何加速都会非常有益.
代码目前看起来像这样:
public static boolean containsAny(String searchString, List<String> searchCollection) {
int size = searchCollection.size();
for (int i = 0; i < size; i++) {
String stringInCollection = searchCollection.get(i);
if (!Util.isNullOrEmpty(stringInCollection)) {
// This is a performance optimization of contains.
if (searchString.indexOf(stringInCollection, 0) > -1) {
return true;
}
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
该列表通常具有大约30个元素,并且在每次调用之间重复使用相同的集合.
上面的代码是一个非常简单的线性搜索.除非我们改变数据结构以使其优于O(n),否则我认为它不会得到显着改善.是否有任何数据结构可以让我这样做?
我需要在Java中创建一个时间戳(以毫秒为单位),该时间戳保证在该特定VM实例中是唯一的.我需要一些方法来限制System.currentTimeMillis()的吞吐量,这样它每ms最多返回一个结果.关于如何实现的任何想法?
我正在尝试在Java中使用带有SSL的自定义SocketImpl.因为我需要设置ServerSocket的套接字工厂.我现在注意到它是静态的,这给我带来了一些麻烦,因为我想为它提供一些在每个ServerSocket实例之间不同的参数.有谁知道让它静止的理由?对我来说,感觉就像一个不必要的约束,只会在你的应用中引入更多的全局状态.
更新 似乎有一些混乱,为什么这是一个麻烦.这造成的问题是它迫使我在整个应用程序中使用相同的工厂.如果我想在一个地方使用默认的SocketImpl而在另一个地方使用自定义的SocketImpl怎么办?如果不诉诸一些丑陋的反思黑客,就无法做到这一点,因为工厂一旦设置就无法改变.我也无法让我的工厂创建默认实现,因为SocksSocketImpl是包私有的.
我目前正在构建一个系统,其中S3将被Internet上的许多计算机用作持久性哈希集(S3 URL是从数据中推断出来的).如果两个节点存储相同的数据,那么它将使用相同的密钥存储,因此不会存储两次.当一个对象被删除时,我需要知道其他一些节点是否也在使用该数据.在那种情况下,我不会删除它.
现在我通过添加一个存储节点列表作为写入S3的数据的一部分来实现它.因此,当节点存储数据时,会发生以下情况:
这创建了一种幂等引用计数的形式.由于通过Internet的请求可能非常不可靠,我不想只计算存储节点的数量.这就是我存储列表而不是计数器的原因(如果节点发送相同的请求> 1次).
只要两个节点不同时写入,此方法就可以工作.S3(据我所知)并没有提供任何方法来锁定对象,以便所有这5个步骤都成为原子.
你会如何解决这个并发问题?我正在考虑实现某种形式的乐观并发.我该如何为S3做到这一点?我应该使用完全不同的方法吗?
我正在寻找一个专门用于压缩Jpegs而不改变图像的库.我找到了PackJpeg,但它没有提供任何源代码,你也不允许在商业上使用它.
我需要优化一些代码,其中我将一个int(32位)的向量乘以标量模p(其中p是素数(2 ^ 32)-5),然后从另一个向量模p中减去该向量.
代码如下所示:
public static void multiplyAndSubtract(long fragmentCoefficient, long[] equationToSubtractFrom, long[] equationToSubtract) {
for (int i = 0; i < equationToSubtractFrom.length; i++) {
equationToSubtractFrom[i] = modP(equationToSubtractFrom[i] - multiplyModP(fragmentCoefficient, equationToSubtract[i]));
}
}
Run Code Online (Sandbox Code Playgroud)
我使用longs因为Java不支持无符号整数但两个向量都是mod p所以你可以期望每个数字都是0 <= x <(2 ^ 32)-5
有什么想法来优化这个?mod p操作占用了大部分执行时间,因此优化这种方法的一种方法可能是在乘法后不知道怎么做modP并且只在减法后做.有关如何做到这一点的任何想法?
java ×5
concurrency ×3
performance ×3
optimization ×2
amazon-s3 ×1
asn.1 ×1
assembly ×1
c# ×1
c++ ×1
collections ×1
compression ×1
distributed ×1
epoch ×1
jpeg ×1
locking ×1
maven ×1
modulo ×1
primary-key ×1
primes ×1
proguard ×1
serversocket ×1
string ×1
throttling ×1
timestamp ×1
x86 ×1