作业1:推广计划和推广的状态怎么修改呢 ?应该由谁去做修改呢 ?
答: 推广计划有startDate和endDate, 所以感觉需要做一个定时器,每天某个时间检测endDate是否已经到期,如果到了就修改状态。同样,如果在endDate之前的想置为无效的话,感觉需要一个专门的管理员系统去管理,可以人为修改推广单元,推广计划,以及广告创意等信息。
作业2:为什么匹配过程没有校验推广计划的开始和结束时间呢 ?
答: 这个想让我们去扩展吧,因为校验和过滤其实并不难,我们根据过滤掉任意我们想过滤的条件
作业3:如果媒体方的请求需要对省进行匹配,即不传递城市信息,地域 Feature 的匹配过程应该怎么去实现 ?
答: 在过滤的时候,修改UnitDistrictIndex.match(), 从province-city的匹配方式改为province匹配,代码如下
public boolean match(Long unitId, List<DistrictFeature.ProvinceAndCity> districts) {
if (unitId == null) {
return false;
}
if (unitDistrictMap.containsKey(unitId) && CollectionUtils.isNotEmpty(unitDistrictMap.get(unitId))) {
// province-city
Set<String> unitDistricts = unitDistrictMap.get(unitId);
List<String> provinceList = Collections.emptyList();
// 填充provinceList,只包含province
unitDistricts.forEach(u -> provinceList.add(
Splitter.on("-").omitEmptyStrings().trimResults().splitToList(u).get(0)
));
List<String> targetProvinces = districts.stream().map(
DistrictFeature.ProvinceAndCity::getProvince
).collect(Collectors.toList());
return CollectionUtils.isSubCollection(targetProvinces, provinceList);
}
return false;
}
作业4:当前的实现,所有广告位(AdSlot)的 Feature 是一样的,你能把它扩展到每个广告位有不同的 Feature 吗?
答: 没太读懂题目…
作业5:你还能对当前的广告检索服务做哪些扩展 ?
答: 可以引入缓存,将检索结果存入缓存中, 媒体方的请求作为key;另外就是可以把binlog的监听转移到新增的ad-binlog-kafka模块,让ad-search进行监听相应的topic,然后构建增量索引。