小编Man*_*odi的帖子

Kotlin:withContext()vs Async-await

我一直是kotlin文档,如果我理解正确,两个kotlin函数的工作原理如下:

  1. withContext(context):切换当前协同程序的上下文,当给定的块执行时,协同程序切换回上一个上下文.
  2. async(context):在给定的上下文中启动一个新的协同程序,如果我们调用.await()返回的Deferred任务,它将挂起调用协程并在生成的协同程序内执行的块返回时恢复.

现在为以下两个版本code:

版本1:

  launch(){
    block1()
    val returned = async(context){
      block2()
    }.await()
    block3()
  }
Run Code Online (Sandbox Code Playgroud)

版本2:

  launch(){
    block1()
     val returned = withContext(context){
      block2()
    }
    block3()
  }
Run Code Online (Sandbox Code Playgroud)
  1. 在两个版本中,block1(),block3()在默认上下文(commonpool?)中执行,其中block()在给定的上下文中执行.
  2. 整体执行与block1() - > block2() - > block3()顺序同步.
  3. 我看到的唯一区别是version1创建了另一个协程,其中version2在切换上下文时只执行一个协同程序.

我的问题是:

  1. 使用它并不总是更好,withContext而不是async-await功能相似,但不会创建另一个协同程序.大型数字协程,虽然轻量级仍然是要求苛刻的应用程序中的问题

  2. 是否有async-await更优先的案例withContext

更新: Kotlin 1.2.50现在有一个可以转换的代码检查async(ctx) { }.await() to withContext(ctx) { }.

kotlin kotlin-coroutines

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

Bash:使用bash脚本的头部和尾部行为

假设我有以下脚本: -

test.sh

#!/bin/bash
command1  #prints 5 lines
command2  #prints 3 lines
Run Code Online (Sandbox Code Playgroud)

我运行脚本 test.sh|head -n5

在这种情况下会发生什么?它会运行这两个命令吗?还是会在command1之后停止?如果我用-n1调用它怎么办?

背景:我可能会问一个非常基本的问题,但实际上我注意到了一些有趣的东西.我的脚本(不同的)处理了7,000个文件,每个文件产生1行输出.完全运行脚本需要7分钟,但是在处理完第一个文件后,执行head -n1会立即提示我脚本已经终止

编辑: 以下是我的脚本

for i in $(ls filepath);do
     echo "$i" # issue here
    python mySript "$i" > "/home/user/output/""$i"".out"
  fi
done
Run Code Online (Sandbox Code Playgroud)

删除上面的回声使脚本能够使用head -n1运行整整7分钟,但是使用echo它只打印第一行然后退出.

linux bash

22
推荐指数
2
解决办法
6153
查看次数

如何衡量Java代码所用的时间?

我需要分析Java中某些算法的复杂性.为此,我计划提供大量输入并测量Java实现所花费的时间.检查某些代码行之间的时间最准确,最准确的方法是什么?我需要精确到毫秒......

java time-complexity

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

连接Hive和Java JDBC

这里有一个问题从java连接到Hive,但我的不同

我的hive在machine1上运行,我需要使用在machine2上运行的Java服务器传递一些查询.据我所知,Hive有一个JDBC接口,用于接收远程查询.我从这里获取代码 - HiveServer2客户端

我安装了文章中写的依赖项: -

  1. 蜂巢-JDBC的*.jar
  2. 蜂巢服务的*.jar
  3. libfb303-0.9.0.jar
  4. libthrift-0.9.0.jar
  5. log4j的-1.2.16.jar
  6. SLF4J-API-1.6.1.jar
  7. SLF4J-log4j12-1.6.1.jar
  8. 共享记录-1.0.4.jar

但是我在编译时遇到java.lang.NoClassDefFoundError错误 完全错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/conf/Configuration
    at org.apache.hive.jdbc.HiveConnection.createBinaryTransport(HiveConnection.java:393)
    at org.apache.hive.jdbc.HiveConnection.openTransport(HiveConnection.java:187)
    at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:163)
    at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105)
    at java.sql.DriverManager.getConnection(DriverManager.java:571)
    at java.sql.DriverManager.getConnection(DriverManager.java:215)
    at com.bidstalk.tools.RawLogsQuerySystem.HiveJdbcClient.main(HiveJdbcClient.java:25)
Run Code Online (Sandbox Code Playgroud)

StackOverflow的另一个问题是建议在Maven中添加Hadoop API依赖项 - Hive Error

我不明白为什么我需要hadoop API让客户端与Hive连接.JDBC驱动程序不应该与底层查询系统无关吗?我只需要传递一些SQL查询?

编辑: 我正在使用Cloudera(5.3.1),我想我需要添加CDH依赖项.Cloudera实例正在运行hadoop 2.5.0和HiveServer2

但是服务器在机器1上.在机器上,代码至少应该编译,我应该只在运行时遇到问题!

hadoop hive

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

Aerospike Python客户端的分段错误

我正在使用Aerospike Python CLient放置并获得一些键值对:

aerospike_dca_client.put(key,bin)
...
...
bls_key_a = (AEROSPIKE_NAMESPACE,SET_NAME,bls_key)
hp_bid_str_a = aerospike_dca_client.get(bls_key_a)[3];
#Terminates at the line above
Run Code Online (Sandbox Code Playgroud)

但是在put之后,我的程序在Get命令期间以SEGFAULT终止.以下是我得到的堆栈跟踪GDB:

Program received signal SIGSEGV, Segmentation fault.
as_shm_node_get (cluster=0x353bd90508, ns=0x7fffffffc851 "test", digest=0x7fffffffc8e1 "/\231!\221h\223\240\021KX\377\357O\346u\214q\356\267#\177", write=false, replica=AS_POLICY_REPLICA_MASTER)
    at src/main/aerospike/as_shm_cluster.c:431
    431 src/main/aerospike/as_shm_cluster.c: No such file or directory.
        in src/main/aerospike/as_shm_cluster.c
        Missing separate debuginfos, use: debuginfo-install blas-3.2.1-4.el6.x86_64
        (gdb) bt
#0  as_shm_node_get (cluster=0x353bd90508, ns=0x7fffffffc851 "test", digest=0x7fffffffc8e1 "/\231!\221h\223\240\021KX\377\357O\346u\214q\356\267#\177", write=false, replica=AS_POLICY_REPLICA_MASTER)
            at src/main/aerospike/as_shm_cluster.c:431
#1  0x00007fffdf219ce5 in as_node_get (cluster=0x353bd90508, err=0x7fffffffc920, cn=0x7fffffffc7c0, command=0x7fffffffc740 "\002\003", command_len=82, timeout_ms=1000, retry=1,
                parse_results_fn=0x7fffdf21a97b <as_command_parse_result>, …
Run Code Online (Sandbox Code Playgroud)

python segmentation-fault aerospike

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

列式数据库如何进行索引?

我知道列式数据库将列数据放在磁盘上而不是行上。我也明白在传统的 row-wise RDBMS 中,B-Tree 的叶子索引节点包含指向实际行的指针。

但是由于 columnar 不会将行存储在一起,而且它们是专门为列式操作而设计的,它们在索引技术上有何不同?

  1. 他们也使用B-tress吗?
  2. 他们如何在他们使用的任何数据结构中建立索引?
  3. 或者没有公认的格式,每个供应商都有自己的索引方案来满足他们的需求?

我一直在寻找,但找不到任何文字。我找到的每个文本都是针对行式 DBMS 的。

mysql database

7
推荐指数
2
解决办法
1909
查看次数

RxJava 也许:处理 Empty 情况的任何巧妙方法?

我被困在这个问题上,这应该很简单。我需要订阅者在Maybe作为Empty Maybe. 我找到

  1. 我们可以传递默认的 Maybe 值或使用 switchIfEmpty 但我觉得两者都很笨拙。
  2. 还有一个 subscribe 函数,它采用 onComplete 函数(以及其他两个事件的处理程序),但 onComplete 不采用任何可用于查找是否已完成为空的参数。
  3. 另一种方式可能是Maybe.isEmpty.blockingGet(),但它也很脏。

我尝试了以下(Kotlin 语法):-

fun <T> Maybe<T>.subscribeWithEmptyHandler(onSuccess: (T) -> Unit, onError: (Throwable) -> Unit, onEmpty: () -> Unit) {
    this.isEmpty.subscribe({ if (it) onEmpty() }, { onError(it) })
    this.subscribe({ onSuccess(it) }, { onError(it) })
}
Run Code Online (Sandbox Code Playgroud)

但正如预期的那样,它运行订阅两次,在这里测试:-

Maybe.create<Int> {
    println("subscribing")
    //Remove line below to create Empty Maybe
    it.onSuccess(5)
    it.onComplete()
}
    .subscribeWithEmptyHandler({println("success")},{println("error")},{println("empty")})
Run Code Online (Sandbox Code Playgroud)

有人可以建议更简洁的方法来解决这个问题吗?

kotlin rx-java rx-kotlin

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

Canny边缘检测器的时间复杂度

我目前正在撰写一篇关于新隐写算法的研究论文.我在算法的某些方面使用了canny边缘检测器.在本文中,我需要编写新方法的时间复杂度,这又取决于canny边缘检测器的时间复杂度.

问题是网络上没有任何地方我可以找到关于canny的时间复杂性的任何参考.我甚至读过原始的精装纸.我无法正确推断它并需要一些帮助.

algorithm big-o time-complexity edge-detection

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

Java的String类中length()函数的复杂性是什么?

是O(n)还是O(1)(通过在对象的字符串分配期间保存私有变量的长度).

如果它是O(n),它是否意味着下面代码的复杂性是O(n ^ 2)?

for(int i=0; i<s.length()-1;i++){
    //some code here!
}
Run Code Online (Sandbox Code Playgroud)

java time-complexity

6
推荐指数
2
解决办法
3731
查看次数

从给定的IP地址和子网掩码中获取所有IP地址

在Java中,我需要获取给定IP网络包含的所有IP地址的列表.

例如,让netowork为:192.168.5.0/24,那么输出将是(192.168.5.0 ... 192.168.5.255).

我可以想到以下方式,但看起来很脏,有什么优雅的方式吗?InetAddress课堂上没有相同的功能.

  1. 从输入Ip和子网掩码中获取Network Ip.

    mask = (long)(0xffffffff) << (32-subnetMask);
    Long netIp = getLongfromIp(Inputip)& mask;
    
    Run Code Online (Sandbox Code Playgroud)

函数'getLongfromIp'包含以下代码 - 如何在Java中将字符串(IP号)转换为Integer

  1. 通过子网掩码获取主机数量

    maxRange = (long)0x1<<(32-subnetMask);

  2. 通过for i in (0 .. maxRange)在netIp中添加i 来获取所有希望的地址

  3. 将ip从上面的步骤转换为八位字符串.

Ps:我确定IP地址只能在IPV4中.

java ip network-programming

6
推荐指数
2
解决办法
7924
查看次数