Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
hylerrix opened this issue Sep 19, 2017 · 0 comments

Comments

@hylerrix
Copy link
Owner

hylerrix commented Sep 19, 2017

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

服务端开发笔试题问与答

1. 简述 const 与 define 的区别。

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

  • const用于类成员变量的定义,一经定义便不可修改。define不可用不类成员变量的定义,可用于全局常量。
  • const不能在条件语句中定义常量。如:
if (...) {
    const FOOT = ‘BALL’; //无效定义
}
if (...) {
    const FOOT = ‘BALL’; //无效定义
}
  • const 采用一个普通的变量名称,define 可以采用表达式作为名称。如:
const FOOT  = ’BALL’;
for ($i = 0;$i < 32; ++$i) {
    define(‘BIT_’. $i,1 << $i);
}
  • const 只能接受静态的标量,而 define 可以采用任何表达式。如:
const BIT_5  = 1 << 5; //无效定义
define(‘BIT_5’,1 << 5); //有效定义
  • const 定义的常量对大小写敏感的,而 define 可通过第三个参数(为 true 表示大小写不敏感)来指定大小写是否敏感。如:
define(‘FOOT’,’BALL’,true);
echo FOOT; //BALL
echo FOOT; //BALL

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

  • 按值传递:函数范围内对制的任何改变在函数外部都会被忽略。
  • 按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改。

优缺点:

  • 按值传递时,PHP 必须复制值。特别是对于大型的字符串和对象来说,这将是一个代价很大的操作。
  • 按引用传递则不需要复制值,对于性能提高很有好处。

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

<?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 全小整型)。

  • a=a+b;b=a-b;a=a-b
  • a=a*b;b=a/b;a=a/b
<?php
    $a = 1;
    $b = 2;
    $a = $a+$b;
    $b = $a-$b;
    $a = $a-$b;
    echo $a;
?>

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

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

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

  • HEAD:向服务器索要与 GET 请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
  • GET:向特定的资源发出请求。GET 方法不应当被作用于产生“副作用”的操作中。
  • POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体重。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
  • PUT:向指定资源位置上传其最新内容。
  • DELETE:请求服务器删除 Request-URI 所标识的资源。

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

  • 1**:信息类,表示收到web浏览器请求,正在进一步处理。
  • 2**:请求成功,表示用户请求已成功被服务器接收、理解、并接受。
  • 3**:重定向,表示请求没有成功客户端必须采取进一步的动作。
  • 4**:客户端错误,表示客户端提交的请求有错误。
  • 5**:服务器错误,表示服务器在处理请求的过程中有错误或者异常状态发生。

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

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

  • cookie 是通过客户端保持状态的解决方案。cookie 就是服务器发给客户端的特殊信息。有了 cookie 这样的技术实现,服务器在接收到来自客户端浏览器的请求之后,就能够通过分析存放于请求头的 cookie 从而得到客户端特有的信息,动态生成与之相对应的内容。
  • session 通过服务器保持状态。session 是服务器端为客户端所开辟的存储空间,在其中保存的信息就是用于保持状态。在服务器端建立 session 后,客户端和服务器端之间用 session id 联络,从而使用户的状态得以保持。

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

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

8. 谈谈你对MVC的理解。

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

  • MVC的优点:低耦合性、高重用性和可适用性、较低的生命周期成本、快速的部署、可维护性、可拓展性,有利于软件工程化管理。
  • MVC的缺点:没有明确的定义,完全理解MVC并不容易、不适合小型规模的应用程序、视图与控制器间的过于紧密的连接、视图对模型数据的低效率访问问题等。

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

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

下附

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

@hylerrix hylerrix changed the title 浅谈C语言历史 浅谈 C 语言历史 Sep 19, 2017
@hylerrix hylerrix mentioned this issue Sep 19, 2017
@hylerrix hylerrix changed the title 浅谈 C 语言历史 【A01】浅谈 C 语言历史 Sep 19, 2017
@hylerrix hylerrix changed the title 【A01】浅谈 C 语言历史 [A01] 浅谈 C 语言历史 Sep 19, 2017
@hylerrix hylerrix changed the title [A01] 浅谈 C 语言历史 [A01]浅谈 C 语言历史 Sep 19, 2017
@hylerrix hylerrix changed the title [A01]浅谈 C 语言历史 [A01] 一个校园互联网实验室的纳新试题(我的服务端开发笔试题) Sep 20, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant