先说一下我的观点,我保持中立哈哈哈哈哈哈。
不是啥两边倒哈,我觉得应该具体问题具体分析,脱离了实际的辩论都是虾扯蛋。
我说个故事吧,憋在我心里好久了。
在我做第一个后端项目的时候,是老师给我们的框架,我又自己找学长拿了他的项目,两者框架差不多,看样子是没怎么改了。
什么框架呢,很常见。说一下前置服务器,一个好好的前置服务器,拆分为:
Inaddress模块、
Sock模块
Accept模块
Epoll_base模块
Epoll模块
我当时就给整懵了,花了两天时间才捋清楚这些绕来绕去的,毕竟第一次嘛。
但是呢,捋清楚就完事儿了吗?当我们开发到后期的时候,进行测试,我们几个做服务端的组长是有群的,对,组长都是负责服务端,他们也都是沿用老师给的框架,没有改过。
测试结果:
1分钟,3K个连接;
6分钟,9K个连接;
30分钟,1W个连接。
这是刚开始比较慢的。
经过我们几天的调优,同时连接1W个客户端进来也要花小十分钟。可惜我是个极简主义者,那时候留下了不少记录博客,全让我清理了,不然这会儿就能贴出来做个证据了。
为了加快速度,什么办法我们都试过了,后来,我实在是忍不了了,那么多个模块对象,我在网上看到一份纯C的epoll前置服务器,直接扒拉下来一试,诶呦,1W连接30s!
我苦思冥想一晚上,越想越觉得是因为没有那么多弯弯绕,于是我干脆仿照那套模式,把我的前置服务器全都堆到一个模块里面去,从配置网络接口到accept,再到epoll管理,统统放到一个 run 函数里面去,构造一个对象之后直接run。
一测试,1W连接2s。平均1W连接6s。
虽然后来的项目中我又对前置服务器进行了切割,不过那是采用了责任链模式对epoll模块进行简化,其实是进一步的优化了性能。
Ending
Tip:由于文章篇幅有限制,下面还有20个关于MySQL的问题,我都复盘整理成一份pdf文档了,后面的内容我就把剩下的问题的目录展示给大家看一下
如果觉得有帮助不妨【转发+点赞+关注】支持我,后续会为大家带来更多的技术类文章以及学习类文章!(阿里对MySQL底层实现以及索引实现问的很多)
吃透后这份pdf,你同样可以跟面试官侃侃而谈MySQL。其实像阿里p7岗位的需求也没那么难(但也不简单),扎实的Java基础+无短板知识面+对某几个开源技术有深度学习+阅读过源码+算法刷题,这一套下来p7岗差不多没什么问题,还是希望大家都能拿到高薪offer吧。
需求也没那么难(但也不简单),扎实的Java基础+无短板知识面+对某几个开源技术有深度学习+阅读过源码+算法刷题,这一套下来p7岗差不多没什么问题,还是希望大家都能拿到高薪offer吧。