面试题集
日常面试题收集
r_martian
这个作者很懒,什么都没留下…
展开
-
【算法】N叉树层序遍历
给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。/** * Definition for a Node. * class Node { * public $val = null; * public $children = null; * function __construct($val = 0) { * $this->val = $val; * $this->children = array();.原创 2021-09-19 11:56:22 · 237 阅读 · 0 评论 -
【算法】二叉树层序从叶子到根反向输出
给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)/** * Definition for a binary tree node. * class TreeNode { * public $val = null; * public $left = null; * public $right = null; * function __construct($val = 0, $left = null, $.原创 2021-09-19 11:27:20 · 253 阅读 · 0 评论 -
【算法】堆排序
初始化堆(大顶堆/小顶堆),从而进行堆排序<?phpfunction heapify(&$arr, $n, $i) { if ($i >= $n) return; $c1 = 2 * $i + 1; $c2 = 2 * $i + 2; $max = $i; if ($c1 < $n && $arr[$c1] > $arr[$max]) $max = $c1; if ($c2 <.原创 2021-08-31 19:43:33 · 99 阅读 · 0 评论 -
【算法】两数之和等于target,返回索引
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标,假设每种输入只会对应一个答案。class Solution { /** * @param Integer[] $nums * @param Integer $target * @return Integer[] */ function twoSum($nums, $target) { .原创 2021-08-22 14:46:11 · 297 阅读 · 0 评论 -
【算法】有序数组中,两数和为指定值的数
给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。输入: numbers = [2, 7, 11, 15], target = 9输出: [1,2]解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2.原创 2021-06-16 23:01:44 · 399 阅读 · 2 评论 -
【算法】三数之和等于指定值
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。解题思路1 暴力,三层循环2 在1的基础上,把内两层的循环开始从0变成从外层的i+13 往两数之和的方案上靠(代码如下),几个continue的点比较重要class Solution { /** * @param Integer[] $nums * @ret.原创 2021-06-13 22:57:24 · 1284 阅读 · 0 评论 -
【设计模式】工厂模式
一般地,很多技术人员在工作前期,很少关注代码结构,每次来一个需求,就是在现有代码的基础上增加新代码实现,这样并没有错,只不过长久下去,会导致代码的可维护性非常差(项目中,大函数常常遇到),比如,一个项目交接多次后,很多的业务逻辑很难梳理清楚,为了增加代码的可维护性,那么应该怎么办呢?可以看出,当抽象的层次越高,开发量越大,文件越多,但结构更加清晰明了,所以有利有弊,任何一种模式,只要被合适的场景下使用,就是好的代码实践,切勿为了使用而使用。当有新的鼠标生产商出现时,需要创建新的。以不同厂商生产鼠标为例。..原创 2021-05-31 09:45:46 · 100 阅读 · 0 评论 -
【算法】二叉树锯齿层序输出
思路:层序的思路即queue实现bfs,然后就锯齿形的输出,只需在每层节点收集时,是前插入收集列表,还是后插入收集列表即可。/** * Definition for a binary tree node. * class TreeNode { * public $val = null; * public $left = null; * public $right = null; * function __construct($val = 0, $left = n原创 2021-05-29 08:39:27 · 130 阅读 · 0 评论 -
【算法】快排
<?phpfunction qs(array $arr) { $len = count($arr); if (!is_array($arr) || $len <= 1) { return $arr; } $piot = $arr[0]; $l = $r = []; for ($i = 1; $i < $len; $i++) { if ($arr[$i] < $piot) {原创 2021-04-15 22:19:55 · 69 阅读 · 0 评论 -
【算法】二进制加法
<?php$a = [1,0,1,1,0];$b = [1,0,0,1,0,1];function test($a, $b) { if (!$a || !$b) { return $a ?: $b; } $c = []; $carry = 0; $len = max(count($a), count($b)); for ($i = 0; $i < $len; $i++) { $tmp = 0;原创 2021-04-15 22:07:01 · 132 阅读 · 0 评论 -
linux命令sed, awk日志统计
awk一行数据的部分属性去重统计awk '{print $7}' base.20180514.log | grep 'keyword' | awk -F '?' '{print $2}' | awk -F '&' '{print $1}' | uniqsed统计一个时间段的日志数量sed -n '/2018-05-16 21:00:00/, /2018-05-16 22...原创 2018-06-03 17:18:48 · 2781 阅读 · 0 评论 -
MYSQL 索引最左匹配原则
转自知乎问题:mysql索引最左匹配原则的理解?具体问题描述如下:CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `cid` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `nam...原创 2018-06-18 11:06:45 · 2659 阅读 · 1 评论 -
nginx与php-fpm通信
nginx和php-fpm通信有tcp socket和unix socket两种方式。unix socket方式 优点: unix socket要比tcp快,且消耗资源少,因为socket之间在nginx和php-fpm的进程之间通信,而tcp需要经过本地回环驱动,还要申请临时端口和tcp相关资源。缺点: unix socket相比不是那么稳定,当并发连接数爆发时,会产生大量的长时缓...原创 2018-06-26 23:44:18 · 800 阅读 · 0 评论 -
【算法】二分查找
二分查找是比较常用且高效的查找算法,原理是给定一个有序数组和待查找target,利用分治思想进行搜索。 默认数组是升序,时间复杂度O(logn),空间复杂度O(1)&lt;?php #二分查找 function BinarySearch(Array $arr, $target) { $length = count($arr); if (!is_...原创 2018-07-08 09:42:49 · 233 阅读 · 0 评论 -
重新认识GET,POST
GET, POST是http协议的两种请求方式,每当有人问两者的区别时,每个开发人员都能说出一堆,比如: 1 GET在浏览器回退时是无害的,而POST会再次提交请求。 2 GET产生的URL地址加入书签,而POST不可以。 3 GET请求会被浏览器主动cache,而POST不会,除非手动设置。 4 GET请求只能进行url编码,而POST支持多种编码方式。 ...原创 2018-07-08 16:31:27 · 363 阅读 · 0 评论 -
【深度】闭包(closure)必知
很多人在面试时,针对对应的编程语言,都会被问【什么是闭包?】,当然很多人也都如临大敌,回答的模棱两可。那么,闭包到底是什么?1 什么是闭包闭包可以访问所在的词法作用域,且拥有更长的生命周期,保持对当前词法作用域的引用A closure is a function having access to the parent function, even after the parent function has close.闭包是一个函数有权访问其父级函数,即使父级函数已经结束上面的解释很难让人原创 2021-03-27 09:15:46 · 170 阅读 · 0 评论