[分享] 大环境下瑟瑟发抖辞职的第二天,拿了两个 offer

Base:广州
公司:100+人做社交APP的互联网公司
应聘职位:Golang & PHP 后端开发
本人背景:6年PHP开发 & 2年Go开发

心得:

本来想找PHP的,误打误撞发现广州的Golang和PHP混合用的公司还蛮多,恰好约面试的都是Golang,挺纳闷的难道PHP真的萎靡了?不过有时候写Go结构体真的不习惯,这一点PHP的高级面向对象特性太香了。

面试过程:

1.看你简历里也有用过Go,Go和PHP在运行的时候有什么区别和优势?
答:PHP每个请求进来时都会创建fpm-worker进程,从而导致系统并发高时CPU会产生频繁创建进程的开销,而Go不会。

2.你刚刚说到PHP那既然是多进程,那怎么共享数据?
答:PHP既然是多进程,进程资源的地址和PCB空间都是独立的,没办法共享数据吧。

3.那我如果要在Go里实现共享数据,有什么方式?
答:我在项目里使用过协程,可以用channel

4.那channel的本质和底层是什么?
答:这个知识点有点模糊,我想想,如果没记错,我记得就是linux的管道吧

5.那linux的管道有什么特性?
答:管道的特性应该是只能等一边写完,另一边才能读,不知道我回答的对不对?

6.对你说得没错,那你觉得管道是用什么实现的?
答:不好意思,这题我不会

7.其实管道就是文件,那对文件操作就是加锁
答:对对对,我想起来了,其实这里涉及到资源的抢占,那系统对资源的抢占肯定就是加锁实现。

8.既然刚刚你也提到协程,可以描述下Go的协程原理吗?
答:Go的协程是基于CSP并发模型的GPM调度机制,M可以理解为处理机CPU,P就是Go底层用来管理Goroutine协程的。

9.(这个时候面试官拿了一张白纸过来)写一个二分查找的算法看看吧,用PHP或Go都可以
答:好,那我用PHP写吧(PS:这里我用的是递归法,要注意二分查找的临界问题)

10.嗯,算法没问题,问一点网络的吧,socket用过吗?
答:websocket用过,在做直播聊天室的时候会用到长连接

11.那你觉得websocket是基于什么协议?
答:是基于TCP协议的

12.TCP客户端和服务端是怎么建立连接通信的?
答:(ps:一开始答错了,我说是ack吧,面试官纠正是syn)然后我恍然大悟接着说,第一步是客户端发送syn,第二步是服务器应答syn+ack,第三步是客户端回复ack

13.那TCP握手是几次,断开是几次?
答:握手是三次,断开是四次(ps:有些面试官会问为什么断开要四次,这里涉及到半连接等待关闭,幸好没问)

14.假设我们现在要做一对一视频聊天,每日DAU可能达到几十万以上,后端怎么实现一对一匹配的算法?还有,怎么实现快速的匹配服务器不会有压力问题?
答:我想一下。用户登录的时候,如果未开始匹配,可以把用户放到redis里的set集合里,通过SRANDMEMBER命令随机抽取人出来就好了 ,至于redis的value最大可以保持512m数据,也就是理论上我们承载可以达到上千万上亿用户都不是问题,至于要保持redis的高可用,可以用rdb或aof做数据持久化,另外,redis也有哨兵模式,主redis挂了也可以选举抽取空闲的redis服务器顶上

15.mysql主从的时候有没有遇到过主从延迟同步的情况?是怎么解决的?
答:emmmmm,这个情况我还没遇到过。

16.你也知道我们是做社交APP的,如果我们要做一些兴趣推荐的内容或者人,你会怎样实现?
答:可以用ElasticSearch,我以前的项目有配合ik中文分词使用,缺点是比较吃机器内存。

总结:

面试完和面试官聊了聊,得知面试官是从YY出来的
从整个面试流程来看,面试官太会引导问题了,从应用层面一点点问出底层细节,也加予了适当的提示,这一点很值得学习


另外一个offer是医院体系下医疗行业,因为冲击较大未来盈利可能有困难,规模是20人,就不考虑接offer了,不过还是分享一下面试的内容

1、redis在项目里用过哪些数据类型?
2、怎么解决redis在并发下商品超卖的问题?
3、Golang长连接的时候是怎样做心跳机制的?
4、说一下你是怎么理解微服务的?
5、mq用过吗?在什么场景使用的?

完~

本帖已被设为精华帖!
本帖由系统于 3周前 自动加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 37

不装了,我摊牌了,这些面试题我一个都不会

3周前 评论
犯二青年 2周前
Yesir 1周前

明显第一个面试官更好,起码会点出你的错误,然后引导你一下,我面试的都是嗯嗯嗯嗯...

3周前 评论
ifconfig (楼主) 3周前
Derek 3周前
qianfan 4天前
Linxb

写的不错,总结就是大牛们都喜欢问一些基础的知识点

3周前 评论
KayuHo

老哥,我也想转学go,没有工作中的应用环境怎么学啊,我跟着 gin 敲 demo 感觉很难受

3周前 评论
ifconfig (楼主) 3周前
KayuHo (作者) 3周前
wangchunbo 2周前
php炎黄

一个真敢问,一个真敢答,php通过共享内存、信号量,消息队列就可以资源共享,再说channel它只是像一个管道,channel在底层是一个hchan结构体

3周前 评论
ifconfig (楼主) 3周前
ifconfig (楼主) 3周前
Summer

面试都记得这么清楚哈,感谢分享

3周前 评论
ifconfig (楼主) 3周前

羡慕大佬,我也想去个GO和PHP混合用的公司,没勇气辞职,菜鸡一个 :sob:

3周前 评论
ifconfig (楼主) 3周前
╰ゝSakura (作者) 3周前

摩拜大佬,作为技术渣渣的我每次看你们的帖子都是沉重的打击

3周前 评论

感谢分享。 感觉靠谱的公司面试都是问的这些比较底层的知识点。

3周前 评论

不装了,我摊牌了,这些面试题我一个都不会

3周前 评论
犯二青年 2周前
Yesir 1周前

不装了,我摊牌了,这些面试题我一个都不会

3周前 评论

面得不难呀,膨胀了膨胀了

3周前 评论

面试不难, 可惜我一道题都不会~

3周前 评论
Krisji

其实现在php 不会go的都是假的php

3周前 评论
ifconfig (楼主) 3周前
Liuzhipeng_laravel 3周前

我感觉我落后了,三年了,这些面试题我不会 :joy:

3周前 评论

@Luckyhhy 我也是后面才学的,前几年我也不会😄

3周前 评论

@ykennyy 向大佬看齐,学习 :+1:

3周前 评论

我感觉我现在还是个菜鸟了

2周前 评论

我還是重新學習吧...... 這些我都不會

2周前 评论

经历也不差不多。 7 年 PHP 开发 & 1 年 Go 开发。 在郑州,现在在职,现在的工作是PHP,想转go。就抽了个空去面试下。 发了offer。工资1w+。但是还没考虑好去不去~ :joy: :joy: :joy:

2周前 评论
ifconfig (楼主) 2周前
MIsakas 4天前

不装了,我摊牌了,这些面试题我一个都不会

2周前 评论

能把面试问答记得这么清楚,也是很厉害了,学习了楼主~

2周前 评论
wangchunbo

你好,兄弟,介意我把你分享的面试题,细化,然后写成2020版php与golang面试集合吗?

2周前 评论
ifconfig (楼主) 2周前

不装了,我摊牌了,这些面试题我一个都不会

2周前 评论

我之前去面试也被问到 mq用过吗 我是这么回答的 用框架自带的队列

2周前 评论

让我想起了mysql用mgr主从延时出bug的那个晚上

2周前 评论
littlexiaoshuishui 1周前

两个 offer 的薪资多少啊?

2周前 评论
ifconfig (楼主) 2周前

感谢分享。请问楼主贵庚?

2周前 评论

第二题:你刚刚说到 PHP 那既然是多进程,那怎么共享数据?这属于操作系统的概念,最近在看操作系统的东西,操作系统有各种方法共享进程数据,网上搜下一大堆,当然最好还是找本操作系统的书看下。

2周前 评论
admin0 (作者) 2周前

再仔细看了下,基本上没有考语言本身的东西。

2周前 评论

不装了,我摊牌了,这些面试题我一个都不会

1周前 评论
TonyF

原来我一个都不会 :joy: 老哥,我要向你学习。

1周前 评论

第一题的回答不对吧,PHP-FPM 没有频繁创建进程,进程是可以复用的,而是某个进程在遇到 IO 阻塞时进程处于空闲状态,不能很好地利用 CPU ,导致吞吐量上不去。

参考 rango.swoole.com/archives/508

1周前 评论

举手,我一个都不会

1周前 评论
  1. 共享数据,肯定有,你想想session,再是 php-fpm,运行完,第二次请求还是登陆状态,所以PHP是有数据共享的,那 session 又是怎么共享的?其他数据可以参考就可以数据共享了。

其他的不看了

1周前 评论

主从不一致的问题 我在58沈剑的博客上看过 他给出的解决方法是 如果某个KEY 要被更新 记录在cache 里面 并设置超时时间

  1. 先查看cache 有没有值对应库的对应KEY有没有相关数据
  2. 如果有 说明这个KEY 把请求到主库读最新的数据
  3. 没有的话 继续请求到从库
1周前 评论

问这些面试题,薪资没有20K+就别考虑了

1周前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!