理解指针或引用的含义
对于指针的理解可以用一句话概括
将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指针,或者反过来说,指针中存储了这个变量的内存地址,指向了这个变量,通过指针就能找到这个变量。
比如下面的代码
p—>next = q;
表示p节点的后继指针存储了q节点的内存地址。p—>next = p—>next—>next;
表示p节点的后继指针存储了p节点的下下个节点的内存地址。
对于指针的理解可以用一句话概括
将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指针,或者反过来说,指针中存储了这个变量的内存地址,指向了这个变量,通过指针就能找到这个变量。
比如下面的代码
p—>next = q;
表示p节点的后继指针存储了q节点的内存地址。p—>next = p—>next—>next;
表示p节点的后继指针存储了p节点的下下个节点的内存地址。
缓存是一种提高数据读取性能的技术,在硬件和软件中都有很多应用。比如常见的CPU缓存、数据库缓存、浏览器缓存
缓存淘汰机制:缓存的大小是有限制的,当缓存满了后哪些数据需要被清除 哪里需要被保留,这些都需要缓存淘汰策略来决定。一般分为 先进先出策略 FIFO、最少使用策略 LFU、最近最少使用 LRU
链表(Linked List)是一种稍微复杂一点的 数据结构。通过 指针 把零散的内存串联起来,其中内存块一般称为 结点。为了把内存串联起来,每个结点存储数据外还需要存储下一个结点的地址。
它和数组的区别是,数组需要一组 连续的内存空间 来存储,对内存要求比较高。比如我们需要一块100M的内存空间,假如内存还有足够剩余空间但是没有连续的100M内存空间了,这个时候就会申请失败。
而链表和数组相反,它不需要一块连续的内存空间,它通过指针将一组 零散的内存空间 串联起来,最后拼起来内存空间总和足够即可。
在每一种语言当中都会有数组这种 数据类型,同时它还是一种最基础的 数据结构。
数组:是一种 线性表 数据结构,它用一组 连续的内存空间来存储一组具有相同类型的数据
线性表:就是数据排列成像一条线一样的结构。每个线上的数据最多只有前和后两个方向。线性表包括 数组、链表、队列、栈
非线性表:数据排序不是简单的前后关系数据结构,比如 二叉树、堆、图
对于算法自己确实很菜,吃了很多亏就不说了,所以最近准备好好补充下相关知识,先拿复杂度分析来说吧。惯用三联 是什么? 为什么? 如何学习与改进?
数据结构和算法本身就是为了解决 『运行效率』 和 『占用空间』 这个问题的。 如何让程序代码运行的更快,更节省存储空间,这就需要算法了,而执行效率是考核质量的一个很重要的标准。
一般说到算法,我们都会用一个复杂度来说明这个算法的 好与坏 其实这个好与坏就是 优秀算法 和 垃圾算法 的区别了。那么怎么区别呢?这就引出了一个概念 复杂度分析 。
因为涉及到『运行效率』 和 『占用空间』,所以有2个复杂度分析 分别是 时间复杂度分析
和 空间复杂度分析
今天看到一篇很好的文章 优化Mysql随机取出N条记录。 有时候会遇到 比如从一张表中随机取出N条 不重复 记录的需求,然后我以前都是上去就是这样 SELECT * FROM table ORDER BY RAND() LIMIT 1
今天发现这个有个性能漏洞 当数据量大的时候 会吓死你 下面我准备了一张3000W数据的表 就2个字段 来模拟下优化
一早上公司就在找我,说公司公众号登录不了,整天搞事情!爬起来 一开机执行 vagrant up
启动虚拟机就挂了,一直在报错 无法给 C:\Users\username\.VirtualBox VMs\xxxx
写入,写入失败 看的我一脸懵逼 然后瞄了眼发现C盘爆红了… 空间不足了这是啊 只有3个G可用了 好了问题原因找到了 空间不足写入失败,生成不了box启动个鬼 就想着把他的这个路径给迁移出去
之前有一段代码使用了Laravel模型关联的预加载with()
方法,代码类似如下
|
|
结果类似如下
|
|
造成了某些结果的servant属性对应的是空,但事实上他们在数据库中是有对应关联数据的,然后造成了一个bug. 今天重新看了下 with()
的源码感觉终于知道了原因
之前有遇到需要打印出执行SQL的问题,在Laravel的ORM关联模型中 之前都是用 builder
对象执行 toSql()
方法 或者写错一个字段名 这样会报错显示出SQL(满脑子的骚操作…) 感觉不能在懒下去了 还是要回归正途使用 Laravel-Debugbar 然后安装又遇到了幺蛾子
今天在群里看到一个问题 “PHP执行中内存是什么样子的?”,我还真不知道…找了点资料