一次技术负责人的面试题,redis,高并发
1 谈谈高并发的一些设计规范或者最佳实践:
高并发是个很大问题,我结合自己做途牛机票的项目情况作答:
1 肯定是群集架构可以横向扩展,不管是用springcloud或是dubbo等服务治理框架,思路一样。
2 基于缓存设计,用reids应对大量的查询,因为直接插数据库磁盘io肯定有瓶颈。
3 针对业务场景做线程池隔离,这样部分业务超流不会把服务器拖垮。
4 请求超时熔断设计,这样有超时可以尽早暴露出来,也是防御使编程最重要的一点。
还有个利用队列来做秒杀的没加进去,感觉这点也属于。
2 一致性hash的理解
回答要点:
1背景是redis按服务器个数分片来取模,服务器个数变化会导致大量key取模结果不同。
2解决方法是不要让服务器总长变化,用hash环实现。
3 假设服务器10台,设总数为100(这个数不能变),假设按服务器名字对100取模,可以得到10,20,40,50,60,70,80,90,95,100。匹配的时候key取模得到一个数,比如12,那么从小到达找到一个比12大的服务器,此时是20,这个key就落到20上,好处是假设20坏了,我们把20去掉,那么11,12到19都会落4到40上,只会影响10-20之间key,其他的key在另外的区间不会受影响。
参考文章:深入浅出一致性Hash原理 - 简书 一致性hash算法的理解-技术开发专区
3 spring框架优缺点以及可以改进的地方
最近才开始看源代码,好处简单说了下,改进没啥想法。。
Ioc 和Aop降低代码耦合,依赖接口和容器,不依赖实现
约定即配置,spring starter的设计,自动扫描starter内的包
4 服务端tcp编程
技术盲点,没有实践过,只知道netty,nio,长连接这些概念。
5 简单介绍下jekins
集成和发布工具,原理:1拉代码2执行本地构建,打包3上传到服务器。
我们项目测试环境配置了定时构建,出错会发邮件。
自动化的每日发布没做,因为单元测试太少,意义不大。
6 docker
用过没有自己制作过,也属于技术盲点。