poi带表头多sheet导出
导出工具类
package com.hieasy.comm.core.excel;import com.hieasy.comm.core.excel.fragment.ExcelFragment;
import com.hieasy.comm.core.utils.mine.MineDateUtil;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;import java.lang.reflect.Field;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class CsExcelUtils<T> {HSSFRow row=null;//行HSSFCell cell=null;//单元格CellStyle style =null;//单元格样式Class<T> clazz;public CsExcelUtils(Class<T> clazz) {super();this.clazz = clazz;}/*同表头多sheet导出*/public void myExcelExportClassList(String fileName, String sheetName, String[][] excelHeader, Class clazz, List<T> list, HSSFWorkbook workbook) throws Exception{HSSFSheet sheet = workbook.createSheet(sheetName); // 为excel创建一个sheet页Integer rowIndex=0; //行号List<Field> fields = ExcelFragment.fltMappedFileds(ExcelFragment.getMappedFiled(clazz, null),1);Integer maxcols=fields.size()>excelHeader[0].length?fields.size():excelHeader[0].length; //列号//导出Excel时间:2018-12-27HSSFRow row = sheet.createRow(rowIndex++);sheet.addMergedRegion(new CellRangeAddress(0,0,0,maxcols-1));HSSFCell cell = row.createCell(0);cell.setCellValue("导出Excel时间:"+ MineDateUtil.getNowDateTime());CellStyle cellStyle=getTitle1CellStyler(workbook);cell.setCellStyle(cellStyle); // 为B2单元格添加样式//大标题row = sheet.createRow(rowIndex++);row.setHeight((short) (25*20));sheet.addMergedRegion(new CellRangeAddress(1,1,0,maxcols-1));cell = row.createCell(0);cell.setCellValue(fileName);cellStyle=getTitle2CellStyler(workbook);cell.setCellStyle(cellStyle);//Excel 头部占位Integer eHBeginRowIndex=rowIndex; //记录Excel头开始行rowIndex+=excelHeader.length; //留空Excel头//Table 表头数据Integer chRowIndex= writeExcelHeader(maxcols,eHBeginRowIndex,excelHeader, sheet, workbook);//Table BODY的数据writeTableBodyOrFooterFromTList(list, chRowIndex,fields,sheet,workbook);}private Integer writeTableBodyOrFooterFromTList(List<T> list, Integer rowIndex,List<java.lang.reflect.Field> fields, HSSFSheet sheet, HSSFWorkbook workbook) throws NoSuchFieldException, SecurityException {//正式的数据row=sheet.createRow(rowIndex);autoColumnWidthForChineseChar(sheet,0,fields.size());for (int i = 0; i < fields.size(); i++) {java.lang.reflect.Field field = fields.get(i);ExcelVOAttribute attr = field.getAnnotation(ExcelVOAttribute.class);int col = getExcelCol(attr.column());// 获得列号cell = row.createCell(col);// 创建列cell.setCellType(Cell.CELL_TYPE_STRING);// 设置列中写入内容为String类型cell.setCellValue(attr.name());style = getHeadCellStyler(workbook);// 如果设置了提示信息则鼠标放上去提示.if (!attr.prompt().trim().equals("")) {setSXSSFPrompt(sheet, "", attr.prompt(), 3, 100, col, col);// 这里默认设了2-101列提示.}// 如果设置了combo属性则本列只能选择不能输入if (attr.combo().length > 0) {setSXSSFValidation(sheet, attr.combo(), 3, 100, col, col);// 这里默认设了2-101列只能选择不能输入.}cell.setCellStyle(style);}rowIndex++;//4.设置具体内容int startNo = 0;int z = rowIndex;int endNo = list.size();// 写入各条记录,每条记录对应excel表中的一行for (int i = startNo; i < endNo; i++) {row =sheet.createRow(i + z);T vo = (T) list.get(i); // 得到导出对象.for (int j = 0; j < fields.size(); j++) {java.lang.reflect.Field field = fields.get(j);// 获得field.field.setAccessible(true);// 设置实体类私有属性可访问ExcelVOAttribute attr = field.getAnnotation(ExcelVOAttribute.class);try {// 根据ExcelVOAttribute中设置情况决定是否导出,有些情况需要保持为空,希望用户填写这一列.if (attr.isExport()) {cell = row.createCell(getExcelCol(attr.column()));// 创建cell// 取得类型,并根据对象类型设置值.Class<?> fieldType = field.getType();if (String.class == fieldType) {cell.setCellType(Cell.CELL_TYPE_STRING);cell.setCellValue(field.get(vo) == null ? "" : String.valueOf(field.get(vo)));// 如果数据存在就填入,不存在填入空格.} else if ((Integer.TYPE == fieldType) || (Integer.class == fieldType)) {cell.setCellType(Cell.CELL_TYPE_NUMERIC);cell.setCellValue(field.get(vo) == null ? 0 : Integer.parseInt(field.get(vo).toString()));} else if ((Long.TYPE == fieldType) || (Long.class == fieldType)) {cell.setCellType(Cell.CELL_TYPE_NUMERIC);cell.setCellValue(field.get(vo) == null ? 0 : Long.parseLong(field.get(vo).toString()));} else if ((Float.TYPE == fieldType) || (Float.class == fieldType)) {cell.setCellType(Cell.CELL_TYPE_NUMERIC);cell.setCellValue(field.get(vo) == null ? 0 : Double.parseDouble(field.get(vo).toString()));} else if ((Short.TYPE == fieldType) || (Short.class == fieldType)) {} else if ((Double.TYPE == fieldType) || (Double.class == fieldType)) {cell.setCellType(Cell.CELL_TYPE_NUMERIC);cell.setCellValue(field.get(vo) == null ? 0 : Double.parseDouble(field.get(vo).toString()));} else if (Character.TYPE == fieldType) {}}} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}}rowIndex++;}return rowIndex;}private static Integer writeExcelHeader(int maxcols, Integer eHBeginRowIndex, String[][] excelHeader, Sheet sheet, HSSFWorkbook workbook) {for (String[] hrows : excelHeader) {/*CellRangeAddress region =new CellRangeAddress(eHBeginRowIndex,eHBeginRowIndex,0,maxcols-1);sheet.addMergedRegion(region);*/Row row = sheet.createRow(eHBeginRowIndex);row.setHeight((short) (25 * 20));int cellIndex = 0;for (int i = 0; i < maxcols; i++) {Cell cell = row.createCell(i);cell.setCellStyle(getExcelHeadCellStyler(workbook));if ((!sheet.isColumnHidden(i)) && cellIndex < hrows.length) {cell.setCellValue(hrows[cellIndex++]);}}autoColumnWidthForChineseChar(sheet,0,maxcols);eHBeginRowIndex++;}return eHBeginRowIndex;}//设置样式(导出时间)private static CellStyle getTitle1CellStyler(HSSFWorkbook workbook ){CellStyle style = workbook.createCellStyle();// 设置样式style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());style.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);style.setBorderBottom(XSSFCellStyle.NO_FILL);style.setBorderLeft(XSSFCellStyle.NO_FILL);style.setBorderRight(XSSFCellStyle.NO_FILL);style.setBorderTop(XSSFCellStyle.NO_FILL);style.setAlignment(XSSFCellStyle.ALIGN_LEFT);// 生成表头字体Font font = workbook.createFont();font.setColor(IndexedColors.BLACK.getIndex());font.setFontHeightInPoints((short) 10);//font.setFontName("微软雅黑");// 把字体应用到当前的样式style.setFont(font);return style;}//设置样式(导出标题)private static CellStyle getTitle2CellStyler(HSSFWorkbook workbook ){CellStyle style = workbook.createCellStyle();// 设置样式style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());style.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);style.setBorderBottom(XSSFCellStyle.NO_FILL);style.setBorderLeft(XSSFCellStyle.NO_FILL);style.setBorderRight(XSSFCellStyle.NO_FILL);style.setBorderTop(XSSFCellStyle.NO_FILL);style.setAlignment(XSSFCellStyle.ALIGN_CENTER);// 生成表头字体Font font = workbook.createFont();font.setColor(IndexedColors.BLACK.getIndex());font.setFontHeightInPoints((short) 20);font.setFontName("微软雅黑");font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);//font.setFontName("微软雅黑");// 把字体应用到当前的样式style.setFont(font);return style;}//设置样式(EXCEL表头)public static CellStyle getExcelHeadCellStyler(HSSFWorkbook workbook ){CellStyle style = workbook.createCellStyle();style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());style.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);style.setBorderBottom(XSSFCellStyle.NO_FILL);style.setBorderLeft(XSSFCellStyle.NO_FILL);style.setBorderRight(XSSFCellStyle.NO_FILL);style.setBorderTop(XSSFCellStyle.NO_FILL);// 生成表头字体Font font = workbook.createFont();font.setColor(IndexedColors.DARK_TEAL.getIndex());font.setFontHeightInPoints((short) 11);font.setFontName("微软雅黑");font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);style.setFont(font);return style;}//设置样式(表头)public static CellStyle getHeadCellStyler(HSSFWorkbook workbook ){CellStyle style = workbook.createCellStyle();style.setFillForegroundColor(IndexedColors.LIGHT_CORNFLOWER_BLUE.getIndex());style.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);style.setBorderBottom(XSSFCellStyle.BORDER_THIN);style.setBorderLeft(XSSFCellStyle.BORDER_THIN);style.setBorderRight(XSSFCellStyle.BORDER_THIN);style.setBorderTop(XSSFCellStyle.BORDER_THIN);style.setAlignment(XSSFCellStyle.ALIGN_CENTER);// 生成表头字体Font font = workbook.createFont();font.setColor(IndexedColors.DARK_BLUE.getIndex());font.setFontHeightInPoints((short) 10);font.setFontName("微软雅黑");font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);style.setFont(font);return style;}//将EXCEL中A,B,C,D,E列映射成0,1,2,3private static int getExcelCol(String col) {col = col.toUpperCase();// 从-1开始计算,字母重1开始运算。这种总数下来算数正好相同。int count = -1;char[] cs = col.toCharArray();for (int i = 0; i < cs.length; i++) {count += (cs[i] - 64) * Math.pow(26, cs.length - 1 - i);}return count;}// 设置单元格上提示private Sheet setSXSSFPrompt(Sheet sheet, String promptTitle, String promptContent, int firstRow, int endRow, int firstCol, int endCol) {// 构造constraint对象DVConstraint constraint = DVConstraint.createCustomFormulaConstraint("DD1");// 四个参数分别是:起始行、终止行、起始列、终止列CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);// 数据有效性对象DataValidation data_validation_view = new HSSFDataValidation(regions, constraint);data_validation_view.createPromptBox(promptTitle, promptContent);sheet.addValidationData(data_validation_view);return sheet;}//设置某些列的值只能输入预制的数据,显示下拉框.private Sheet setSXSSFValidation(Sheet sheet, String[] textlist, int firstRow, int endRow, int firstCol, int endCol) {// 加载下拉列表内容DVConstraint constraint = DVConstraint.createExplicitListConstraint(textlist);// 设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);// 数据有效性对象DataValidation data_validation_list = new HSSFDataValidation(regions, constraint);sheet.addValidationData(data_validation_list);return sheet;}/*** 自动调整列表宽度适应中文字符串* @param sheet* @param startColumnNum 要调整的起始列表号* @param size 要调整的列表数量*/private static void autoColumnWidthForChineseChar(Sheet sheet, int startColumnNum, int size) {for (int columnNum = 0; columnNum < size; columnNum++) {/** 调整每一列宽度 */sheet.autoSizeColumn(columnNum);/** 获取列宽 */final int columnWidth = sheet.getColumnWidth(columnNum);if(columnNum >= 256*256 ){/** 列宽已经超过最大列宽则放弃当前列遍历 */continue;}/** 新的列宽 */int newWidth = columnWidth;/** 遍历所有的行,查找有汉字的列计算新的最大列宽 */for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) {Row currentRow;if (sheet.getRow(rowNum) == null) {continue;} else {currentRow = sheet.getRow(rowNum);}if (currentRow.getCell(columnNum) != null) {Cell currentCell = currentRow.getCell(columnNum);if (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {String value = currentCell.getStringCellValue();/** 计算字符串中中文字符的数量 */int count = chineseCharCountOf(value);/**在该列字符长度的基础上加上汉字个数计算列宽 */int length = value.length()*256+count*256*2;/** 使用字符串的字节长度计算列宽 */
// int length = value.getBytes().length*256;if (newWidth < length && length < 256*256) {newWidth = length;}}}}if(newWidth != columnWidth){//设置列宽sheet.setColumnWidth(columnNum, newWidth);}}}/*** 计算字符串中中文字符的数量* 参见 <a hrft="https://www.cnblogs.com/straybirds/p/6392306.html">《汉字unicode编码范围》</a>* @param input* @return*/private static int chineseCharCountOf(String input){int count = 0;//汉字数量if(null != input){String regEx = "[\\u4e00-\\u9fa5]";Pattern p = Pattern.compile(regEx);Matcher m = p.matcher(input);int len = m.groupCount();//获取汉字个数while (m.find()) {for (int i = 0; i <= len; i++) {count = count + 1;}}}return count;}
}
导出实体主表类
public class Daochuzb {private String zbzd1;private String zbzd2;private String zbzd3;private String zbzd4;private String zbzd5;public String getZbzd1() {return zbzd1;}public void setZbzd1(String zbzd1) {this.zbzd1 = zbzd1;}public String getZbzd2() {return zbzd2;}public void setZbzd2(String zbzd2) {this.zbzd2 = zbzd2;}public String getZbzd3() {return zbzd3;}public void setZbzd3(String zbzd3) {this.zbzd3 = zbzd3;}public String getZbzd4() {return zbzd4;}public void setZbzd4(String zbzd4) {this.zbzd4 = zbzd4;}public String getZbzd5() {return zbzd5;}public void setZbzd5(String zbzd5) {this.zbzd5 = zbzd5;}
}
导出sheet1表
public class Daochusheet1 {@ExcelVOAttribute(name = "字段1",column="A")private String zd1;@ExcelVOAttribute(name = "字段2",column="B")private String zd2;@ExcelVOAttribute(name = "字段3",column="C")private String zd3;@ExcelVOAttribute(name = "字段4",column="D")private String zd4;public Daochusheet1() {}public Daochusheet1(String zd1, String zd2, String zd3, String zd4) {this.zd1 = zd1;this.zd2 = zd2;this.zd3 = zd3;this.zd4 = zd4;}public String getZd1() {return zd1;}public void setZd1(String zd1) {this.zd1 = zd1;}public String getZd2() {return zd2;}public void setZd2(String zd2) {this.zd2 = zd2;}public String getZd3() {return zd3;}public void setZd3(String zd3) {this.zd3 = zd3;}public String getZd4() {return zd4;}public void setZd4(String zd4) {this.zd4 = zd4;}
}
导出sheet2表
public class Daochusheet2 {@ExcelVOAttribute(name = "字段1",column="A")private String zd1;@ExcelVOAttribute(name = "字段2",column="B")private String zd2;@ExcelVOAttribute(name = "字段3",column="C")private String zd3;@ExcelVOAttribute(name = "字段4",column="D")private String zd4;@ExcelVOAttribute(name = "字段4",column="E")private String zd5;public Daochusheet2() {}public Daochusheet2(String zd1, String zd2, String zd3, String zd4, String zd5) {this.zd1 = zd1;this.zd2 = zd2;this.zd3 = zd3;this.zd4 = zd4;this.zd5 = zd5;}public String getZd1() {return zd1;}public void setZd1(String zd1) {this.zd1 = zd1;}public String getZd2() {return zd2;}public void setZd2(String zd2) {this.zd2 = zd2;}public String getZd3() {return zd3;}public void setZd3(String zd3) {this.zd3 = zd3;}public String getZd4() {return zd4;}public void setZd4(String zd4) {this.zd4 = zd4;}public String getZd5() {return zd5;}public void setZd5(String zd5) {this.zd5 = zd5;}
}
导出
@NoRepeatSubmit@PostMapping("/exportcs")@ApiOperation(value = "导出测试", notes = "")public void exportcs(HttpServletResponse response) throws Exception {response.setContentType("application/octet-stream");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(" 导出测试.xls","UTF-8"));HSSFWorkbook workbook = new HSSFWorkbook(); // 创建一个excelString[][] excelHeader=new String[2][3];excelHeader[0][0]="主表字段1";excelHeader[0][1]="主表字段2";excelHeader[0][2]="主表字段3";excelHeader[1][0]="主表字段4";excelHeader[1][1]="主表字段5";excelHeader[1][2]="";List<Daochusheet1> list1=new ArrayList<>();Daochusheet1 daochusheet1=new Daochusheet1("sheet11","sheet12","sheet13","sheet14");list1.add(daochusheet1);List<Daochusheet2> list2=new ArrayList<>();Daochusheet2 daochusheet2=new Daochusheet2("sheet21","sheet22","sheet23","sheet24","sheet25");list2.add(daochusheet2);CsExcelUtils<Daochusheet1> myExcelUtils=new CsExcelUtils(Daochusheet1.class);myExcelUtils.myExcelExportClassList("导出sheet1","导出sheet1",excelHeader,Daochusheet1.class,list1,workbook);CsExcelUtils<Daochusheet2> myExcelUtils1=new CsExcelUtils(Daochusheet2.class);myExcelUtils1.myExcelExportClassList("导出sheet2","导出sheet2",excelHeader,Daochusheet2.class, list2,workbook);FileOutputStream fos =null;//输出流try {fos = new FileOutputStream("D:\\导出测试.xls");workbook.write(fos);fos.flush();} catch (IOException e) {e.printStackTrace();} finally {try {fos.close();} catch (IOException e) {e.printStackTrace();}}}
导出结果

相关文章:
poi带表头多sheet导出
导出工具类 package com.hieasy.comm.core.excel;import com.hieasy.comm.core.excel.fragment.ExcelFragment; import com.hieasy.comm.core.utils.mine.MineDateUtil; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.*; import org.apache.po…...
RedisDesktopManager(redis客户端,可输入用户名密码)
RedisDesktopManager(redis客户端,可输入用户名密码) Redis桌面管理器(又名RDM) - 是一个用于Windows,Linux和MacOS的快速开源Redis数据库管理应用程序。可以使用url连接或账号密码。 redis设置账号密码后…...
【Adobe After Effects】关于ae点击空格不会播放反而回退一帧的解决方案
最近玩ae的时候遇见了一个小问题,就是有时候敲空格,视频没办法播放,反而会回退一帧,经过摸索发现了一个解决办法: 点击编辑---首选项 然后选择“音频硬件” 然后选择正确的默认输出,点击确定即可...
Linux网络编程:多路I/O转接服务器(select poll epoll)
文章目录: 一:select 1.基础API select函数 思路分析 select优缺点 2.server.c 3.client.c 二:poll 1.基础API poll函数 poll优缺点 read函数返回值 突破1024 文件描述符限制 2.server.c 3.client.c 三:epoll …...
Mybatis系列原理剖析之项目实战:自定义持久层框架
Mybatis系列原理剖析之:项目实战:自定义持久层框架 持久层是JAVA EE三层体系架构中,与数据库进行交互的一层,持久层往往被称为dao层。需要说明的是,持久层的技术选型有很多,绝不仅仅只有mybatis一种。像早…...
阿里云 Serverless 应用引擎 2.0,正式公测!
阿里云 Serverless 应用引擎 SAE2.0 正式公测上线!全面升级后的 SAE2.0 具备极简体验、标准开放、极致弹性三大优势,应用冷启动全面提效,秒级完成创建发布应用,应用成本下降 40% 以上。 此外,阿里云还带来容器服务 Se…...
西北大学计算机考研844高分经验分享
西北大学计算机考研844经验分享 个人介绍 本人是西北大学22级软件工程研究生,考研专业课129分,过去一年里在各大辅导机构任职,辅导考研学生专业课844,辅导总时长达288小时,帮助多名学生专业课高分上岸。 前情回顾…...
【java并发编程的艺术读书笔记】volatile关键字介绍、与synchronized的区别
volatile的简介 volatile是轻量级锁,只用来修饰变量,保证这个变量在多线程下的可见性以及一致性(一个volatile变量被线程修改时会立刻通知其他所有线程),防止指令重排序,但是并不能保证绝对的线程安全 vol…...
LinkedList的顶级理解
目录 1.LinkedList的介绍 LinkedList的结构 2.LinkedList的模拟实现 2.1创建双链表 2.2头插法 2.3尾插法 2.4任意位置插入 2.5查找关键字 2.6链表长度 2.7遍历链表 2.8删除第一次出现关键字为key的节点 2.9删除所有值为key的节点 2.10清空链表 2.11完整代码 3.…...
再学http-为什么文件上传要转成Base64?
1 前言 最近在开发中遇到文件上传采用Base64的方式上传,记得以前刚开始学http上传文件的时候,都是通过content-type为multipart/form-data方式直接上传二进制文件,我们知道都通过网络传输最终只能传输二进制流,所以毫无疑问他们本…...
使用oracleVM搭建虚拟机
选择新建,点击 取名字,选择你的安装路径,选择你爹镜像光盘,再勾选下面的,表示跳过一些步骤 其他的都可以默认,下一步即可 创建好了,点击设置,改变光驱,硬盘的顺序 等待它…...
深入探讨C存储类和存储期——Storage Duration
🔗 《C语言趣味教程》👈 猛戳订阅!!! —— 热门专栏《维生素C语言》的重制版 —— 💭 写在前面:这是一套 C 语言趣味教学专栏,目前正在火热连载中,欢迎猛戳订阅&#…...
医学图像融合的深度学习方法综述
文章目录 Deep learning methods for medical image fusion: A review摘要引言非端到端的融合方法基于深度学习的决策映射基于深度学习的特征提取 端到端图像融合方法基于卷积神经网络(CNN)的图像融合方法单级特征融合方法多级特征融合基于残差神经网络的图像融合方法基于密集神…...
【Qt学习】04:QDialog
QDialog OVERVIEW QDialog一、自定义对话框1.模态对话框2.非模态对话框3.练习代码 二、标准对话框1.消息对话框2.文件对话框3.颜色对话框4.字体对话框 对话框是 GUI 程序中不可或缺的组成部分,对话框通常会是一个顶层窗口出现在程序最上层,用于实现短期任…...
如何更好的进行异常处理
背景 在实际开发中,我们都希望程序可以一直按照期望的流程,无误的走下去。但是由于不可避免的内外部因素,可能导致出现异常的情况,轻则导致报错,重则数据错乱、服务不可用等情况。严重影响系统的稳定性,甚至…...
若依微服务版部署到IDEA
1.进入若依官网,找到我们要下的微服务版框架 2.点击进入gitee,获取源码,下载到本地 3.下载到本地后,用Idea打开,点击若依官网,找到在线文档,找到微服务版本的,当然你不看文档,直接按…...
Elasticsearch 入门安装
1.Elasticsearch 是什么 The Elastic Stack, 包括 Elasticsearch、 Kibana、 Beats 和 Logstash(也称为 ELK Stack)。能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。 Elaticsearch,简称为…...
【80天学习完《深入理解计算机系统》】第十一天 3.5 过程(函数调用)
专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录) 文章字体风格: 红色文字表示&#…...
LinuxUbuntu安装VMware tools Segmentation fault (core dumped)怎么解决
LinuxUbuntu安装VMware tools Segmentation fault (core dumped)怎么解决 在安装VMware Tools时遇到"Segmentation fault (core dumped)"错误,通常是由于兼容性问题或系统配置不正确导致的。以下是一些可能的解决方法: 检查VMware Tools兼容性…...
002微信小程序云开发API数据库-迁移状态查询/更新索引
文章目录 微信小程序云开发API数据库-迁移状态查询案例代码微信小程序云开发API数据库-更新索引案例代码 微信小程序云开发API数据库-迁移状态查询 在微信小程序中,云开发API数据库是一种方便快捷的数据库解决方案。但是,有时候我们可能需要将云开发数据…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
WEB3全栈开发——面试专业技能点P4数据库
一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库,基于 mysql 库改进而来,具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点: 支持 Promise / async-await…...
