首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

放弃dagger?Anrdoi依赖注入框架koin

优势 依赖注入好处 增加开发效率、省去重复简单体力劳动 首先new一个实例过程一个重复简单体力劳动,依赖注入可以把new一个实例工作做了,因此我们把主要精力集中在关键业务上、同时也增加开发效率上...原理 内联函数 Koin使用了很多内联函数作用简单来说就是方便进行类型推导,具体化类型参数。...被inline标记函数就是内联函数,其原理就是:在编译时期,把调用这个函数地方用这个函数方法体进行替换 fun method(lock: Lock, body: () -> T): T {...主要还是有内联函数inline,才使得kotlin能够直接通过泛型就能拿到泛型类型,只有内联函数类型参数可以具体化。...,使用 reified 修饰符来限定类型参数,可以在函数内部访问,由于函数内联,所以不需要反射。

1.6K30

从 Kotlin 开发者角度看 Java 缺失特性

Java 中 var 关键字完全不同。首先,只能用于局部变量。更重要没有提供与之对应不可变 val 关键字,仍然需要添加 final 关键字,但几乎没有人使用它。...语法要清晰得多,并且允许函数链接,这在 Java 中不可能做到具体化泛型 Java 5 中引入了泛型。...Kotlin 仍然需要遵循 JVM 规范,并与 Java 编译器生成字节码兼容。它可以通过内联来实现:编译器用函数体替换内联方法调用。...论 在这篇文章中,我描述了 Java 中缺失 4 个 Kotlin 特性:不可变引用、空安全、扩展函数具体化泛型。...软件架构如何“以不变应万变” 从维护性工作到软件开发革命,运维 15 年间大逆转 点个在看少个 bug

77020
您找到你想要的搜索结果了吗?
是的
没有找到

Kotlin中函数

)) } 具体化类型参数 具体化参数类型,就是指使用reified关键字。...由于函数内联。故可以当做类型本身来使用它。并且不是反射!...需要注意,如果一个内联函数没有可内联函数参数并且没有具体化类型参数,编译器会产生一个警告,因为内联这样函数很可能并无益处(如果确认需要内联,则可以关掉该警告)。...在 Kotlin 中有一个约定,如果函数最后一个参数一个函数,并且传递一个 lambda 表达式作为相应参数,可以在圆括号之外指定: lock (lock) { sharedResource.operation...可以实现dsl风格代码全靠 Kotlin 提供了使用指定 接收者对象 调用函数字面值功能。 可以调用该接收者对象上方法而无需任何额外限定符,可以任意调用接受者方法属性。

2.3K40

有效使用 kimichat 15个高级技巧

帮我吗? 我正在考虑购买一辆新车,预算在50万以内,主要在市区通勤以及短途旅游用,需要了解一些不同品牌型号优缺点。能给我一些建议? 3.每次只问一个问题:避免在一句话中提出多个问题。...5.要求解释:如果 Kimi智能助手 回答不清楚或没有完全回答问题,请要求进一步解释或提供更多信息。 首先问:什么AI中梯度下降?...确定问题类型:使用相关提示词来确定问题类型,例如定义、比较、解释、列表等。 请解释一下AI这个词语意思。 请比较一下苹果笔记本华为笔记本这两个产品优缺点。...请列举出5个解决AI可解释性差这个问题方法。 8.调整语言水平:根据受众语言水平调整问题语言复杂度,例如使用简单语言或专业术语。 请用简单语言解释一下这个概念。...明确对话角色:如果希望 Kimi智能助手 扮演特定角色或具有特定专业知识,请在问题中明确指定。 现在一个天文学专家,说明恒星行星主要区别在哪里? 请扮演一位律师,帮我分析一下这个案例。

8510

一文彻底搞懂kotlin inline

简单理解就是未使用inline修饰方式,会对带有函数式参数方法,创建对于函数实例,再将这个实例传递到方法参数中。该参数方法最终在原方法内部被显示调用。...所以inline做优化就是将带有函数参数方法简化成没函数式参数直接调用。好处提高程序性能。 当然需要注意,避免使用inline内联大型函数,减少方法中代码增长。...而非inline函数不支持支持跳出方法体。...reified 使用inline修饰函数还有一个好处可以使用reified来修饰函数泛型,让函数泛型具体化 inline fun T.det(block: (T)...crossinline 还有一种情况,如果使用了inline修饰函数,被使用到了嵌套内联函数中,直接使用是会报错,需要为函数参数添加crossinline修饰符 inline fun

74110

Kotlin中内联函数作用是什么?

在以前,因为学过一段时间Kotlin(并没有实际开发中用过),很多东西都忘记了,但是kotlin代码看起来其实Java没什么区别,感觉都差不多。所以不要认为 Kotlin 很难学。...首先,什么内联函数 inline? Kotlin内联函数属于Kotlin高级特性之一,使用起来也非常简单。...没加 inline 之前 加上 inline 之后 解释就不用多说了吧,kotlin 自动帮我们将方法在编译期就加在了相应调用处,免除了 java 中入方法栈与退栈。...这里有个问题需要注意,如果在内联函数内部,函数参数被其他非内联函数调用,就会报错,如下所示: 要解决这个问题,必须为内联函数参数加上 noinline 修饰,表示禁止内联,保留原有函数特性,所以...("test...") } fun innerFun(a: () -> Unit) { a() } 非局部返回我理解就是返回到顶层函数,如上面代码中所示,默认情况下不能直接 return ,但是内联函数确是可以

1.3K10

C++函数

不过,无论如何,C++提供了很多可能,这里也稍微总结一下其函数各种变体。...这个知识点其实用并不多。...函数模板 为了炫技,c++又定了函数模板这种幺蛾子,定义一种通用函数函数实现方法一致,但是不限死参数类型,也就是说同一个函数参数可以是int型,也可以是double型。...注意,这上面的函数重载有区别的,实际上也是进一步节省了函数重载工作,不用定义那么多相同名字参数不同函数,写那么多代码,只写一个就行了,参数类型根据传递进来而定,即参数可配置: // 函数原型...显示具体化 上面的函数模板让所有的参数类型使用同一个函数代码块执行同一种操作,如果我这时候又想对某个特定类型做不同操作怎么办?就名堂多。 一种方法使用函数重载。

31010

从敲下一行JS代码到这行代码被执行,中间发生了什么?

前言 我们每天都在写JS,是否想过,计算机怎么识别这一行代码,并且执行相应指令?本篇文章为讲述从敲下一行JS代码到这行代码可以被执行算出正确结果,都经历了什么。...这个过程就叫编译。 而我们chrome浏览器里V8引擎就是帮我们做这个事情中介。但是并不是只有google一家在做浏览器啊,所以市面上还有很多 JS引擎。下面从网上趴图: ?...所以我们直接来看看编译原理,就知道V8大概如何工作了。 编译一般分为三个步骤: 词法分析(laxical Analysis) 词法分析意思就是,将代码块切分成最小单位。...3、内联 如果一个函数内部调用其他函数,那么编译器会直接函数中将要执行内容放到主函数里。...() - start.valueOf(); console.log("Took " + timeTaken + "ms"); 内联属性会将这个代码编译成 function add(a, b) {

95710

从敲下一行JS代码到这行代码被执行,中间发生了什么?

前言 我们每天都在写JS,是否想过,计算机怎么识别这一行代码,并且执行相应指令?本篇文章为讲述从敲下一行JS代码到这行代码可以被执行算出正确结果,都经历了什么。...这个过程就叫编译。 而我们chrome浏览器里V8引擎就是帮我们做这个事情中介。但是并不是只有google一家在做浏览器啊,所以市面上还有很多 JS引擎。下面从网上趴图: ?...所以我们直接来看看编译原理,就知道V8大概如何工作了。 编译一般分为三个步骤: 词法分析(laxical Analysis) 词法分析意思就是,将代码块切分成最小单位。...3、内联 如果一个函数内部调用其他函数,那么编译器会直接函数中将要执行内容放到主函数里。...() - start.valueOf(); console.log("Took " + timeTaken + "ms"); 内联属性会将这个代码编译成 function add(a, b) {

96620

在Spring项目中以多线程方式并发执行,异步处理任务。解决统计、累加类业务例子。

工作方案: 根据上面的描述,线性去查询,调用15次RPC接口,时间花费巨大,所以放弃单线程模式。打算使用多线程方法,进来请求后,分发 15个线程去查每一种动物数据,返回结果。...或者也可以不定义这个线程,使用匿名内部类方法。 2、累计目标值,直接使用 AtomicLong  省得自己去同步。 3、用CountDownLatch 等所有线程都处理完,主线程再拿返回结果。...先说线程池 +Callable + Future方式。 一、Callable接口jdk 1.4 以后提供返回值,并且抛异常。...实现类内部有一个先进先出阻塞队列,用于保存已经执行完成Future,通过调用它take方法或poll方法可以获取到一个已经执行完成Future,进而通过调用Future接口实现类get方法获取最终结果...这个为线程池中Task执行结果服务,即为Executor中Task返回Future而服务

2.8K95

我们总是梦想着对象化(一)

有一些文章在讨论基于哪种VFP 基类来创建非可视自定义类,这里不再论述,我习惯使用 Custom 基类来创建,无他,仅仅是习惯。 可能有人觉得这个开篇如此突兀,那是因为认知局限了眼界。...“我从来都不使用类!”我经常听到这样自豪声音。以前我还争论解释几句,现在,我只是笑一笑,真的无知者无畏。但是,这里,我文章要求我必须先解释一下这个基本问题:类。...“共享单车”这个概念已经深入人心了,但是,当你说“共享单车”时,语义这个事物本身还是某一辆具体自行车?这是一个与时俱进比喻,电话汽车比喻太LOW了。...所骑行那辆车,就是表单上呈现出一个个对象。 从来都不使用? 类存在方式有两种,一种 VFP 自带,一种基于 VFP 基类或者其他自己创建。...前者,就是一个黑箱,只能靠 VFP 帮助文件来了解使用方法,而后者,假设自己创建,那么,物理存在可能一个VCX 文件,也可能一个 PRG 文件。

13020

聊聊Kotlin中lambda

ps:因为中间操作符大多使用lambda表达式,是因为够简单易懂,当调用个lambda表达式时也就会对应创建多个Functon类调用其invoke方法 优化方案 javaLambda背景 java...也就是改变思路:之前我们将表达式封装到一个类方法中,具体调用lambda时候调用这个方法 把换成 我们直接把lambda中方法体复制到调用方方法体里面。...inline关键字 Kotlin中可以使用inline将inline修饰方法复制到调用方。被inline修饰方法也叫作内联函数。...使用场景:集合中中间操作符都会使用inline,当然也可以指定不内联参数方法,使用noinline修饰这个方法参数。...inline缺点 我们了解了实现原理就是复制方法体到调用地方,那么缺点也可想而知: inline修饰方法体过多,导致调用方方法体庞大 内联函数无法获得闭包类私有成员,除非声明为internal

1.2K20

Java如何优雅地实现接口数据校验

工作中写过Java程序朋友都知道,目前使用Java开发服务最主流方式就是通过Spring MVC定义一个Controller层接口,并将接口请求或返回参数分别定义在一个Java实体类中,这样Spring...实际上在Java开发中目前普通使用Bean数据校验工具"hibernate-validator",它是一个hibernete独立jar包,所以使用这个jar包并不需要一定要集成Hibernete框架...EnumValue约束注解,一个非常实用扩展,通过该注解我们可以实现对参数取值范围(不是大小范围)约束,支持对int、string以及enum三种数据类型约束,具体使用方式如下: /**...除了上面直接在Controller层使用@Validated进行绑定数据校验外,在有些情况,例如你参数对象中某个字段一个复合对象,或者业务层某个方法所定义入参对象也需要进行数据合法性校验,那么这种情况下如何实现像...本文内容从实用角度给大家演示了,如何在日常工作中编写通用数据校验逻辑,希望能对大家有所帮助,如果觉得还不错,可以给点支持,转发+在看!感谢阅读! —————END—————

1.1K30

2021 秋招面经

函数 做题:求任意一个数组幂集 顺丰同城科技 一面 数组常用方法使用场景 浅拷贝深拷贝区别、实现方式 防抖、节流区别应用场景 浏览器存储方案 负责了项目的哪些部分,登录模块怎么做...还有哪些可以优化地方 三面 介绍一下自己前端学习路线 觉得使用框架开发原生开发有什么区别 好像模板引擎也实现这些优点,对模板引擎怎么看 在 Vue 里面实现代码逻辑复用,有什么好方案...Mixin 优点应该很明显,觉得缺点是什么 会用 webpack 去做什么样性能优化 对其它打包工具怎么看?...负责东西 更倾向于去哪个城市工作 offer 情况 … cvte 一面 解释一下盒模型 说一下 ES6 新特性。...如何实现 call 方法,call 方法调用之后会返回什么? 普通函数箭头函数有什么区别? arguments 结构怎么样如何遍历?遍历判断条件是什么?

68760

程序员必备面试技巧

然后,我提出了优化建议,并使用A/B测试方法来验证我建议有效性。结果显示,优化后用户购买率有了显著提升。” 面试官又问道:“解释一下什么转化率,并且如何计算?”...接着,面试官问道:“描述一下在SQL中使用窗口函数聚合函数经历?” 我回答道:“在我之前工作中,我使用窗口函数聚合函数对大量销售数据进行了分析处理。...,说明如何使用窗口函数聚合函数来解决实际业务问题?”...这个发现帮助公司更好地了解销售人员业绩,并制定了相应激励政策。” 面试官问道:“解释一下窗口函数聚合函数区别?”...例如,SUM()函数用于计算整个数据集中某个字段总和。” 最后,面试官问我:“描述一下在处理数据时遇到一些挑战,以及如何解决这些挑战?”

6910

字节跳动Android客户端实习 3+1 面经,内部面试官透露通关秘籍

Kotlin 中可见性 Java 不一样,分别讲讲? 用到了协程,讲讲对于协程认识? 取消协程之后,里面的工作会立刻停止? 不会的话,该怎么停止呢?...除了通过内联函数减少函数调用开销,还有什么用途? 如果现在有一个高阶函数被 inline 修饰,我不想让参数被内联,该怎么办呢? Kotlin 可以跨平台编译,讲讲了解?...HTTP 应用层协议,讲讲如何建立说底层 TCP,那讲讲 TCP 三次握手? 如果现在要使用 HTTPS,连接建立会发生什么变化呢?...在 Kotlin Java 中,实例初始化顺序(成员变量、静态变量、构造函数等)分别是怎样? 4. Kotlin 作用域函数(let、apply 等)有了解过怎么理解?...如果重来一次的话,对于答不上来问题会怎么办? 介绍一下项目 项目中遇到瓶颈怎么解决觉得这个项目对有什么提升?觉得自己有什么优点缺点? 打算如何去改进自己缺点呢?

1.5K00

Golang之reflect

而同时,很多人也会告诉,反射一个危险操作,那么在golang中,反射又是怎么操作呢?今天就来说说golang中反射reflect。 反射定义 首先问问自己,知道什么反射?...在实际编程过程中我们知道,创建这个变量或者对象是什么类型或者是什么样子,同时很容易能对进行操作。而在运行过程中,程序没有我们眼睛,并不知道这个东西怎么样这个时候就需要运用到反射。...反射使用 reflect.TypeOf 如果对反射还是有些模糊,那么看下面这个最简单例子 func main() { a := 1.3 fmt.Println("a类型",...(0.2) fmt.Println(a) } 如果我们传递并非a地址并且直接使用v.SetFloat那么就会报错,因为我们无法对其进行修改,反射会帮我们copy一个,所以无法修改,只有当我们使用指针时候才能修改...其他细节这里就不做说明了,主要目的要表示反射在其中起到重要作用。 总结提醒 看完就应该清楚反射到底做什么用,具体我们什么时候会用到

44630

公司同事用floatdouble,结果导致..

BigDecimal 阿粉相信大家对这个肯定不陌生,只要你公司业务中涉及到一些比较精确数字时候,都会使用 BigDecimal,而不会去使用 Float double,并且在数据库做设计时候...,如果小数类型,也是会让使用 BigDecimal 而不是 float double。...这个时候就有人问了,我定义 float 类型为 1.4 时候为什么不是 1.399999999呢?这就是不进行浮点计算时候,在十进制里浮点数正确显示。...0.2 0.2 这两个实际上都是一个,valueof 只不过在源码中帮我们把 double 给变换成了 Double.toString(val) ,也就是还是string。...这也是为什么在 Effective Java Mysql 必会内容 书中都会提到这块内容,如果一个几年工作经验的人,就不会有这种错误,但是初入职场,经验没那么多,基础没那么牢固肯定会发生这种事

77740

【快速学习高效工作】应用ChatGPT提效工作,为职场发展添砖加瓦

分类法有六种主要类型:1.澄清问题:这种问题旨在让对话者更清楚地阐述他们观点或理解。例如:详细解释一下意思?“或者”能给我一个例子来说明这个观点?...3.测试观点一致性:这类问题用于测试对话者观点在不同情境下是否一致。例如:“刚刚说观点和你之前观点似乎存在矛盾,解释一下?”...针对这个观点,我可以基于苏格拉底提问分类方法分别提出哪些批判性问题。ChatGPT回答如下:基于苏格拉底这种方法,可以借六个角度去提问,一个澄清问题,解释一下工作提效外挂这个概念?...第三个寻找证据原因,提供哪些证据或实例来支持ChatGPT可以显著提高工作效率观点?有没有具体研究或数据支持ChatGPT使用者与非使用者在职业成长方面存在显著差异?...、“我想在XXX领域提升自己,根据最新研究趋势给我一些建议?”使用ChatGPT进行头脑风暴当你想找团队里多角色进行头脑风暴时候,可以使用ChatGPT角色扮演功能。

40155
领券