- 博客(26)
- 收藏
- 关注
原创 crontab管理员时间过期问题
日常业务中有很多定时任务,昨天发现其中一个定时没有跑,检测定时脚本没问题后,测试添加一个新的定时脚本,发现也没有跑起来,锁定问题定时任务没有唤醒,通过查看cron日志发现报错:FAILED to authorize user with PAM (Authentication token is no longer valid; new one required通过chage指令查看发现下图中Password expires 对应的时间是前一天,也就是说当天就已经失效了,所以整体定时任务都没
2021-03-18 09:58:23
448
原创 微信公众号关注回复,关键字回复全流程开发
最近开发了微信关注回复和关键字回复功能,发现网上虽然资料很多,但大都是截取片段,很难弄懂全部流程,所以自己花点时间总结了一下全流程开发,记录一下,希望对搜到看到的朋友有所帮助。第一部分:微信后台配置需要配置一下服务器地址和令牌,服务器地址就是你需要开发的代码地址,举例说明:假如我的域名是www.baidu.com,我需要在代码目录/php/wxreply.php中进行微信回复功能开发,那我的服务器地址就是 https://www.baidu.com/php/wxreply.php。令牌自己起个名
2020-12-17 20:17:40
2189
原创 php中‘‘和““的区别及使用
""和''通常是php用来定义字符串时使用。 定义一个字符串最简单的方法是使用单引号把它包围起来。在php中想要表达一个单引号,则需要使用\来进行转义例:\' 衍生下想要表达一个\自身则需要使用两个反斜线。例:\\ 在PHP官方文档中是这样定义的:不像双引号和heredoc语法结构,在单引号字符串中的变量和特殊字符的转义序列将不会被替换。也就是说在单引号中的内容不会被php解释。 如果字符串是包围在双引号中,php将对其中特殊的字符进行解析。也就是说双引号中的变量和特殊字...
2020-12-09 16:20:13
29029
原创 日常sql需要注意的点(总结归纳,后续不断更新)
1.拉取数据时使用具体字段,而不是简单使用select * (具体情况具体分析)。2.在使用sql在数据库中直接更新数据时,首先先查询这条数据是否存在,然后再进行更新。3.有大量调用时一定要走索引(可以使用explain检测是否走索引查询)。4.通过sql直接操作数据库删除数据时一定要加limit,例:delete from table where id = 1 limit 1;5.数据表建立时应做好表注释和字段注释,这个对于对接相当重要(很多时候数据表就是整个业务的灵魂,加注释是一个很好的
2020-12-08 19:53:32
500
原创 计算机基础之--原码,反码,补码
最近在处理discuz中帖子状态时接触到大学时学过的计算机基础(谁说大学学过的真正工作时不会用到,打脸),在这里记录一下,重新复习下大学的计算机基础。一:机器数与真值 众所周知,计算机的世界是二进制的世界,0,1代表万物,我们代表一个数字,同样也是用0,1来组成,比如数字6用二进制表示为 00000110,数字有正负区分,所以二进制中最高位用来区分正负,0代表正1代表负,所以1000 0110 代表-6,刚才的举例中0000 0110,1000 0110就是机器数,其中代表机器数真正的数值的6...
2020-12-04 16:51:03
1347
原创 到底什么是缓存击穿,缓存雪崩,缓存穿透(简短一篇文章带你了解)
相信在开发中,很多小伙伴都会前前后后接触到缓存,与之而来的是缓存存在的一些问题,首先我们应该清楚的认识到缓存的目的是减少db的访问,保护db,与此同时,缓存存在的问题也就是没法保护db的问题,那么到底什么是缓存穿透,雪崩,击穿呢?缓存雪崩:首先我们来讲讲缓存雪崩,顾名思义就是在某个时刻中,大量的缓存同时失效,导致大量的访问直接到达db,这样的现象叫做缓存雪崩,防止缓存雪崩可以在设置缓存是增加随机数失效时间,只要在某个时候缓存不会同时失效即可。缓存击穿:缓存击穿是指在缓存中查找时没有找到需要的数据,那么就
2020-12-03 17:33:16
603
原创 数据脚本大分页的处理方式
日常开发工作中,不可避免的事绝对是跑一些数据脚本,不管你使用的什么语言(php是世界上最好的语言),你都会开发一些数据脚本进行相关的数据处理,当数据量不大时,我们只需要通过取数据处理就可以,当到达一定的数据量时,我们总是会使用分页来处理数据,但是当数据量很大时,你会发现你的数据脚本的速度越来越慢,这个时候就得考虑分页是否真的适合大分页的数据脚本了。 首先来探究下mysql中limit offect,rows,在mysql中limit后可带两个参数offect代表偏移量,rows代表所需行数。假设有...
2020-11-23 16:57:39
95
原创 mysql中find_in_set的使用
最近处理了一个模糊匹配的问题,当时第一反应是使用like,但是考虑到like效率实在太低,最终放弃了like,我这边的数据有两个字段,一个是税种,一条数据可能对应多个税种,格式统一,多个时使用,分割,另一个字段是发文单位,同样的多个发文单位也是使用,分开,我这边需求是使用税种和发文单位两个字段就行交叉筛选模糊匹配,考虑到字段格式和效率最终使用mysql的find_in_set函数。find_in_set(str,strList);str:需要匹配的字符串strList:需要查询的字段(,分开)
2020-10-27 19:55:29
97
原创 mysql查询时间戳转换成日期格式
在很多的数据表中,很多日期的记录都是以时间戳的格式来存储,在查询的时候无可避免的会带来查看数据的不方便,作者在之前总是通过程序的方式去处理,后来通过查询,发现可以直接在数据表中进行查询。如下图中regdate是时间戳的格式,没法直接了当的进行查看时间。mysql中可以进行转换select *,from_unixtime(regdate,'%Y-%m-%d %H:%i:%s') as regtime from tax_common_memberorder by regdate asc;..
2020-09-25 16:54:45
1855
原创 discuz中的定时任务
discuz定时任务代码目录 /source/include/cron/ 在cron目录下创建对应的php文件,可以清理一些缓存之类的操作(例:搜索结果数据放在表中每天会清理一次)对应目录下创建好之后再到后台进行定时任务配置下图为目前代码目录和对应的定时执行配置应该注意的是后台配置支持分时日月周的配置,每小时至多配置12个分钟数,也就是说每小时至多可以执行12次。...
2020-09-25 16:37:34
454
原创 数据库的主从复制,读写分离。
相信作为一个服务器端开发者,数据库是“必修的一门课”,今天主要讲讲什么是数据库的主从同步,读写分离。在*古代*,互联网刚起步的时候,数据库中存储的数据是很小的,一台数据库完全可以搞定一切,随着时间的推移,互联网作为连接一切的中介,世界上任何一个地方的人都可以访问你的网站,并且随着互联网经济的急速扩张,数据量大成为了随之而来的问题。尤其是今天,数据代表着一个公司的价值,有价值的数据代表着这个公司的未来发展战略等。数据量的急速膨胀带来一个主要矛盾,数据库改怎么进行存储成了最棘手的问题,前辈们想出了主从复制这
2020-06-06 21:41:55
186
原创 对象复制和对象赋值引用的区别
最近看到一个很有意思的对象处理相关问题。在php中使用clone可以克隆复制一个对象,克隆的对象是和被克隆的对象相等的,但不是全等的。clone对象的定义是在对对象的属性进行一个浅复制,所有的引用属性仍然是指向原来变量的引用。<?phpclass myTestClass{ public $name = "name"; public function __construct(){ $this->name = $name; } public function getNmae(
2020-06-03 16:24:59
303
原创 电商系统搭建(商品订单模块)
借助直播的东风,电商系统正在飞速发展,那么如何从0开始搭建电商系统。这篇文章就介绍一下怎么简单的搭建一个电商系统,首先从电商系统的核心(订单)来开讲。数据结构设计商品表,商品细节表,订单表,订单细节表商品表中涉及到主要字段有 商品id,商品name,商品price,商品status,商品stocks(库存)以及一些其他的商品属性等商品细节表中可以存放一些商品的细节属性等(可能用于展示等数据,而不是逻辑处理需求的)订单表中涉及到订单用户uid,订单id,订单数量,订单付款金额,订单时间
2020-05-28 09:06:02
1607
原创 php可变变量,还可以这样命名$$$var?
在php中有一种变量是可变变量,一个变量的变量名和值可以动态的设置和使用。一般而言,在php中申明变量为: $var = "this is a variable"估计很少有开发者使用可变变量来处理一些需求,我在实际工作中也没有使用过,只是最近在系统性的过php文档时发现这种有趣的变量。具体是什么个意思呢。一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。例: $a = "hello"; “$$a”就表示$a的值作为变量名的值,说起来有点拗口,也就是$hello的值。$a ...
2020-05-25 15:17:13
141
原创 php中isset,empty,is_null的细节区分
在php文档中 isset()函数是判断一个变量是否被设置且为非NULL,来看一下示例。$var;var_dump(isset($var)); //false$var = null;var_dump(isset($var)); //false$var = 0;var_dump(isset($var)); //true也就是说isset()判断的是一个变量是否被定义且值不为nullempty()函数比较特殊,在官方文档中是这样定义的,empty()检测...
2020-05-25 11:01:25
169
原创 那些php中强制转化的坑
考验基本功的时候到了,你是否在php的道路上踩过坑,挂过彩。以下是我总结在类型强制转化上的一些坑,希望能够对读者朋友有帮助。功能点:1.强制转换成boolean布尔类型举例说明 当变量为空时转换成布尔类型全为false(空字符串"",空数组[],数字0,NULL)。2.强制转化成interger整型字符串转换成interger整型时全为0,空数组,false,小于1的浮点型,NULL,NAN强制转换后也是0,非空数组,true,小于2大于1的浮点数转换后为1(依此类推小于3大于2的浮点数转换
2020-05-18 16:29:50
203
原创 php中那些容易忽略的”大知识“ NAN
NAN相信phper在工作中或多或少的遇到过它,但是接下来的问题你未必会全部答对。1.NAN是什么类型的?2.判断(NAN || false) 为true还是false?3.判断(NAN == NAN) 为true还是false?4.判断(NAN === NAN) 为true还是false?5.var_dump(-NAN) 结果会显示什么?如果你能够答对以上五个问题,恭喜你,你对于浮点型的基础知识相当扎实。如果你在思考以上五个问题,并试图解答,那说明你对这块的知识是很欠缺的。
2020-05-14 14:27:57
877
原创 二叉树的三种遍历方式(详解)
二叉树的遍历二叉树的遍历方式有:1.前序遍历=(根左右) 2.中序遍历=(左根右) 3.后序遍历=(左右根) 如果有一个二叉树是这样的二叉树前序遍历:遵循根左右的原则第一步为根节点A,然后往A的左边遍历B,因为B也是根节点,继续往左遍历D,同理D也是根节点继续往左遍历H,H是叶子节点,没有了,往右遍历到I,现在已经遍历完了B的左面的全部节点,然后回到B的右节点继续遍历到E,遍历完...
2019-11-27 16:48:03
987
原创 周报系统的设计与实现
周报系统的设计与实现1.明确周报系统需要做什么?2.明确周报系统需要什么样的操作?3.周报系统中权限及职级划分处理是怎样的?在设计之前我先提出以上单个问题,可以先思考一下,思考之后进行相关设计。周报系统,其名可知是便于周报提交和查看的系统。既然需要查看和提交,自然而然其中牵涉到一些不同的权限问题。举例说明:A公司需要做一个周报系统,便于公司的业绩及相关绩效考核使用。需求是:&...
2019-10-28 18:04:59
2632
1
原创 git使用及原理
git使用及原理图示原理:git diff 执行时对比的是工作区(即 git init执行的目录)和 暂存区的区别git add 执行时是从工作区提交到暂存区git commit 执行时是从暂存区提交到本地代码仓库git commit -a 执行时首先会把工作区的记录提交到暂存区然后提交到本地代码仓库,可以理解为git commit -a是git add 和git commit的结合...
2019-10-18 13:10:28
110
原创 抽奖系统的设计与实现
抽奖系统的设计与实现数据结构设计:1.奖品表(涉及到的奖品配置)2.抽奖配置表(涉及到的一些抽奖规则和抽奖的限制等)3.中奖记录表(涉及到用户的抽奖次数等)4.奖励用户明细表(涉及到记录获奖用户信息及流水等)数据设计好之后,整个抽奖系统的思路及实现已一目了之。在开发的过程中抽奖系统设计了期整个概念,即抽奖按照期来进行,支持同时进行多期的抽奖活动。在奖品表中设计字...
2019-08-26 16:54:32
6356
原创 jqGrid使用细节
jqGrid使用细节sorttype【排序类型】: 设置字段在表格中显示的排序类型。sortable【是否可排序】:设置为true或者false(true代表可排序false代表不可排序)。editable【是否可进行编辑】:设置为true或者false(true代表可编辑false代表不可编辑)。search【是否课搜索】:设置为true或者false(true代表可以进行...
2019-08-13 17:11:29
471
原创 高内聚,低耦合的要义
高内聚,低耦合 代码编写的原则是高内聚,低耦合,简简单单六个字,清晰明了,但是一点不接地气,用现在的话说就是没有干货。如何编写高内聚,低耦合的代码?首先得有分层思想,例如在代码中有底层,有业务层,有高层,你在代码中是否各个层级之间互相调,如果是,一定会有很多耦合的东西,请仔细检查你的代码,条理清晰的代码应该是层级之间没有干扰的,一定记住,如果一个小需求的变动会引起很多代码的改动,请反思你的代...
2019-08-08 18:02:40
124
原创 行为采集设计思路及实施方案
行为采集整体架构图如图所示,上面是最近行为采集项目的整体架构。整体难点在于开发人员如何给事件配置条件,我们的解决方式是各个端采用统一的方式(将采集的点进行划分)将采集的点分为三层,具体埋点方式是分为项目级别,页面级别,埋点事件级别,这样埋点可以采用横切的方式进行。各个端开发人员在事件管理后台只需在本项目下增加由需求方创建的事件,给这一事件增减采集条件即可。服务器端和各个采集端采用http请求...
2019-07-30 17:49:31
664
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人