自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

乐征skyline

扯淡中...

  • 博客(139)
  • 收藏
  • 关注

原创 关于Lisp的一己之见

Lisp是一种计算机编程语言,由约翰·麦卡锡(John McCarthy)于1958年发明。“Lisp”这个名称是“List Processing”的缩写,具有表处理的意思…以上大概是公认的比较权威的介绍,网络上很多资料大概都是这么讲的。从这些信息中可以看出,Lisp应该是一种和C、Java类似的计算机编程语言,是一种和中文、英文等所谓自然语言不同的、用来给计算机编程的语言,这或许是大部分人对它的印象。然而,在学习Lisp的过程中,感受到了很多与编程语言常识相背的地方,产生了一些感想,本文就表达一些自己对L

2022-02-14 10:26:21 3275

翻译 Java虚拟线程官方文档(译文)

平台线程是作为操作系统线程的瘦包装器实现的。平台线程在其底层操作系统线程上运行Java代码,并且平台线程在整个生命周期内捕获其操作系统线程。因此,可用的平台线程数量受限于操作系统线程的数量。平台线程通常有一个大的线程栈和其他由操作系统维护的资源。它们适合运行所有类型的任务,但它们可能是有限的资源。像平台线程一样,虚拟线程也是类的实例。但是,虚拟线程并不绑定到特定的操作系统线程。虚拟线程仍然是在操作系统线程上运行代码。

2024-09-10 20:11:24 471

原创 Android小技巧:利用动态代理自动切换线程(续)

本文是针对上文的一个补充,补充一种简单的实现方式。上文中我们提到利用动态代理将对某个对象的方法调用自动切换到对应线程中去,只是探讨了可行性和局限,但如果每个功能都手动创建代理就显得有些繁琐。本文提供一个简单的工具来简化这个创建流程。

2024-07-25 14:40:52 712

原创 Android小技巧:利用动态代理自动切换线程

日常开发中,多线程编程是个难以避免的话题,开发者可以小心翼翼、谨慎地、严谨地编程来编写出高效的、安全的多线程程序,但是在长时间的维护中,难免因为其中某个人的某个疏忽而导致出现预料之外的并发问题。有没有一种简单粗暴的方法可以像Actor模型那样使得“某个类的方法只在某个线程中执行”并且在“进入这个类的方法时自动切换到对应线程”呢?。本文就介绍一种利用动态代理来完成这个任务。

2024-06-25 09:48:59 514

原创 尝试编写一个不需要记忆的工具(以RecyclerView的Adapter为例)

过去开发Android的时候,是一个非常常用的类,但是却用起来有些麻烦,于是就根据需要写了很多XXXAdapter之类的工具,也有很多开源可用的Adapter工具。如果只用一个,养成习惯后不成问题,但是如果比较多,就容易忘记或记错混淆。于是就有了一个想法:我能不能写一个不需要去记忆的工具,即便很长时间没用忘记了,也可以直接上手用。本文以为例,来分享我的思考和实现方式。

2024-05-20 16:17:03 743

原创 Kotlin作用域函数引发的遮蔽问题

前面讲了kotlin的it变量引起的遮蔽问题,见,本篇聊聊作用域函数(scoped function)可能引起的遮蔽问题。这里涉及3个上下文:全局上下文、test函数局部上下文、also引入的上下文。不过这里涉及4个上下文:全局上下文、test函数局部上下文、apply引入的大括号之间的上下文,以及调用apply的字符串对象的对象上下文。两段程序极为相似,在词法和语法结构上光靠肉眼难以发现差异,但上下文环境却有着较大的差别。在我第一次学习到Kotlin的这个特性时,心里有些不安。

2024-04-25 15:41:30 775 1

原创 Kotlin it隐式变量的遮蔽问题

虽然在工程应用中没有遮蔽现象的发生是最好的,但上面的kotlin代码中这种显式的遮蔽也没有太大的危害,毕竟这种遮蔽发生在同段代码中肉眼可见的范围内(顶多代码较长的时候鼠标再滚一下),也不会因为外部程序的变化而影响到这段程序的语义。不过,在kotlin中存在的隐式变量it却很容易导致隐式遮蔽的情况发生。不管是标准库中的作用域函数(Scoping Function),但是一般的接受单参lambda作为参数的过程,使用的时候很可能省略唯一参数,那么就会发生上述情况。代码经过多人多次修改,就可能出现问题。

2024-04-01 08:11:08 458

原创 Kotlin 类型声明相关的一些注意事项

由于kotlin支持类型推导,所以很多时候变量的类型可以省略,但有时候省略变量类型又可能带来一些不便,甚至隐患。本文记录下一些“建议声明类型”、“可以省略类型”的场景。(暂时想到的不多,后续持续更新)

2024-03-03 17:06:24 518

原创 Android小工具:利用解构来简化Cursor内容的读取

Cursor这种代码基本没法复用,而且还都是纯手工代码,自动生成比较麻烦,我希望可以像用json映射那样,每个字段/列一行代码就完成这个任务,所以本文就仿照以前解构Bundle一样,来解构Cursor(完整实现差不多100行)。

2024-01-21 09:35:42 716

原创 Android小工具:利用解构来简化Bundle读写

这是典型的利用Bundle传参的示例,这里只有读取参数,自然有对应的写入参数,因为代码差不多,就省略了。这段代码几乎就是纯手工代码,每个词法单元都需要手敲1-3个字符,才能敲回车来补全。所以就想尝试利用类似解构的方式来简化这个读写过程。

2023-12-16 19:16:43 479

原创 Java小技巧:创建带缓存的过程

在平常开发中,我们经常遇到这样一类过程:有一定计算量,被频繁调用,但对于任意一个参数,结果是恒定的(换句话说,就是纯函数).本文就介绍一个简单的工具Memorizer来简化这个过程

2023-12-16 19:12:23 935

原创 NeoPreference延伸:为SharedPreferences配置项生成配置页面

代码地址:https://github.com/Nagi1225/NeoPreference.git前两个目标已经完成,参见和第三个目标是考虑到那些配置项可能对应用户偏好设置的情况,这样新增配置就不需要去修改页面,新增配置项的时候,页面就会自动补充;另外,也可以用于生成调试页面,不需要针对SharedPreferences再单独写调试页面。本文针对第三个目标给出一个方案。(暂时仅支持int、float等基本类型的配置项)

2023-11-26 11:01:39 593

原创 优秀的Lisp编程风格教程:第六章(译文)

(本文为草稿,校对时间待定)原文链接:https://norvig.com/luv-slides.ps。

2023-11-12 13:39:10 325

翻译 优秀的Lisp编程风格教程:第五章(译文)

原文链接:https://norvig.com/luv-slides.ps。

2023-11-05 08:44:37 152

翻译 优秀的Lisp编程风格教程:第四章(译文)

语法抽象定义一个适合该问题的新语言。这是一种面向问题(相对于面向代码而言)的方法。...)

2023-10-29 16:17:57 204

原创 Andorid小技巧:TransactionTooLargeException的简洁处理

示例代码:https://gitee.com/spectre1225/big-data-demo.git。

2023-10-22 18:39:46 874 1

翻译 优秀的Lisp编程风格教程:第三章(译文)

原文链接:https://norvig.com/luv-slides.ps。

2023-10-08 08:31:40 136

翻译 优秀的Lisp编程风格教程:第二章(译文)

原文链接:https://norvig.com/luv-slides.ps。

2023-09-30 19:06:37 141

翻译 优秀的Lisp编程风格教程:第一章(译文)

优雅不是可选的”(elegance is not optional)–Richard A. O’Keefe可以理解的可重复使用的可扩展的高效的易于开发/调试它还有助于正确性、健壮性和兼容性明确的具体的简洁的一致的有帮助的(预见读者的需求)保持惯例(不要晦涩)在可用的层级上构建抽象允许工具交互(引用透明性)好的风格是支撑程序的“底层”

2023-09-16 20:57:23 237

原创 Java和Kotlin的Field在继承中的不同表现

Kotlin是一个宣称与Java兼容性较好的语言,但在接触后发现一些技术还是有“概念上”的冲突,本文就记录下两者对象的Field(中文的说法有字段、域、属性、成员变量,下文若出现这些表达,指的都是这个东西)在继承中的不同表现。

2023-09-03 14:33:05 585

原创 Java小技巧:利用异常中断当前任务

在日常开发中,我们经常遇到调用别人的代码来完成某个任务,但是当代码比较耗时的时候,没法从外部终止该任务。本文介绍一种利用异常来终止这样的任务的方法。

2023-08-27 20:35:13 212

原创 函数式编程-将过程作为返回值的应用:获取未来的数据

之前的文章利用一等函数(First-class Function)的“可以将过程作为返回值”这一点来实现分步过程,本文介绍一种该性质极其相似另一种用途-获取未来的数据。(注意:本文旨在介绍一种编程技巧,希望可以给读者一点启发,并非介绍某类问题的最优解,实际使用还需具体问题具体分析)

2023-08-13 14:19:07 155

原创 函数式编程-将过程作为返回值的应用:分步过程

之前的文章提到函数式编程的一等函数(First-class Function)四个性质中有“可以将过程作为返回值”这一点,但这一点在实际使用中不如“将过程作为参数”(高阶函数)用得多。本文介绍一种这个性质用于分步函数的应用。

2023-08-06 16:33:48 157

原创 关于启动线程位置的一点思考

最近看到两段相似的代码,第一段是第二段为两段代码的差别仅在启动线程的位置。有时候写程序比较随意的时候,两种形式的代码都可以可能出现,下面记录下我对这种形式的一些想法。

2023-07-23 10:02:41 209

原创 Java集合工具:列表查找之position和find

操作集合时,查找列表中的元素是常见操作,本文记录一个平常使用的`List`查找工具方法。

2023-07-16 09:29:25 1323

原创 NeoPreference:一个简化SharedPreferences使用的工具

针对Android平台键值对的持久化存储,虽然Jetpack出了新的DataStore,但实际项目中SharedPreferences还是有大量使用,本文结合以前的使用经验给出一种极简且优雅且安全的实践。

2023-07-09 16:50:48 303

原创 Android小技巧:在通知RemoteViews中显示动画

在Android Notification显示中,我们通常显示一些静态元素,即便使用自定义布局,也不例外,因为有着诸多限制,例如使用的控件只有那些个基本控件,更新界面也必须通过提供的各种set方法。但有时候,我们就是想要去显示动画,因为动画可以提供更好的视觉效果。那么本文提供两种较简单的方法。

2023-06-22 14:28:06 3656 3

原创 Java小技巧:利用局部函数来隐藏和保护函数

在JavaScript中,我们可以利用functionJava并不能在方法里直接定义方法,不过好在 Java 8 借鉴一些函数式语言引入了Lambda表达式和函数式接口,这样Java也可以定义局部函数。//.... };} }如果想定义带返回值的局部函数,可以用Supplier} }如果是只接受参数无返回值的局部函数,则使用Consumer//.... };} }而既要参数又要返回值的就使用Function} }} }} }

2023-06-17 16:22:34 552

原创 一点Andorid开发小建议:妥善使用和管理Handler

在Android开发中,我们经常使用Android SDK提供的Handler类来完成线程间通信的任务,但是项目代码中,经常看到Handler过于随意地使用,这些使用可能有一些隐患,本文记录下这些问题,并给出相关建议。

2023-06-04 10:10:46 195

原创 记录一个因变量遮蔽引起的“友尽”级bug

之前在翻译学习EOPL过程中回顾以前的代码时发现一个让人后背发凉的隐患,一种极其罕见、但是一旦出现就难以发现并可能造成非常大影响的bug,本文就记录下这个问题。

2023-05-27 22:13:48 928

原创 Java集合工具:first和last

在平常开发过程中,我们经常会遇到截取列表片段的需求,比如取列表中前4个元素、取后四个元素。Java的`List`提供了`subList`方法,可以用来完成这些工作,但是使用起来并没有那么便利,于是就有了本文要介绍的两个工具方法:first和last。

2023-05-21 13:50:20 1156

原创 Java小技巧:利用蹦床和CPS消除递归中栈溢出

在编写递归程序时候,出现栈溢出并不是什么稀奇的事,这种时候,我们有时候可以利用尾递归优化,有时候可以改为循环写法,甚至还可以调整java虚拟机参数来改变栈大小。但是并非所有的递归都可以改写为其他形式,有些程序的递归写法甚至是最优最简写法,改成其他形式就得手动维护计算的上下文,这是非常麻烦的。这个时候就得直面栈溢出问题了。本文就介绍一个简洁但不简单的工具来消除栈溢出。

2023-05-13 16:14:06 683 1

原创 Java集合操作工具:some、any以及every

我想大家在平常开发中应该经常遇到这样场景:想要从集合中找到符合某个条件的元素,或者判断集合中是否存在某种数据,又或者是判断集合中的所有元素都符合某个要求。本文就介绍几个实用工具

2023-04-22 21:38:45 1455

原创 “新技术“的反思

最近看了篇关于新技术风险的文章,结合自身经历,反思并总结下项目中应用所谓“新技术”的一些想法。

2023-04-16 10:19:07 480

原创 参数有效性检测的隐患

对参数进行有效性检测看上去是在为安全考虑,但是却包含了一些隐患。文本就分享一些我对这类隐患的一些思考。

2023-04-08 20:44:14 312

原创 EventBus 注册过程优化

EventBus 注册过程优化

2023-04-02 10:28:10 467

原创 为Activity的启动添加约束条件

回想起刚开始做Android开发工作时,有一个烦恼:当拿到一个新项目的时候,想从界面的跳转来梳理整个App的功能,结果发现根本没有对应的产品文档,然后代码中启动Activity的代码散落在Activity以外的各种地方,例如自定义view中、Fragment中、各种Adapter中......这样就造成一些麻烦。本文分享一些处理经验。

2023-03-26 17:44:01 458

原创 SharedPreferences的一种极简优雅且安全的用法

针对Android平台键值对的持久化存储,虽然Jetpack出了新的DataStore,但实际项目中SharedPreferences还是有大量使用,本文结合以前的使用经验给出一种极简且优雅且安全的实践。

2023-03-19 17:19:39 404

原创 Fragment中获取Activity的一点点建议

平时的Android开发中,我们经常要在Fragment中去获取当前的Activity实例,刚开始的时候可能使用使用Fragment提供的getActivity方法来获取,但是这个方法可能返回null,本文分场景分别介绍几种优化的方式。

2023-03-05 13:30:58 1885

原创 关于Java方法重写的一些反思

最近在开发中遇到一个关于Java方法重写的一些问题,对于方法重写的用法以及可能导致的问题产生了一些思考,本文用于记录下这些想法。

2023-02-25 08:32:47 1057

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除