某公司線上面試題(失敗告終@_@)

Aaron_alive發表於2018-11-30

最近處於失業狀態@_@, 這段時間找工作挺不如意的,我偶爾看到這家公司的招聘覺得挺有意思,他們有專門的招聘網站,讓面試者線上做題,於是我就去試了一下,最終結果不盡人意,沒能接到面試通知,我把做題的答案粘出來,如果有人看到,希望可以指正一二,萬分感謝。

  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,退出登入,跳轉頁面,記錄日誌
    } 

}
複製程式碼

相關文章