自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

stark张宇

在大同的时间里 创造一点大不同。

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

原创 PHP - 2021年终总结

概述技术领域没有银弹,各行各业的人想要持久的生存都需要学习,学习本身是一件有趣的事,难点在于把学到的知识融入到现在公司的业务和体系中,让项目落地,重新定义和改革之前的架构体系,这个过程是复杂的,新旧体系的交替,人员的流动等等,这个过程可能会遇到各种各样的问题,没有数据证明的项目落地都差那么点意思,不够精准和严谨,专业程度会遭到质疑。2021年技术圈的变化:1.centos7即将停止更新,2024年不在打补丁...2.layUi下线官网,接入Vue开发模式 ...3.PHP语言市场占有率排名下降了2

2022-01-06 14:56:58 2212 1

原创 PHP脚本任务 - 复杂场景测试生产环境数据的解决办法

概述如果老板交给你一个业务很复杂的业务场景,并且要求你在测试环境测试生产环境的数据,你会怎么处理呢?解决方案解决方案1第一个解决方案就是将实际生产环境需要的数据,先打印出需要的Sql语句,拼装,把Sql的查询结果放到以.csv文件的Excel表里加以处理。模拟出需要的数据暂存在脚本执行的数组里。需要注意的是以下几个点:列名称要有序对应如果有表头,要删除掉表头$list = [];$mapKey = [ 'id', 'novel_id' //... ];

2021-12-25 11:21:32 578

原创 Go - 入门学习笔记

前言1.查看语言版本go version2.下载编辑器,Atom在github上是开源的,官网:https://github.com/atom3.第一个Go程序package mainimport "fmt"func main(){ fmt.Println("hello,world")}基本程序结构1.测试脚本,执行脚本命令go test -v xxx_test.gopackage try_testimport "testing"func TestFirstTry(

2021-12-02 09:57:16 342

原创 Docker - 单独搭建部署应用服务(Nginx+Php+Mysql+Redis)

概述使用docker搭建一个php、redis、mysql、nginx的常用实例,基础好的同学可直接跳过前面的基础讲解,直接开始实战。基础知识镜像操作1.查看docker版本docker-compose --versiondocker version2.获取镜像一般来说,镜像的latest标签意味着该镜像的内容会跟踪最新版本的变更而变化,内容是不稳定的。因此,从稳定性上考虑,不要在生产环境中忽略镜像的标签信息或使用默认的latest标记的镜像。docker pull php:7.4.25

2021-11-26 15:18:43 3874 11

原创 1022 - 快手短视频广告主接入实践笔记

概述对于不熟悉快手短视频推广,广告主接入的有很多坑,给我的整体感觉就是技术实现简单,但是方式上有很多坑,希望分享出来给大家解惑,也留给自己作为技术实践中的经验总结。第一步是企业去快手投放管理后台开户,这个当时是公司运营的同事在搞,我们技术的同学没有参与,下面我开始说开发和接入的重点:接入形式接入形式主要有两种(推广下载App/收集表单数据),在技术接入的时候一定要确认清楚,我们在接入的时候就遇到了这方面的问题,运营的同学开户时的业务申请的是下载App-注册-激活,我们做成了H5落地页的形式,没有加强

2021-11-22 11:19:32 24409 2

转载 Docker php安装扩展步骤详解

Docker php安装扩展步骤详解前言此篇,主要是演示docker-php-source , docker-php-ext-install ,docker-php-enable-docker-configure 这四个命令到底是用来干嘛的,它们在PHP容器中都做了哪些事情。很多人很不理解在Dockerfile中安装PHP扩展的时候总是出现这几个命令,本篇就就是为你揭开这些命令的神秘面纱而准备的,所有案例都是本人自己运行过的。Docker 中的PHP容器安装扩展的方式有:通过pecl方式安装通

2021-10-28 13:47:53 1831 2

原创 代码重构与设计模式 - 实践笔记

概述所有改变和突破的前提是欲望,投入工作是一件蛮开心的事情,时间过的也快,这次项目的主要改造的点有两个,优化代码结构(主要是设计模式上),优化成好用的系统成为了一个新的小目标。面向对象设计原则单一职责原则Srp开放-关闭原则Ocp,解决的是程序的扩展性里式替换原则Lsp,解决的是程序的继承性接口隔离原则Isp依赖反转原则Dip(控制反转/依赖注入)编码原则KISS原则(编码尽量保持简单)YAGNI (当前不需要就不要做)DRY(可复用好的代码)LOD(迪米特法则)问题

2021-10-09 14:39:47 315

原创 php经典实例(日期和时间数组)

01.查找当前日期和时间$time = date('Y-m-d H:i:s');echo $time;var_dump(date('r'));//打印 Thu, 29 Jul 2021 10:05:08 +0800getdate — 取得日期/时间信息$today = getdate();print_r($today);Array( [seconds] => 21 [minutes] => 9 [hours] => 10 [mday]

2021-08-25 17:45:35 509

原创 php经典实例(数字)

前言php中的数字分成两类,整数和浮点数。01.检测变量是否包含一个合法数字is_numeric() - 函数用于检测变量是否为数字或数字字符串。$tests = array( "42", 1337, 0x539, 02471, 0b10100111001, 1337e0, "0x539", "02471", "0b10100111001", "1337e0", "not numeric", array(), 9.1, null, '',);foreach ($t

2021-07-28 14:37:50 369

原创 php经典实例(字符串)

前言php字符串是二进制安全的,(也就是说,字符串可以包含null字节),而且可以根据需要扩展和收缩,其大小只受PHP可用内存大小限制。memory_limit = 128M双引号字符串转义序列:https://www.php.net/manual/zh/regexp.reference.escape.php1.访问子串strpos — 查找字符串首次出现的位置if(strpos('beijing','bei') !== false){ echo 'bei in beijing';}

2021-07-27 16:13:10 266 1

原创 varchar(100)是几个汉字

1.Mysql的varchar(60),60是怎么算的?一般对varchar的类型就比较模糊,模糊的点在于varchar(60),是60个字符还是60个汉字?如果是utf8编码,一个汉字占用3个字符,gbk占用两个字符,Sql语句:mysql> select im_contents from `swoole_msg`.`im_user_chat_record_7` where `chat_id` = '72';+-------------+| im_contents |+---------

2021-07-20 16:10:11 1557

原创 PHPer的进阶-Swoole网络和未来

PHP基础任何一种编程语言的基础知识看起来都稍微显得有一点枯燥,但确实是首当其冲需要学习和总结的,没有坚实的地基是盖不起万丈高楼的,成为高手的第一课就是学而思,反复练习。1.设计模式 ( http://www.imooc.com/learn/236 )2.php异常,错误处理 ( http://www.imooc.com/learn/380 )PHP - 运行模式1.cgi 协议模式(基本已经不再使用)cgi模式 通用网关接口(Common Gateway Interface),它允许web服务

2021-07-02 15:56:10 428

原创 推送V3 - Vue + Layim + Websocket 实践笔记

Vue + Layim 实践笔记坦白讲,我接触的前端很少,不喜欢在自己不擅长的地方搞来搞去,Vue中集成了Layim的人工客服Im系统,出发点是挑战一下自己,经历了将近2个月的时间,项目一波三折,实属不易。两者的区别Vue的编程模式MVVM,没有Dom的概念,全局都是针对模型数据进行的操作,有固定的生命周期和路由。Layim是layUi中的一个组件,是个类似QQ的Im通信工具模板。实践1.vue 结构.├── build├── config│ ├── test1.env.js│

2021-06-24 16:12:45 950 3

原创 vue学习笔记01 - MVVM模式、初始化项目

MVVM模式Vue官网:https://cn.vuejs.org/v2/guide/MVVM模式:只操作数据,不关心Dom,传统的MVC模式面向Dom开发,MVVM模式面向数据开发。<body> <div id="app"> <input type="text" v-model="inputValue"> <button v-on:click="submit" >提交</button> <li v-for="item i

2021-05-27 09:37:14 167

原创 推送V2 - 开发笔记整理

说明1.代码整洁之道第一期的推送有很多不确定性,代码的扩展和阅读都造成了很多麻烦,所以要自我革命,在功能点不变的基础上重新编写。代码整洁之道的几个基本点:1.一个函数只处理一个功能,和参数个数最好不超过4个2.增加代码可读性,尽可能的不加注释3.注意编码的格式和段落4.增加对象内部的高内聚,低耦合5.面向对象设计原则:单一职能、依赖倒置、高内聚之前高内聚这个词听过好多遍,直到读完代码整洁之道才明白具体的含义,它是指对象中定义的属性尽可能的被程序所使用。在下面的代码里,我把要执行的程序

2021-04-16 15:09:33 164

原创 linux - 安装 swagger-ui & sysbench

说明//swagger是Api接口文档工具//sysbench 服务器测试工具swagger 安装1.github 下载到本地git clone https://github.com/swagger-api/swagger-ui.git2.获取到安装路径npm install -g http-server得到本地路径/Users/stark/.npm-global/bin/http-server -> /Users/stark/.npm-global/lib/node_modu

2021-03-26 17:30:30 343

原创 Linux性能优化学习笔记①

1.什么是平均负载?uptime命令[root@b0b5a9371ce4 /]# uptime 09:59:49 up 11 days, 14:50, 0 users, load average: 0.16, 0.07, 0.02 09:59:49 //当前时间up 11 days, 14:50 //系统运行时间0 user //正在登录用户数//load average 依次则是过去 1 分钟、5 分钟、15 分钟的平

2021-03-19 14:04:47 191

原创 Mysql 45 讲学习笔记

概述Mysql45讲由浅入深,可以用惊艳来形容这个专栏,扫盲了Sql的执行、日志、锁、排序操作和页的存储方式,收益良多,Mysql的学习之路才刚刚开始,空闲的时候回来复盘。基础架构Sql查询语句的执行 select * from `swoole_msg`.`user_push_msg_3` where `push_id` = '418' MySQL 可以分为 Server 层和存储引擎层两部分。Sql的执行过程,大概分这么几步:① 连接器 :连接器负责跟客户端建立连接、获取权限、维持和管理连

2021-03-09 16:07:59 405 1

原创 Jmeter - webSocket 压力测试笔记

概述编程的内核是数学,而测试的本质是计算,专业名词叫容量预估,而测试的大体就是用程序模拟程序,检测程序的正确性,有两个点需要注意,QPS最佳值和系统接收最大值,根据测试数据的反馈,针对测试的现象和反映进行优化。Server : i5 8GSwoole : 4.4.23php : 7.2.10Jmeter 的基础使用step.01 Thread Group 线程组设置jmeter自带的thread group非常简单。 一个thread 代表一个vuser,那么我们如果需要多少用户并发,设

2021-03-02 11:57:34 1036 2

原创 Git 常用命令和简单原理剖析

Git 常用命令和简单原理剖析Git 是一套内容寻址 (content-addressable) 文件系统,是一个简单的键值对数据库(key-value data store),我们用一个文件来保存 SHA-1 值,并给文件起一个简单的名字,然后用这个名字指针来替代原始的 SHA-1 值,对比快照,生成新版本的SHA-1数值。执行git log -n 2,commit后面的字符串就是用来保存的SHA-1值。commit 615d8987c4d375348f2ccaeb482fd622b9c99bd1

2021-01-27 14:22:04 171

原创 EasySwoole消息推送9 - 部署压测

概述在所有的开发准备就绪的时候,开始准备和上线有关的事情:测试和服务部署,测试要注意代码的逻辑严谨、代码运行的正确,服务稳定,所有的一切都需要用数据做指标,所有的计算机编程归根结底都是数学。0.系统初始化0.1 Mysql 数据表初始化需要如果在自定义进程或者自定义命令中需要使用到连接池,否则会报错:Fatal error: Uncaught Swoole\Error: API must be called in the coroutine//创建一个协程调度器$scheduler = ne

2021-01-16 12:48:06 430

原创 EasySwoole消息推送8 - 开发完结

概述上周结束了年报项目,一切又是新的开始,准备迎接新一场的暴风雨,然后享受暴风雨后的平静的幸福,好吧,就让我们回顾一下之前项目和项目的问题。存在的问题:如果服务器发生故障,Uid-Fd的对应关系得存在?消息体在推送之前要加以验证,如果存在未读消息,不要复推新的消息?当数量多的时候,存数据的时候采用什么策略分表?部署的时候,怎么支持Ws和Wss?链接(正常/错误)断开的回收?新的思考:1.系统初始化2.需要把消息分成三类:登陆、广播、UID取模3.优雅编程4.部署/启动/热启动

2021-01-07 14:40:23 573

原创 Mysql - 百万级数据查询优化笔记 (PHP Script) ③

Mysql - 百万级数据查询优化笔记 (PHP Script) ③说明:上篇介绍Mysql脚本优化的博客竟然突破了1w点击量,这周又加班熬夜渡过了一段不为人知的黑暗,成长都是苦涩的,愿我能行。1.PHP脚本配置1.1 memory_limit设置脚本内存看一下 PHP官网对memory_limit的解释:This sets the maximum amount of memory in bytes that a script isallowed to allocate. This helps

2020-12-25 20:59:38 296

原创 Mysql - 百万级数据查询优化笔记 (PHP Script) ②

Mysql - 百万级数据查询优化笔记 (PHP Script) ②说明:要处理的是在一个脚本中统计的年度账单,和上一篇的处理思路完全不同,先把全量取出,再按字典形式拼接,10w条数据只需要668s!数据:测试服:17w 正式服:280w1.全量查询,减少链接断开次数,使用PHP处理,性能更高一次性取出1000条数据,放在循环处理快,还是一次处理100,用数组处理更快?提前取出好数据,以字典的形式在数组使用中进行拼接,脚本中的使用应该尽量避免连接和断开的消耗,性能提高的非常明显,17w

2020-12-17 11:13:48 15131 14

原创 Mysql - 百万级数据查询优化笔记(PHP Script)

需求:什么时候注册账号,第一个评论、第一个长评、第一个打赏、第一个订阅、第一个书单、给哪篇文打赏最多、给哪篇文评论最多、你看过那个作者的文时长最长、做过多少个书单,分享可以获得海星奖励开发过程分为两部分处理: 时间轴:第一次做某个动作(注册账号/评论/长评/打赏/订阅/书单) 统计点:文章(打赏最多/评论最多/作者的文时长最长/收藏书单)需要注意的是,时间轴的都是已第一个时间为准,统计点类的只统计发生在2020年之内的数据,做这个的前提是假设一个时间点,比如2020-12-23 00:0

2020-12-09 15:52:44 431

原创 EasySwoole 搭建消息推送服务07 - Crontab/TaskManager

完成了基本功能开发以后,一个更加急迫需要解决的问题摆在面前:消息的推送、存储和准确性、失败重跑,En。DB 使用异步处理性能会变得更快list -> Mysql 用来检测DB处理失败的情况,已达到最终一致性对于消息推送失败的场景下,定时检测,重新推送1.DB异步,异步处理是一个提高性能常用的方式和方法。namespace App\WebSocketController\V1;use EasySwoole\EasySwoole\Task\TaskManager;use App\Mod

2020-12-02 10:59:10 1219 1

原创 easyswoole 搭建消息推送服务06 - done

历时15个工作日,使用websocket从零开发消息推送实战,欢迎大家交流学习

2020-11-20 17:50:15 813 1

原创 easyswoole 搭建消息推送服务05 - websocket应用

上一个Demo里,在启动时注册了支持websocket的组件、解析器,在到映射到的路由,实现了简单的通信,在开发中也是现学现卖,摸着石头过河,难度也是不小的,机会和挑战总是成对出现的,所以要加油加油再加油,边学习边总结,才能有更大的进步。用以下几个主要功能点:1 = HEART // 心跳2 = LOGIN // 登录3 = LOGOUT // 退出登录4 = COMMENT // 评论5 = PULL // 拉取6 = NOT

2020-11-13 17:38:24 812 3

原创 easyswoole 搭建消息队列服务04 - websocket原理剖析与实践

easyswoole 搭建消息队列服务04 - websocket原理剖析与实践PHP的扩展和依赖说swoole之前,先说说鸟哥扩展的yaf,yaf是一个用C语言写的PHP标准扩展,它之所以可以直接超高的并发是因为在启动前提前编译,常驻内存,节省内存开销,已获得高性能的特点。而swoole之所以更进一步的做到高性能,是因为它是一种特别的PHP扩展,根本的不用在于接管了php-fpm管理php运行的新模式,用自己的底层去管理php的进程,并且支持了TCP、UDP、WebSocket等网络服务,给PHP的

2020-11-05 11:30:35 1901 6

原创 easyswoole 搭建消息队列服务03 - 基础插件配置

easyswoole 搭建消息队列服务03 - 基础插件配置在搞定环境以后,开始了编写代码的过程,我使用的环境是 easyswoole 3.x,官方大佬给我的聊天室Demo,这就开始了架构编写之旅,兵马未动粮草先行,编码为写,架构先行,下图是我设计的架构草图,仅供参考:遇到的第一个问题是端与端的加密问题,让我想到了一个叫Jwt的插件,解决Api、端的交互(Pc/Android/Ios),是一种非常好的加密方式,它使用也非常简单。传统的做法是将已经认证过的用户信息存储在服务器上,比如Session。用户

2020-10-30 15:07:09 955 4

原创 easyswoole 搭建消息队列服务02 - Nginx反向代理

上一篇我们搭建好了基础环境,开始准备进行代码实施方案,大体方针分三步走,安排如下:easyswoole + redis + websocket 大体技术方案,是因为websocket本身就是全双工通信,不用反复连接使用,redis主要实现生产者-消费者,easyswoole的优点是 常驻内存又协程处理数据,技能提供sockert,又支持http服务,完美,摸着石头过河。1.先启动之前的easyswoole2.配置 Nginx 反向代理监听9501端口server { client_max_bod

2020-10-23 15:33:35 522

原创 easyswoole 搭建消息队列服务01 - 搭建环境

安装 composerphp -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"php composer-setup.php移动 composer.phar,这样 composer 就可以进行全局调用:mv composer.phar /usr/local/bin/composer切换为国内镜像:composer config -g repo.packagist composer http

2020-10-22 16:21:05 374

原创 玩转docker 自定义Dev环境

docker其实比之前想象的要简单,下载你想要的服务镜像,用 docker run 生成一个容器,当你基础环境都ok的时候,docker commit 命令保存你新的自定义镜像,我需要的是centos中集成的lnmp,要求php >= 7.2,并开启以下扩展。extension = yaf.soextension = swoole.soextension = mongodb.soextension = redis.soextension = trie_filter.soextension

2020-10-14 11:12:23 3357

原创 PHP面试-基础知识考察点复习

引用变量考点Demo1$a = range(0,10);$b = $a;//此时$a和$b同指向一个内存空间,内存大小不会发生作用$a = range(0,10);//$a的值虽然没有变化,但进行了写操作,触发PHP的写时复制Copy On Write)工作原理Demo2 引用&$a = range(0,10);$b = &$a;$a = range(0,10);PHP在对变量进行&引用时不会再开辟内存空间,两个变量永远指向一个空间,不会

2020-09-15 16:31:39 471

原创 PHP面试-魔术方法面试笔记

面向对象php的类权限控制修饰符public     类的内部外部和子类都能适用protected    类的内部和子类使用private    只能在类的内部使用,不能被继承魔术方法构造函数和析构函数__construct 构造函数 : 类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。__destruct 析构函数: 析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。class MyDestructableClass {

2020-07-11 16:41:26 521

原创 深入浅出Mysql - 优化篇(锁)

深入浅出Mysql - 优化篇(锁)锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。Mysql锁概述相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。比如,MylSAM和MEMOR

2020-06-30 18:59:54 932

原创 深入浅出Mysql - 优化篇(Sql语句)

定期优化表如果已经删除了表的一大部分,或者如果已经对含有可变长度行的表(含有VARCHAR、BLOB或TEXT列的表)进行了很多更改,则应使用OPTIMIZE TABLE命令来进行表优化。?这个命令可以将表中的空间碎片进行合并,并且可以消除由于删除或者更新造成的空间浪费,但OPTIMIZE TABLE命令只对MylSAM、BDB和InnoDB表起作用。mysql> analyze table fa_order;+------------------------+---------+-------

2020-06-29 15:00:49 653

原创 深入浅出Mysql - 优化篇(索引)

SQL优化通过show status了解各种sql执行的频率mysql> show status like 'Innodb_rows_%';+----------------------+--------------+| Variable_name | Value |+----------------------+--------------+| Innodb_rows_deleted | 163063 || Innodb_rows_insert

2020-06-28 19:26:16 656 4

原创 百度云SDK BUG - __HALT_COMPILER(); must be declared in a phar

try { //使用PHP SDK,并且使用自定义配置文件 include 'BaiduBce.phar'; // require 'YourConf.php'; use BaiduBce\BceClientConfigOptions; use BaiduBce\Util\Time; use BaiduBce\Util\MimeTypes; ...

2020-04-20 14:20:00 490 3

原创 深入浅出Mysql - 基础篇(列类型/运算符/函数)

深入浅出Mysql - 基础篇(列类型/运算符/函数)每一个常量、变量和参数都有数据类型,它用来指定一定的存储格式、约束和有效范围。MySQL提供了多种数据类型,主要包括数值型、字符串类型、日期和时间类型。不同的MySQL版本支持的数据类型可能会稍有不同,用户可以通过査询相应版本的帮助文件来获得具体信息。数值类型MySQL支持所有标准SQL中的数值类型,其中包括严格数值类型(INTEGER、...

2020-04-11 16:03:10 832 7

空空如也

空空如也

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

TA关注的人

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