<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>命中水、</title><link>https://www.cxiansheng.cn/</link><description>Recent content on 命中水、</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Sat, 24 Jan 2026 11:23:00 +0000</lastBuildDate><atom:link href="https://www.cxiansheng.cn/rss.xml" rel="self" type="application/rss+xml"/><item><title>Laravel + Swoole 协程实战：一个多租户采集系统的真实落地方案</title><link>https://www.cxiansheng.cn/posts/laravel__swoole_xiechengshizhanyigeduozuhucaijixitongdezhenshiluodifangan/</link><pubDate>Sat, 24 Jan 2026 11:23:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/laravel__swoole_xiechengshizhanyigeduozuhucaijixitongdezhenshiluodifangan/</guid><description>&lt;blockquote&gt;
 &lt;p&gt;作为 PHP 开发者，我们迟早都会遇到一个瞬间：&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 
 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;代码没有报错，逻辑也没问题，但系统就是——慢。&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 
 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;不是慢一点，是那种&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;「明明只是检查 1000 个账号状态，却要跑半个小时」&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;「服务器 CPU 不高，但请求就是排着队等」&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;的慢。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;最近搞项目刚好遇到了一个业务场景，多租户系统中，根据账号采集数据，采集前先要确认账号是否有效（就像根据IP代理爬数据一样，爬数据前先确认代理是否有效），于是我按照以往的经验，很自然的写了这样一条链路：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;循环取出一个账号&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;检测状态&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;拉数据&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;账号异常，再换下一个账号，重复执行1、2、3&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;逻辑看似没问题，代码也很优雅。直到我测试的时候，跑了一次完整的任务。1000个账号，跑了30分钟还没跑完。我查看了CPU，内存也不高，但就是很慢。为什么呢？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;问题不在算力，而在于PHP在大量IO等待中，被迫排队！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这个时候就是协程（Coroutine）大显身手的时候了。下文将结合业务和实战（编码）深入理解协程，并展示如何在Laravel中构建基于协程的高性能多租户采集系统。&lt;/p&gt;</description></item><item><title>聊一聊我第一个由 AI 深度参与完成的真实项目</title><link>https://www.cxiansheng.cn/posts/liaoyiliaowodiyigeyou_ai_shenducanyuwanchengdezhenshixiangmu/</link><pubDate>Tue, 23 Dec 2025 10:59:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/liaoyiliaowodiyigeyou_ai_shenducanyuwanchengdezhenshixiangmu/</guid><description>&lt;blockquote&gt;
 &lt;p&gt;我不是前端工程师。&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 
 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;但这次，我一个人完成了一个包含&lt;strong&gt;聊天窗口、WebSocket 实时推送、多语言翻译、复杂 UI 状态管理&lt;/strong&gt;的前端项目。&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 
 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;说实话，如果没有 AI，这个项目我大概率会延期，甚至放弃一些体验上的细节。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="一前言"&gt;一、前言
&lt;a class="header-anchor" href="#%e4%b8%80%e5%89%8d%e8%a8%80"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;前端时间接了一个前端聊天+后端管理后台的项目，两个项目都是我自己一个人完成。&lt;/p&gt;
&lt;p&gt;说起来后端还好，但是前端html+css那套我最开始入行的时候学了一点，但是后面正式工作后主要还是围绕后端语言来展开，前端的那套样式语法就渐渐地放下了；&lt;/p&gt;
&lt;p&gt;但这次是一个全新的机会，也是一个新的挑战，需要自己写前端。那如何快速写前端项目，并快速交付呢？于是我想到了AI这个帮手，之前总拿它来排查问题，但是写一个项目行不行呢？ 我抱着怀疑的态度开始了这项“挑战”，并最终“有惊无险”的落地完成，顺利完成交付；&lt;/p&gt;
&lt;p&gt;本篇文章，我想详细的复盘下这次经历：如何与AI沟通？ 如何合理利用AI完成代码的实现？以及举例一些聊天系统中实现的业务关键点！&lt;/p&gt;</description></item><item><title>一份dcatadmin不全使用说明</title><link>https://www.cxiansheng.cn/posts/yifendcatadminbuquanshiyongshuoming/</link><pubDate>Thu, 20 Nov 2025 13:45:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/yifendcatadminbuquanshiyongshuoming/</guid><description>&lt;h2 id="前言"&gt;前言
&lt;a class="header-anchor" href="#%e5%89%8d%e8%a8%80"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;最近在家失业无聊，接了个单，其中有个项目就是关于后台管理系统的，发了几个模板样例给对方，有之前用过的后台框架&lt;code&gt;fastadmin&lt;/code&gt;、&lt;code&gt;laraveladmin&lt;/code&gt;，但是对方看了都觉得怎么跟他之前的后台一个样，要求换一个简洁一点的，于是我在网上搜了一下&lt;code&gt;laravel&lt;/code&gt;还有哪些后台框架，于是看到了&lt;code&gt;dcatadmin&lt;/code&gt;，把demo网站发给对方看过之后，觉得这个页面还好，比较简单，随交流沟通后，确定用这个后台。&lt;/p&gt;
&lt;h2 id="话说dcatadmin"&gt;话说dcatadmin
&lt;a class="header-anchor" href="#%e8%af%9d%e8%af%b4dcatadmin"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;dcatadmin&lt;/code&gt;这个框架我还是第一次用到，之前用&lt;code&gt;laravel&lt;/code&gt;的后台框架都是用的&lt;code&gt;laravel-admin&lt;/code&gt;，相对来说比较熟悉一点，&lt;code&gt;dcatadmin&lt;/code&gt;还是第一次听到（因为上份工作都是围绕yii框架来展开的，关于laravel的消息确实查看的不多）。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;dcatadmin2.x&lt;/code&gt;文档-
&lt;a href="https://learnku.com/docs/dcat-admin/2.x/brief-introduction/8080" title="简介 | 入门 |《Dcat Admin 中文文档 2.x》| Laravel China 社区" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 简介 | 入门 |《Dcat Admin 中文文档 2.x》| Laravel China 社区
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;看完整体下来，&lt;code&gt;dcatadmin&lt;/code&gt;重点需要了解的其实就是3个部分，也是后台系统中的组成：&lt;strong&gt;数据表格、表单、详情&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;但是还是有些地方没怎么看懂，尤其是关于&lt;strong&gt;工具表单&lt;/strong&gt;、&lt;strong&gt;异步加载&lt;/strong&gt;这块儿。时间有限，索性就在开发的过程中，再去搞清楚吧&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;因为现有文档描述不清，在开发过程中自己也是踩了不少坑，以下内容总结了在dcatadmin2.x中常用的几个功能，如有遇到类似疑问的开发者，可以少走一些弯路&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>聊一聊我是如何从0到1搭建公司爬虫项目的</title><link>https://www.cxiansheng.cn/posts/liaoyiliaowoshiruhecong0dao1dajiangongsipachongxiangmudi/</link><pubDate>Fri, 30 May 2025 14:12:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/liaoyiliaowoshiruhecong0dao1dajiangongsipachongxiangmudi/</guid><description>&lt;h2 id="一前言"&gt;一、前言
&lt;a class="header-anchor" href="#%e4%b8%80%e5%89%8d%e8%a8%80"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;在工作的这么多年中，其实有很少能接触到挑战自我的项目。在小公司当个小组长，无非就是curd、部署项目、搭建gitlab、review同事代码等繁琐的工作，偶尔写写前端。大公司的话，工作内容其实就没这么繁琐了，部署项目有运维，页面有前端同事，review有部门leader，工作中80%的时间都是curd，当然会有一些小型的基于需求的项目来做，但都是能力范围之内的。&lt;/p&gt;
&lt;p&gt;在我这短暂的开发生涯中，还真就遇到过那么一次让我觉得非常有挑战性的事，那就是从php转python，从0到1实现爬虫架构。从结果上来说，虽然达不到100%的爬取成功率，但整个过程也可以说是倾尽了全力，当然这也是我为数不多的我绞尽脑汁想完成的项目（主要是这个项目完成之后的绩效比较诱人，咳咳咳~），而且我对新东西、新事物都有种想挑战一下的心态。&lt;/p&gt;
&lt;p&gt;今天就来讲一下我是怎么从0到1实现整个爬虫架构的。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;首先声明：我是主导者、也是参与者，当然后期还有更专业的python同事一起加入，帮我调优，给我优化意见，最终才合力完成的这个项目，不是我一个人的功劳。&lt;/p&gt;

 &lt;/blockquote&gt;</description></item><item><title>工作回顾之优化开户流程</title><link>https://www.cxiansheng.cn/posts/gongzuohuiguzhiyouhuakaihuliucheng/</link><pubDate>Thu, 10 Apr 2025 14:16:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/gongzuohuiguzhiyouhuakaihuliucheng/</guid><description>&lt;h2 id="前言"&gt;前言
&lt;a class="header-anchor" href="#%e5%89%8d%e8%a8%80"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;众所周知，SQL文化博大精深，SQL优化那阵算得上百花齐放，啥样的优化方式都有。而我虽然天天干着CURD的工作，和SQL天天打交道，其实说句实话，对SQL优化确实所会不多，只能算的上是皮毛。&lt;/p&gt;
&lt;p&gt;这不，什么不会就来什么，刚入职还在试用期的时候，老大派来一个任务&lt;/p&gt;
&lt;p&gt;：“小陈，我们有个开户的流程，从其他平台迁移过来，你对接下”&lt;/p&gt;
&lt;p&gt;：“好的，老大”&lt;/p&gt;
&lt;p&gt;：“对了，还有一个开户的动作，特别慢，要半小时甚至更久才能完成，你顺便优化一下”&lt;/p&gt;
&lt;p&gt;：“好的”&lt;/p&gt;
&lt;p&gt;什么开户？什么流程？什么优化，刚接到这个问题的我也是一头雾水，后面再深入了解了一下，大概明白了这个问题的来龙去脉&lt;/p&gt;</description></item><item><title>工作回顾之账单号怎么重复了？</title><link>https://www.cxiansheng.cn/posts/gongzuohuiguzhizhangdanhaozenmechongfule/</link><pubDate>Wed, 05 Mar 2025 22:43:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/gongzuohuiguzhizhangdanhaozenmechongfule/</guid><description>&lt;h2 id="一引言"&gt;一、引言
&lt;a class="header-anchor" href="#%e4%b8%80%e5%bc%95%e8%a8%80"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;不管是在电商系统、还是物业系统中都会存在一个账单的东西，账单号是每一个账单的标识，这个标识是唯一的、且不可重复的。&lt;/p&gt;
&lt;p&gt;在电商系统中，账单号就等同于订单号；在物业系统中，账单号就是每一次向业主催缴费的账单。&lt;/p&gt;
&lt;p&gt;这个账单号一旦重复结果可以说是灾难级的，在物业系统中，收费的时候，明明不是这个业主的钱，怎么多算了；而另一个业主的钱甚至少算，或者该缴的费用被其他业主缴了等等，涉及到钱的问题那就是大问题了。&lt;/p&gt;
&lt;p&gt;这篇文章，我们就来具体分析下这个问题，并给出解决方案。&lt;/p&gt;</description></item><item><title>聊聊redis在电商系统中的实战应用</title><link>https://www.cxiansheng.cn/posts/liaoliaorediszaidianshangxitongzhongdeshizhanyingyong/</link><pubDate>Wed, 08 Jan 2025 22:31:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/liaoliaorediszaidianshangxitongzhongdeshizhanyingyong/</guid><description>&lt;h2 id="一前言"&gt;一、前言
&lt;a class="header-anchor" href="#%e4%b8%80%e5%89%8d%e8%a8%80"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;在我从事的工作经历中，其实接触的电商行业还挺多的，大概占经历的6、70%左右。&lt;/p&gt;
&lt;p&gt;而在电商项目中，用到缓存的场景就很多了，像数据缓存、CDN缓存、页面缓存等等，redis是最常用的key-value数据库了，memechache虽然和redis同样都是内存数据库，但是使用的最多的还是redis。&lt;/p&gt;
&lt;p&gt;在使用redis之前，先简单了解下redis的特点和数据结构吧；&lt;/p&gt;</description></item><item><title>关于我</title><link>https://www.cxiansheng.cn/about/</link><pubDate>Mon, 01 Jan 2024 00:00:00 +0000</pubDate><guid>https://www.cxiansheng.cn/about/</guid><description>&lt;p&gt;本博客主要记录我在程序员生涯中的实践与思考，内容涵盖后端开发、架构设计、爬虫技术等，所有文章均为原创经验总结。&lt;/p&gt;
&lt;h2 id="关于我"&gt;关于我
&lt;a class="header-anchor" href="#%e5%85%b3%e4%ba%8e%e6%88%91"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;h3 id="个人"&gt;个人
&lt;a class="header-anchor" href="#%e4%b8%aa%e4%ba%ba"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;93 年，北方人，出生在炎热的夏季，双子座 boy。&lt;br&gt;
机械制造专业全日制大专毕业，后转行到互联网，至今已在 IT 行业工作 8 年（目前待业中，寻找合适机会）。&lt;/p&gt;</description></item><item><title>简单几步安装PHP扩展</title><link>https://www.cxiansheng.cn/posts/jiandanjibuanzhuangphpkuozhan/</link><pubDate>Wed, 03 Mar 2021 23:27:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/jiandanjibuanzhuangphpkuozhan/</guid><description>&lt;p&gt;有时候在安装PHP的时候，会漏掉一些平时不太常用的扩展，到以后再要去安装的时候，时常会因为版本不对出现各种问题，本文主要介绍一下通过简单几步安装扩展的方式。&lt;/p&gt;</description></item><item><title>2020总结</title><link>https://www.cxiansheng.cn/posts/2020zongjie/</link><pubDate>Mon, 22 Feb 2021 23:34:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/2020zongjie/</guid><description>&lt;p&gt;2020已经过去快两个月了，才有（想）时（起）间（来）写一下过去一年的总结。其实在年初的时候，各大社区在做有关【2020总结】的时候就想参与一下，但是一直没有提起日程。对于过去一年的回顾以及新的一年的展望就从这篇文章开始吧。&lt;/p&gt;</description></item><item><title>记一次上线方（流）案（程）</title><link>https://www.cxiansheng.cn/posts/jiyicishangxianfangliuancheng/</link><pubDate>Fri, 23 Oct 2020 21:04:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/jiyicishangxianfangliuancheng/</guid><description>&lt;h2 id="前言"&gt;前言
&lt;a class="header-anchor" href="#%e5%89%8d%e8%a8%80"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;为了简化后续爬虫项目上线的步骤和流程，把爬虫API和定时任务的项目整合在一块了，由于涉及到相关的服务较多，也需要遵循修改服务、启动的先后顺序（不然该启动的服务没开，后续相关的服务受影响就尴尬了），所以在上线前，用了将近一个上午的时间，整理了一个上线流程。在上线时能够提供一些清晰的帮助。&lt;/p&gt;
&lt;h2 id="上线步骤"&gt;上线步骤
&lt;a class="header-anchor" href="#%e4%b8%8a%e7%ba%bf%e6%ad%a5%e9%aa%a4"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;h3 id="包安装"&gt;包安装
&lt;a class="header-anchor" href="#%e5%8c%85%e5%ae%89%e8%a3%85"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;安装grequests、itemadapter包&lt;/p&gt;</description></item><item><title>聊聊【爬虫开发】这半年来的心得</title><link>https://www.cxiansheng.cn/posts/liaoliaopachongkaifazhebannianlaidexinde/</link><pubDate>Sun, 11 Oct 2020 22:48:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/liaoliaopachongkaifazhebannianlaidexinde/</guid><description>&lt;p&gt;在工作中，已经陆陆续续使用爬虫做需求将近半年时间了，在这半年时间里，从一个python小白到爬虫入门，再至功能实现。从上午PHP到下午Python忙的焦头烂额到现在的PHP/Python随心切换，其中的曲折不言而喻，也着实走了不少弯路。但好在功夫不负有心人，在半年的时光里，使用Python的同时也和它一起成长。如今总结一下，希望可以帮助到有需要的同学。&lt;/p&gt;
&lt;h2 id="学习篇"&gt;学习篇
&lt;a class="header-anchor" href="#%e5%ad%a6%e4%b9%a0%e7%af%87"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;h3 id="python"&gt;python
&lt;a class="header-anchor" href="#python"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;从最开始接触爬虫，首先最需要了解的就是python的环境搭建、语法及特性，网络上有很多相关的教程，以下列举几个我在学习过程中使用到的教程，对于Python的快速入门都能起到很大的作用&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;廖雪峰老师的
&lt;a href="https://www.liaoxuefeng.com/wiki/1016959663602400" title="Python教程" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 Python教程
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;，最先就是在这里开启Python之旅的。一边看文章学习一边跟着写写demo&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;菜鸟教程里的
&lt;a href="https://www.runoob.com/python/python-tutorial.html" title="Python基础教程" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 Python基础教程
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;也可以作为快速学习使用&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href="https://docs.python.org/zh-cn/3/" title="Python3文档" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 Python3文档
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;，在忘记一些函数的时候可以很快速的找到&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Python如何爬取动态网站？</title><link>https://www.cxiansheng.cn/posts/pythonruhepaqudongtaiwangzhan/</link><pubDate>Tue, 09 Jun 2020 22:13:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/pythonruhepaqudongtaiwangzhan/</guid><description>&lt;h2 id="前言"&gt;前言
&lt;a class="header-anchor" href="#%e5%89%8d%e8%a8%80"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;当我们在爬取网页的时候，有部分是静态的，这种类型的网页，我们采用一般的方法就能很容易爬取到数据。但有些网页爬取的门槛还是有的，是动态的，是通过js渲染（包括ajax）出来的，这类型的网页采取一般的爬取方式就不行了，会出现爬取不到指定的数据。这时候，就要换种思路来解决了。所谓道高一尺，魔高一丈。本篇文章来介绍一下采用Splash和selenium来爬取动态网页，并对比一下两者的区别。&lt;/p&gt;</description></item><item><title>Python爬虫研究</title><link>https://www.cxiansheng.cn/posts/pythonpachongyanjiu/</link><pubDate>Mon, 09 Mar 2020 20:33:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/pythonpachongyanjiu/</guid><description>&lt;p&gt;最近一直在研究爬虫相关的内容，对于各个知识点，都有所实践，以下是研究的结果。&lt;/p&gt;</description></item><item><title>Python学习笔记（常用扩展）</title><link>https://www.cxiansheng.cn/posts/pythonxuexibijichangyongkuozhan/</link><pubDate>Sun, 08 Mar 2020 18:01:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/pythonxuexibijichangyongkuozhan/</guid><description>&lt;p&gt;Python常用扩展使用笔记，包括mysql连接池、Excel、日志等。&lt;/p&gt;</description></item><item><title>Python学习笔记（基础）</title><link>https://www.cxiansheng.cn/posts/pythonxuexibijichangyongkuozhan/</link><pubDate>Sun, 08 Mar 2020 18:01:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/pythonxuexibijichangyongkuozhan/</guid><description>&lt;p&gt;python基础学习笔记。语法、函数等。&lt;/p&gt;</description></item><item><title>Python scrapy框架学习笔记及简单实战</title><link>https://www.cxiansheng.cn/posts/python_scrapykuangjiaxuexibijijijiandanshizhan/</link><pubDate>Wed, 05 Feb 2020 15:03:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/python_scrapykuangjiaxuexibijijijiandanshizhan/</guid><description>&lt;p&gt;工作需要，接触到python的scrapy爬虫框架，据说是python最好用的爬虫框架，没有之一。文章内容为学习过程的笔记，参考资源会贴在文章最后。&lt;/p&gt;</description></item><item><title>以隧道替代mysql远程连接</title><link>https://www.cxiansheng.cn/posts/yisuidaotidaimysqlyuanchenglianjie/</link><pubDate>Thu, 07 Nov 2019 20:15:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/yisuidaotidaimysqlyuanchenglianjie/</guid><description>&lt;h2 id="隧道"&gt;隧道
&lt;a class="header-anchor" href="#%e9%9a%a7%e9%81%93"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;隧道是埋置于地层内的工程建筑物，是人类利用地下空间的一种形式。隧道可分为交通隧道、水工隧道、市政隧道、矿山隧道。 &amp;ndash;来源百度百科&lt;/p&gt;
&lt;p&gt;emmmmmmmm&amp;hellip;&lt;/p&gt;
&lt;h2 id="前言"&gt;前言
&lt;a class="header-anchor" href="#%e5%89%8d%e8%a8%80"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;之前调试mysql，查看数据，修改数据的时候，命令行又不方便，总是会想到搞个mysql的远程账号，来访问数据库。久而久之就养成了这样的习惯，把3306端口暴漏出去，没有想到安全问题。最近在大佬的指引下，接触到了隧道的方式，觉得挺好用的，在不暴漏端口号的情况下，能像远程连接一般自如的查看mysql，很受用，现在分享出来。&lt;/p&gt;</description></item><item><title>架构学习-设计计算高可用架构</title><link>https://www.cxiansheng.cn/posts/jiagouxuexishejijisuangaokeyongjiagou/</link><pubDate>Wed, 16 Oct 2019 21:37:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/jiagouxuexishejijisuangaokeyongjiagou/</guid><description>&lt;h1 id="前言"&gt;前言
&lt;a class="header-anchor" href="#%e5%89%8d%e8%a8%80"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;本文摘录于李运华老师的[《从0开始学架构》][1]课程，为精简总结。&lt;/p&gt;
&lt;h1 id="复杂度"&gt;复杂度
&lt;a class="header-anchor" href="#%e5%a4%8d%e6%9d%82%e5%ba%a6"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;计算高可用架构复杂度主要体现在&lt;strong&gt;任务管理&lt;/strong&gt;方面。旨当任务在某台服务器执行失败后，如何重新分配新的服务器&lt;/p&gt;
&lt;h2 id="设计关键"&gt;设计关键
&lt;a class="header-anchor" href="#%e8%ae%be%e8%ae%a1%e5%85%b3%e9%94%ae"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;h3 id="1-哪些服务器可以执行任务"&gt;1、 哪些服务器可以执行任务
&lt;a class="header-anchor" href="#1-%e5%93%aa%e4%ba%9b%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%8f%af%e4%bb%a5%e6%89%a7%e8%a1%8c%e4%bb%bb%e5%8a%a1"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;每个服务器都可以执行任务&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;特定服务器可以执行任务，当特定服务器故障后，选定新的服务器作为特定服务器&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>【转】centos通过yum源快速搭建lnmp环境</title><link>https://www.cxiansheng.cn/posts/zhuancentostongguoyumyuankuaisudajianlnmphuanjing/</link><pubDate>Thu, 12 Sep 2019 15:52:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/zhuancentostongguoyumyuankuaisudajianlnmphuanjing/</guid><description>&lt;blockquote&gt;
 &lt;p&gt;原文地址：[Linux-CentOS7下安装LNMP环境笔记&amp;ndash;ncsb][1]&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="1-设置yum源"&gt;1. 设置yum源
&lt;a class="header-anchor" href="#1-%e8%ae%be%e7%bd%aeyum%e6%ba%90"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;PHP源官方地址: [https://webtatic.com/][2]&lt;/p&gt;
&lt;p&gt;mysql源官方地址: [https://dev.mysql.com/downloads/repo/yum/][3]&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="hl-0-1"&gt;&lt;a class="lnlinks" href="#hl-0-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-2"&gt;&lt;a class="lnlinks" href="#hl-0-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-3"&gt;&lt;a class="lnlinks" href="#hl-0-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-4"&gt;&lt;a class="lnlinks" href="#hl-0-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-5"&gt;&lt;a class="lnlinks" href="#hl-0-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-6"&gt;&lt;a class="lnlinks" href="#hl-0-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-7"&gt;&lt;a class="lnlinks" href="#hl-0-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-8"&gt;&lt;a class="lnlinks" href="#hl-0-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-9"&gt;&lt;a class="lnlinks" href="#hl-0-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-10"&gt;&lt;a class="lnlinks" href="#hl-0-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rpm -Uvh https://dl.Fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>一个小业务场景带来的思考</title><link>https://www.cxiansheng.cn/posts/yigexiaoyewuchangjingdailaidesikao/</link><pubDate>Sun, 11 Aug 2019 17:37:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/yigexiaoyewuchangjingdailaidesikao/</guid><description>&lt;p&gt;最近在用layui做后台，有遇到这么个场景，就是上传图片，并保存到oss的，很简单也很常见的一个小功能。但即使是这么个小功能也有点费脑筋，主要有以下几点：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;对layui上传文件插件的不熟悉&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;对业务场景的想象不够严谨&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;对自身服务器配置状况的无视&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;本篇博文就来说一下，就是这么个小问题，也让我有点伤脑筋的原因。&lt;/p&gt;</description></item><item><title>[译]PHP使用RabbitMQ文档--Hello World</title><link>https://www.cxiansheng.cn/posts/yiphpshiyongrabbitmqwendanghello_world/</link><pubDate>Thu, 30 May 2019 21:16:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/yiphpshiyongrabbitmqwendanghello_world/</guid><description>&lt;p&gt;这是一篇翻译在PHP中如何使用RabbitMQ的文档。有些地方加了一些自己的理解，但意思应该不差。本人水平有限，如有翻译不当还请谅解。&lt;/p&gt;
&lt;p&gt;英文地址：[RabbitMQ tutorial - &amp;ldquo;Hello World!&amp;rdquo; — RabbitMQ][1]&lt;/p&gt;</description></item><item><title>【Git】工作中99%能用到的git命令</title><link>https://www.cxiansheng.cn/posts/gitgongzuozhong99nengyongdaodegitmingling/</link><pubDate>Mon, 25 Feb 2019 11:52:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/gitgongzuozhong99nengyongdaodegitmingling/</guid><description>&lt;p&gt;&lt;img src="https://www.cxiansheng.cn/imgs/img-lazy-loading.gif" data-src="./4149774481.jpg" alt="git" /&gt;&lt;/p&gt;</description></item><item><title>csntos7.4安装redis及php-redis扩展</title><link>https://www.cxiansheng.cn/posts/csntos74anzhuangredisjiphprediskuozhan/</link><pubDate>Tue, 04 Dec 2018 23:24:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/csntos74anzhuangredisjiphprediskuozhan/</guid><description>&lt;p&gt;    记得我的历史博客中，有一篇写了关于windows安装redis以及php-redis扩展的安装和使用【[Redis在windows下的安装操作以及PHP-Redis操作][1]】，现在这篇文章又再续前缘，说一下centos下redis以及php-redis扩展的安装。&lt;/p&gt;</description></item><item><title>1.5s~0.02s，期间我们可以做些什么？</title><link>https://www.cxiansheng.cn/posts/15s002sqijianwomenkeyizuoxieshenme/</link><pubDate>Sat, 21 Jul 2018 12:29:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/15s002sqijianwomenkeyizuoxieshenme/</guid><description>&lt;blockquote&gt;
 &lt;p&gt;大爷我就算功能重做，模块重构，我也不做优化！！！&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;运行真快！&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://www.cxiansheng.cn/imgs/img-lazy-loading.gif" data-src="./1854799780.jpg" alt="不装了！" /&gt;&lt;/p&gt;</description></item><item><title>架构</title><link>https://www.cxiansheng.cn/posts/jiagou/</link><pubDate>Thu, 19 Jul 2018 23:42:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/jiagou/</guid><description>&lt;h2 id="何为架构"&gt;何为架构
&lt;a class="header-anchor" href="#%e4%bd%95%e4%b8%ba%e6%9e%b6%e6%9e%84"&gt;&lt;/a&gt;
&lt;/h2&gt;
 &lt;blockquote&gt;
 &lt;p&gt;架构是为了解决系统软件复杂度问题的；&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="架构的复杂度来源"&gt;架构的复杂度来源
&lt;a class="header-anchor" href="#%e6%9e%b6%e6%9e%84%e7%9a%84%e5%a4%8d%e6%9d%82%e5%ba%a6%e6%9d%a5%e6%ba%90"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;h3 id="高性能"&gt;高性能
&lt;a class="header-anchor" href="#%e9%ab%98%e6%80%a7%e8%83%bd"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;集群的复杂度&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1、任务分配&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;任务分配器；&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;硬件网络设备（F5、交换机等）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;软件网络设备（LVS）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;负载均衡软件（Nginx、HAProxy）&lt;/p&gt;</description></item><item><title>日常小功能</title><link>https://www.cxiansheng.cn/posts/richangxiaogongneng/</link><pubDate>Thu, 21 Jun 2018 17:32:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/richangxiaogongneng/</guid><description>&lt;p&gt;    本文日常整理收录一些小功能，持续更新&amp;hellip;&lt;/p&gt;</description></item><item><title>图解几种常见的线性表</title><link>https://www.cxiansheng.cn/posts/tujiejizhongchangjiandexianxingbiao/</link><pubDate>Wed, 30 May 2018 21:31:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/tujiejizhongchangjiandexianxingbiao/</guid><description>&lt;h2 id="线性表"&gt;线性表
&lt;a class="header-anchor" href="#%e7%ba%bf%e6%80%a7%e8%a1%a8"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;什么是线性表？就是一种连续或间断存储的数组，这里的连续和间断是针对物理内存空间中线性表元素之间是否连续，其中连续数组对应内置数组的实现方式，间断数组对应的是指针的实现方式，这种方式也称为链表实现。&lt;/p&gt;
&lt;p&gt;也就是说，线性表有两种实现方式，一种是内置数组实现，另一种是链表实现。&lt;/p&gt;
&lt;p&gt;下面来看一下，有哪些数据结构属于线性表吧！&lt;/p&gt;</description></item><item><title>PHP相关面试题总结</title><link>https://www.cxiansheng.cn/posts/phpxiangguanmianshitizongjie/</link><pubDate>Mon, 28 May 2018 21:46:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/phpxiangguanmianshitizongjie/</guid><description>&lt;h2 id="数据库"&gt;数据库
&lt;a class="header-anchor" href="#%e6%95%b0%e6%8d%ae%e5%ba%93"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;h3 id="btree和hash索引的区别"&gt;Btree和hash索引的区别
&lt;a class="header-anchor" href="#btree%e5%92%8chash%e7%b4%a2%e5%bc%95%e7%9a%84%e5%8c%ba%e5%88%ab"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;Hash&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;Hash索引，当我们要给某张表某列增加索引时，将这张表的这一列进行哈希算法计算，得到哈希值，排序在哈希数组上。所以Hash索引可以一次定位，其效率很高，而Btree索引需要经过多次的磁盘IO，但是innodb和myisam之所以没有采用它，是因为它存在着好多缺点&lt;/p&gt;

 &lt;/blockquote&gt;</description></item><item><title>TIPI PHP源码阅读笔记（一）</title><link>https://www.cxiansheng.cn/posts/tipi_phpyuanmayuedubijiyi/</link><pubDate>Sat, 26 May 2018 10:02:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/tipi_phpyuanmayuedubijiyi/</guid><description>&lt;p&gt;&lt;img src="https://www.cxiansheng.cn/imgs/img-lazy-loading.gif" data-src="./2495093611.png" alt="TIPI" /&gt;&lt;/p&gt;
&lt;p&gt;[TIPI 深入理解PHP内核：Thinking In PHP Internals][2]&lt;/p&gt;</description></item><item><title>Laravel学习笔记—Artisan命令与数据迁移填充</title><link>https://www.cxiansheng.cn/posts/laravelxuexibijiartisanminglingyushujuqianyitianchong/</link><pubDate>Thu, 24 May 2018 23:24:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/laravelxuexibijiartisanminglingyushujuqianyitianchong/</guid><description>&lt;p&gt;&lt;img src="https://www.cxiansheng.cn/imgs/img-lazy-loading.gif" data-src="./1290816652.jpg" alt="laravel.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;衔接之前文章，继续学习，做笔记。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;[Laraver学习笔记—框架基本介绍][2]&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;[Laravel学习笔记—数据库操作的三种方式][3]&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>细数那些年PHP我们踩过的 “坑”</title><link>https://www.cxiansheng.cn/posts/xishunaxienianphpwomencaiguode_keng/</link><pubDate>Fri, 23 Mar 2018 15:29:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/xishunaxienianphpwomencaiguode_keng/</guid><description>&lt;p&gt;    在编写代码的过程中，常常会踩到到各种坑，小坑小错啥的也经常犯，为什么呢？我想主要还是对PHP这门语言的不熟练啊，文档看的少&amp;hellip;一些函数用到就查，用不到就烂在手册里了。这篇文章，主要记录一下PHP日常开发中遇到的“坑”（持续更新···）&lt;/p&gt;</description></item><item><title>微信开发之录音上传、下载、转码</title><link>https://www.cxiansheng.cn/posts/weixinkaifazhiluyinshangchuanxiazaizhuanma/</link><pubDate>Thu, 08 Mar 2018 00:06:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/weixinkaifazhiluyinshangchuanxiazaizhuanma/</guid><description>&lt;p&gt;&lt;img src="https://www.cxiansheng.cn/imgs/img-lazy-loading.gif" data-src="./3169903264.jpg" alt="wechat" /&gt;&lt;/p&gt;
&lt;p&gt;    一年的时间里，前前后后都在搞微信开发的相关模块，这不前一阵子，公司又开了个新项目，其中有一个就是类似于微信朋友圈的功能（我也不知道为啥要开发微信已有的功能啊，泪奔&amp;hellip;），其中包含上传图片、录音、视频等，由于微信端上传图片和视频这块也是头一遭做，图片采用了微信的相关插件，视频嘛用的是百度的webupload插件，感觉也相当不错，采用了分片上传技术。今天这篇就主要介绍一下，录音的相关功能。&lt;/p&gt;</description></item><item><title>递归算法造成的问题分析与解决</title><link>https://www.cxiansheng.cn/posts/diguisuanfazaochengdewentifenxiyujiejue/</link><pubDate>Thu, 04 Jan 2018 21:21:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/diguisuanfazaochengdewentifenxiyujiejue/</guid><description>&lt;p&gt;    递归，在编码中应该算是一种很常见的算法了。之前在学习C语言的时候，也同样了解过一些基本的算法，比如斐波那契。在学习的时候，对算法这种编程技巧就有了一种浓浓的敬畏之心，因为觉得会算法的人就很厉害了，可以把很长的代码块通过一段简短的算法解决并得到想要的结果。&lt;/p&gt;
&lt;p&gt;今天在实际工作中也遇到了算法中一些问题。整理一下，形成今天的内容【算法中的[递归][1]算法】。&lt;/p&gt;</description></item><item><title>【排序】交换排序之冒泡排序</title><link>https://www.cxiansheng.cn/posts/paixujiaohuanpaixuzhimaopaopaixu/</link><pubDate>Wed, 27 Dec 2017 22:02:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/paixujiaohuanpaixuzhimaopaopaixu/</guid><description>&lt;p&gt;    自己之前对于排序的使用一直都是来自于对&lt;code&gt;sort&lt;/code&gt;,&lt;code&gt;ksort&lt;/code&gt;等排序函数的基础上，但是对具体的算法原理没有具体考虑过。闲下来，就思考下这些算法的实现。那么本篇文章以及未来的一系列排序文章，将总结排序在php中的原理以及实现：&lt;/p&gt;</description></item><item><title>行业各种大型架构、流程、分析、学习路线图 收录</title><link>https://www.cxiansheng.cn/posts/hangyegezhongdaxingjiagouliuchengfenxixuexiluxiantu_shoulu/</link><pubDate>Fri, 08 Dec 2017 14:42:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/hangyegezhongdaxingjiagouliuchengfenxixuexiluxiantu_shoulu/</guid><description>&lt;p&gt;此文为收录行业，各种类型大型架构、分析、流程、学习路线图等；&lt;/p&gt;
&lt;p&gt;图片来源已无从知晓，如侵权，请告知；&lt;/p&gt;
&lt;p&gt;由于图片过大，自带的图片查看插件或许不能满足细节的查看效果，请右键下载图片或【在新标签页打开链接】放大查看；&lt;/p&gt;
&lt;p&gt;（PS：欢迎同行朋友提供相关图片，我会在图片末尾署名提供者信息，并发布在相关IT社区）&lt;/p&gt;
&lt;p&gt;&lt;code&gt;持续更新...&lt;/code&gt;&lt;/p&gt;</description></item><item><title>MySQL 【去重留一】一条sql语句完成 思路总结</title><link>https://www.cxiansheng.cn/posts/mysql_quzhongliuyiyitiaosqlyujuwancheng_siluzongjie/</link><pubDate>Sun, 03 Dec 2017 20:09:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/mysql_quzhongliuyiyitiaosqlyujuwancheng_siluzongjie/</guid><description>&lt;p&gt;&lt;img src="https://www.cxiansheng.cn/imgs/img-lazy-loading.gif" data-src="./1663589426.jpg" alt="MySQL.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;    前几天在做一个需求的时候，需要清理mysql中重复的记录，当时的想法是通过代码遍历写出来，然后觉得太复杂，心里想着应该可以通过一个sql语句来解决问题的。查了资料，请教了大佬之后得出了一个很便利的sql语句，这里分享下这段sql语句和思路。&lt;/p&gt;</description></item><item><title>charm_PHP，一个还有诸多问题的PHP MVC框架</title><link>https://www.cxiansheng.cn/posts/charm_phpyigehaiyouzhuduowentidephp_mvckuangjia/</link><pubDate>Sat, 11 Nov 2017 11:04:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/charm_phpyigehaiyouzhuduowentidephp_mvckuangjia/</guid><description>&lt;h1 id="charm_php"&gt;charm_PHP
&lt;a class="header-anchor" href="#charm_php"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;h2 id="介绍"&gt;介绍
&lt;a class="header-anchor" href="#%e4%bb%8b%e7%bb%8d"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;一个简单的MVC框架，框架中实现了C和V层，M层使用composer的PHP组件——
&lt;a href="https://packagist.org/packages/catfan/medoo" title="Medoo" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 Medoo
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;，实现了一些简单的设计模式，单一入口、自动加载。&lt;/p&gt;
&lt;p&gt;本框架遵循
&lt;a href="https://www.cxiansheng.cn/server/293" title="PSR规范" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 PSR规范
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;，使用
&lt;a href="http://www.php.net/manual/zh/language.namespaces.rationale.php" title="命名空间" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 命名空间
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;来规范类于类之间的互相合作；&lt;/p&gt;</description></item><item><title>Composer三部曲：安装、使用、发布</title><link>https://www.cxiansheng.cn/posts/composersanbuquanzhuangshiyongfabu/</link><pubDate>Sat, 04 Nov 2017 18:48:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/composersanbuquanzhuangshiyongfabu/</guid><description>&lt;p&gt;&lt;img src="https://www.cxiansheng.cn/imgs/img-lazy-loading.gif" data-src="./905996380.jpg" alt="composer" /&gt;&lt;/p&gt;
&lt;p&gt;    在现代化的PHP开发当中，离开不了各种各样的组件，那么如何快速在项目中安装和找到这些组件呢？composer正是为这一目的而出现，如果你还不知道composer，那么你就out了。那么什么是composer，它的作用是什么？如何使用？本文将一一揭晓。&lt;/p&gt;</description></item><item><title>WE and RNG</title><link>https://www.cxiansheng.cn/posts/we_and_rng/</link><pubDate>Mon, 23 Oct 2017 20:11:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/we_and_rng/</guid><description>&lt;p&gt;&lt;img src="https://www.cxiansheng.cn/imgs/img-lazy-loading.gif" data-src="./2448914932.jpg" alt="微信图片_20171023201008.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.cxiansheng.cn/imgs/img-lazy-loading.gif" data-src="./4214483863.jpg" alt="微信图片_20171023201033.jpg" /&gt;&lt;/p&gt;</description></item><item><title>ubuntu搭建PHP网站完整实例教程</title><link>https://www.cxiansheng.cn/posts/ubuntudajianphpwangzhanwanzhengshilijiaocheng/</link><pubDate>Sat, 21 Oct 2017 15:30:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/ubuntudajianphpwangzhanwanzhengshilijiaocheng/</guid><description>&lt;p&gt;&lt;img src="https://www.cxiansheng.cn/imgs/img-lazy-loading.gif" data-src="./2460201975.jpg" alt="ubuntu.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;之前写过两篇关于ubuntu系统搭建php环境的文章&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;[Linux服务器域名绑定指定目录(ubuntu下apache2绑定多域名)][2]&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;[Ubuntu一键安装LAMP环境][3]&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在之后的多次实践中，发现有些东西还没有说到，这里就把之后遇到的问题以及方法补充一下，作为一个完整的在ubuntu下搭建lamp环境的总结。&lt;/p&gt;</description></item><item><title>PHP-PSR 现代PHPer的开发规范</title><link>https://www.cxiansheng.cn/posts/phppsr_xiandaiphperdekaifaguifan/</link><pubDate>Sun, 17 Sep 2017 11:55:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/phppsr_xiandaiphperdekaifaguifan/</guid><description>&lt;p&gt;    PSR是PHP Standards Recommendation的简称，意为PHP推荐标准。要想了解PSR，首先得知道制定这一标准的人/组织是谁————PHP-FIG。&lt;/p&gt;</description></item><item><title>Typecho 《HelloChangYan》插件500错误以及优化</title><link>https://www.cxiansheng.cn/posts/typecho_hellochangyanchajian500cuowuyijiyouhua/</link><pubDate>Sat, 19 Aug 2017 14:39:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/typecho_hellochangyanchajian500cuowuyijiyouhua/</guid><description>&lt;p&gt;&lt;img src="https://www.cxiansheng.cn/imgs/img-lazy-loading.gif" data-src="./2998162509.png" alt="畅言logo" /&gt;&lt;/p&gt;</description></item><item><title>CI3设置子目录控制器为默认控制器的解决办法</title><link>https://www.cxiansheng.cn/posts/ci3shezhizimulukongzhiqiweimorenkongzhiqidejiejuebanfa/</link><pubDate>Mon, 07 Aug 2017 22:44:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/ci3shezhizimulukongzhiqiweimorenkongzhiqidejiejuebanfa/</guid><description>&lt;p&gt;&lt;img src="https://www.cxiansheng.cn/imgs/img-lazy-loading.gif" data-src="./267497981.png" alt="codeigniter" /&gt;&lt;/p&gt;</description></item><item><title>微信开发之微信公众号支付</title><link>https://www.cxiansheng.cn/posts/weixinkaifazhiweixingongzhonghaozhifu/</link><pubDate>Fri, 04 Aug 2017 19:11:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/weixinkaifazhiweixingongzhonghaozhifu/</guid><description>&lt;p&gt;    上月初的时候写过一篇关于[【微信开发之微信登陆】][1]的文章，文章里面大概用&lt;strong&gt;通&lt;/strong&gt;(&lt;code&gt;啰&lt;/code&gt;)&lt;strong&gt;俗&lt;/strong&gt;(&lt;code&gt;里&lt;/code&gt;)&lt;strong&gt;易&lt;/strong&gt;(&lt;code&gt;啰&lt;/code&gt;)&lt;strong&gt;懂&lt;/strong&gt;(&lt;code&gt;嗦&lt;/code&gt;)的话语讲述了关于在微信登陆这块的一些理论要点和代码实现。这次算是微信开发系列的延续篇，主要记录一下在工作中遇到的关于微信支付部分功能的实现&lt;/p&gt;</description></item><item><title>如何让博客速度快到哭</title><link>https://www.cxiansheng.cn/posts/ruherangbokesudukuaidaoku/</link><pubDate>Wed, 02 Aug 2017 16:34:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/ruherangbokesudukuaidaoku/</guid><description>&lt;p&gt;&lt;img src="https://www.cxiansheng.cn/imgs/img-lazy-loading.gif" data-src="./2689437204.png" alt="让博客速度快到哭.jpg" /&gt;&lt;/p&gt;</description></item><item><title>微信开发之微信登录</title><link>https://www.cxiansheng.cn/posts/weixinkaifazhiweixindenglu/</link><pubDate>Sat, 01 Jul 2017 16:33:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/weixinkaifazhiweixindenglu/</guid><description>&lt;p&gt;    记得以前做微信开发还是在学习期间做过的微信项目，作为学习，仅完成了其中自定义菜单的部分，如今在工作中由于项目需要，所以重新拿起了微信这部分。整合前面学习的过程中又完成了一些新的功能。这篇就记录一下，关于微信登录这部分的实现。&lt;/p&gt;</description></item><item><title>Laravel学习笔记—数据库操作的三种方式</title><link>https://www.cxiansheng.cn/posts/laravelxuexibijishujukucaozuodesanzhongfangshi/</link><pubDate>Sun, 07 May 2017 19:26:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/laravelxuexibijishujukucaozuodesanzhongfangshi/</guid><description>&lt;h2 id="新建模型"&gt;新建模型
&lt;a class="header-anchor" href="#%e6%96%b0%e5%bb%ba%e6%a8%a1%e5%9e%8b"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;在上篇文章[Laraver学习笔记—框架基本介绍][1]中有介绍模型是在&lt;code&gt;app&lt;/code&gt;目录下，假设在&lt;code&gt;app&lt;/code&gt;目录新建&lt;code&gt;User.php&lt;/code&gt;为用户模型，下文将以&lt;code&gt;user模型&lt;/code&gt;为例介绍在laravel中数据库操作多种方式&lt;/p&gt;</description></item><item><title>Ubuntu一键安装LAMP环境</title><link>https://www.cxiansheng.cn/posts/ubuntuyijiananzhuanglamphuanjing/</link><pubDate>Thu, 04 May 2017 18:32:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/ubuntuyijiananzhuanglamphuanjing/</guid><description>&lt;p&gt;    &lt;code&gt;ubuntu&lt;/code&gt;是一款以桌面应用为主的开源&lt;code&gt;linux&lt;/code&gt;操作系统，作为初学者学习&lt;code&gt;linux&lt;/code&gt;操作系统，也更为简单和容易上手。在&lt;code&gt;Ubuntu&lt;/code&gt;上搭建&lt;code&gt;lamp&lt;/code&gt;系统的方式有很多，这里就介绍一种最简单高效的安装方法；&lt;/p&gt;</description></item><item><title>Node.js学习一：简单爬虫</title><link>https://www.cxiansheng.cn/posts/nodejsxuexiyijiandanpachong/</link><pubDate>Sun, 26 Mar 2017 11:46:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/nodejsxuexiyijiandanpachong/</guid><description>&lt;p&gt;    &lt;code&gt;node.js&lt;/code&gt;是一个基于&lt;code&gt;Chrome JavaScript&lt;/code&gt;运行时建立的平台， 用于方便地搭建响应速度快、易于扩展的网络应用。&lt;code&gt;Node.js&lt;/code&gt;使用事件驱动， 非阻塞&lt;code&gt;I/O&lt;/code&gt;模型而得以轻量和高效，非常适合在分布式设备上运行数据密集型的实时应用。&lt;/p&gt;</description></item><item><title>VisualSVN server搭建Win-SVN服务器</title><link>https://www.cxiansheng.cn/posts/visualsvn_serverdajianwinsvnfuwuqi/</link><pubDate>Sun, 12 Mar 2017 16:56:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/visualsvn_serverdajianwinsvnfuwuqi/</guid><description>&lt;p&gt;    由于本人所在公司最近内网服务器的变更，有幸参与并配置了&lt;strong&gt;svn服务器&lt;/strong&gt;，由于对&lt;code&gt;svn&lt;/code&gt;这种版本控制工具不是很熟悉，平时也就是&lt;code&gt;update&lt;/code&gt;和&lt;code&gt;commit&lt;/code&gt;，对于内部的一些&lt;code&gt;结构特点&lt;/code&gt;没有真正了解过，而且对于服务器端的配置也是一头雾水，但互联网的强大为我增添了很多助力，虽说初来乍到的走了不少弯路，但好在最后达成目标。废话不多说，下文就简单介绍一下svn的特点和其作为服务端的配置。&lt;/p&gt;</description></item><item><title>PHP基准测试工具Apache Banchmark</title><link>https://www.cxiansheng.cn/posts/phpjizhunceshigongjuapache_banchmark/</link><pubDate>Sat, 26 Nov 2016 16:12:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/phpjizhunceshigongjuapache_banchmark/</guid><description>&lt;p&gt;    &lt;code&gt;Apache Banchmark（ab）&lt;/code&gt;工具是最著名的基准测试工具之一，它是默认安装的&lt;code&gt;apache&lt;/code&gt;的一部分，能够通过模拟对特定的&lt;code&gt;URL&lt;/code&gt;的任意数量请求来对&lt;code&gt;web&lt;/code&gt;服务器进行负载测试。而且更重要的是&lt;code&gt;Apache Banchmark&lt;/code&gt;是独立于&lt;code&gt;Apache Web&lt;/code&gt;服务的，从而可以在运行&lt;code&gt;ab&lt;/code&gt;的同时使运行此工具的计算机上的&lt;code&gt;Web&lt;/code&gt;服务处于非活动状态。&lt;/p&gt;</description></item><item><title>黑帮卧底被揭穿，该何去何从？</title><link>https://www.cxiansheng.cn/posts/heibangwodibeijiechuangaihequhecong/</link><pubDate>Fri, 18 Nov 2016 13:42:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/heibangwodibeijiechuangaihequhecong/</guid><description>&lt;p&gt;昨晚失眠，两点多才睡，做了一个梦。梦到自己成卧底混进黑帮，然后在一次铲除行动中，由于我猪队友的失误，提前闯入交易地点(教室)，我还来不及告诉队友他们有枪队友就冲进来了，我看情势不妙，留着也是死，趁乱逃了出来，导致他们被杀，而我的身份也被暴漏，然后更让我奇怪的是，整个场景的的背景竟然是我的小学母校。&lt;/p&gt;</description></item><item><title>Linux常用命令总结</title><link>https://www.cxiansheng.cn/posts/linuxchangyongminglingzongjie/</link><pubDate>Thu, 10 Nov 2016 22:16:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/linuxchangyongminglingzongjie/</guid><description>&lt;p&gt;Linux常用命令总结&lt;/p&gt;</description></item><item><title>Linux服务器域名绑定指定目录(ubuntu下apache2绑定多域名)</title><link>https://www.cxiansheng.cn/posts/linuxfuwuqiyumingbangdingzhidingmuluubuntuxiaapache2bangdingduoyuming/</link><pubDate>Wed, 09 Nov 2016 20:24:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/linuxfuwuqiyumingbangdingzhidingmuluubuntuxiaapache2bangdingduoyuming/</guid><description>&lt;p&gt;    前阵子买了域名，好不容易等到管局审核通过，结果在域名绑定到服务器上的时候又出现了些许问题，百度无果，无奈之下请教了大神，弄通了软、硬链接，了解了apache2的目录结构及特性，才得以解决。&lt;/p&gt;</description></item><item><title>支付宝支付总结（demo篇）</title><link>https://www.cxiansheng.cn/posts/zhifubaozhifuzongjiedemopian/</link><pubDate>Sun, 23 Oct 2016 10:04:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/zhifubaozhifuzongjiedemopian/</guid><description>&lt;p&gt;    做过商城的，一定少不了支付这一环节，网银支付、支付宝支付、微信支付，这三个主流的支付方式，身为开发者不说全部掌握，使用过其中一样，其他支付方式的支付接口模式也就差不多了。就像&lt;code&gt;PHP&lt;/code&gt;的框架一样，能运用其中一个，其它的框架基本上都是采用&lt;code&gt;MVC&lt;/code&gt;的思想和设计模式。支付也是一样。这篇文章就讲述一下我做过的支付宝支付。&lt;/p&gt;</description></item><item><title>windows下批处理定时备份MySql数据库</title><link>https://www.cxiansheng.cn/posts/windowsxiapichulidingshibeifenmysqlshujuku/</link><pubDate>Wed, 19 Oct 2016 15:56:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/windowsxiapichulidingshibeifenmysqlshujuku/</guid><description>&lt;p&gt;    数据库是我们项目的一个存储器，我们项目中绝大多数信息都会保存在数据库中，如果我们的数据库某一天遭到破坏了，如何解决和恢复？这时候我们就要用到批处理+定时任务了，在每天某一个时间段自动备份数据库信息。&lt;/p&gt;</description></item><item><title>PHPExcel类库使用说明</title><link>https://www.cxiansheng.cn/posts/phpexcelleikushiyongshuoming/</link><pubDate>Sun, 16 Oct 2016 16:23:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/phpexcelleikushiyongshuoming/</guid><description>&lt;p&gt;    众所周知，在项目的开发过程中经常会遇到用excel做功能的时候，比如一个商城导出订单列表，办公系统导出考勤记录，还有一些excel表格内容批量上传到数据库的情况。那么这么一款强大的类库到底该如何使用它？类库又在哪里下载，本文将一一奉上。&lt;/p&gt;</description></item><item><title>plupload—强大的前端上传组件</title><link>https://www.cxiansheng.cn/posts/pluploadqiangdadeqianduanshangchuanzujian/</link><pubDate>Fri, 14 Oct 2016 17:15:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/pluploadqiangdadeqianduanshangchuanzujian/</guid><description>&lt;p&gt;    相信很多小伙伴在日常的项目功能中不止一次用到过上传插件吧，常用的上传插件有很多，比如有名的&lt;code&gt;uploadify&lt;/code&gt;，我之前的项目中一直也是在用&lt;code&gt;uploadify&lt;/code&gt;，但是最近的一个项目，却让我不得不放弃了这个好用、方便的上传插件，改用起了&lt;code&gt;plupload&lt;/code&gt;，这个组件真心强大，不仅支持各种浏览器，而且上传方式也是多种多样，下面我来介绍一下这个组件简单的demo和配置：&lt;/p&gt;</description></item><item><title>Redis在windows下的安装操作以及PHP-Redis操作</title><link>https://www.cxiansheng.cn/posts/rediszaiwindowsxiadeanzhuangcaozuoyijiphprediscaozuo/</link><pubDate>Sat, 01 Oct 2016 20:37:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/rediszaiwindowsxiadeanzhuangcaozuoyijiphprediscaozuo/</guid><description>&lt;p&gt;Redis是一个高性能的key-value存储系统。和Memcached类似，它支持存储的value类型相对更多，包括string(字符串)、list(链表)、set(集合)、zset(sorted set &amp;ndash;有序集合)和hash（哈希类型）。由于Redis在存储功能上的强大，它多用于一些缓存机制、队列、订阅等场景。我们这篇文章就简要介绍下Redis在windows系统上的安装和应用，以及在windows系统上用PHP对Redis的一些简单操作。&lt;/p&gt;</description></item><item><title>JS实现页面搜索+定位</title><link>https://www.cxiansheng.cn/posts/jsshixianyemiansousuodingwei/</link><pubDate>Wed, 28 Sep 2016 18:33:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/jsshixianyemiansousuodingwei/</guid><description>&lt;p&gt;相信很多小伙伴，在页面中不止一次用到过网页组合键ctrl+F的搜索功能吧，那它到底是怎么实现的呢？在一次项目中我也遇到了同样的问题，由于自己js基础甚差，索性求助于百度，几小时的搜索和整理终于劳有所获，整理了一段完整的js实现代码，贴出来，以便自己日后参考。&lt;/p&gt;</description></item><item><title>不能把平时要求自己的也强加到别人身上。</title><link>https://www.cxiansheng.cn/posts/bunengbapingshiyaoqiuzijideyeqiangjiadaobierenshenshang/</link><pubDate>Thu, 22 Sep 2016 10:01:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/bunengbapingshiyaoqiuzijideyeqiangjiadaobierenshenshang/</guid><description>&lt;p&gt;不能把平时要求自己的也强加到别人身上。人与人是不一样的，每个人都是单独的、自由的个体。&lt;/p&gt;</description></item><item><title>PHP之uploadify在框架中上传302错误的总结</title><link>https://www.cxiansheng.cn/posts/phpzhiuploadifyzaikuangjiazhongshangchuan302cuowudezongjie/</link><pubDate>Sat, 02 Jul 2016 16:01:00 +0000</pubDate><guid>https://www.cxiansheng.cn/posts/phpzhiuploadifyzaikuangjiazhongshangchuan302cuowudezongjie/</guid><description>&lt;p&gt;首先http 302是请求被重定向的意思，这就很容易理解了，如果你的uploadify处理上传脚本有session验证，就会出现此错误，因为flash在执行post请求的时候没有包含cookie信息，而服务器的session会根据客户端的cookie来得到SESSIONID。没有提交cookie自然就不能获取到session，然后uploadify就返回了302(请求被重定向)的错误。&lt;/p&gt;</description></item></channel></rss>