1. 瀑布流(如微信朋友圈)的场景下, 如何不查询总数来得知是否到最后一页(不能再往下加载数据) ,或针对数据库分页查询;
我的现场回答:面试
- 使用Ajax,定义一个屏幕,判断里面是否有内容,而后加载数据,当对屏幕进行下拉操做时,获取下拉的高度和显示数据的高度,进行内容追加,经过判断滚动距离来得知是否到最后一页。
- 数据库查询:若是最后返回来的条数不足查询条件设置的数量,便可知道已经到底,例如:设定返回10条,若是只返回8条表示已经到底,若是恰好返回10条,再查一次看看是否返回空则能够判断是否是到底。
面试官提醒:
当恰好返回10条时,能够改变下条件增长为11条,若是返回10条说明已经到底sql
总结:数据库
应当从多角度考虑实现场景;缓存
2. 说MyBatis和Hibernate的区别 :
我的回答:微信
mb相对于hib而言,mb须要咱们本身编写sql语句,属于半自动化,经过xml和注解配置,hib本身封装生成sql,咱们仅须要管理对象之间的关系映射。hib因为自动化高,有些性能没法本身控制,myb本身编写sql,能够控制一些查询。项目运用myb适合小巧一些的项目多线程
总结:此问题需继续深耕思考性能
3. 相似MyBatis的@Select注解 或者 SpringDataJPA的@Query注解, 他们写在接口(interface)的方法上, 可是这个接口(interface)没有对应的实现类, 那他们是经过什么方式来实现查询的呢?
我的回答:spa
经过反射生成借口对象,再进行动态代理 线程
4. 如朋友圈同样, 有朋友圈的内容, 每一个内容有对应的评论, 有对应的点赞, 如何设计这个功能? 从表设计 缓存设计 API设计出发考虑
我的回答:设计
按照现有朋友圈功能场景,存在是否为双面好友关系(存在A删除B,B没删除A)才能看到评论,A是否对B屏蔽,这里应该创建一个双方关系关联表。衍生用户内容表,只有在好友关系表中有权限看朋友圈的人才能看获得。性能考虑缓存朋友圈,用户刷新朋友圈读取缓存
5. 若是有200万个图片须要作加水印处理, 如何加快处理的速度呢?
我的回答:
进行批量处理,将200W分红几份,缩小sql执行时间 。单机模式下,单线程分批处理时间会比一次性处理200W时间短,或者开启多线程提升效率。集群模式下,由一台机器调度,其他机器进行处理。