January 31, 2023 16 min read Java 10 分钟快速入门垃圾回收机制 自动内存管理是编程语言发展历程上的一项伟大发明。 在没有自动内存管理前,人们都是手动进行内存管理。在 C 语言中,我们申请内存时,会使用 malloc 函数向操作系统申请内存空间,使用结束后,我们使用 free 函数释放内存。 于是,一些写了 C 语言比较久的同学可能会发现,自己的程序经常遇到内存泄漏、double free、use after free 等错误,这都是因为我们在管理这些内存时,没有正确的释放他们导致的。 而带有自动内存管理的编程语言却不一样,它们带来了一个叫做 runtime 的东西,像操作系统一样, 继续阅读
January 01, 2023 8 min read 年末总结 2022: 艰难,但充满希望 随着忙碌的结束,终于可以开始写今年的年末总结了。 掐指一算,这是《年末总结》系列的第五篇文章。也就是说,我从2018年的最后一天开始写年末总结,到现在正好是第五年。 过去一年里,我做了什么? 似乎有很多事情,让我先捋一捋…… 这一年,我…… * 写了 1500+ 个 commit, 24 个 Pull Request * 博客发布了 3 篇文章,其中 1 篇为年末总结。 * 追了 2 部番, 继续阅读
October 03, 2022 13 min read 数据库 MiniDB 开发手札2 - 网络通信: PostgreSQL 服务端实现 要写一个能够进行网络通信的协议,我们需要有客户端和服务端,定义各种数据包格式以及它们的交互流程,然后需要考虑安全性、效率等各种因素……实在是太麻烦了!所以,与其从头开始设计一个通讯协议,为什么不先研究一下现有数据库系统的协议呢? 如果我们直接实现了某个数据库的协议,那么这款数据库的客户端就可以直接连接到我们的数据库上,这样的话,我们岂不是连客户端都可以不用写了。嘿嘿…… 抱着这种想法,本人在网上进行了一番调研,最后决定使用 PostgreSQL 数据库的通信协议。 选择 PostgreSQL 主要是因为…… 1. 社区活跃,资料丰富(不知道的能 Google) 2. 官网有较为详细的通信协议文档(我看得懂) 3. 版权属于社区, 继续阅读
October 03, 2022 2 min read 数据库 MiniDB 开发手札1 - 概览 本学期一门叫《应用软件开发》的课程要求我们实现一个数据库系统,要求能索引、可持续化、多表连接查询、远程访问等功能。 简单思考了一下,我认为这个数据库应该分为以下几个部分: 看起来是一个挺复杂的工程,但慢慢实现一定是能成功的。 系统结构对于网络通信这一部分,因为自己一直想试试 Netty 这个网络框架,但是又觉得 Java 写着无聊,于是便选择了 Kotlin 作为后端服务器的编程语言,顺便学习一下它的使用方式。 SQL 解析可以使用 ANTRL 来实现, GitHub 上也有大量的资料,应该不是很大的问题。 我希望这款数据库不仅可以作为像 MySQL 这样的分布式数据库服务器, 继续阅读
February 01, 2022 5 min read 年末总结 HELLO: 2022 原本应该在1月1日写的年末总结,结果并没有准时发出。 不过,该来的还是要来。每年一次的传统,咱可不能丢! 过去一年里,我做了什么? 这一年里,发生了很多事情,很多机遇,很多挑战…… 这一年,我…… * 写了 1000+ 行代码。 * 博客发布了 6 篇文章,其中 1 篇为年末总结。 * 追了 0 部番, 看了 0 部美剧。 博客重新装修 在二月初的时候,我突发奇想, 继续阅读
August 09, 2021 17 min read 深度学习 OpenVINO + YoloV5 目标视觉炼丹流程简述 本文将以 ultralytics 实现的 YOLOv5 神经网络算法识别 RoboMaster比赛中机器人的装甲板为例,简单介绍使用 Intel 的 OpenVINO 来进行视觉神经网络运算的应用的基本流程。 继续阅读
February 14, 2021 8 min read DN42 使用 Tinc 组建虚拟内网,并接入 DN42 DN42 [https://dn42.net/howto/Getting-started] 是一个大型的私有互联网络,众多节点通过 VPN 的方式互相连接,然后再通过 BGP 等协议相互交换自己的路由,并提供像 DNS, IRC 这样的基础设施。 当我在自己的 vps 上和其他人成功 peer 后,我就在想应该如何让自己的其他计算机可以在不与其他人 peer 的情况下可以随意地访问 DN42 内的计算机,同时让 dn42 内的其他节点也可以访问到我的计算机。 如果你想和我 peer, 继续阅读
January 11, 2021 3 min read 算法 TOJ 1175 - 线段树模板题 这题也是线段树 单组数据,第一行一个正整数n。(1<=n<=10^5) 第二行n个数 a1,a2...an。(0<= |a[i]| <=10^7) 第三行一个整数m,表示m个操作。 (1<=m<=10^5) 接下来m行,每行第一个数表示操作类型,其余数表示操作对应的参数,对应题面。 (1<=l<=r<=n,0<=|v| 继续阅读
January 07, 2021 2 min read 算法 HDU 1671 - Phone List Given a list of phone numbers, determine if it is consistent in the sense that no number is the prefix of another. Let’s say the phone catalogue listed these numbers: 1. 继续阅读
January 07, 2021 2 min read 算法 HDU 1257 - 统计难题 Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀). 输入 输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串. 注意:本题只有一组测试数据,处理到文件结束. 输出 对于每个提问,给出以该字符串为前缀的单词的数量. 样例输入 banana band bee absolute acm ba b band abc 样例输出 继续阅读