https://github.com/yoyo185644/seckill/tree/master
四门课的顺序
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); } }
Q1.为什么使用这三个框架
课程内容
1、SpringMVC + Spring + Myatiis使用与整合
2、秒杀类系统需求理解和实现
3、常用技术解决高并发问题
SpringMVC+Spring+MyBatis
框架易于使用和轻量级、低代码侵入性、成熟的社区和用户群
秒杀业务场景
为什么要使用Spring+SpringMVC+Mybaits框架?
许多大型企业为什么选择使用ssm框架?
使用技术:JavaWeb+SpringMVC+Spring+Mybatis
应用处理:高并发操作与事务控制