京东一二面问题整理

本文整理了京东后台开发面试的一二面问题,涵盖了Spring Bean的线程安全性、Redis操作、数据一致性、负载均衡策略、TCP三次握手、GC监控、MySQL死锁分析、线程池与多线程通信、以及秒杀系统压力分析等核心知识点。
摘要由CSDN通过智能技术生成

京东一面:

自我介绍,

Spring 生成bean (单列)线程安全性

答:Spring 生成的Bean 如果是单例模式 其中的变量不是线程安全的、可以用ThreadLocal来实现线程安全,或者使用原型实例。

扩展 request实例和session实例

request 每个请求新建一个实例、适用于业务比较复杂、反应要求较高。 如支付和飞机票购买

session 每个用户会话期间只有一个实例 适用业务 :用户多次请求 购物车

redis 常用操作、线程安全、数据一致及使用场景

redis 是线程安全的

一致性 redis 是弱一致性 

保持数据一致的方法:

摘自知乎

作者:liu kelin
链接:https://www.zhihu.com/question/36413559/answer/71303343
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

说个大概吧,我们热数据基本都是redis,增删改都是操作mysql,对于读是保存到redis,这样就涉及到数据同步操作,同步操作分为两大块,我们的叫法是,一个是全量(将全部数据一次写入到redis,时间几小时不等),一个是增量(实时更新)。这里说的是增量,主要问题是即时性,因为增删改都是直接操作mysql变更都在MySQL(这里高并发的问题是用分库分表加外层的负载均衡) 所以我们的方向是读取binlog然后分析 ,利用消息推送到某服务器A,再进行分析,然后更新各台redis,消息推送工具用的是rabbitMQ,可设定某表的变更推送(分三类update insert delate 包含变更前后的数据),这里有个问题是:mysql数据操作太频繁产生的推送可能会很多,所以分析处理脚本处理速度一定要跟得上(我用Python写,前期多线程(坑),后来改成多进程),还有一个问题是,对于mysql-redis的数据关系映射设定不要太复杂,一表对一表就行,数据组合交给业务层做,这样分析处理脚本不会太多负担,处理速度更快,而且操作redis也更简单,redis每个对应mysql数据表的可使用多端口多实例,redis是单线程而且这样对于redis的主从和负载均衡有利,

题外话:对于服务器A 可以再给其它服务做一个数据表增量变更数据获取接口,利用数据纬度,获取时间段的变更数据。

追加,对于订单类部分,都是完全使用mysql,这个做好数据服务器,DB,table,分区,的拆分就好了,看并发请求越多拆分越多。


上面说太多都是屁话,其实就是MySQL binlog增量订阅消费+消息队列+处理并把数据更新到redis

一个简单的例子。
github.com/liukelin/can

一致性hash和hash

一致性hash是个环、主要是针对某个服务器宕机、不需要重新分布数据

一致性hash介绍 

http://www.cnblogs.com/zhangshiwen/p/5787232.html

负载均衡 遇到某个服务器性能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值