校招笔试题
文章目录
- 一、前端(HTML、JS、CSS)
- 二、后端(PHP及其他语言)
- 三、数据库
- 四、网络
- 五、Linux
- 六、算法
之前秋春招做过的笔试题,不定期更新……
一、前端(HTML、JS、CSS)
- 1、如何设置form表单中的只读属性
答:(1)readonly (2)disabled - 2、如何解决一下代码在IE6下双倍边距的问题
<style>div{float:left;margin-left:10px;width:200px;height:200px;border:1px solid red;}
</style>
答:添加属性display:inline;
- 3、如何解决超链接被点击后hover样式不出现的问题?
答:根据固定的顺序设置超链接的属性:link->visited->hover->active - 4、怎样定义1px左右高度的容器?
答:overflow:hidden 或 zoom:0.08 或 line-height:1px,IE6下这个问题是因为默认的行高造成的 - 5、编写代码,使得当鼠标划过文本框时,自动选中文本框的内容
答:<input id=“txt” type=“txt” value=“yyfs” οnmοuseοver=“this.select()”> - 6、js中网页前进和后退的代码
答:前进:history.forward(); history.go(); 后退:history.back(); history.go(-1); - 7、javascript能否定义二维数组,如果不能,如何解决?
答:JavaScript不能定义二维数组,到哪可以用arr[0] = new Array();来解决 - 8、CSS的正确注释是?
A、// this is a comment // B、// this is a comment
C、/* this is a comment */ D、# this is a comment
答:C - 9、请您写一段ajax提交的js代码或者写出ajax提交的过程逻辑
答:
var xmlHttp;if (window.XMLHttpRequest) {//IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码xmlHttp = new XMLHttpRequest();}elseif(window.ActiveXObject){//IE6, IE5 浏览器执行代码xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');}xmlHttp.open('GET', '1.php?name=yyfs', true);xmlHttp.onreadystatechange = function () {if (xmlHttp.readyState == 4 && xmlhttp.status == 200) {//判断ajax状态码 及 服务器返回状态码是否正常var text = xmlHttp.responseText;}}xmlHttp.send(null);
- 10、如何产生带有数字列表符号的列表?
A、<ul> B、<dl> C、<ol> D、<list>
答: C
<ol><li>咖啡</li> //1.咖啡<li>牛奶</li> //2.牛奶<li>茶</li> //3.茶
</ol><ol start="50"><li>咖啡</li> //50.咖啡<li>牛奶</li> //51.牛奶<li>茶</li> //52.茶
</ol>
- 11、以下JavaScript表达式哪些为真?
A、NaN == NaN B、null instanceof Object C、null == undefined
D、null === undefined E、false == 0 F、100 === 100 G、function(){} instanceof Object
答: CEFG - 12、foo对象有att属性,一下哪些做法是可以获取att属性的值?
A、foo[‘att’] B、foo(‘att’) C、foo{“att”}
D、foo.att E、foo[[“a”,“t”,“t”].join("")]
答: ADE - 13、请说明HTML文档中DTD的意义和作用
答:DTD,文档类型定义,是一种保证html文档格式正确的有效方法,在解析网页时,浏览器将使用DTD来检查页面的有效性,如是否符合规范,元素和标签是否正确,并采取相应的措施,同时还会影响浏览器的渲染模式。 - 14、如何不使用submit按钮来提交表单
答:利用JavaScript代码
<!-- 第一种:直接通过a标签上嵌入JavaScript代码 -->
<a href="javascript:document.myform.submit();">Submit Me</a>
<script>//第二种,利用js代码document.getElementsByTagName("form")[0].submit()
</script>
- 15、请说明HTML文档中DTD的意义和作用
答:DTD,文档类型定义,是一种保证html文档格式正确的有效方法,在解析网页时,浏览器将使用DTD来检查页面的有效性,如是否符合规范,元素和标签是否正确,并采取相应的措施,同时还会影响浏览器的渲染模式。 - 16、Ajax技术利用了什么协议?简述Ajax的工作机制?
答:HTTP协议,异步调用HTTP请求 - 17、unicode和utf-8、utf-16、utf-32的区别?
答:unicode是编码字符集,utf是字符集编码。字符的编码字符集是固定的,而字符存在计算机中的机器码取决于字符集编码。
utf-8:用1-8个字节来保存unicode编码的字符
utf-16:只能用两字节或四字节来保存字符
utf-32:把所有的字符都用32bit,也就是4个字节来表示
浅析unicode和UTF-8、UTF-16、UTF-32的区别 - 18、cookies、sessionStorage、localStorage的区别?
答:相同点:都存在客户端
不同点:(1)存储大小:cookie数据小于4k,sessionStorage和localStorage虽然也有存储大小的限制,但比cookie大得多,可以达到5M
(2)有效时间:localStorage:存储持久数据,浏览器关闭后数据不丢失,除非主机删除数据
sessionStorage:数据在当前浏览器窗口关闭后删除
cookie:设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭
(3)数据与服务端之间的交互方式:cookie的数据会自动传递到服务端,服务端也可以写cookie到客户端,sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存
(4)作用域:sessionStorage:不在不同的浏览器窗口中共享;localStorage和cookie:在所有的同源窗口中都共享 - 19、同源策略,跨域的解决方案?
答:同源指协议相同,域名相同,端口号相同,缺一不可,如http: //www.baidu.com与下面均不同源,http: //baidu.com(域名不同)和https: //www.baidu.com:8080(协议和端口号不同)
跨域:(1)jsonp:ajax,只能get请求(2)CORS:服务器设置响应头Access-Control-Allow-Origin:*或Access-Control-Allow-Method等(3)window.name+iframe(4)代理:nginx转发
二、后端(PHP及其他语言)
- 1、isset()和empty的区别
答:isset()检测变量是否被定义过,而empty()是检测变量是否为空,“”、“0”、0,empty()也认为为空,返回true
empty(‘null’) //false empty(array()) //true
empty(null) //true empty(array(array())) //false - 2、下面代码执行后的$result的值?
$x = " "; $result = is_null($x); $result = empty($x); $result = isset($x);
答:false,true,true
解析:$x是一个空串,并不是null;nul没有分配空间,“ ”分配了空间 - 3、输出代码结果
$GLOBALS['var1'] = 5;
$var2 = 1;
function getValue(){global $var2;$var1 = 0; //此时$var1是局部变量,应为$GLOBALS['var1'] = 0;return $var2++;
}
getValue();
echo $var1; //5
echo $var2; //2
- 4、使用五种方法以上获取一个文件的扩展名,如从dir/upload_image.jpg中获取jpg或.jpg
答:
/****** 第一种 ******/
function getExt1($filename){return strrchr($filename, '.');
}
/****** 第二种 ******/
function getExt2($filename){return substr($filename, strrpos($filename, '.'));
}
/****** 第三种 ******/
function getExt3($filename){return array_pop(explode('.', $filename));
}
/****** 第四种 ******/
function getExt4($filename){$ext = pathinfo($filename);return $ext['extension'];
}
/****** 第五种 ******/
function getExt1($filename){$revFilename = strrev($filename);return strrev(substr($revFilename, 0, strpos($revFilename, '.');
}
- 5、写一个函数,尽可能高效的从一个标准的url里取出文件的扩展名,例如:http://www.sina.com.cn/abc/de/fg.php?id=1,需要取出php或.php
答:
function getExt1($url)
{$arr = parse_url($url);$fileName = basename($arr['path']);$ext = explode('.', $fileName);return $ext[1];
}function getExt2($url)
{$url = basename($url);$pos1 = strpos($url, '.');$pos2 = strpos($url, '?');if ($pos2) {return substr($url, $pos1 + 1, $pos2 - $pos1 - 1);} else {return substr($url, $pos1 + 1);}
}
- 6、写一个函数,计算两个文件中的相对路径,如$a=’/a/b/c/d/e.php’;$b=’/a/b/12/34/c.php’;计算出$b相对于$a的相对路径应该是http://www.cnblogs.com/c/d/添上()
答:
<?php
$src = '/a/b/c/d/e.php';
$dst = '/a/b/12/34/c.php';
echo getRelativePath($src, $dst);
function getRelativePath($src, $dst)
{$dstDir = explode('/', $dst);$dstFile = array_pop($dstDir);$srcDir = explode('/', dirname($src));$len = count($dstDir);//下标为0的元素为空for ($i = 1; $i < $len; ++$i) {if ($srcDir[$i] != $dstDir[$i]) { //计算前面有多少段相同break;}}$returnPath = array_fill(0, $len - $i, '..');$returnPath = array_merge($returnPath, array_slice($dstDir, $i));return implode('/', $returnPath) . '/' . $dstFile;
}//返回值../../12/34/c.php
- 7、include和require都能把另一个文件包含到当前文件中,区别是什么,include_once和include的区别?
答:区别是对包含文件的需求程度
include是包含,如果被包含的文件不存在的话,则会提示一个错误,但程序会继续执行下去
require是需要,如果被包含的文件不存在或者无法打开时,则会提示一个错误并终止程序运行
once的意思是一次,则include_once和require_once表示只包含一次,避免重复包含 - 8、如何设置你想要的错误敏感结果?
答:在php.ini中设置,error_reporting = E_ALL :输出所有错误
error_reporting = E_ALL&~E_NOTICE :输出致命的错误,不输出警告的错误 - 9、如何设置你想要的错误敏感结果?
答:在php.ini中设置,error_reporting = E_ALL :输出所有错误
error_reporting = E_ALL&~E_NOTICE :输出致命的错误,不输出警告的错误 - 10、下列哪种错误无法被自定义错误处理器捕捉到(双选)?
A、E_WARNING B、E_USER_ERROR C、E_PARSE D、E_NOTICE
答:BC - 11、$x = true and false; var_dump($x); 输出结果为?
答:true
解析:“=”操作符的优先级比“and”操作符高,因此原语句可以转换为$x = true; true and false; 已经将true赋值给$x - 12、问$a的值是什么?
$arr = [1=>1, 3=>3];$i=2;
$a = 'test' . isset($arr[$i])? $arr[$i] : $i;
A、test B、NULL C、2 D、test2
答:B
解析:“.”操作符的优先级比“?:”操作符高,因此原语句可以转换为(‘test’ . isset($arr[$i]))? $arr[$i] : $i;
- 13、问下面输出的值是什么?
$a = 3;$b = 5;
if($a = 5 || $b = 7){$a++;$b++;
}
echo $a.' '.$b;
答:1 6
解析:“=”操作符的优先级比“||”操作符低,所以先判断逻辑再赋值,逻辑语句可以改为$a = ( 5 || $b = 7),此时5直接判断为true,$a = true,true++为1,$b = 5. ++= 6
- 14、问下面输出的值是什么?
$x = 2;echo $x == 2?'我' :$x == 1? '你' : '它';
答:你
解析:“==”操作符的优先级比“?:”操作符高,原语句可以改为(($x == 2)?‘我’ :($x == 1))? ‘你’ : ‘它’;
echo $x == 2 ? '我 ’ : $x==1?‘你’: '它 '; // 加粗条件为真,输出我,为真,则输出前者:你
echo $x == 1 ? '我 ’ : $x==1 ?‘你’: '它 '; //加粗条件为假,输出$x==1,为假,输出后者:它
- 15、在网站上如果要上传超大的文件,那么需要对php.ini做哪些更改?
答:upload_max_filesize:服务器允许上传文件的最大值
max_execution_time:PHP中一个指令所能执行的最大时间,单位是秒
memory_limit:PHP中一个指令所分配的内存空间,单位是M
文件上传的相关系统配置 - 16、对于流量比较大的网站,应采取什么样的措施来缓解访问量问题?
答:确认系统硬件是否足够支持当前的数据流量,数据库要做读写分离,优化数据表,为常用的数据表添加索引。程序功能限制,禁止外部用户盗链图片或信息等,限制大文件的下载,使用不同主机分流主要流量。 - 17、$v = 1; $m = 2; $l = 3; if( $l>$m>$v) echo ‘yes’; else echo ‘no’; 输出结果为?
答:“no“
解析:$l>$m会转换成1,而1 == $v,则输出结果为“no“ - 18、如何高效地计算出当前脚本执行所花费的时间?
答:$_SERVER[‘REQUEST_TIME’] - 19、写出程序的输出结果?$test = ‘aaa’; $abc = &$test; unset($test); echo $abc;
答:aaa
解析:只删除了test变量名,abc变量指向的内容还存在 - 20、解决多线程同时写一个文件的问题?
答:flock($handle, LOCK_EX); - 22、下面不是PHP语法的组成部分函数的是?
A、array B、eval C、each D、list
答:C
解析:array是数据结构,不是常规函数;eval将字符串按照PHP代码计算,list是把数组中的值赋给一些变量。each返回数组中当前的键值对,并将数组指针向前移动一步 - 23、执行代码的结果,echo function_exists(‘print’)?
答:空
解析:function_exists:检查函数是否存在,存在则返回true,否则返回false。对于语法结构的判断,例如include和echo这类性质的语法将会返回false - 24、输出代码的执行结果?
$bool = true; echo gettype($bool); echo is_string($bool);
A、boolean B、boolean0 C、booleanFALSE D、booleanfalse
答:A
解析:gettype获取数据类型,is_string是字符串则返回true,反之返回false。false打印(直接echo)为空。 - 25、写出程序的运行结果?
$a = $b = 0;
(1)if($a = 3 || $b = 3) { $a++; $b++;}
(2)if($a = 3 | $b = 3) { $a++; $b++;}
echo $a . ‘。’ . $b;
答:(1)1。1(2)4。4
解析:(1)∵$a = 3 || $b = 3中,$a和$b均为布尔值,为true,true自增无效
(1)∵或操作,则$a = $b = 3,自增为4。4 - 26、_____函数能返回脚本里的任意行中调用的函数名称,该函数同时还经常被用在调试中,用来判断错误是如何发生的?
答:debug_backtrace():返回一个二维关联数组 - 27、OO面向对象: Object Oriented :OOA :Analysis面向对象分析,OOD:Design面向对象设计,OOP:Programing面向对象编程
- 28、$fruits = [‘banana’ => ‘yellow’],不能正确得到结果‘yellow’的代码是?
A、echo “A banana is {$fruits[‘banana’]}”;
B、echo “A banana is $fruits[‘banana’]”;
C、echo “A banana is {$fruits[banana]}”;
D、echo “A banana is $fruits[banana]”;
答:B
解析:∵那样写相当于把banana拆出来,会报错 - 29、问 $data 的值是什么?
<?php
$data = ['a', 'b', 'c'];
foreach ($data as $key => $val){$val = &$data[$key];
}
答:bcc
解析:$data[0] = ‘a’; $v = &$data[0] = ‘a’
$data[1] = ‘b’; $v = &$data[1] = ‘b’
此时,$v = ‘b’,因为引用传值,则影响$data[0] = ‘b’。且$v = &$data[1],引用改变为引用$data[1],后期不会再影响$data[0],后面类似。程序流程为 abc —> bbc —> bcc
- 30、下面的运行结果是?
$date = mktime(9, 12, 31, 6, 10, 2015);
echo "创建时间是" . date("Y-m-d H:i:s", $date);
答:创建时间是2015-06-10 09:12:31
解析:mktime(hour, minute, seconds, month, day, year)
- 31、在PHP中如何获取客户端和服务端的IP地址?
答:getenv(‘REMOVE_ADDR’); // 获取客户端IP地址
getenv(‘SERVER_ADDR’); // 获取服务端IP地址
gethostbyname(‘www.sina.com’); // 获取指定域名的IP地址 - 32、详细说明session和cookie,并指出二者的区别和适用方向?
答:cookie通过在客户端记录信息确认用户身份,session通过在服务端记录信息确认用户身份
区别: 1、cookie数据存放在客户的浏览器上,session数据放在服务器上
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session
3、session会在一定时间内存放在服务器,当访问增多,会比较占用服务器的性能,考虑到减轻服务器压力的方面,应当使用cookie
4、单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie
5、建议:将登陆信息存放为SESSION,将其他信息存放在COOKIE中 - 33、PHPsession扩展默认将session数据存储在哪里?
A、SQLite Database B、MySQL Database C、shared Memory D、File System E、session Server
答:D - 34、实现中文字符串截取无乱码的方法,下列代码输出结果是
$str = 'fal天涯海角';
echo mb_substr($str,0,5,'utf8');
echo mb_substr($str,0,5,'gbk');
答:fal天涯 fal天
解析:utf8下一个中文字符占3个字节,gbk下一个中文字符占2个字节
- 35、不适用第三个变量交换两个变量的值
答:
<?php
/******** (1) 允许使用内置函数 ********/
$a = 111;
$b = 222;
list($a, $b) = [$b, $a];
/******** (2) 不允许使用内置函数 ********/
$a = "This is A";
$b = "This is B";
echo "交换之前a的值:{$a},b的值:{$b}";
//交换之前a的值:This is A,b的值:This is B
$a = $a ^ $b;
$b = $b ^ $a;
$a = $a ^ $b;
echo "交换后a的值:{$a},b的值:{$b}";
//交换后a的值:This is B,b的值:This is A
- 36、数据库关闭指令将关闭哪个链接标识?
$link1 = mysql_connect("localhost", "root", "");
$link2 = mysql_connect("localhost", "root", "");
mysql_close();
A、link1 B、link2 C、全部关闭 D、报错
答:B
解析:如果没有指定link,则默认关闭上一个打开的链接
- 37、关于mysql_pconnect说法正确的是?
A、与数据库进行多连接
B、与mysql_connect功能相同
C、与@mysql_connect功能相同
D、与数据库建立持久连接
答:D
解析:mysql_close将不会关闭该链接 - 37、$a的值是?
A、true B、1 C、false D、null
答:C
解析:未定义的变量就是false - 38、以下说法错误的是?
A、在外部访问静态成员属性时使用类名::静态成员属性名
B、在外部访问静态成员属性时使用实例化对象->静态成员属性名
C、在外部访问静态方法时使用实例化对象->静态方法名
D、在外部访问静态方法时使用类名::静态方法名
答:B
解析:静态属性不能通过一个类已实例化的对象来访问,但静态方法可以 - 39、在PHP面向对象中,下面关于final修饰符描述错误的是()?
A、使用final标识的类不能被继承
B、在类中使用final标识的成员方法,在子类中不能被覆盖
C、不能使用final标识成员属性
D、使用final标识的成员属性,不能在子类中再次被定义
答:D
解析:属性不能定义为final,只有类和方法可以 - 40、阅读下面PHP代码,并选择输出结果
class A{public $num = 100;}
$a = new A();
$b = $a;
$a->num = 200;
echo $b->num;
A、100 B、200 C、没有输出 D、程序报错!
答:B
解析:一个对象变量已经不再是保存整个对象,而只是保存一个标识符来访问真正的对象内容。另外一个变量$b与$a指向同一个对象的真正内容。∴$a->num改变,$b->num也应该改变
- 41、PDO::ATTR_ERRMODE设置为以下哪个值时,PDO会抛出PDOException?
A、PDO::ERRMODE_SILENT B、PDO::ERRMODE_WARNING C、PDO::ERRMODE_EXCEPTION D、PDO::errorInfo
答:C
解析:PDO::ATTR_ERRMODE:错误提示、PDO::ERRMODE_SILENT:不显示错误信息,只显示错误码
PDO::ERRMODE_WARNING:显示警告错误、PDO::ERRMODE_EXCEPTION:抛出异常 - 42、哪个函数可以控制PHP的错误信息是否输出到页面上?
A、error_reporting B、error_log C、error_trigger D、error_echo
答:A
解析:B:error_log发送错误信息到某个地方记录日志
C:写错,只有trigger_error()产生一个用户级别的error/warning/notice信息
D:没有这个函数 - 43、array(‘a’) + array(‘b’) 的结果是?
A、array(‘a’,‘b’) B、array(‘b’,‘a’) C、array(‘a’) D、array(‘b’)
答:C
解析:键值相同,前者不能被后者覆盖 - 44、下面属于函数,而非语法结构的是?
A、is_set B、is_null C、print_r D、print E、echo F、list G、empty
答:ABCG
解析:PHP的语言结构:echo() print() die() isset() unset() include() array() list() empty() require(),注意,include_once()是函数 ,require_once()是函数 - 45、用最少的代码写一个3值最值函数?
答:
function maximum($a, $b, $c)
{return $a > $b ? ($a > $c ? $a : $c) : ($b > $c ? $b : $c);
}
echo maximum(24, 15, 8);
- 46、$a = in_array(‘01’, [‘1’]) == var_dump(‘01’ == 1);$a的值为?
答: true,in_array(‘01’, array(‘1’))返回true,var_dump(‘01’==1)也返回true.因此$a值为true。
in_array需要配合第三个参数,才会对数据进行全等===匹配,否则还是==匹配 - 47、<?php echo -10%3;?>
答:-1
解析:-的优先级比%低,所以是-(10%3) - 48、file1 :<?php $a='123';?> file2 :<?php echo include('file.php');?>
答:1
解析:echo 的是include的返回值,但如果被包含的文件有return,则返回该return的值 - 49、下列PHP配置项中,哪一个和安全最不相关?
A、open_basedir B、register_globals C、disable_functions D、file_uploads
答:D
解析:register_globals:注册为全局变量,默认为off。
disable_functions:限制程序使用一些直接执行系统命令的函数
open_basedir:限制用户访问文件目录,但只是目录前缀 - 50、开启php.ini文件中的safe_mode选项,会影响到哪些函数的应用?至少说出四个
答:pathinfo、basename、fopen和exec等函数 - 51、<?php echo intval((0.1+0.7) * 10);?>
答:7
解析:0.1+0.7=0.8是浮点数,*10在数学计算中是正整数,在计算机中仍是浮点数8,实际值是7.9999… - 52、指出<?php echo 'Testing' . 1 + 2 . '45';?>的输出结果
A、Testing1245 B、Testing345 C、Testing1+245 D、245
答:D
解析:(‘Testing’ . 1) + (2 . ‘45’) = 数值转换 = > 0 + 245 = > 245 - 53、$x = null;if(‘0xFF’ == 255) $x = (int)‘0xFF’; echo $x; 结果是什么?
答:$x = 0而不是255
解析:将一个字符串进行强制类型转换会从左向右进行转换,‘0xFF‘转换到 ‘x‘ 时停止转换,所以$x = 0 - 54、下列语句中,希望输出的结果是什么?
$a = 3;echo “\\\$a”;echo “${a}”;
答:\$a 3
解析:转义特殊字符
三、数据库
- 1、在MySQL中,concat函数中的作用是将传入的参数连接成为一个字符串,则concat(‘aaa’, null, ‘bbb’)的结果是( )
A、aaabbb B、aaa C、bbb D、NULL
答:D - 2、如何实现MySQL数据库的双机热备份(描述出原理即可)?
答:双机热备份通过日志文件来传输服务器上数据的变化。主服务器进程在数据被更新时触发,并将相应的日志文件发送到从服务器,从服务器进程接收到主服务器发送的日志文件后,阅读日志文件并对响应的数据库进行操作。 - 3、mysql中varchar的最大长度是多少,用什么类型的字段存储大文本?
答:65535,text - 4、date、datetime和timestamp有什么区别?
答:
(1)date:只保留日期,不保留时分秒
(2)datetime:保留日期和时分秒,mysql检索且以“YYYY-MM-DD HH:MM:SS”格式显示datetime值,支持的范围是1000-01-01 00:00:00 到9999-12-31 23:59:59
(3)timestamp:格式与datetime相同,但其取值范围小于datetime,使用timestamp可以自动地用当前的日期和时间标记insert和update操作,如果有多个timestamp列,只有第一个自动更新。 - 5、怎么看数据库中有哪些sql正在进行?
答:show processlist;
四、网络
- 1、要判断IP地址是否在同一网络,下列哪一项运算正确( )
A、IP非子网掩码 B、IP或子网掩码 C、IP与子网掩码 D、IP模2加子网掩码
答:C - 2、请写出下列服务的用途和默认端口?
答:(1)FTP:专门用来传输文件的协议,默认端口21
(2)SSH:为建立在应用层和传输层基础上的安全协议,SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中信息泄露的问题。默认端口22
(3)HTTP:超文本传输协议是互联网上应为最为广泛的一种网络协议,所有的www文件都必须遵守这个标准,设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。默认端口80
(4)Telnet:是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用的电脑上使用telnet程序,用它连接到服务器上运行,就像直接在服务器的控制台上输入一样,可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。默认端口23
(5)HTTPS:是以安全为目标的HTTP通道,即在HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的内容就需要SSL。默认端口443 - 3、HTTP/1.0中,状态码200,301,304,403,404,500的含义?
答:200:服务器成功返回网页 301:请求的网页已永久移到新位置
304:自从上次请求后,请求的网页未修改过 403:服务器拒绝请求
404:请求的网页不存在 503:服务器超时 - 4、简述POST和GET传输的最大容量分别是?
答:GET方法传递数据,控制在1MB之内,POST方法传输数据没有大小限制 - 5、什么是CGI?什么是FastCGI?php-fpm,FashCGI,Nginx之间是什么关系?
解析:CGI,通用网关接口,用于WEB服务器和应用程序间的交互,定义输出规范,用户的请求通过 WEB服务器转发给FastCGI进程。
FastCGI进程再调用应用程序进行处理,如php解析器,应用程序的处理结果如html返回给FastCGI,FastCGI返回给Nginx进行输出。
假设WEB服务器是Nginx,应用程序是PHP,而php-fpm是管理FastCGI的,这就是php-fpm,FashCGI,Nginx之间的关系。
FastCGI用来提高cgi程序性能,启动一个master,再启动多个worker,不需要每次解析php.ini,而php-fpm实现了FastCGI协议,是FastCGI的进程管理器,支持平滑重启,可以启动的时候预先生成几个进程。 - 6、什么是CSRF攻击?XSS攻击?如何防范?
答:
(1)CSRF:跨站请求伪造,攻击方伪装用户身份发送请求从而窃取信息或破坏系统。基本原理:用户访问A网站登录并生成Cookie,再访问B网站,如果A网站存在CSRF漏洞,此时B网站给A网站的请求,A网站会认为是用户发的请求,从而B网站成功的伪装了身份,因此叫做跨站请求伪造
防范:1、合理规范api请求方式,GET,POST
2、对POST请求加token令牌校验,生成一个随机码并存入session,表单中带上这个随机码,提交的时候服务端进行验证随机码是否相同
(2)XSS:跨站脚本攻击
防范:不相信任何输入,过滤输入 - 7、?
答: - 8、?
答: - 9、?
答:
五、Linux
- 1、请解释下列10个shell命令的用途
答:top:该命令提供了实时对系统处理器状态的监控,它能够实时显示系统中各个进程的资源占用情况。该命令按照对CPU,内存使用和执行时间对系统任务进程进行排序显示,同时还可以通过交互式命令进行设定显示
ps:显示系统进程在瞬间的运行状态
mv:文件/目录改名或变更存储位置
find:在指定的路径下查找指定文件
df:检查磁盘空间占用情况
cat:将文件的内容打印到标准输出
chmod:改变文件的权限
chgrp:改变文件所属组
grep:过滤文本,根据指定的字符串,对文件的每一行进行搜索,若找到,则输出该内容
wc:统计指定文件中的字节数,字数,行数,并将统计结果输出显示 - 2、?
答: - 3、?
答: - 4、?
答: - 5、?
六、算法
- 1、有一组数28, 32, 43, 14, 53, 67, 42, 54, 46, 31,写程序排列这组数(要求:第一个最大,第二个最小,第三个是剩下中最大声的,第四个是剩下中最小的,以此类推)?
<?php
$a = $b = [28, 32, 43, 14, 53, 67, 42, 54, 46, 31];
rsort($a); //对数组进行降序排序
sort($b); //对数组进行升序排序
$count = count($a);
$result = [];
for ($i = 0; $i <= ($count / 2 - 1); $i++) {$result[$i * 2] = $a[$i]; //把最大的放第一位$result[$i * 2 + 1] = $b[$i]; //把最小的放第二位
}
var_dump($result);
- 2、一群猴子排成一圈,按1,2,……n依次排号,然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,再把它踢出去……,如此不停的进行下去,知道最后剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m,n,输出最后大王的编号
- 3、假设有"123<em>abc</em>456<em>def</em>789"这么一个字符串,写一个函数,可以传入一个字符串,和一个要截取的长度。返回截取后的结果。
要求:
(1)<em>和</em>标记不得计算在长度之内。
(2)截取后的字符串,要保留原有<em>标签,不过如果最后有一个标签没有闭合,则去掉其开始标签。
示例:题中的字符串,要截取长度5,则返回的字符串应该为123ab,要截取长度8,应返回123abc45。
答:
<?php
$str = "123<em>abc</em>456<em>def</em>789";
$len = 8;
echo cut($str,$len); //123<em>abc</em>45$len = 5;
echo cut($str,$len); //123ab
function cut($str, $len)
{$offset = $resLen = 0;$result = '';$strLen = strlen($str);do {//$match的内容,[0] => 全匹配的内容 [1] => 括号内匹配的内容//array(2) { [0]=> array(2) { [0]=> string(12) "<em>abc</em>" [1]=> int(3) } [1]=> array(2) { [0]=> string(3) "abc" [1]=> int(7) } } $num = preg_match("/<em>(.*?)<\/em>/i", $str, $match, PREG_OFFSET_CAPTURE, $offset);if ($num) { //返回1,则是找到了匹配值//要裁剪的值,先裁剪匹配到的字符串,判断是否已经满足条件$subLen = ($len - $resLen > $match[0][1] - $offset) ? $match[0][1] - $offset : $len - $resLen;$result .= substr($str, $offset, $subLen);$offset += $subLen + strlen($match[0][0]); //加上这整一串匹配的偏移量$resLen += $subLen; //结果长度增加if ($resLen < $len) { //判断是否需要裁剪括号内匹配的内容if ($len - $resLen >= strlen($match[1][0])) { //如果括号内的接上还是不满足裁剪长度,则把括号内的全接上$result .= $match[0][0];$resLen += strlen($match[1][0]); //加上括号内匹配的长度} else {$result .= substr($match[1][0], 0, $len - $resLen);break;}}} else {$result .= substr($str, $offset, $len - $resLen); break;}} while ($offset < $strLen && $resLen < $len); //判断是否满足条件,裁剪的长度已经到达字符串长度,结果长度已经到达要求的长度return $result;
}
- 4、每瓶啤酒2元,2个空酒瓶或4个瓶盖可换1瓶啤酒。10元最多可喝多少瓶啤酒?
<?php
/*** @param $bottle* @param $top* @return float|int*/
function beer($bottle, $top)
{if ($bottle >= 2 || $top >= 4) { //判断是否可以进行兑换$bottleToBeer = floor($bottle / 2); //酒瓶可以兑换的酒$topToBeer = floor($top / 4); //瓶盖可以兑换的酒$remainBottle = $bottleToBeer + $topToBeer + $bottle % 2; //剩余的酒瓶$remainTop = $bottleToBeer + $topToBeer + $top % 4; //剩余的瓶盖$topToBeer = $bottleToBeer + $topToBeer + beer($remainBottle, $remainTop); //此次兑换的酒+后续兑换的酒进行递归return $topToBeer;}return 0; //直至无法兑换
}$money = 10;
$beer = floor($money / 2); //10元第一次可以买多少酒
$totalBeer = $beer + beer($beer, $beer); //第一次买的 + 兑换的
echo $totalBeer; //15
- **5、计算如下几个字母代表的数字:
AB - CD = EF
EF + GH = PPP **
解析:两位数相加最多是100+,因此P可确定为1,EF + GH = 111
ABCDEFGH代表数字不能重复
<?php
for ($e = 0; $e < 10; $e++) {if ($e == 1) { //过滤continue;}for ($f = 0; $f < 10; $f++) {if ($f == 1 || $f == $e) { //过滤continue;}for ($g = 0; $g < 10; $g++) {if ($g == 1 || $g == $e || $g == $f) { //过滤continue;}for ($h = 0; $h < 10; $h++) {if ($h == 1 || $h == $e || $h == $f || $h == $g) { //过滤continue;}$sum = ($e + $g) * 10 + $h + $f;if ($sum == 111) { //结果确定的时候for ($a = 0; $a < 10; $a++) {if (in_array($a, [1, $e, $f, $g, $h])) {continue;}for ($b = 0; $b < 10; $b++) {if (in_array($b, [1, $a, $e, $f, $g, $h])) {continue;}for ($c = 0; $c < 10; $c++) {if (in_array($c, [1, $b, $a, $e, $f, $g, $h])) {continue;}for ($d = 0; $d < 10; $d++) {if (in_array($d, [1, $c, $b, $a, $e, $f, $g, $h])) {continue;}if ((($a - $c - $e) * 10 + $b - $d - $f) == 0) {printf("{$a}{$b} - {$c}{$d} = {$e}{$f} {$e}{$f} + {$g}{$h} = 111<br>");}}}}}}}}}
}
- 6、
- 7、