Kotlin 范型中的in 和out 是什么?

我们看一些源码发现,一些源码,在范型前面添加了一些关键字 in 或者 out,这又是什么呢?比如 kotlin内置的 Comparable.kt

再比如,Collections.MutableIterable 接口

为什么会有一些加in,有一些加out 呢?了解这个之前我们来看下

范型是什么?

泛型(Generics)是一种允许类、接口和方法操作任意类型(类型参数)的特性。泛型提供了一种类型安全的方式来处理对象集合和其他数据结构,而无需在编译时指定具体的类型。

举一个栗子:

Continue reading “Kotlin 范型中的in 和out 是什么?”

Kotlin 中遍历List的N种方式

最近开发使用Kotlin确实挺爽的,就在于这门语言足够现代化,和JetBrains家的编辑器结合起来更是无敌了,自动提示,编译优化都是很实用的,但这样基本也脱离不了这个生态了,话说今天使用List的遍历,居然有六种方式,使用哪种方式都可以。这样虽然看起来很庞大,看起来很难记的样子,但是好在编译器+idea足够聪明,记住一两种就OK了。这有点像是我们学习英语,随着对语义的更加紧准的表达,英文单词拓展到了十几二十万个。(方便的同时也会加大人们的记忆负担)

方式0

    brandList.forEach {
        println(it)
    }

方式1

    for (brand in brandList) {
        println(brand)
    }

方式2

  for (index in 0 until brandList.size) {
        println("$index:${brandList[index]}")
    }

方式3

    for (index in 0..brandList.lastIndex) {
        println("$index:${brandList[index]}")
    }

方式4

    for (index in brandList.indices) {
        println("$index:${brandList[index]}")
    }

方式5

    brandList.forEachIndexed { index, brand ->
        println("$index:${brand}")
    }

亚马逊Alexa认证方法

最近在看alexa 的 认证文档,记录几个关键概念:

FRR(Word-wake False Rejection Rate ) ,拒识率。没有唤醒次数/唤醒总次数

RAR(Response Accuracy Rate) 响应率,唤醒成功的次数/唤醒总次数

FAR(Wake-word False Alarm Rate) 误唤醒率

测试设备:

2个音响speaker(噪音+音频),3个笔记本,用于控制两个speaker,另一个记录,2个音响底座可调整高低。1个分贝仪

音频文件

  1. 话语录音,Alexa,明天天气怎么样等,包含三个男声,三个女声,提供六个不同的话术
  2. 不同长时间间隔的话语录音。
  3. 背景音乐(白噪声,音乐,FAR 十小时测试文件)

 

 

蓝牙传输协议类型

最近在和蓝牙耳机厂商联调,被各种各样的术语搞得头昏脑涨。

蓝牙芯片厂商主要有两家,一个是CSR,剑桥的一家公司,被高通24亿美元收购,,另一家BCM, 博通,美国公司,印象中很多网卡就是他们家的。

简单的来说 app与蓝牙设备之间传输数据主要有以下方式

基于CSR8670 4.0双模蓝牙模块,包含了A2DP(音乐播放),AVRCP(流媒体控制及音乐封面
传输),HFP(免提通话),SPP(数据传输),PBAPC(电话本同步),HID(鼠标),BLE DataTrans(低功耗模式下的小数据传输)等协议。模块上的VREG高电平开机、低电平关机,开机后自动连接最近连接的手机。蓝牙模块与MCU执行UART 通信,使用AT指令实现连接、断开、拨打电话、音乐播放及远程控制、下载电话本、数据传输等功能。方案因采用4.0双模式,无需MFI认证可以兼容安卓、苹果和微软等平台的数据通信