首页
归档
留言
友链
广告合作
壁纸
更多
美女主播
Search
1
博瑞GE车机升级/降级
5,608 阅读
2
Mac打印机设置黑白打印
4,937 阅读
3
修改elementUI中el-table树形结构图标
4,894 阅读
4
Mac客户端添加腾讯企业邮箱方法
4,672 阅读
5
intelliJ Idea 2022.2.X破解
4,354 阅读
后端开发
HarmonyOS Next
Web前端
微信开发
开发辅助
App开发
数据库
随笔日记
登录
/
注册
Search
标签搜索
Spring Boot
Java
Vue
Spring Cloud
Mac
MyBatis
WordPress
MacOS
asp.net
Element UI
Nacos
.Net
Spring Cloud Alibaba
MySQL
Mybatis-Plus
Typecho
jQuery
Java Script
IntelliJ IDEA
微信小程序
Laughing
累计撰写
627
篇文章
累计收到
1,421
条评论
首页
栏目
后端开发
HarmonyOS Next
Web前端
微信开发
开发辅助
App开发
数据库
随笔日记
页面
归档
留言
友链
广告合作
壁纸
美女主播
搜索到
627
篇与
的结果
2021-06-26
vue使用xlsx修改样式导出excel
安装依赖npm install --save xlsx npm install --save xlsx-style //如果需要修改样式,则需要安装解决引入xlsx-style报错问题找到:node_modules\xlsx-style\dist\xlsx.full.min.js 并把这个js文件拷贝到static文件夹下再index.html中引入 新建downExcel.js文件import XLSX from "xlsx" // 配置 const wopts = { bookType: "xlsx", bookSST: true, type: "binary", cellStyles: true }; function downloadExl(json, config, type) { var tmpdata = json[0]; json.unshift({}); var keyMap = []; //获取keys for (var k in tmpdata) { keyMap.push(k); json[0][k] = k; } var tmpdata = []; //用来保存转换好的json let border = { bottom: { style: "thin", color: { rgb: "000000" } }, top: { style: "thin", color: { rgb: "000000" } }, left: { style: "thin", color: { rgb: "000000" } }, right: { style: "thin", color: { rgb: "000000" } } }; let style0 = { border: border, alignment: { horizontal: "center", wrapText: true, vertical: "center" }, font: { sz: 18, bold: true, color: { rgb: "000000" }, outline: true }, fill: { bgColor: { indexed: 64 } } }; let style1 = { border: border, alignment: { horizontal: "center", wrapText: true, vertical: "center" }, font: { sz: 12, bold: true, color: { rgb: "000000" }, outline: true }, fill: { bgColor: { indexed: 64 } } }; json .map((v, i) => keyMap.map((k, j) => Object.assign({}, { v: v[k], position: (j > 25 ? getCharCol(j) : String.fromCharCode(65 + j)) + (i + 1) }) ) ) .reduce((prev, next) => prev.concat(next)) .forEach((v, i) => { // 在遍历时修改样式 let s = { font: { sz: 10, name: "微软雅黑" }, alignment: { horizontal: "center", wrapText: true, vertical: "center" } }; // 判断是否是标题 if (config._this.title.includes(v.v) && v.position.length == 2 && v.position[1] == "1") { s.fill = { fgColor: { rgb: "008000" } }; s.border = { right: { style: "thin", color: { rgb: "000000" } } }; // 判断是否是需要红色字体的标题字段 if (config._this.redTitle.includes(v.v)) { s.font.color = { rgb: "ff0000" }; } } tmpdata[v.position] = { v: v.v || "", s }; }); var outputPos = Object.keys(tmpdata); //设置区域,比如表格从A1到D10 //设置每列对应的宽度 tmpdata["!margins"] = [{ //工作表单元格合并配置项 可选 s: { //s start 开始 c: 0, //cols 开始列 r: 0 //rows 开始行 }, //开始 A1 e: { //e end 结束 c: 4, //cols 结束列 r: 0 //rows 结束行 } }, { s: { c: 0, r: 1 }, //开始 A2 e: { c: 1, r: 1 } //结束B2 }, { s: { c: 2, r: 1 }, //开始 C2 e: { c: 3, r: 1 } //结束D2 }, ] // !cols工作表列宽配置项 可选 tmpdata["!cols"] = config.colwidth; // 第一二行样式 tmpdata["A1"].s = style0; tmpdata["A2"].s = style1; tmpdata["C2"].s = style0; var tmpWB = { SheetNames: ["mySheet"], //工作表名数组 Sheets: { mySheet: Object.assign({}, tmpdata, //!ref设置工作表的范围 如 必须 否则不显示 { "!ref": outputPos[0] + ":" + outputPos[outputPos.length - 1] //设置填充区域 } ) } }; const tmpDown = new Blob( [ s2ab( XLSX.write( tmpWB, { bookType: type == undefined ? "xlsx" : type, bookSST: false, type: "binary" } //这里的数据是用来定义导出的格式类型 ) ) ], { type: "" } ); // 数据处理完后传入下载 saveAs( tmpDown, config._this.fileName + "." + (wopts.bookType == "biff2" ? "xls" : wopts.bookType) ); } // 获取26个英文字母用来表示excel的列 function getCharCol(n) { let temCol = "", s = "", m = 0; while (n > 0) { m = (n % 26) + 1; s = String.fromCharCode(m + 64) + s; n = (n - m) / 26; } return s; } function s2ab(s) { if (typeof ArrayBuffer !== "undefined") { var buf = new ArrayBuffer(s.length); var view = new Uint8Array(buf); for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xff; return buf; } else { var buf = new Array(s.length); for (var i = 0; i != s.length; ++i) buf[i] = s.charCodeAt(i) & 0xff; return buf; } } // 下载功能 function saveAs(obj, fileName) { var tmpa = document.createElement("a"); tmpa.download = fileName || "未命名"; // 兼容ie 火狐 下载文件 if ("msSaveOrOpenBlob" in navigator) { window.navigator.msSaveOrOpenBlob(obj, fileName); } else if (window.navigator.userAgent.includes("Firefox")) { var a = document.createElement("a"); a.href = URL.createObjectURL(obj); a.download = fileName; document.body.appendChild(a); a.click(); } else { tmpa.href = URL.createObjectURL(obj); } tmpa.click(); setTimeout(function () { URL.revokeObjectURL(obj); }, 100); } export default downloadExl;使用import downloadfn from "@/config/downExcel data(){ return{ fileName:"testExcel", xmindJSON: [ { Code: 1, Name: "里斯", GBPerfix: "ABC-F", stop: "测试" }, { Code: 2, Name: "里斯1", GBPerfix: "ABC-B", stop: "测试1" }, { Code: 3, Name: "里斯2", GBPerfix: "ABC-D", stop: "测试1" } ], config: { colwidth: [ { wpx: 169 }, { wpx: 63 }, { wpx: 203 }, { wpx: 128 }, ], _this: this }, title: ["功能模块与路径", "用例编号", "前置条件"] } }methods:{ export() { downloadfn(this.xmindJSON, this.config); } }
2021年06月26日
1,878 阅读
0 评论
0 点赞
2021-06-25
Spring Boot国际化
Spring Boot国际化虽然在目前项目上用的比较少,但是总归是要学习一ha(四声)的。添加Resource Bundle首先在resources文件夹下创建i18n文件夹,然后右键i18n创建Resource Bundle添加配置文件添加三个配置文件,分别是login.properties、login_en_US.properties、login_zh_CN.properties,分别对应默认的国际化配置、英文配置、中文配置。login.properties是默认的国际化配置文件,如果找不到国际化信息时,默认会读取login.properties的配置信息。这里为了演示,我只添加了一条信息,即login.password。login.propertieslogin.password=请输入密码login_en_US.propertieslogin.password=please input passwordlogin_zh_CN.propertieslogin.password=请输入密码温馨提示 批量选择配置文件后,右键点击,选择Combine to Resource Bundle,可以批量编辑国际化配置文件修改配置文件修改application.properties,配置国际化文件spring.messages.basename=i18n.login修改加载国际化配置国际化支持,我们默认通过前端传递的lang(放到header),读取对应的国际化信息。@Component public class MyLocaleResolverConfig implements LocaleResolver { private static final String PATH_PARAMETER = "lang"; private static final String PATH_PARAMETER_SPLIT = "_"; @Override public Locale resolveLocale(HttpServletRequest httpServletRequest) { String lang = httpServletRequest.getHeader(PATH_PARAMETER); Locale locale = httpServletRequest.getLocale(); if (!StringUtils.isEmpty(lang)) { String[] split = lang.split(PATH_PARAMETER_SPLIT); locale = new Locale(split[0], split[1]); } return locale; } @Override public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) { } @Bean public LocaleResolver localeResolver() { return new MyLocaleResolverConfig(); } }增加读取配置文件工具增加MessageUtils.java,用于读取国际化配置信息@Component public class MessageUtils { @Resource private MessageSource messageSource; private static MessageSource staticMessageSource; @PostConstruct public void init() { MessageUtils.staticMessageSource = messageSource; } /** * 获取消息 * @param messageKey * @return */ public static String getMessage(String messageKey) { Locale locale = LocaleContextHolder.getLocale(); return staticMessageSource.getMessage(messageKey, null, locale); } }增加静态类增加配置文件key对应的静态类,方便读取配置文件。/** * Description: * * @author : laughing * DateTime: 2021-06-25 17:06 */ public class MessageKey { public static String LOGIN_PASSWORD="login.password"; }增加测试controller/** * Description: * * @author : laughing * DateTime: 2021-06-25 17:20 */ @RestController public class MessageController { @GetMapping("message") public String message(){ return MessageUtils.getMessage(MessageKey.LOGIN_PASSWORD); } }通过postman测试请求不带参数当我们不携带lang参数时,系统默认加载login.properties测试中文当我们测试中文时,lang参数携带zh_CN测试英文当我们测试中文时,lang参数携带en_US
2021年06月25日
1,155 阅读
0 评论
2 点赞
2021-06-22
windows 11 bug汇总
上周在个人主力电脑上安装了windows 11,上周基本没使用,这种蹭着体验的时间,针对windows 11 的bug进行一下汇总,方便安装的人了解一下详情。总体使用意见这个版本的windows 11不建议个人正式使用。bug我个人简单划分了两种:一种是影响使用的,另外一种是不影响使用的。影响使用的工具栏隐藏的图标无法点击三角符号显示可以看下面截图,点击没有任何反应,这个严重影响使用。华为电脑识别不到摄像头这个原因不明,我也安装驱动了,但是一直提示没有摄像头。搜索按钮无法搜索邮件点击邮件,提示要验证账户,但是账户出现一个黑框,接着闪退,无法验证。不影响使用的汉化不完整这个不算bug哈,只能说是目前这个版本不完美的地方。双屏开始菜单不居中显示这个问题如果不外接显示器没有问题,如果外界显示器,开始菜单有到左边了。如下图,其实我设置的是居中,不外接显示器也没有问题。部分App变成英文这个是因为系统默认的是英文的问题,即使装了汉化包有些应用也是显示英文,解决办法就是在应用设置界面自己改成中文的。搜狗拼音输入法字体显示不全DNF登录界面乱码DNF游戏,登录界面显示乱码。部分界面没有适配调整现在win11 界面都圆角化了,但是仍然有部分功能界面还是没有调整。
2021年06月22日
1,452 阅读
0 评论
0 点赞
2021-06-22
《深入理解Java虚拟机:JVM高级特性与最佳实践》Java经典书籍 PDF下载
{card-default label="介绍" width=""}作为一名Java开发工程师,怎么能对JVM不了解呢,《深入理解Java虚拟机:JVM高级特性与最佳实践》是一部经典的Java书籍,对JVM进行了详细的剖析,此书从核心理论和实际运用这两个角度去探讨java虚拟机,不仅理论分析得透彻,而且书中包含的典型案例和最佳实践也极具现实指导意义,适合所有java工程师、系统调优师和系统架构师阅读。{/card-default}下载地址{cloud title="" type="bd" url="http://pan.baidu.com/s/1mh5wQX6" password="5xkn"/}目录第一部分 走近Java 第1章 走近Java 1.1 概述 1.2 Java技术体系 1.3 Java发展史 1.4 Java虚拟机发展史 1.4.1 Sun Classic Exact VM 1.4.2 Sun HotSpot VM 1.4.3 Sun Mobile-Embedded VM Meta-Circular VM 1.4.4 BEA JRockit IBM J9 VM 1.4.5 Azul VM BEA Liquid VM 1.4.6 Apache Harmony GoogleAndroidDalvik VM 1.4.7 Microsoft JVM及其他 1.5 展望Java技术的未来 1.5.1 模块化 1.5.2 混合语言 1.5.3 多核并行 1.5.4 进一步丰富语法 1.5.5 64位虚拟机 1.6 实战:自己编译JDK 1.6.1 获取JDK源码 1.6.2 系统需求 1.6.3 构建编译环境 1.6.4 进行编译 1.6.5 在IDE工具中进行源码调试 1.7 本章小结 第二部分 自动内存管理机制 第2章 Java内存区域与内存溢出异常 2.1 概述 2.2 运行时数据区域 2.2.1 程序计数器 2.2.2 Java虚拟机栈 2.2.3 本地方法栈 2.2.4 Java堆 2.2.5 方法区 2.2.6 运行时常量池 2.2.7 直接内存 2.3 HotSpot虚拟机对象探秘 2.3.1 对象的创建 2.3.2 对象的内存布局 2.3.3 对象的访问定位 2.4 实战:OutOfMemoryError异常 2.4.1 Java堆溢出 2.4.2 虚拟机栈和本地方法栈溢出 2.4.3 方法区和运行时常量池溢出 2.4.4 本机直接内存溢出 2.5 本章小结 第3章 垃圾收集器与内存分配策略 3.1 概述 3.2 对象已死吗 3.2.1 引用计数算法 3.2.2 可达性分析算法 3.2.3 再谈引用 3.2.4 生存还是死亡 3.2.5 回收方法区 3.3 垃圾收集算法 3.3.1 标记-清除算法 3.3.2 复制算法 3.3.3 标记-整理算法 3.3.4 分代收集算法 3.4 HotSpot的算法实现 3.4.1 枚举根节点 3.4.2 安全点 3.4.3 安全区域 3.5 垃圾收集器 3.5.1 Serial收集器 3.5.2 ParNew收集器 3.5.3 Parallel Scavenge收集器 3.5.4 Serial Old收集器 3.5.5 Parallel Old收集器 3.5.6 CMS收集器 3.5.7 G1收集器 3.5.8 理解GC日志 3.5.9 垃圾收集器参数总结 3.6 内存分配与回收策略 3.6.1 对象优先在Eden分配 3.6.2 大对象直接进入老年代 3.6.3 长期存活的对象将进入老年代 3.6.4 动态对象年龄判定 3.6.5 空间分配担保 3.7 本章小结 第4章 虚拟机性能监控与故障处理工具 4.1 概述 4.2 JDK的命令行工具 4.2.1 jps:虚拟机进程状况工具 4.2.2 jstat:虚拟机统计信息监视工具 4.2.3 jinfo:Java配置信息工具 4.2.4 jmap:Java内存映像工具 4.2.5 jhat:虚拟机堆转储快照分析工具 4.2.6 jstack:Java堆栈跟踪工具 4.2.7 HSDIS:JIT生成代码反汇编 4.3 JDK的可视化工具 4.3.1 JConsole:Java监视与管理控制台 4.3.2 VisualVM:多合一故障处理工具 4.4 本章小结 第5章 调优案例分析与实战 5.1 概述 5.2 案例分析 5.2.1 高性能硬件上的程序部署策略 5.2.2 集群间同步导致的内存溢出 5.2.3 堆外内存导致的溢出错误 5.2.4 外部命令导致系统缓慢 5.2.5 服务器JVM进程崩溃 5.2.6 不恰当数据结构导致内存占用过大 5.2.7 由Windows虚拟内存导致的长时间停顿 5.3 实战:Eclipse运行速度调优 5.3.1 调优前的程序运行状态 5.3.2 升级JDK 1.6的性能变化及兼容问题 5.3.3 编译时间和类加载时间的优化 5.3.4 调整内存设置控制垃圾收集频率 5.3.5 选择收集器降低延迟 5.4 本章小结 第三部分 虚拟机执行子系统 第6章 类文件结构 6.1 概述 6.2 无关性的基石 6.3 Class类文件的结构 6.3.1 魔数与Class文件的版本 6.3.2 常量池 6.3.3 访问标志 6.3.4 类索引、父类索引与接口索引集合 6.3.5 字段表集合 6.3.6 方法表集合 6.3.7 属性表集合 6.4 字节码指令简介 6.4.1 字节码与数据类型 6.4.2 加载和存储指令 6.4.3 运算指令 6.4.4 类型转换指令 6.4.5 对象创建与访问指令 6.4.6 操作数栈管理指令 6.4.7 控制转移指令 6.4.8 方法调用和返回指令 6.4.9 异常处理指令 6.4.10 同步指令 6.5 公有设计和私有实现 6.6 Class文件结构的发展 6.7 本章小结 第7章 虚拟机类加载机制 7.1 概述 7.2 类加载的时机 7.3 类加载的过程 7.3.1 加载 7.3.2 验证 7.3.3 准备 7.3.4 解析 7.3.5 初始化 7.4 类加载器 7.4.1 类与类加载器 7.4.2 双亲委派模型 7.4.3 破坏双亲委派模型 7.5 本章小结 第8章 虚拟机字节码执行引擎 8.1 概述 8.2 运行时栈帧结构 8.2.1 局部变量表 8.2.2 操作数栈 8.2.3 动态连接 8.2.4 方法返回地址 8.2.5 附加信息 8.3 方法调用 8.3.1 解析 8.3.2 分派 8.3.3 动态类型语言支持 8.4 基于栈的字节码解释执行引擎 8.4.1 解释执行 8.4.2 基于栈的指令集与基于寄存器的指令集 8.4.3 基于栈的解释器执行过程 8.5 本章小结 第9章 类加载及执行子系统的案例与实战 9.1 概述 9.2 案例分析 9.2.1 Tomcat:正统的类加载器架构 9.2.2 OSGi:灵活的类加载器架构 9.2.3 字节码生成技术与动态代理的实现 9.2.4 Retrotranslator:跨越JDK版本 9.3 实战:自己动手实现远程执行功能 9.3.1 目标 9.3.2 思路 9.3.3 实现 9.3.4 验证 9.4 本章小结 第四部分 程序编译与代码优化 第10章 早期(编译期)优化 10.1 概述 10.2 Javac编译器 10.2.1 Javac的源码与调试 10.2.2 解析与填充符号表 10.2.3 注解处理器 10.2.4 语义分析与字节码生成 10.3 Java语法糖的味道 10.3.1 泛型与类型擦除 10.3.2 自动装箱、拆箱与遍历循环 10.3.3 条件编译 10.4 实战:插入式注解处理器 10.4.1 实战目标 10.4.2 代码实现 10.4.3 运行与测试 10.4.4 其他应用案例 10.5 本章小结 第11章 晚期(运行期)优化 11.1 概述 11.2 HotSpot虚拟机内的即时编译器 11.2.1 解释器与编译器 11.2.2 编译对象与触发条件 11.2.3 编译过程 11.2.4 查看及分析即时编译结果 11.3 编译优化技术 11.3.1 优化技术概览 11.3.2 公共子表达式消除 11.3.3 数组边界检查消除 11.3.4 方法内联 11.3.5 逃逸分析 11.4 Java与CC++的编译器对比 11.5 本章小结 第五部分 高效并发 第12章 Java内存模型与线程 12.1 概述 12.2 硬件的效率与一致性 12.3 Java内存模型 12.3.1 主内存与工作内存 12.3.2 内存间交互操作 12.3.3 对于volatile型变量的特殊规则 12.3.4 对于long和double型变量的特殊规则 12.3.5 原子性、可见性与有序性 12.3.6 先行发生原则 12.4 Java与线程 12.4.1 线程的实现 12.4.2 Java线程调度 12.4.3 状态转换 12.5 本章小结 第13章 线程安全与锁优化 13.1 概述 13.2 线程安全 13.2.1 Java语言中的线程安全 13.2.2 线程安全的实现方法 13.3 锁优化 13.3.1 自旋锁与自适应自旋 13.3.2 锁消除 13.3.3 锁粗化 13.3.4 轻量级锁 13.3.5 偏向锁 13.4 本章小结
2021年06月22日
1,032 阅读
0 评论
0 点赞
2021-06-22
《图灵程序设计丛书:Java程序员修炼之道》Java经典图书 PDF下载
{card-default label="介绍" width=""}《Java程序员修炼之道》是每个Java工程师都必看,也是必须掌握里面知识的图书,他从Java 7 的新特性到,到Java编程技术,再到JVM,最后跨平台和跨语言做了详细的剖析。适合有一定Java基础并决定提高自身能力的Java工程师学习。{/card-default}下载地址{cloud title="" type="bd" url="http://pan.baidu.com/s/1o8wL5UE" password="lne2"/}目录第一部分 用Java 7做开发第1章 初识Java 7 21.1 语言与平台 21.2 Coin项目:浓缩的都是精华 41.3 Coin项目中的修改 71.3.1 switch语句中的String 71.3.2 更强的数值文本表示法 81.3.3 改善后的异常处理 91.3.4 try-with-resources(TWR) 111.3.5 钻石语法 131.3.6 简化变参方法调用 141.4 小结 15第2章 新I/O 172.1 Java I/O简史 182.1.1 Java 1.0到1.3 192.1.2 在Java 1.4中引入的NIO 192.1.3 下一代I/O-NIO.2 202.2 文件I/O的基石:Path 202.2.1 创建一个Path 232.2.2 从Path中获取信息 232.2.3 移除冗余项 242.2.4 转换Path 252.2.5 NIO.2 Path和Java已有的File类 252.3 处理目录和目录树 262.3.1 在目录中查找文件 262.3.2 遍历目录树 272.4 NIO.2的文件系统I/O 282.4.1 创建和删除文件 292.4.2 文件的复制和移动 302.4.3 文件的属性 312.4.4 快速读写数据 342.4.5 文件修改通知 352.4.6 SeekableByteChannel 372.5 异步 I/O操作 372.5.1 将来式 382.5.2 回调式 402.6 Socket和Channel的整合 412.6.1 NetworkChannel 422.6.2 MulticastChannel 422.7 小结 43第二部分 关键技术第3章 依赖注入 463.1 知识注入:理解IoC和DI 463.1.1 控制反转 473.1.2 依赖注入 483.1.3 转成DI 493.2 Java中标准化的DI 533.2.1 @Inject注解 543.2.2 @Qualifier注解 553.2.3 @Named注解 573.2.4 @Scope注解 573.2.5 @Singleton注解 573.2.6 接口Provider<T> 583.3 Java中的DI参考实现:Guice 3 593.3.1 Guice新手指南 593.3.2 水手绳结:Guice的各种绑定 623.3.3 在Guice中限定注入对象的生命周期 643.4 小结 66第4章 现代并发 674.1 并发理论简介 684.1.1 解释Java线程模型 684.1.2 设计理念 694.1.3 这些原则如何以及为何会相互冲突 704.1.4 系统开销之源 714.1.5 一个事务处理的例子 714.2 块结构并发(Java 5之前) 724.2.1 同步与锁 734.2.2 线程的状态模型 744.2.3 完全同步对象 744.2.4 死锁 764.2.5 为什么是synchronized 774.2.6 关键字volatile 784.2.7 不可变性 794.3 现代并发应用程序的构件 804.3.1 原子类:java.util. concurrent.atomic 814.3.2 线程锁:java.util. concurrent.locks 814.3.3 CountDownLatch 854.3.4 ConcurrentHashMap 864.3.5 CopyOnWriteArrayList 874.3.6 Queue 904.4 控制执行 954.4.1 任务建模 964.4.2 ScheduledThread-PoolExecutor 974.5 分支/合并框架 984.5.1 一个简单的分支/合并例子 994.5.2 ForkJoinTask与工作窃取 1014.5.3 并行问题 1024.6 Java内存模型 1034.7 小结 104第5章 类文件与字节码 1065.1 类加载和类对象 1075.1.1 加载和连接概览 1075.1.2 验证 1085.1.3 Class对象 1085.1.4 类加载器 1095.1.5 示例:依赖注入中的类加载器 1105.2 使用方法句柄 1115.2.1 MethodHandle 1125.2.2 MethodType 1125.2.3 查找方法句柄 1135.2.4 示例:反射、代理与方法句柄 1145.2.5 为什么选择MethodHandle 1165.3 检查类文件 1175.3.1 介绍javap 1175.3.2 方法签名的内部形式 1185.3.3 常量池 1195.4 字节码 1215.4.1 示例:反编译类 1215.4.2 运行时环境 1235.4.3 操作码介绍 1245.4.4 加载和储存操作码 1255.4.5 数学运算操作码 1255.4.6 执行控制操作码 1265.4.7 调用操作码 1265.4.8 平台操作操作码 1275.4.9 操作码的快捷形式 1275.4.10 示例:字符串拼接 1275.5 invokedynamic 1295.5.1 invokedynamic如何工作 1295.5.2 示例:反编译invokedynamic调用 1305.6 小结 132第6章 理解性能调优 1336.1 性能术语 1346.1.1 等待时间 1356.1.2 吞吐量 1356.1.3 利用率 1356.1.4 效率 1356.1.5 容量 1366.1.6 扩展性 1366.1.7 退化 1366.2 务实的性能分析法 1366.2.1 知道你在测量什么 1376.2.2 知道怎么测量 1376.2.3 知道性能目标是什么 1386.2.4 知道什么时候停止优化 1396.2.5 知道高性能的成本 1396.2.6 知道过早优化的危险 1406.3 哪里出错了?我们担心的原因 1406.3.1 过去和未来的性能趋势:摩尔定律 1416.3.2 理解内存延迟层级 1426.3.3 为什么Java性能调优存在困难 1436.4 一个来自于硬件的时间问题 1446.4.1 硬件时钟 1446.4.2 麻烦的nanoTime() 1446.4.3 时间在性能调优中的作用 1466.4.4 案例研究:理解缓存未命中 1476.5 垃圾收集 1496.5.1 基本算法 1496.5.2 标记和清除 1506.5.3 jmap 1526.5.4 与GC相关的JVM参数 1556.5.5 读懂GC日志 1566.5.6 用VisualVM查看内存使用情况 1576.5.7 逸出分析 1596.5.8 并发标记清除 1606.5.9 新的收集器:G1 1616.6 HotSpot的JIT编译 1626.6.1 介绍HotSpot 1636.6.2 内联方法 1646.6.3 动态编译和独占调用 1656.6.4 读懂编译日志 1666.7 小结 167第三部分 JVM上的多语言编程第7章 备选JVM语言 1707.1 Java 太笨?纯粹诽谤 1707.1.1 整合系统 1717.1.2 函数式编程的基本原理 1727.1.3 映射与过滤器 1737.2 语言生态学 1747.2.1 解释型与编译型语言 1757.2.2 动态与静态类型 1757.2.3 命令式与函数式语言 1767.2.4 重新实现的语言与原生语言 1767.3 JVM上的多语言编程 1777.3.1 为什么要用非Java语言 1787.3.2 崭露头角的语言新星 1797.4 如何挑选称心的非Java语言 1807.4.1 低风险 1817.4.2 与Java的交互操作 1817.4.3 良好的工具和测试支持 1827.4.4 备选语言学习难度 1827.4.5 使用备选语言的开发者 1827.5 JVM对备选语言的支持 1837.5.1 非Java语言的运行时环境 1837.5.2 编译器小说 1847.6 小结 185第8章 Groovy:Java的动态伴侣 1878.1 Groovy入门 1898.1.1 编译和运行 1898.1.2 Groovy控制台 1908.2 Groovy 101:语法和语义 1918.2.1 默认导入 1928.2.2 数字处理 1928.2.3 变量、动态与静态类型、作用域 1938.2.4 列表和映射语法 1958.3 与Java的差异——新手陷阱 1968.3.1 可选的分号和返回语句 1968.3.2 可选的参数括号 1978.3.3 访问限定符 1978.3.4 异常处理 1988.3.5 Groovy中的相等 1988.3.6 内部类 1998.4 Java不具备的Groovy特性 1998.4.1 GroovyBean 1998.4.2 安全解引用操作符 2008.4.3 猫王操作符 2018.4.4 增强型字符串 2018.4.5 函数字面值 2028.4.6 内置的集合操作 2038.4.7 对正则表达式的内置支持 2048.4.8 简单的XML处理 2058.5 Groovy与Java的合作 2078.5.1 从Groovy调用Java 2078.5.2 从Java调用Groovy 2088.6 小结 211第9章 Scala:简约而不简单 2129.1 走马观花Scala 2139.1.1 简约的Scala 2139.1.2 match表达式 2159.1.3 case类 2179.1.4 actor 2189.2 Scala能用在我的项目中吗 2199.2.1 Scala和Java的比较 2199.2.2 何时以及如何开始使用Scala 2209.2.3 Scala可能不适合当前项目的迹象 2209.3 让代码因Scala重新绽放 2219.3.1 使用编译器和REPL 2219.3.2 类型推断 2229.3.3 方法 2239.3.4 导入 2249.3.5 循环和控制结构 2249.3.6 Scala的函数式编程 2259.4 Scala对象模型:相似但不同 2269.4.1 一切皆对象 2269.4.2 构造方法 2289.4.3 特质 2289.4.4 单例和伴生对象 2309.4.5 case类和match表达式 2329.4.6 警世寓言 2349.5 数据结构和集合 2359.5.1 List 2359.5.2 Map 2389.5.3 泛型 2399.6 actor介绍 2429.6.1 代码大舞台 2429.6.2 用mailbox跟actor通信 2439.7 小结 244第10章 Clojure:更安全地编程 24510.1 Clojure介绍 24510.1.1 Clojure的Hello World 24610.1.2 REPL入门 24710.1.3 犯了错误 24810.1.4 学着去爱括号 24810.2 寻找Clojure:语法和语义 24910.2.1 特殊形式新手营 24910.2.2 列表、向量、映射和集 25010.2.3 数学运算、相等和其他操作 25210.3 使用函数和循环 25310.3.1 一些简单的Clojure函数 25310.3.2 Clojure中的循环 25510.3.3 读取器宏和派发器 25610.3.4 函数式编程和闭包 25710.4 Clojure序列 25810.4.1 懒序列 26010.4.2 序列和变参函数 26110.5 Clojure与Java的互操作 26210.5.1 从Clojure中调用Java 26210.5.2 Clojure值的Java类型 26310.5.3 使用Clojure代理 26410.5.4 用REPL做探索式编程 26410.5.5 在Java中使用Clojure 26510.6 Clojure并发 26510.6.1 未来式与并行调用 26610.6.2 ref形式 26710.6.3 代理 27110.7 小结 272第四部分 多语种项目开发第11章 测试驱动开发 27411.1 TDD概览 27511.1.1 一个测试用例 27611.1.2 多个测试用例 28011.1.3 深入思考红—绿—重构循环 28211.1.4 JUnit 28311.2 测试替身 28511.2.1 虚设对象 28611.2.2 存根对象 28711.2.3 伪装替身 29011.2.4 模拟对象 29511.3 ScalaTest 29611.4 小结 298第12章 构建和持续集成 30012.1 与Maven 3相遇 30212.2 Maven 3入门项目 30312.3 用Maven 3构建Java7developer项目 30512.3.1 POM 30512.3.2 运行示例 31112.4 Jenkins:满足CI需求 31412.4.1 基础配置 31512.4.2 设置任务 31612.4.3 执行任务 31912.5 Maven和Jenkins代码指标 32012.5.1 安装Jenkins插件 32112.5.2 用Checkstyle保持代码一致性 32212.5.3 用FindBugs设定质量标杆 32312.6 Leiningen 32512.6.1 Leiningen入门 32612.6.2 Leiningen的架构 32612.6.3 Hello Lein 32712.6.4 用Leiningen做面向REPL的TDD 32912.6.5 用Leiningen打包和部署 33012.7 小结 332第13章 快速Web开发 33313.1 Java Web框架的问题 33413.1.1 Java编译为什么不好 33513.1.2 静态类型为什么不好 33513.2 选择Web框架的标准 33613.3 Grails入门 33813.4 Grails快速启动项目 33813.4.1 创建域对象 34013.4.2 测试驱动开发 34013.4.3 域对象持久化 34213.4.4 创建测试数据 34313.4.5 控制器 34313.4.6 GSP/JSP页面 34413.4.7 脚手架和UI的自动化创建 34613.4.8 快速周转的开发 34713.5 深入Grails 34713.5.1 日志 34713.5.2 GORM:对象关系映射 34813.5.3 Grails插件 34913.6 Compojure入门 35013.6.1 Hello Compojure 35013.6.2 Ring和路由 35213.6.3 Hiccup 35313.7 我是不是一只水獭 35313.7.1 项目设置 35413.7.2 核心函数 35713.8 小结 359第14章 保持优秀 36114.1 对Java 8的期待 36114.1.1 lambda表达式(闭包) 36214.1.2 模块化(拼图Jigsaw) 36314.2 多语言编程 36514.2.1 语言的互操作性及元对象协议 36514.2.2 多语言模块化 36614.3 未来的并发趋势 36714.3.1 多核的世界 36714.3.2 运行时管理的并发 36714.4 JVM的新方向 36814.4.1 VM的合并 36814.4.2 协同程序 36914.4.3 元组 37014.5 小结 372
2021年06月22日
845 阅读
0 评论
0 点赞
2021-06-22
《Java编程思想 第四版》Thinking in Java 经典书籍 中文完整版 PDF下载
{card-default label="介绍" width=""}Thinking in java是一本经典的java学习图书,本书共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过异常处理错误、字符串、泛型、数组、容器深入研究、JavaI/O系统、枚举类型、并发以及图形化用户界面等内容。这些丰富的内容,包含了Java语言基础语法以及高级特性,适合各个层次的Java程序员阅读。{/card-default}下载地址百度云盘下载地址(提取密码:isnx):链接:http://pan.baidu.com/s/1skEGhjv目录第1章 对象导论1.1 抽象过程1.2 每个对象都有一个接口1.3 每个对象都提供服务1.4 被隐藏的具体实现1.5 复用具体实现1.6 继承1.6.1 “是一个”(is-a)与“像是一个”(is-like-a)关系1.7 伴随多态的可互换对象1.8 单根继承结构1.9 容器1.9.1 参数化类型(范型)1.10 对象的创建和生命期1.11 异常处理:处理错误1.12 并发编程1.13 Java与Internet1.13.1 Web是什么1.13.2客户端编程1.13.3 服务器端编程1.22 总结第2章 一切都是对象2.1 用引用操纵对象2.2 必须由你创建所有对象2.2.1 存储到什么地方2.2.2 特例:基本类型2.2.3 Java中的数组2.3 永远不需要销毁对象2.3.1 作用域2.3.2 对象的作用域2.4 创建新的数据类型:类2.4.1 域和方法2.4.2 基本成员默认值2.5 方法、参数和返回值2.5.1 参数列表2.6 构建一个Java程序2.6.1 名字可见性2.6.2 运用其他构件2.6.3 static 关键字2.7 你的第一个Java程序编译和运行2.8 注释和嵌入式文档2.8.1 注释文档2.8.2 语法2.8.3 嵌入式HTML2.8.4 一些标签示例2.8.5 文档示例2.9 编码风格2.10 总结2.11 练习第3章 操作符3.1 更简单的打印语句3.2 使用Java操作符3.3 优先级3.4 赋值3.4.1 方法调用中的别名问题3.5 算术操作符3.5.1 一元加、减操作符3.6 自动递增和递减3.7 关系操作符3.7.1 测试对象的等价性3.8 逻辑操作符3.8.1 短路3.9 直接常量3.9.1 指数记数法3.10 按位操作符3.11 移位操作符3.12 三元操作符 if-else3.13 字符串操作符 + 和 +=3.14 使用操作符时常犯的错误3.15 类型转换操作符3.15.1 截尾和舍入3.15.2提升3.16 Java没有“sizeof”3.17 操作符小结3.18 总结第4章 控制执行流程4.1 true和false4.2 if-else4.3 迭代4.3.1 do-while4.3.2 for4.3.3 逗号操作符4.4 Foreach语法4.5 return4.6 break和 continue4.7 臭名昭著的“goto”4.8 switch4.9 总结第5章 初始化与清理5.1 用构造器确保初始化5.2 方法重载5.2.1 区分重载方法5.2.2 涉及基本类型的重载5.2.3 以返回值区分重载方法5.3 缺省构造器5.4 this关键字5.4.1 在构造器中调用构造器5.4.2 static的含义5.5 清理:终结处理和垃圾回收5.5.1 finalize()的用途何在5.5.2 你必须实施清理5.5.3 终结条件5.5.4 垃圾回收器如何工作5.6 成员初始化5.6.1 指定初始化5.7 构造器初始化5.7.1 初始化顺序5.7.2. 静态数据的初始化5.7.3. 显式的静态初始化5.7.4. 非静态实例初始化5.8 数组初始化5.8.1 可变参数列表5.9 枚举类型5.10 总结第6章 访问权限控制第7章 复用类第8章 多态第9章 接口第10章 内部类第11章 持有对象第12章 通过异常处理错误第13章 字符串第14章 类型信息第15章 泛型第16章 数组第17章 容器深入研究第18章 Java I/O系统第19章 枚举类型第20章 注解第21章 并发第22章 图形化用户界面
2021年06月22日
1,443 阅读
0 评论
0 点赞
2021-06-22
Spring Boot汉字转拼音工具
pinyin4j这个java工具包(官方网站:http://pinyin4j.sourceforge.net/)。这个工具包是开源的,对于一般常用汉字,转化正确率还是不错的。添加依赖<!-- 拼音转换工具--> <dependency> <groupId>com.belerweb</groupId> <artifactId>pinyin4j</artifactId> <version>2.5.1</version> </dependency>工具类 public class ChineseCharToEnUtils { /** * 将字符串中的中文转化为拼音,其他字符不变 * * @param inputString * @return */ public static String getPingYin(String inputString) { HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat(); format.setCaseType(HanyuPinyinCaseType.LOWERCASE); format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); format.setVCharType(HanyuPinyinVCharType.WITH_V); char[] input = inputString.trim().toCharArray(); StringBuilder output = new StringBuilder(); try { for (char c : input) { if (Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) { String[] temp = PinyinHelper.toHanyuPinyinStringArray(c, format); output.append(temp[0]); } else output.append(Character.toString(c)); } } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } return output.toString(); } /** * 获取汉字串拼音首字母,英文字符不变 * @param chinese 汉字串 * @return 汉语拼音首字母 */ public static String getFirstSpell(String chinese) { StringBuilder pybf = new StringBuilder(); char[] arr = chinese.toCharArray(); HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); for (char c : arr) { if (c > 128) { try { String[] temp = PinyinHelper.toHanyuPinyinStringArray(c, defaultFormat); if (temp != null) { pybf.append(temp[0].charAt(0)); } } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } } else { pybf.append(c); } } return pybf.toString().replaceAll("\\W", "").trim(); } /** * 获取汉字串拼音,英文字符不变 * @param chinese 汉字串 * @return 汉语拼音 */ public static String getFullSpell(String chinese) { StringBuilder pybf = new StringBuilder(); char[] arr = chinese.toCharArray(); HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); for (char c : arr) { if (c > 128) { try { pybf.append(PinyinHelper.toHanyuPinyinStringArray(c, defaultFormat)[0]); } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } } else { pybf.append(c); } } return pybf.toString(); } }
2021年06月22日
985 阅读
0 评论
0 点赞
2021-06-18
MySql精确查询varchar类型字段忽略右侧空格的问题
MySQL精确查询(=)时,如果字段是varchar类型的,如果查询字段最右侧有空格,MySQL会自动忽略右侧的空格。比如以下三条SQL,对于数据库来说是等价的。select * from IntelliOp.sys_user where user_name = 'admin ' ; select * from IntelliOp.sys_user where user_name = 'admin ' ; select * from IntelliOp.sys_user where user_name = 'admin'如果系统中有admin,三条SQL都能正常查询出来数据.问题原因在于MySQL的校对规则基于PAD SPACE,这就意味着CHAR、VARCHAR、TEXT等字符串的等值比较(=)会忽略掉尾部的空格。而且这也符合SQL标准,无需设置也无法改变。如果想要精确查询就不能用等值查询(=),而应改用like或binaryselect * from IntelliOp.sys_user where user_name like 'admin ' ; select * from IntelliOp.sys_user where user_name like 'admin'
2021年06月18日
1,206 阅读
0 评论
0 点赞
2021-06-16
请输入一个有效的值,最接近的值为24.01和25.01
在用到表单里,发现把鼠标移到type="number"的input框上时有时候会显示“请输入有效值,两个最接近的有效值为24.01,25.01”的提示,24.01和25.01跟你输入的整数值有关。代码里面并没有这个提示,发现只有当输入小数时会出现提示,原来是浏览器默认输入整数,如果要输入小数需要修改步长,比如将step设为0.01。 <el-input @input="((val)=>{editInput(val,'beforeWeight')})" type="number" @blur="onBlurBeforeWeight" v-model="form.beforeWeight" :min="0.01" :max="9999999999.99" :step="0.01" placeholder="请输入去种仁前重量"> <template slot="append">公斤</template> </el-input>
2021年06月16日
1,569 阅读
0 评论
0 点赞
2021-06-15
elementui textarea与input字体不一致问题解决
今天使用elementui中input及textarea时,发现两种控件默认显示的字体是不一致的,input的比较扁,而textarea显示的比较瘦高。可以看下下面这张图,比较明显。原因通过F12,我们可以看到textarea的字体为monospaceinput的字体为Arial解决在全局css文件加入以下代码即可, 因为我们项目使用的是ruoyi的系统,所以在sec/assets/styles/element-ui.scss文件中加入以下代码即可textarea { //font-family: Arial, Helvetica, sans-serif; //解决TextArea与input不一致的问题 font-family: "Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif; }
2021年06月15日
1,711 阅读
0 评论
0 点赞
2021-06-13
2021年最新版:全球最便宜VPS商家清单,便宜vps推荐
https://bwh81.net,企业级 美国 cn2 gia、日本软银、香港cn2 gia 加拿大公司IT7(2004~)旗下VPS品牌,主打面向中国的高端线路的VPS:10Gbps 美国 cn2 gia、10Gbps 日本软银、1Gbps带宽的香港cn2 gia。天价的成本,全球唯一一家,没有例外!国内访问速度超快,可以支付宝、PayPal付款。https://www.hostwinds.com ,最便宜的“全管理”VPS商家 哪怕是低价的“无管理”VPS,也能享受到别家的“全管理VPS”的服务;售后态度非常友善让人舒服,客服也是技术,有美国西雅图、达拉斯、荷兰三个机房。不想折腾,就稳定弄自己的小项目,hostwinds应该是相当靠谱的。支持支付宝、PayPal付款!https://gcorelabs.com,日本、韩国等30个机房,不限流量 这几年比较出名的卢森堡主机商,业务包括独立服务器、CDN、VPS等;提供全球30多个国家和地区的机器和服务;日本、韩国、新加坡、印度、美国、俄罗斯(包括远东)等,默认200Mbps带宽,不限制流量。 支持支付宝、PayPal、信用卡等付款!访问:https://gcorelabs.comhttps://www.racknerd.com ,低价、高配、大流量,售后超快 主打美国洛杉矶(multacom、sharktech机房)和colocrossing的圣何塞、西雅图、达拉斯、芝加哥、纽约、阿什本、亚特兰大数据中心。所有VPS都是基于KVM虚拟,solusvm面板管理,性价比超高!毫无疑问,2020年低端VPS行业里面,这就是扛把子;可以预见,在2021年,racknerd可能会有更多更大的动作!最新促销:https://www.zhujiceping.com/tag/racknerd/https://www.vultr.com,17个机房,按小时计费,自定义ISO 全球最流行最热门的cloud品牌之一,美国choopa机房的旗下的业务!机器部署在全球17个数据中心,包括日本、韩国、新加坡、韩国、美国、荷兰等;支持:IPV6、按小时付款、快照、区块存储、自定义ISO等多种特性。PayPal、支付宝、微信等付款!【推荐】https://buyvm.net,超级大硬盘,1Gbps带宽,不限流量 早在2010年的时候就已经名声在外,口碑和知名度很高;主要运作KVM虚拟的VPS,拉斯维加斯、纽约、卢森堡三个数据中心,1Gbps带宽,不限流量,免费DirectAdmin面板授权,免费Windows系统!官方提供超便宜的“Blockstorage”,能做到每256G仅需1.25美元/月,最高可以10T硬盘。如何使用,参考:https://www.zhujiceping.com/40168.htmlhttps://virmach.com ,曾今长期低价霸榜 2014年开始运作,主打colocrossing机房的10个数据中心的VPS业务。virmach依托批量低价拿服务器,曾今干过“秒杀”低至$2.5/年的VPS。支持“PayPal”和“支付宝”付款,怕ddos攻击花2美元就可以加voxility提供的1Tbps强悍防御!从2020年开始有示弱或者转变策略的迹象,受到racknerd等众多低价品牌的挑战!https://cloudcone.com,按小时计费,超强ddos高防 印度公司,主打美国洛杉矶Multacom机房的VPS和独立服务器。VPS支持按小时付款,支持换IP、快照、区快存储、负载均衡、autoscaling、超强高防IP(由voxility提供高达1Tbps防御,每个每月2.5美元)。https://friendhosting.net/en/,8个机房,不限流量 2009年成立于保加利亚,每个VPS都是100Mbps带宽,不限流量,支持自定义ISO。可选机房有:捷克、瑞士、保加利亚、立陶宛、波兰、荷兰、乌克兰、美国,支持PayPal、支付宝、比特币等付款https://www.itldc.com,新加坡、乌克兰等10机房,不限流量 好有历史的立陶宛古董公司了,ITL Bulgaria Ltd,Camper Solutions Corp,ITL Internet Service,都是一个老板;主要运作独立服务器和VPS,不限制流量,KVM虚拟;数据中心有:美国(洛杉矶、新泽西、迈阿密)、新加坡、乌克兰、瑞士、保加利亚、立陶宛、荷兰、捷克。支持paypal!https://hosteons.com ,不限流量,有Windows,100G高防 默认100Gbps高防保护!每个VPS给100Mbps带宽,不限流量随便跑,或者1Gbps带宽限制流量!VPS分OpenVZ 7 和KVM(支持Windows),免费送directadmin收费面板,solusvm管理面板非常轻松。“PayPal”和“支付宝”付款。https://digital-vm.com ,日本、新加坡等,10Gbps带宽、不限流量 2019年3月开始运作的,相对来说还算是个新商家,主要提供10Gbps带宽、不限流量的VPS。数据中心分布在:日本、新加坡、美国洛杉矶、英国、荷兰、挪威、丹麦、西班牙。亚洲给大带宽还不限流量的VPS特别少,西班牙、丹麦、挪威等机房的VPS也是比较少见的,PayPal、支付宝等可以付款!https://www.pacificrack.com,一个在作死的VPS品牌 QN机房旗下直属品牌,有足够的资源,主打洛杉矶的VPS业务。可惜的是开卖之初在技术规划、价格定位等方面存在较为严重的失误,一直到PR-V和PR-L系列出现才有明显好转。该品牌口碑有不少负面评价,谨慎考虑!
2021年06月13日
1,216 阅读
0 评论
0 点赞
2021-06-12
uni-app基础之应用生命周期
uni-app 支持如下应用生命周期函数:函数名说明onLaunch当uni-app 初始化完成时触发(全局只触发一次)onShow当 uni-app 启动,或从后台进入前台显示onHide当 uni-app 从前台进入后台onError当 uni-app 报错时触发onUniNViewMessage对 nvue 页面发送的数据进行监听,可参考 nvue 向 vue 通讯onUnhandledRejection对未处理的 Promise 拒绝事件监听函数(2.8.1+)onPageNotFound页面不存在监听函数onThemeChange监听系统主题变化注意应用生命周期仅可在App.vue中监听,在其它页面监听无效。<script> export default { /** * */ onLaunch: function() { console.log('应用初始化完成后触发,全局只触发一次') }, /** * */ onShow: function() { console.log('App启动或者从后台重新进入前台时触发') }, /** * */ onHide: function() { console.log('App从前台进入后台时触发') }, /** * */ onError: function() { console.error('App报错时触发') }, /** * 对 nvue 页面发送的数据进行监听 */ onUniNViewMessage: () => { console.log('对 nvue 页面发送的数据进行监听') }, /** * */ onUnhandledRejection: () => { console.log('对未处理的 Promise 拒绝事件监听函数(2.8.1+)') }, /** * 页面不存在监听函数 */ onPageNotFound: () => { console.log('页面不存在时触发') }, /** * 监听系统主题变化 */ onThemeChange: () => { console.log('主题切换后触发') } } </script> <style> /*每个页面公共css */ </style>
2021年06月12日
1,275 阅读
0 评论
0 点赞
1
...
23
24
25
...
53