- 博客(53)
- 收藏
- 关注
原创 卷毛-网络编程基础(三)Tcp通信
Tcp通信下图是一次TCP通讯的时序图。TCP连接建立断开。包含大家熟知的三次握手和四次握手。三次握手:谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。好比两个人在打电话:Client:“喂,你听得到吗?”Server:“我听得到,你听得到我吗?”Client:“我能听到你,今天balabala…”建立连接(三次握手)的过程:客户端发送一个带SYN标志的TCP报文到服务器。这是上图中三次
2020-08-26 11:55:36 457
原创 卷毛-网络编程基础(二)什么是socket
Socket编程什么是SocketSocket,英文含义是【插座、插孔】,一般称之为套接字,用于描述IP地址和端口。可以实现不同程序间的数据通信。Socket起源于Unix,而Unix基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket就是该模式的一个实现,网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用:Socket(),该函数返回
2020-08-25 17:47:55 377
原创 卷毛-网络编程基础(一)网络协议
卷毛-go-网络编程基础(一)网络概述网络协议从应用的角度出发,协议可以理解为“规则”,即数据的发送端与接收端共同遵守的规则。举一个简单的自定义协议,我们给他命名为“卷毛文件传输协议”规定:传输文件原始名,接收方回答1表示收到文件名传输文件大小,接收方回答2表示收到文件大小传输文件内容,接收方接受数据完成回答3,表示文件内容接收完成由此,当有人想跟我传输文本,就要遵守我的协议,通过三次数据交互来完成文件的传输。而这个自定义规定,也可以说是属于卷毛与别人的协议。当这个协议越来越多人使用,
2020-08-25 17:31:15 278
原创 卷毛0基础学习Golang-并发编程-05锁与条件变量
卷毛0基础学习Golang-并发编程-05锁与条件变量条件变量条件变量的作用并不保证在同一时刻仅有一个协程(线程)访问某个共享的数据资源,而是在对应的共享数据的状态发生变化时,通知阻塞在某个条件上的协程(线程)。条件变量不是锁,在并发中不能达到同步的目的,因此条件变量总是与锁一块使用。如果仓库队列满了,我们可以使用条件变量让生产者对应的goroutine暂停(阻塞),但是当消费者消费了某个产品后,仓库就不再满了,应该唤醒(发送通知给)阻塞的生产者goroutine继续生产产品。GO标准库中的sys.
2020-08-18 16:32:23 258
原创 卷毛0基础学习Golang-并发编程-04生产者与消费者模型
卷毛0基础学习Golang-并发编程-04生产者与消费者模型生产者消费者模型单向channel最典型的应用是“生产者消费者模型”所谓“生产者消费者模型”: 某个模块(函数等)负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类、函数、协程、线程、进程等)。产生数据的模块,就形象地称为生产者;而处理数据的模块,就称为消费者。单单抽象出生产者和消费者,还够不上是生产者/消费者模型。该模式还需要有一个缓冲区处于生产者和消费者之间,作为一个中介。生产者把数据放入缓冲区,而消费者从缓冲区
2020-08-11 10:28:43 173
原创 卷毛0基础学习Golang-并发编程-03 channel管道
channelchannel是Go语言中的一个核心类型,可以把它看成管道。并发核心单元通过它就可以发送或者接收数据进行通讯,这在一定程度上又进一步降低了编程的难度。channel是一个数据类型,主要用来解决协程的同步问题以及协程之间数据共享(数据传递)的问题。goroutine运行在相同的地址空间,因此访问共享内存必须做好同步。goroutine 奉行通过通信来共享内存,而不是共享内存来通信。引⽤类型 channel可用于多个 goroutine 通讯。其内部实现了同步,确保并发安全。定义cha
2020-08-11 10:14:55 198
原创 卷毛0基础学习Golang-并发编程-02 Goroutine
Goroutinegoroutine是Go并行设计的核心。goroutine说到底其实就是协程,它比线程更小,十几个goroutine可能体现在底层就是五六个线程,Go语言内部帮你实现了这些goroutine之间的内存共享。执行goroutine只需极少的栈内存(大概是4~5KB),当然会根据相应的数据伸缩。也正因为如此,可同时运行成千上万个并发任务。goroutine比thread更易用、更高效、更轻便。一般情况下,一个普通计算机跑几十个线程就有点负载过大了,但是同样的机器却可以轻松地让成百上千个go
2020-08-10 17:22:42 166
原创 卷毛0基础学习Golang-并发编程,01 什么是并发
卷毛0基础学习Golang-并发编程,什么是并发Go并发编程概述简而言之,所谓并发编程是指在一台处理器上“同时”处理多个任务。随着硬件的发展,并发程序变得越来越重要。Web服务器会一次处理成千上万的请求。平板电脑和手机app在渲染用户画面同时还会后台执行各种计算任务和网络请求。即使是传统的批处理问题–读取数据,计算,写输出–现在也会用并发来隐藏掉I/O的操作延迟以充分利用现代计算机设备的多个核心。计算机的性能每年都在以非线性的速度增长。宏观的并发是指在一段时间内,有多个程序在同时运行。并发在微观
2020-08-10 16:47:21 185
原创 卷毛0基础学习Golang-基础-struct结构体
卷毛0基础学习Golang-基础-struct结构体持续更新中-----结构体类型有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别/年龄/地址等属性。显然单独定义以上变量比较繁琐,数据不便于管理。结构体是一种聚合的数据类型,它是由一系列具有相同类型或不同类型的数据构成的数据集合。每个数据称为结构体的成员。结构体初始化type Student struct { id int name string sex byte age int addr st
2020-08-07 14:19:25 234
原创 卷毛0基础学习Golang-基础-map字典
卷毛0基础学习Golang-基础-map字典持续更新中-----欢迎收藏Go语言中的map(映射、字典)是一种内置的数据结构,它是一个无序的key-value对的集合,比如以身份证号作为唯一键来标识一个人的信息。Go语言中并没有提供一个set类型,但是map中的key也是不相同的,可以用map实现类似set的功能。map格式为: map[keyType]valueType在一个map里所有的键都是唯一的,而且必须是支持==和!=操作符的类型,切片、函数以及包含切片的结构类型这些类型由于具有
2020-08-07 14:07:40 203
原创 卷毛0基础学习Golang-基础-slice切片
卷毛0基础学习Golang-基础-slice切片切片简述数组的长度在定义之后无法再次修改;数组是值类型,每次传递都将产生一份副本。显然这种数据结构无法完全满足开发者的真实需求。Go语言提供了数组切片(slice)来弥补数组的不足。Slice(切片)代表变长的序列,序列中每个元素都有相同的类型。一个slice类型一般写作[]T,其中T代表slice中元素的类型;slice的语法和数组很像,只是没有固定长度而已。数组和slice之间有着紧密的联系。一个slice是一个轻量级的数据结构,提供了访问数组子序
2020-08-07 11:46:35 215
原创 卷毛0基础学习Golang-基础-指针
卷毛0基础学习Golang-基础-指针指针是一个代表着某个内存地址的值。这个内存地址往往是在内存中存储的另一个变量的值的起始位置。Go语言保留了指针,但与C语言指针有所不同。主要体现在:默认值 nil操作符 “&” 取变量地址, “*” 通过指针访问目标对象不支持指针运算,不支持 “->” 运算符,直接⽤ “.” 访问目标成员new 函数表达式new(T)将创建一个T类型的匿名变量,所做的是为T类型的新值分配并清零一块内存空间,然后将这块内存空间的地址作为结果返回,而这个结果
2020-08-07 11:06:02 192
原创 强大的搜索引擎Elasticsearch安装 - php简单使用
强大的搜索引擎Elasticsearch安装 - php简单使用本篇笔记记录了CentOS6.9下安装ElasticSearch的过程安装jdk1.8yum install java-1.8.0-openjdk添加elasticsearch用户和组groupadd elasticsearchuseradd -g elasticsearch elasticsearch创建目录mkdir -p /usr/localcd /usr/local下载ElasticSearchwget -
2020-06-15 17:42:28 317
转载 MySQL-GROUP_CONCAT函数,将多行查询结果用特定字符串连接起来,适用于一对多
一、concat()函数功能:将多个字符串连接成一个字符串。语法:concat(str1, str2,…)返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。准备:我们新建一个my_test表,并插入测试数据:SELECT * FROM `tbl_test`;例1:基本使用select concat (id, username, password) as info from tbl_test;例2:在例1的结果中三个字段 id, username, pa
2020-06-10 15:59:31 621
转载 利用延迟关联或者子查询优化超多分页场景
根据阿里巴巴JAVA开发手册【推荐】利用延迟关联或者子查询优化超多分页场景。说明:MySQL 并不是跳过 offset 行,而是取 offset+N 行,然后返回放弃前 offset 行,返回N 行,那当 offset 特别大的时候,效率就非常的低下,要么控制返回的总页数,要么对超过特定阈值的页数进行 SQL 改写。正例:先快速定位需要获取的 id 段,然后再关联:SELECT a.* FROM 表 1 a, (select id from 表 1 where 条件 LIMIT 100000,2
2020-06-08 17:22:34 1065
转载 mysql组合索引的有序性
阿里巴巴Java开始手册上有一条【推荐】如果有order by的场景,请注意利用索引的有序性。order by 最后的字段是组合索引的一部分,并且放在索引组合顺序的最后,避免出现file_sort的情况,影响查询性能。正例:where a=? and b=? order by c; 索引:a_b_c反例:索引中有范围查找,那么索引有序性无法利用,如:WHERE a>10 ORDER BY b; 索引a_b无法排序。解释:order by的排序原理1.利用索引的有序性获取有序数据2.利用内存
2020-06-08 15:54:57 684
原创 SQL中 IN 与 EXISTS的使用
SQL中 IN 与 EXISTS的使用大家在谈到sql优化时,都会说到用EXISTS 代替 IN 查询。现在就谈谈这两个的用法。IN查询相当于多个or条件的叠加,这个比较好理解,比如下面的查询select * from user where userId in (1, 2, 3);等效于select * from user where userId = 1 or userId = 2 or userId = 3;NOT IN 也很好理解,就是多个and != 条件exists对外表用l
2020-06-05 14:12:11 417
原创 手把手从零学习Mysql主从集群配置
手把手从零学习Mysql主从集群配置Mysql 集群有很多种,一主一从,主主,多主多从等。根据自己的业务选择合适的集群架构。但是这些集群架构,都是基于一主一从演变的。下面就从零开始搭建一主一从的架构模式。参考Mysql5.7中文手册,根据文档内容,自己尝试了一遍。没问题,现在将自己配置主从模式的过程分享给大家。首先讲解一下,主从模式能带来什么?1.如果MySQL主服务器访问量比较大,可以...
2020-04-16 20:06:03 177
原创 深入理解Laravel容器概念,DI依赖注入,IOC控制反转
深入理解Laravel容器概念,DI依赖注入,IOC控制反转IOC - 控制反转DI - 依赖注入这两个存在的目的都是为了解耦!解耦可以理解为,原本紧密结合的两个磁铁,现在我们在他们中间加一层木板,强行将他们分开,却不影响他们原有的功能于磁性。所谓依赖就是 Class A 对于功能function a() 的实现需要依赖于class B而注入就是在Class A实现功能 functio...
2020-04-03 15:50:27 338
原创 php设计模式:观察者理解
php设计模式:观察者理解现在假设一个场景:在用户登录时,产品新增要求,让你查看用户余额是否够,不够就疯狂弹窗让他充值。这时候你疯狂撸代码。过两天产品又加了个需求,让你查看用户是否有消息未处理,没有疯狂提示他。这时候你疯狂撸代码。需求不断的来…如果是这样,我就得在登录后疯狂加代码。到后面回头一看,我都看不懂这个登录后,到底要干嘛了。那么此时我们就得考虑用‘观察者模式’了观察者简单来...
2020-04-02 19:41:28 128
转载 PHP 堆栈数据段代码段的理解
PHP 堆栈数据段代码段的理解栈:基本数据类型(粗暴的理解为空间A,存着数字8)堆:new 出来的对象代码段:函数、运行的代码数字段:字符串常量,全局变量,静态变量等对象在PHP中和整型,浮点型一样,也是一种数据类,都是存储不同类型数据用的,在运行的时候要加载到内存中去用。内存从逻辑上说,大体分为4段,栈空间段,堆空间段,代码段,初始化静态段,程序里面不同的声明放在不同的内存段里面。...
2020-04-01 17:14:33 269
原创 Laravel生成测试数据
Laravel使用Faker数据填充,生成测试数据做开发的时候,添加测试数据是必不可少的ps : Faker 是Laravel 自带的功能,不需要下载1.数据迁移 生成测试表先创建数据模型和数据迁移 php artisan make:model Models/FakerUser -m;在/database/migrations 找到对应日期生成的迁移文件。如:2020_04_01_03...
2020-04-01 11:44:09 948
原创 Laravel 6 模型事件使用
Laravel 6 模型事件使用所有支持的模型事件在 Eloquent 模型类上进行查询、插入、更新、删除操作时,会触发相应的模型事件,不管你有没有监听它们。这些事件包括:retrieved获取到模型实例后触发creating插入到数据库前触发created插入到数据库后触发updating更新到数据库前触发updated更新到数据库后触发...
2020-03-04 11:29:55 630
原创 Tp利用行为钩子,自动注册门面代理facade
Tp利用行为钩子,自动注册门面代理facade1.首先讲解一下,为什么需要门面代理。以及好处假设此时,公司优化了个MysqlV2版本,更加好。那么,我们去一个个业务模块里面更改业务里的new mysqlV2就显得不现实,工程量也大。此时,门面代理的作用就出来了。...
2020-01-18 16:49:31 348
原创 Swoole长连接,心跳包Heartbeat检测
Swoole长连接,心跳包Heartbeat检测首先:长连接都是很消耗资源的。所以,需要有个机制来检测客户端是否还活着 Or 存在,不存在就断开连接,减少资源消耗。众所周知,Tcp连接需要3次握手跟4次挥手。不管是服务器主动发起断开连接,还是客户端发起断开连接,都要经历完整的四次挥手阶段。最后由系统回收客户端的文件描述符fd(后面看代码就能看出fd标识符文件是啥)。为什么要回收描述符呢还是...
2020-01-02 16:01:56 1495
转载 Swoole HTTP 的应用
Swoole HTTP 的应用。我们都知道 HTTP 是一种协议,允许 WEB 服务器和浏览器通过互联网进行发送和接受数据。想对 HTTP 进行详细的了解,可以找下其他文章。我们在网上能看到的界面,图片,动画,音频,视频 等,都有依赖这个协议的。在做 WEB 系统的时候,都使用过 IIS、Apache、Nginx 吧,我们利用 Swoole 也可以 简单的实现一个 WEB 服务器。主要使...
2019-08-21 12:05:35 440
原创 Swoole通过Ngnix转发搭建http服务器
Swoole通过Ngnix转发搭建http服务器swoole_http_serverswoole_http_server继承自swoole_server,用于创建swoole版的http服务器。php也可以自己创建http服务器了?对,你没听错,是http服务器。所谓的http服务器,其含义就是一旦我们部署好,用户便可以直接通过浏览器访问该服务器。理论上而言,我们不需要再借用nginx或者h...
2019-08-06 10:59:35 812
原创 php利用syslog做日志备份或消息发送
php如何将日志写进syslogCentOS 6开始,日志服务由syslogd变成了rsyslogd,在配置rsyslogd前需要了解下系统日志的8个级别:0 EMERG(紧急):可能导致系统不可用的情况1 ALERT(警报):必须马上解决的问题2 CRIT(严重错误):比较严重的情况3 ERR(错误):运行出现错误4 WARNING(警告):可能会影响系统功能的情况5 NOTICE...
2019-08-01 16:51:01 817
原创 Linux下源码编译安装 Git
Linux下源码编译安装 GitGit是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理,是目前使用范围最广的版本管理工具。这篇博客,介绍下Linux下安装Git的步骤,仅供参考,当然,还是yum安装,比较简单方便。。。更多关于Git的内容,请看下面的链接:Git官方文档:Git-BookGit工作流:深入理解学习Git工作流执行安装连接到服务器并登...
2019-06-28 14:19:25 1578
原创 mongoDB中聚合(aggregate)的具体使用结合PHP
最近在学习mongoDB的使用,本文来介绍一下其中aggregate的具体使用先来看一个分组的例子,本例中$group是一个管道操作符,获得的结果可以接着输出到下一个管道,而内部的$sum是一个表达式操作符。用$group 举个例子将document分组,用作统计结果 db.Ubisoft.aggregate([ // aggregate方法接收的是一个数组 { ...
2019-06-20 10:34:46 4043
原创 结合namespace自己搭建MVC框架
结合namespace自己搭建MVC框架自定义MVC框架MVC基本介绍MVC是这3个单词的缩写:Model:模型,专门用来处理数据的View:视图,专门用来显示内容(保存一些html文件)Controller:控制器(中控器),用来分发任务(命令模型处理数据、命令视图显示数据)MVC的目录结构划分原则将来使用mvc框架的时候,有一些代码是和具体项目的业务相关的,所...
2019-06-13 19:11:01 272
原创 自己实现的一个PHP错误异常日志捕获类
自己实现的一个PHP错误异常日志捕获类特性:输出到控制台/文件/自定义方法可以通过错误等级进行过滤,有总开关可以关闭一切错误输出易用废话不多说,上代码:<?php/** * Created by PhpStorm. * User: tim * Date: 2019/1/30 * Time: 15:41 * 功能:日志函数,用与捕获错误或者输出信息到指定的输出流。 *...
2019-06-04 13:06:02 1069 5
翻译 封装简易mongoDB类
封装简易mongoDB类<?php/*** Mongodb 基本操作API,支持基本类似关系统型数据库的操作接口** @version 1.0 * [说明] * * 1:该版本API实现了 Mongodb 中最基本的插入/修改/查询/删除操作的封装 * 2:其它更高级的操作可通过 $this->getMongo() 得到原生的对象,更多API请自行查阅 Mongo P...
2019-05-28 10:46:16 310
原创 Centos如何设置IP地址,LINUX怎么修改IP地址
Centos如何设置IP地址,LINUX怎么修改IP地址今天接触到了一个新的任务,修改Linux的IP地址。采用的是浪潮的服务器,操作系统为CentOS7。(一)为了能够让IP地址永久生效。首先进入编辑 vi /etc/sysconfig/network-scripts/ifcfg-eth0 文件。(二)说明一下下面的这个文件:DEVICE=enp4s0f0 网卡对应的设备别名,如if...
2019-05-27 11:57:26 2777
原创 php回调函数
php回调函数//回调函数function getSum($a,$b,$c){ return $c($a,$b,$c); //sub(1,2)}function sum($num1,$num2){ return $num1+$num2;}function sub($num1,$num2){ return $num1-$num2}$ers = getSum(3,4,'su...
2019-05-23 20:58:20 130
原创 PHP闭包函数与闭包函数回调
PHP闭包函数与闭包函数回调没有名的函数成为匿名函数eg:$sum = function($num1,$num2){ return $num1+$num2;};//匿名函数调用echo $sum(1,2);匿名函数的回调方式回调- - 在一个函数中调用另一个函数eg:function sum($n1,$n2,$c){ return $c($n,$n2);}$res =...
2019-05-23 20:48:39 1615
原创 PHP可变函数
PHP可变函数可变函数即变量名加括号,PHP系统会尝试解析成函数,如果有当前变量中的值为命名的函数,就会调用。如果没有就报错。eg:$b = 'get';function get(){ echo 1;}$b();...
2019-05-23 20:39:42 276
转载 Laravel中间件的简单实用
Laravel中间件的简单实用简介Laravel 中间件提供了一种方便的机制来过滤进入应用的 HTTP 请求。例如,Laravel 内置了一个中间件来验证用户的身份认证。如果用户没有通过身份认证,中间件会将用户重定向到登录界面。但是,如果用户被认证,中间件将允许该请求进一步进入该应用。当然,除了身份认证以外,还可以编写另外的中间件来执行各种任务。例如:CORS 中间件可以负责为所有离开应用的...
2019-05-20 16:37:27 653
原创 Laravel 文件上传,Storage::disk
Laravel 文件上传,Storage::disk在config/filesystems.php文件中增加uploadsdisk驱动;例:'disks' => [ 'local' => [ 'driver' => 'local', 'root' => public_path('app'), ], // 新...
2019-05-20 16:07:25 11773
原创 SQL:在结果集中,把特定的数据排在最前面
查询出数据,按序号排序,并将一个或是多个特定的数据排在最前面sql格式:select * from `edr_artical` where (`t_id` = 26 or `id` = 63) and `is_pub` = 1 and `edr_artical`.`deleted_at` is null order by case when (id=63 or id=64) then 0 el...
2019-05-18 09:35:41 13060 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人