面试 POPER 的后端开发工程师的离奇经历

前言

先说说我自己吧,90 后的 PHP 开发者,在上海工作 7 年,上家公司月收入 20.5K。

六月底的时候 HR 找到我,说劳动合同到期了,问我还继续签吗,涨工资肯定是没戏了!我说我考虑考虑,过了一天我还是跟 HR 提了离职,离职的原因有很多,当然最主要的可能是在这里做的不称心吧。

辞职后也投了些简历,总体来说机会还是有的,只是比往年都要难很多!面过百度、字节 和 米哈游等公司,结果都挂了!

之前也在网上看到很多数字游民的 UP 主,利用远程办公的优势实现地理套利,可以在小城市生活的没那么累,觉得挺向往那种工作和生活方式的。偶然在电鸭社区看到了 POPER 在招聘远程,抱着试一试的心态投递了简历。

让我没想到的是整个面试过程挺让人费解的,具体原因耐心看下文!

跟 HR 的对话

好吧,我承认我吃回头草了:

一面小测试题

第一轮的小测试还挺顺利,以下是我的答案:

Q1-1:

<?php

function  addStrings(string  $num1, string  $num2): string
{
    $len1 = strlen($num1);
    $len2 = strlen($num2);
    $carry = 0;
    $result = '';

    while ($len1 > 0 || $len2 > 0 || $carry > 0) {
        $digit1 = $len1 > 0 ? intval($num1[$len1 - 1]) : 0;
        $digit2 = $len2 > 0 ? intval($num2[$len2 - 1]) : 0;
        $sum = $digit1 + $digit2 + $carry;
        $carry = intval($sum / 10);
        $result = strval($sum % 10) .  $result;
        $len1--;
        $len2--;
    }

    return  $result;
}

function  fibonacci(int  $n): string
{
    $prevPrev = '0';
    $prev = '1';
    $result = '';

    for ($i = 2; $i <= $n; $i++) {
        $result = addStrings($prevPrev, $prev);
        $prevPrev = $prev;
        $prev = $result;
    }

    return  $result;
}

Q1-2:


//  The  value  of  item  9292  Fibonacci  number  is:

3661577246222677849785427206834745690320353572157656330500188244468089715055226822525574623888694874292151478596700484435570305109242313638033416669900444112247937728056211966758992460916419400444853615065999542615995870540182204923636128338003036402195497269318979305499067555417877218451841325150147307183407898442574610940236693637649259016140512151236060436731993551961323374694640088413329540217958532844994602127372986462480164986085899739239682944787995424271277467745382889616543410488579354418782072284268830659992928815496582634474475467254601183355700504643184963095650659016150303753725509080657414720402415839227967445769423409681729197862582729971824872388906214839490412361238387557198107844877079017174320960353286125955686041797566600910089428824579522915583067121845203670580431109038026031805366693865811657549114645180029223550684370620385942139952513596212989572901717566991028950391641339313551358249513768853983555921365314930744269060528453180853181277008706114560211720676164926069583198482669740034992505014190676786182619356298288614973174512790036679389133495600521574725844129972742430674736916672792625084641027990733249739459326440313013672649848254315756846997118764723139178365862765173488978551301801196364660097159749216505812815610240094570434388330501001490260829493982079774109976313795867953293232350445141140986017144615285056571297189775579577943476017486485426114739433921822640390808840316534298381708300360202292556716275696050116179146218599102060641783728510620700368611020522308508805066354267983031447439708738430830812299369590938039288063873607175095253952963248468206808754647017090147700831859035388796576278194027465866101615940691728994129932120206390739814141511226049882323886861245940252446697607680362853010694832168189803235002515372695099765714174685776789816323408545017065365758342146429980816094007713959447619038393467627366903822647919125618219011528539949951357869642550538579

Q2:


<?php
class  Node
{
    public  int  $value;
    public ?self  $left;
    public ?self  $right;
    public  function  __construct($value)
    {
        $this->value = $value;
        $this->left = null;
        $this->right = null;
    }
}

function  generateRandomBinaryTree(int  $depth): ?Node
{
    if ($depth == 0) {
        return  null;
    }

    $value = rand(1, 100);
    $node = new  Node($value);

    if ($depth > 1) {
        $node->left = generateRandomBinaryTree($depth - 1);

        $node->right = generateRandomBinaryTree($depth - 1);
    }

    return  $node;
}

function  printNodesAtSameDepth($root): void
{
    if ($root === null) {
        return;
    }

    $queue = [];
    $queue[] = [$root, 1];
    $currentDepth = 1;
    while (!empty($queue)) {
        [$node, $depth] = array_shift($queue);
        if ($depth > $currentDepth) {
            echo  "\nDepth $depth: "  .  $node->value  .  " ";
            $currentDepth = $depth;
        } else {
            echo  $node->value  .  " ";
        }

        if ($node->left !== null) {
            $queue[] = [$node->left, $depth + 1];
        }

        if ($node->right !== null) {
            $queue[] = [$node->right, $depth + 1];
        }
    }
}

// Generate a random binary tree of depth 4

$tree = generateRandomBinaryTree(4);

// List nodes at the same depth

echo  "Nodes at the same depth:";

printNodesAtSameDepth($tree);

Q3-1:


function  ways($n): string
{
    $A = bcpow('3', strval($n+6));
    $M = bcsub(bcsub(bcsub(bcsub(bcsub(bcsub(bcpow($A, '6'), bcpow($A, '5')), bcpow($A, '4')), bcpow($A, '3')), bcpow($A, '2')), $A), '1');
    return  bcmod(bcpowmod($A, bcadd(strval($n), '6'), $M), $A);
}

$ways = ways(10); // 492 ways

03-2


14527490260516100855695859704819627818108010882741117227956927412305738742399171256642436462028811566617818991926058940988565927870172608545709804976244851391054850231415387973537361

视频技术二面

然后顺利进入二面:

三面技术课题

需求如下:

涉及的前后端项目源码仓库如下:

到这里都没什么问题,然后开始三面的课题:

大概花了五六天的时间把整个项目的前后端开发完成,然后在群里通知原本的技术负责人, 然后他拉了个人(应该不是技术)进来,从这里开始我感觉像是在对接业务需求了!

有 Bug 需要该,这个我认了,但是后面开始题需求了,这里的操作让我感到很莫名奇妙,我当时的想法如下:

  1. 在最开始我对需求有疑问时,技术负责人给我的答复就是根据自己的理解来,需求不明确,让开发人员完全主管发挥,我的理解是能实现大致逻辑证明能实现业务就行了;

  2. 让非技术人员对最终实现效果做评定,而不是通过源代码来分析!如果你只给个泛泛的开发目标,最终 UI 和交互效果都要开发来保证的话,我觉得就很离谱,最后还以达不到效果为借口,否定我提交的项目;

  3. 对于测试环境要发送邮件通知,在没有提供 SMTP 账户的情况下,我用自建的 Mailpit 作为查看测试邮件的方式,这虽然体验可能不好,但是并不是功能缺陷,而且作为开发人员应该都知道,这就是配置个 SMTP 账户的事!

提出质疑

我针对我上面的想法提出了质疑,最开始 Ken(负责技术的)现在一声不吭了,HR 的回答让我觉得很扯淡!

项目最终效果图

2023091408

2023091408

2023091408

2023091408

2023091408

2023091408

2023091408

2023091408

2023091408

2023091408

2023091408

Laravel Admin 管理后台

2023091408

2023091408

2023091408

2023091408

2023091408

总结

这一路面试下来,大概已经十来天了,就冲他们这个技术面试的审核方式,我觉得各位有意向的开发者都要三思!!!

原文在 george.betterde.com/insights/20230...

本帖已被设为精华帖!
本帖由系统于 1周前 自动加精
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 66
Summer

我和这家公司技术负责人也是认识多年的老友了,论坛里也有不少人在这家公司任职,包括我们的一位资深的版主。

看到上面有朋友留言白嫖代码,不至于不至于,他们也没在做外包。反而招聘团队搭进去这么多人在聊,在跟进,在当前大环境下,对他们团队来讲是一个不小的消耗。他倒是有在反馈最近应聘者多,小团队,有时候回复没有那么到位也是表示了歉意。

这个事儿,双方我都有联系,感觉下来,就是个沟通不到位啊。文字比较苍白,无法表达感情,容易针锋相对。所以面试双方,都有付出一定精力的时候(除了早早就被刷掉的),结论前,最好通个电话。

1周前 评论

你好,我是工程师HR一心。

分享下POPER近两年的招聘数据:每100人投递简历,只有6人最终能够成为POPER一员。在100次双向选择的过程中,94次遗憾只能换来6次圆满。
这位候选人不是第一位吐槽应聘流程的,我们私底下也收到过很多宝贵的意见。我想以这位候选人提出的问题为中心再一一说明下。

【应聘周期太长】

候选人8月27日投递的简历,到今天为止不到20天。我们从一开始就给各位候选人强调过【走到最后一步需1个月左右】,这个时间其实是正常的。

我们之前经历过团队还没壮大的时期,1名HR和1名部门负责人,2个人要对应所有的候选人,每逢简历高峰期是会应接不暇,过去体验确实不佳,我们很快改革重组了招聘队伍。
从去年年初开始,每一名候选人至少有5~6人follow,每位面试官都有明确的责任范围,也能彼此double check,现在就算高峰期走到最后一步的时长基本也能控制在1个月内。

【课题优化是为了白嫖吧】

技术课题沿用了多年没变,这位候选人无视我们题目中的警告【Please do not disclose the content of this test to others./请勿外传】,现在课题被迫公开,也成为了并非白嫖的佐证(谁会一年到头就白嫖1道题呢…)。

技术课题回收后,我们需要2~3测试人员检测式样(功能完整度),3~5工程师code review&总结,最后提交管理层3人审核。

每一次给候选人的反馈都是团队协议的结果,不存在不懂技术的人参与招聘流程。

看起来候选人最不满的一点是关于需求确认时我们没有给一个明确的提示:

(候选人)从需求上来看学生没有注册方式,是由老师创建吗?
(负责人)这份课题需要你根据自己的理解来开发哦(需求理解也是我们考察的重点)
其实,最终候选人提交的课题里,这一点是实现了的。
但其他的部分功能没能实现,所以我们测试人员在群里指出【没实现的部分建议优化】,这既不是临时改需求也不是需求模糊的问题呀。

在招聘方角度看来,优化环节实际上是在模拟远程工作者团队协作,更加接近poper远程实际的工作氛围。候选人是否适合我们这样的工作方式,能不能长久、稳定地合作下去,需要在接触早期就进行磨合和判断。

候选人不接受优化建议,也无法理解我们给出的解释说明,很遗憾,这也一定会成为今后改进的动力让我们继续向前。

最后分享下POPER追求的远程文化:

1、快乐工作,生活工作两不误,拒绝996。薪资问题丰俭由人,可能我们工资不高,但是时薪也不算低。

2、poper的工程师团队离职率为3~5%(日本IT行业平均离职率为9.1%)。我们不会让辛苦入职的员工轻易离职,更希望他在团队找到自己的位置。

3、数字游民要更加保持专业和尊重。专业是对自己,尊重是对他人。

1周前 评论
多人维丁 1周前
GeorgeKing (楼主) 1周前
loveinalife 6天前
多人维丁 6天前
Amour-z 4天前
多人维丁 4天前
Amour-z 4天前
多人维丁 4天前
GeorgeKing (楼主) 4天前

这不是纯纯白嫖么

1周前 评论
GeorgeKing (楼主) 1周前
imzhi 5天前

记一次糟糕的远程单位面试体验 这有个类似的面试经历

1周前 评论
GeorgeKing (楼主) 5天前
GeorgeKing (楼主) 1周前
巴啦啦 5天前

老实人

1周前 评论
GeorgeKing (楼主) 1周前
prajna-github 4天前

技术过硬,不怯场,沟通能力强,总体非常不错。 :+1:

1周前 评论
Complicated 1周前

这家公司招聘流程还是挺复杂的,不过论坛里也有人面试通过入职的,应该不至于白嫖代码。

1周前 评论
GeorgeKing (楼主) 1周前

如果工作量很多,可以让他们给钱 :blush:

1周前 评论

面试项目半路改需求是真的抽象

不管是不是白嫖,这么麻烦,低效沟通,要是日本的终身雇佣正社也认了,一个不签合同没有社保的远程而已,32w薪资在日本派遣都招不到

说白了就是中文远程不行的,一方面裁员太多竞争激烈,另一方面资方会点中文也知道环境啥样,你根本要不到高价

1周前 评论

我之前做好了,部署好了后,他似乎都没有打开我做的网站去试试功能(因为我没看到数据保存)。直接就说我代码质量太差。 当然我确实代码写的很随意,没有规范

1周前 评论
ComiruTokyo 1周前
ComiruTokyo 1周前
rlyabc (作者) 1周前

Q3-1: Imagine you are playing a board game. You roll a 6-faced dice and move forward the same number of spaces that you rolled . If the finishing point is “n” spaces away from the starting point, p lease implement a program that calculates how many possible ways there are to arrive exactly at the finishing point.

你这个有点厉害啊。 function ways($n): string { $A = bcpow('3', strval($n+6)); $M = bcsub(bcsub(bcsub(bcsub(bcsub(bcsub(bcpow($A, '6'), bcpow($A, '5')), bcpow($A, '4')), bcpow($A, '3')), bcpow($A, '2')), $A), '1'); return bcmod(bcpowmod($A, bcadd(strval($n), '6'), $M), $A); }

$ways = ways(10); // 492 ways :+1:

我是通过循环写的:

public function cal($aa,$aa2){

$bb = array();
foreach ($aa as $key => $item) {
    foreach ($aa2 as $key2 => $item2) {
        if(is_array($item2)){
            $item2[]=$item;
            $b=$item2;
        }else{
            $b=[$item,$item2];
        }

        $bb[]=$b;
    }
}
return $bb;

}

public function getLength($n){ $aa = range(1,6); $arr=[]; foreach ($aa as $item) { $arr[]=array($item); }

$new_arr=[];
$new_arr[0]=$aa;
for ($i=0;$i<$n-1;$i++){
    $new_arr[$i+1]=$this->cal($aa,$new_arr[$i]);
    $arr=array_merge($arr, $new_arr[$i+1]);

}
$ret=[];
foreach ($arr as $item) {
    $sum=array_sum($item);
    if($sum==$n){
        $ret[]=$item;
    }
}

return count($ret);

}

public function getData($n){

if($n<=7){
    return $this->getLength($n);
}else{
    $ret=[];
    $aa = range(7,$n);
    foreach ($aa as $item) {
       $item_pow=pow(2,$item-1);
       if(empty($ret[$item])){
           $item_true=$this->getLength($item);
       }else{
           $item_true=$ret[$item];
       }

       $pow_diff=$item_pow-$item_true;

       $a=pow(2,$item);
       if(empty($ret[$item-6])){
           $b=$this->getLength($item-6);
       }else{
           $b=$ret[$item-6];
       }
       $ret[$item+1]=$a-$pow_diff*2-$b;
    }
    dd($ret);
    return $ret[$n];
  }

}

调用这个函数:$this->getData(610);

n=610的时候: 1.4527490260516E+181

1周前 评论

现在远程都这么卷了吗?

1周前 评论

面试的成本都这么高。。。

1周前 评论

你好,我是工程师HR一心。

分享下POPER近两年的招聘数据:每100人投递简历,只有6人最终能够成为POPER一员。在100次双向选择的过程中,94次遗憾只能换来6次圆满。
这位候选人不是第一位吐槽应聘流程的,我们私底下也收到过很多宝贵的意见。我想以这位候选人提出的问题为中心再一一说明下。

【应聘周期太长】

候选人8月27日投递的简历,到今天为止不到20天。我们从一开始就给各位候选人强调过【走到最后一步需1个月左右】,这个时间其实是正常的。

我们之前经历过团队还没壮大的时期,1名HR和1名部门负责人,2个人要对应所有的候选人,每逢简历高峰期是会应接不暇,过去体验确实不佳,我们很快改革重组了招聘队伍。
从去年年初开始,每一名候选人至少有5~6人follow,每位面试官都有明确的责任范围,也能彼此double check,现在就算高峰期走到最后一步的时长基本也能控制在1个月内。

【课题优化是为了白嫖吧】

技术课题沿用了多年没变,这位候选人无视我们题目中的警告【Please do not disclose the content of this test to others./请勿外传】,现在课题被迫公开,也成为了并非白嫖的佐证(谁会一年到头就白嫖1道题呢…)。

技术课题回收后,我们需要2~3测试人员检测式样(功能完整度),3~5工程师code review&总结,最后提交管理层3人审核。

每一次给候选人的反馈都是团队协议的结果,不存在不懂技术的人参与招聘流程。

看起来候选人最不满的一点是关于需求确认时我们没有给一个明确的提示:

(候选人)从需求上来看学生没有注册方式,是由老师创建吗?
(负责人)这份课题需要你根据自己的理解来开发哦(需求理解也是我们考察的重点)
其实,最终候选人提交的课题里,这一点是实现了的。
但其他的部分功能没能实现,所以我们测试人员在群里指出【没实现的部分建议优化】,这既不是临时改需求也不是需求模糊的问题呀。

在招聘方角度看来,优化环节实际上是在模拟远程工作者团队协作,更加接近poper远程实际的工作氛围。候选人是否适合我们这样的工作方式,能不能长久、稳定地合作下去,需要在接触早期就进行磨合和判断。

候选人不接受优化建议,也无法理解我们给出的解释说明,很遗憾,这也一定会成为今后改进的动力让我们继续向前。

最后分享下POPER追求的远程文化:

1、快乐工作,生活工作两不误,拒绝996。薪资问题丰俭由人,可能我们工资不高,但是时薪也不算低。

2、poper的工程师团队离职率为3~5%(日本IT行业平均离职率为9.1%)。我们不会让辛苦入职的员工轻易离职,更希望他在团队找到自己的位置。

3、数字游民要更加保持专业和尊重。专业是对自己,尊重是对他人。

1周前 评论
多人维丁 1周前
GeorgeKing (楼主) 1周前
loveinalife 6天前
多人维丁 6天前
Amour-z 4天前
多人维丁 4天前
Amour-z 4天前
多人维丁 4天前
GeorgeKing (楼主) 4天前
aab

这个面试的成本太高了吧,再结合这个薪资,就太坑了!

1周前 评论
skarner

我之前也投过这个 POPER 因为课题太耗时,所以中途放弃了,课题也是这个题目,所以可能不是白嫖方案,其他的就不清楚了 这个面试流程确实太长,另外课题的工作量太大,对面试者不友好

1周前 评论
GeorgeKing (楼主) 1周前
DonnyLiu

技术课题提交后提的一些优化需求感觉就很抽象,所以可能是为了白嫖或者是进一步评估候选人的code能力?

1周前 评论

太浪费时间精力了

1周前 评论

在上海工作7年,20k这个薪资感觉好像有点低了吧。。。

1周前 评论
mnizfd

我看到 ComiruTokyo 说100人有6人通过,我理解的就是可能有很多都不是因为技术不够而没通过的,就像诈骗犯打电话一样,他每天要打多少个电话呀,骗人的话术很简单呀,正常人都会知道是诈骗,那就会及时挂掉电话,这说明挂掉电话的人群不是诈骗犯的目标群体。
那么但凡能不挂电话的,一直聊的,后续的,懂自懂吧~ 不用言语了 (PUA换个马甲就变成了CPU)个人观点不喜勿喷

1周前 评论
goodgood 1周前
ononl 1周前
mnizfd (作者) 6天前

只能说,服从性测试也是远程面试的一环吧,楼主没通过考验

1周前 评论
GeorgeKing (楼主) 1周前

一个月这点薪资 面试者们省省吧

1周前 评论

这家公司在learnku停显眼的,但是需要一个候选人去完成一份业务需求来作为评估的手段真是匪夷所思!如果只是为了考察候选人的能力有大把的手段,但是这个课题的的成本对候选人来说太大了,不仅没有足够反映候选人的某方面能力,还下头

1周前 评论
sanders

哈哈 有点意思 有种跃跃欲试的冲动

1周前 评论

不是,面试demo项目还带改需求功能优化的?这又不是投产项目,需要优化细节~

1周前 评论

很多远程工作待遇虽然很好,但招聘要求、难度,都不是线下面试能比的,因为线下面试受地域限制,可能找的人都不太满意,从里面选出一个相对优秀的。

远程工作是面相网络招聘的,我们要面对的竞争对手是来自五湖四海,这里面鱼龙混杂、竞争也相当激烈。

但话又说回来,远程工作的机会也是非常多的,这个不合适还有其他更好的的岗位等着你。

我觉得如果英文能达到口语表达通畅的话,直接去国外的远程工作去找,国内的电鸭之类的薪资中间都是被剥了一层皮的,你懂的。

1周前 评论
Summer 1周前
Summer

我和这家公司技术负责人也是认识多年的老友了,论坛里也有不少人在这家公司任职,包括我们的一位资深的版主。

看到上面有朋友留言白嫖代码,不至于不至于,他们也没在做外包。反而招聘团队搭进去这么多人在聊,在跟进,在当前大环境下,对他们团队来讲是一个不小的消耗。他倒是有在反馈最近应聘者多,小团队,有时候回复没有那么到位也是表示了歉意。

这个事儿,双方我都有联系,感觉下来,就是个沟通不到位啊。文字比较苍白,无法表达感情,容易针锋相对。所以面试双方,都有付出一定精力的时候(除了早早就被刷掉的),结论前,最好通个电话。

1周前 评论

看了一下代码,楼主的 coding 能力没啥说的,很难说楼主对这种简单的curd 设计能力有问题。测试题都写那么认真全英文注释,代码质量也很高,大家别笑我,可能我小公司待的久了,没见过几个 coding 厉害的 phper

1周前 评论

我目前就是远程工作,国外团队开发模式和大陆地区差距还是蛮大的。招聘者提到的技术课题流程比较像平时开发的流程,我们就是这样。 流程时间长的问题,这个很真实,我们现在开发一个小功能时间都是一个月起步。这恰恰说明了公司不卷 :blush:。楼主可能对远程开发还不了解导致了有这样的困惑。

1周前 评论
GeorgeKing (楼主) 1周前

我也是全职远程 面试半小时就ok了 根本没啥测试题 技术面啥的 看对眼就好了

1周前 评论
GeorgeKing (楼主) 1周前
向前一步 5天前

上海这种大城市还不好找吗?需要来找这种远程的工作

6天前 评论
GeorgeKing (楼主) 6天前

这种远程就是垃圾玩意儿,浪费大家时间

5天前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!