自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

坏小哥

~随便写写,记录点点滴滴~

  • 博客(51)
  • 收藏
  • 关注

原创 分布式事务系统

本文主要讲解分布式系统设计、实践应用场景

2023-05-18 20:05:51 128

原创 数据存储系统概要

本文主要介绍数据存储、数据模型、分布式数据系统

2023-05-03 12:27:18 1320

原创 MySQL内部实现和优化的原理

MySQL服务器架构MySQL逻辑架构图优化与执行MySQL解析查询,创建内部数据结构(解析树),对其重写查询,决定表的读取顺序,以及选择合适的索引等优化。(可以使用hint提示自己抉择优化)针对select语句,在解析前,服务器会先检查缓存(Query Cache),如果找到对应查询,服务器不会再执行查询解析、优化和执行的整个过程,而是直接返回缓存结果集。并发控制读写锁共享锁和排他锁,也叫读锁和写锁。读锁是共享的,多个客户在同一时刻读取同一个资源互不干扰,写锁则是排他的,会阻塞其他的写锁

2021-06-27 12:30:03 434

原创 深入理解BM算法

我之前和大家分享过KMP算法,下面和大家分享一个比BM更高效的算法——BM算法。一、简介:Boyer-Moore字符串搜索算法是一种非常高效的字符串搜索算法。它由Bob Boyer和J Strother Moore设计于1977年。此算法仅对搜索目标字符串(关键字)进行预处理,而非被搜索的字符串。二、基本原理1、坏字符:2、好后缀规则三、php实现代码展示<?php/** * Class BM Algorithm */class BM{ public function

2021-01-13 21:00:57 2647

原创 解析二十三种设计模式

23三种设计模式,大致分为三大类:创建型:单例、工厂、抽象工厂、建造者、原型模式结构型:适配器、装饰、桥接、组合、享元、代理、外观模式行为型:观察者、模板、命令、状态、职责链、解释器、中介者、访问者、策略、备忘录、迭代器...

2020-06-29 17:32:19 3108

原创 细说第三方登录—>PHP实现支付宝、QQ、微博、百度账号、Github登录

在讲解支付宝、QQ、微博、Github、百度账号第三方登录之前,我们有必要先了解一下第三登录所使用的协议。具体的详细内容请看我的这篇博客:https://blog.csdn.net/weixin_43885417/article/details/91163338开始入正题,既然知道了授权协议,下一步,肯定开始申请开发者身份,获取请求接口的权限。一、支付宝:...

2020-03-25 19:05:02 6010

原创 谈谈字符串算法

一、一个字符串中最长不重复子串问题思路:记录当前字符之前的最长不重复子串长度,记为L(i - 1),其中i为当前字符的位置。遍历字符串:(1)若当前字符第一次出现,则MaxL = L(i - 1) + 1(2)若不是第一次出现,计算当前字符与它上次出现位置之间的距离,记为d:1> 若d > L(i - 1),说明前一个非重复子字符串中没有包含当前字符,则MaxL = L(...

2020-01-03 17:34:32 2673

原创 Linux最常用命令集锦

一、文件,目录cd /home 进入'/home'目录cd .. 返回上一级cd ../.. 返回上两级cd 或者 cd ~ 进入主目录cd - 返回上次所在目录pwd 显示工作路径ls 查看目录中的文件ls -F 查看目录中的文件ls -l 显示文件的和目录的详细资料ls -a 显示隐藏文件ls *[0-9]* 显示包含数字的文件名和目录名tree 显示文件和目录...

2019-10-20 21:54:55 2716

原创 话说数据库主从复制,读写分离,数据一致性

一致性:1.强一致性这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统的性能影响大2.弱一致性这种一致性级别约束了系统在写入成功后,不承诺立即可以读到写入的值,也不久承诺多久之后数据能够达到一致,但会尽可能地保证到某个时间级别(比如秒级别)后,数据能够达到一致状态3、最终一致性最终一致性是弱一致性的一个特例,系统会保证在一定时间内...

2019-09-29 15:34:44 6839

原创 聊聊~PHP的GC

PHP垃圾回收机制(Garbage Conllector 简称 GC)在PHP中,没有任何变量指向这个对象时,这个对象就是垃圾。PHP会将其在内存中销毁;这是PHP的GC垃圾处理机制,防止内存溢出。当一个PHP线程结束时,当前占用的所有内存空间都会被销毁,当前程序中所有对象同时被销毁。php7的垃圾回收包含两个部分,一个是垃圾收集器,一个是垃圾回收算法。垃圾收集器,把刚刚提到的,可能是垃圾的元...

2019-09-28 14:11:25 4291

原创 深入理解PHP数组底层实现

PHP数组是一个神奇而强大的数据结构,数组既可以是连续的数组,也可以是存储K-V映射的map。而在PHP7中,相比于PHP5,对数组进行了很大的修改。数组的语义数组的概念PHP5数组的实现PHP7数组的实现- 基本结构- 初始化- packed array 和 hash array的区别- 插入、更新、查找、删除- 哈希冲突的解决- 扩容和rehash操作- 数组的递归保护...

2019-09-21 22:11:13 5223

原创 浅谈PHP7中的ZVAL

我们都知道,PHP中的变量都存储在一个叫zval的结构体中。在聊php7中的zval之前,我们先回顾一下php5中zval。struct _zval_struct{ /*变量信息*/  zvalue_value value;     //value zend_uint refcount__gc;   //计数 zend_uchar type;      ...

2019-09-18 20:55:46 2992

原创 PHP实现快排算法——>递归VS非递归

算法思路分析:快速排序的思想就是,选一个数作为基数(这里我选的是第一个数),大于这个基数的放到右边,小于这个基数的放到左边,等于这个基数的数可以放到左边或右边,看自己习惯,这里我是放到了左边,一趟结束后,将基数放到中间分隔的位置,第二趟将数组从基数的位置分成两半,分割后的两个的数组继续重复以上步骤,选基数,将小数放在基数左边,将大数放到基数的右边,在分割数组,直到数组不能再分为止,排序结束。...

2019-08-26 16:18:14 3465

原创 聊聊~接口和抽象类

先介绍一下抽象类和接口的概念一、抽象类:  抽象类是特殊的类,只是不能实例化,除此之外,具有类的其他特性。并且抽象类可以包含抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖他们。另外,抽象类可以派生自一个抽象类,可以覆盖,也可以不覆盖基类的抽象方法,但是它的派生类必须覆盖他们。  二、接口:它和抽象类有共同点,不能实例化、包含未实现的方法声明、派...

2019-08-25 10:15:42 2665

原创 Vue刷新页面的三种方式

我们在写项目的时候,经常会遇到,用户执行完某个动作,改变了某些状态,需要重新刷新页面,以此来重新渲染页面。如:用户登录成功、增加、删除、更新等。原始方法:location.reload();vue自带的路由跳转:this.$router.go(0);用过的人都知道,前两者都是强制刷新页面,会出现短暂的闪烁,用户体验效果不好。所以,我们选择第三种方式:3. 首先在App里面...

2019-06-08 10:54:18 219270 105

原创 第三方登录实现原理

简单说,OAuth 就是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。首先,我们先看一下底层协议:OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用...

2019-06-07 22:27:32 25625

原创 浅谈八大排序

首先,我们先说说排序的分类和特性:一、排序的分类内部排序和外部排序(1) 内部:待排序记录存放在计算机随机存储器(内存)中进行的排序过程。(2) 外部:待排序记录的数量很大,以致于内存不能一次容纳全部记录,所以在排序过程中需要对外存进行访问的排序过程。比较和非比较排序(1)比较类:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排...

2019-06-02 18:20:49 3296

原创 Java实现深度优先和广度优先遍历

其实这两个算法思想很好理解。深度优先遍历:在一个图中选择一个起始点v0,然后遍历其子节点。再以子节点为起始点,遍历子节点的子节点。就这样一直递归下去,重复2。然后一直遍历到没有子节点,开始回溯。广度优先遍历:从图中某个顶点v0出发,并访问此顶点。从v0出发,访问V0的各个未曾访问的邻接点W1,W2,…,Wk;然后,依次从W1,W2,…,Wk出发访问各自未被访问的邻接点。重复...

2019-04-08 10:17:45 4835

原创 Java实现迪杰斯特拉和弗洛伊德——最短路径

迪杰斯特拉算法介绍:杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。算法思想:对于一个图G,计算最短路径时候,需要指定起点v0(从起始点开始计算)把点划分为两组:1)第一组S:为已经求出的最短路径的终点集合...

2019-04-05 16:18:45 4242

原创 Java实现普里姆和克鲁斯卡尔——最小生成树

import java.io.IOException;import java.util.Scanner;public class Graph { private char[] vertex; //顶点集合 private int[][] matrix; //邻接矩阵 private static final int INF = Integer.MAX_VALUE; //最大值...

2019-04-02 22:11:56 3994

原创 深入理解KMP算法

背景:KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。俗称:看猫片算法。 核心思路:1. 主串不需要回滚,即 i 一直往后走。2. 子串通过子串本身的一种性质,调整 j 的位置,再继续与 i 比较。3. 时间复杂度由暴力破解的O(m * n)提高到O(m + n...

2019-03-26 22:33:40 4075

原创 约瑟夫环问题

约瑟夫环:它是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。算法原理:约瑟夫环运作如下:1、一群人围在一起坐成 [2] 环状(如:N)2、从某个编号开始报数(如:K)3、数到某个数(如:M)的时候,此人出列,下一...

2019-02-19 21:26:29 4187

原创 Win10 安装node.js

安装node.js步骤:(1)下载对应你系统的Node.js版本:https://nodejs.org/en/download/(2)选安装目录进行安装(3)环境配置(4)测试Node.js简介简单的说 Node.js 就是运行在服务端的 JavaScript。Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、...

2019-02-18 13:58:34 5584

原创 如何安装vue-cli

首先我们需要安装nodeJs,node中有自带的npm,可以直接全局安装vue-cli。运行下面命令:npm install --global vue-cli如果太慢的话,建议切换成淘宝镜像:npm get registry //得到原本的镜像地址npm config set...

2019-02-18 12:27:17 4631

原创 java实现两个大数的四则运算

在很多的算法题中,我们经常会遇到两个大数相加,相减,相乘,相除。那么,今天分享一下java如何实现大数的四则运算。两个大数相加:核心算法:两个大数存入字符数组,再定义一个结果数组,长度为前面最大的数组长度 加 1,再定义一个进位变量,从右到左开始计算(个位开始)。利用循环,遍历两个数组,实现两个数字相加。中间需要判断一下,两个数相加是否大于9,如果大于,要进1。最后循环输出结果数组。...

2019-02-02 15:33:36 6008 1

原创 浅谈进程和线程的区别和联系

简单的说,进程包含线程。线程是进程的一个实体。首先,我们先看一下进程定义:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。线程定义:线程,有时被称...

2019-01-21 15:29:44 4117

原创 C++ 输入多个学生和老师信息,并显示出来

我们,有的时候希望,用户动态的输入学生信息,然后再显示出来。下面,我们开始代码实现:#include&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;iostream&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp

2019-01-04 16:11:28 7221 2

原创 package.json和package-lock.json到底是什么?

npm官方文档:http://caibaojian.com/npm/files/package.json.html我们每次,去npm install 会把内容记录到package.json文件中,下载的包都会发生变化,为了系统的稳定性考虑,每次执行完npm install之后会对应生成package-lock文件,该文件记录了上一次安装的具体的版本号。根据官方文档,package-lock....

2018-12-17 10:42:46 20087 20

原创 composer.json和composer.lock到底是什么?

我们在做项目的时候,总是要安装一些依赖。composer给我们提供了很多方便。直接运行composer install。当我们运行composer install 将会读取composer.lock文件,进行更新依赖。如果composer.lock不存在或者里面没内容,会执行composer.json,会将最新版本的文件下载到vendor目录里,然后再去更新composer.lock文件。我们...

2018-12-17 08:35:04 18713

原创 腾讯云 配置短信验证

今天和大家分享一下如何配置腾讯云短信验证。首先进入官网:https://cloud.tencent.com/?fromSource=gwzcw.234976.234976.234976然后,点击产品,搜索短信,你会进入下面的页面:https://cloud.tencent.com/product/sms点击免费开通,添加应用。接着,点击你的应用——&amp;amp;amp;amp;gt;国内短息——&amp;amp;amp;amp;gt;短息配置—...

2018-12-16 11:57:05 4881

原创 PHP fpdi合并多个PDF文件,取多个PDF特定页数合并以及导出

在我们写项目的时候,经常需要对PDF文件进行操作。例如:合并多个PDF文件,取PDF特定页数以及合并。PHP 有一个专门对PDF进行操作的插件,SETASIGN,官方文档为:https://www.setasign.com/products/fpdi/demos/simple-demo/首先,我们要先下载,该插件支持composer下载,具体的操作步骤,请看文档下载:https://pac...

2018-12-16 10:12:17 15725 14

原创 laravel 导出Excel,多维表头

我们在项目时,经常需要去查数据库中的信息,导出excel。laravel提供了一个插件。它有个github地址:https://github.com/Maatwebsite/Laravel-Excel首先,我们先用composer下载:composer require &amp;amp;amp;quot;maatwebsite/excel:~2.1.0&amp;amp;amp;quot;然后,需要注册 一个服务提供者,在config/app.php...

2018-12-16 09:28:33 5853 1

原创 laravel 操作数据库常用函数的返回值

insert/insertGetIdinsert函数的返回值为boolean类型:成功为true,失败为falseinsertGetId函数的返回值为整型:成功为插入时的ID值,失败为…DB::table('users')-&amp;amp;amp;amp;gt;insert( ['name' =&amp;amp;amp;amp;gt; '上官帝文1', 'age' =&amp;amp;amp;amp;gt; 99]);update/delete该函数返回

2018-12-15 21:57:29 8356

原创 laravel 链式组合查询数据

我们写项目的时候经常用到组合查询,例如对于一篇博客,你想根据一个著作的著作类别,编著形式,研究类别进行查询。这个时候,我们就可以链式组合查询。前台给我们后台什么类型,我们就根据这个类型去执行sql语句。这样十分的灵活。应用场景:下面是我封装的链式组合查询代码://根据字段组合查询数据 public static function combinationSelectDatas($co...

2018-12-15 21:17:41 8471 5

原创 laravel 获取后台资源和下载后台资源文件

我们写项目的时候,我们都知道前台想要访问后台资源,一般直接是把public文件夹下的文件路径返回给前台。但是,需要把一些重要的,对外不可见的私密文件,需要放到laravel的storage文件夹里。但是这个时候就需要,后台给前台获取后台资源的接口。让前台可以访问。下面直接上代码:&amp;amp;amp;amp;amp;amp;amp;lt;?phpnamespace App\Http\Controllers\ScientificControl...

2018-12-15 20:49:23 9490

原创 laravel 查看原生sql语句的命令

DB::connection()-&gt;enableQueryLog();dd(DB::getQueryLog())

2018-12-15 18:21:20 3952

原创 laravel config文件配置全局变量

在laravel中 我们可以使用config()函数来获取bootstrap/cache/config.php中的内容。使用如下命令,可以config/*下的所有配置文件中的内容保存到bootstrap/cache/config.php中。:php artisan config:cache然后你可以在config/下新建任何的配置的文件,执行上面命令,然后使用config()函数读取。...

2018-12-15 18:16:31 7192

原创 laravel5.5 配置全局函数

在我们用laravel 框架开发项目时,很多函数需要反复的使用如:经常写的后台返回给前台的状态函数(responseToJson),还有自己的一些验证等。因此注册全局函数非常有必要。根据个人习惯,我喜欢把全局函数放在app下。一般项目都有验证。所以,我把状态函数和验证分开了(看个人习惯)。这里,我在app下创建了一个文件夹:Helper然后,我们需要在composer.json文件中添加两个文...

2018-12-15 18:04:23 3483

原创 laravel 异常处理返回给用户404页面

laravel 异常处理,是在Exceptions/Handler.php:上面右侧红色方框部分,当后台程序出现异常,返回给用户一个404页面。我定义的视图名为error

2018-12-15 17:53:03 7572

原创 laravel 创建自定义中间件

首先我们要定义一个新的中间件,Artisan命令:php artisan make:middleware LoginMiddleware.php这个命令会在 app/Http/Middleware 目录下创建一个新的中间件类 LoginMiddleware.php我这里是判断session里是否有值,如果没有值,则重定向到登陆界面,让用户重新登录,无法访问。右侧方框里可以写自己的逻辑...

2018-12-15 17:43:24 5031

空空如也

空空如也

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

TA关注的人

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