后端技术的本质在通信,而通信的关键在于TCP抽象化后形形色色,如mysql的连接,http的session,自定义rpc的socket, 长连接等;例如想要弄清数据库连接池,关键的核心还是连接与池化;
理解后端体系一个弄清交互也即上面说到的通信, 另一点就是中间件本身的特征,如kafka在于阶段, mysql在mvcc、索引、事务;redis数据结构、IO等; 还有一点就凌驾于其上的组织者-分布式算法; 如何把单机弄成集群;
常见问题:
1.数据库连接多长时间会断开?
2.数据库服务端能同时支持多少个连接?
3.数据库连接的保活措施是如何做的?
1.数据库连接多长时间会断开?
服务端的自我保护功能,清除类“僵尸”连接,保证自身高可用;
以美团数据库配置为例:wait_timeout=28800 (默认是28800,单位秒,即8个小时), 而TCP链路空闲有效时间是7200s(tcp的keepalive,本身不属于tcp协议的一部分),如果2h时内没有收到数据也会自动断开;
聊聊 TCP 长连接和心跳那些事
2.数据库服务端能同时支持多少个连接?
mysql> show variables like 'max_connections';
美团配置: max_connections=10000
查询具体的连接
show processlist;只列出前100条,如果想全列出请使用show full processlist;
常见问题: 经常会遇到这么一个问题,就是“Can not connect to MySQL server. Too many connections ;
扩展: 主从模型下客户端与服务端是如何连接的?
解惑:为什么300的并发能把支持最大连接数4000数据库压死?
3.数据库连接的保活措施是如何做的?
保活的发起方是客户端,服务端没有这个义务去做这个事情;
Spring 分为两个阶段:
1.启动阶段,构造所有BeanDefinition,在这个阶段包括常见的开发问题,循环依赖、无法找到Bean;重点在扫描,依赖注入;
2.执行阶段,这个阶段才会真正地去创建一个Bean,常见的问题表现为Spring与业务绑定的问题,如生成Bean失败;




网友评论