最近在做特征平台的改造,需要接入新的特征类别。一个特征可能同时属于多个类别,且平台要支持多种类别同时查询,原有的设计结构无法直接扩展,存储和查询需要做兼容改造。通过位运算的特性进行了设计优化,特此记录。
运行在pdf上的linux系统
一位国外高中生实现在PDF中运行Linux系统。
PDF文件不仅仅是静态的文档,同时还支持Javascript,并有自己独立的标准库,一些浏览器(谷歌浏览器、火狐浏览器)将此作为PDF引擎的一部分来实现。
PDF中的JS完整规范只有Adobe Acrobat实现过,包含了一些能力,例如3D渲染、发出HTTP请求、监控用户点击等。
基于以上能力,只需要极少的IO就可以实现任何想要的计算。
十亿行文本挑战赛
十亿行文本挑战赛(The One Billion Row Challenge,1BRC),是今年火遍外网的一项比赛,旨在测试利用Java从文本文件中聚合十亿行数据时的性能极限。参赛者可以使用并行处理、SIMD、优化GC或者其它方式,实现快速计算。
2024 Google开发者大会
开发者大会之于工程师,就像拉萨之于朝圣者。今年的Google开发者大会刚好在北京举办,我有幸前往参加,见到了来自世界各地的个人开发者和爱好者。参加开发者大会不仅能扩展视野,也能让自己显得比较Geek~。
Gitlet
很久没有更新博客了,曾经规划了很多plan都没有执行,前段时间看到的一个有趣的项目:UCB的CS61b课程,实现一个Gitlet。从今天开始,持续更新。
背景
Gitlet是一个类似于Git的版本控制系统,而版本控制系统本质上是计算机上文件的备份系统,Gitlet支持的功能主要包括:
- 保存文件目录的备份。在Gitlet中,这被称为提交(committing),而备份本身被称为commits
- 还原一个或多个文件版本或整个提交。在Gitlet中,这被称为check out
- 查看备份历史记录。在Gitlet中,使用log来查看历史
- 维护分支。维护相关的提交序列,称为branch
- 合并。将一个分支的更改合并到另一个分支中
ChatGPT应用场景
使用OpenAI API Key还可以做很多有趣的事情。
部署ChatGPT网页服务
简介
本项目Fork自开源仓库ChatGPT-Next-Web,基于Vercel部署个人的ChatGPT网页服务,优点是不需要服务器且域名是免费的,操作简单,可以在PC端和移动端使用。主要练习了Vercel的使用和ChatGPT官网OpenAI API Key的使用。
redis设计与实现
HashMap分析
HashMap结构设计。
快排源码分析
以Arrays.sort()为例进行分析。
快排基本原理
简介
快速排序,是一种比较/交换排序算法,最早由英国的东尼·霍尔提出(另外一个知名贡献是提出了和操作系统相关的哲学家进餐问题,首次提出了管程的概念,实现共享资源的互斥访问)。
时间复杂度:快排的平均时间复杂度是O(nlogn),最坏时间复杂度是O(n^2)。
基本思想:使用分治法将一个序列分为两个子序列,然后递归地排序两个子序列。