美文网首页
移动12万号段信息如何快速寻址

移动12万号段信息如何快速寻址

作者: 大黑跟小白的日常 | 来源:发表于2021-04-02 16:07 被阅读0次

    面试题如下:

    image.png

    简易思路

    利用 哈希表 迅速寻址的 优点 实现当前需求;(如有疑问欢迎交流)
    1889969 - 1340000 = 549969;
    比549969大的最小的2的次幂数为:1048576


    image.png

    大致代码如下

    // 实体类封装
    class PhoneSegment{
        private Integer id;
        private Integer code;
        private String province;
        private String city;
        private String serverType;
        // get set 略
    }
    

    定义数据结构

        // 结合需求 及 HashMap底层hash算法实现原理,初始化一个如下的HashMap
        private static Map<Integer, PhoneSegment> phoneSegmentHashMap = new HashMap<Integer, PhoneSegment>(1048576, 1);
    

    初始化数据到map

        // 程序启动时,加载如下方法
        // 初始化 12万 号段 数据 到hash结构
        public void initData2Map() {
            // 获取 数据库 号段值数据 集合
            List<PhoneSegment> list = getAllPhoneSegmentFromDB();
            // 遍历集合,将数据 put到 phoneSegmentHashMap 中
            phoneSegmentHashMap = list.stream().collect(Collectors.toMap(p -> p.getCode()-1340000, p -> p));
        }
        // 从数据库获取 电话号段信息集合
        public List<PhoneSegment> getAllPhoneSegmentFromDB() {
            // DB读取数据,代码略
            return new ArrayList<>();
        }
    

    根据手机号码获取对应号段信息(高效保证)

        // 根据用户的电话号码 从map中 获取 号段信息
        public PhoneSegment getPhoneSegmentByPhone(String phone) {
            String phoneSegmentCode = phone.substring(0, 7);
            PhoneSegment phoneSegment = phoneSegmentHashMap.get(Integer.valueOf(phoneSegmentCode)-1340000);
            return phoneSegment;
        }
    

    相关文章

      网友评论

          本文标题:移动12万号段信息如何快速寻址

          本文链接:https://www.haomeiwen.com/subject/lpqqkltx.html