跳表实现 下面是跳表的C语言实现,参考的是redis跳表实现思路。具体实现思路会在GitHub上更新,感兴趣的小伙伴可以关注跳跃表#include <stdio.h>#include <stdlib.h>#define MAX_LEVEL 20#define SKIPLIST_P 0.25typedef struct SkipListLevel { struct SkipListNode *forward;} SkipListLevel;typedef struc
Gin框架简析 1. 使用package mainimport ( "fmt" "github.com/gin-gonic/gin" "net/http")func main() { gin.SetMode(config.GetMode()) //设置运行模式 engine := gin.New() // 获取engine实例 engine.Use(gin.Recovery()) // 添加中间件 engine.GET("/demo.json", func() gin.HandlerFunc
[Golang]尾递归优化? 参考尾调用详解 - 阮一峰go&plan9 - 曹大什么是尾调用``` func g(n int) { fmt.Println(n) } func f(m int) { m++ g(m) } 在f()函数内最后直接调用g()```尾调用优化我们把调用函数称作caller,被调用函数称作callee在程序运行过程中,需要先保存caller现场在栈帧中,然后调用callee
mac vscode搭建c语言开发环境 环境os:macOS Catalinaclang(clang -v 结果):Apple clang version 11.0.0 (clang-1100.0.33.16)Target: x86_64-apple-darwin19.4.0Thread model: posixInstalledDir: /Library/Developer/CommandLineTools/usr/binlldb(lldb -v 结果):lldb-1100.0.30.11Apple Swift version
记一次ubuntu内核升级造成virtualbox崩溃的解决过程 一、环境配置系统版本:ubuntu16.04 LTS内核版本可通过:uname -r命令查看内核版本:升级前=>4.4.0-142-generic 升级后=>4.4.0-143-generic二、出现的问题virtualbox在打开启动一个虚拟环境后,报错,并提示:The VirtualBox Linux kernel driver (vboxdrv) is eith...
T0001.数据结构面试题---栈---获取最小值 题目实现一个特殊的栈,在实现栈基本功能的基础上,实现返回栈中最小元素的操作.要求:1.pop,push,getMin操作的时间复杂度为O(1)2.可使用现成的栈结构GitHub源码GitHub源码方案一类文件:MyStack.php示例文件:MyStackExample.php使用两个栈dataStack和minStack.push操作:假设当前压入栈的值为valu...
红黑树实现[PHP] 红黑树的实现GitHub源码class Node{ private $id; /** * @var * 1 => red * 2 => black */ private $color = 1; private $value = null; public $parent = 0; ...
跳跃表实现[PHP] 跳跃表的简单实现,参考redis跳跃表实现GitHub源码class Node{ private $id; public $value; public $level; public $forward = []; public function __construct($value, $level) { $this->id...
桶排序[PHP] 桶排序 GitHub源码计算序列最小值min, 最大值max根据min, max和指定的需要构造的桶的数量n,计算每个桶的区间:range = ceil(max - min + 1)遍历序列,将序列中的值分布到各个桶中: 桶标号从0开始, (value - min) / range每个桶独立排序将结果输出例如对于序列 5, 4, 10, 30, 20, 15, 36min...
计数排序[PHP] 计数排序 GitHub源码获取序列中的最小值min和最大值max O(n)统计min - max之间所有值在序列中的出现次数 O(n)顺序输出min - max的所有值,次数为0不输出,其余次数为多少就输出多少 O(k) k为数据范围例如序列为: 2, 4, 6, 9, 4, 8min = 2, max = 9, n为6,k为8统计出现次数为 [2 => 1, 3 ...
PAT真题解答 程序设计测试平台PTA(https://pintia.cn/problem-sets) 上部分真题的C语言解答 具体代码请参考下面的GitHub链接乙级(BasicLevel) 甲级(AdvancedLevel) 顶级(TopLevel)
B+树简单实现(PHP) GitHub源码 原理参考此链接 下面是一些实现细节: 1. 注意 - 叶节点包含所有的索引和数据 - 只有叶节点才会持有具体数据,非叶节点只有索引 - 叶节点之间连接成一个链表,便于范围查询 2. 树节点结构 BTNode { id : 标识节点对象的唯一值 parent : 父节点的ID值 isLeaf : 是否是叶节点 indexNum : 当...
B-Tree的简单实现(PHP) B-Tree的简单实现: GitHub源码地址 注: B-Tree的原理介绍在这里就不赘述了,相信其它博客会讲的更透彻。我们主要关注实现过程的细节问题。 以下条目对应的代码实现会在代码中标出,例如第3条对应的代码中的位置标识为[3] 代码最后写了2个调试使用的代码,可能对理解实现过程和逻辑结构有帮助。B-Tree单个节点的结构是: BTNode { id...
Laravel框架MiddleWare实现原理demo 根据Laravel框架中间件的实现机制,写的一个实现demo。 GitHub源码 - 关键在于PipeLine类的then方法: - 其中最关键的是array_reduce(array,array,array, callback, init)函数,−此函数会对array中的每个值应用init)函数,−此函数会对array中的每个值应用init)函数, - 此函数会对array中的每个值应...
仿redis的HyperLogLog数据结构 对于网站的UV计数来说,使用集合这种数据结构是可以满足的,但是使用集合会带来占用空间过大的问题。一旦数据量增大,它的某些统计特性就会涌现。HyperLogLog就是应用了大数据量的统计特性(随机次数和随机数二进制最大尾部0个数之间的关系),实现的数据量估计。 GitHub源码若想有更深入的理解,可以参考《Redis 深度历险:核心原理与应用实践》这本书,我想比我理解的更深入一些。cl...
ubuntu16.04设置开机自启动(以mongodb为例) 以mongodb的设置为例 1.在/etc/init.d/目录下创建mongodb-start文件,文件内容如下:#!/bin/bash### BEGIN INIT INFO# Provides: mongodb# Required-Start: $local_fs $network# Required-Stop: $local_fs# Def...
php框架容器实现(DI)的一般方式 文章最后有一个简单的容器实现示例和使用示例,可以参考理解,对应的github源码:GitHub源码一个仿照yii2框架容器实现的代码示例:GitHub源码 ,其中register方法对应set方法,resolve方法对应set方法 或 GitHub源码一个摘自laravel框架容器实现和使用示例:GitHub源码psr-11容器GitHub地址规范1.容器类一般有get和set方...
AWS监控SNS服务的两种方案(每日使用量和Cloud Watch) 方案一. 配置使用sns的每日使用量报告: 订阅每日使用量报告,可在控制台操作配置。 参考:https://docs.aws.amazon.com/zh_cn/sns/latest/dg/sms_stats_usage.html 1.为每日报告形成的csv文件创建s3的一个bucket 2.sms使用量报告订阅到bucket 3.在s3的指定bucket中获取csv文件 4.解析cs...
Laravel框架的依赖注入容器(DI容器)使用示例 GitHub源码地址摘取的Laravel框架中,Container的实现代码,并参考Laravel中关于容器的使用手册,写的一个容器使用示例。 详情请移步:GitHub
基于workerman库实现的秒级定时任务工具 对于php开发人员,想必已经受够了在linux系统上配置各种定时任务,我自己也是不胜其烦。so,最近写了个秒级的定时任务工具,下面是一些简介。 GitHub源码地址秒级定时任务工具,基于workerman库以往我们实现定时任务主要依靠在服务器端配置crontab,但这种做法有几个弊端1) crontab只支持分钟级别,如果要实现秒级别的任务就必须写shell脚本实现。 2) 如...