近期大火的《破冰行动》中,林景文和赵嘉良在剧中使用的“暗网”作为毒品交易的平台,那么这个“暗网”在现实世界中又是怎么样的呢? 我们先看一下维基百科和百度百科的介绍(点击图片放大) ? ?...在各大媒体的报道中,基本上都说暗网是充斥着暴力,犯罪,变态,毒品等一切非法勾当。 然而实际是怎么样的呢?...rso4hutlef454irefqp.onion/ http://tfwdi3izigxl4lure.onion/ http://sheep53u64fi457aw.onion/ 毫无逻辑可言,而打开一些暗网的导航网站,立马就看到了很多没有在普通互联网上的东西...在文明的社会中,始终存在着各种各样披着人皮的恶魔。我们不知道他们是谁,我们只有提高自己的防范意识,古人云:害人之心不可有,防人之心不可无。...在我们的国家,真的远比那么发达国家安全,好多人出国旅游,在国外基本都会被提醒,夜晚最好锁好房门不要出去乱逛,而在中国,半夜三更还有人在大街上撸串儿。真相也的确如此。
A this.A(x) B this(x) C super(x) D A(x) 考点:考察求职者对this的理解 出现频率:★★★★★ 【面试题分析】 this的作用其中一个就是在一个构造方法中调用另一个构造方法...,格式为this(参数); 构造方法直接this(),非构造方法则用this.() super是调用父类的方法; A(a)这种形式是在new一个类时使用。
我之前每次跟别人分享 Kotlin 反射的时候,都会让大家小心点儿它,因为它一方面体积大,另一方面性能也差,不仅如此,还有一些小毛病,这些内容在我很久之前的一篇文章详细讨论了:Kotlin 反射你敢用吗...需要注意的是,过去的版本应该在后续的执行中也不会很慢,只是去年的文章我没有太注意这部分数据。...3. 2.5M的 Jar 包 当时提到了 2.5M 的 jar 包的问题,如果你是在 Server 端使用 Kotlin 反射,相信你也不会 care 这点儿包体积,更何况编译完之后也只有 400K 的样子...,这对于 Android 应用来说也不是什么大问题,毕竟 Apk 的瘦身大头应该在资源上,也许你把设计出的某一个序列帧动画用代码实现了就可以省掉好几 MB。...而一些未完善的部分也在最近的版本得到了完善,因此 Kotlin 反射库的使用评级由“谨慎使用”上调为“合理使用”。 ----
KMM是什么 KMM的全称是Kotlin Multiplatform Mobile,与之对应的是KMP—Kotlin Multiplatform Project,其实就是一个是Kotlin移动端跨平台,...我们这里直接将返回展示展示在文本中,最终实现的程序是这个样子的。 这个UI我们将在后面的Compose Multiplatform 中实现。这样我们就实现了双平台一个简单的数据请求的例子。...项目配置好之后,我们接着刚刚查询每日一问的功能来实现,当然在配置的时候肯定踩了很多坑,这些我都记录在我的博客中了。 实现双端的网络数据显示 iOSApp.swift中的代码是这个样子的。...目录下编写解析网络数据并现实的Compose方法,然后在Application下调用就行了。...好在Kotlin在1.8.20版本中推出了Kotlin/Wasm,最新的Compose for Web 是基于Kotlin/Wasm的,当前处于试验阶段。
这期咱们再跟随Benny一起来看看“Kotlin”是什么。...你突然发现这代码居然看上去跟窗外的世界很像,只是,给代码用的净化器应该是什么牌子的呢? 『小米的怕是不行了吧。』你哈哈一笑,似乎对此感到很开心。 那开心转瞬即逝,你不得不面对这令人苦恼的现状。...于是你尝试着用 Kotlin 写下了类似的代码: fun findPersonFromCacheOrCreate(): String{ ... } 当你企图在这个方法中返回 null 时,聪明的...你在问自己,尽管对过去百般不舍,可你还是很欣赏你的代码现在的样子: nameView.text = "橘右京" 再也不需要 ButterKnife 了,更不需要什么 findViewById 了——这就是命...你从沉思中回来,发现你眼前不过仍然是你的 IDE,而屏幕上的这段代码,正是 P 先生的源码。真的是太巧妙了: ? 『Impressive.』你一副恋恋不舍的样子。
在Kotlin中,定义方法很有趣,不仅仅因为方法的关键字是fun(function前几个字符),还是因为你会惊奇的发现,它允许我们在方法中定义方法。...的方法体中,即methodB被称为局部方法或局部函数 methodB只能在methodA中方法调用 methodB在methodA方法外调用,会引起编译错误 既然Kotlin支持了局部方法,相比它应该有什么特殊的用武之地呢...作为一个程序员,好奇应该是他的特质之一,我们应该会想要研究一下,局部方法的实现原理是什么,至少我们在Java时代从来没有见过这种概念。 其实这件事仔细研究起来,还是有不少细节的。...试想一下,如果你进入一个方法,看到的是一连串的局部方法,可能或多或少有点别扭。 但是试想一下,既然有这样的问题,为什么还要被设计成这个样子呢。...关于Kotlin中的局部方法,我们可以去尝试来达到限定范围,拆分方法的目的,在使用时,尽量选择非捕获的形式的局部方法。
但是这种实现方法有点过时,不潇洒,现在流行的做法应该是这样子 看, 一样的实现了要求,代码却简洁了许多。...更一般的符合大众审美的写法是这样子的 这种写法和第一种写法思路是相同的, 不同点在于,第一种方法使用的是lamda表达式,而这种方法使用的是匿名函数。...在java中要实现这种编程模式只能使用类,可以是具名类, 也可以是匿名类, 在java的世界里,函数不能独立存在,它必须依赖于类。...于是,要把一个函数当参数传递, 只能传递一个类实例,这个类中再带上这个函数。 代码像这个样子 或者这样 原本几行代码可以搞定的事情却被写成了十几行,而且全是毫无意义的仪式性代码。...上面那个臃肿的java匿名类,换成kotlin就是这样子 protected void onCreate(Bundle savedInstanceState) { btn.setOnClickListener
今天在 Medium 看到了一个很有趣的小知识,爬上来和大家分享一下。...对于 Kotlin 代码,凡事不决,首先反编译。看看 Java 代码长什么样子。...左边的代码在条件判断分支中执行打印语句,符合我们想象中的执行逻辑,这没有问题。...右边的代码在 let 代码块中执行打印语句,虽然不符合我们想象中的执行逻辑,但是它仍然打印了 ,positive,zero 。...到这里,你应该也明白上面是怎么回事了。let 的执行上下文遵循了 就近原则 , 下图中的两段代码是等价的。
1 对于 Android 开发,我应该学习 Java 还是 Kotlin? 2017 年,谷歌正式宣布支持使用 Kotlin 进行 Android 开发。...这是目前为止最好的学习方式: 它将提供大量你在今后的日常工作中需要的技能。 它将使你在处理代码以及自己寻找答案时更加自如。 它将为你的简历提供一些具体的内容。一个小而精湛的应用将创造奇迹。...在 GitHub 上创建一个账号,并为开源软件做贡献。 通过博客和社交媒体分享在线学习经验。上述几条有个很大的好处,就是没有时间限制,可以在你的整个职业生涯中增加你的信誉。...7 Jetpack Compose 是什么?我应该学下吗? Jetpack Compose 是谷歌新推出的一个 Android UI 框架。这是一种使用 Kotlin 编写 UI 的新方法。...你可以随时用 Compose 开发一个新的应用,看看它是什么样子。 8 小结 在从事了 10 年的 Android 开发工作后,如果要重新开始我的职业生涯,我就会像上面所说的那样做。
2 配置 在我们的AndroidStudio开发工具中,要想使用Kotlin这个优秀的开发语言,我们需要安装插件,直接在安装插件界面搜索Kotlin然后安装。...3 示例 首先我们还和以前一样,创建一个Android项目,自动创建一个Activity之后我们再创建一个java类: 那上面的代码如果用kotlin实现是什么样子呢。...上面的代码只是让你先简单熟悉下Kotlin代码时什么样子的,接下来我们先去学习一下Kotlin的基本语法。相信很容易上手。 4 Hello World! 我们由一个简单的"Hello World!"...在Kotlin语法中,语句结尾都不在有分号“;”。 在Kotlin中变量声明有两种类型,val修饰变量是只读变量即只能赋值一次,再次赋值时就会编译错误 ,如果我们需要多次修改值就需要使用var。...上面使用了字符模板,在Kotlin中有两种字符模板形式,\、 枚举 在Kotlin中枚举还支持方法。
/distributions/gradle-4.4-all.zip 看上去也没啥毛病啊,我的 build.gradle.kts 是这个样子: buildscript { var kotlin_version...由于 Kotlin 是静态语言,能够在这个地方写出来 compile 那么一定是定义了这个方法,就像: dependencies { classpath(kotlin("gradle-plugin...那么 compile 到底是什么,gradle 自己没有定义就不能用了吗?那倒也不是,gradle kotlin DSL 会帮我们根据插件的 configuration 定义生成这样的代码。...详细说明在 gradle kotlin DSL 0.8.0 的更新说明当中:https://github.com/gradle/kotlin-dsl/releases/tag/v0.8.0 ,不过其中提到的...gskGenerateAccessors 我在 gradle 4.5 当中已经找不到了。
在 Java 中,对象类型的赋值其实是引用地址的赋值,也就是说,假设代码2赋值成功,objList和strList变量引用的是同一个地址。那会有什么问题呢?...而get方法返回集合中的元素,虽然集合中的元素类型未知,但是无论是什么类型,其均为Object类型,所以使用Object类型来接收是安全的。...不过幸运的是,在 JDK 中有这个一个方法:java.util.Collections#copy,该方法很好的阐述了 PECS 原则。...每次想用又记不清的时候,看一眼该方法就明白了~ // java.util.Collections#copy public static void copy(List src){} 画外音:知识很多、很杂,我们应该在大脑中建立索引,遇到问题,通过索引来快速查找解决方法 更安全的泛型检查 上述的一些检查都是编译时的检查,而想要骗过编译器的检查也很简单
比如我在 a 的内部有一处对别的方法的调用,这个方法可能是 b,可能是 c,不一定是谁,我只知道,我在这里有一个调用,它的参数类型是 int ,返回值类型也是 int ,而具体在 a 执行的时候内部调用哪个方法...所以对于函数类型的参数,你要指明它有几个参数、参数的类型是什么以及返回值类型是什么,那么写下来就大概是这个样子: fun a(funParam: (Int) -> String): String {...这个所谓的「高阶」,总给人一种神秘感:阶是什么?哪里高了?其实没有那么复杂,高阶函数这个概念源自数学中的高阶函数。在数学里,如果一个函数使用函数作为它的参数或者结果,它就被称作是一个「高阶函数」。...简单总结一下: 在 Kotlin 里,有一类 Java 中不存在的类型,叫做「函数类型」,这一类类型的对象在可以当函数来用的同时,还能作为函数的参数、函数的返回值以及赋值给变量; 创建一个函数类型的对象有三种方式...在 Kotlin 里,匿名函数不是函数,Lambda 也不是什么玄学的所谓「它只是个代码块,没法归类」,Kotlin 的 Lambda 可以归类,它属于函数类型的对象。
Java 则强调,异常总会出现,应该把异常视为解决错误的标准方法、而非众多方法中的一种。但我不是说 C++ 就不好,毕竟它的很多问题源自必须向下兼容 C,但这也是 C++ 获得成功的前提。...在 Go 和 Java 的发展历程中,如果都从一开始就引入泛型,那它们的最终面貌肯定不是我们现在看到的样子。不过这一切的起点都源自 Bill Joy。...我也不确定 Loom 最终会是什么样子,但应该跟某些协程版本大差不差。他们把 Loom 称为虚拟线程,其实就是给协程换了个称呼。不管具体为什么改名字,反正协程功能的增强对 Java 肯定是有好处的。...我们做过很多测试,比如异常处理,这种方法在小型或者低级线程程序中效果不错。但如果系统变得更大、更复杂的时候,问题就会出现,因为这些设计在中大型项目中基本起不了作用。...比如这个系统未来会是什么样子,以后要满足哪些需求等等。直觉和经验还是挺重要的,毕竟开发工作中或多或少都会有一点猜测的成分。 比如后续我们可能需要添加某些类型的功能,或者需要用某种方式做出变更。
【翻译】深入 Kotlin 协程 2017-10-26 by Liuqingwen | Tags: Kotlin 翻译 | Hits ? 一、前言 翻译好的文章也是一种学习方法!...我们需要把网络请求和反序列化分派到一个后台进程中执行。听起来很简单,但是实现它的最好方式是什么呢?...在 C# 5.0 中,追溯到 2012 年,关于异步函数微软提出了一个特性,非常类似 Kotlin 中的协程: public async Task doWork() { // do some...在 C# 中 async 和 await 都是关键字 在 C# 中 async 函数只能返回一个 Task 实例或者返回空 如果你仔细观察协程的这个例子,你会看到在 Kotlin 中, launch{}...一个 OutOfMemoryException 内存溢出的异常在没有使用协程而是大量线程运行下很容易发生,这并不是什么新鲜事了。 原理是什么? 让我们看一下 async{} 函数的签名是什么样子的!
这个时候,你的需求是,快速了解某个类、某个模块、某个方法做的是什么事情。在这个基础上,整个 app、模块的结构是怎么样的。...此外,通过 Extension Function 这个机制,Kotlin 对 Java 中绝大多数的常用类都作了扩展。前面提到的各种 Collection 方法,也是使用这种方式来进行扩展的。...它的值要么是在它定义的地方就确定了,要么是在构造方法里面确定的,你只需要检查两个地方就可以了,这对于代码理解,是一件极大的减少工作量的事情。...上面花了很多篇幅来解释,Kotlin 中 val 的价值。跟 Collection 中的众多扩展方法一样,这些都是 Kotlin 中,一些让代码更容易理解的机制。...像这样的机制还有很多,比如说在 Kotlin 中,if、when(Kotlin 中的 switch)都是表达式(Expression,会返回一些值),而不像在 Java 中,只是语句(Statement
这个时候,你的需求是,快速了解某个类、某个模块、某个方法做的是什么事情。在这个基础上,整个app、模块的结构是怎么样的。2....在Kotlin里面,类有一整套像这样,直接可以reveal intention的方法,简单点的有、、,、、等等,高级点的有、、、、等等。...我之前一篇文章说过,Kotlin的nullsafety是我最喜欢的特性,如果说第二喜欢的特性是什么,那就是关键字。在团队里面,我也一遍一遍的跟同事强调,能用的地方就不要用。...跟中的众多扩展方法一样,这些都是Kotlin中,一些让代码更容易理解的机制。...像这样的机制还有很多,比如说在Kotlin中,if、when(Kotlin中的switch)都是表达式(Expression,会返回一些值),而不像在Java中,只是语句(Statement,不会有返回值
是的,你没看错,没迷路,这里是 Kotlin ,不是 Objective-C,别怕接下来跟我一起认识认识这个 block 的前世今生。前方高能,请您带上耳机,戴上眼镜。 block是什么?...先来看看 Kotlin 代码长什么样子: ? 其中 body 就是一个 block, () -> T 是一个 函数块( 函数签名 )。block 可以当做参数传入, 也可以当做返回值返回。...那么在 Kotlin 里怎么办呢? 声明: ? 调用: ? 看到了么?不用在像以前那样还要单独去写一个 callback 的 interface 类了,是不是很简洁。...Kotlin 中 block 多参数调用 ? 写在最后 Kotlin 中 block 随处可见 { ..do somethings.},所以咱必须得掌握它....BTW 上面文中提到,block 会有内存泄露问题,无论还是 OC 是 Kotlin,当然我并没有提到如何解决,留给你第一个想象空间,那么第二个想象空间就是,既然有内存泄露,那么 block 的实现原理又是什么呢
并且在JAVA平台中,== 和 === 的概念 就跟我们JAVA中 == 和eques类似 这段代码中,我们可以看到,我们定义了一个Inta,又定义了两个可空Int 赋值 a,结果算出===false...,但是如果我们 改成== ,那就是值相等了,===是地址相同,很明显,我们是两个不同的变量,所以false 另外,在Kotlin中,小类型也不是大类型的子类,所以不存在强转的概念 比如这种错误的示范 这就隐式转换...arrayOfNulls声明一个长度固定的空数组Array定义一个指定长度,值的数组 再来看下字符串 这是我们常见的字符串,可以包含转义,还有一种 这是原生的字符串,用三个”“”表示,里面不包含转义,是什么就是什么...,当然,这样的话里面就有很多空格了 我们可以|声明当前起始位,并且trimMargin()去除空格,得到的结果 如果你没有这样处理的话,你输出的值是这个样子的 二.包 包的作用我相信大家都是知道的...三.控制流:if、when、for、while 1.if表达式 在kotlin中,if的用法不局限于判断,他还会有返回,所以我们的写法也很多,比如 2.When表达式 但是我们一般是需要else
领取专属 10元无门槛券
手把手带您无忧上云