Java 查漏补缺之 defensive copy

什么是保护性拷贝(defensive copy,或者防御性拷贝)呢? 说到这个问题首先要知道 Java 中的不可变对象(Immutable Object),既然有不可变对象就一定有可变对象(Mutable Object),顾名思义可变对象就是在对象构造完成之后内部状态会改变的对象,比如 StringBuilder 和 Date 都是可变对象,而 String 和 Integer 是不可变对象。 一个类可能有两种方式包含可变的 field 类状态只能被自身改变,也就是说类包含一个可变对象,而该字段只能由类自己改变,比如说类 Person 有一个字 Read more ...


知乎上被删除的良心回答之油猴脚本

今天偶然间看到一个知乎问题:“最良心的软件可以良心到什么程度?”,当时在 Google+ 上点进去粗略看了一样,看到油猴脚本也就坦然了,而添加到稍后阅读,在晚上回来之后准备细看时却惊讶于知乎屏蔽的速度,在尝试使用 Google,bing 和 web archive ,baidu 的历史记录之后终于找回了一些渣滓。 我在很早就已经推荐过 Tampermonkey, 也借此推荐过 我用过的 Userscript 。 而 Tampermonkey 我也用了很多年也曾总结过 Tampermonkey 同步的功能。不过多少年过去了,很多脚本失效的失效,我自己之前 Read more ...

2017-06-09 chrome , userscript , tampermonkey

每天学习一个命令:traceroute 查看路由信息

traceroute(跟踪路由)是路由跟踪程序,用于确定 IP 数据报访问目标所经过的路径。traceroute 命令用 IP 存活时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。 通过 traceroute 命令可以知道数据包从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地 (destination) 走的路径可能会不一样,但大部分时候所走的路由是相同的。 Linux 系统中是 traceroute, 在 Windows 中为 tracert。t Read more ...

2017-06-09 traceroute , network , linux , command

Ubuntu/Debian 安装 nginx

Nginx 是非常流行的 HTTP/HTTPS 服务器软件,它也可以作为反向代理服务器,邮件代理服务器,可以用于负载均衡,缓存等等。 基本的 Nginx 由 master 进程和 worker 进程组成, master 读取配置文件,并维护 worker 进程,而 worker 会对请求进行处理。 Nginx 有两个主要的分支可供安装,stable 和 mainline 。这两个分支的主要区别可以从下图看出: stable 分支并不意味着比 mainline 更加稳定可靠,事实上 mainline 更加稳定,因为 Nginx 开发人员会把所有的 Read more ...

2017-06-06 linux , nginx , ubuntu , debian , web

MySQL 中 utf8 和 utf8mb4 区别

今天在插入 MySQL 时遇到如下错误 Incorrect string value: ‘\xF0\x9F\x98\x81…’ for column ‘data’ at row 1 查证之后发现是因为插入的时候字符串中有 emoji,而 emoji 是 unicode 编码,MySQL 当时在建表时选择了 utf8 编码,导致了上述错误。mysql 支持的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了,因此引出了 utf8mb4 编码。MySQL 在 5.5.3 之后增加了这个 utf8mb4 的编码,mb4 就 Read more ...

2017-06-02 mysql , encoding , utf8 , unicode

Celery 最佳实践

如果你第一次听说 Celery,可以去看下之前的 Celery 介绍 了解下 Celery 的基本功能,然后再来看这篇文章。 尽量不要使用数据库作为 AMQP Broker 随着 worker 的不断增多可能给数据库 IO 和连接造成很大压力。更具体来说不要把 Celery 的 task 数据和应用数据放到同一个数据库中。 Docker 上很多 相关的镜像。 使用多个队列 对于不同的 task ,尽量使用不同的队列来处理。 @app.task() def my_taskA(a, b, c): print("doing something her Read more ...

2017-05-21 celery , python , web , database , redis , queue

每天学习一个命令:sudo 来管理 Linux 下权限

sudo 表示 “superuser do”。它允许已验证的用户以其他用户的身份来运行命令。其他用户可以是普通用户或者超级用户。然而,绝大部分时候我们用它来以提升的权限来运行命令。 sudo 命令与安全策略配合使用,默认安全策略是 sudoers,可以通过编辑文件 /etc/sudoers 来配置。其安全策略具有高度可拓展性。人们可以开发和分发他们自己的安全策略作为插件。 sudo 与 su 的区别 在 GNU/Linux 中,有两种方式可以用提升的权限来运行命令: su 命令 sudo 命令 su 表示 “switch user” Read more ...


各种邀请链接整理

这里全部是推广链接,如果你觉得我的文章有用,帮忙点击一下可好? 腾讯云 https://cloud.tencent.com/act/cps/redirect?redirect=10488&cps_key=60232db1ed2e2eb902049749db75573a&from=activity 工具应用 Trello 看板应用 NextDNS Pomotodo 番茄工作法 Airbnb 民宿 VPS ### DirectSpace 从 14 年开始用,只遇到过一次宕机,虽然是 ov Read more ...

2017-05-15 referral , site , website , register , login

Git 使用过程中遇到的小技巧

Git 使用过程中遇到的小技巧,平时没有 commit, merge, branch 用的那么勤快,但是需要时也需要查看一下,因此记录一下,以免忘记。 将其他分支中多次提交合并到 master 的一次提交 开发中经常使用分支开发,因此不可避免的在开发中向 dev,或者 bugfix 分支进行多次提交,而有些提交可能仅仅为了测试,commit message 也没有认认真真写,所以当开发完成,或者 bug 修复完成想要合并到 master 分支时,不希望保留中间糟糕的提交信息,有一种方法是使用 merge 的 --squash 。 而在之前我可能会用 Read more ...


URL 短域名

逛博客看到别人在讨论 [[短 URL 的设计实现]],然后偶然间发现了 GitHub 曾经推出 1 过的短域名服务 Git.io 创建短域名 curl -i https://git.io -F "url=https://github.com/einverne" HTTP/1.1 100 Continue HTTP/1.1 201 Created Server: Cowboy Connection: keep-alive Date: Sun, 14 May 2017 03:05:40 GMT Status: 201 Created Content-T Read more ...

2017-05-14 github , google , short-url , url

最近文章

  • 关于习惯养成和打破的科学 昨天,花了半天的时间去听了 Andrew Huberman 的一个 YouTube 视频 —- The Science of Making & Breaking Habits,主要讲的是从神经科学结合心理学的角度,探讨了习惯的形成和破除机制,并且 Huberman 教授提供了多项实用的工具来帮助我们培养习惯以及破除我们不希望的习惯。
  • Rancher 中创建 K3s 集群 CA 检查报错解决方案 在之前的文章中遗留下来一些没有解决的问题,当时只是记录了一下, 后来因为只使用了 local 集群就没有继续调查,现在想要创建 K3s 集群的时候再次遇到了类似的问题。
  • LingQ:通过可理解输入学习语言 之前有写过一篇文章,大致地总结了一下自己关于Duolingo的一些想法,前段时间在打卡了 800 天之后,把 Duolingo 中的英语韩语和日语全部通关到了最后只能每天重复,所以发了一个推特帖子想要寻找一下比 Duolingo 更深度一些,每天可以坚持记忆一些语言支持的「工具」。我个人非常不喜欢直接拿一个背单词应用就开始背诵的方式,虽然我承认只要长期坚持还是会有一定的效果,但是一方面是效率很低,背过的单词不容易被想起来,另外一方面也是单纯的背单词非常的无聊。我也尝试过在浏览网页的时候将生词存放到 Anki 中,然后定期回顾,但是单词脱离了上下文,总是感觉还是像是在一个个过单词,我在之前的文章中介绍过 Comprehensible Input (可理解输入),但实际上自己一直没有好好地践行,看过一些日剧,日综,但是现在还是韩剧/韩综看得更多,在日常生活中英文的材料看得更多,日文的内容输入相对就比较少,也尝试过找一些日语的播客,但是以我现在的水平,最基础的都有一些费力的情况下,还是没有达到可以收听日语播客的程度。所以,这段时间我就是一直在没有找到比 Duolingo 更好的,又能够随时随地可以拿出来打个卡的服务,直到我看到了 LingQ,第一次注意到 LingQ 还是在 GitHub 中看到一个仓库是将 NHK Easy News 导入到 LingQ,隔天我就又看到一位朋友也在推荐 LingQ 作为沉浸式阅读工具,所以我就决定好好来研究一个这个工具。
  • Amazon 推出 Kiro AI IDE 新一代 AI 辅助集成开发环境 在 AI 辅助代码生成领域,从来不缺竞争者,现在 Amazon 正式加入了战争推出 Kiro AI IDE,Amazon 在之前就推出过智能助手 Amazon Q,以及代码补全插件 CodeWhisperer,但是在激烈的代码生成领域依然没有竞争过 Cursor,Windsurf,Claude Code 等一众的领跑者,甚至声量都没超过 Gemini CLI。现在推出的 Kiro 是一个集成的开发环境,至此互联网巨头中除了苹果没有推出 AI 辅助编码的工具之外所有的公司都已经有了对应的产品。
  • SuperClaude 让 Claude Code 更专业更顺手 SuperClaude 是一个 开源的 Claude Code 增强工具,提供了额外的命令,人物角色(Personas),以及更好的 MCP 服务集成。

赞助