2 坏小哥

尚未进行身份认证

我要认证

To be or not to be,that's a question...

等级
TA的排名 3w+

解析二十三种设计模式

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

2020-06-29 17:32:19

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

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

2020-03-25 19:05:02

谈谈字符串算法

一、一个字符串中最长不重复子串问题思路:记录当前字符之前的最长不重复子串长度,记为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

Linux最常用命令集锦

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

2019-10-20 17:55:19

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

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

2019-09-29 10:45:54

聊聊~PHP的GC

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

2019-09-28 11:22:06

深入理解PHP数组底层实现

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

2019-09-21 20:44:20

浅谈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 17:20:08

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

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

2019-08-26 16:18:14

聊聊~接口和抽象类

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

2019-08-25 10:15:42

Vue刷新页面的三种方式

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

2019-06-08 10:54:18

第三方登录实现原理

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

2019-06-07 22:27:32

浅谈八大排序

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

2019-06-02 18:20:49

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

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

2019-04-08 10:17:45

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

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

2019-04-05 16:18:45

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

深入理解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

约瑟夫环问题

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

2019-02-19 21:26:29

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

如何安装vue-cli

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

2019-02-18 12:27:17

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。