昨天某位仁兄把远程的release合并到master !!!虽然每个人都会犯错,但是我还想抽他,当然我自己能力不够也是一方面原因,记录一下虎扑最最最最正确的提交流程。
tp源码分析-数据库操作
tp 操作数据库有两种方式,一种是orm,一种是链式操作,其实这两种的本质都是(基于mysql)pdo的封装操作。所以当我们接触一个新的框架,在没有文档或者学习比较慢的是否,我们只需要找到这个数据库操作类中的连接(一般名称 con, 继承于pdo的类的实例,或者干脆就是pdo的实例),然后用pdo
的api 去操作数据就好了。
虎扑这几天的git流程总结
首先说一下虎扑的代码开发流程(包括提交,发布流程不太明白,对金啃死了解太少)。公司给每个人分了台虚拟机(类似云主机),
我原先的想法是通过在虚拟机上clone 代码,然后通过phpstorm 的远程连接主机的功能,实现在本地开发,然后映射到虚拟机上代码改变。可是这样有一个问题就是虚拟机linux上clone的代码的换行和我本地win上的换行不一样,虽然开发的时候没有影响,但是要是在win上提交代码就会出现很多没有修改的代码也会有modifyed(其实git 本身做了兼容,在clone的时候,但主要是我现在把linux代码拉取到本地,所以才会这样)。而且我也不可能在linux上提交,毕竟提交的时候需要通过一些工具观察文件的改变,所以改成了第二种方式
通过在本地和远程都clone 代码,然后通过sftp实现两个文件夹的关联,本地代码的修改也能直接映射到虚拟机,而且可以在windows上提交代码,因为是在win上clone迁出远程仓库的代码,所以提交的时候不会出现换行(crlf)的问题。
tp源码分析-Cache
需要改变的观点是
这个cache 并不能完全替代redis, 这个cache 只提供一些缓存比如redis,memcache,file 方法的聚合,比如set 设置缓存,如果配置的是redis, 走的是redis string的get 方法,如果配置的是file, 则对文件名进行hash, 然后存储在对应文件下面 (redis 键的过期不用我们代码中主动考虑,当我们使用redis 的set 命令的时候自动帮我们实现(redis有自己的键过期策略),但是file 没法设置过期时间,只有在get的时候拿着文件的mktime 加上 存储的expire time 和当前时间进行对比,如果超过了就返回null,并删除文件,当然我们在调用的时候不用考虑,单纯的通过 Cache::set() 就行了,上面的操作都是 cache的driver 之一 file 帮我们封装好了)
介绍一下 cache 库的基本结构
首先 \Cache -> facade Cache -> think Cache, 所以上述三个类都能调用cache,前面两个类等同,都只能通过 静态方式调用方法 !!!,走的是我们的默认配置。think\Cache 属于实际类,他没有 _call_static 方法,所以我们不能用这个类静态的调用方法,需要先实例化,然后去调用。
这个库包含三个基本文件
cache.php ,这个类是入口,实例化的时候走的是他的_construct, 生成handel实际处理句柄,干啥的? 对于set, get 操作,实际发起者就是他。然后就就是一些config 的配置,具体的操作并不涉及。
cache 文件夹下的 driver.php .是一个abstract class (abstract 相比较interface ,首先abstract 是类,类只能单继承,interface 是接口,可以多实现。再者abstract 中可以包含 方法实体,但是interface 中的方法都不能包含实体。这个driver.php 应该用abstract,因为他包含一些公共方法,比如 pull ->取出缓存中的一个数据并删除,可以直接通过各个cache driver 的 get 和rm 方法的组合,并不需要每个 cache driver 各自定义,所以他的pull 方法可以直接包含方法体)。
三个星期的PHP面试
故事发生背景:男,94年,工作经验2.5年,普通一本,软件工程,裸辞,8月9日裸辞!!!然后在上海和家呆了一星期,去云南玩了一星期,后来回上海写简历,租临时住所一星期,9月1日正式开启我的找工作之旅。
关于ob函数
在看源代码的时候还有phpexcel 的时候经常都会看到ob 函数,ob函数主要是用于处理php 的缓存的,默认cli 下ob 是关闭的,需要我们手动打开
(之前看到的fastcgi-finish-request 和上面的缓存也是有一点关系的哦), 每当php 返回数据的时候,我们可以这么看待传输过程,首先是php把数据给webserver, webserver 再把数据给cli ,webserver 在传输给cli 的过程中php的处理进程并没有结束,所以这之间的传输效率也会影响php进程的存活时间,当这之中传输过慢的时候,就会导致大量的php进程存在(php维护的的数据库单例连接也就存在),有时候我们想尽快的结束这个php进程,可以让php 传输给webserver 的时候开启一个缓冲池,当缓冲池满的时候一次性推给webserver,然后fastcgi_finish_request ,这之后就和php进程没关系了,php就可以接受下一个请求或者断开都可以