欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > 面试题整理1

面试题整理1

2025/4/19 8:48:05 来源:https://blog.csdn.net/json_ligege/article/details/143351152  浏览:    关键词:面试题整理1

实际参与的某公司面试,总结了遇到的值得整理记录的面试题。

目录

相对路径

正序判断

倒序判断

输出部门负责人及下级

代码实现

最终效果

科目平均分

SQL筛选

代码实现

分组错误

原因

查看版本

确认模式

设置模式

相遇洞穴

代码实现

方式一:

方式二:

PHP7默认支持特性

MySQL蠕虫复制sql语句

总结


相对路径

两个文件路径 a=”/a/b/11/22/a.php” b=”/a/b/33/44.b.php”

输出b到a的相对路径为:../../11/22/a.php

有两种算法,只是顺序不同。

正序判断

示例如下:

function getPath($a, $b)
{if (empty($a) || empty($b)) return "";$path = $a;$path1 = explode('/', $a);$path2 = explode('/', $b);for ($i = 0; $i < count($path1); $i++) {if ($path1[$i] == $path2[$i]) {$path = str_replace($path1[$i].'/', '../', $path);} else {break;}}return $path;
}print_r(getPath($a, $b));

倒序判断

示例如下:

function getPath2($a, $b)
{if (empty($a) || empty($b)) return "";$path1 = explode('/', $a);$path2 = explode('/', $b);$num = count($path1);$path_prefix = '';$path_end = '';for ($i = ($num - 1); $i >= 0; $i--) {if ($path1[$i] != $path2[$i]) {$path_end = $path1[$i] . '/' . $path_end;} else {$path_prefix .= '../';}}return $path_prefix . rtrim($path_end, '/');
}print_r(getPath2($a, $b));

输出部门负责人及下级

部门分级列表 输出每个下级包括间接下级。

$arr = ['张三' => ['王五' => ['王六' => '王七'],'赵六' => null
], '李四' => ['李一' => null,'李二' => ['李三' => '李武']
]
];

 

输出格式:

张三:王五,王六,王七,赵六

王五:王五六,王五七

赵六:

代码实现

function getLevel($arr)
{// 获取所有下级人员名称function getSubNames($arr){$tmp = [];foreach ($arr as $k => $v) {$tmp[] = $k;if (is_array($v)) {$tmp[] = getSubNames($v);} else {if ($v) $tmp[] = $v;}}return implode(',', $tmp);}// 把所有部门从下级中拎出来 重组数组function mergeArr($arr){$data = [];foreach ($arr as $k => $v) {$data[$k] = $v;if (is_array($v)) {$data = array_merge($data, mergeArr($v));}}return $data;}$res = [];$data = mergeArr($arr);foreach ($data as $k => $v) {if (is_array($v)) {$str = getSubNames($v);} else {$str = $v;}$res[] = $k . ':' . $str;}return $res;
}print_r(getLevel($arr));

最终效果

科目平均分

学生报考多科目 每个科目可以报考多次 以最高成绩记为有效成绩

计算每个科目有效成绩的平均分

SQL筛选

SELECT name, type, score FROM `kemu` group by name,type order by score desc;

结果:

分别取每个科目,每个学生的最高分,总数据条数10条,分组后为9条。

代码实现

统计总分和各科目报考人数计算科目平均分。

代码如下:

$arr = [['name' => '小红', 'type' => '语文', 'score' => 100],['name' => '小明', 'type' => '语文', 'score' => 99],['name' => '小红', 'type' => '英语', 'score' => 90],['name' => '小刚', 'type' => '语文', 'score' => 90],['name' => '小红', 'type' => '数学', 'score' => 89],['name' => '小明', 'type' => '数学', 'score' => 88],['name' => '小刚', 'type' => '数学', 'score' => 88],['name' => '小刚', 'type' => '英语', 'score' => 88],['name' => '小明', 'type' => '英语', 'score' => 79],
];
// 查询得到的数组
function getAvg($arr)
{$res = [];foreach ($arr as $v) {$res[$v['type']][] = $v['score'];}foreach ($res as $k => $r) {echo $k . '平均分:' . number_format(array_sum($r) / count($r), 2);echo '<br/>';}
}getAvg($arr);

运行结果:

语文平均分:96.33
英语平均分:85.67
数学平均分:88.33

分组错误

MySQL报错1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.kemu.score' which is not functionally dependent on columns in GROUP BY clause
原因

Mysql版本问题

①在mysql5.7以上的版本中,对于 group by 的这种聚合操作,如果在select 中的列,没有在group by 中出现,那么这个SQL是不合法的,因为列不在group by的从句中,所以对于设置了这个mode的数据库,在使用group by 的时候,就要用MAX(),SUM(),ANT_VALUE()的这种聚合函数,才能完成GROUP BY 的聚合操作。

②在MySQL数据库版本为5.7以上的版本,默认开启了 ONLY_FULL_GROUP_BY SQL模式,在此模式下,对于group by操作,如果在select语句中的查询列没有在group by中出现,那么这个SQL就是非法的,因为列不在group by语句中,所以设置了sql_mode=only_full_group_by的数据库,在使用group by时就会报错。

查看版本

-- 查询mysql版本命令一:5.7.30

select version() from dual;

-- 查询mysql版本命令二:5.7.30

select @@version

确认模式

-- 查看mysql默认的模式方式一:

SELECT @@GLOBAL.sql_mode;

-- 查看mysql默认的模式方式二:

SELECT @@SESSION.sql_mode;

设置模式

去除 ONLY_FULL_GROUP_BY模式,重新设置值。

set @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';set @@SESSION.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

之后分组sql可以运行了。

相遇洞穴

兔子和狼沿着环形山洞前进,兔子每天l个山洞,狼每天k个山洞,

问兔子和狼几天后相遇同一个山洞?

代码实现

方式一:
function getDayNum($n, $l, $k)
{$tu = $l;$lang = $k;$day = 1;while (true) {if ($tu == $lang) {break;}$tu += $l;$lang += $k;if ($tu >= $n) {$tu -= $n;}if ($lang >= $n) {$lang -= $n;}$day++;}return $day;
}echo "<br/>";
echo getDayNum(10, 2, 5);
方式二:
function getDayNumV2($n, $l, $k)
{$tu = $l;$lang = $k;$day = 1;while (true) {if (($tu + $lang) % $n == 0) {break;}$tu += $l;$lang += $k;$day++;}return $day;
}echo getDayNumV2(10, 2, 5);

运行结果:

10

 

PHP7默认支持特性

标量类型声明

返回类型声明

空合并运算符

匿名类

生成器

异步异常处理

MySQL蠕虫复制sql语句

insert into table_back (name,course,score) select name,course,score from tableName;

总结

总结了面试遇到的值得整理记录的面试题。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词