面试
最近打算换工作,面试的时候遇到一些好的题目,来分享下
试题
- linux下执行“ls -l”看到的某文件属性为“drwxr-xr-x”,下面的字母对应的
(1)(2)(3)(4)(5)什么意思,填在字母对应的横线上。(6分)
d |
r |
w |
x |
r |
- |
x |
r |
- |
x |
(1) |
(2) |
(3) |
|
|
(4) |
|
|
|
(5) |
(1)文件类型:目录文件(2)所有者可读(3) 所有者可写(4)所有者所在组其他用户无写权限
(5)其他组用户有可执行权限
- 文件test.log中每行的格式为:“姓名,职级,绩效考核等级”(等级为S A B C D)。使用awk(其他语言也可)快速统计每个等级的员工人数。(6分)
#!/bin/bash
awk 'BEGIN{Na=0;Nb=0;Nc=0;Nd=0;Ns=0;} {if($3=="A") Na++; if($3=="B") Nb++; if($3=="C") Nc++; if($3=="D") Nd++; if($3=="S") Ns++; } END{print "A:"""Na; print "B:"""Nb; print "C:"""Nc;
print "D:"""Nd; print "S:"""Ns;}' test.log
- 使用shell命令完成如下任务:从当前目录(及其所有子目录)下的所有扩展名为“.log”的文件中,过滤出所有包含“error”字符串的行,并对结果进行自然排序,然后输出到当前登录用户主目录下的error.log文件中。(15分)
- 以下函数的功能及返回类型。(10分)
函数名 |
功能 |
返回类型 |
array_map |
将回调函数作用到给定数组的单元上 |
数组 |
krsort |
对关联数组按照键名进行降序排序。 |
布尔类型 |
array_merge |
用于把一个或多个数组合并为一个数组 |
合并的数组 |
array_filter |
用回调函数过滤数组中的元素 |
过滤的数组 |
filter_var |
通过指定的过滤器过滤一个变量 |
成功的话,返回被过滤的数组,失败则返回false |
shuffle |
把数组中的元素按随机顺序重新排列 |
布尔类型 |
- 请实现一个完整的函数,传入两个参数字符串$a和$b,删除$a中出现了的$b的所有字符,如 $a =‘欢迎您来到鲁大师面试。’,$b=‘祝您面试顺利。’,则返回值为‘欢迎来到鲁大师’。(20分)
答:function del_sub_str($a,$b){
$a_strlen=iconv_strlen($a,”UTF-8”);
$b_strlen=iconv_strlen($b,”UTF-8”);
$a_array=array();
$b_array=array();
for($i=0;$i<$a_strlen;$i++){
$a_array[]=iconv_substr($a,$i,1,”UTF-8”);
}
for($i=0;$i<$b_strlen;$i++){
$b_array[]=iconv_substr($b,$i,1,”UTF-8”);
}
$diff=array_diff($a_array,$b_array);
//将数组转化成字符串
echo implode(‘’,$diff);
}
- 列举几个php7的新特性?(5分)
答:PHP常量数组、PHP匿名类、use语句
- Mysql常用数据类型和sql优化(15分)
常用数据类型:char varchar int tinyint smallint float double
datetime timestamp
a)varchar 和 char的区别 (2分)
答:char是一种固定长度的类型,varchar则是一种可变长度的类型
b)datetime 和 timestamp的区别(2分)
答:
1) datetime “1000-01-01 00:00:00” 到“9999-12-31 23:59:59” 8字节
timestamp 19700101000000 到2037 年的某个时刻 4字节
datetime的日期范围是1001-9999,timestamp的时间范围是1970-2038年。
2) Datetime存储时间与时区无关,timestamp存储时间与时区有关,显示的值也依赖于时区。在mysql服务器,操作系统以及客户端连接都有时区的设置。
c)“int(10)”中的数字10是什么含义?(2分)
答:最大指示宽度是10
d)使用explain查看sql分析时,你对结果最关注的列及这些列常用值的含义。
(9分)
答:type本次查询表连接类型,从这里可以看到本次查询大概的效率
key最终选择的索引,如果没有索引的话,本次查询效率通常很差
key_len 本次查询用于结果过滤的索引实际长度
rows预计需要扫描的记录数,预计需要扫描的记录数越小越好
Extra额外附加信息,主要确认是否出现Using filesort、Using temporary这两种情况
- 列举常见的安全问题类型(如sql注入等等),越多越好。并举实际场景说明以及如何处理。(如果某场景文字过多,只写出安全问题的类型,场景和处理方法稍后口述即可)(10分)
答: 跨网站请求伪造攻击(CSRF)
Session会话劫持 URL攻击
- 以下有三个问题:
a)http请求结果为500是什么意思?通过什么方法查看500的原因?(4分)
答:500是服务器内部错误。遇上错误首先想到的肯定是先看服务器的进程还在不在,然后查看日志,从日志里面找原因。
1.数据库异常
2.域名异常
3./etc/hosts没有配置解析
4.logout的URL配置问题,网站的退出登录时,页面直接报500 5.memcached异常,页面登录,报500
b)用户访问www.ludashi.com首页,当使用不同客户端(如手机和PC)访问该URL时,呈现的页面结果却不相同,如何实现?(3分)
答:通过$_SERVER[‘HTTP_USER_AGENT’]判断浏览器类型,然后include不同的模板代码。
c)如何防止站内图片被盗链?(3分)
答:http标准协议中有专门的字段记录referer
1)它可以追溯到请求时从哪个哪个网站链接过来的
2)对于资源文件,可以追踪到包含显示他的网页地址是什么
因此所有防盗链方法都是基于这个Referer字段,用得比较多的方法有以下两种:
第一种:是使用apache文件FileMatch限制,在httpd.conf中增加以下语句或者将其存成一个.htaccess文件,并放到网站的根目录(www/html目录)
SetEnvIfNoCase Referer “^http://yahoo.com/” local_ref=1
Order Allow,Deny
Allow from env=local_ref
Allow from 127.0.0.1
这种很方便禁止非允许访问URL引用各种资源文件
第二种:使用rewrite,需要增加apache的mode_rewrite,支持.htaccess文件目录权限限制,在虚拟主机根目录增加.htaccess文件,描述重定向,把非本地地址refer的图片文件都从定向到警告图片或者警告网页上。
- 多域名情况下,如何实现用户在某域名下登陆后,其他域名也同时登陆,退出后其他域名也同时退出。
答:多域名同步登录,单点登录SSO