发表于: 2017-07-05 00:15:24
2 984
今天完成的事情:
1、方案设计(内容管理的 banner 列表、行业大图、首页找职位找精英的、article增删改查)。测了使用金山云的文件上传接口。
在完成找职位的职位搜索页时遇到问题了。
2、职位搜索页的职位搜索方案设计:
需要返回的是,根据多条件筛选到的所有职位,以及它们对应的公司、公司标签。
也就是最终要返回一个json数组对象,封装了“职位信息、公司信息、公司的标签”。
原本的代码逻辑是这样的:
①通过 DynamicUtil 拼装参数map。getIdsByDynamicCondition() 得到职位id列表,通过getObjectByIds查出 职位列表。
②遍历职位列表,在遍历的循环内,取得公司id-->查出公司对象,公司id-->查出公司的标签,并用逗号拼接成String。
③在循环内,将每一次循环到的职位信息、公司信息、公司标签信息 用 键值对 存入 map,将map存入 list。
最终返回给页面,用json标签进行输出。
用postman 测了几回这个接口。
882ms,814ms,864ms, 852ms。总之都超过800毫秒了。明细能感觉到数据是延迟了一下下才返回的,不符合公司的规范吧。
原因是循环内多次有两次访问 DB 的东西 (查公司的,查公司标签的),一般网络情况下,如果一次查询就耗时20ms,那么只需10次就超过200ms了。
一个解决的办法:
通过 Service接口的 getObjectByIds() 方法,查询到职位列表,遍历取出其公司id装入一个list 成为 公司id列表 --> 查询到公司列表。
一次性把所有公司标签读出来,依照标签的公司id属性 弄成 一个
Map<Long, List<CompanyTag>>
这个map装满后遍历它,遍历每个id对应的标签类,用逗号拼接标签。
放进另一个map,Map<Long, String>。
最后遍历职位列表,依次放入公司信息,和根据公司id 取到的标签字符串。
明天计划的事情:
1、后台管理的几个story 的方案设计。
遇到的问题:
1、思路错乱了, 我想通过 companyTagService.getObjectByIds(Ids) 方法去查到所有的公司标签,但入参用的却是 companyIds。还纳闷怎么查到的标签列表是null。
2、听说 DAL 框架自带有记录方法访问耗时的方法,我还没找到。
收获:
1、明白了什么是“循环内不能有访问DB”。
评论