自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(100)
  • 资源 (1)
  • 收藏
  • 关注

原创 程序设计模式之适配器模式(php)

现在我们用php写了一个活动天气的接口,这个接口里面返回的数据使用serialize进行了序列化处理,本来其他客户端获取数据后再使用反序列化处理就完全没有问题,但是过一段时间后我们增加了一个使用go语言开发的客户端也要使用这个天气接口,但是go语言没法跟php一样使用反序列化解析数据就导致数据不兼容的问题出现,这时候就可以使用适配器模式来解决我们的问题。

2022-10-19 21:59:56 223 1

原创 程序设计模式之抽象工厂模式(php)

该模式属于创建型模式之一,是一种常见的软件设计模式。当需要这个产品族的某一系列的时候,可以为此系列的产品族创建一个具体的工厂类。简单理解就是定义一类产品的所有功能接口,在定义要实现每一个功能的接口,最后按照需求组合其中的功能就是抽象方法。如果我们想要生产汽车,就可以用抽象工厂来实现我们的业务逻辑,首先我们定义一个汽车的抽象工厂,这个工厂需要实现的功能有汽车空调和轮胎;然后我们再定义空调的抽象产品和轮胎的抽象产品,再实例化不同的具体产品,最后实现抽象工厂的方法就得到了各种汽车,抽象工厂主要涉及四个角色。

2022-10-18 22:41:28 301

原创 程序设计模式之工厂方法模式(php)

工厂方法模式,属于创建型模式之一,是粒度很小的设计模式,因为模式的表现只是一个抽象的方法。提前定义用于创建对象的接口,让子类(具体工厂)决定实例化具体的某一个类,即在工厂和产品中间增加接口(抽象工厂),工厂不再负责产品的创建,由接口针对不同条件返回具体的类实例,由具体类实例(具体工厂)去实现。工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。

2022-10-15 17:52:24 225

原创 程序设计模式之简单工厂模式(php)

简单工厂模式,属于工厂模式的的一种,工厂模式还包括工会仓方法和抽象工厂,简单工厂模式属于创建型模式之一,客户端通过工厂类来创建一个产品类的实例,而无须直接使用new关键字来创建对象,让工厂类来创建。而客户端只需创建工厂并且传入不同的参数区分即可。

2022-10-15 15:49:11 144

原创 程序设计模式之单例模式(php)

最简单的、使用频率也是相当高的设计模式之一,把对象生成从new改为通过静态方法生成,通过静态方法的控制,总是返回同一个对象给调用者,以确保对象只实例化一次,通常连接数据库、连接redis等会用到单例模式

2022-10-15 15:01:00 153

原创 mysql之事务二阶段提交

说到mysql事务的二阶段提交,那么不得不说说redolog日志和binlog日志,二阶段提交也是围绕这两哥们展开的,所以我们先来理解一下这两个日志。

2022-08-30 18:16:56 1167

原创 mysql优化之索引及索引失效

索引本质上是一种排好序的数据结构,利用索引可以提高mysql的检索效率,降低排序成本;但是会增加磁盘空间,降低新增、修改效率。

2022-07-22 16:20:11 326 1

原创 mysql优化之show profile的使用及分析

showprofile是mysql提供的分析sql的工具之一,它的作用是记录最近执行的15条sql语句,并记录sql执行时详细的耗时、CPU、内存消耗,可以帮助我们快速定位到sql语句的问题并优化,showprofile默认是关闭的,并且开启后只存活于当前会话,也就说每次使用前都需要开启。...

2022-07-20 16:04:53 1540

原创 mysql的七种join连接查询

mysql join查询是开发中必不可少的知识,以下整理了常见的七种join查询语句,方便学习一、内连接二、左连接三、右连接四、左独占五、右独占六、全连接七、全独占

2022-07-01 23:38:29 465

原创 rabbitmq 常见面试题及答案

rabbitmq 如何解决消息堆积问题堆积场景:1、客户端拒绝接收消息,导致消息重新入队拒绝接收时消息可以加入死信队列或者丢弃2、客户端消费比较慢增加客户端消费3、队列容量不够扩容rabbitmq消息模型1、简单模式2、工作模式3、路由模式(direct)4、广播模式(fanout)5、主题模式(topic)rabbitmq如何确保消息发送和接收成功1、发送:confirmCallback,消息发送失败时回调2、接收:使用ack手动确认机制rabbitmq如何防止消息丢失1、生

2022-06-13 23:34:04 264

原创 go rabbitmq使用实例,延时队列使用实例

go 使用rabbitmq,rabbitmq延时队列的代码示例

2022-06-10 23:40:10 403

原创 php predis使用pipeline批量操作redis

程序开发的过程中,必不可少的需要使用reids来操作数据,使用redis的过程中除了使用mget,mset的方式来批量操作数据之外,我们还可以使用pipeline的方式进行批量操作(注意:使用redis cluster模式不支持pipeline方法),pipeline方法是一次性将多条操作命令发送给redis服务器,服务器执行完后再全部返回,等于多条命令只需要发送一次,节省了命令的发送时间,具体效率可以参考其他文章,一下是操作的简单demo,仅供参考 //获取redis实例 $redis = $

2022-03-14 14:44:05 1068

原创 php 图片添加满屏图片水印的实现方法

在项目的开发中,通常需要我们给图片加上水印来防止盗图,以下是php程序给图片添加水印的方法,记录一下,方便下次使用最终效果原图水印图程序实现缩放png图片,防止传入的水印图片大小不合适,可以用此方法调整水印大小/** * 放大缩小png图片 * @param $origin * @param $target * @param $per */function zoomPng($origin, $target, $per){ $srcImg = imagecre.

2021-12-10 14:04:49 1393

原创 js图片添加文字水印并设置水印居中的方法

公司有一个需求,需要在一个图片模板上添加文字水印供客户端保存下载,这个简单的功能用后端语言来实现觉得没有必要,所以参考网上的文章,使用js结合canvas就给实现出来了,效果还可以,兼容性还未测试 ,下面是效果图跟具体代码参考地址:https://blog.csdn.net/weixin_39958248/article/details/117890432?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-tas.

2021-10-30 14:28:03 984

原创 gin 自定义参数验证方法及使用ShouldBindJSON方法进行参数验证时自定义输出的错误信息

使用gin框架开发时,需要对客户端传入的参数进行验证,但是框架自带的错误输出并不是很友好,所以需要我们自己封装,将错误信息转为对前端友好的信息输出一、定义验证文件我是新建一个跟main.go文件同级的common文件夹,在文件夹中创建validator.go文件#需要导入插件go get github.com/go-playground/universal-translatorgo get github.com/go-playground/localespackage common.

2021-09-05 18:05:51 2918 2

转载 helm添加国内源

helm使用国外的charts源报错[root@k8smaster ~]# helm install ui stable/weave-scopeError: unable to build kubernetes objects from release manifest: [unable to recognize "": no matches for kind "DaemonSet" in version "extensions/v1beta1", unable to recognize "": no

2021-08-30 22:17:40 3557

原创 gin 框架设置允许跨域访问

新建一个中间件package commonimport ( "github.com/gin-gonic/gin" "net/http")func Cors() gin.HandlerFunc { return func(c *gin.Context) { method := c.Request.Method c.Header("Access-Control-Allow-Origin", "*") c.Header("Access-Control-Allow-Headers",

2021-07-22 16:23:19 2203

原创 使用docker-compose 快速搭建redis cluster服务

观看本文档前,请先了解docker、docker-compose、reids cluser相关知识,为了方便操作,本文档将在一台虚拟机上面通过docker-compose部署6台redis服务器,通过这6台服务器搭建redis cluster服务1、创建redis服务的配置文件及数据卷# 创建目录mkdir -p /usr/local/docker-redis/redis-cluster# 切换至指定目录cd /usr/local/docker-redis/redis-cluster/# 编.

2021-06-27 17:13:55 324 2

原创 DockerCompose容器编排及其文档参考

什么是docker-compose官方开源项目,是对docker容器的快速编排docker-compose定位定义和运行多个容器的应用核心概念服务(service):一个应用的容器,实际上可以包含若干运行相同镜像的容器实例项目(project):由一组关联的应用容器组成的一个完整的业务单元,在docker-compose.yaml文件中定义安装(Linux)# 下载可执行文件curl -L https://github.com/docker/compose/releases/down

2021-05-24 16:49:22 228

原创 docker快速安装及常用常用命令参考

1、 安装# 在linux中执行下面的命令就能安装# 参考手册:https://www.runoob.com/docker/centos-docker-install.htmlcurl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun2、配置开机启动systemctl enable docker3、建立docker组,并使用root用户sudo groupadd dockersudo usermod -aG doc

2021-05-20 23:50:46 103

原创 js 使用masonry插件快速实现瀑布流布局效果自适应容器大小样式

先看效果图参考demo<!DOCTYPE html><html><head> <title>瀑布流开发</title> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/masonry/4.2

2021-05-19 18:46:41 620

原创 go使用nacos作为配置中心

前言什么是nacos,nacos优点,具体参考官网http://nacos.ioNacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务发现、服务配置管理、服务及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构(例如微服务范式、云原生范式)的服务基础设施。1、windows安装nacos环境1、需要提前安装jdk环境,并且jdk版本在1.8以上,jdk环境搭建自行解决

2021-05-09 18:11:43 2716 2

原创 go grpc环境搭建遇到的问题及实现第一个案例

下载protobuf编译程序,解压下载的文件,将里面的protoc.exe文件放置在$GOPATH/bin目录下https://github.com/protocolbuffers/protobuf/releases/tag/v3.9.0 安装protobuf的go语言插件go get -v -u github.com/golang/protobuf/protogo get -v -u github.com/golang/protobuf/protoc-gen-go...

2021-04-29 00:27:30 1885 3

原创 go 微服务第一课 简单使用rpc实现微服务

server 端package mainimport ( "fmt" "log" "net" "net/rpc")type HelloRpc struct {}func (h *HelloRpc) Hello(name string,resp *string) error { *resp = name + " 你好" return nil}func NewHelloRpc()*HelloRpc { return &HelloRpc{}}func ma.

2021-04-26 23:58:38 99

原创 proto文件定义及参数说明

一、proto文件名命名规范包名.服务名.proto二、proto语法关键字syntax #协议类型,目前有两套协议 proto3、proto2,推荐使用proto3,必须放在proto文件的第一行package #包名,必须第二行service #定义这个proto文件的方法集合,类似于方法接口message #类似于go语言的结构体,在此定义方法的接收、返回参数returns #返回响应,结合service使用rpc #定义方法的关键字,结合service使用变量类型字段序

2021-04-23 00:29:56 12040 1

原创 mongodb极速安装及基础操作命令

mongodb一、安装 # linux 安装 下载mongodb,并解压 # 进入mongodb目录,在目录下创建数据存储目录 mkdir -p data/db 启动mongodb 的启动方法分为两种方式前置启动后置启动无论哪种启动方式都需要执行mongodb/bin目录中的mongod命令前置启动# 进入mongodb/bin# --dbpath 就是上一步自己创建的data/db那个目录./mongod --dbpath /www/s

2021-04-21 21:41:04 179

原创 go-micro学习资料

安装工具 protobuf 相关工具1、安装框架go get github.com/micro/go-micro/v21、 下载工具go get -u github.com/golang/protobuf/protoc-gen-gogo-micro自己的生成工具go get github.com/micro/protoc-gen-micro/v2//此处为这个错误的解决方法/**protoc-gen-go: unable to determine Go import path fo

2021-04-07 18:48:11 243

原创 go语言实现 一致性hash算法

package toolimport ( "errors" "hash/crc32" "sort" "strconv" "sync")//申明切片类型type units []uint32//返回切片长度func (x units) Len() int { return len(x)}//比较两个值的大小func (x units) Less(i, j int) bool { return x[i] < x[j]}//切片中值交换func (x unit

2021-03-31 08:57:18 712

原创 超简单的mysql主从复制学习文档

目录一、主从复制优势二、原理三、操作一、主从复制优势1. 可以进行读写分离操作,提高程序性能(主库写,从库读)。2. 在主服务器进行备份,避免备份期间影响主服务器服务。3. 当主服务器出现问题时,可以迅速切换至从服务器。二、原理1. 主服务器(mster) 将数据改变记录到二进制日志 (binary log) 文件中2. 从服务器(slave) 将主服务器的binary log文件拷贝到自己的中继日志 (relay log) 中3. 从服务器(slave) 重做中继日志中的事件 将改变应用到

2021-02-24 20:11:09 136

原创 laravel中间件的使用

1、创建中间件文件php artisan make:middleware CheckAge2、将中间件文件加入到内核文件kernel.php中# 内核文件t\app\Http\Kernel.php# protected $routeMiddleware数组中添加'checkAge' => \App\Http\Middleware\CheckAge::class3、在路由文件中使用中间件Route::middleware('checkAge')->get('fun1/.

2021-01-15 21:18:14 161

原创 supervisor 的基础操作 监听php进程

supervisor是一个unix的系统进程管理工具,可以用来做程序的守护进程,具体参考官网1、 安装yum install supervisorsupervisor安装完成后会生成三个执行程序:supervisortdsupervisorctlecho_supervisord_conf2、生成配置文件sudo echo_supervisord_conf > /etc/supervisord.conf...

2021-01-14 21:54:15 407

原创 php单点登录实现方案

由于公司的业务较多,所以希望用户在一个域名登陆后,访问公司的其他域名时也保持登陆状态,在网上查找了相关的文档后,使用了如下方案设计:设计思路:登陆成功时生成一个登陆token,通过这个token可以验证用户状态信息,将token返回,js接收到token后通过iframe转发到其他需要登陆的域名中,其他域名监听message,存在信息并且验证通过后保存之本地当中,访问其他域名时判断存在token,则用token前往获取数据,获取成功则保存为登陆状态,反之则跳转登陆<?php if($_POS

2021-01-07 22:50:21 278 2

原创 H5 可拖动、可点击进度条滑块

先看图代码,根据自己的需求打包<!DOCTYPE html><html lang="zh-cn"><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scala.

2020-11-25 10:15:10 1275

原创 微信根据Media_id下载录音报错readfile(): Peer certificate CN=`mp.weixin.qq.com‘ did not match expected CN=`file

今天遇到一个问题,微信jssdk开发获取用户录音,后台根据media_id下载用户录音突然出错,之前一直好好的,错误如下<br /><b>Warning</b>: readfile(): Peer certificate CN=`mp.weixin.qq.com' did not match expected CN=`file.api.weixin.qq.com' in 。。。<br /><br /><b>Warning&.

2020-11-20 18:08:56 692

原创 基于gin框架开发博客项目免费模板API

ginBlog基于gin开发的博客API接口,使用jwt进行验证和登陆使用方法git clone https://github.com/ganganlee/ginBlog.gitgo mod tidy修改/config/config.json里面的配置文件直接运行或者编译(编译参考:https://blog.csdn.net/weixin_44540711/article/details/109682597)项目地址https://github.com/ganganlee/ginBl

2020-11-16 20:46:29 391

原创 golang gin项目编译成二进制,部署在linux服务器流程

部署注意:1、如果你制定的其他端口,需要到你的服务器商家账户上开放对应的端口才能访问2、我的gin项目监听端口是调取配置文件的方式获取监听的端口,这样做在windows平台上运行没有任何问题,但是部署在linux服务器上可以正常运行,但是在外网无法访问,需要改成固定的监听端口才能正常访问(如:r.Run(":9920")),困扰了一天才解决,血一样的教训1、编译我用的是windows系统需要设置打包环境# 1 目标平台的体系架构(386、amd64、arm) set GOARCH=amd.

2020-11-13 21:26:10 3224

原创 vue 后端管理框架模板

自己的项目需要一个后端管理框架,于是在网上找了一堆,但是发现其他的功能都很丰富,但是自己用不上,我就需要一个简单的框架,页面内容自己搭建,所以自己借鉴其他优秀的模板样式,花了一天手撸了一个简单的架构出来,方便自己以后使用vue管理后台前端框架纯vue编写,页面简单,功能实用,入手无门槛实现功能路由中间件面包屑导航栏全局路由与子路由互相跳转效果展示demo地址http://admin.zozoo.net/home中间件设置/src/router/index.js//路由中间

2020-11-11 11:56:29 1433

原创 golang 二叉树的遍历

二叉树的便利package mainimport "fmt"//二叉树的遍历//二叉树的遍历分为三种情况,前序遍历、中序遍历、后去遍历//定义二叉树type Node struct { Id int Name string Left *Node Right *Node}//前序遍历func (this *Node)PreOrder(node *Node) { if node != nil{ fmt.Println(node.Name) this.PreOrd.

2020-11-11 08:34:42 282

原创 golang实现hash表(散列)

使用hash原理,模拟数据库保存数据,直接操作内存编辑数据,package mainimport ( "errors" "fmt" "os")//hash链表的基本使用//思路//1、创建一个hash结构体,里面保存自己自定义数量的链表数组//2、创建一个链表,用来保存用户数据//3、每次插入前先计算插入的哪一个数组,根据id从小到大依次插入,这样做是为了查询快//定义方法type HashFunc interface { Push(link *Link) error.

2020-11-11 08:13:37 1455

原创 golang 实现闯迷宫小游戏

基于go语言写的闯迷宫小游戏,用递归的方式实现,没有使用GUI库,所以只能在命令行面板查看效果,实现思路:用二维数组模拟地图,用数组的值表示地图的相关信息,具体值参考代码注释,效果如下游戏开始前的地图游戏结束的地图(点为2表示这条路可以通过)package mainimport "fmt"//迷宫小游戏func main() { //定义迷宫地图 gameMap := [10][10]int{} for i := 0; i < 10; i++ { .

2020-11-07 08:54:15 546

vue-blog.7z

自己想要写一个个人博客系统,但是在网上找不到合适的前端模板,于是自己就使用vue手动撸了一个,现在将它免费开放出来供大家使用

2020-07-09

空空如也

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

TA关注的人

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