小编Vit*_*tik的帖子

如何有效地计算平均值(移动平均值)?

我想出来了

n=1;
curAvg = 0;
loop{
  curAvg = curAvg + (newNum - curAvg)/n;
  n++;
}
Run Code Online (Sandbox Code Playgroud)

我认为这种方式的亮点是:
- 它避免了大数字(如果你总和然后除以可能溢出)
- 你保存一个寄存器(不需要存储总和)

问题可能在于求和误差 - 但我认为通常会有平衡的向上和向下舍入数,因此误差不会大大加总.

你看到这个解决方案有任何陷阱吗?你有更好的建议吗?

algorithm math average moving-average

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

我可以在String.format中预编译格式字符串吗?(或者做任何其他事情来使格式化日志更快?)

众所周知,String.format()的性能很糟糕.我看到我的(可能很常见的)典型案例有很大的改进.我多次打印相同的数据结构.让我们想象一下像"x:%dy:%dz:%d"这样的结构.我希望String.format()的主要问题是它必须始终解析格式化字符串.我的问题是:是否有一些现成的类允许只读取一次格式化字符串然后允许在变量参数填充时快速给出字符串?用法应如下所示:

PreString ps = new PreString("x:%d y:%d z:%d");
String s;
for(int i=0;i<1000;i++){
    s = ps.format(i,i,i); 
}
Run Code Online (Sandbox Code Playgroud)

我知道这是可能的 - 以下是我的快速和肮脏的例子,它正在我正在谈论的事情,并且在我的机器上快约10倍:

public interface myPrintable{
    boolean isConst();
    String prn(Object o);
    String prn();
}

public class MyPrnStr implements myPrintable{
    String s;
    public MyPrnStr(String s){this.s =s;}
    @Override public boolean isConst() { return true; }
    @Override public String prn(Object o) { return s; }
    @Override public String prn() { return s; }
}

public class MyPrnInt implements myPrintable{
    public MyPrnInt(){}
    @Override  public boolean isConst() …
Run Code Online (Sandbox Code Playgroud)

java string optimization performance string-formatting

15
推荐指数
2
解决办法
1946
查看次数

怎么做:<<'END'在bash中工作以创建一个多行注释块?

我找到了一个很好的答案,如何在bash脚本中评论(由@ sunny256):

#!/bin/bash
echo before comment
: <<'END'
bla bla
blurfl
END
echo after comment
Run Code Online (Sandbox Code Playgroud)

''周围的END分隔符是重要的,否则里面的东西例如像块$(command)将被解析并执行.

这可能很难看,但它有效,我很想知道这意味着什么.有人可以解释一下吗?我确实找到了一个解释:,它是无操作或真实的.但是无论如何我打电话给无操作或真实都没有意义....

syntax bash shell

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

IntelliJ IDEA - 我可以自动增加构建(版本)编号吗?

我可以设置一些IntelliJ构建过程来预处理Java源代码并给我增加内部版本号吗?就像是:

int myBuildNumber = INTELLI_J_IDEA_MAGIC_WHICH_WILL_INCREMENT_EVERY_BUILD;
Run Code Online (Sandbox Code Playgroud)

java version intellij-idea

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

如何将大量的小联盟从C写入Java

我将把C代码改写成Java.原始C代码的核心是一个HW包装器.在C中,我们为每个HW寄存器使用了大量的联合,例如:

typedef union RegIntStatus
{
   u8 reg;
   struct
   {
      u8 bit0_abc:1;
      u8 bit1_cde:1;
      u8 bit2_xyz:1;
      u8 bit3_7_rsvd:5;
   } bits;
} regABC;
Run Code Online (Sandbox Code Playgroud)

然后我们用它就像

regABC r;
r.reg=0
r.bits.bit0_abc=1;
call(r.reg)
Run Code Online (Sandbox Code Playgroud)

想象那里有很多寄存器.让我们说40.如何将它实现到没有40个类文件的java中?我在考虑创建一个类

univerasl_reg<T> { // where T will be some "enum"
  public byte b;
  public byte set(T bit_mask,bool val) {
    // here is compile error it does not know variable bit_mask.v
    if(val) {b |= bit_mask.v}     
    else b &= bit_mask.v ^ 0xFF;
  }
}
Run Code Online (Sandbox Code Playgroud)

然后一个文件可以包含多个枚举,如:

public static enum RegTst{
        b1_abc(0x01),
        b2_xyz(0x02),
        b3_klm(0x04);
        public byte v; …
Run Code Online (Sandbox Code Playgroud)

java union enums

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

使用相同指数打印2个双打的最佳方法

如何以科学记数法最好地打印2个浮点数但具有相同的指数?例如:我想打印这样的数字:

 1.234e-6 
11.234e-6
Run Code Online (Sandbox Code Playgroud)

我想要一些功能来自动检测最佳指数 - 较小的数字始终从第一个十进制数字开始,较大的数字打印它必须具有相同的指数.例如:0.1和100将打印

   1.000e-1
1000.000e-1
Run Code Online (Sandbox Code Playgroud)

但即使我明确要求String.format("%2.3e",11.234e-6)我得到2个小数位 1.123e-5

java string double scientific-notation

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

如何强制腻子在输入 CR (\r) 时发送 LF (\n)?

我发现当我按回车键时,腻子会发送到我的串行设备 \r。有没有办法让腻子发送\n?

我发现可以按 CTRL+J 发送 \n - 但我只想按 Enter。

有人建议设置终端->“每个 LF 中的隐式 CR”。但这对我不起作用(我认为这是因为腻子收到而不发送)。

(我正在使用腻子版本 0.66)

putty serial-port

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

Android BLE BluetoothGatt.writeDescriptor()有时会返回false

我正在尝试编写BLE Android应用程序.我发现有时当我调用 BluetoothGatt.writeDescriptor()时它会返回false.

我没有在文档中找到任何关于此功能的限制说明.但是堆栈溢出的ppl说我需要等待BluetoothGattCallback.onDescriptorWrite()才能尝试编写另一个描述符.

这是一个回复说BLE忙于 writeDescriptor()而不能做其他写操作.

这是另一个线程说你不能再调用writeCharacteristic()两次.

我的问题是

  • 这是真的吗?
  • 是否真的缺少一些用于序列化BLE请求的内部android API缓冲区,每个开发人员都必须自己动手做?
  • 对于不同的功能是否属实?例如,当我打电话时,writeDescriptor()我知道writeDescriptor()在收到之前我不能第二次打电话onDescriptorWrite().但是,onDescriptorWrite()当我想打电话时,我必须等待writeCharacteristic()吗?
  • 此外,如果有功能间依赖性然后还有什么功能都有此限制(即:readCharacteristic(),readDescriptor(),requestMtu()...)?
  • 此外,BluetoothGattServer和BluetoothGatt之间存在相互依赖关系.所以,例如,当我打电话给BluetoothGattServer.notifyCharacteristicChanged()我时,我等待BluetoothGattServerCallback.onNotificationSent才能打电话BluetoothGatt.writeDescriptor()BluetoothGatt.writeCharacteristic()?(BTW对谷歌文档的称赞onNotificationSent()是通过运气记录得当.Doc说:

当要发送多个通知时,应用程序必须等待收到此回调才能发送其他通知.

  • 最后提出所有这些问题 - 我觉得Android BLE API文档不足.或者我错了,并且在某处记录了允许调用序列的方法?如果是,请指点我这样的文件?如果不是有一些渠道,我们可以打开谷歌的问题,并要求他们添加到文档的东西?我的意思是它可能不是很多文本 - 某些功能就像onNotificationSent()arleady正确记录的那样.他们只需要将这句话复制到其他功能.

android bluetooth-lowenergy

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

C预处理器init数组

我正在写一个复杂的宏,我还需要传递数组初始化器.基本上我有困难:

#define INIT_ARR(VAR_NAME,ARR_DATA) int VAR_NAME[] = ARR_DATA
Run Code Online (Sandbox Code Playgroud)

那我就叫它

INIT_ARR(myNm,{1,2,3});
Run Code Online (Sandbox Code Playgroud)

但预处理器将任何逗号(也是花括号内的逗号)解释为新的宏参数,因此它给出了错误:

error:  #55-D: too many arguments in invocation of macro "INIT_ARR" 
Run Code Online (Sandbox Code Playgroud)

预处理器不会忽略()所以我可以这样做:

#define INIT_ARR(VAR_NAME,ARR_DATA) int VAR_NAME[] = {ARR_DATA}
INIT_ARR(myNm,(1,2,3));
Run Code Online (Sandbox Code Playgroud)

但后来它被解释为

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

哪个不适合C.

有办法怎么做?例如从参数中删除大括号?

c c-preprocessor

3
推荐指数
2
解决办法
1210
查看次数

在 Java 中从多个线程读取(而不是修改)不是线程安全的对象(如链表)是否安全?

已经存在一个问题,线程是否可以同时安全地读取/迭代 LinkeList。似乎答案是肯定的,只要没有人从链表中对其进行结构性更改(添加/删除)。

虽然一个答案是警告“未刷新的缓存”并建议了解“java内存模型”。所以我要求详细说明那些“邪恶”的缓存。我是新手,到目前为止我仍然天真地相信以下代码是可以的(至少从我的测试来看)

public static class workerThread implements Runnable {
    LinkedList<Integer> ll_only_for_read;
    PrintWriter writer;
    public workerThread(LinkedList<Integer> ll,int id2) throws Exception {
        ll_only_for_read = ll;
        writer = new PrintWriter("file."+id2, "UTF-8");
    }
    @Override
    public void run() {
        for(Integer i : ll_only_for_read) writer.println(" ll:"+i);
        writer.close();
    }
}

public static void main(String args[]) throws Exception{
    LinkedList<Integer> ll = new LinkedList<Integer>();
    for(int i=0;i<1e3;i++) ll.add(i);
    // do I need to call something special here? (in order to say:
    // "hey LinkeList flush all your …
Run Code Online (Sandbox Code Playgroud)

java multithreading synchronization

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

python解码部分utf-8字节数组

我从通道获取的数据不知道UTF-8规则.因此,有时当UTF-8使用多个字节来编码一个字符时,我尝试将部分接收的数据转换为文本,我在转换过程中遇到错误.根据接口的性质(没有任何结束的流)我无法找出数据何时已满.因此,我需要处理部分utf-8解码.基本上我需要解码我可以存储的部分数据.存储的部分数据将作为前缀添加到下一个数据.我的问题是如果在python中有一些简洁的功能允许它吗?

[编辑]只是为了确保您了解docs.python中的功能

 bytes.decode(encoding="utf-8", errors="ignore")
Run Code Online (Sandbox Code Playgroud)

但问题是它不会返回我的错误在哪里,所以我不知道从最后我将保留多少字节.

python utf-8

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

如何在makefile中转义括号?

如何在makefile信息中转义括号?看我的例子:

$(info "gcc found :)")
Run Code Online (Sandbox Code Playgroud)

makefile gnu-make

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