隔了半个月又来记周记啦!第一个项目终于完工了,想想真有点不可思议,那么复杂的东东居然是自己做出来的,当然了过程还是很艰辛的,都是泪。。。
这两周主要完成了几个新的需求,其中最难实现的是,点击top100的某个数,可以看到这个数的详细信息。因为我算top100的时候是用的int数组,里面只存的数,并没有对应的详细信息,所以就又建了一个String数组,里面存着详细信息。难点是怎么把int数组和String数组对应。如果直接用java自带的sort排序,int排好了但是String就乱套了。
方法是改写冒泡排序(当然也可以改写快排),在int数组中数据交换的时候,String数组中的同样脚标的数据做同样的操作。
这里的top100是几亿数的top100,借鉴了堆排序的思路,维护一个100大小的数组,并且对其排序,然后一条一条数据过,发现比这个数组中最小值要大的,就替换一下,然后再对数据排序。这样把几亿条数据过完,这个数据就是top100。
另外就是修改了一个小bug,之前一直没仔细追究。空下来处理了一下,发现是for循环(int i=0……),循环中间忘了用i,直接写的0。。。
页面加载慢的原因也找到了,初步推测是因为php中连接redis过于频繁,连接次数过多导致时间过长。解决办法就是修改java存入redis时的逻辑,减少key,增加field,这样php取数时,连接key的次数就会减少,然后用mget方法,一次性取多个field数据,这样页面打开速度就会大大提升!
总之,作为自己的第一个在公司做完的项目,虽然只是一个大项目中的小模块,但还是很满意的哈哈哈~
2020年03月19日,这里是毕业快一年后,对当时排序问题的解答补充。算top100的时候,直接是对对象进行操作就好了,建个对象,包括一个Integer和一个String。
针对对象进行排序,代码如下:
List<Apply> applySort = applyHistory.stream().sorted(Comparator.nullsLast(Comparator.comparing(Apply::getApplyDate))).collect(Collectors.toList());