数据库问的好多
导数据
oracle中一个表(单表),用户表7000万条记录,单表承受不下了,要导入mysql集群中。
导入中间不能有错误数据,中间用户的服务不能停。用户依然能登录和注册。问如何存放?同时能解决用户点击登录卡住问题?
这个显然需要将一个oracle表变换成很多mysql表,因为oracle单表承受不住了,mysql单表肯定更承受不住了。
如何变换,我一开始想的是按照用户名首字母排序,比如
'a' => 表1
'b' => 表2
...
'0' => 表x
...
'9' => 表x
但是这样需要62张表,面试官要求是20张表。他告诉我是需要一致性hash,即把用户名的HashCode根据20取余数,算出应该放在哪张表,这样下次再查询的时候就不用扫全部7000万记录了。
第二个问题,登录的时候怎么能不让用户感觉暂停
我说的是在注册的时候,数据写入mysql,登录的时候先查询oracle,查不到就再查询mysql。
他说他不是这么做的,直接新用户也插入oracle,然后导数据只是导一个确定create_time之前的,之后的数据不导。这样在大数据导完之后,只会遗留一部分很小的数据,再很快导一次就可以了。
(好low啊。。。)
如何存储活跃用户
比如在JD,并不是所有用户都是长时间在线的,7000万用户中比如只有100万经常买东西,如何存储这部分用户?
我说的是把这部分用户的ID放在缓存,和这部分用户相关的3个月订单也放在缓存中。
对于很老的不怎么活跃的用户,面试官的意思是放在mongoDB中了
如何区分活跃用户呢?
我说的是一周内登陆的用户,并且买东西超过一定门限的。他没说啥
问问题阶段
-
JD的网站架构
多个tomcat之间并不是共享session的,直接禁用了session,每次传请求都需要传用户名,向后台发请求都要走https协议(猴子说太low了)
提问
1、为什么用nginx,不用LVS?
因为JD的nginx用了很久了,而且很多nginx的代码JD做了重写
2、这么多tomcat,如何部署升级?
有专门的升级脚本做多个tomcat同步,配置好多个服务器IP端口就行了(我猜是走的ftp吧)
3、后台那么多数据库,怎么保证数据库同步?
这个是归DBA来管了,一般来说是开发需要把建表语句发给DBA,然后DBA来管建表,和数据同步。因为数据是很宝贵的,不能让开发有数据的权限。(好像是这个意思)
最后他又问了我个很low的问题,java中基本类型和对象类型啥区别
我答的是对象是引用,引用的对象在堆区;基本类型是值,存在栈区。他说默认值也不一样啊,int是0,而引用是null。
JD金融作为一个理财产品和余额宝相比的优势
这个问题问的找抽啊,因为这个是我之前一直没想明白的。。。
面试官告诉我这两个产品关注的点不一样。
余额宝有流量,微信的理财通有用户,而JD金融就需要把关注点放在消费上。
这里就有很多特色了,比如JD白条,JD众筹
还说了一个功能很有意思,大概是让你存10万存个一年,在你刚存入的时候就白送个手机给你,一年后10万原封不动还给你。。。这个功能叫啥忘了。