为了账号安全,请及时绑定邮箱和手机立即绑定

Java高并发秒杀API之业务分析与DAO层

  • 灵活使用insert ignore奇淫巧技
    查看全部
  • 从这节课开始看,

    本节概括了一些框架特性

    Spring IOC整合Service

    查看全部
    0 采集 收起 来源:相关技术介绍

    2020-04-01

  • public class ResortByDel {
        private static String BIG_FILE_NAME = "D:\\test1.txt";
        private static Integer BATCH_SIZE = 100;
        private static String LINE_SEPARATOR = ",";
        private static String SORT_FILE_NAME = "D:\\test2.txt";
    
        private static List<String> separateFile() {
            List<String> fileNameList = new ArrayList<>();
            try (BufferedReader reader = new BufferedReader(new FileReader(BIG_FILE_NAME))) {
                int index = 0;
                List<String> batchLineList = new ArrayList<>(BATCH_SIZE);
                String line;
                while ((line = reader.readLine()) != null || batchLineList.size() > 0) {
                    if (line != null) batchLineList.add(line);
    
                    if (batchLineList.size() == BATCH_SIZE || (line == null && batchLineList.size() > 0)) {
                        // 内容排序
                        batchLineList.sort((a, b) -> a.compareTo(b));
                        // 写小文件
                        String fileName = BIG_FILE_NAME + ".tmp." + index++;
                        try (FileWriter tmpWriter = new FileWriter(fileName)) {
                            for (String val : batchLineList) {
                                tmpWriter.write(val + "\r\n");
                            }
                        }
                        fileNameList.add(fileName);
                        batchLineList.clear();
                    }
                }
    
            } catch (IOException e) {
                e.printStackTrace();
            }
            return fileNameList;
        }
    
        private static void mergeFile(List<String> fileNameList) {
            Map<BufferedReader, String> map = new HashMap<>();
            String preStr = null;
            try (FileWriter writer = new FileWriter(SORT_FILE_NAME)) {
                for (String fileName : fileNameList) {
                    BufferedReader tmpReader = new BufferedReader(new FileReader(fileName));
                    map.put(tmpReader, tmpReader.readLine());
                }
                while (true) {
                    boolean canRead = false;
                    Map.Entry<BufferedReader, String> minEntry = null;
                    for (Map.Entry<BufferedReader, String> entry : map.entrySet()) {
                        String value = entry.getValue();
                        if (value == null) {
                            continue;
                        }
                        // 获取当前 reader 内容最小 entry
                        if ((minEntry == null) || (Integer.valueOf(value) < Integer.valueOf(minEntry.getValue()))) {
                            minEntry = entry;
                        }
                        canRead = true;
                    }
                    // 当且仅当所有 reader 内容为空时,跳出循环
                    if (!canRead) {
                        break;
                    }
                    //去重
                    if (preStr != null && preStr.equals(minEntry.getValue())) {
                        minEntry.setValue(minEntry.getKey().readLine());
                        continue;
                    }
                    preStr = minEntry.getValue();
                    writer.write(minEntry.getValue() + "\r\n");
                    minEntry.setValue(minEntry.getKey().readLine());
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                // 注意关闭分片文件输入流
                for (BufferedReader reader : map.keySet()) {
                    try {
                        reader.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    
        public static void main(String[] args) throws IOException {
            List<String> separateFiles = separateFile();
            mergeFile(separateFiles);
        }
    }


    查看全部
  • mybatis做对象关系映射
    查看全部
  • 数据库连接池配置

    查看全部
  • mybatis 连表查询

    查看全部

举报

0/150
提交
取消
课程须知
《Java高并发秒杀API》是系列课程,共四门课,分别为业务分析和DAO层,Service层,Web层和高并发优化。本门课程是第一门课程,学习前需要了解如下知识: 1、精通JavaWeb基础 2、熟悉SpringMVC、Spring和MyBatis框架
老师告诉你能学到什么?
1、掌握秒杀业务 2、能够进行SpringMVC+Spring+MyBatis的整合开发 3、能够进行秒杀业务DAO层的设计与实现

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!