自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 零基础从开发到自动化测试完整创建一个超简单GitHub项目

零基础从开发到自动化测试完整创建一个GitHub项目0. 引言2022年了,大厂毕业季如火如荼。作为初出茅庐的程序员萌新,我们来一起探索一下如何完完整整创建一个GitHub项目,从开发构建到自动化测试全覆盖。教程需要:GitHub账号1. 创建项目既然从零开始,那么我们首先要创建一个项目。Repository name: github_tutorialgitignore: C++README: Add a README to your repository因为我们最最最简单的d

2022-05-07 02:30:32 941

原创 如何用C++实现一个简易数据库(十二)

如何用C++实现一个简易数据库(十二)1. 为什么要更新拆分后的父结点?现在让我们来加入一个乱序的测试用例来证明我们的需求。it "allows printing out the structure of a 4-leaf-node btree" do script = [ "insert 18 user18 person18@example.com", "insert 7 user7 person7@example.com", "insert 10 use

2022-03-21 13:26:33 1904

原创 如何用C++实现一个简易数据库(十一)

如何用C++实现一个简易数据库(十一)1. Cursor存在什么问题?我们在上一章提到了,我们现在使用的Cursor在扫描多层级树的时候存在问题,但究竟是什么问题呢?让我们先来增加一个测试用例。 it "prints all rows in a multi-level tree" do script = [] (1..15).each do |i| script << "insert #{i} user#{i} person#{i}@example.com"

2022-03-21 13:23:54 1137

原创 如何用C++实现一个简易数据库(十)

如何用C++实现一个简易数据库(十)1. 如何实现递归搜索B-Tree?按照惯例,先看一下假设我们修复错误后应该如何正常打印我们的B-Tree。 it "allows printing out the structure of a 3-leaf-node btree" do script = (1..14).map do |i| "insert #{i} user#{i} person#{i}@example.com" end script << ".

2022-03-21 13:21:27 866

原创 如何用C++实现一个简易数据库(九)

如何用C++实现一个简易数据库(九)1. 如何分裂叶子结点?按照惯例,我们先增加一个测试用例,对应的已经是 3-leaf-node btree 。it "allows printing out the structure of a 3-leaf-node btree" do script = (1..14).map do |i| "insert #{i} user#{i} person#{i}@example.com" end script << ".b

2022-03-21 13:17:48 2006

原创 如何用C++实现一个简易数据库(八)

如何用C++实现一个简易数据库(八)1.如何按序排列和防重?在上一章我们提到了,我们实际上插入B-Tree当中的数据时,需要按照key的顺序排列,这样才能保证B-Tree的顺序性。同时,既然存在key的顺序性,那么我们就需要确保key的唯一性。让我们来调整我们的测试。it "allows printing out the structure of a one-node btree" do script = [3, 1, 2].map do |i| "insert #{i} user

2022-03-16 00:28:01 504

原创 如何用C++实现一个简易数据库(七)

如何用C++实现一个简易数据库(七)1. B-Tree是什么?B树 (B-tree) 是一种自平衡的树,能够保持数据有序。这种资料结构能够让查找数据、顺序访问、插入数据及删除的动作,都在对数时间内完成。 B树,概括来说是一个一般化的二元搜寻树(binary search tree)一个结点可以拥有2个以上的子结点。与自平衡二叉查找树不同,B树适用于读写相对大的数据块的存储系统,例如磁盘。 B树减少定位记录时所经历的中间过程,从而加快存取速度。 B树这种数据结构可以用来描述外部存储。这种资料结构常被应用在

2022-03-16 00:27:30 1072

原创 如何用C++实现一个简易数据库(六)

如何用C++实现一个简易数据库(六)1. 我们的光标需要做什么?指向table开头指向table结尾指向table中的一个row将cursor往后推进2. 如何实现光标?显然我们现在要指向table开头/结尾,所以我们需要实现一个cursor,它可以指向table开头,也可以指向table结尾。注意我们即然使用了cursor,也即指向这个词,我们在此处使用的就是指针,使用的其实一直就是DB::table唯一对象。class Cursor{public: Table *tabl

2022-03-16 00:26:57 892

原创 如何用C++实现一个简易数据库(五)

如何用C++实现一个简易数据库(五)1. 我们怎样规范我们的储存行为?首先,为了确定我们程序的运行行为,我们需要确定一个规范。即只有通过.exit合法退出时,我们才能将数据正常储存到硬盘(文件)中。我们将执行从内存页面刷新(flush)到硬盘(文件)的操作。为此,我们新增如下的测试。describe "database" do before do `rm -rf test.db` end def run_script(commands) raw_output = nil

2022-03-16 00:26:24 1023

原创 如何用C++实现一个简易数据库(四)

如何用C++实现一个简易数据库(四)1. 如何测试边界情况?在上一章我们已经初步完成了数据库的设计,现在让我们来测试边界情况,也就是Table内存占满的情况。 it 'prints error message when table is full' do script = (1..1401).map do |i| "insert #{i} user#{i} person#{i}@example.com" end script &

2022-03-16 00:25:44 453

原创 如何用C++实现一个简易数据库(三)

如何用C++实现一个简易数据库(三)1. 怎么初步完成我们的数据库?现在我们先从最简单的开始,我们即将完成的数据库功能非常简单。仅支持insert和select两项将一切数据储存到内存中,即退出程序后一切数据丢失。仅支持单个硬编码表2. 如何修改我们的测试用例?为了支持上述情况,我们需要修改我们的insert和select测试用例如下。it 'inserts and retrieves a row' do result = run_script([ "insert 1

2022-03-16 00:25:11 2904

原创 如何用C++实现一个简易数据库(二)

如何用C++实现一个简易数据库(二)1. 如何修改我们的单元测试?由于我们的情况增多,我们可能会对之前的测试情况进行修改,所以各个章节内的单元测试可能相同,但实际期望的返回值会有所不同,希望注意。此外,头部的run_script函数是相同的,至此不再赘述。 it 'test exit and unrecognized command and sql sentence' do result = run_script([ "hello world", ".HELLO WO

2022-03-16 00:24:31 916

原创 如何用C++实现一个简易数据库(一)

如何用C++实现一个简易数据库(一)1. 如何安装我们的单元测试环境?检查我们是否有安装ruby。输入命令ruby -v,我们将得到ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux-gnu]如果没有安装使用sudo apt install ruby或对应操作系统的包管理工具安装即可。检查我们是否有安装rspec输入命令rspec -v,我们将得到RSpec 3.10 - rspec-core 3.10

2022-03-16 00:23:48 2435 1

原创 如何用C++实现一个简易数据库(零)

如何用C++实现一个简易数据库基于cstack/db_tutorial C语言版本KCNyu2022/2/2作为笔者写的第一个系列型教程,还是选择基于前人的教程经验以及添加一些自己个人的探索。也许有很多纰漏之处,希望大家指正。1. 数据库是什么?数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。使用者可以对其中的资料执行新增、选取、更新、刪除等操作。2. SQL是什么?SQL (Structured Query

2022-03-16 00:22:44 4179

原创 C++在Linux下借助dlopen使用动态库

一、创作背景由于在多方压力逼迫下,强制我开始制造学术垃圾。借此机会便把所用到的C++在Linux下如何真正意义上借助dlopen使用动态库,从而方便利用语言的多态特性。二、核心基类为了不丢脸,还是不使用自己的项目代码进行演示,做个简单的demo吧。偷懒用HPP文件,定义声明实现怼一起啦~#ifndef SHAPE_HPP#define SHAPE_HPP#include <iostream>class Shape{public: Shape() {} vi

2022-02-02 14:44:01 1565

原创 并行计算研究Brocard问题

Brocard问题并行计算

2022-01-05 14:54:01 471

原创 分支定界法求解旅行商问题

0、问题梗概旅行商问题(TravelingSalesmanProblem,TSP)是一个经典的组合优化问题。经典的TSP可以描述为:一个商品推销员要去若干个城市推销商品,该推销员从一个城市出发,需要经过所有城市后,回到出发地。应如何选择行进路线,以使总的行程最短。1、随机数据的初始概率密度函数 2、程序运行数据运行次数时间(维数23)时间(维数33)13.06541 ms26.9593 ms23.65156 ms48.6972 ms32.66832 ms43.5297 ms46.78412 ms44.7

2021-12-29 15:16:42 1902

空空如也

空空如也

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

TA关注的人

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