自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(193)
  • 资源 (2)
  • 收藏
  • 关注

转载 Nginx配置referer校验,实现简单的防盗链详解

blocked:请求头Referer字段不为空(即存在Referer),但是值被代理或者防火墙删除了,这些值不以“http://”或“https://”开头,通俗点说就是允许“http://”或"https//"以外的请求。arbitrary string:任意字符串,定义服务器名称或可选的URI前缀,主机名可以使用*号开头或结尾,Referer字段中的服务器端口将被忽略掉。regular expression:正则表达式,以“~”开头,在“http://”或"https://"之后的文本匹配。

2024-03-11 16:51:04 117

原创 mysql中information_schema.tables字段说明

SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA='数据库名';TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个。,表类型,表引擎,创建时间等信息。

2023-12-07 14:29:39 299

原创 php switch case 多条件使用同一个case

switch 语句开始时没有代码被执行。仅当一个 case 语句中的值和 switch 表达式的值匹配时才开始执行case下语句,直到 switch 遇 break 语句才会推出执行。如果case 后不写上,PHP 将继续执行下一个 case 中的语句。使用 switch case ,多个值想要执行相同的逻辑,像写在同一case下,实际不能正确执行。

2023-09-04 16:38:17 923

原创 Java安装详细步骤(win10)

JDK下载地址:Java Archive | Oracle,下图为win10版本。

2023-01-03 11:34:05 3037 2

原创 win10设置定时任务访问指定url

win10设置定时任务

2022-12-30 18:32:46 2101

原创 MySQL中in(‘1,2,3‘)只取第一个id为1对应的数据

MySQL中in里面如果是字符串的话,会自动使用类似CAST(‘5,6,7’ AS INT)方法转化成int类型,对于数字开头的字符串来说,转为数字的结果就是截取前面的数字部分(本例中第一个逗号前的数据),对于开头部分不能截取出数字的字符串来说,转换的结果自然就是0了。mysql 中执行 in函数的时候,会将入参字符串‘1,2’通过 CAST(‘1,2,3’ AS SIGNED) 方法优化,最终取第一个参数1,所以执行后的结果就是只有id=1的数据。t_user表有三条数据,id分别是1、2、3。

2022-10-14 16:53:30 2238

原创 解决win10家庭版远程 RPD失效问题

1.下载https://raw.githubusercontents.com/sebaxakerhtc/rdpwrap.ini/master/rdpwrap.ini后,替换C:\Program Files\RDP Wrapper内的ini文件。4.载https://raw.githubusercontents.com/sebaxakerhtc/rdpwrap.ini/master/rdpwrap.ini后,替换C:\Program Files\RDP Wrapper内的ini文件。

2022-09-21 12:04:26 522

原创 Mysql中contact、group_concat、concat_ws

contact、group_concat、concat_ws

2022-08-17 17:59:31 3824

原创 PHPStorm自动换行设置

PHPStorm自动换行设置

2022-07-13 11:18:55 4818

原创 PHP中$a && $b = $c 语法的用法

$a && $b = $c 表示:如果$a为真,则执行$b = $c,否则不执行。可以用if语句替代:实例: $a && $b = $c 表示:如果$a为真,则执行$b = $c,否则不执行。可以用if语句替代:实例:

2022-06-13 16:17:28 357 1

原创 phpstorm修改注释时的斜杠的位置

用phpstorm给PHP代码设置//注释,默认情况下,快捷键 Ctrl + / 会将注释符 // 放在最前边, 可以通过以下设置使用//也跟代码一样支持缩进:File > Settings > Editor > Code Style > PHP > Code Generation , 取消勾选 Line comment at first column 即可设置前效果:设置后效果:

2022-06-01 09:37:13 380

转载 win10安装linux虚拟机

1.下载虚拟机我用的是VMware官方下载地址:https://my.vmware.com/en/web/vmware/free#desktop_end_user_computing/vmware_player/7_0%7CPLAYER-714%7Cproduct_downloads进入之后选择 VMware Workstation Player,点击Download Pro2.安装虚拟机下载成功后,一路安装到下一步。这里注意选择空闲空间大的盘(最好不要选C盘)安

2022-05-27 09:58:50 5107

转载 RabbitMQ六种工作模式与应用场景

简介今天我们来聊一聊RabbitMQ的工作模式与其对于的应用场景有哪些。你可能会疑惑,作为 MQ 不就是生产者将消息发送到 MQ ,再讲消息发送到消费者哪里,任务不就完成了吗?其实,不是这样的,MQ 的使用会根据业务场景的不同,也会选择不同的消息工作模式。基本组件与概念在说六中工作模式前,需要先了解一下 RabbitMQ 的基本组件与概念,这样才能更好的学习 RabbitMQ 其工作模式。Producer 生产者,消息的提供者 Consumer 消费者,消息的使用者 Br..

2022-05-26 17:19:12 4144

原创 Redis事务

1、Redis事务的概念:可以一次性执行多条命令,本质上是一组命令的集合。一个事务中的所有命令都会序列化,然后按顺序地串行化执行,而不会被插入其他命令。总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令2、Redis事务没有隔离级别:批量操作在发送 EXEC 命令前被放入队列缓存,并不会被实际执行,也就不存在事务内的查询要看到事务里的更新,事务外查询不能看到。3、Redis不保证原子性:Redis中,单条命令是原子性执行的,但事务不保证原子性,且没有

2022-05-26 14:40:36 371 1

原创 设计模式之策略模式

概念:在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。应用场景:如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 一个系统需要动态地在几种算法中选择一种。 如果一个对象有很多的行为,如果不用恰当的

2022-05-26 11:49:45 125

转载 Redis持久化:RDB和AOF

为什么需要持久化?Redis对数据的操作都是基于内存的,当遇到了进程退出、服务器宕机等意外情况,如果没有持久化机制,那么Redis中的数据将会丢失无法恢复。有了持久化机制,Redis在下次重启时可以利用之前持久化的文件进行数据恢复。理解和掌握Redis的持久机制,对于Redis的日常开发和运维都有很大帮助,也是在大厂面试经常被问到的知识点。Redis支持的两种持久化机制:RDB:把当前数据生成快照保存在硬盘上。 AOF:记录每次对数据的操作到硬盘上。接下来,我们详细了解一下这两种持久化机制。

2022-05-11 21:28:20 173

原创 Mysql update 语句到底做了些什么?

一条简单的update 的语句到底牵扯了多少的东西?看看具体流程:前提: student 只有id, 和name 两个字段,且只有id 一个主键,无其他索引。update student set name = 'gxw' where id = 2开启事务,将原内容写入undo log。 去Buffer Pool 中 查找id =2 所对应的数据。 如果在Buffer Pool中查找到了对应的数据,那么直接在Buffer Pool 中直接修改对应数据。如果没有找到,那么先从磁盘中找到对

2022-05-11 20:58:26 679

原创 mysql主键索引和普通索引之间的区别是什么

索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。MySQL提供多种索引类型供选择:普通索引 、唯一性索引、主键索引 、全文索引等等。下面本篇文章就来给大家介绍一下主键索引和普通索引之间的区别 ,希望对你们有所帮助。普通索引普通索引是最基本的索引类型,而且它没有唯一性之类的限制。普通索引可以通过以下几种方式创建:创建索引,例如CREATE INDEX <索引的名字> ON tablename (列的列表);修改表,例如ALTER TA

2022-05-11 12:43:26 4114

转载 Redis过期删除策略

了解redis过期删除策略前,先了解一下三种过期删除策略:定期删除策略:概念:在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即执行对键的删除操作。(创建定时器删除)优点:对内存最友好:通过使用定时器,可以保证过期的键会尽可能快地被删除,释放所占内存缺点:对cpu最不友好:在过期键比较多的情况下,删除过期键这一行为可能会占用相当一部分cpu的时间,对服务器的响应时间和吞吐量造成影响。惰性删除策略:概念:放任键的过期不管,但是每次从键空间中获取键时,都

2022-05-11 09:25:08 7788 3

原创 mysql慢日志配置与查看

简介MySQL 慢查询日志是排查问题 SQL 语句,以及检查当前 MySQL 性能的一个重要功能。开启状态:查看是否开启慢查询功能:mysql> show variables like 'slow_query%';+---------------------+------------------------------------+| Variable_name | Value |+--------------

2022-05-11 08:49:00 379

原创 Redis内存淘汰策略

Redis内存淘汰策略:是指在Redis的用于缓存的内存不足时,怎么处理需要新写入且需要申请额外空间的数据。noeviction: (默认策略) 当内存不足以容纳新写入数据时,新写入操作会报错。 allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 key。 allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个 key。 volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的 key。

2022-05-09 23:13:14 350

原创 ab压力测试

Apache自带的ab压力测试工具用法详解下载地址:https://www.apachehaus.com/cgi-bin/download.plxab的原理ab是apachebench命令的缩写。ab的原理:ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,它既可以用来测试apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。ab命令对发出负载的计算机要求很低,它既不会占用很

2022-05-06 18:27:59 1051

原创 Swoole多进程结合RabbitMq使用

<?phprequire_once __DIR__ . '/lib/rabbitmq/rabbitmq.php';require_once __DIR__ . '/lib/general/general.php';define('RUNENV', getenv('ENV') ? getenv('ENV') : 'local');$url = 'https://local.banggood.com/?com=test&t=getShipment'; //业务操作接口$wo.

2022-05-06 14:33:31 969

转载 服务器同步代码

公司现在的服务器架构采用的是阿里的SLB(负载均衡)  现在是有一个负载均衡对应两台ECS实例 负载均衡就是当有客户端的请求的时候 它会对后端server的服务器进行健康检查并根据设置的权重去分配请求,好处就是当其中某台服务器宕机不会造成损失。起到了容灾效果现在的需求:1、现在就是后端的server服务器都布置好了,代码怎么同步到每台服务器上,不可能在每台服务器都进行git pull 或者 svn update吧 现在server服务器少还好,后期对应n多个ECS实例怎么办于是便应用到的r.

2022-05-06 11:48:41 726

原创 rabbitmq使用

前提:1.已安装rabbitmq(本demo的rabbitmq版本是:3.9.15) ,可参考:windows10环境下的RabbitMQ安装步骤(图文)_镇杰。的博客-CSDN博客2.php开启amqp扩展(本demo的php版本是:php7.3.4nts)具体步骤:1.在本地对应代码项目请求一下,推送mq的方法:http://local.test.com/index.php?com=test&t=testLocalPush,再看看rabbit管理后台:http://.

2022-05-05 17:57:08 738

转载 IE11浏览器 PAC代理不生效

近期在给公司分支办公室配置自动代理配置的时候发现所有升级了Windows 10的电脑自动代理配置全部无效了,后来一番了解下来再微软MSDN博客上查到微软从Internet Explorer(IE)11版本开始,已经弃用本地PAC文件的方式(也就是我们说的“file://”方式)配置自动代理了,只能通过http或者https方式加载代理自动配置的PAC文件,而Windows 10默认安装的便是IE11版本。那么这个问题怎么解决呢?其实很简单,配置一台web服务器挂pac文件咯。首先就是开启服务器的IIS功

2022-04-12 22:10:22 3567

原创 进度管理案例分析——常见问题及答案

【问题1】请画出本项目的双代号网络图,并计算出项目的工期,请指出关键路径。答:忽略【问题2】在网络图中,所提到的工期一般分为三种情况,及计算工期,要求工期和计划工期,请用100字,说明它们的含义。答:(1)计算工期:根据网络计划时间参数计算而得到的工期。(2)要求工资:任务委托人所提出的指令性工期。(3)计划工期:根据要求工期和计算工期所确定的作为实施目标的工期。非答案,注:工程网络计划的计划工期不应超过要求工期。当计算工期大于要求工期时,需要对网络图进行优化。【

2022-04-09 16:11:59 1948

原创 范围管理案例分析——常见问题及答案

【问题1】请用400字以内的文字,说明范围管理应包括的主要内容。答:(1)规划范围管理;(2)收集项目需求;(3)定义范围;(4)创建WBS;(5)确认范围;(6)控制范围【问题2】请用400字以内的文字说明,本项目在范围管理方面出现的问题。答:(1)从一开始就没有做好项目范围管理工作或做得不好;(2)让用户自己去提需求,而不是自己去分析;(3)出现需求变更或变更冲突时,也没有相应的变更控制系统来约束;(4)开发人员没有认识项目范围控制重要性,没有弄清

2022-03-28 23:44:18 1188

原创 php多维数组排序

array_column() 和 array_multisort() 搭配使用<?php$data = array( array( 'id' => 5698, 'first_name' => 'Bill', 'add_time' => 1234, ), array( 'id' => 4767, 'first_name' => 'Steve', 'add_time' => 1233, ), arr

2022-02-14 15:04:09 732

原创 mysql回表查询优化

1.什么是回表查询前提:本次测试使用的是mysql 5.6版本。1. 1 mysql的存储引擎mysql的存储引擎分类比较多,比较常用的是MyISAM和InnoDb两种,具体各种存储 引擎就不详说了。1. 2 InnoDb存储引擎InnoDb存储引擎又有两大类索引聚集索引(clustered index)普通索引(secondary index)1. 3 聚集索引和普通索引的区别InnoDb的聚簇索引的叶子节点存储行记录,因此InnoDb必须要有聚簇索引且仅有一个聚簇索引。聚簇索引也是

2022-01-04 11:09:31 1230

原创 Go sync.WaitGroup

1 前言WaitGroup是Golang应用开发过程中经常使用的并发控制技术。WaitGroup,可理解为Wait-Goroutine-Group,即等待一组goroutine结束。比如某个goroutine需要等待其他几个goroutine全部完成,那么使用WaitGroup可以轻松实现。以下是1个goroutine等待另外2个goroutine结束的例子:package main import ( "fmt" "sync") func main() { var

2021-12-26 22:31:42 890

原创 go time.after

Golang time after典型用法time after触发,例子:package mainimport ( "fmt" "time")func main() { fmt.Println("Start Time =", time.Now()) a := time.After(5*time.Second) fmt.Println(<-a) fmt.Println("End Start Time =", time.Now())}程序运行后,输出如下图所示:我们看到,t

2021-12-19 23:14:37 1151

原创 go channel && select

channel 简介goroutine 是 Go 中实现并发的重要机制,channel 是 goroutine 之间进行通信的重要桥梁。channel 是一种go协程用以接收或发送消息的安全的消息队列,channel 就像两个go协程之间的导管,来实现各种资源的同步。声名创建 channel 常用两种方式,//方式1:使用make创建(必须定义其传递的数据类型)ch :make(chan int, 2) //创建缓冲通道ch :make(chan int) //创建非缓冲通道ch :mak

2021-12-19 22:44:15 854

转载 go常用锁Mutex和RWMutex

go常用锁Mutex和RWMutex

2021-12-16 10:03:09 654

原创 golang之race

由于golang中的go是非常方便的,加上函数又非常容易隐藏go。所以很多时候,当我们写出一个程序的时候,我们并不知道这个程序在并发情况下会不会出现什么问题。所以在本质上说,goroutine的使用增加了函数的危险系数。比如一个全局变量或公共变量,如果没有加上锁,我们写一个比较庞大的项目下来,就根本不知道这个变量是不是会引起多个goroutine竞争。看一下下面的例子,思考下val变量是否需要加锁?package main import( "fmt" "time") fun

2021-12-14 19:49:30 1238

原创 互斥锁、读写锁、自旋锁、悲观锁、乐观锁

互斥锁当有一个线程要访问共享资源(临界资源)之前,会对线程访问的这段代码(临界区)进行加锁。如果在加锁之后没释放锁之前其他线程要对临界资源进行访问,则这些线程会被阻塞睡眠,直到解锁,如果解锁时有一个或者多个线程阻塞,那么这些锁上的线程就会变成就绪状态,然后第一个变为就绪状态的线程就会获取资源的使用权,并且再次加锁,其他线程继续阻塞等待。特点:一次只能一个线程拥有互斥锁,其他线程只有等待应用场景:互斥锁会将操作串行化,可以保证操作完全有序,适合资源只能由一个协程进行操作的情况,并发能力弱;读写锁

2021-12-14 16:50:27 1891

原创 go语言 mutex锁

sync.Mutex 互斥锁type Mutex struct { // 包含隐藏或非导出字段}Mutex是一个互斥锁,可以创建为其他结构体的字段;零值为解锁状态。Mutex类型的锁和线程无关,可以由不同的线程加锁和解锁。Lockfunc (m *Mutex) Lock()Lock方法锁住m,如果m已经加锁,则阻塞直到m解锁。Unlockfunc (m *Mutex) Unlock()Unlock方法解锁m,如果m未加锁会导致运行时错误。锁和线程无关,可以由不同的线程加锁和解

2021-12-08 19:17:23 362

转载 go语言 func函数

一、函数定义函数是结构化编程中最小的模块单元,日常开发过程中,将复杂的算法过程分解为若干个小任务(代码块),使程序的结构性更清晰,程序可读性提升,易于后期维护和让别人读懂你的代码。编写多个函数的主要目的是将一个需要很多行代码的复杂问题分解为一系列简单的任务(那就是函数)来解决。在实际编程中,我们把重复性的任务抽象成一个函数。和所有的编程语言一样,Go语言支持各种风格的函数。在Go语言中,当函数执行到代码块最后一行 } 之前或者 return 语句的时候会退出,其中 return 语句可以带有零个或多个

2021-12-08 19:01:04 8476

原创 remote: Support for password authentication was removed on August 13, 2021. Please use a personal ac

一、问题描述remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.具体如下:大概意思:你原先的密码凭证从2021年8月13日开始就不能用了,必须使用个人访问令牌(personal access token),就是把你的密码替换成token!二、 github为什么要把密码换成tokengithub官方解释1、修改

2021-12-03 18:36:07 9146 1

原创 php根据代码反推场景,巧用debug_backtrace()

1.先写一个统计方法调用路径的方法/** * @desc: 统计方法调用路径 * @date: 2021-11-9 */ public function statisticsAllFunctionPath() { //连接redis $redis = ZFactory::getRedis('***Redis'); $redis_key = "FunctionPath"; //记录场景路

2021-11-15 15:11:32 353

php圈复杂度 phploc.phar

php圈复杂度 phploc.phar

2022-05-05

timthumb.php

通过使用下载文件快速完成多图片、大图片加载的功能,详细介绍可以到本人博客下的《html压缩图、多图加载》文章查看

2020-04-30

空空如也

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

TA关注的人

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