- 博客(287)
- 资源 (15)
- 收藏
- 关注
原创 科技奇趣|为什么 Excel 认为 1900 年是闰年?
我们先来看一下现象:实际上1900 年不是闰年,没有 2 月 29 日,所以很明显这是 Excel 的一个 Bug。发现我之所以会留意到这个,是因为最近在做一个绩效核对的小工具,需要用 Python 读取和处理销售交上来的 Excel。销售交上来的东西总是稀奇古怪,比如有一列是要填日期,交上来的表格里,有的读出来是日期类型,有的读出来是字符串类型,这都还好说,日期类型直接用,字符串按格式解析成...
2024-03-14 12:16:28 898
原创 如何接住空投给 GitHub 用户的「泼天富贵」?
背景我的公众号里前几天发的一篇文章小火了一把,阅读量到了 5000+(看官您别笑,对于我这种没什么流量的号,这已经是顶流了)。想着看看我的号里哪些内容最受欢迎,于是翻了一下历史群发文章的数据统计,阅读量最高的是这两篇:GitHub 用户福利,符合条件可领取约 1500 元现金——2024/02/27GitHub 用户专属福利,实际到账 3K+,Namebase Airdrop——2020/02...
2024-03-04 12:33:59 729
原创 前端|基于 Layui 实现动态搜索选择框
后端程序员的前端笔记,含金量,你懂的 ????需求网页端实现动态搜索选择框,要求:下拉选项列表能根据用户输入内容动态刷新;最终提交的值必须是由选项列表中点选的;基于 Layui。方案一开始根据印象里常见的搜索选择框的样式,一直在探索如何基于<select>来实现。Layui 的搜索选择框并没有暴露监听输入内容的事件接口,在网上找到了两个思路,但实现得都不够完美。一是参考https://...
2024-03-01 11:58:20 368
原创 GitHub 用户福利,符合条件可领取约 1500 元现金
看到公众号沉默王二发的一篇文章《GitHub赚了211美刀后的感触》,用自己的 GitHub 账号尝试了一下,1500 元现金到账,有兴趣的朋友们可以一试。省流Starknet 基金会启动了第一轮 Starknet 供应计划,将向近 130 万个地址分发超过 7 亿个 Starknet 代币(STRK),其中有 2.1% 分发给开源开发者。STRK 可以理解为一种数字货币,领取到后可以通过交易转...
2024-02-27 13:26:53 926
原创 DIY|ikbc C87 机械键盘有线改蓝牙小结
前一阵把家里的 Filco 圣手二代机械键盘单模改三模后,体验挺不错,想着改装的工具买了只用一回也比较浪费,顺手把放公司用的 ikbc C87 也改了吧。本次仍然使用与之前相同的方案,具体方案及操作过程可以参考 DIY|Filco 圣手二代机械键盘单模改三模,以及里面列举的参考链接,在此不展开,重点小结一下改装过程及使用过程中的一些新的体会改装过程因为有了改装上一把的经验,本次更加熟练和顺利,但也...
2024-02-05 10:22:57 421
原创 Java|SpringBoot 项目开发时,让 FreeMarker 文件编辑后自动更新
正在维护的一个 SpringBoot 项目是前后端一体的,页面使用 FreeMarker 编写。在开发过程中,ftl 文件编辑后,每次都需要重启应用才能看到效果,效率非常低下。这里记录通过哪些配置后,可以让它们免重启自动更新。在应用的 pom.xml 文件里,做如下修改:<dependencies> <!-- 添加以下依赖 --> <dependenc...
2023-12-12 18:30:50 350
原创 iOS|获取 Distribution Managed 证书的 SHA-1 指纹和公钥
最近在处理 APP 备案的事情,其中 iOS 平台的资料里要求填写签名证书的 SHA-1 指纹和公钥。按照阿里云的操作指南 https://help.aliyun.com/zh/icp-filing/fill-in-app-feature-information 进行操作时,在公钥与签名 SHA1 值获取这一步遇到了问题:我们证书的类型与指南中显示的不同,是 Distribution Manage...
2023-12-09 16:07:33 437
原创 DIY|Filco 圣手二代机械键盘单模改三模
前一阵觉得家里的书桌比较零乱,特别是有时候需要切换家用与工作笔记本电脑时,需要拔插的线也偏多,于是就想着将键盘由有线换成无线,既可以减少一根线,又可以在切换电脑时少一步拔插,方便一些。我现在的键盘是一把有线单模的 Filco 圣手二代 87 键青轴,乃数年前离开帝都时好友所赠,一直用到现在,手感与品质都很好,虽说现在各种国产品牌和轴体的机械键盘层出不穷,价钱不贵评价也不错,但我还真舍不得换。所以对...
2023-11-26 23:06:03 480
原创 Android|集成 slf4j + logback 作为日志框架
最近在做一个 Android APP 的日志改造时,想要满足如下需求:能够很方便地使用可变参数的方式输出日志;日志能够根据级别输出到控制台和文件;能够按照日期和文件大小进行日志文件的切割,滚动保存指定天数的日志,自动清理旧日志。基于这个需求,我搜了一下「Android 日志框架」,大多网友推荐的是 logger、timber、xLog 等等,看着也不错。不过出于几年后端开发的经验和习惯,我进一步了...
2023-10-26 19:42:08 209
原创 Android|FileProvider 的 authorities 重名会怎么样?
先说结论:如果有两个或多个 FileProvider 的 authorities 重名,那么只有合并后的 AndroidManifest.xml 文件里,排在最前面的那个配置会生效。场景应用里有个自升级的功能,下载完 apk 后,通过 FileProvider 提供 Uri 进行安装。我修改了文件下载路径后,功能失效了,报错如下:java.lang.IllegalArgumentException...
2023-10-23 13:52:51 87
原创 代码审查|这段代码,为什么复制文件夹总是“成功”?
最近开始一个人负责整个项目的全栈开发和维护,工作中没了和同事交叉 code review 的环节,所以就打算,如果工作中遇到一些比较典型的代码,包括好味道和坏味道,就拿出来分析下,与大家一起交流,作为另一种形式的「交叉 review」。这天遇到这样一个问题:在 Android 手机上复制 assets 里的文件夹到手机里,实际并没有拷贝完成,但代码总是显示成功,看了下代码,使用的是阿里云播放器 A...
2023-10-18 18:20:16 49
原创 运维|MySQL 数据库被黑,心力交瘁
前一阵有一个测试用的 MySQL 数据库被黑了,删库勒索的那种,这里记录一下事情经过,给自己也敲个警钟。0x00 发现端倪有一天,我在自测功能的时候,发现 APP 里展示的每条详情信息里都有一段乱码,只是有点奇怪,没有特别在意,后来调试网页的时候看到控制台有个报错,就顺手看了一眼,发现详情网页里有这样的东西:找我的前端小伙伴讨论了下,最后本地调试了一番,发现是数据库里有个字段齐刷刷地被改成这个了:...
2023-10-08 12:20:23 129
原创 Java|List.subList 踩坑小记
很久以前在使用 Java 的 List.subList 方法时踩过一个坑,当时记了一条待办,要写一写这事,今天完成它。我们先来看一段代码:// 初始化 list 为 { 1, 2, 3, 4, 5 }List<Integer> list = new ArrayList<>();for (int i = 1; i <= 5; i++) { list.add(...
2023-09-21 22:33:09 214
原创 读书|通过 SSH & SFTP 管理 Kindle 上的文件
这是这个系列的第三篇文章,之前写了:读书|程序员如何传书到 Kindle介绍了我最喜欢的通过 WiFi 向 Kindle 传书的方法;读书|通过 Git 管理 Kindle 屏保图片,一键自动同步介绍了通过 Git 管理 Kindle 屏保图片的方法;本文介绍我如何通过 SSH & SFTP 管理 Kindle 上的文件。管理 Kindle 里的文件,包括上传电子书、上传屏保图片、上传...
2023-09-18 12:20:58 86
原创 读书|通过 Git 管理 Kindle 屏保图片,一键自动同步
前面一篇文章读书|程序员如何传书到 Kindle介绍了我最喜欢的通过 WiFi 向 Kindle 传书的方法,这篇文章介绍一下我是如何管理 Kindle 屏保图片的。作为一个爱折腾的人,除了阅读,我也尝试过 Kindle 的各种玩法,其中一项就是自定义屏保图片。每次拿起设备时,都能看到自己喜欢的屏保图片,开始阅读的心情也会变得愉悦。更换 Kindle 屏保常用的方式是使用 ScreenSave...
2023-09-17 11:51:02 71
原创 读书|程序员如何传书到 Kindle
我有一台 2013 年从日亚海淘的 Kindle Paperwhite,至今仍在服役。除了外观上的磨损,其它一切正常,甚至连续航都依旧给力。从去年亚马逊宣布,将在今年六月停止中国区 Kindle 电子书店的运营后,我一直想写点什么,来记(ji)录(dian)一下这个陪伴我多年的老伙伴,却一直没有动笔。一年多以后的今天终于开了个头,计划分几个小主题写一写我是如何使用 Kindle 的,包括传书、屏保...
2023-09-16 20:42:23 105
原创 后端|一个分布式锁「失效」的案例分析
小猿最近很苦恼:明明加了分布式锁,为什么并发还是会出问题呢?故事从接到需求开始说起。接到需求小猿前一阵接到一个小任务,里面有一个功能对应的场景如下:封装一个对账户余额进行加减操作的方法;所属服务部署了多个实例;这个方法可能会有并发调用。注:实际业务场景比较复杂,已做简化。小猿略作思考,就抓住了关键点:余额操作——要注意事务,多实例——要注意并发。小猿的原始代码如下:@Override@Lock(...
2023-09-11 14:45:26 38
原创 一个 MySQL 数据库死锁的案例和解决方案
本文介绍了一个 MySQL 数据库死锁的案例和解决方案。场景生产环境出了一个偶现的数据库死锁问题,导致少部分业务处理失败。分析特征之后,发现是多个线程并发执行同一个方法,更新关联的数据时可能会出现,把场景简化概括一下:有一个数据表 tb1,主键名 id,有两条 id 分别为 A1 和 A2 的记录,对应的外键 fk_biz_no 相同;方法 myFunc,整体是一个事务;方法 myFunc 里的逻...
2023-09-01 07:30:18 260
原创 Dubbo 应用切换 ZooKeeper 注册中心实例,流量无损迁移
首先思考一个问题:如果 Dubbo 应用使用 ZooKeeper 作为注册中心,现在需要切换到新的 ZooKeeper 实例,如何做到流量无损?本文提供解决这个问题的一种方案。场景有两个基于 Dubbo 的微服务应用,一个是服务提供者,简称 Provider,另一个是服务消费者,简称 Consumer;使用 ZooKeeper 作为注册中心;现在要将注册中心从旧实例「ZooKeeper(旧)」 切...
2023-08-30 22:16:34 732
原创 记一种不错的缓存设计思路
之前与同事讨论接口性能问题时听他介绍了一种缓存设计思路,觉得不错,做个记录供以后参考。场景假设有个以下格式的接口:GET /api?keys={key1,key2,key3,...}&types={1,2,3,...}其中 keys 是业务主键列表,types 是想要取到的信息的类型。请求该接口需要返回业务主键列表对应的业务对象列表,对象里需要包含指定类型的信息。业务主键可能的取值较多,千...
2023-08-27 10:52:14 527
原创 发现一种增加在 GitHub 曝光量的方法,已举报
今天偶然看到一种增加项目和个人在 GitHub 曝光量的方法,但感觉无法赞同这种做法,已经向 GitHub 官方举报。具体怎么回事呢?我上周在 Vim 插件大佬 tpope 的一个项目提了个 Issue,但一周过去了,大佬也没有回应,我就去他的 GitHub 主页确认他这一周有没有活动记录,看到他最近的提交活动是给 github/copilot.vim 项目——这是 GitHub Copilot ...
2023-08-24 18:05:42 54
原创 不过如此
当我健康的时候,我常会想,要是更有钱多好,可以选择不同的生活,想躺平可以躺平;当我不得不在病床上「躺平」的时候,我又感觉,健康真好,有健康做前提,那些选项才有意义。所以这就是我的局限,就和人们常说的屁股决定脑袋一样,很多想法都只是基于当时的处境。前一段时间比较低迷,和冯提莫消失了一段时间又回来的原因一样。这真是一段难忘的经历。从去医院复查,是否要做穿刺检查开始纠结,拿到结果后,又开始纠结要不要手术...
2023-08-02 20:46:11 41
原创 解决 Java 打印日志吞异常堆栈的问题
前几天有同学找我查一个空指针问题,Java 打印日志时,异常堆栈信息被吞了,导致定位不到出问题的地方。现象捕获异常打印日志的代码类似这样:try { // ...} catch (Exception e) { log.error("系统异常 customerCode:{},data:{}", customerCode, data, e); // ...}查到的日志是这样...
2023-06-28 12:10:22 570
原创 AI 自动补全的这句日志能正常打印吗?
最近用上了 GitHub Copilot,它的能力不时让我惊叹,于是越来越多地面向 tab 编程,机械键盘的损耗都小了许多:-p这天,它给我自动生成了一句像这样的日志打印代码:try { // ...} catch (Exception e) { log.error("Xxx 操作出错,订单号 {},操作人 {}", orderNumber, operatorName, e);...
2023-05-11 12:11:00 367
原创 记两个有关线程池的小问题
最近小伙伴们找我查的问题里,有两个与线程池相关的,最终都是花了一些时间才揪出原因所在,做一下记录,供以后的自己和其它需要的人参考。一、异步变同步现象:有一个方法,被请求后只是向线程池提交一个任务,然后马上返回,但从日志的 traceId 来看,偶现方法与任务在同一线程执行,接口耗时较长的情况。分析过程:这个其实就是一个知识点:当线程池里没有空闲线程,且任务队列已满时,会怎么处理新提交的任务?可以看...
2023-04-11 22:02:13 475
原创 解决 Groovy 引起的一次 OOM 告警
线上收到告警,有个服务的一个 pod was OOM killed.问题分析从监控系统来看,被 kill 的节点 A 在重启前,堆内存使用随着 YoungGC 规律波动,元空间占用较高,且一直缓慢增长到了400MB以上——该应用代码量不大,按理不应该占用这么多。而与它同容器组的另一个节点 B 看起来更不正常,平均响应时间明显长于另外的节点,且在堆内存已经降下来的情况下还多次 FullGC,并且有很...
2023-03-23 09:35:46 194
原创 读书:哲学家们都干了些什么
哲学本质上是人理解人、人认识人的理性活动,是对世界基本和普遍之问题研究的学科,是关于世界观的理论体系。——百度百科这本书应该是想用不那么严肃的方式串起整个哲学史,可能有一些地方不那么详实和严谨,但对于我这样的小白来讲算是不错的入门读物。开篇两个问题:人为什么活着?人生的意义是什么?重要人物苏格拉底雅典西方人的「至圣先师」,类比中国的孔子一辈子做得最多的事就是问问题,不打击会死星人柏拉图雅典苏格拉底...
2023-03-08 12:15:12 231
原创 给 zsh 自定义命令添加参数自动补全
有时我会自定义一些 zsh 命令,以便提升某些高频操作的效率。本文记录我给一个自定义命令添加参数自动补全的方法。场景我自定义了一个 zsh 命令gmt,执行gmt <b2>...
2022-02-12 19:35:52 1054
原创 我的 2021 盘点
对于 2021 年,如果仅从岁月流逝的角度,当然是期望时光时光慢些吧;如果从这一年外界的疯狂变幻来讲,又想对它说慢走不送。但终会无力地看清,时间的洪流上并无刻度,你喜欢或者不喜欢,它并不在...
2022-01-02 14:31:10 237
原创 利用 XXL-JOB 实现灵活控制的分片处理
本文讲述了一种利用 XXL-JOB 来进行分片任务处理的方法,另外加入对执行节点数的灵活控制。场景现在一张数据表里有大量数据需要某个服务端应用来处理,要求:能够并行处理;能够较灵活地控制并行任务数量。压力较均衡地分散到不同的服务器节点;思路因为需要并行处理同一张数据表里的数据,所以比较自然地想到了分片查询数据,可以利用对 id 取模的方法进行分片,避免同一条数据被重复处理。根据第 1、2 点要求,本来想通过对线程池的动态配置来实现,但结合第 3 点来考虑,服务器节点数量有可能会变化,节点
2021-06-19 16:14:36 3983 2
原创 代码审查:从 ArrayList 说线程安全
本文从代码审查过程中发现的一个 ArrayList 相关的「线程安全」问题出发,来剖析和理解线程安全。案例分析前两天在代码 Review 的过程中,看到有小伙伴用了类似以下的写法:List<String> resultList = new ArrayList<>();paramList.parallelStream().forEach(v -> { String value = doSomething(v); resultList.add(value)
2021-03-13 13:34:26 259
原创 图解 SQL 里的各种 JOIN
从业以来前面的几年主要在做客户端开发,用到的数据库都是表结构比较简单的 SQLite,以我那还给老师一大半的 SQL 水平倒也能对付。现在转岗做后端开发,就显得有点捉襟见肘了,特别是各种...
2020-11-04 12:36:02 339
原创 给 Mac 添加右键菜单「使用 VSCode 打开」
最终的实现效果是在文件 / 文件夹上右击时,会出现菜单项「用 VSCode 打开」,点击后会启动 Visual Studio Code 打开对应的文件 / 文件夹。实现步骤打开「自动操作.app」,就是小机器人图标那个; command + n 新建文稿,在「选取文稿类型」里选择「快速操作」; 按以下步骤操作: 第五步贴入代码 for f in "$@" do open -a "Visual Studio Code" "
2020-10-29 20:07:53 1947
原创 你忙得踏实吗?
这是我在 2015 年 7月写的一篇文章,偶然又翻到,感觉是一个需要持续关注和思考的话题,在此也分享给大家,以下为原文。所有生活的美学旨在抵抗一个字——忙。忙就是心灵死亡,不要再忙了——...
2020-10-25 09:30:00 290
原创 使用 jsDelivr 免费加速 GitHub Pages 博客的静态资源(二)
之前写过一篇 使用 jsDelivr 免费加速 GitHub Pages 博客的静态资源,在那之后,又陆续想到并实施了几点利用 jsDelivr 进一步加速静态资源加载的措施,新起一篇作为记录和分享。继上一轮改造过后,比较拖页面加载速度的主要有三点:页面首个请求响应时间;图片资源加载时间;站内搜索引用的 JSON 资源加载时间。第 1 点在页面仍然托管在 GitHub Pages 的前提下,似乎没有什么好办法能产生质的飞跃;本篇主要改善了第 2 点和第 3 点。0x01 图片资源加速这里所
2020-10-07 21:24:31 659
原创 林丹从国家队退役,带起一波回忆
昨天朋友圈和微博上有不少人在转发林丹从国家队退役的消息,有一点感慨的同时,我在想,以后新入坑的羽毛球迷们,可能渐渐就都不知道「超级丹」、「林李大战」,还有「四大天王」这些名词了吧。不过没...
2020-07-05 13:54:14 354
原创 更聪明地学习,而不是苦读——《如何高效学习》
我们可能都听过一句话:吾生也有涯,而知也无涯。以有涯随无涯,殆已!——《庄子. 内篇. 养生主第三》所以,需要持续大量学习的童鞋,比方说我等程序员们,除了要从知识的海洋中精挑细选出我们想要的内容,挑完了还得高效学习,不然成长的速度可能远远赶不上脱发的速度,沦落到「他变秃了,也没变强」的尴尬境地。更聪明地学习,而不是苦读——这是我打开 Kindle for Mac 后看到的第一句话,最近读的这本 《如何高效学习》 正是一本关于此话题的书。关于本书作者 Scott H. Young,这哥们是个神人
2020-05-17 15:27:20 1146
原创 用 Vim 编辑 Markdown 时直接粘贴图片
我习惯使用 Vim 编辑 Markdown 文件,一直存在一个痛点就是粘贴图片很不方便。前后对比我以前常用的操作流程:复制图片/截图;在保存图片对话框里一层层点选保存路径,输入文件名保存;回到 Vim 里,手动输入引用图片的表达式。第 2 步和第 3 步是比较痛苦的,尤其是文件路径比较深的时候,可能要点选好几次。最近偶然发现的一个外国小伙写的插件 md-img-paste.vim...
2020-05-04 12:27:27 1066
原创 用 jsDelivr 免费加速 GitHub Pages 的静态资源
挺久以前就有网友给我的 GitHub Pages 博客模板提 Issue,说希望能增加 CDN 用于加速静态资源的加载,由于懒,一直没有动。最近偶尔要打开自己博客看下 Wiki 的时候,要等挺久,比较痛苦,碰巧昨天晚上看到这样一篇帖子:GitHub 图床的正确用法,通过 jsDelivr CDN 全球加速,感觉很适合我的需求场景,于是决定趁这几天休假将这个改造一下。先看效果以下改造前后的加载...
2020-05-02 16:15:55 1942
为基于xulrunner的内嵌Gecko程序启用Profile的Lib工程
2012-06-19
VC++简易QQ自动消息机+源码
2010-05-15
VC6.0仿Windows自带扫雷程序(附源码)
2009-11-24
仿windows扫雷程序及VC++6.0源码
2009-09-02
生日提醒管理器(工具软件)V1.0
2009-06-29
控制台版简易仓库管理系统
2009-04-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人