自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据库时区和timestamp

问题:迁移后时间变了。迁移前数据迁移后数据查看时区show VARIABLES like '%time_zone%';迁移前时区迁移后时区这是什么意思?首先time_zone显示的是当前数据库设置的时区,然后system_time_zone顾名思义就是数据库所在系统的时区,而当time_zone的值是system(默认)的时候,代表我们mysql数据库使用系统时区。那有什么影响?时区的变化,影响的必然就是时间了,而在mysql中,我们存储时间的方式主要是四种;使用mysql

2022-04-24 16:25:36 3571

原创 Predis\ClientException: Command ‘ZPOPMAX‘ is not a registered Redis command

问题在使用predis包的时候,使用redis的ZPOPMAX命令,发现报错了,错误提醒如下:Predis\ClientException: Command 'ZPOPMAX' is not a registered Redis command经过对predis的源码进行调试,发现predis包里,predis/src/Profile/目录下存储了一系列的redisversion文件,里面记录了redis在对应版本及其以下版本中redis的命令。...

2022-03-22 15:24:01 1278

原创 mysql中between和in的区别

下面两条语句有什么区别,为什么都提倡使用范围查询 ?select * from T where k in(1,2,3,4,5)select * from T where k between 1 and 5其实between和in这两个关键字应用的场景重合度并不高,但是我们可以通过思考这么一个问题,来理清这两者执行的执行过程和逻辑。要回答这个问题就需要先了解索引的数据结构,以及mysql索引利用b+树执行查询的执行过程,这里先默认大家具备了这个条件。先区分下可能的情况。第一个是k字段是主键,第

2021-11-02 17:10:21 4035 2

原创 PHP的弱等比较踩坑

php的比较符由于PHP是弱类型语言的缘故,绝大多数的PHP开发人员在开发的时候,对于变量的类型其实都没有过多的去关注和了解,这可能会导致一些非常严重的问题。之前的一次编码 写了一个 1 == $x 的判断,其中$x是一个字符串,因为写php在平时编码的时候也没有太过于注意类型这一块,并且在自测以及测试人员测试的时候,也并没有测出来问题。但当更多类型的数据被用来执行这个判断的时候,最终出现了问题。初见之下 是否觉得 1 == $x 好像也没什么问题呢。接下来写几个例子大家来判断一下var_dump(

2021-10-22 16:49:18 241

原创 switch函数容易被忽视的逻辑

官方文档定义:switch 语句类似于具有同一个表达式的一系列 if 语句。很多场合下需要把同一个变量(或表达式)与很多不同的值比较,并根据它等于哪个值来执行不同的代码。这正是 switch 语句的用途。现在来看一些示例:$a = 1;switch ($a) { case 1: echo "aaaa" . PHP_EOL; break; case 2: echo "bbb" . PHP_EOL; break; case 3:

2021-10-22 13:02:43 444

原创 树与堆学习

树与堆之前提到树和堆的一个定义,树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。堆就是用数组实现的二叉树.那么树是究竟有几种实现方式呢? 目前来说,是两种链式存储基于链表的树,相信大家都能比较直观的理解.以二叉树为例,从上图可以看到,树的每个节点是由数据域和指针域构成,一个指针指向父节点,其他的指针指向子节点,根节点没有父节点指针,叶子节点没有子节点指针.二叉树主要有两种遍历方式:深度优先遍历:先往深走,遇到叶子节点再往回走。广度优先遍历:一层一层的

2021-09-19 14:06:32 125

原创 动态规划-背包问题

动态规划-01背包动态规划中最为经典的题目必然就是背包问题, 而背包问题的基础就是01背包.引用一个大佬梳理的背包图解由上图可以看到,01背包其实就是背包选物品,一种物品只有一个,要么选,要么不选.先通过一个简单的01背包问题来理解01背包问题.01背包有N件物品和一个最多能被重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。| 物品名称 | 价值 | 重量 || -----

2021-09-09 21:16:43 103

原创 PHP内存溢出和垃圾回收

内存溢出[2021-09-03 21:03:10] local.ERROR: Symfony\Component\Debug\Exception\FatalErrorException: Allowed memory size of 268435456 bytes exhausted (tried to allocate 12288 bytes) in D:\penghao\project\api\vendor\guzzlehttp\psr7\src\Stream.php:95Stack trace:

2021-09-07 18:28:02 725

原创 mysql的leftjoin踩坑

mysql的leftjoin踩坑使用MySQL的left join时,遇到的坑, 总的来说就是关于条件放在on里还是放在where里的问题.举例有一个公司表和雇员表idname1A公司2B公司idnamesexcompany1张三112李四123小红22统计所有公司的名称,以及公司下男员工数量//第一印象写下来的sqlselect a.name, count(b.id) as num from com

2021-09-04 19:00:16 431

原创 lumen时区设置

lumen时区设置项目升级到lumen8.0过后陆陆续续又发现了一个问题,在lumen5.7中,加载框架的时候,如果配置了时区,是会设置时区的,但是在lumen8.0中,去掉了时区设置的代码.这意味着 就算在.env中配置了APP_TIMEZONE=Asia/Shanghai也是无用的.需要自己手动,在入口文件中添加设置时区的代码.在Application.php中//lumen5.7public function __construct($basePath = null){ if (!

2021-09-03 23:05:45 288

原创 RabbitMQ php

概念消息队列,一般我们会简称它为MQ(Message Queue),先不管消息(Message)这个词,来看看队列(Queue)。队列是一种先进先出的数据结构.消息队列可以简单理解为:把要传输的数据放在队列中。应用场景为什么用消息队列?解耦异步削峰/限流解耦: 耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象。 解耦就是用数学方法将两种运动分离开来处理问题,常用解耦方法就是忽略或简化对所研究问题影响较小的一种运动,只分析主要的运动削峰/限流: 应用在一

2021-09-01 18:45:21 921

原创 Mysql悲观锁和乐观锁

大多数情况下我们是没有使用锁的悲观锁悲观锁,正如其名,它指的是对数据被外界(包括当前系统的其它事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排它性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。使用场景举例商品goods表中有一个字段status,status为1代表商品未被下单,status为2代表商品已经被下单,那么我们对某个商品下

2021-09-01 18:41:55 84

原创 动态规划-二维dp数组和滚动数组

二维数组如上图,一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?看到这道题,查找从A点到B点的路径,如果对图论比较熟悉的话,可能第一印象是用图论的深度优先搜索来实现.func dfs(i int, j int, m int, n int) int { if i > m || j > n { return 0

2021-08-31 16:22:41 2301

原创 laravel的console问题

将定时任务系统从lumen5.7升级到8.0后,执行php artisan xxx:xxx命令返回的错误码是1class BuyOppCommand extends Command{ protected $name = 'bidOpp:buyOpp'; protected $description = '竞价-购买商机'; public function handle() { return true; }}这是我们在lumen5.7中常用的con

2021-08-30 18:03:13 762

原创 PHP-FPM

PHP-FPM先说一下PHP-FPM的进程模型,PHP-FPM采用的是Master/Worker进程模型。当PHP-FPM启动时,会读取配置文件,然后创建一个Master进程和若干个Worker进程(具体是几个Worker进程是由php-fpm.conf中配置的个数决定)。Worker进程是由Master进程fork出来的。Master进程和Worker进程的作用:Master进程:负责管理Worker进程、监听端口Worker进程:处理业务逻辑PHP-FPM进程管理方式PHP-FPM进程

2021-08-28 15:57:35 1898

原创 基础数据结构

数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 。常用的数据结构有:数组,栈,链表,队列,树,图,堆,散列表等.数组arr := [5]int{1,2,3,4,5}数组是可以再内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始。优点:连续存储.查询单个元素速度快,数组遍历速度快缺点:数组一旦创建,数组的大小就固定了.数组只能存储一种类型的数据数组添加,删除的操作需要移动后面的元素,所以

2021-08-28 15:45:27 175

原创 动态规划基础

基本思想:问题的最优解如果可以由子问题的最优解推导得到,则可以先求解子问题的最优解,在构造原问题的最优解;若子问题有较多的重复出现,则可以自底向上从最终子问题向原问题逐步求解。动态规划中每一个状态一定是由上一个状态推导出来的,将问题拆分成子问题,求最优解. 这一点就区分于贪心,区别于贪心算法的是贪心没有状态推导,而是从局部直接选最优的.对于动态规划问题,拆解为如下五步曲;- 确定dp数组(dp table)以及下标的含义- 确定递推公式- dp数组如何初始化-&nb

2021-08-28 15:39:46 109

原创 PHP抽象类和接口

#抽象类和接口#接口和抽象类的概念不一样。这个可以理解为接口是对动作的抽象,抽象类是对根源的抽象(即对本质的抽象与其他类的本质不同)。抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类,他们的抽象类是人。说明,他们都是人。人可以吃东西,狗也可以吃东西,你可以把“吃东西”这个动作定义成一个接口,然后让这些类去实现它.所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。抽象类是基于类来

2021-08-20 10:53:12 153

空空如也

空空如也

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

TA关注的人

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