整理自慕课网360大牛全面解读PHP面试 ,购买链接:https://coding.imooc.com/class/133.html
推荐 牛客网 剑指Offer 刷题连接 https://www.nowcoder.com/ta/coding-interviews?page=1
1.常见算法考察点
真题回顾
请写入常见的排序算法,并用PHP实现冒泡排序,请将数组按照从小到大的方式进行排序;
考点分析
冒泡排序的原理和实现;
算法的概念 :解决特定问题求解步骤的描述,在计算中表现为指令的有序序列,并且每条指令表现一个或多个操作; 算法的五个特征,有穷性、确切性、输入项、输出项、可行性。
时间复杂度和空间复杂度概念 : 算法评定 时间复杂度 效率o(1)>o(log2n)>o(n)>o(nlog2n)>o(n^2)>o(n^3)>o(2^n)>o(n!)>o(n^n) 空间复杂度;
常见的排序算法; 冒泡排序 : 原理两两相邻的数进行比较,如果反序就交换否则不交换。 插入排序。希尔排序 原理 把待排序的数据根据增量分成几个子序列,对子序列进行插入排序,直到增量为1,直接进行插入排;增量的排序一般是数组长度的一半,再变为原来增量的一半,直到增量为1。 选择排序 原理每次从待排序的数据元素中选择出最小的或者最大的放在序列的起始位置,直到全部待排序的数据用完,时间复杂 o(n^2)空间复杂度o(1)。快速排序 原理 通过一趟排序将要排序的数据分割成两个独立的部分,其中一部分的数据比另一部分的数据都要小,然后再按照此方法对这两部分的数据分别进行排序,整个排序过程可以递归完成。堆排序 原理 把待排序的元素按照大小在二叉树上进行排序,排序好的元素要满足:父节点的元素大于等于子节点,这个过程叫堆化过程,如果根节点存放的最大数,则叫做最大堆,如果是最小数则叫最小堆,可以吧根节点拿出然后再堆化,循环到最后一个节点。、 归并排序 原理 将两个或者两个以上有序表合并成一个有序表,即把待排序列分成若干有序的子序列,再把有序子序列合并成整体有序序列。
常见的查找算法 二分查找 原理 从数组的中间元素开始,如果中间元素正好是要查找的元素,搜索结束,如果某一个特定元素大于或者小于,则在数组大于或者小于中间元素的那一半数据中查找,如果某一步数组变空了,代表没有数据。 顺序查找
一网打尽
简述时间复杂度和空间复杂度概念
2.常见数据结构考察点
真题回顾
请简单描述下数据结构的特征(stack, heap,list,doubly-linked-list,linked-list,queue,array(vector)).
考点分析
array() 数组 :特性: 使用连续的内存来存储,数组中的所有元素必须是相同的元素或者类型的衍生(同质数据结构),元素可以通过下标直接访问;
linked-list:链表
stack 栈
heap 堆,一般情况下,堆叫二叉堆,近似完全二叉树的数据结构。
list 线性表
doubly-liked-list 双向链表
queue:队列
set:集合 保存不重复的元素
map:字典
graph:图 通常使用邻接矩阵和邻接表 表示,前者易实现但是对于稀疏矩阵会浪费较多空间,后者使用链表的方式存储信息 但是对于图搜索时间复杂度较高;
一网打尽
用PHP实现一个双向多列
(array_shift array_unshift array_pop array_push)
3.其他逻辑算法考察点
真题回顾
1,2,3,5,8....求第三十位的数是多少? (斐波那契数列)
考点分析
逻辑思维能力
一网打尽
请写一个函数,实现以下功能:字符串 open_door 转换成OpenDoor , make_by_id 转换成MakeById ;
(explode(), ucfirst() )
4.模拟内置函数考察点
真题回顾
不使用php函数,写个方法反转字符串;
考点分析
逻辑思维能力;
对php内置函数的熟悉程度
字符串和数据处理能力
一网打尽
不使用内置函数 实现数组的合并