技术人员笔试题
【智力部分】(20分)
- 有一种细菌,经过一分钟分裂为2个,再过一分钟,分裂为4个,这样,将一个细菌放在一个瓶子里面,一个小时后瓶子被细菌充满了。现在假设一开始放入瓶中的为两个细菌,那么到充满瓶子要多长的时间?(10分)
由条件知:瓶子可放细菌个数为:$num=2的60幂个,当放入两个细菌时,2的n幂+2的n幂=$num;
化简得:2的n+1幂=$num=2的60幂,故n+1=60;n=59分钟
- 一只蜗牛从井底爬到井口,每天白天蜗牛要睡觉,晚上才出来活动,一个晚上蜗牛可以向上爬3尺,但是白天睡觉的时候会往下滑2尺,井深10尺,问蜗牛几天可以爬出来?(10分)
第一天不下滑走了3尺,以后每天(3-2)尺 3+(n-1)=10 所以n=8天
【专业部分】(75分)
- 谈谈你对MVC的认识,介绍几种目前比较流行的MVC框架?(5分)
由Model(M)、View(V)、Control(C)组成的一种设计模式,Model主要是一些业务处理类,View是页面显示页,直接在浏览器输出,Control是桥接M和V,由它接收到v的请求,调动相应的model类再把结果返回给视图,由视图输出给用户。
Smarty模板,phplib模板。。。。。。
- html表单中 GET与POST提交方法的区别?(5分)
GET提交方式是请求http协议,把要提交的值附在url后面,因此这种方式保密性不是很好,且还有长度限制,最长是8192字节。
POST是实体数据,随表单提交到服务器的,比较安全,且长度限制由配置文件决定。
- 请简述SESSION与COOKIE的区别?(5分)
SESSION:是存储用户信息的唯一全局变量,是在服务器端的预处理数组,存放的地方由php中的session_dir指定。
COOKIE:是用来存储连续访问一个页面时使用,数据存在客户端。这两者都可以通过时间设置生存长短。
默认情况下,session是基于cookie的,如果cookie被禁则必须向其他办法解决了。
- 求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数。(5分)
$time1=mktime(0,0,0,2,5,2007);
$time2=mktime(0,0,0,3,6,2007);
$time3=$time2-$time1;
相差秒数:$time3;
相差分钟:$time3/60;
相差小时: $time3/3600;
相差天数:$time3/3600/24;
相差周数:$time3/3600/24/7;
- 写出如下程序的输出结果 (5分)
<?
$test = 'aaaaaa';
$abc = & $test;
unset($test);
echo $abc;
?>
输出:aaaaaa
- 在空表News中,字段ID为自增主键,批量插入17条记录之后,发现最后三条数据有误,删除此三条记录后重启Mysql数据库,再重新插入三条记录,请问最后一条记录的ID值是多少?(5分)
Id 为 20
- 至少写出一种验证139开头的11位手机号码的正则表达式。(5分)
Reg1=“/^139\d{8}/”;
Reg2=“/^139[0-9]{8}/”;
- 请写一个函数,实现以下功能:
字符串“open_door” 转换成 “OpenDoor”、”make_by_id” 转换成 ”MakeById”。(10分)
方法-:
Function cstr($str){
Echo str_replace(“ ”,””,ucwords(str_replace(“_”,” ”,$str)));
}
方法二:
Function cstr($str){
$arr=Explode(“_”,$str);
Foreach($arr as $v){
$nstr.=Ucwords($v);
}
Echo $nstr;
}
- 请写一个函数将1234567890转换成1,234,567,890 每3位用逗号隔开的形式。(10分)
方法一:Function new_number_formate($num){
$nnum=(string)$num;
$str= Strrev($nnum);
$count=strlen($str);
For($i=0;$i<$count;$i=$i+3){
$nstr.=Substr($str,$i,3).”,”;
}
Echo strrev(rtrim($nstr,”,”));
}
方法二:利用系统函数:number_formate($num,0,”.”,”,”)
- 有A(id,sex,par,c1,c2),B(id,age,c1,c2)两张表,其中A.id与B.id关联,现在要求写一条SQL语句,将B中age>50的记录的c1、c2更新到A表中统一记录中的c1、c2字段中。(10分)
Update A as a set a.c1=b.c1,a.c2=b.c2 left join B as b on a.id=b.id;
- 请用php写出以下程序:假设网络中有一台服务器192.168.1.101,开放端口8899进行侦听,请用php的socket相关知识,写出一个简易的client,连接到server,并发送字符串”hello server!”。程序仅对连接的成功和失败进行简易错误判断和处理即可。(10分)
<?php
$addr=”192.168.1.101”;
$port=8899;
If($socket=socket_create(AF_INET, SOCK_STREAM,TCP)<0){
Echo “创建失败,原因:”.socket_strerror($sock);
Return false;
}
If($bind=socket_bind($socket,$addr,$port)<0){
Echo “绑定错误,原因:”.socket_strerroe($bind);
Return false;
}
If($listen=socket_listen($socket,5)<0){
Echo “监听失败,原因:”.socket_strerror($listen);
Return false;
}
If($accept=socket_accept($socket)<0){
Echo “连接失败,原因:”.socket_strerror($accept);
Return false;
}
Socket_write($accept,“hello world ”,strlen(“hello world ”));
Socket_close($accept);
Socket_close($socket);
【Linux知识】(15分)
- 如何实现每天0点钟重新启动服务器。(5分)
写shell脚本:crontab 0 0 0 * * * /sbin/restart.sh
- 当前目录下有一个文件为 showme.sh , 如何修改文件,将其指定为使用 /bin/bash 运行(5分),如何修改其权限为所有用户可读写,所有用户可执行。(5分)
1、
2、chmod o+wr g+x showme.sh
- 当前目录下有一个文件为 showme.sh,如何修改其所有人为root。(5分)
Chown root ./showme.sh
【附加部分】(40分)
- 使用thinkphp在控制器(Action)中传递一个一维数组到视图(Tpl),并将数组循环显示在前台页面,请简要的写出前后台的主要代码。(10分)
//控制器代码
<?php
Class show{
Function index(){
$arr=Array(“ggg”,”ghh”,”kkk”,”lll”,”rrr”,”yuyuu”);
$this->assign(“arr”,$arr);
$this->display();
}
}
//视图代码 ,分割标签是<{ }>
<volist name=”arr” id=”vo” key=”k”>
<{k}>=><{vo}>
</volist>
- 按照如图所示的window窗体,写出实现该窗体的ExtJs代码。(10分)
<html>
<head>
<!--这里有三个文件要导入,css文件一个,两个js库,在这里就不导入-->
<script>
Ext.onReady(function(){
Ext.QuickTips.init();
Var form=new Ext.FormPanel({
Frame:true,
Width:500,
monitorValid:true,
layout:”form”,
labelWidth:55,
title:”这是标题显示”,
labelAlign:”left”,
renderTo:Ext.getBody(),
submit:function(){
this.getEl().dom.action=”请求地址”,//
this.getEl().dom.method=”POST”,
this.getEl().dom.submit();
}
items:[{
xtype:”panel”,
layout:”column”,
fieldLabel:”用户名”,
isFormField:true,
items:[{
columnWidth:.5,
xtype:”textfield”,
allowBlank:false,
blankText:”不能为空,请填写”,
name:”username”,
anchor:”90%”
},{
labelAlign:”right”,
fieldLabel:”密码”,
columnWidth:.4,
xtype:”textfield”,
allowBlank:false,
blankText:”不能为空,请填写”,
name:”password”,
anchor:”90%”
}]
},{
Xtype:”panel”,
Layout:”column”,
fieldLabel:”公司名称”,
isFormField:true,
items:[{
columnWidth:.5,
xtype:””textfield,
allowBlank:false,
blankText:”请填写公司”,
name:”company”,
anchor:”90%”
},{
columnWidth:.5,
fieldLabel:”Email”,
xtype:”textfield”,
name:”email”,
allowBlank:false,
blankText:”请填写你的email”,
anchor:”90%”
}]
},{
Xtype:”htmleditor”,
fieldLabel:”内容”,
name:”content”,
anchor:”90%”
}],
Buttons:[{
Text:”保存”,
Handler:login,formBind:true
},{
Text:”取消”,
Handler:reset
}]
})
})
</script>
</head>
<body>
<div id=”show”></div>
</body>
</html>
3.请用php编写程序,读取出www.baidu.com的首页的网页内容(仅html),并存入字符串 $str.(10分)
$str=file_get_contents(“www.baidu.com”);
- 请用php将上题中读取出的网页内容的<title>标签的值解析出来。(10分)
$reg=’/<title>(.*?)<\/title>/’;
Preg_match($reg,$str,$m);
Var_dump($m);
5、javascript的ajax请求
<script>
Var Ajax;
If(XMLHttpRequest){
Ajax=new window.XMLHttpRequest();
}elseif(window.ActiveXObject){
Ajax=new window.ActiveXObject(“Microsoft.XMLHTTP”);
}else{
Alert(“不支持异步加载”);
Return false;
}
//选择传送方式
Ajax.open(“post”,”url”);
//请求状态发生改变时执行的动作
Ajax.onreadystatechange=function(){
Switch(Ajax.readystate){
Case 0:
Case 1:
Case 2:
Case 3:
Alert(“提示信息自己定义”);
Break;
Case 4:
If(Ajax.status==400){
//成功就把发回来的值加载到对应位置
getElementById(“show”).innerHTML=Ajax.response.text;
}else{
Alert(“请求失败”);
}
}
}
//post传值时必须设置下面一步
Ajax.setRequestHeader(‘Content-Type’,’application/x-www-form-urlencoded’);
//发送数据。如果为get传值时设置为null
Ajax.send(data);
</script>