自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 收藏
  • 关注

原创 PHP面试总结

1.PHP数组实现原理:答:哈希表+双向链表,总体结构是使用的哈希表结构,bucket数据存储使用双向链表。哈希冲突怎么解决?链接法,在同一单元内使用链表来存储。2.nginx和php-fpm是如何工作的:答:nginx和php-fpm如何协作,首先要了解CGI协议和Fast-CGI协议,CGI是web server和后台语言交互的协议,但是CGI有一个问题,每处理一个请求都需要fork(分出)一个全新的进程。Fast-CGI更快的CGI,允许在一个进程中处理多个请求。FPM (FastCGI.

2021-04-19 12:59:47 314

原创 snowflake雪花算法简述

snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。/** * Twitter_Snowflake<br> * SnowFlake的结构如下(每部分用-分开):<br> * 0 - 0000000000 0

2021-04-14 22:36:11 291

原创 kill中你不知道的那些事儿

Linux中kill命令时我们时常会用的命令,但是你是否对他真正的了解呢?1.用法:kill 1034(进程id)用法很简单kill命令后边直接跟进程id就可以。但是会出现以下问题:2.问题:kill命令执行完了之后,发现进程并没有被杀死,是kill命令没有执行成功吗?并不是,真相是:3.真相,并解决问题:先来解决问题,如果kill失败,可以使用:kill -9 1034(进程id)为什么kill -9就会执行成功呢?真相是,kill是通过进程ID给进程发送信号来

2021-01-16 13:13:20 500

原创 PHP根据二维数组中某个字段排序

借助PHP的函数实现,代码如下:$data = array( array( 'ad_src' => 'src4', 'ad_url' => 'url4', 'ad_order' => 4 ), array( 'ad_src' => 'src3', '

2021-01-08 10:57:50 174 1

原创 微信提现报错:更换了金额,但商户单号未更新

问题:调用微信企业付款到零钱或银行卡接口的时候报错:更换了金额,但商户单号未更新。排查问题:查了一下生成商户单号的代码,打印出来也没有异常,使用的字符串拼接的产品单号。。。突然想起来,测试环境也是用的同一套代码,这个产品单号测试过。。。问题找到了,单号重复了,而且单号的金额还不同。解决:修改一下单号就好了。...

2020-12-28 18:28:38 847

原创 PHP实现页面跳转的三种方式

PHP实现页面跳转有三种方式,我们一一介绍,推荐使用第一、三方式。1.借助PHP的header()函数实现。header()函数的主要功能是将HTTP协议标头(header)输出到浏览器。注意:1.location和":"号间不能有空格,否则不会跳转。2.在用header前不能有任何的输出。3.header后的PHP代码还会被执行。4.部分浏览器存在兼容性问题,例如:IE浏览器如果输出的内容字节太小(小于512字节),那么就会被忽略。在使用时需要测试多个浏览器。<?p

2020-12-23 10:59:05 16059

原创 微信H5登录实现代码(PHP)

微信登录分为H5、PC和移动应用(IOS\安卓)其中H5借助微信公众号实现,接口文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.htmlPC和移动应用借助微信开放平台实现,PC需要创建网站应用、移动应用需要创建移动应用。网站应用接口文档:https://developers.weixin.qq.com/doc/oplatform/Website_App/WeC

2020-12-22 15:54:03 1487

原创 此IP地址不允许调用接口,如有需要请登录微信支付商户平台更改配置

调用微信企业付款提示“此IP地址不允许调用接口,如有需要请登录微信支付商户平台更改配置”。配置步骤:1.登录微信商户,进入产品中心,以企业付款到零钱为例,点击产品设置:2.找到付款发起方式,点击设置:.3.添加调起支付服务的IP,提交即可,注意有十分钟的生效延迟:...

2020-12-22 15:40:14 5719 1

原创 常用正则表达式梳理总结

一、校验数字的表达式数字:^[0-9]*$n位的数字:^\d{n}$至少n位的数字:^\d{n,}$m-n位的数字:^\d{m,n}$零和非零开头的数字:^(0|[1-9][0-9]*)$非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(\.[0-9]{1,2})?$带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})$正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$有两位小数的正实数:^[0-9]+(\.[0-9]{2})?$有1~3位小

2020-12-15 11:20:48 75

原创 使用html2canvas生成海报及采坑纪录

使用场景:根据产品信息生成海报图,供分享和分销使用。代码:首先要加载html2canvas的js文件。(需要前往官网下载)<script> var canvas = document.createElement("canvas"); //创建一个canvas节点 var scale = 3; //定义任意放大倍数 支持小数 var type = "png";//生成图片样式 var width = 360; //获取需要生成海报dom的宽度,为了

2020-12-10 11:10:13 385 1

原创 解决“Refused to display xxx in a frame because it set X-Frame-Options to deny“报错

报错信息如下:报错原因:报错信息已经描述的很明确了,在frame嵌套页面的时候被拒绝了,拒绝原因是Header头中的X-Frame-Options属性的值为‘deny’。这个机制是为了防止站点被劫持。解决:这个问题需要修改Nginx或者Apache的配置,这里以Nginx为例:在配置文件中加入X-Frame-Options属性的值:参考值:add_header X-Frame-Options ALLOWALL; #允许所有域名iframeadd_header X-

2020-12-08 14:54:50 55572 2

原创 判断当前设备是否为移动端(PHP)

判断当前设备是否为移动端,代码如下: /* * 判断是否为手机端 */ public static function check_wap(){ // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) { return true; } //如果via信息含有wap则一定是移动设备,部分服务商会

2020-12-02 15:34:49 423

原创 根据不同的访问设备跳转不同的域名链接

根据不同的访问设备跳转不同的域名链接<script> //获取浏览器或者手机对象 function req_bortype() { var systemnumber; var systemname=window.navigator.userAgent.toLowerCase(); //判断是否苹果设备 if (/(iphone|ipad|ipod|ios)/i.test(systemname)) { systemnumber=1; return system

2020-12-02 14:06:03 936

原创 解决Git fatal: refusing to merge unrelated histories

问题如图所示:分析出现问题的原因:本地的仓库并不是从远程仓库clone过来的,那就相当于是两个独立的仓库,所以在pull的时候会提示两个分支有不同的提交历史。解决方案一:在 pull 代码的时候强制合并两个分支,不考虑提交历史。执行以下命令:git pull origin master --allow-unrelated-histories也就是在 pull 命令后添加--allow-unrelated-histories 参数。然后处理本地与远程拽下来代码的冲突,重新提交即.

2020-12-01 10:41:36 626

原创 团队协作工具Tapd操作说明手册

公司一直在使用Tapd协作工具,最近新入公司的小伙伴比较多,对Tapd的操作不熟,所以整理了一下操作说明。1.登录,网址:https://www.tapd.cn/,点击登录,如下图:登录联系管理员,添加你的邮箱,邮箱也就是那你的账号,密码在管理员给你邮箱中发送的链接中设置。2.登录之后进入工作台,我的待办是你未完成的任务,我的动态是你最近对任务的流程操作纪录,我的关注可以方便查看你关注的任务的最新进展。3.文档,可以新建个人的项目的文档、图片、思维导图,可以邀请协作者一起..

2020-11-29 15:36:49 10248

原创 Linux安装swoole及配置流程

1.下载安装包:http://pecl.php.net/get/swoole-4.4.7.tgz2.解压:tar -zxvf swoole-4.4.7.tgz3.安装cd swoole-4.4.7phpize./configure./configure --with-php-config=/usr/local/php/bin/php-configmake && make install4.在php.ini 文件中加入扩展 extension=sw.

2020-11-25 17:46:04 287

原创 Redis批量删除键值的方法

Redis批量删除需要借助linux的xargs命令:redis-cli -h 127.0.0.1 -p 6379 keys test* | xargs -r -t -n1 ./redis-cli -h 127.0.0.1 -p 6379 del #首先查出所有test开头的key,然后批量删除如果加了安全验证需要添加参数:redis-cli -h 127.0.0.1 -p 6379 -a xxx keys test* | xargs -r -t -n1 ./redis-cli -h 127

2020-11-24 18:18:05 677

原创 安装Redis碰到的报错及解决方法

Linux安装Redis步骤:wget http://download.redis.io/redis-stable.tar.gz tar xzf redis-stable.tar.gz cd redis-stable make可能碰到的问题:1.make和make install时报错:/bin/sh: cc: command not found cc命令未找到,安装:yum -y install gcc gcc-c++ libstdc++-devel2.In..

2020-11-24 15:21:30 1023

原创 Redis启动、自启动和停止的方法

一、启动Redis启动有直接启动和通过初始化脚本启动两种方式。1.直接启动,适用于开发环境。直接运行redis-server即可启动Redis:$ redis-server2.通过初始化脚本启动,适用于生产环境在Linux系统中可以通过初始化脚本启动Redis,使得Redis能随系统自动运行,在生产环 境中推荐使用此方法运行Redis。在Redis源代 码目录的utils文件夹中有一个名为redis_init_script的初始化脚本文件,内容如下:#!/bin.

2020-11-24 14:16:31 1414

原创 Mysql锁的实现原理及设计

一、锁的粒度 1.行级锁: (1)所有的当前读都要加排它锁。比如:selectforupdate、update、delete。 (2)是作用在索引上(聚簇索引&二级索引)。 (3)唯一索引/非唯一索引*RC(提交读)/RR(可重复读),四种搭配情况不一样。需要注意。 2.表级锁: (1)加锁场景:lock tables、全盘扫描(加锁之后Mysql Se...

2020-11-23 19:10:15 855

原创 Mysql事务实现原理及设计

一、事务基本概念 事务特性:AIDC(原子性、隔离性、持久性、一致性) 并发问题:脏读:读取到未提交的数据。 不可重复读:两次读取的结果不同。 幻读:select操作得到的结果表征的数据状态无法支撑后续的业务操作。 隔离级别: 未提交读:最低隔离级别,会读取到其他事务为提交的数据。脏读 提交读:事务过程中可以读取到其他事务已提交的数据。不可重复读 ...

2020-11-23 18:58:58 237

原创 Mysql Innodb存储引擎内存管理

Mysql Innodb的内存管理的组成:1.Buffer Pool:预分配的内存池2.Page:Buffer Pool的最小单位3.Free List:空闲Page组成的链表4.Flush List: 脏页链表5.Pagehash表:维护内存Page和磁盘文件Page的映射关系6.LRU:内存淘汰算法(LRU链表分为LRU_new和LRU_old,new热数据占总链表的八分之五,old冷数据占八分之三,通过Midpoint标识来分割)一、Innodb页面加载流程与淘..

2020-11-23 18:32:19 293

原创 Mysql InnoDb数据页的组成及记录维护

一、Mysql Innodb数据页的组成,单页数据页的大小为16KB,由以下七部分组成:1.文件头:大小为38个字节。(页的位置,上一页下一页位置,checksum , LSN)2.数据页头:记录页面的控制信息。大小是56个字节,包括页的左右兄弟页面指针(双向链表),页面的空间使用情况。3.虚记录:最大虚记录和最小虚记录。4.记录堆:行记录存储区,分为有效记录和已删除记录、自由空间链表(已删除记录组成的链表)。5.未分配空间:页面未使用的存储空间。6.页目录:slot信息。页目.

2020-11-23 18:25:17 401

原创 sublime 最全快捷键总结整理

编辑器还是免费的用着香,会快捷键就更香了,以下是快捷键总结:快捷键 功能ctrl+shift+n 打开新Sublimectrl+shift+w 关闭Sublime,关闭所有打开文件ctrl+shift+t 重新打开最近关闭文件ctrl+n 新建文件ctrl+s 保存ctrl+shift+s 另存为ctrl+f4 关闭文件ctrl+w 关闭ctrl+k, ctrl+b 切换侧边栏显示状态f11 切...

2020-11-23 13:43:53 3179

原创 《算法图解》总结及实战

一、算法简介与二分查找法开启算法探索之路之前,首先要了解的概念:1.大O表示法:用来表示算法的速度有多快。这里的速度并非指时间,而是增速。 常见的大O运行时间:(n表示操作数) O (log n ),也叫对数时间 ,这样的算法包括二分查找。 O (n ),也叫线性时间 ,这样的算法包括简单查找。 O (n * log n ),这样的算法包括快速排序。 O (n ^2 ),这样的算法包括选择排序。 O (n !),也叫阶乘时间(n!...

2020-11-20 15:58:35 617

原创 解决阿里云服务器通过域名访问被拒

问题:新购买的阿里云服务器搭建完LNMP环境,通过域名去访问被拒。显示连接超时。排查问题:1.ping服务器IP是否能ping通;2.排查Nginx配置是否有问题;3.确定前两步没问题之后,登录阿里云进行以下操作在配置规则中,添加你要使用的协议和端口号,默认的应该是只有22端口。添加nginx使用的80和443,就可以访问了。搞定!...

2020-11-19 11:06:17 5426

原创 Gitlab提交代码同步到服务器

实现:向Gitlab提交代码的时候,通过钩子同步到测试服务器。总共分两步,代码和Gitlab钩子配置第一步代码部分:<?php/** * Created by PhpStorm. * User: Genghai_Y * Date: 2020/9/29 * Time: 17:13 */$project = trim($_GET['project']);$dev = trim($_GET['dev']);if (empty($project)) { die('pr

2020-11-18 17:00:48 1835

原创 《内容算法:把内容变成价值的效率系统》观后总结

一、系统的架构 1.搜索引擎系统的架构: 通常分为两部分: 一部分是离线系统。爬虫对原始网页的内容进行爬取,然后对爬取到的内容进行归类,贴标签等。最终把他们储存在服务器中。 一部分是在线系统。当用户输入关键词的时候,系统首页对关键词进行拓词和修正,然后从数据库中进行提取,提取出来以后根据不同的标准对内容进行评分,来决定内容的排序。 最终根据用户点击行为对内容施加不同的权重来决定新的排序。 2.推送...

2020-11-17 15:50:47 825 1

原创 《性格色彩》测试加分析

1、 关于人生观,我的内心其实是:  A、希望能有各种各样的人生体验,所以想法极其多样化。  B、在合理的基础上,谨慎确定目标,一旦确定会坚定不移地去做。  C、更加在乎取得一切有可能的成就。  D、毫不喜欢风险,喜欢享受稳定或现状。2、如果爬山旅游,大多数状况下,在下山回来的路线我最可能:  A、好玩有趣,所以宁愿新路线回巢。  B、安全稳妥,所以宁愿原路线返回。  C、挑战困难,所以宁愿新路线回巢。  D、方便省心,所以宁愿原路线返回。3、 说话时,我更看重:

2020-11-17 15:47:43 1981

原创 Git配置、缓存用户名密码和清除缓存

配置用户名和邮箱:git config --global user.name "username"git config --global user.email "[email protected]"清除配置中纪录的用户名和密码,下次提交代码时会让重新输入账号密码:git config --system --unset credential.helper查看git配置信息git config --list执行命令之后,再次pull或push时会缓存输入的用户...

2020-11-16 15:15:22 4399

原创 Sphinx和Coreseek实现模糊查询

问题:使用Sphinx和Coreseek搜索关键词发现搜索出来数据还没有mysql模糊查询的数据多。。。排查之后发现问题出在配置的参数上,代码如下:<?phprequire_once('sphinxapi.php');$key = isset($_GET['keys'])?$_GET['keys']:'一个';$page = isset($_GET['page'])?$_GET['page']:1;$limit = $page * 10;$sphinx = new SphinxCl

2020-11-13 10:18:24 227

原创 Sphinx如何实现复杂Sql查询

Sphinx可以实现复杂的Sql语句,具体操作如下:比如,要实现的Sql语句为:select * from new_notes where ((status=100 &tmp_edit_status = 1) or status = 200 or status = 800 ) and title LIKE '%测试%' and tmptype = 1 and create_time > 1000 and create_time < 9999999 order by create_t.

2020-11-13 10:17:42 286

原创 Sphinx和中文分词Coreseek的使用详解配置

一、需求  实现文章标题中或分类(甚至文章内容)包含搜索词的文章,按照搜索词出现的频率的权重展示。二、环境  Nginx+PHP+Mysql(系统Centos7)。三、安装#1.安装依赖yum -y install make gcc gcc-c++ libtool autoconf automake imake mariadb mariadb-server mariadb-devel libxml2-devel expat-devel#2.下载软件包

2020-11-12 16:06:56 360

原创 Nginx如何配置多个域名跨域

Nginx配置域名跨域单个域名:location ~ .*\.(php|php5)?$ { add_header 'Access-Control-Allow-Origin' 'http://image1-oss.xxx.com'; add_header 'Access-Control-Allow-Credentials' 'true' always; fastcgi_pass 127.0.

2020-11-12 16:05:23 1756 3

原创 PHPExcel导入导出常用方法总结

最近公司后台管理系统需求,要用PHP导出excel表格数据,所以特整理了一下常用的方法供大家参考:PHPExcel扩展包地址:https://github.com/wanqianworld/phpexcel-1.8大致的分为几个部分:一、导出的方法及步骤1.引入PHPExcel文件:require_once("../Classes/PHPExcel.php");2.实例化PHPExcel:$ObjPHPExcel = new PHPExcel();3.获取当前工作sheet:$ObjP

2020-11-12 16:04:14 928

原创 友盟推送消息踩坑及处理(PHP)

公司的客户端的推送选用友盟推送,但是友盟的官方文档描述很少,对新手很不友好,所以特写此采坑纪录,废话不多说上代码。公司业务只涉及单播和广播。所以只提供了单播和广播,业务拓展的话会补充其余部分。消息推送代码:(页面加载文件均来自友盟代码包) 1 <?php 2 require_once(dirname(__FILE__) . '/' . 'umengmsg/notification/android/AndroidBroadcast.php'); 3 require_once(dir

2020-11-12 16:03:48 722

原创 Linux zip打包排除某个目录或只打包某个目录

需求一:zip打包某个目录但是要排除目录下某个文件或者某个目录。zip -r server.zip server.geng.com/ -x './server.geng.com/Upload/*'-x参数后加要排除的文件或目录的完整路径。注意引号不可少。需求二:zip打包只打包某个目录下单个目录(其实这个有点多余,直接打包这个目录就是了,应用的场景就是能保留目录树)zip -r server.zip server.geng.com/ -i './server.geng.co.

2020-11-12 16:03:13 3164

原创 Linux如何远程拷贝文件(大项目的迁移)

需求:公司业务分离需要将项目迁移到另外一台机器上,问题是项目存在大量的图片,zip和tar打包压缩有大小限制(最大限制4G),需要拆分打包很麻烦,果断放弃。使用另外一种方法远程拷贝文件---scp命令。用法如下:scp /alidata/www/src/project.zip [email protected]:/data/ #拷贝单个文件至目标机器scp -r /alidata/www/src/ [email protected]:/data/ #拷贝整个目录至目标机器,默认是使用的22端口

2020-11-12 16:02:49 738

原创 Mysql group_concat报错,完美解决!

例如:执行如下sql:SELECT GROUP_CONCAT(id) AS user_ids FROM broker_company WHERE `status`=1;结果如下:789,1516,1554,1584,1634,1714,1734,1742,1758,1834,1836,2076,...,9021, //后边还有,但是只截取前1024个字符因为group_concat长度默认设置为1024,只截取结果的前1024个字符,超过部分不展示。解决方案一:只.

2020-11-12 16:02:24 1491

原创 Linux全局替换文件内容

需要用到linux的命令sed:#替换单个文件下的内容,比如将文件中的"alidata"替换为"data".sed -i "s/alidata/data/g" test.txt#替换某个目录下所有文件中的内容,比如将root目录下所有文件中的"wwwroot"替换为"www".sed -i "s/wwwroot/www/g" 'grep -rl wwwroot /root'...

2020-11-12 16:01:52 3581

空空如也

空空如也

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

TA关注的人

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