自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

2lovecode blog

欲做精金美玉的人品,定从烈火中煅来;思立掀天揭地的事功,须向薄冰上履过。

  • 博客(92)
  • 资源 (2)
  • 收藏
  • 关注

原创 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

2021-05-28 14:49:20 411

原创 跳表实现

下面是跳表的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

2021-03-11 13:20:07 214

原创 [Golang]尾递归优化?

参考尾调用详解 - 阮一峰go&plan9 - 曹大什么是尾调用``` func g(n int) { fmt.Println(n) } func f(m int) { m++ g(m) } 在f()函数内最后直接调用g()```尾调用优化我们把调用函数称作caller,被调用函数称作callee在程序运行过程中,需要先保存caller现场在栈帧中,然后调用callee

2021-02-26 09:26:12 1274

原创 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

2020-05-16 16:08:26 1474

原创 记一次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...

2019-03-21 09:51:45 1373

原创 T0001.数据结构面试题---栈---获取最小值

题目实现一个特殊的栈,在实现栈基本功能的基础上,实现返回栈中最小元素的操作.要求:1.pop,push,getMin操作的时间复杂度为O(1)2.可使用现成的栈结构GitHub源码GitHub源码方案一类文件:MyStack.php示例文件:MyStackExample.php使用两个栈dataStack和minStack.push操作:假设当前压入栈的值为valu...

2018-12-26 14:55:04 313

原创 红黑树实现[PHP]

红黑树的实现GitHub源码class Node{ private $id; /** * @var * 1 =&gt; red * 2 =&gt; black */ private $color = 1; private $value = null; public $parent = 0; ...

2018-10-18 18:48:57 1123

原创 跳跃表实现[PHP]

跳跃表的简单实现,参考redis跳跃表实现GitHub源码class Node{ private $id; public $value; public $level; public $forward = []; public function __construct($value, $level) { $this-&gt;id...

2018-09-26 18:19:18 840

原创 桶排序[PHP]

桶排序 GitHub源码计算序列最小值min, 最大值max根据min, max和指定的需要构造的桶的数量n,计算每个桶的区间:range = ceil(max - min + 1)遍历序列,将序列中的值分布到各个桶中: 桶标号从0开始, (value - min) / range每个桶独立排序将结果输出例如对于序列 5, 4, 10, 30, 20, 15, 36min...

2018-09-15 10:51:43 376

原创 计数排序[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 =&gt; 1, 3 ...

2018-09-15 10:48:20 303

原创 PAT真题解答

程序设计测试平台PTA(https://pintia.cn/problem-sets) 上部分真题的C语言解答 具体代码请参考下面的GitHub链接乙级(BasicLevel) 甲级(AdvancedLevel) 顶级(TopLevel)

2018-09-10 17:00:41 4709

原创 B+树简单实现(PHP)

GitHub源码 原理参考此链接 下面是一些实现细节: 1. 注意 - 叶节点包含所有的索引和数据 - 只有叶节点才会持有具体数据,非叶节点只有索引 - 叶节点之间连接成一个链表,便于范围查询 2. 树节点结构 BTNode { id : 标识节点对象的唯一值 parent : 父节点的ID值 isLeaf : 是否是叶节点 indexNum : 当...

2018-09-04 19:45:50 1521

原创 B-Tree的简单实现(PHP)

B-Tree的简单实现: GitHub源码地址 注: B-Tree的原理介绍在这里就不赘述了,相信其它博客会讲的更透彻。我们主要关注实现过程的细节问题。 以下条目对应的代码实现会在代码中标出,例如第3条对应的代码中的位置标识为[3] 代码最后写了2个调试使用的代码,可能对理解实现过程和逻辑结构有帮助。B-Tree单个节点的结构是: BTNode { id...

2018-09-01 21:04:28 1134

原创 Laravel框架MiddleWare实现原理demo

根据Laravel框架中间件的实现机制,写的一个实现demo。 GitHub源码 - 关键在于PipeLine类的then方法: - 其中最关键的是array_reduce(array,array,array, callback, init)函数,−此函数会对array中的每个值应用init)函数,−此函数会对array中的每个值应用init)函数, - 此函数会对array中的每个值应...

2018-08-24 15:28:09 468

原创 仿redis的HyperLogLog数据结构

对于网站的UV计数来说,使用集合这种数据结构是可以满足的,但是使用集合会带来占用空间过大的问题。一旦数据量增大,它的某些统计特性就会涌现。HyperLogLog就是应用了大数据量的统计特性(随机次数和随机数二进制最大尾部0个数之间的关系),实现的数据量估计。 GitHub源码若想有更深入的理解,可以参考《Redis 深度历险:核心原理与应用实践》这本书,我想比我理解的更深入一些。cl...

2018-08-24 15:20:10 424

原创 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...

2018-08-02 11:07:55 2799 1

原创 php框架容器实现(DI)的一般方式

文章最后有一个简单的容器实现示例和使用示例,可以参考理解,对应的github源码:GitHub源码一个仿照yii2框架容器实现的代码示例:GitHub源码 ,其中register方法对应set方法,resolve方法对应set方法 或 GitHub源码一个摘自laravel框架容器实现和使用示例:GitHub源码psr-11容器GitHub地址规范1.容器类一般有get和set方...

2018-08-01 15:55:49 1666

原创 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...

2018-08-01 10:47:12 1760 2

原创 Laravel框架的依赖注入容器(DI容器)使用示例

GitHub源码地址摘取的Laravel框架中,Container的实现代码,并参考Laravel中关于容器的使用手册,写的一个容器使用示例。 详情请移步:GitHub

2018-07-30 21:17:11 765

原创 基于workerman库实现的秒级定时任务工具

对于php开发人员,想必已经受够了在linux系统上配置各种定时任务,我自己也是不胜其烦。so,最近写了个秒级的定时任务工具,下面是一些简介。 GitHub源码地址秒级定时任务工具,基于workerman库以往我们实现定时任务主要依靠在服务器端配置crontab,但这种做法有几个弊端1) crontab只支持分钟级别,如果要实现秒级别的任务就必须写shell脚本实现。 2) 如...

2018-07-09 15:23:36 3605

原创 使用yii2框架的ActiveRecord::find()->one()方法,出现Allowed memory exhausted错误

简介在使用yii2框架的活动记录的find()-&gt;one()方法时,系统报Allowed memory exhausted错误,也就是内存枯竭错误。当时想,框架的one()方法,只取一条数据,怎么会把内存占用满了?所幸经过各种尝试,解决了这个问题。场景:1.数据库:Mysql 2.有一个数据库表Demo,数据表结构: id name age 1...

2018-06-14 19:36:10 1459 1

原创 布隆过滤器(Bloom Filter)简单实现

参考文献: https://my.oschina.net/kiwivip/blog/133498 https://blog.csdn.net/jiaomeng/article/details/1495500 https://blog.csdn.net/hguisu/article/details/7866173 文献中探讨了布隆过滤器的原理和应用场景,以及一些实际应用场景中的增强方...

2018-06-13 19:37:22 1920

原创 增强版--php实现简单的基于DFA算法的敏感词过滤

之前写过一版的敏感词过滤: 原始版本博客 原始版本GitHub源码但是许多人反馈有问题,仔细检查后,果然发现有问题,所以写了增强版: 增强版GitHub源码&amp;lt;?php/** * 敏感词查找 * * 假设需要查找的敏感词有: * 1.a b c d e * * 注:1的左对齐子集 * 2.a b c * 3.a b...

2018-05-11 23:02:46 1701 1

原创 堆排序php实现

作为一种可以使用数组实现的数据结构,使用php来模拟优先队列(堆排序)还是比较容易的。下面是我们的实现代码,其中insert使用的是上滤,delete使用的是下滤。我们模拟实现了最小堆和最大堆。当然,php的spl库提供了类似的数据结构,它们基于c实现,在时间和空间上应该优于我们直接基于php的实现,大家可以参考下: 最小堆:http://php.net/manual/zh/class.sp...

2018-04-09 15:13:43 446

原创 设计模式12.1--状态模式

GitHub源码 这次我们学习的是和策略模式类图相似,但‘意图’大不相同的状态模式。策略模式的意图是通过把行为委托给算法对象实现类的弹性扩展,是类似于继承的类扩展方式,算法类的选择是客户决定的。而状态模式是为了消除类中的if else结构的一种解决方案,内部状态的改变会动态改变状态类的选择。状态模式:允许对象在内部状态改变时,改变它的行为。在示例代码中,我们使用一个简单的售卖机模型进行实...

2018-04-08 17:29:11 389

原创 php获取文件的最后N行数据

GitHub源码 代码是基于以下问题,给出的解决方案: 用php写一个函数,获取一个文本文件最后$n行内容,要求尽可能效率更高,并可以跨平台使用我理解的可以跨平台使用,是说的文件在windows平台和linux平台的行结束符不一致问题,在代码中我们没有体现这种不同。全部是在linux系统下的代码。跨平台问题还需要理解?&lt;?phpheader("content-type:...

2018-04-03 18:25:12 1852 1

原创 php文件操作-将其他文件的数据添加到本文件中

GitHub源码 其实我们的程序基于下面的问题写的答案:有两个文本文件 A.txt B.txt A.txt 3000万行,userid唯一,userid和username以空格分隔,如下所示: userid username 1 yi 2 er 3 san … … B.txt 3000万行,userid唯一,userid和realn...

2018-04-03 18:22:08 400

原创 微信公众号开发的测试账号配置

1.首先,你需要一个具有公网IP的域名例如www.demo.com,它的域名解析的IP是123.123.123.1232.在微信公众平台登录你的账号微信公众平台:https://mp.weixin.qq.com进入 开发-&gt;开发者工具 页面 点击 公众平台测试账号 如下图所示: 3.配置服务器和js接口安全域名如下图所示: 第一步,配置服务器。点击修...

2018-03-21 17:06:07 14996 2

原创 lnmp环境一键配置网站shell脚本

在lnmp环境下开发,一旦新创建了项目就需要重新配置一个server,配置hosts文件,重启服务过程。经常做这种工作太令人烦躁,所以自己写了一个一键配置脚本(虽然lnmp也提供这个功能),虽然粗糙,但还是能满足自己开发的需要。shell脚本源码: GitHub源码#!/bin/bash#nginx配置路径nginxConfigPath="/usr/local/nginx/c...

2018-03-15 18:52:41 594

原创 微信公众号网页开发中,EasyWechat + laravel5.5 auth实现授权注册账号,自动登录

微信公众号网页开发中,EasyWechat + laravel5.5 auth实现授权注册账号,自动登录1.准备工作:安装auth: php artisan make:auth安装easywechat:composer require "overtrue/laravel-wechat:~4.0"创建easywechat配置文件:php artisan...

2018-03-14 16:30:08 10145 3

原创 设计模式5.2--严格的单例模式

单例模式:确保一类只有一个实例。普通的单例在clone时,仍然会出现两个单例的情况, 在将__clone()魔术方法改为private后可杜绝此情况。&lt;?phpclass Singleton{ static private $instance = null; private function __construct() {} stati...

2018-02-27 15:07:38 310

原创 php中clone语法使用详解

clone的作用是对象复制,但在使用过程中会遇到一些问题,下面我们针对这些问题探讨一番。语法:$cloneObject = clone $object;1.在php中,我们把一个对象赋值给一个变量,实际上是把这个对象的引用赋给变量,他们指向的是同一个对象。当使用这个变量对对象进行操作时,实际上会影响所有指向这个对象的变量。&lt;?phpclass TestA{...

2018-02-27 12:45:53 633

原创 设计模式11.1--迭代器模式

迭代器模式:提供顺序访问聚合对象中各个元素的方法,而又不暴露其内部的实现 把遍历的任务放到迭代器上,而不是聚合对象上,简化了聚合的接口和实现,让责任各得其所示例中,FirstAggregate是聚合对象, FirstIterator提供了遍历FirstAggregate中各个元素的方法。&lt;?phpinterface MyAggregate{ public fun...

2018-02-24 14:54:19 201

原创 设计模式10.1-模板方法

模版方法:在一个方法中定义一个算法的框架,规定要执行哪些算法,以及算法执行的顺序。并且将一些算法的实现延迟到子类中。这样做的好处是可以在不改变算法结构的基础上,自由地处理一些算法的实现。在本示例中,RunMachineTemplateMethod的run方法,定义了一个算法框架,其中把openPower和display的实现延迟到了子类中。示例中的两个子类是RunComputer...

2018-02-14 19:01:48 221

原创 使用php实现一个简单的key-value数据库

最近在阅读《php核心技术与最佳实践》,前面的部分只是大体了解了下。不过当读到Hash算法与数据库实现这一章时,文中给出了一个使用php实现一个简单的key-value数据库的实例,这引起了我的兴趣。仔细阅读后觉得不过瘾,所以仿照给出的例子自己实践了一遍,来巩固一下学习的内容,同时加深下对数据的理解。1.文中实现了Hash索引,Hash值的冲突,通过分离链表法实现。 2.实现的索引类型是...

2018-02-12 17:39:11 2379

原创 设计模式9.1-外观模式

外观模式:定义了一个统一的接口,用来访问子系统中的一群接口。 外观模式和适配器模式在实现上比较相似,但是其应用的意图有所不同。 适配器模式意图改变一个接口成另一个接口,外观模式意图将一群接口简化在示例中,我们有一个子系统House,其中有一群接口(door light air)。 当我们回家时,要开门,打开灯,打开空调。一个回家动作统一了多个接口。&lt;?phpinterfa...

2018-02-11 10:37:18 194

原创 设计模式8.1-适配器模式

适配器模式:将目标接口,转化为客户期望的接口。在我们的示例中,目标接口是MonkeyInterface, 但是客户(Test类的run方法)期望的是PersonInterface,即客户期望处理的Person。 我们的处理方式是在客户和目标接口中间加一个适配器(MonkeyAdapter),客户使用的是适配器实例,适配器 实例最终会将相应请求委托给它持有的目标对象来处理(MonkeyAd...

2018-02-11 10:36:06 222

原创 php程序员面试必知基础知识

毕业后一直待到现在的公司,一个地方待久了,容易进入舒适区,看不到自己的不足,斗志也会被消磨。所以,最近闲来无事,趁着晚上的工夫出去面试了几家公司。还别说,事实表明,我对php的一些基础知识理解不深入,掌握不牢靠,也可以说是在开发过程中没有意识到去掌握这些知识。 在这里,我就把自己整理的认为一些比较重要的问题分享到这里,希望对各位同学有帮助。如果有新货的话,我会不定时更新的吆~~~php1...

2018-02-09 11:21:09 1379

原创 设计模式7.1-管道模式

管道模式:对于管道模式来说,有3个对象:管道,载荷,过滤器(阶段,阀门均可)。 我们的目的是在管道中对载荷进行一系列的处理。因为可以对过滤器进行动态的添加, 所以对载荷的处理可以变得更加灵活。但同时带来的问题是,在过滤器过多时, 我们很难把握整体的处理逻辑。而且在某一个过滤器对载荷处理后,因为载荷改变, 会造成下一个过滤器中的逻辑出错。 在我们的示例中:管道类是Pipeline,载荷是在实...

2018-02-09 10:52:20 3541

原创 手撸php框架7.1--构建服务定位器之实现

对于服务定位器的实现,我们直接上代码:1.注册服务,注册服务仅仅将定义数组存入defineMap中,不实例化对象。public function registerService($serviceName, $serviceDefinition){ if (!empty($serviceDefinition)) { if ($this->hasServiceIn

2018-02-06 09:40:45 369

编程珠玑1和2

c语言经典书籍,值得拥有

2017-03-09

空空如也

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

TA关注的人

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