本来想找 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 用过吗?在什么场景使用的?

大环境下瑟瑟发抖辞职的第二天,拿了两个 offer相关推荐

  1. html 按钮 按下 状态_第一次按下是启动,第二次按下是停止,俵哥分享2种接线方法...

    朋友们大家好我是大俵哥,今天我们来说一下单按钮启停电路.这个电路虽然应用的不多,但是非常的经典,新手朋友们可以拿来练手.今天我们讲2种控制方法,一种用中间继电器控制一种用时间继电器控制,在看电路之前, ...

  2. Geek Talk 034:消费升级大环境下的空间设计

    主题:消费升级大环境下的空间设计 时间:6月28日 19:00 - 21:00 地点:报名确认后,邮件和微信通知 邮件发送详细地址,请确保邮箱地址和 微信ID 正确 人数:30人 嘉宾:史洋 史洋  ...

  3. Java岗:从5个35k的offer中被踢出局,最后沉下心来,最后拿下了心仪的大厂offer~你我皆为黑马!!

    背景 今天这篇文章的灵感来自一个粉丝的亲身经历,想必也是求职浪潮中很多朋友的经历,内卷大环境找不到满意工作的人太多了,之前也有很多人问过我怎么才能找到不错的工作,甚至是进大厂,所以今天就借这位粉丝的经 ...

  4. 《PyInstaller打包实战指南》第二节 PyInstaller的两种打包模式

    第二节 PyInstaller的两种打包模式 1. 文件夹模式打包 2. 单文件模式打包 3. build, dist和spec文件(夹)简介 PyInstaller可以把python程序打包成多个文 ...

  5. Java黑皮书课后题第9章:**9.12(几何:交点)假设两条线段相交。第一条线段的两个端点是(x1, y1)和(x2, y2),第二条线段的两个端点是(x3, y3)和(x4, y4)

    Java黑皮书课后题第9章:**9.12(几何:交点)假设两条线段相交.第一条线段的两个端点是(x1, y1)和(x2, y2),第二条线段的两个端点是(x3, y3)和(x4, y4) 题目 破题 ...

  6. mfc 按钮点第一下没触发消息 第二下才触发消息_34 详细干货 | 给回避型伴侣发消息,他们不回复,该怎么办?...

    "我想我大概是一个不值得被爱的小孩吧"这是所有回避型依恋者最真实的内心写照.他们在感情中(至少是前期阶段),通常是很难信任他人,因为过去的经验告诉他们:别人是不可能给我情感满足的, ...

  7. VS2010下创建WEBSERVICE,第二天 ----你会在C#的类库中添加web service引用吗?

    本文并不是什么高深的文章,只是VS2008应用中的一小部分,但小部分你不一定会,要不你试试: 本人对于分布式开发应用的并不多,这次正好有一个项目要应用web service,我的开发环境是vs2008 ...

  8. 缺货大环境下,假货防不胜防,我们又该怎样分辨真假芯片?

    猛男如何学嵌入式,关注@我要学嵌入式,嵌入式男人的加油站. 摘要:在全球半导体缺货行情下,假芯片开始在供应链流通.全球芯片短缺为假芯片进入市场创造黄金窗口,给更多的电子产品带来质量风险,损害整机厂商和 ...

  9. 移动端对比后端逐渐“式微”?在互联网大环境下如何避免久当生锈的”螺丝钉”去成为一个优秀的Android开发者?

    知乎提问:最近看到一些技术博客,说所有公司都意识到了,小程序相比传统的安卓/IOS/Web三线作战的优势.真实情况也是如此吗? 这个"式微"的理解其实可以有很多种解读,这里最直接的 ...

最新文章

  1. 宁波计算机软考培训机构,浙江宁波2019年下半年软考通过率约为25.7%
  2. vi 打开不同编码的文件
  3. TensorFlow2-循环神经网络
  4. code block怎样导入整个文件夹_一文就能get!带你了解Python模块导入的真相,拿走不谢...
  5. ASP.NET MVC 在控制器中获取某个视图动态的HTML代码
  6. 提示word损坏,需文本恢复转换器的解决两方法
  7. 苏宁易购:苏宁控股、苏宁电器合计质押约5.18亿股公司股份
  8. WPF 与 摄像头资料
  9. 2.0显示为整数 java_Java如何将系统属性读取为整数?
  10. [转载]百分之百自动登录2345王牌技术员联盟源代码(delphi)
  11. Oracle报998,无法加载oracle in oradb10g_home2 odbc驱动程序,系统错误代码998解决方法(转载+部分原创)...
  12. Mysql 省市县乡 地址分割
  13. C语言获取程序运行时间
  14. 微信默认表情符号的代码对照表(微信公众号使用到)
  15. android studio 雷电模拟器
  16. NNDL 作业3:分别使用numpy和pytorch实现FNN例题
  17. [递推] 51Nod1383 整数分解为2的幂
  18. 【算法设计与分析】-- 分治法
  19. Centos GNOME桌面
  20. python初学者爬虫教程(二)动态网页抓取

热门文章

  1. 图像处理(五)双指数磨皮
  2. Dockerfile构建PHP镜像
  3. 人工智能与主体时代变革
  4. nginx配置多个server
  5. 浏览器左上角的网站图标
  6. 关于li标签之间的间隔如何消除!
  7. 10-9-堆排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版
  8. C++ Primer Plus(十一)—— 使用类
  9. KindEditorckplayer的简单结合
  10. machine_desc结构体【转】