小编fin*_*nnw的帖子

什么放在IF块中以及放入ELSE块中的内容?

这是一个次要的样式问题,但是您添加到代码中的每一点可读性都很重要.

所以,如果你有:

if (condition) then
{
   // do stuff
}
else
{
   // do other stuff
}
Run Code Online (Sandbox Code Playgroud)

你如何决定它是否更好,或者像这样:

   if (!condition) then
   {
     // do other stuff
   {
   else
   {
     // do stuff
   }
Run Code Online (Sandbox Code Playgroud)

我的启发式是:

  1. 保持病情积极(阅读时心理计算较少)
  2. 将最常见的路径放入第一个块

coding-style function-exit

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

自动生成不可变类和匹配构建器类

存在哪些工具/库将采用结构并自动生成不可变包装器以及用于逐步构建新实例的"构建器"类?

输入示例:

struct Foo
{
    public int apples;
    public int oranges;
    public Foo Clone() {return (Foo) base.MemberwiseClone();}
}
Run Code Online (Sandbox Code Playgroud)

示例输出:

public class ImmutableFoo // could probably be a struct
{
    private Foo snapshot;
    internal ImmutableFoo(Foo value) { this.snapshot = value; }
    public FooBuilder Builder() { return new FooBuilder(snapshot); }
    public int Apples { get { return snapshot.apples; } }
    public int Oranges { get { return snapshot.oranges; } }
}

public class FooBuilder
{
    private Foo state;

    public int Apples { …
Run Code Online (Sandbox Code Playgroud)

c# language-agnostic design-patterns immutability builder-pattern

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

计算地图:提前计算价值

我有一个计算映射(带有软值),我用它来缓存昂贵的计算结果.

现在我有一种情况,我知道在接下来的几秒钟内可能会查找一个特定的密钥.该密钥的计算成本也比大多数都要高.

我想在最小优先级线程中提前计算该值,以便在最终请求该值时,它已经被缓存,从而缩短了响应时间.

这样做的好方法是:

  1. 我可以控制执行计算的线程(特别是它的优先级).
  2. 避免重复工作,即仅进行一次计算.如果计算任务已经在运行,那么调用线程会等待该任务而不是再次计算该值(FutureTask实现这一点.使用Guava的计算映射,如果你只调用get它,那么这是真的,但如果你将它与调用混合,则不是put.)
  3. "预先计算值"方法是异步的和幂等的.如果计算已在进行中,则应立即返回,而不等待该计算完成.
  4. 避免优先级倒置,例如,如果高优先级线程在中等优先级线程执行不相关的操作时请求该值,但计算任务在低优先级线程上排队,则高优先级线程不能被饿死.也许这可以通过临时提升计算线程的优先级和/或在调用线程上运行计算来实现.

如何在所涉及的所有线程之间进行协调?


附加信息
我的应用程序中的计算是图像过滤操作,这意味着它们都是CPU绑定的.这些操作包括仿射变换(范围从50μs到1ms)和卷积(最多10ms).当然,不同线程优先级的有效性取决于操作系统抢占较大任务的能力.

java concurrency memoization guava

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

扩展HTML内容以填充窗口

我有一个垂直划分的HTML页面

  • 身体
  • 页脚

身体又被水平分割成

  • 左侧的大型DIV由滚动条围绕,显示图表的一部分
  • 右边的表格

页眉和页脚是固定高度的.主体应垂直扩展,以填充未被页眉和页脚占据的窗口部分.

类似地,表单是固定宽度的,滚动窗格应该水平扩展以填充窗口宽度.

该图非常大(最多10x10屏幕),所以我无法显示所有这些.相反,我希望尽可能多地显示(使用整个窗口),以便用户需要尽可能少地滚动.

我也不能使用javascript,因为有些用户必然是偏执狂,必须禁用它.

我考虑过的一些选择:

  • 滚动窗格单元格的宽度和高度设置为100%而所有其他设置为1%的表格
    不起作用.即使在滚动窗格DIV上进行绝对定位,表格(以及页面)也会展开以包含整个图表.
  • 绝对定位以通过页脚的高度将窗格从页面底部偏移
    工作但不准确:页脚的高度取决于当前字体大小以及文本是否被包装.这意味着我必须留出很大的余量以确保它们不重叠.
  • 将图中的IFRAME
    最好的解决方案我已经禁用了脚本的发现,但限制了什么,我可以在脚本的时候,他们做的启用.

我注意到,当禁用脚本时,Google地图会为地图使用固定大小的区域.如果谷歌放弃了这个问题,那是否意味着它不可行?

html css noscript

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

使用表格的内容作为关键字

有没有一种简单的方法来创建类似字典的集合,即

  1. 表可以用作键
  2. 具有相同内容的表被视为等效(而不是默认指针比较)

例如之后

t = createCustomTable()
k1 = {'a','b','c'}
k2 = {'a','b','c'}
t[k1] = true
Run Code Online (Sandbox Code Playgroud)

t[k2]应该评估true.
另外t本身应该是可用作以同样的方式的关键.

没有任何方法可以做到这一点

  1. 重新实现哈希表
  2. 转换k1k2字符串?(这就是我目前正在做的事情.)

lua

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

wav-to-midi转换

我是这个领域的新手 - 但我需要在java中执行WAV-to-MIDI转换.有没有办法知道WAV-to-MIDI转换涉及的步骤究竟是什么?我有一个非常粗略的想法,因为你需要; 对wav文件进行采样,对其进行滤波,使用FFT进行频谱分析,进行特征提取,然后将提取的特征写入MIDI.但我找不到如何做到这一切的可靠来源或论文?有人可以给我提供线索,如何以及从何处开始?是否有任何开源API可用于此WAV-to-MIDI转换过程?

谢谢

midi wav file-conversion pitch-tracking

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

饱和地添加了两个签名的Java"long"值

怎么能一个增加两个long,因此如果结果溢出,然后它被钳范围在Java中值Long.MIN_VALUE.. Long.MAX_VALUE

对于添加ints,可以执行long精度算术并将结果转换回int,例如:

int saturatedAdd(int x, int y) {
  long sum = (long) x + (long) y;
  long clampedSum = Math.max((long) Integer.MIN_VALUE,
                             Math.min(sum, (long) Integer.MAX_VALUE));
  return (int) clampedSum;
}
Run Code Online (Sandbox Code Playgroud)

要么

import com.google.common.primitives.Ints;

int saturatedAdd(int x, int y) {
  long sum = (long) x + (long) y;
  return Ints.saturatedCast(sum);
}
Run Code Online (Sandbox Code Playgroud)

但是在long没有较大的原始类型可以保持中间(非夹紧)总和的情况下.

由于这是Java,我不能使用内联汇编(特别是SSE的饱和添加指令).

它可以使用BigInteger例如

static final BigInteger bigMin = BigInteger.valueOf(Long.MIN_VALUE);
static final BigInteger bigMax = BigInteger.valueOf(Long.MAX_VALUE);

long …
Run Code Online (Sandbox Code Playgroud)

java math signal-processing bit-manipulation integer-overflow

9
推荐指数
2
解决办法
4413
查看次数

如何在我的原生应用程序中集成skype功能

我想在我的原生应用程序中集成Skype API.那可能吗?我用Google搜索,无法找到开始的方法.我知道有适用于Mac OS X的API.

我可以为我的iPhone应用程序使用这些API吗?我知道这是可能的,因为许多像Nimbuzz这样的应用程序已经在他们的iPhone应用程序中集成了Skype API.

iphone cocoa skype objective-c ios

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

找到不小于N的最小常数

常数是均匀分配60的幂的数字.例如,60 2 = 3600 = 48×75,因此48和75都是60的幂的除数.因此,它们也是常规数.

这是四舍五入到下一个幂的延伸.

我有一个整数值N,它可能包含大的素因子,我想把它四舍五入到只由小素因子组成的数字(2,3和5)

例子:

  • f(18) == 18 == 21 * 32
  • f(19) == 20 == 22 * 51
  • f(257) == 270 == 21 * 33 * 51

找到满足此要求的最小数字的有效方法是什么?

涉及的值可能很大,所以我想避免枚举从1开始的所有常规数字或维护所有可能值的数组.

algorithm math prime-factoring hamming-numbers smooth-numbers

9
推荐指数
3
解决办法
1681
查看次数

在修改了少量元素后重新排序向量

如果我们有一个先前已经排序的大小为N的向量,并且用任意值替换M个元素(其中M远小于N),是否有一种简单的方法可以以较低的成本对它们进行重新排序(即生成排序网络的深度减少)比完全排序?

例如,如果N = 10且M = 2,则输入可能是

10 20 30 40 999 60 70 80 90 -1
Run Code Online (Sandbox Code Playgroud)

注意:修改元素的索引是未知的(直到我们将它们与周围元素进行比较.)


这是一个我知道解决方案的例子,因为输入大小很小,我可以通过强力搜索找到它:

如果N = 5且M为1,则这些将是有效输入:

0 0 0 0 0     0 0 1 0 0     0 1 0 0 0     0 1 1 1 0     1 0 0 1 1     1 1 1 1 0

0 0 0 0 1     0 0 1 0 1     0 1 0 0 1     0 1 1 1 …
Run Code Online (Sandbox Code Playgroud)

sorting sorting-network

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