java 热门问题讨论及解决方案,比如支付,单点登录,大批量excle导入,分布式事务等,大家都来讨论下呗,或者自己遇到的经典问题,最后都是怎么解决的

java 热门问题讨论及解决方案,比如支付,单点登录,大批量excle导入,分布式事务等,大家都来讨论下呗,或者自己遇到的经典问题,最后都是怎么解决的

热门Java问题及解决方案:

  1. 支付:
    常用的支付方式有支付宝支付、微信支付等。一般流程是:
  1. 用户在前端选择支付方式,发起支付请求
  2. 后端接收请求,调用相应的支付SDK,获取支付链接或者支付二维码
  3. 用户扫码支付或者支付链接支付
  4. 支付成功后,支付方会调用开发者设置的回调URL,发送支付成功通知
  5. 后端接收回调,进行业务处理,确认支付并更新订单状态等
  1. 单点登录:
    常用的单点登录方案有OAUTH、JWT等。一般流程是:
  1. 用户在系统A登录,获取token
  2. 进入系统B,带上token
  3. 系统B校验token的合法性和有效性,如果校验通过,直接登录系统B,实现单点登录
  1. 大批量Excel导入:
    一般用Apache POI进行Excel解析和导入
  1. 读取Excel,获取Sheet和行数
  2. 遍历每行,获取各个单元格的数据
  3. 进行数据校验和处理,组装成需要的对象或数据结构
  4. 批量插入数据库
  1. 分布式事务:
    常用的分布式事务解决方案有2PC、3PC、TCC、XA等。
    基本原理是通过 compensating transactions 或者 两阶段提交的方式保证所有分布式节点的数据一致性。
    以上就是几个Java热门问题的讨论和解决思路。大家可以结合自己遇到的问题,提供更为详细的方案和解决思路。
  • 这篇博客: JAVA对excle创建、读取、设置单元格颜色、背景色、跨行跨列中的 读取 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • package com.example.test;
    
    import org.apache.http.entity.ContentType;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.*;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import org.springframework.mock.web.MockMultipartFile;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    
    public class ExcelReadTest {
        /**
         *根据文件路径得到MultipartFile
         * @param url
         * @return
         * @throws IOException
         */
        public MultipartFile fileToMultipartFile(String url) throws IOException {
            File file = new File(url);
            FileInputStream fileInputStream = new FileInputStream(file);
            MultipartFile multipartFile = new MockMultipartFile(file.getName(), file.getName(),
                    ContentType.APPLICATION_OCTET_STREAM.toString(), fileInputStream);
            return multipartFile;
        }
    
        /**
         * 将文件转化为可操作的类型
         * @param multipartFile
         * @return
         * @throws IOException
         */
        public Workbook getWorkFile(MultipartFile multipartFile) throws IOException {
            Workbook workbook = null;
            //获取文件的类型
            String type = multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().lastIndexOf(".")+1);
            //获取文件字节输入流
            InputStream in = multipartFile.getInputStream();
            if ("xls".equals(type)) {
                workbook = new HSSFWorkbook(in);
            } else if ("xlsx".equals(type)) {
                workbook = new XSSFWorkbook(in);
            }
            return workbook;
        }
    
        /**
         * 遍历读取excel的每一个单元格
         * @param workbook
         */
        public void readFile(Workbook workbook) {
            //遍历sheet
            for (int numSheet = 0; numSheet < workbook.getNumberOfSheets(); numSheet++) {
                //得到单个sheet
                Sheet sheet = workbook.getSheetAt(numSheet);
                if (sheet == null) {
                    continue;
                }
                //得到单个sheet的行数
                int rowCount = sheet.getLastRowNum();
                //从第二行开始,遍历Sheet的每一行(第一行一般是标题,所以不遍历)
                for (int rowNum = 1; rowNum <= rowCount; rowNum++) {
                    try {
                        //得到单行数据
                        Row row = sheet.getRow(rowNum);
                        if (row != null) {
                            int cellCount = row.getLastCellNum();
                            for (int cellNum = 0;cellNum<cellCount;cellNum++){
                                Cell cell = row.getCell(cellNum);
                                String cellValue = "";
                                if (cell!=null){
    //                                cell.setCellType(CellType.STRING);//提前设置String类型,防止数字后加.0
    //                                cellValue = cell.getStringCellValue();
                                    //如果上面的setCellType(CellType.STRING)过期,可以先将Cell转化为CellBase,然后再定义类型
                                    CellBase cellBase = (CellBase) cell;
                                    //设置单元格数据类型
                                    cellBase.setCellType(CellType.STRING);
                                    //此处得到每一个单元格的值
                                    cellValue = cellBase.getStringCellValue();
                                    System.out.print("cellValue:" + cellValue+";");
                                }
                            }
                            System.out.println();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        public void excelUtil(String url) throws IOException {
            MultipartFile multipartFile = fileToMultipartFile(url);
            Workbook workbook = getWorkFile(multipartFile);
            readFile(workbook);
        }
    
        public static void main(String[] args) throws IOException {
            String file = "G:\\IDEAWorkspeace\\test\\excle\\src\\main\\resources\\excel\\试点团队配置模板.xls";
            ExcelReadTest test = new ExcelReadTest();
            test.excelUtil(file);
        }
    }