<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[shenlin66的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/shenlin66</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; shenlin66]]></copyright><item><title><![CDATA[Kotlin 中对象初始化的几个坑点]]></title><link>https://blog.youkuaiyun.com/shenlin66/article/details/155199424</link><guid>https://blog.youkuaiyun.com/shenlin66/article/details/155199424</guid><author>shenlin66</author><pubDate>Mon, 24 Nov 2025 17:09:10 +0800</pubDate><description><![CDATA[可以看到类级别别的属性赋值的初始化优先级是高于init 初始化块里的属性赋值的。按照上面这个顺序，baseBonus应该在 init 代码块执行之前就初始化好了啊。这里虽然不会报错，但是显然在 name 初始化之前就调用了 getFirstNameChar 方法，里面获取了name的第一个字符。这时候会报空指针错误。2. initPlayerName 返回还未初始化的 name 属性并且赋值给了 playerName 属性，因此playerName 也为空。后才初始化好的，这也是为什么调换顺序会报错。]]></description><category></category></item><item><title><![CDATA[Kotlin 里创建对象时的初始化顺序]]></title><link>https://blog.youkuaiyun.com/shenlin66/article/details/155198409</link><guid>https://blog.youkuaiyun.com/shenlin66/article/details/155198409</guid><author>shenlin66</author><pubDate>Mon, 24 Nov 2025 16:15:52 +0800</pubDate><description><![CDATA[可以发现：主构造函数里面的 age 属性最先被赋值，然后再是类级别的属性：name、score、hobby 被赋值，随后是 init 代码块里面的逻辑被执行，最后是次构造函数里面的逻辑被执行。Kotlin 里面有主构造方法、init 方法块、次构造方法，那在初始化的时候，它们执行的顺序是怎样的呢？]]></description><category></category></item><item><title><![CDATA[Kotlin 的内联函数]]></title><link>https://blog.youkuaiyun.com/shenlin66/article/details/155097405</link><guid>https://blog.youkuaiyun.com/shenlin66/article/details/155097405</guid><author>shenlin66</author><pubDate>Fri, 21 Nov 2025 11:02:28 +0800</pubDate><description><![CDATA[在 Kotlin 中，inline如果没有使用内联函数，那么我们给函数传 Lambda 时，编译器会悄悄创建一个匿名类实例。而inline—— 相当于 “复制粘贴代码”，消除中间开销。]]></description><category></category></item><item><title><![CDATA[Kotlin中的解构]]></title><link>https://blog.youkuaiyun.com/shenlin66/article/details/154836215</link><guid>https://blog.youkuaiyun.com/shenlin66/article/details/154836215</guid><author>shenlin66</author><pubDate>Fri, 14 Nov 2025 14:39:59 +0800</pubDate><description><![CDATA[非数据类若要支持解构，需手动定义函数（N从 1 开始），且函数必须用operator// 手动定义组件函数val (title, price) = book // 解构自定义类println("《$title》价格：$price") // 输出：《Kotlin in Action》价格：89.0。]]></description><category></category></item><item><title><![CDATA[Kotlin 中常见的高阶函数]]></title><link>https://blog.youkuaiyun.com/shenlin66/article/details/154798875</link><guid>https://blog.youkuaiyun.com/shenlin66/article/details/154798875</guid><author>shenlin66</author><pubDate>Thu, 13 Nov 2025 19:35:39 +0800</pubDate><description><![CDATA[Kotlin 集合框架提供了大量高阶函数，用于简化遍历、筛选、转换等操作，避免传统的。），它们都是高阶函数，用于在对象的作用域内执行代码块，简化对象初始化、属性设置等操作。），将集合中的每个元素通过该函数转换为新类型或者进行映射，返回新集合。），先将每个元素转换为子集合，再将所有子集合合并为一个扁平集合。指代对象，返回对象本身，适合执行附加操作（如日志、打印）。指代对象，返回函数结果（语法上是独立函数，非扩展函数）。指代对象，返回对象本身，适合设置多个属性。），在指定调度器执行代码，返回结果。]]></description><category></category></item><item><title><![CDATA[Kotlin 协程的使用方法]]></title><link>https://blog.youkuaiyun.com/shenlin66/article/details/153332803</link><guid>https://blog.youkuaiyun.com/shenlin66/article/details/153332803</guid><author>shenlin66</author><pubDate>Wed, 15 Oct 2025 17:49:56 +0800</pubDate><description><![CDATA[能够让当前协程暂时挂起，暂停往下执行。当 await 方法有返回值后，会恢复协程，继续往下执行。：协程构建函数的返回值，可以把 Job 看成协程对象本身，包含了对协程的控制方法。在 Kotlin 中，我们可以使用协程构建器来创建协程。是 Job 的子类，]]></description><category></category></item><item><title><![CDATA[Kotlin中的标准函数和静态函数]]></title><link>https://blog.youkuaiyun.com/shenlin66/article/details/150384656</link><guid>https://blog.youkuaiyun.com/shenlin66/article/details/150384656</guid><author>shenlin66</author><pubDate>Thu, 14 Aug 2025 10:52:23 +0800</pubDate><description><![CDATA[作用：可以在连续调用同一个对象的多个方法时让代码变得更加精简案例：打印水果。]]></description><category></category></item><item><title><![CDATA[Activity 的启动模式]]></title><link>https://blog.youkuaiyun.com/shenlin66/article/details/149902372</link><guid>https://blog.youkuaiyun.com/shenlin66/article/details/149902372</guid><author>shenlin66</author><pubDate>Tue, 05 Aug 2025 20:05:22 +0800</pubDate><description><![CDATA[复习安卓开发经典知识。]]></description><category></category></item><item><title><![CDATA[SpringBoot 操作 ElasticSearch]]></title><link>https://blog.youkuaiyun.com/shenlin66/article/details/148116689</link><guid>https://blog.youkuaiyun.com/shenlin66/article/details/148116689</guid><author>shenlin66</author><pubDate>Wed, 21 May 2025 20:45:54 +0800</pubDate><description><![CDATA[本文只涉及一些基本操作！]]></description><category></category></item><item><title><![CDATA[JVM 学习笔记（内存结构部分）]]></title><link>https://blog.youkuaiyun.com/shenlin66/article/details/148099035</link><guid>https://blog.youkuaiyun.com/shenlin66/article/details/148099035</guid><author>shenlin66</author><pubDate>Tue, 20 May 2025 21:17:56 +0800</pubDate><description><![CDATA[JVM：Java虚拟机JRE：Java运行时环境 = JVM+基础类库JDK：Java开发工具包 = JVM+基础类库+编译工具。]]></description><category></category></item><item><title><![CDATA[Rand7()实现Rand10()]]></title><link>https://blog.youkuaiyun.com/shenlin66/article/details/147932863</link><guid>https://blog.youkuaiyun.com/shenlin66/article/details/147932863</guid><author>shenlin66</author><pubDate>Tue, 13 May 2025 20:17:58 +0800</pubDate><description><![CDATA[Lc 中一道有意思的题目：给定方法rand7可生成[1,7]范围内的均匀随机整数，试写一个方法rand10生成[1,10]范围内的均匀随机整数。你只能调用rand7()且不能调用其他方法。并且不能使用系统的方法。]]></description><category></category></item><item><title><![CDATA[SpringCloud Openfeign 实现请求拦截]]></title><link>https://blog.youkuaiyun.com/shenlin66/article/details/147926917</link><guid>https://blog.youkuaiyun.com/shenlin66/article/details/147926917</guid><author>shenlin66</author><pubDate>Tue, 13 May 2025 16:07:42 +0800</pubDate><description><![CDATA[使用远程调用后，我们有时候希望在请求到达之前进行请求的拦截，实现用户权限验证、权限控制等功能。这时候可以使用 Openfeign 的请求拦截器。注册到 IOC 容器中，并且实现 apply方法，apply() 内部逻辑就是请求拦截器拦截请求后执行的逻辑。我们将之前用请求拦截器添加的字段取出来并打印，发现请求拦截器的确向请求头中添加了对应字段，验证成功。这里我在 order 服务中将请求拦截器注册到 IOC容器中，并且。根据 OpenFeign 官方文档，]]></description><category></category></item><item><title><![CDATA[SpringBoot 如何使用 openfeign]]></title><link>https://blog.youkuaiyun.com/shenlin66/article/details/147915761</link><guid>https://blog.youkuaiyun.com/shenlin66/article/details/147915761</guid><author>shenlin66</author><pubDate>Tue, 13 May 2025 09:56:06 +0800</pubDate><description><![CDATA[1. 想要使用 openfeign 实现服务之间的远程调用，需要先在需要远程调用的服务中添加注解。2. 使用@FeignClient(value = "远程服务的名称") 注解创建好远程调用的客户端。并且在内部填写需要调用的远程服务的接口，注意写上对应的注解（@GetMapping/@PostMapping），填好路径参数。3. 在服务中通过依赖注入远程调用的客户端，在业务中直接调用这个远程服务的接口即可。]]></description><category></category></item><item><title><![CDATA[SpringBoot 对 SpringCloud Nacos 的文件配置]]></title><link>https://blog.youkuaiyun.com/shenlin66/article/details/147905634</link><guid>https://blog.youkuaiyun.com/shenlin66/article/details/147905634</guid><author>shenlin66</author><pubDate>Mon, 12 May 2025 22:11:53 +0800</pubDate><description><![CDATA[如：开发环境（dev）、测试环境（test）、生产环境（prod），并且每种环境的配置项都不相同。比如：测试环境定时任务的时间要设置的短一些，方便测试整个流程，而生产环境的定时任务时间则不能设置这么短。该配置表示当处于 dev (开发环境)的时候，需要引入： common.properties、database.properties 这两个配置文件。其中：${表示将上面 spring.profiles.active 这里的配置项（prod）填充到这里}，即选择生产环境。不同微服务的配置项自然也不相同。]]></description><category></category></item><item><title><![CDATA[使用 Nacos 监听配置变化]]></title><link>https://blog.youkuaiyun.com/shenlin66/article/details/147900362</link><guid>https://blog.youkuaiyun.com/shenlin66/article/details/147900362</guid><author>shenlin66</author><pubDate>Mon, 12 May 2025 20:24:23 +0800</pubDate><description><![CDATA[如果我们需要监听配置变化，并且在配置变化之后进行进一步操作，比如：拿到这个配置变化后的值，发送短信通知开发者。获取到 configService,然后 用。在应用启动完成后执行一些监听配置变化的逻辑。发现确实可以监听到对应配置文件的变更。第三个参数则是监听器，可以在里面的。可以看到确实是在项目启动后执行了。方法中添加配置变更之后的业务逻辑。]]></description><category></category></item><item><title><![CDATA[子集 II ，一道有趣的回溯算法题]]></title><link>https://blog.youkuaiyun.com/shenlin66/article/details/147902278</link><guid>https://blog.youkuaiyun.com/shenlin66/article/details/147902278</guid><author>shenlin66</author><pubDate>Mon, 12 May 2025 19:19:16 +0800</pubDate><description><![CDATA[st[i - 1]  表示当前走到了第二个2，说明第一个2已经遍历过了并且 [ 1,2 ] 这个结果已经被收集，此时需要跳过 [1,2（第二个2）]，防止组合重复。例如：nums=[1,2,2] 可能在一次遍历当中选择了第一个2，得到 [1,2]，又在之后选择了第二个2,又得到 [1,2]，我们需要对这种情况进行去重。此时我们不仅需要考虑对像 [1,2]、[2,1] 这种解集去重，还需要考虑可能会产生两个 [1,2] 的这种情况。刷回溯算法的时候遇到的一道有趣的题目，和。举例： nums=[1,2,2]]]></description><category></category></item><item><title><![CDATA[Nacos 做配置中心的基本用法]]></title><link>https://blog.youkuaiyun.com/shenlin66/article/details/147899332</link><guid>https://blog.youkuaiyun.com/shenlin66/article/details/147899332</guid><author>shenlin66</author><pubDate>Mon, 12 May 2025 16:40:50 +0800</pubDate><description><![CDATA[然后再 order-service 的 controller 层通过。表示我们当前禁用配置导入检查。这时候再启动程序就不会报错了。如果想要在配置中心中实现配置修改的实时更新，则需要加上。接着在 Nacos界面新建配置，注意配置名称和。然后再 service-order 的。-- 配置中心-->]]></description><category></category></item></channel></rss>