[分享] 大环境下瑟瑟发抖辞职的第二天,拿了两个 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 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 45

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

3年前 评论
犯二青年 3年前
Yesir 3年前
xujinhuan 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
yuanlu 3年前
小陈叔叔 3年前
Jane→ 3年前
痞子先生 2年前

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

3年前 评论
Joker-smile 3年前
ifconfig (楼主) 3年前
qianfan 3年前
snowlyg 3年前
qianfan 3年前
arukas 3年前
beaplat-61f 3年前

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

3年前 评论
hard 3年前
KayuHo

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

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

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

3年前 评论
ifconfig (楼主) 3年前
ifconfig (楼主) 3年前
MayJay 3年前
Summer

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

3年前 评论
ifconfig (楼主) 3年前
╰ゝSakura

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

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

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

3年前 评论

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

3年前 评论

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

3年前 评论
犯二青年 3年前
Yesir 3年前
xujinhuan 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
liuhaiqiang999 3年前
yuanlu 3年前
小陈叔叔 3年前
Jane→ 3年前
痞子先生 2年前
aodaobi

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

3年前 评论

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

3年前 评论

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

3年前 评论

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

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

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

3年前 评论

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

3年前 评论

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

3年前 评论

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

3年前 评论

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

3年前 评论

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

3年前 评论
ifconfig (楼主) 3年前
MIsakas 3年前
popperkaka 3年前

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

3年前 评论

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

3年前 评论
wangchunbo

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

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

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

3年前 评论

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

3年前 评论

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

3年前 评论
Runtoweb3 3年前

两个 offer 的薪资多少啊?

3年前 评论
ifconfig (楼主) 3年前
zero风来 3年前

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

3年前 评论

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

3年前 评论
admin0 (作者) 3年前

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

3年前 评论

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

3年前 评论

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

3年前 评论

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

参考 rango.swoole.com/archives/508

3年前 评论

举手,我一个都不会

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

其他的不看了

3年前 评论
CRAYON 3年前
kis龍 (作者) 3年前

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

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

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

3年前 评论

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

3年前 评论

主从延迟的话可以考虑在请求不频繁的时候停掉主库的写操作,等待主从同步; 也可以加机器,一般从库的机器配置较低,这也是导致主从延迟的原因; 另外从日常开发中,尽量避免长事务和很大的删除操作,都会让从库执行binlog时阻塞后边的binlog同步

3年前 评论

你是不是录音了,怎么记得这么清楚。。

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

这些问题都是看啥书才能会啊,我一个半道出家敲代码的,完全看不懂这些啊

3年前 评论
ifconfig (楼主) 3年前
snowlyg 3年前
wzg10086 3年前

想知道老哥这些offer多少k

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

这些面试题都挺有针对性的,谢谢楼主分享了

3年前 评论
你看我吊吗啊

Golang 和 PHP 混合用 是因为什么。。

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

    :joy: 能说第一个问题,都回答错误了? :joy:

  • FPM 本身就是常驻内存的,根本不会退出;你没发现修改了FPM 配置文件,必须要reload;这一点就可以完全证明。
  • 通过观看PHP-FPM 进程PID变化,也应该知道是常驻内存运行,并非你说的那样子!
  • 本身也是进程池来维护的,不好是因为FAST-CGI进程生命周期问题;Laravel 这么重的框架,每次都重新require N个文件,而且每次Http 请求还是重新加载IOC容器对象实例;性能较差、开发效率高、无需每次重启服务。解决方案:可Composer安装Laravel Swoole 扩展跑异步Swoole HttpServer,摆脱FPM的环境限制,代码发生改变需重启worker。
2年前 评论

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