某公司在线面试题(失败告终@_@)

633 阅读2分钟

最近处于失业状态@_@, 这段时间找工作挺不如意的,我偶尔看到这家公司的招聘觉得挺有意思,他们有专门的招聘网站,让面试者在线做题,于是我就去试了一下,最终结果不尽人意,没能接到面试通知,我把做题的答案粘出来,如果有人看到,希望可以指正一二,万分感谢。

  1. 请使用正则表达式,能够把以下符合美元价格格式的字符串匹配并可从一段字符串中提取出来:"$200.49"、"$1,999.00"、"$99"、"50.00美元"。【加分提示:假设不需要考虑极端情况(如千分位或小数点的位置校验),越短越加分】
  • 我的答案(\$\d,?\d+\.?\d+)|(\$\d+)
  1. 请使用PHP写一个类里面的方法,方法名称是publics,作用是以数组形式返回这个对象里面的所有公开属性及值,而私有属性不返回。举例:
class User
{
    public $name = "kingmax";
    private $_age = 30;

    public function publics()
    {
        //wait for your implement
    }
}

$User = new User();
$data = $User->publics();
print_r($data);

以上例程会输出:

Array
(
    [name] => kingmax
)

请实现publics方法。要求可以把publics这个方法封装在trait里面,所有类通用。【加分提示:不直接使用反射类可加分】

  • 我的答案
<?php

class User
{
    public $name  = "kingmax";
    public $sex  = "man";
    private $_age = 30;

    public function publics()
    {
        //wait for your implement
    }
}

trait UserReturnInfo
{
    public function publics()
    {
        $data = [];
        //有三种实现方法,分别是通过get_object_vars(),foreach和反射,其中反射需要手动筛选public属性
        //第一种:get_object_vars()
        $vars = get_object_vars($this);
        foreach ($vars as $k => $v) {
            $data[$k] = $v;
        }
        return $data;

        //第二种:foreach()
//        foreach ($this as $k => $v) {
//            $data[$k] = $v;
//        }
//        return $data;
        //第三种 反射
//        $reflectionClass = new ReflectionClass('User');
//        $props = $reflectionClass->getDefaultProperties();
//        $userObj = new User();
//        foreach ($props as $key => $val){
//            $rp = new ReflectionProperty($userObj,$key);
//            if ($rp->isPublic()){
//                $data[$key] = $val;
//            }
//        }
//        return $data;
    }
}

class UserReturnInfoMethod extends User
{
    use UserReturnInfo;
    /* ... */
}


$User = new UserReturnInfoMethod();
$data = $User->publics();
print_r($data);
  1. 请参照SQL到Mongo的对应表,学习一下Mongo的使用(如果需要)。php.net/manual/zh/m… Query:SELECT * FROM users WHERE name!="kingmax" and name!="soul"【得分提示:请先测试清楚,这道题不要想当然】
  • 我的答案
db.col.find(
    {
        "$and":[
                {
                    "title":{$ne:"mysql 教程"}
                },
                {
                    "title":{$ne:"php 教程"}
                }
        ]
    }
)
  1. 【亮出您的代码】请设计一个登录类LoginHelper,用来处理用户的登录(login方法)、注销(logout方法)流程。【加分提示:尽可能使用最新流行的设计模式和软件工程规范】
  • 我的答案
<?php

// 请设计一个登录类LoginHelper,用来处理用户的登录(login方法)、注销(logout方法)流程。【加分提示:尽可能使用最新流行的设计模式和软件工程规范

//假设登录需要 用户名,密码和验证码,密码采用普遍的md5+盐值的形式,盐值存在库
//以下, 伪代码
class LoginHelper 
{
    public function login()
    {
        //1. 接受参数(同时要过滤和验证合法性,验证可以独立封装成一个验证类)
        //2. 将传过来的密码通过预先定义好的方式加密然后和数据库密码比对,
            //正确,登录成功,存下session,记录日志,跳转相应页面;
            //错误,登录失败,记录日志, 跳转登录页。

        //其中,数据库的实例化使用单例模式,始终new出来的都只是同一个类;每一个动作执行之前都应该先判断是否存有session,这个可以写在一个基类里,该类继承基类,用构造方法实现
    }   

    public function logout()
    {
        //1. 接受参数(同时要过滤和验证合法性,验证可以独立封装成一个验证类)
        //2. 销毁session,退出登录,跳转页面,记录日志
    } 

}