面试 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 需要该,这个我认了,但是后面开始题需求了,这里的操作让我感到很莫名奇妙,我当时的想法如下:
在最开始我对需求有疑问时,技术负责人给我的答复就是根据自己的理解来,需求不明确,让开发人员完全主管发挥,我的理解是能实现大致逻辑证明能实现业务就行了;
让非技术人员对最终实现效果做评定,而不是通过源代码来分析!如果你只给个泛泛的开发目标,最终 UI 和交互效果都要开发来保证的话,我觉得就很离谱,最后还以达不到效果为借口,否定我提交的项目;
对于测试环境要发送邮件通知,在没有提供 SMTP 账户的情况下,我用自建的 Mailpit 作为查看测试邮件的方式,这虽然体验可能不好,但是并不是功能缺陷,而且作为开发人员应该都知道,这就是配置个 SMTP 账户的事!
提出质疑

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











Laravel Admin 管理后台





总结
这一路面试下来,大概已经十来天了,就冲他们这个技术面试的审核方式,我觉得各位有意向的开发者都要三思!!!
关于 LearnKu
高认可度评论:
我和这家公司技术负责人也是认识多年的老友了,论坛里也有不少人在这家公司任职,包括我们的一位资深的版主。
看到上面有朋友留言白嫖代码,不至于不至于,他们也没在做外包。反而招聘团队搭进去这么多人在聊,在跟进,在当前大环境下,对他们团队来讲是一个不小的消耗。他倒是有在反馈最近应聘者多,小团队,有时候回复没有那么到位也是表示了歉意。
这个事儿,双方我都有联系,感觉下来,就是个沟通不到位啊。文字比较苍白,无法表达感情,容易针锋相对。所以面试双方,都有付出一定精力的时候(除了早早就被刷掉的),结论前,最好通个电话。
技术过硬,不怯场,沟通能力强,总体非常不错。 :+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、数字游民要更加保持专业和尊重。专业是对自己,尊重是对他人。
这家公司在learnku停显眼的,但是需要一个候选人去完成一份业务需求来作为评估的手段真是匪夷所思!如果只是为了考察候选人的能力有大把的手段,但是这个课题的的成本对候选人来说太大了,不仅没有足够反映候选人的某方面能力,还下头
这不是纯纯白嫖么
记一次糟糕的远程单位面试体验 这有个类似的面试经历
纯白嫖
老实人
技术过硬,不怯场,沟通能力强,总体非常不错。 :+1:
@ComiruTokyo
这家公司招聘流程还是挺复杂的,不过论坛里也有人面试通过入职的,应该不至于白嫖代码。
如果工作量很多,可以让他们给钱 :blush:
面试项目半路改需求是真的抽象
不管是不是白嫖,这么麻烦,低效沟通,要是日本的终身雇佣正社也认了,一个不签合同没有社保的远程而已,32w薪资在日本派遣都招不到
说白了就是中文远程不行的,一方面裁员太多竞争激烈,另一方面资方会点中文也知道环境啥样,你根本要不到高价
我之前做好了,部署好了后,他似乎都没有打开我做的网站去试试功能(因为我没看到数据保存)。直接就说我代码质量太差。 当然我确实代码写的很随意,没有规范
现在远程都这么卷了吗?
面试的成本都这么高。。。
你好,我是工程师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、数字游民要更加保持专业和尊重。专业是对自己,尊重是对他人。
这个面试的成本太高了吧,再结合这个薪资,就太坑了!
我之前也投过这个 POPER 因为课题太耗时,所以中途放弃了,课题也是这个题目,所以可能不是白嫖方案,其他的就不清楚了 这个面试流程确实太长,另外课题的工作量太大,对面试者不友好
技术课题提交后提的一些优化需求感觉就很抽象,所以可能是为了白嫖或者是进一步评估候选人的code能力?
:+1:
太浪费时间精力了
在上海工作7年,20k这个薪资感觉好像有点低了吧。。。
我看到 ComiruTokyo 说100人有6人通过,我理解的就是可能有很多都不是因为技术不够而没通过的,就像诈骗犯打电话一样,他每天要打多少个电话呀,骗人的话术很简单呀,正常人都会知道是诈骗,那就会及时挂掉电话,这说明挂掉电话的人群不是诈骗犯的目标群体。
那么但凡能不挂电话的,一直聊的,后续的,懂自懂吧
~不用言语了 (PUA换个马甲就变成了CPU)个人观点不喜勿喷只能说,服从性测试也是远程面试的一环吧,楼主没通过考验
一个月这点薪资 面试者们省省吧
这家公司在learnku停显眼的,但是需要一个候选人去完成一份业务需求来作为评估的手段真是匪夷所思!如果只是为了考察候选人的能力有大把的手段,但是这个课题的的成本对候选人来说太大了,不仅没有足够反映候选人的某方面能力,还下头
哈哈 有点意思 有种跃跃欲试的冲动
不是,面试demo项目还带改需求功能优化的?这又不是投产项目,需要优化细节~
很多远程工作待遇虽然很好,但招聘要求、难度,都不是线下面试能比的,因为线下面试受地域限制,可能找的人都不太满意,从里面选出一个相对优秀的。
远程工作是面相网络招聘的,我们要面对的竞争对手是来自五湖四海,这里面鱼龙混杂、竞争也相当激烈。
但话又说回来,远程工作的机会也是非常多的,这个不合适还有其他更好的的岗位等着你。
我觉得如果英文能达到口语表达通畅的话,直接去国外的远程工作去找,国内的电鸭之类的薪资中间都是被剥了一层皮的,你懂的。
我和这家公司技术负责人也是认识多年的老友了,论坛里也有不少人在这家公司任职,包括我们的一位资深的版主。
看到上面有朋友留言白嫖代码,不至于不至于,他们也没在做外包。反而招聘团队搭进去这么多人在聊,在跟进,在当前大环境下,对他们团队来讲是一个不小的消耗。他倒是有在反馈最近应聘者多,小团队,有时候回复没有那么到位也是表示了歉意。
这个事儿,双方我都有联系,感觉下来,就是个沟通不到位啊。文字比较苍白,无法表达感情,容易针锋相对。所以面试双方,都有付出一定精力的时候(除了早早就被刷掉的),结论前,最好通个电话。
看了一下代码,楼主的 coding 能力没啥说的,很难说楼主对这种简单的curd 设计能力有问题。测试题都写那么认真全英文注释,代码质量也很高,大家别笑我,可能我小公司待的久了,没见过几个 coding 厉害的 phper
我目前就是远程工作,国外团队开发模式和大陆地区差距还是蛮大的。招聘者提到的技术课题流程比较像平时开发的流程,我们就是这样。 流程时间长的问题,这个很真实,我们现在开发一个小功能时间都是一个月起步。这恰恰说明了公司不卷 :blush:。楼主可能对远程开发还不了解导致了有这样的困惑。
我也是全职远程 面试半小时就ok了 根本没啥测试题 技术面啥的 看对眼就好了
上海这种大城市还不好找吗?需要来找这种远程的工作
这种远程就是垃圾玩意儿,浪费大家时间
真就离谱这面试
纯白嫖
看了开始的,觉得一切还都算正常,并不存在谁强迫谁的过程,后面不知道怎么回事儿,就突然画风转变,看着有点难受了。招聘其实就是个双向选择的过程。如果觉得公司不合适或者流程太长,可以及时止损,但是没必要闹别扭撕破脸皮,最后把一些约定好保密的信息都放出来,这样有点不太合适。最后希望楼主找到合适的工作。
和op同样的经历,几乎也是同一时间,说下几个问题
1.课题内容过多,2周时间对于还在职的工作量巨大
2.面试php岗位,还需要vue的完整前端,这点没有提前说(写前端花了我大部分时间)
3.课题结束后没有及时反馈,不追问根本没人理了
4.按照课题要求做完,但最后给的不符合原因居然是课题内容没明显说明需求的,看op的聊天记录基本上就是需要自己去理解
5.看之后的HR反馈跟本没有提到代码上的事情,所以可以认为代码就没有技术看
V2上也有这种经历,帖子:v2ex.com/t/809723
最后放上我的仓库,说不上代码质量多高,但也是我花了两周加班加点辛苦赶出来的,真的很失望
后端:github.com/xiang23808/class.git
前端:github.com/xiang23808/class_web.gi...
招聘最好写清楚些
2周内,平均每个人一天2小时就能完成,还是4小时。
前后端,有没有后台。提交代码后,后面还需要修正代码吗?还是直接不过就不过。
现在国外远程打工全部充公
国外远程打工,全部上交
离谱
这个招聘时间段得流程是按照正式员工的工作标准来面试的吧,这个一开始说明白就好啦。但是课题不就是课题吗,咋这么不卷,验证能力不是应该完成招聘了吗,为啥要有意愿补全课题,你先开工资啊
这家公司我很早也尝试过,过程很复杂,中途就没继续了
说白了,日本公司来招聘中国人,懂的都懂
但是整体面试流程又极其日本,一点也不符合中国文化
说到底感觉是文化的冲突,没有对与错之分
这个流程的 offer 要是 30K,大家就不说啥了,可惜他是 12k ,还不含五险一金!
12-16k,不包含五险一金,还是海外岗位.意味着没有任何保障...还特别面试要1个月,,,妥妥的服从性测试
服从性压力测试
我还以为是面试40-50K 1万多块钱。。。不交五险一金 挺魔幻的
那都是好几倍money了,不交就不交了呗
op能力挺强的! 最好自己找,不要通过外包中介
OP有耐心,逻辑清晰,技术扎实;个人建议,远程工作不靠谱,尤其是五险一金不缴纳,这个东西,没结婚居无定所的时候,你觉得不重要,等你成家有小孩的时候就知道它的重要性了,另外工资薪水偏低,以国内目前的就业形势和经济环境,如果打工不是为了挣钱,那说明你已经财富自由了,不再为此发愁了,如果不是这样的话,还是老老实实线下上班吧。
其实看到开头HR提12-16,并且要自己交税和公积金的时候,我就觉得待遇挺苛刻的。楼主直接拒绝了,也在情理中。然后下面看到楼主想继续面试的希望,看了一下时间,过了快小一个月。 这段时间,其它家的面试是发生了什么其它的情况吗。
其实,你之前离职的心情,我是理解的,我当年也是在一家公司干了5年,不想干了,之前拿的钱和你是一样的。 然后2019年离职后,不得不承认,后面的薪资在走下坡路。
这其中有PHP在现在大环境下,不受重视。 和年龄的35的原因。
还有一条就是,现在互联网圈里,不缺工程师,一个职位,一堆人在面试。资方看所有的简历,都一个样,懒得理了。直接筛检学历,从985,211,本科开始。 然后这几年就一直卷下来了。
目前国内的互联网圈子,不缺乏低端工程师,这个低端工程师,指的就是 写业务逻辑,基本上是增删改查这种的。我虽然干了好多年,但也就是这种范围的。太高级的业务,也轮不到我。
这两年转型在全站,学习前端,还有架设服务器,单纯的只写后端,还是PHP,在行业内已经没有竞争力了。 对了,还得会Go,JAVA,要求不能只会一种语言。
大公司有一堆的要求,小公司也有要求,比如,常见的一个面试要求就是,要求PHP工程师有大量的微信小程序开发经验。
无路可退,只能往前不停的学习了。有点累。但是没办法,干别的我也不会了。只能在IT圈继续了。
觉得楼主很有耐心,是个有为青年。感觉他们面试是比较死板。 能否决定要这个人因素很多的,并不只是做题那么简单。别忘了运气很重要。做题结果几乎相同的情况下换个人或者换个好日子沟通就能通过也完全有可能。
看完了,总结就是确实不是白嫖,其次就是面试成本确实太高了,再者课题感觉没啥技术含量,基本curd!
看了楼主Q1-1的代码,没看到代码对应的问题,猜测是要求“不用内置函数完成两个字符串对应的数字相加”么? 如果没有明确的“不用内置函数”的要求直接bcadd可能更合适,但如果要求了,只能说明这公司技术团队不行,早该及时止损去面下家了