2019年5月27日
上午:核桃编程
- 自己的系统和外部的哪些系统有数据通信?是拉取数据还是推送数据?是从DB中读?还是?
- 算法时间复杂度是多少?
- 稽核算法之后数据会流向哪里?
- 与移动的数据交互是怎样的?
- 暴露出的接口是怎么发现的?信息总线?注册,发现接口?
- 项目的技术架构?
- 系统有对外暴露的接口吗?
- request response之间的架构? Nginx ——>Tomcat——>...DB
- 入口是有统一网关还是什么?
- oracle有哪些数据隔离级别?
- 缓存对哪些有了解?
-
想象一个场景?商品列表页面然后分页,如果用户量大的话,在分页时如果直接访问DB,就会对数据库压力比较大,所以要用cache机制,来保证数据是一个比较新的,访问速度比较快。应该怎么设计?
如果用户量大,并发压力大;或者是数据量多,百万级的数据,如果数据中所有字段都是定长的,效率还较高,如果数据中存在description等非定长字段,分页就会非常慢。
可以使用缓存,有几种思路
第一:从redis中拿出所有数据后,再做内存分页,就是直接查找出来,放到缓存中(不推荐)。热点数据少的时候还行,如果当数据量很大,分页期间就会占用很多内存,可能会撑爆。另外,缓存中的数据如果不能及时更新,一旦数据发生变化,所有之前做的分页缓存都失效了。如下题所指出的。
第二:可以基于redis的数据结构做缓存分页。- 基于redis的list数据结构,直接通过list的数据结构,用range方法可以进行分页,在数据量大的时候,性能也很可观,但是当存在接口高并发访问时,这个list可能会无限延长,且里面的数据会存在很多重复,这就会影响到正常的业务(不是很推荐);
- 数据以ID为key缓存到Redis里;把数据ID和排序打分存到Redis的skip list,即zset里;当查找数据时,先从Redis里的skip list取出对应的分页数据,得到ID列表;用multi get从redis上一次性把ID列表里的所有数据都取出来。如果有缺少某些ID的数据,再从数据库里查找,再一块返回给用户,并把查出来的数据按ID缓存到Redis里。
- k为页数 v为页内的内容,如果一页中有一个商品卖完了,该怎么去实现?
下午:车车科技
- 如果有一个特别大的字符串拼接的话,该怎么去做?String的字符 加号连接,还是使用占位符的方式?
- 在最近的一个项目中主要负责那块内容?
- 系统是单应用的吗?
- 服务之间的数据交互?用的什么框架?restful webservice CXF框架?
- 做过前端的东西吗?有没有自己封装过小js插件,或者二次封装过 用来简易化的配置?自己研究过js的组件没有?还是常规的页面的编写?
- 感觉项目上用的东西没有特别多
- HashMap默认大小是多少?为什么是16,为什么是2的幂次,扩容机制?
- equals() 与hashcode()有什么关系?
- 了解哪些Spring框架的模块?SpringCore
- Spring容器管理默认是单例模式?还有哪些?为什么要用单例?
- Struts和SpringMVC有什么区别?
- 多线程这块了解吗?怎么实现多线程?继承Thread类和实现Runnable接口这两种方式的区别?在使用过程中这两种方式有什么区别?
- 数据库用的是什么?有没有做过oracle的开发?oracle怎么实现分页?MyBatis怎么实现分页?MyBatis中排序是怎么实现的。做一个子表查询?