
PHP
文章平均质量分 70
王中阳讲编程
公司技术总监,创办就业陪跑服务,辅导学员拿到600多个offer。专注程序员的就业辅导、简历优化、模拟面试等。
展开
-
记录一次网站首页被刷量的经历,对网站页面静态化处理的思考和尝试
有一个N多年前的老项目,接到了服务器的报警短信,带宽和CPU都超过了80%。紧接着网站打开特别慢,然后挂掉了, 首先查询统计平台,发现同时在线人数为0,感觉很奇怪。马上想到因为网站已经挂掉了,无法执行有一个N多年前的老项目,接到了服务器的报警短信,带宽和CPU都超过了80%。紧接着网站打开特别慢,然后挂掉了, 首先查询统计平台,发现同时在线人数为0,感觉很奇怪。马上想到因为网站已经挂掉了,无法执行原创 2022-10-01 22:11:27 · 1206 阅读 · 1 评论 -
2022最新:5千字有答案的后端面试题
上一篇文章介绍了我的上岸之旅:【求职复盘】我为什么又能面试一次就拿到offer,受到了大家的关注,也有不少小伙伴希望分享面试题。今天这篇文章除了汇总后端通用的面试题外,还汇总了PHP岗位相关的面试题,Go和Java的小伙伴们不要着急,下一篇文章整理Go、Java相关的面试题。关于金三银四跳槽想成功上岸,我再多唠叨一句,一定要科学的做好准备工作:原创 2022-03-27 09:28:06 · 1636 阅读 · 0 评论 -
【求职复盘】我为什么又能面试一次就拿到offer
先说结论:我又和上次一样,面试一次就成功拿到offer了,一次上岸!文章比较硬核,内容比较长,请耐心看完,对你必有帮助。正文中提到的相关文章,会在文章结尾列出来,一定会对大家有帮助,大家可以在通读完本篇文章之后再看。跳槽原因首先说出我的观点:频繁跳槽肯定是不好的,有些公司尤其是大厂对应聘者的稳定性还是有比较高要求的。熟悉我的朋友们应该还记得我去年这个时候换过工作,感兴趣的同学可以查看这两篇文章:复盘一下后端工程师是如何在一个晚上拿下腾讯大佬的,入职一个月我和腾讯大佬都学到了什么。通过文章标题大.原创 2022-03-27 09:23:36 · 662 阅读 · 1 评论 -
composer加速镜像 composer安装内存不足问题 composer安装Excel插件
国内加速镜像,全局安装:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/memory_limit=-1:解除内存限制–prefer-dist:使用–prefer-dist参数,为了强制使用压缩包,而不是克隆源代码。php -d memory_limit=-1 /usr/local/bin/composer require "maatwebsite/excel:2.1.10" comp原创 2021-11-23 16:09:39 · 440 阅读 · 0 评论 -
Laravel 表单验证 使用技巧
文章目录表单验证怎么设置动态的验证规则?自定义抛出422状态码图片验证自定义验证错误的信息某些条件的验证规则更改默认验证消息预验证第一次验证错误时就终止程序Last but not least表单验证怎么设置动态的验证规则?如果我们的限制规则是动态依赖于其他条件的,那么我们可以动态地创建规则数组 public function save(Request $request) { $validationArray = [ 'title' =>原创 2021-11-16 17:46:15 · 882 阅读 · 2 评论 -
服务端通过nosql加锁解决并发问题实战
并发问题的解决思路首先想到的就是加锁,比如mysql加锁,解决并发问题。这类文章很多,就不赘述了。再者是nosql加锁,解决mysql加锁解决不了的情况,毕竟nosql的性能是比mysql等关系型数据库快很多的,nosql加锁的并发级别比mysql等关系数据库的要高。nosql加锁的案例我的业务场景是每天第一次登陆APP发优惠券我在业务代码里已经添加了是否存在的判断,如果今天已经给同一用户在同一时间下发了相同来源的优惠券则不重复下发因为业务需要是相同类型相同来源的优惠券可以给同一个人在同一原创 2021-11-15 14:14:34 · 1188 阅读 · 2 评论 -
性能优化反思:不要在for循环中操作DB
文章目录举个栗子场景说明举例说明:进一步优化性能对比注意参与互动如何提高程序运行速度,减轻服务器压力是服务端开发必须面对的一个问题。简单且朴素的原则:不要在for循环中操作DB,包括关系型数据库和NoSql。我们应该根据自己的业务场景,在for循环之前批量拿到数据,用尽量少的sql查询批量查到结果。在for循环中进行数据的匹配组装。举个栗子场景说明业务在多个情景下需要获得用户的详细信息,有点可以通过查询用户表直接获取到,有的需要查询关联关系表获取到,有的只保存了关联的id,并没有单独创建原创 2021-11-02 23:05:16 · 984 阅读 · 1 评论 -
使用 Laravel Horizon 优雅的终止进程(1)
文章目录抛出问题解决办法下面开始隆重介绍 Horizon简介安装升级 Horizon配置均衡配置失败任务记录仪表盘权限验证总结下期再见抛出问题我们发布新版本代码时,如果优雅的终止运行中的异步任务,规避异步任务运行到一半被kill掉的情况。解决办法通过调研之后发现,laravel 的 horizon 扩展可以解决这个问题,使用下面的命令可以优雅的结束进程:确保进行中进程不会被kill掉,执行结束后才允许被kill;非进行的任务等候,不会加入到队列中;优雅的解决了这个问题,思路就是这么的朴实无原创 2021-10-25 16:03:32 · 2577 阅读 · 4 评论 -
Git使用实战:多人协同开发,紧急修复线上bug的Git操作指南。
文章目录使用场景解决思路操作流程附录:Git使用的小技巧Git命令别名总结使用场景团队协同开发时,生产环境出现bug,需要紧急修复。每位同学在本地开发,对应本地的dev分支,本地测试通过后提交到测试环境的dev分支。测试环境有其他同学提交的代码,正在测试中,无法提交到生产环境的master分支。以上情况导致我们不能在本地基于dev分支修复bug,因为会和其他同学提交的测试中的代码“撞车”,导致无法及时提及到生产环境。这个时候如何正确使用Git管理代码呢?解决思路首先我们从master.原创 2021-10-22 16:51:51 · 2619 阅读 · 3 评论 -
Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 134217736 bytes)
亲测最简单有效的解决方案:php -d memory_limit=-1 /usr/local/bin/composer require xxx/xxxx原创 2021-10-21 10:06:36 · 376 阅读 · 0 评论 -
Laravel解决高并发问题的思路
问题复现客户端并发请求扣费接口,导致重复扣费;服务端的加锁逻辑不正确,锁加到了非核心逻辑上,即加到了消费记录表,而不是加到了核心业务表。有问题的代码首次进入聊天房则扣费,再次进入不重复扣费这个思路无法规避并发问题 public function agoraToken(Request $request) { . . . try { DB::connection('footpri原创 2021-09-11 14:13:21 · 2057 阅读 · 1 评论 -
Laravel如何优雅的设置全局变量 | PHP Laravel专栏
思考:PHP如何定义全局变量,不需要通过controller传递,就可以在model中直接使用?场景和考虑model层封装消费逻辑,需要区分是Android端的请求还是iOS端的请求,分别扣除不同账户的金币要精简代码逻辑,不想需要调用的地方都一层一层的传值到消费model,这样太繁琐了。优雅一点~经过一番调研之后,找到了解决办法如下:如何获得全局变量?Request::get(“deviceType”) 获得了全局变量设备类型,即deviceType。这段代码是在model层中.原创 2021-09-06 14:56:06 · 2525 阅读 · 0 评论 -
如何自动收到错误报警?
啥样的后端程序员是好程序员?能机器做的事绝不自己做,哈哈。场景复现客户端:后端接口报错了,我解析数据失败,你看看为啥?服务端:好,我查查log。你把请求参数给我打印出来。客户端:我咋打印?服务端:…我还是自己查log吧以上这种场景在开发中是不是时有发生?是不是很难顶?有啥好办法让debug更智能一点吗?分析不管哪个语言做服务端开发,一定有异常处理和日志。找到一个三方平台,当捕获到异常或者有新的打印日志时回调,推送错误日志给我们。经过一番调研之后,发现钉钉的机器人是个好工作.原创 2021-07-19 17:27:50 · 235 阅读 · 0 评论 -
Go gorm是时候升级新版本了 2.0新特性介绍(1) |Go主题月
今天是公元2021年3月30日,坊间流传PHP的git服务器被黑客攻入,因恶意代码服务器将关停,PHP还是世界上最好的语言吗?不知道,我是转Go了。今天本来是想写gorm相关的知识点的,遇到了批量插入的问题,发现很不科学,才发现gorm已经出了新版本2.0版本,最新的Tag是v1.21.6,我目前使用的是v1.9.10。下面介绍新版本的特性GORM 2.0 完全从零开始,引入了一些不兼容的 API 变更和许多改进。Context 支持通过 WithContext 方法提供 context.C.原创 2021-03-30 19:39:34 · 2564 阅读 · 0 评论 -
记录一次网站首页被刷量的经历,对网站页面静态化处理的思考和尝试
还原故事背景接到了服务器的报警短信,带宽和CPU都超过了80%。紧接着网站无法打开了第一反应就是被刷量了定位问题首先查询统计平台,发现同时在线人数为0,感觉很奇怪。马上想到因为网站已经挂掉了,无法执行到统计js,所以在线人数并不为0马上查询Nginx的logtail -f /data/logs/nginx/access.log 在查询access.log的时候发现几个接口以肉眼可见的速度疯狂滚屏,问题就在这里了。分析日志,发现这些接口的请求竟然是自己的机器,说明攻击者不是再curl原创 2021-03-26 17:05:15 · 431 阅读 · 0 评论 -
进程 线程 协程 各自的概念以及三者的对比分析
文章目录进程线程进程和线程的区别和联系区别联系举例说明进程和线程的区别进程/线程之间的亲缘性协程线程(执行一个函数)和协程的区别和联系协程和多线程的优势?为什么有了多线程还要引入协程?更多参考进程概念进程,直观点说,保存在硬盘上的程序运行之后,会在内存空间里形成一个独立的内存体,这个内存体有自己独立的地址空间,有自己的堆,上级挂靠单位是操作系统。特点操作系统会以进程为单位,分配系统资源(CPU时间片,内存等资源),进程是资源分配的最小单位。示意图线程概念线程,有时被称为轻原创 2021-03-09 15:53:43 · 4864 阅读 · 5 评论 -
web开发必懂的概念和底层原理,通过对比的方式让大家更好的理解和使用。
文章目录TCP协议和UDP协议的对比?TCP协议的优点:TCP协议的缺点:各种攻击的名词解释阻塞调用和同步调用的区别?关于同步异步I/O 和 阻塞非阻塞I/O 更深刻的理解http与https的区别?session与cookie的对比?输入一个网址到浏览器渲染出页面的流程是什么?TCP协议和UDP协议的对比?TCP协议的优点:可靠稳定TCP在传输数据之前,会有三次握手来建立连接TCP在传输数据时,有确认、窗口、重传、拥塞控制机制TCP在传输数据完成后,会断开连接用来节省系统资源TCP协议的原创 2021-03-08 18:45:47 · 3315 阅读 · 1 评论 -
百度智能云 API鉴权总结
最近在研究百度云的一些服务,处理api接口鉴权时花了不少时间,总结一下,方便大家对接:Signer.php:签名工具类,鉴权签名的核心方法都在这里Utils.php:封装的工具类,鉴权,返回json数据等都在这里Account.php:示例Controller,请求百度云接口文章目录签名工具类封装的工具类,集成了常用的方法业务层controller:百度api在请求接口的同时做权限校验使用的tp5框架,代码仅供参考,思路可以供大家借鉴,如有不当之处,欢迎指正签名工具类Signer..原创 2021-03-08 14:32:39 · 2550 阅读 · 6 评论 -
多维度思考:如何提高项目的开发时间、提高安全性、提高运行速度,从多个维度带来的一些思考。
除了保证项目如期上线,如何保证项目上线后的运行速度,如何提高容灾能力,减少bug同样是我们需要考虑的问题。我们从以下几个方面来探究思考,抛砖引玉,看看大家是否有其他维度来提高项目,欢迎在评论区留言。文章目录1.框架选择方面(开发速度、项目性能)我们来探究一下相较于其他框架,为什么swoole的速度更快?swoole是如何做到的?2.数据库存储引擎方面(性能)我们通过对MySQL的MyISAM和InnoDB存储引擎做对比,来分析数据库对项目性能的影响3.算法方面(性能)我们通过深入了解算法相关的概.原创 2021-03-05 09:23:23 · 1854 阅读 · 19 评论 -
如何通过查源码的方式解决编程中遇到的问题?查源码定位问题的思路是什么?
首先抛出我的疑问:laravel的底层是如何处理HTTP请求的?laravel的Request是如何实现的?为什么不需要配置Nginx的url解析,也不需要在laravel的router中配置参数名称,却可以通过Request接收到参数呢?实现原理是什么?下面开始进入查源码之旅:首先调研了一下laravel的request是基于什么实现的?知识点如下:laravel的很多底层组件是基于Symfony实现的,比如:请求、响应、cookie、命令行,文件等。其中HttpFoundation组件原创 2021-03-03 18:16:39 · 7802 阅读 · 22 评论 -
参考https加解密思路 实现自己网络请求数据传输的安全性,一致性,防篡改。(对称加密+非对称加密)
首先说明一下对称加密和非对称加密的概念。对称加密:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。非对称加密:非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。对称加密的特点:对称加密算法的优点是算法公开、计算量小、加密速原创 2021-03-01 16:51:02 · 9220 阅读 · 11 评论 -
Laravel修改消息队列相关代码后不生效怎么办?
首先说明,我是Learnku的忠实粉丝,人家的教程和wiki都整理的非常棒,我就不搬砖了。安利他们写的教程如下:如何使用消息队列Laravel使用消息队列需要注意的问题我要说的原因很简单,修改消息队列相关的代码后一定要重启supervisor,用下面的命令重启sudo supervisorctl rereadsudo supervisorctl updatesudo supervisorctl start laravel-worker:*...原创 2020-08-05 22:31:39 · 1145 阅读 · 0 评论 -
mongodb如何做安全防护,避免被攻击删除 勒索威胁
因为mongo默认是不开启auth校验的,如果在服务器上自己部署mongo,那么只要破解了服务器密码,就能直接访问mongo了,有很多的mongo都在裸奔,很不安全。下面说2种简单却非常有用的防护措施。1. 修改mongo监听的默认端口在mongod.conf中修改 一般该文件存储在 /etc/mongod.conf修改port为自己的端口,比如可以修改为 26028,修改完,重启mongo: /usr/bin/mongod --dbpath=/var/lib/mongo --logpath=.原创 2020-08-03 18:42:55 · 1114 阅读 · 0 评论 -
PHP在Linux系统下安装mbstring扩展
今天遇到了一个很坑的问题,提示如下Call to undefined function mb_detect_encoding()上网查了很多资料都说安装mbstring的扩展,然而并没有成功,一直提示各种奇怪的错误,套娃错误。。。想了很久最终发现我的PHP安装包下虽然有mbstring的目录,但是里面的文件不全,猜测是这个原因导致的,所以换了个思路,下载一个版本一致的php安装包,重新安装一遍mbstring,说干就干,最终成功,把这个采坑过程整理如下:下载对应PHP版本的镜像,我下载的是5.6原创 2020-08-03 11:18:57 · 1555 阅读 · 2 评论