记录某次求职带来的结晶,那些被遗忘了的基础知识
记录博主今天在某个公司的基础面试过程给自己带来的惊醒和怀疑人生, 那些被我逐渐遗忘的基础知识. 不多吹水, 开始鞭尸, 上面试题
第一题:
写出一个shell表达式, 用于给file文件名的文件进行权限的赋权的shell 语句
drwxr-x-wx
别看这是一道非常简单的题目, 但是考验的基础知识还是有几个点的
1、文件权限的命令chmod
2、r w x 分别代表的权限数值
其中 r 代表的读权限, 在linux系统中读权限是使用 4 表示
其中 w 代表的写权限, 在linux系统中写权限是使用 2 表示
其中 x 代表可执行权限, 在linux系统中可执行权限使用 1 表示
由此我们可以知道, 文件权限表示的是 753 对应的命令是 chmod 753 ./file
那么为什么是权限的赋权限的值753呢? 我们应该怎么知道是753呢, 在回答这些问题之前, 首先我们需要先知道, 我们的权限的表示是3位为一对的表示规则, 因为我们有rwx 3个不同的权限, 所以每3位是一个权限的表现形式, 上示例图:
解析:
drwxr-x-wx
其中的d: 第一位表示文件类型。d是目录文件,l是链接文件,-是普通文件,p是管道
然后我们拆分来看,
第一个部分: rwx , 我们已经知道分别代表的值, 那么加一下即可得出rwx的权限值为: 4 + 2 +1 = 7
第二个部分: r-x, 其中没有w 权限, 中间被-代替, 所以是空的, 那么这个权限值就是: 4 + 0 + 1 = 5
第三个部分:-wx, 同理 0 + 2 + 1 = 3
最后组合起来 753, 所以shell命令为 chmod 753 ./file
个人感悟:
第一个错误: 记错了r w x分别代表的权限数字, 导致出来了一个644这个离谱的权限值
第二个错误 : 虽然知道是chmod, 但是参数写错了, 不知道为什么, 这么常用的命令, 我写到纸上就变成了chmod ./file 644
真的是怀疑人生, 如此基础的问题, 这么多年的开发经历, 让我习以为常的东西, 居然没掌握牢靠
开始鞭尸的第二题:
id job score
1 C++ 11001
2 C++ 10000
3 C++ 9000
4 Java 12000
5 Java 13000
6 JS 12000
7 JS 11000
8 JS 9999
第1行表示用户id为1的用户选择了C++岗位并且考了11001分
。。。
第8行表示用户id为8的用户选择了JS岗位并且考了9999分
请你写一个sql语句查询各个岗位分数的平均数,并且按照分数降序排序,结果保留小数点后面3位(3位之后四舍五入):
其实该题本身很简单,但麻烦一点点的是让保留小数点后三位。
计算平均数需要用到avg()函数, 对于不同的岗位使用group by进行分组, (大家应该都比较常用)
重点在与round函数, round()函数可对小数进行四舍五入并指定保留几位小数, 此处使用round(平均值,3)表示对平均值四舍五入并保留三位小数
sql语句如下:
SELECT
job, ROUND( avg( score ), 3 )
FROM
grade
GROUP BY job
ORDER BY avg( score ) DESC;
鞭尸的第三题:
从若干副扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。
示例 1:
输入: [1,2,3,4,5]
输出: True
示例 2:
输入: [0,0,1,2,5]
输出: True
思想:
首先我们需要先将数组进行sort排序, 这样我们能够准确的知道现在有0的value有几个, 也就是我们的大王小王, 因为大小王可以记为任意的数字,来补位置
如果然后计算前一个值和后一个值之间的相差额, 然后计算是否超出边界, 并根据差额来判断是否是连续的
function isStraight($nums) {
sort($nums);
$joker = 0;
$start = 0;
while ($start < count($nums)) {
if ($nums[$start] == 0) {
$joker++;
$start++;
continue;
}
if (($nums[$start] + 1) == $nums[$start + 1]) {
$start++;
continue;
}
// 如果相差超过3,或者有重复数字,直接终止
if ((($nums[$start + 1] - $nums[$start]) >= 4) || $nums[$start + 1] == $nums[$start]) {
return false;
}
// 如果当前的数字,跟下个数字之差,比大小王个数大,肯定不是连续的
if ($nums[$start] > 0 && ($nums[$start + 1] - $nums[$start]) > $joker + 1) {
return false;
} else {
$joker -= $nums[$start + 1] - $nums[$start];
$start++;
}
}
return true;
}
$arr = [2,4,7,0,0 ];
var_dump(isStraight($arr));
至此的几个小时里, 开始怀疑我是谁, 我在那, 我在干啥呢, 同时这也在一次为我敲响了警钟, 不能因为学习了别的东西, 而忘记了最开始的时候的基础知识, 温故知新, 时不时的还是要温故, 不断夯实知识, 至此, 过程惨败, 敲响警钟, 希望未来继续加油, 再接再厉!!!
0 条评论