官方文档已经明确说明:Go里边函数传参只有值传递一种方式: 值传递
那么为什么会引发Go的值拷贝的讨论?
Go的调试工具:gdb vs dlv
GoLand编辑器虽然很强大,但是在展示内存及堆栈信息这一块还是比较的弱,有可能是我的姿势不对,所以,开始切入了gdb调试,但是gdb踩到了坑,并没有解决,也就引发了gdb与dlv的对比了
Linux终端科学上网
对于经常在服务商使用git 和 composer 的我来说,实在受不了那几k的网速,但是毕竟使用较少,而且,还可以使用国内镜像源,但是近期要使用Google API,这个就有点头疼了。所以,废话不多话,直接上步骤,没什么技术含量。
SeLinux引发的问题小记
以前自己在部署服务器的时候,忘了遇到了什么坑,导致后来习惯性把新服务器上的 SeLinux 服务直接关闭,今天处理了一台不是我部署的服务器,又踩了两个坑,这里做一下记录,后面有时间还是要好好了解一下这块。
FastCGI sent in stderr: “Primary script unknown” while reading response header from upstream
这个问题一般是 SCRIPT_FILENAME 这个变量没有设置好,但是打印出来其实是正确的,也就是证明nginx的配置时没有问题的,可以考虑是 SeLinux 的原因
处理: chcon -R -t httpd_sys_content_t /path/to/webroot
chmod 777 后依旧 failed to open stream: Permission denied
处理:
1 | setenforce Permissive |
深入理解PHP系列之线程安全
进程: 进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。
线程: 线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的)。
根据前面三篇文章《浅析堆栈和内存溢出》 《深入PHP系列之PHP数组底层的实现》《深入PHP系列-变量分离与引用》可以得知,PHP的变量是由zval结构体构成的,数组则是hash表和链表构成的,这些,都是程序员进行分配销毁的内存,也即堆内存。由此可得,在不同的线程中,PHP其实是共享变量的,如果线程1修改了变量a, 则线程2使用变量a的时候,就是线程1修改后的结果,所谓线程安全也就是,如何保障,各个线程之间可以安全的使用公共的资源,不受影响且不影响其他线程。因此,PHP实现了一个线程安全资源管理器(Thread Safe Resource Manager, TSRM),用于解决这个问题,实现线程之间安全的操作公共资源。
深入PHP系列之PHP数组底层的实现
数组是PHP中非常强大、灵活的一种数据类型,它的底层实现为散列表(HashTable,也称作:哈希表),除了我们熟悉的PHP用户空间的Array类型之外,内核中也随处用到散列表,比如函数、类、常量、已include文件的索引表、全局符号表等都用的HashTable存储。
散列表是根据关键码值(Key value)而直接进行访问的数据结构,它的key - value之间存在一个映射函数,可以根据key通过映射函数直接索引到对应的value值,它不以关键字的比较为基本操作,采用直接寻址技术(就是说,它是直接通过key映射到内存地址上去的),从而加快查找速度,在理想情况下,无须任何比较就可以找到待查关键字,查找的期望时间为O(1)。
深入PHP系列之PHP排序sort函数实现
PHP的数组是个很强大的存在,而且使用PHP的数组的时候,只要你能想到,基本都已实现,所以也让我慢慢忘记了排序算法的存在。近期,有个人问我,PHP的sort函数是怎么实现的,尴尬,在重温了一遍算法之后,根据我大学依稀存在的C语言基础,尝试阅读了一下PHP的sort函数实现的源码,以下是以PHP7.3源码为例,个人技术水平有限,仅供参考