hylerrix / university

:mortar_board: my university code & article collection: create & share, thought & works
Creative Commons Attribution Share Alike 4.0 International
45 stars 10 forks source link

[A01] 一个校园互联网实验室的纳新试题(我的服务端开发笔试题) #5

Open hylerrix opened 7 years ago

hylerrix commented 7 years ago

实验室一面结束,服务端面试总体结果还可以,但根据笔试题答案,面试官学长指出了其中的一些问题。

服务端开发笔试题问与答

1. 简述 const 与 define 的区别。

在PHP中定义常量时,const 与 define 的区别:用 const 使得代码简单易读,const 本身就是一个语言结构,而 define 是一个函数。另外 const 在编译时要比 define 快得多。在PHP 5.3.0 以后,可以使用 const 关键字在类定义的外部定义常量,先前版本 const 关键字只能在类(class)中使用。一个常量一旦被定义,就不能再改变或者取消定义。

if (...) {
    const FOOT = ‘BALL’; //无效定义
}
if (...) {
    const FOOT = ‘BALL’; //无效定义
}
const FOOT  = ’BALL’;
for ($i = 0;$i < 32; ++$i) {
    define(‘BIT_’. $i,1 << $i);
}
const BIT_5  = 1 << 5; //无效定义
define(‘BIT_5’,1 << 5); //有效定义
define(‘FOOT’,’BALL’,true);
echo FOOT; //BALL
echo FOOT; //BALL

2. 说明函数传值与传引用的区别。

优缺点:

如果不想改变原变量的值的时候就传值,如:

<?php
    $a = 1;
    function aa($a) {
        echo ++$a;
    }
    aa($a);
?>

如果可以让函数改变了原变量的值就可以引用传值,如:

<?php
    $a = 9;
    function aa(&$a) {
        echo ++$a;
    }
    aa($a);
?>

3. 请写出至少两种不用中间值实现 a 与 b 交换值的方法。(a 与 b 全小整型)。

4. “数据库”从表中 user 中选出 name 字段包含 admin 的前 10 条结果所有信息的 sql 语句。

select * from user where name like '%admin%' limit 0,10

5. 简述 HTTP 协议中 GET、POST、PUT、HELETE、HEAD 这几个请求的方法。

6. 简述 HTTP 请求状态码中 1、2、3、4、5** 的意义。

7. 简述目前利用服务端语言解决 HTTP 无状态的方法?

HTTP 本身是一个无状态的连接协议,为了支持客户端与服务器之间的交互,我们就需要通过不同的技术为交互存储状态,而这些不同的技术就是 cookie 和 session 了:

例,在 CodeIgniter 框架下 session 的建立和使用。Session在服务器端的建立与使用:

<?php $this->session->set_userdata('user',$user);?>
<?php $user = $this->session->userdata('user');?>

8. 谈谈你对MVC的理解。

MVC是模型(Model)-视图(View)-控制器(Controller)的缩写。它是一个强制性使应用程序的输入、 处理和输出分开的设计模式。它们各自处理自己的任务。视图是用户看到并与之交互的界面。模型表示企业数据和业务规则。控制器接受用户的输入并调用模型和视图去完成用户的需求。

9. 描述你在开发过程中遇到印象最深刻的问题以及解决的过程。

CI 框架下的传参问题。暑假刚接触 PHP 和 CI,便有做一个用户登录并接收到属于用户自己的欢迎界面的想法,需要用到传参。预期功能是注册、登录并完善信息后,网页左上角输出用户姓名+问候语。最初用的是类方法中的传参,在一个方法里分配视图的时候合并参数建立数组并保存到 $data 中传递给视图,再在视图中调用。但随着网页层级的加深,跳转传参变得既困难繁琐又重复难改,为了优化源码,便于理解和修改,开始寻找解决方法。解决问题的过程中依靠最多的是用户手册、百度百科和其他博主的博客,找要点学习从而知道了 session。当用 session重新部署源码后,省去了很多空间,也使源码变得清晰易懂,优化很多。最终以邮件保存此段经历心得收尾。而下面所附的迷你型网站项目便是此次经历的成果。

下附

就这么交上去,凭着自信与奋进的心博得了二面的机会。二面时间将定于下周,并要求带上自己在linux下上传的网站作为二面试题。