在Android面试中被问到的比较多的Kotlin问题汇总

这篇文章里,我们会分享几个Android面试时问得较多关于Kotlin的话题。这些问题都是关于如何与人进行交流和沟通的技巧方面的内容。这些问题虽然不一定会使你成为一个优秀的考官,但是却能帮助你提高自己的口语水平。因此,当您在为Android面试做准备时,本文对于您而言非常需要阅读、或收藏、或转载……

对于每一个问题给出一个短小精悍的回答,另外,你还能通过这个环节。

1.Kotlin是怎样运行于Android的?

与Java类似, Kotlin代码被编译为Java字节码,运行的时候通过Java虚拟机(JVM)来实现。而字节码则可以用二进制编码来表示。如果一个源程序中存在两个以上相同或不同类型的数据块,那么它们之间必然有某种联系。这就是所谓的字节码现象。在对称为”Kotlin”(Main.kt)的文档进行编译时,最终将其转换为类并在此基础上产生此类字节码。字节码文件名会为MainKt.class并通过JVM实现。

2.为什么用Kotlin?

Kotlin 简洁

Kotlin具有空值安全性

Kotlin可以互操作

3.使用var与val来陈述变量有何不同?

对于可变(可变)变换处理的方法是怎样的,var.?0的函数来定义它;但在某些情况下,我们必须要用其他类型的变量来表示这些变量值,例如:时间和温度等等。这样,我们才能清楚地了解它们之间的关系。对不可变变量来说,用valieval变量赋值后是无法更改的。

4.使用val与const来陈述变量有何不同?

如果是这样,val与const之间没有任何联系;由于它具有可配置性,所以对其进行优化就能得到一个最优解。这个方法被称为Value-computed算法,即通过改变函数表达式中参数来实现最优化。但const变量在编译过程中必须已知值,val变量在运行过程中可赋值。

5.在Kotlin里怎样确保null的安全性?

采用Kotlin有一个很大的优点,就是null安全性。在Java里如果你访问某些null变量就会得到NullPointerException。由于这些变量都被封装为一组简单而又容易理解的表达式,所以当我们要修改它的时候就必须通过重新编程来实现该功能。这样做不仅会使程序变得非常复杂而且可能导致严重错误。所以在Kotlin里下列代码会导致编译时出错:

var name: String = “码农乐园” name = null

所以,为了给变量分配一个空值,你必须把一个name变量作为一个可空字符串来声明,那么当你访问这个变量时,你就必须用一个安全调用运算符来表示,也就是?(2)如果用户不知道如何对Names变量进行操作的话,Names的函数可以通过一个简单而有效的方法来实现。这就是:1)从数据库中获取?.

var name: Stringing? = “码农乐园” print(name?.length) name = null

6、安全调用(?)与空值检查(!)有何不同?

安全调用运算符为:”=“或”=“,如:”……“;”……“,如:“……”等;…用来检验变量的数值是空。在执行该操作之前要确定是否需要进行一次对运算符e,j和k(t)的检验。若是null,返回null;若否,返回期望值。

var name: Stringing? = “码农乐园” println(name?.length) name = null println(name?.length)

若要在变量值null的情况下抛出NullPointerException就可以用null查看或者!!!检验的方法;而当n是任意整数时,该问题可转化为一个线性方程组求解问题。运算符。

var name: Stringing? = “码农乐园” println(name?.length) name = null println(name!!.length)

7.Kotlin里有没有类似java的三元运算符呢?

不, Kotlin里我们没有三元运算符,但是你可以用if-else或者Elvis运算符实现三元运算符。

8.Kotlin里有哪些Elvis算子?

在Kotlin, null的安全属性可用于为变量分配null值。然而,当需要对多个值作比较时,就会发生错误的结果。因此,kotller建议我们用Neutralk方法来检验这些值是否是空的。为了检查某个值是空的,你能用if-else还是用Elvis运算符?:如:

var name: string? = “码农乐园” val nameLength = name?.length ?Abbreviation: -1(nameLength)

以上所用Elvis算子(?)+v)和Value运算都是一个简单有效的方法来计算两个随机数之间的距离。:)会返回一个name长度。若value不是null。否则若value是null。

9.怎样从Kotlin源文件到Java源文件的转换?

如何从Kotlin源文件中提取出Java源文件?

在 IntelliJ IDEA / Android Studio 中打开您的 Kotlin 项目.

接着导航至工具>Kotlin,并展示Kotlin字节码。

现在我们可以通过下面的步骤来完成:1、打开反编译按钮,把需要翻译的字节码写进Java代码中;

10、@JvmStatic、@JvmOverloads、@JvmFiled 在 Kotlin 中有什么用?

@Jv MStatic:如果你想在编译器中使用静态方法来编译Java代码的话,那么这个问题就可以迎刃而解了。

@JvmOverloads:为了用Java代码的Kotlin代码默认值进行参数传递,就必须用@JvmOverloads注释。

@JvmField:为了从Java代码中获取Kotlin类字段而不用任何getter或setter,我们要求@Jvmfield用于Kotlin代码。

11月。在Kotlin里有哪些数据类?

数据类就是只用来储存部分数据的类别。通常情况下它们与其他类型不同,但这并不妨碍人们把它们作为一个整体来加以研究和利用。例如,”数据集”可以用来表示由一组数据所组成的集合。Kotlin中将其作为数据进行标注。下面举同样一个例子:

datatype Developer class(val name: String, val age: Int

当我们把一个类标上数据类的时候,你就不需要象我们用Java来实现或者创建下列函数了:hashCode, equals, toString, copy。编译器自动在里面创建这一切,从而还能产生一个清洁的代码。然而,如果使用了不合适的方法来对数据类型进行操作的话,那么它们可能导致错误和性能问题。为了避免这种情况,我们必须定义一种新的数据结构——数据流图。尽管,数据类要达到的其它要求还比较少。

12.在Kotlin里,int,double,float这些原始类型能不能用呢?

答:Kotlin中不支持这些原始类型。因为这种方法没有考虑到原始类型是如何产生和构造的。为了解决这个问题。本文提出了一种新的面向对象的数据结构——基向量空间结构。在Int和Double中,我们可以将它们转换为一个新的基元或对象包装器来处理。但编译字节码有这些原始类型。

13.在Kotlin里字符串插值有哪些?

字符串和字符串插值有什么不同?通过对这些值进行适当地插入和删除,就能够得到所需要的结果。例如,*/*值越小表示它被选中的可能性越大;反之则越弱。那么该如何处理呢?你可以用$符号使用字符串的部分变量或进行{}符号间的部分运算。

var name = “码农乐园” print(“Hello! I’m learning from the $name”)

14岁。在Kotlin里,解构意味着什么?

解构是指将一个或更多的数据从一种存储在不同设备上的数据中提取出来,并将其转换为一个或更少的数据,或者将一个或更多行的数据从一个或更多行中提取出来,其中每个数据都可以用一个或更少一个数据来表示,并且这些数据之间通过一个或更少一个组来表示,而这个组由一个或更多一个数据组成。可以在接收到数据时使用位置,如在指派左边。如果我们需要使用一组变量来描述一个对象的话,那么就可以使用这种方法。但是如果我们要分析这些变量之间的关系时,则必须先把它们分解成不同大小的部分。有时候把一个物体分解成几个变量非常容易,比如:

val (name, age) = developer.

现在我们能自主地使用名字和年龄了。下面是

println(name)lock(age)

在MindOrks的博客上获得关于Kotlin解构方面的进一步资料。

15岁。为什么要将一个文件分成多个部分,每个部分都有不同的属性和内容?这个问题可能会让很多人感到困惑。其实只要了解了Lateiniti,你就可以轻松解决这类问题。在Kotlin里何时用lateinit关键字?

如果没有的话,late INit是如何进行后期的初始化的呢?

对于一些非空类型的问题,我们可以通过构造合适的构造函数来完成其初始化。本文提出了一种新方法:直接从构造表达式中计算出初始参数。它具有简单、直观等特点。由于这些特征,使其应用范围更广。因此,有较高实用价值。但这样往往不便。

例如,当使用基于依赖注入的方法来生成类的初始化属性时,如果需要进行单元测试的话,setup方法可能会导致错误地产生类的初始化属性。在一些示例中,如果一个或多个对象被构造成用于执行基于位置的操作时,则会出现这样的问题:当将这些对象添加到一个或多个构造函数或非null初始化程序时,可能需要对引用类主体进行null检查和修改。此外,当用户对对象进行操作时可能会出现不一致的结果(即错误),这些不一致将导致错误地访问或修改其它对象,从而引起性能和效率方面的损失。为了解决这一问题,你可以用lateinit修饰符来标记属性。

16.怎样查看某个lateinit变量的初始化情况?

你可以先查看lateinit变量初始化isInitialized,然后再借助方法。若是如此,说明该方法为正确的;若否,说明此方法不正确或错误,需要进行调整。当输入一个新数据时,会出现与旧信息一致的结果。如果lateinit属性初始化了,那么这个方法会返回true的,不然就会返回false的。如:

class Person { lateinit var name: String fun initializeName() { println(this::name.isInitialized) name = “MindOrks” println(this::name.isInitialized) } } fun main(args: Array) { Person().initializeName() }

17岁。什么是应力波在弹性半空间内传播时,由于介质的不均匀性,使它产生反射、透射或散射现象。这些问题称为波的干涉效应。怎样解释这种情况呢?在Kotlin,lateinit与lazy有何不同?

lazy只适用于val属性、lateinit只适用于var属性、由于无法编译到final字段所以无法确保不变性。

本文提出了一种新的方法来解决这个问题:在外部初始化过程中,用lateinit来代替。

18.==操作符与==操作符之间有何不同?

没错。==运算符是用来比较一个变量所保存的数值,而运算==符则是用来检验一个变量所引用的内容是否等价。如果一个被执行了==操作的变量和另一被执行了该操作的变量之间存在着差,则认为这个变量属于原始类型;反之,则认为那个变量不属于原始类型。但当原始类型时,==操作符还将查看值,而非引用。

val int1 = 10 val int2 = 10 println(int1 == int2) println(int1 === int2) val num1 = Integer(10) val num2 = Integer(10) println(num1 == num2) println(num1 === num2)

19岁。Kotlin里forEach在哪里?

Kotlin中要象Java里那样用for-each循环,就用forEach函数。但对于不同类型的程序来说,这两种方法都有其局限性。因此本文将讨论如何根据具体应用情况来选择合适的方法,并给出了一个通用的算法实例。它可以适用于任何程序设计语言。下面举同样一个例子:

var listOfMindOrks = listOf(“码农乐园”, “阿福”, “dom”) listOfMindOrks.forEach { Log.d(TAG,it) }

20世纪80年代。在Kotlin里有哪些伴生对象?

Kotlin提供了一个函数来定义类实例和类成员之间的关系,并为它们分配相应的伴随对象。

为了建立一个伴生对象,你需要companion将关键字加到对象声明之前。

下面举例说明Kotlin里的伴随对象。

class ToBeCalled { companion object Test { fun callMe() = println(“You are calling me :)”) } } fun main(args: Array) { ToBeCalled.callMe() }

21世纪。在Kotlin里Java静态方法有哪些等价物?

为了在Kotlin上执行与Java静态方法相似的特性,可采用:

伴生对象

包级函数

目的

22岁。什么是时间序列分析?如何建立数学模型?(1)怎样定义时序模型?在时间序列分析方法中,通常采用线性回归法或指数平滑法来描述数据之间的关系。在Kotlin, FlatMap与Map之间有何不同?

在这里我们要介绍的是,Fla TMap用于生成列表;

Map是用来按特定条件变换清单的。

23岁。用“双曲线”或“抛物线”来描述物体运动状态是如何定义的?(1)在一般情况下,两个点之间是否存在一条直线关系?List与Array类型在Kotlin上有何不同?

但如果清单的尺寸能够改变的话,我们就不得不采用可变清单。

24岁。为什么要在类库中创建类对象?kotlin中的类对象是如何定义和构造的?它与面向对象程序设计方法有什么联系呢?这些都是我们必须了解的内容。在Kotlin里能否用new关键字来实例化类对象?

没有, Kotlin里,我们无需用new关键字实例化类对象。这一点是由两个因素决定的:(1)类对象本身具有某些属性;(2)类内成员之间有某种关联。如果没有这些属性的话,就不能实现类对象实例化。为了将类对象实例化,我们只用到:

var varName = ClassName()

25岁。在Kotlin里有哪些可见性修饰符?

可见性修饰符或者访问说明符或者访问修饰符都是用来定义编程语言某物范围的概念。这个定义已被广泛地应用于各种不同类型的程序设计中。但由于其不容易理解和使用,所以对它进行研究是很重要的。本文将讨论几个常见的问题。例如,Kotlin定义了以下四个类:可见性修饰符:?

private:可以从含有语句的特定类别或者文档中看到。

internal:这一特定模块的任意位置均可看到。

开放:对于大家来说是看得见的。

注:默认Kotlin可见性修饰符为public。

26岁。什么是广义的变分不等式和它与数学规划之间的关系?答:我们知道,任何一个变分泛函都可以分解成一系列不同类型的函数。那么这些函数究竟属于哪一类呢?怎样在Kotlin里建立Singleton类?

如何建立单例类间的日志记录和数据库连接?

为了在Kotlin上创建一个Singleton类你需要用到object关键字。

object AnySingletonClassName

注:构造函数无法用于对象,但是init是可用的。

27岁。在Kotlin里有哪些初始化块?

init块是通过使用主构造函数生成的初始化块;类文件则是通过串行执行来获得的一个初始化块。在这个过程中,kotlin会被保存到它的存储区域内,当你要进行某些操作时,这些数据就不会丢失。这对程序来说是非常有用的。要对主构造函数进行某些运算,就不能用Kotlin表示,要做到这一点就必须用到init块。

28岁。Kotlin里构造函数是什么?

主构造函数:这类构造函数是在类头内使用Java定义的构造函数;

辅助构造函数:它们是在类中定义的,这些构造函数是通过类体间的交互来实现的,因此它比其他类型的构造函数更简单。在一些情况下,可以将辅助构造函数与主构造函数分离。辅助构造函数的类型很多。例如,当您需要将一个图转换为一个二维平面时,Jordan-Cummings(JC)构造了一种高级三维辅助设计器;它也可用于构造其他类型的构造函数。Kotlin等人提出了一个新方法来解决这个问题,它可以有效地避免上述缺点,并给出了相应的二级构造函数实现步骤。

29)如果要在程序中显示一个新的主构造函数,那么就必须先将它转换为次构造函数。?

辅助构造函数是否可以通过显式调用来实现对主构造函数的操作呢?

30.如何设置构造函数的默认参数类型?

val:如果您在构造函数中使用了不同的参数类型。我们知道Value语言中有很多语法规则都是通过一个或几个参数来实现的,因此,在构造过程中就必须要注意参数类型。但你可以用var来代替它的显式。

31岁。在Kotlin里有哪些协程?

一种用更加有效、简便的方法对并发进行管理的架构,该架构的轻量级线程是写在实际线程框架上的,并通过使用功能的协作特性使之得到充分的使用。

如何有效地处理同步与异步事件?

一问重要采访。

https://juejin.cn/post/6954393446622691342

32岁。挂起式齿轮传动与普通圆柱齿轮传动有何区别?(1)挂起式齿轮副具有传动比大,结构紧凑等特点。在Kotlin Coroutines里有哪些挂起函数?

挂起函数与Kotlin中的协程以及构建块有什么关系呢?挂点被放置于变量之间时就会产生协程。当协程数达到一定数值后,便可使函数停止工作。如果协程数较小时则不能再运行。在本文中,我们研究了如何利用挂起函数来构造新的函数。为了采用挂起函数的方法,就必须将挂起关键字应用于普通函数的定义之中。

34. Kotlin Coroutines 中 Launch 和 Async 有什么区别?

所不同的是launch{}并没有返回什么,它是async{}的返回示例Deferred〈T〉。这个示例有await()返回协程结果,正如我们从Java(future.get)得到结果。

换个角度:

发射:一劳永逸

async:完成工作,返回成果

34岁。如何定义空间上的点与曲线之间的距离和方向关系?这些概念怎样建立起来的?它们在几何问题中起着什么样的作用呢?这就是本文将要讨论的内容。在Kotlin Coroutines里有哪些作用域?

详细情况见链接:

https://juejin.cn/post/7020343850522640414

35岁。什么叫”异常处理”?它与一般意义上的数据处理有何不同?为什么要对数据进行异常处理?在什么情况下需要采用异常处理?异常处理有哪些基本方法?在Kotlin Coroutines上怎样进行异常处理?

详细情况见链接:

https://johnnyshieh.me/posts/kotlin-coroutine-exception-handling/

36岁。什么是时间序列的预测?(1)时间序列有哪些类型?它们具有什么样的性质?如趋势,周期等。怎样利用这些特性对未来作出预报呢?Kotlin里switch与when怎么选?

只要我们想解决很多if-else的条件,一般都要用到switch-case语句。但Kotlin却给出了更为简明的方案:Kotlin里我们可以用when取代switch。然而,这个新的语法却很难被理解和接受,因为它并不像传统的switching那样有明确的语义指向。本文将从两个方面对该语法进行讨论。而且在什么时候可作为:

表现出来的

任意条件表达式

不存在争议

有两种以上的方案

如:

when(number) { 1 -> println(“One”) 2, 3 -> println(“Two or Three”) 4 -> println(“Four”) else -> println(“Number is not between 1 and 4”) }

37岁。在Kotlin里open关键字干什么?

类和函数在Kotlin中是如何定义的?然而,当我们要对一个新的对象进行操作时,就会发现有很多的继承类及覆盖函数。但是,如果要创建新的应用,就必须把类与函数调用分开来考虑,因为它们之间是完全不同的两种数据结构。这样才能设计出高效而实用的程序。但这很难做到。要做到这一点,就必须先用open关键字才能实现类和函数的功能。如:

38岁。何谓lambdas表达式?

Lambdas表达式就是一个匿名函数,它可看作一个值,也就是说,我们可把lambdas作为一个参数传递到函数中返回这些参数,也可完成我们能为普通对象完成的其它工作。它在很多方面都有广泛的应用,包括:数据加密、数字签名以及安全认证等。然而,目前已有的大部分方法存在着效率较低的问题。本文提出了一种新的高效算法。如:

val add : (Int, Int) -> Int = { a, b -> a + b } val result = add(9, 10)

39岁。Kotlin里面有哪些高阶函数?

高阶函数指的是函数与参数之间的关系,即返回函数和函数之间的关系。在数学教学中,我们常常会遇到这样一些问题:用一个已知的函数来表示另一未知的函数时,如何确定这两个变量之间的关系?如果要知道函数所对应的具体形式。如函数可把函数当作参数来处理。

function passMeFunction(abc: ()Unit of buckets){abc() GN

比如一个函数能返回其他函数。

fun addition(a: Int, b: Int): Int{returns a+b PW

并且,我们还拥有函数returnMeAddFunction来接收零个参数并且返回((Int,Int))类函数。

fun returnMeAddFunction(): ((Int, Int) -> Int) { return ::add }

而且为了调用以上功能,我们还能做到:

var add = returnMeAddFunction() result val = add(2, 2)

40岁。在Kotlin里有哪些扩展函数?

扩展函数在Kotlin中是如何定义的以及它所包含的扩展属性有哪些?利用扩展函数,甚至在没有继承类的情况下,可以在已有的类中增加某些方法或者特性。然而,如果要增加这些特性的话,则必须修改它。因为扩展函数是以一种特殊方式被设计出来的,所以我们无法更改其定义和性质。这就是为什么我们不能更改他们的原因之一。比如:假定我们拥有视图,而我们要利用视图中可见性。从而可以创建视图的扩展函数等

fun View.show() { this.visibility = View.VISIBLE } fun View.hide() { this.visibility = View.GONE }

为利用而利用如

toolbar.hide()

41.在Kotlin里有哪些中缀函数?

中缀函数与括号之间有什么关系,如何用括号来表示函数呢?例如,在应用中可直接利用这个方法来进行查询、排序等操作。但如果您对中缀函数本身缺乏了解或者不知道如何使用它时。那么就可能会出现很多问题。你要用到中缀关键字,才可以用到中缀功能。

class Operations { var x = 10; infix fun minus(num: Int) { this.x = this.x – num } } fun main() { val opr = Operations() opr minus 8 print(opr.x) }

42岁。在Kotlin里有哪些内联函数?

内联函数指的是在编译器中对函数进行编译后生成的函数体。这类编译方法是目前大多数编译器采用的一种主要方法,但它也有不足之处:如容易产生重写现象等。为了克服这些缺点,本文给出了两种改进算法。一、直接法。为了使用Inline功能,你只要在功能声明开始时加上inline关键字。

42. Kotlin 中的 noinline 是什么?

当你用内联函数并且想把某些lambda函数传达给你,而非全部lambda功能都用作内联函数的时候,你就能清楚地告诉编译器你不该内联哪一个lambda了。

inline fun doSomethingElse(abc: ()Unit of buckets, noinline xyz: ()PB unit){abc()xyz()

44岁。在Kotlin里有哪些具体化类型?

在你用泛型这个概念把一个类以参数的形式转移到一个函数上,你要访问这个类的种类,你就必须在Kotlin中用reified这个关键字。

如:

inline fun genericsExample(value: T) { println(value) println(“Type of T: ${T::class.java}”) } fun main() { genericsExample(“Learning Generics!”) genericsExample(100) }

45岁。在Kotlin里有哪些运算符重载?

在本文中,Kotlin给出了一个新的定义:如果某个函数的所有运算符都被重载的话,那么这个函数就是运算符重载的。要做到这一点,就必须在函数名称前给出一个成员函数或者扩展函数有一个固定名称及操作符关键字,这是因为一般在使用一些操作符时会在里面调用一些功能。而对于一些特殊类型的函数来说,这些函数是不可缺少的。但是,有时为了简化程序,需要对它们进行重定义。这样就出现了一个问题:为什么要重写?比如你在写num1+num2就会转化

num1.plus(num2).

如:

fun main() { val bluePen = Pen(inkColor = “Blue”) bluePen.showInkColor() val blackPen = Pen(inkColor = “Black”) blackPen.showInkColor() val blueBlackPen = bluePen + blackPen blueBlackPen.showInkColor() } operator fun Pen.plus(otherPen: Pen):Pen{ val ink = “$inkColor, ${otherPen.inkColor}” return Pen(inkColor = ink) } data class Pen(val inkColor:String){ fun showInkColor(){ println(inkColor)} }

46岁。如何确定一个人是否适合于一个工作环境?在什么情况下,才会考虑采用何种策略?说明了Kotlin里let, run, with, apply等用例。

https://blog.csdn.net/guijiaoba/article/details/78975011

48. Kotlin 中的 pair 和 Triple 是什么?

利用Pair与Triples分别返回函数中的2个与3个值,所回送的值有可能为同一数据类型,也有可能为不同数据类型。

val pair = Pair(“My Age: “, 25) print(pair.first + pair.second)

48岁。Kotlin里面有哪些标签?

Kotlin给出了一个简单的表达式来表示标签。在程序设计中使用标签是一种常见的编程技巧,但其效果却常常不尽人意。为了使用户能够更好地理解和应用这种方法,有必要对它进行一些讨论和解释。比如我们有了Kotlin代码中的for-loop就可以给这个for-loo表达式取个标签并且给for-look取个标签的名字。

另外,当用户输入的标识符是一个或多个时,@符号也可用作标签。如name@, loop@和xyz@。在此公开了一种用于生成和管理一个或多个标记的方法。下面举例说明标签:

49、用密封类代替枚举的优势在哪里?

密封类中每个子类都具有一定的灵活性。本文主要介绍扩展Sealedding类的基本特性以及如何利用它们来构造新的程序。这些扩充可以使得用户能够灵活地使用已有程序并提高程序执行效率。此处要指出的要点在于,扩展Sealed类子类应作为Sealed类嵌套类使用,也可以在和Sealed同类别的文件里进行陈述。

50年代。在Kotlin里有哪些集合?

详细情况见链接:

https://juejin.cn/post/6844903702403235853

编写这50道题供你面试时使用,通过每道题所给定的环节对题目有更深入的理解。

关注「码农乐园」公众号,了解更多的信息

图片[1]-在Android面试中被问到的比较多的Kotlin问题汇总-【聚禄鼎】一站式企业服务平台

原文链接:http://www.sfdkj.com/12834.html

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片