VSCode PlatformIO 编译报错(使用了ESPAsyncWebServer库) 错误详细内容 在platformio.ini里面添加了ESPAsyncWebServer这个库,相关配置内容如下:
lib_deps = ESP Async WebServer 调用这一条函数后编译出错:
server.serveStatic("/", SPIFFS, "/").setDefaultFile("index.html"); 下面是错误完整内容(可能没有看的必要)
c:/users/nae/.platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: .pio\build\esp32dev\libb7f\libESP Async WebServer.a(WebAuthentication.cpp.o):(.literal._ZL6getMD5PhtPc+0x4): undefined reference to `mbedtls_md5_starts' c:/users/nae/.platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: .pio\build\esp32dev\libb7f\libESP Async WebServer.a(WebAuthentication.cpp.o): in function `getMD5(unsigned char*, unsigned short, char*)': D:\__Document__\Study\Computing\Embedded\PlatformIO\WetWaterNet/.pio/libdeps/esp32dev/ESP Async WebServer/src/WebAuthentication.cpp:73: undefined reference to `mbedtls_md5_starts' collect2.exe: error: ld returned 1 exit status *** [.pio\build\esp32dev\firmware.elf] Error 1 网上搜了下有一篇好像提到了相关的内容,解决方法是删掉一个文件夹,但是我删掉以后编译要下载回来,然后下载根本不动…
原文->https://blog.csdn.net/weixin_51139222/article/details/129022915
解决方法 把库依赖从稳定版换成开发版platforn.ini里面改成这样↓
lib_deps = https://github.com/me-no-dev/ESPAsyncWebServer.git 其他 ESPAsyncWebServer项目地址https://github.com/me-no-dev/ESPAsyncWebServer?tab=readme-ov-file#installation
解决方法是自己瞎猜试出来的,因为貌似用稳定版的库是少了东西什么的,所以就看到项目的介绍里还有个开发版本的
(不过因为lib_deps = 后面填写的格式,也出问题好多次,具体就是加上后反而显示ESPAsyncWebServer.h找不到,多试了几次,问题应该只是我没设置对,变成没有添加这个库了)
最近在研究Android Entreprise部分的特性,需要在Android手机上分析WorkProfile相关的源码,因为新买的Pixel样机还未到货,看了几天Android源码,迫切需要上真机对比分析。
又听说最近几年Android模拟器已经有些进步,至少性能比以前好多了,于是打算把Android Studio中废弃多年的AVD跑起来。一试,果真性能有进步,不算流畅,但点击操作没以前那种老马拉大车的感觉,所以打算切换到模拟器环境下,凑合用几天等真机。
当前,因为涉及framework中代码逻辑的变化,迫切要解决模拟器镜像不能修改的问题,摸索加查资料几天,过程记录如下
1.编译准备 编译环境是Ubuntu20.04,Hyper-V上安装的虚拟机,20G内存,NVME1T硬盘。安装编译依赖:
$ sudo apt update $ sudo apt install flex bison build-essential zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc fontconfig -y $ sudo apt install make git-core gnupg zip unzip curl python3 openjdk-11-jdk -y 安装repo:
$ echo `export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'` >> ~/.bashrc $ source ~/.bashrc 下载代码:
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-14.0.0_r2 repo sync -c -j8 android版本tag可以从如下页面中查询
https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds
2.编译过程 因为是模拟器,选择sdk_pc_x86_64-userdebug
文章目录 前言一、HDFS概述1. HDFS简介2. HDFS架构3. HDFS文件操作 二、HDFS命令介绍1. hdfs命令简介2. HDFS命令的基本语法3. 常用的HDFS命令选项 三、HDFS常用命令1. 列出指定路径下的文件和目录。2. 创建一个新的目录。3. 将本地文件或目录上传到 HDFS。4. 从 HDFS 下载文件或目录到本地文件系统。5. 删除 HDFS 中的文件或目录。6. 移动文件或目录。7. 显示文件的内容。8. 更改文件或目录的权限。9. 更改文件或目录的所有者。10. 更改文件或目录的所属组。11. 计算文件或目录的大小。12. 从本地文件系统复制文件到 HDFS。13. 从 HDFS 复制文件到本地文件系统。14. 将 HDFS 中的多个文件合并为一个本地文件。15. 显示文件的末尾内容。16. 以文本格式显示文件的内容。17. 统计文件和目录的数量。18. 设置文件的副本数。19. 在 HDFS 上创建一个空文件。20. 检查文件或目录的存在性。 总结 前言 HDFS(Hadoop Distributed File System)是Apache Hadoop生态系统中的分布式文件系统,用于存储和处理大规模数据集。HDFS具有高容错性、高可靠性和高吞吐量的特点,适用于大数据处理和分析场景。本文将介绍HDFS的基本概念和常用操作,帮助您更好地理解和使用HDFS。
一、HDFS概述 1. HDFS简介 HDFS是一个分布式文件系统,旨在运行在大规模集群上。它的设计目标是存储超大规模数据集,并提供高吞吐量的数据访问。HDFS将文件划分为多个数据块,并将这些数据块分布存储在集群中的多个节点上,以实现数据的并行处理和高可靠性。
2. HDFS架构 HDFS的架构包括以下组件:
NameNode:负责管理文件系统的命名空间、存储文件的元数据信息,并协调数据块的存储和访问。DataNode:存储实际的数据块,并向NameNode报告数据块的存储信息。Secondary NameNode:定期合并和持久化NameNode的编辑日志,以便在NameNode故障时恢复文件系统。客户端:与HDFS交互的应用程序,可以读取、写入和删除文件。 3. HDFS文件操作 HDFS支持以下常用文件操作:
上传文件:将本地文件上传到HDFS中。下载文件:将HDFS中的文件下载到本地。创建目录:在HDFS中创建新的目录。删除文件或目录:从HDFS中删除文件或目录。查看文件内容:查看HDFS中文件的内容。移动文件或目录:在HDFS中移动文件或目录。 二、HDFS命令介绍 1. hdfs命令简介 HDFS 提供了一组命令行工具,用于管理和操作 HDFS 文件系统。
🔥博客主页: 【小扳_-CSDN博客】
❤感谢大家点赞👍收藏⭐评论✍ 文章目录
1.0 平衡二叉树
1.1 实现判断平衡二叉树的思路
1.2 代码实现判断平衡二叉树
2.0 二叉树的层序遍历
2.1 实现二叉树层序遍历的思路 2.2 代码实现二叉树层序遍历
3.0 二叉树的最近公共祖先
3.1 实现二叉树的最近公共祖先的思路
3.2 代码实现二叉树的最近公共祖先
4.0 根据二叉树创建字符串
4.1 实现根据二叉树创建字符串的思路
4.2 代码实现根据二叉树创建字符串
1.0 平衡二叉树 题目:
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
示例 1:
输入:root = [3,9,20,null,null,15,7] 输出:true OJ链接:
110. 平衡二叉树
1.1 实现判断平衡二叉树的思路 具体思路为:只需要判断当前节点的左右子树最大深度差是否大于 1 即可。利用递归的方式,来获取当前节点的最大深度,利用该节点的深度与另一个兄弟节点进行比较,若差值的绝对值对于 1 时,说明不是平衡二叉树。
1.2 代码实现判断平衡二叉树 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.
目录
1.nginx常用的正则表达式
2.location
location 大致可以分为三类
location 常用的匹配规则
location 优先级
location 示例说明
优先级总结
3.rewrite
rewrite功能
rewrite跳转实现
rewrite执行顺序
语法格式
rewrite示例
实例1:
实例2:
实例3:
实例4:
1.nginx常用的正则表达式 ^ :匹配输入字符串的起始位置$ :匹配输入字符串的结束位置* :匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”+ :匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o”? :匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}”. :匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式\ :将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“\$”则匹配“$”\d :匹配纯数字[0-9] \s :空白符 \w :任意单词字符包括下划线[A-Za-z0-9_]{n} :重复 n 次{n,} :重复 n 次或更多次{n,m} :重复 n 到 m 次[] :定义匹配的字符范围[c] :匹配单个字符 c[a-z] :匹配 a-z 小写字母的任意一个[a-zA-Z0-9] :匹配所有大小写字母或数字() :表达式的开始和结束位置 | :或运算符
2.location location 大致可以分为三类 精准匹配:location = / {...}一般匹配:location / {...} 正则匹配:location ~ / {.
[root@zook_node1 bin]# service zookeeper start
----------zookeeper启动----------
Error: JAVA_HOME is not set and java could not be found in PATH.
在启动zookeeper 会调用到java环境,在zkEnv.sh文件中,有一段代码将检查JAVA_HOME, 配置文件路径和文件zookeeper/bin/zkEnv.sh 环境下进行配置,添加java环境变量:
vi zkEnv.sh
启动查看,成功
[root@zook_node1 bin]# service zookeeper start
----------zookeeper启动----------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
查看启动状态
[root@zook_node1 bin]# service zookeeper status
---------- zookeeper 状态------------
ZooKeeper JMX enabled by default
Using config: /home/bigdata/zookeeper/bin/../conf/zoo.cfg
AES加密的官方简介 AES是高级加密标准,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,目前已经被全世界广泛使用,同时AES已经成为对称密钥加密中最流行的算法之一。AES支持三种长度的密钥:128位,192位,256位。
和后端做加密对接重点关注的点 确认加密方式, key(密钥长度必须为16,24,32位),iv值(用于增加加密算法安全性,使用随机数),工作模式,以及是16进制加密还是Base64的。确认以后可以让后端提供一个他加密后的密文,自己反向写一个解密方法,成功解出,然后再写一个对应的加密方式,将密文交给后端成功解除,即对应。 备注: 关于IV的官方说法, IV是初始化向量(initialization vector)的缩写,是在密码学中用于增强加密算法安全性的一种辅助参数。IV是一个固定长度的输入值,一般要求是随机数或拟随机数,使用随机数产生的初始化向量才能达到语义安全,并让攻击者难以对同一把密钥的密文进行破解。在区块加密中,使用了初始化向量的加密模式被称为区块加密模式。
关于加密模式的介绍很多,这里就不介绍了,主要记录自己用过的两种加密方法,并且附上对应的解密方法。
ECB模式 这里使用crypto-js插件。根据自己的项目情况,使用npm 或yarn等去下载依赖包,
npm下载命令格式 npm install 依赖包名称 yarn下载命令格式 yarn add 依赖包名称 加密方法如下,我的是vue项目
import CryptoJS from "crypto-js/crypto-js"; // 默认的 KEY 与 iv 使用AES-128-CBC加密模式,key需要为16位,key和iv可以相同 //ciphertext 16进制加密,不加此方法就是Base64加密 // AES加密 :字符串 key 返回base64 export function Encrypt(word, keyStr, ivStr) { const KEY = CryptoJS.enc.Utf8.parse("密钥"); //密钥 let key = KEY; if (keyStr) { key = CryptoJS.enc.Utf8.parse(keyStr); } let srcs = CryptoJS.enc.Utf8.parse(word); //密文 var encrypted = CryptoJS.
1.Room介绍: Android Room 是 Android 官方提供的一个持久性库,用于在 Android 应用程序中管理数据库。它提供了一个简单的 API 层,使得使用 SQLite 数据库变得更加容易和方便。
以下是 Android Room 的主要特点:
对象关系映射 (ORM):Room 允许您将 Java 或 Kotlin 对象映射到数据库表中。您可以定义数据模型并使用注解来定义关系和约束。事务管理:Room 提供了事务管理的功能,可以确保数据的完整性和一致性。它还支持自动提交和回滚机制,类似于 JDBC 中的事务管理。数据库抽象:Room 提供了一个抽象层,使得您可以使用简单的 API 来执行 SQL 查询和操作数据库。您不需要编写手动的 SQL 语句,而是使用 Java 或 Kotlin 的查询 API。同步和异步操作:Room 支持同步和异步操作,使得您可以轻松地在后台线程中执行数据库操作,以避免阻塞主线程。数据库迁移:当您的应用程序更新时,可能需要更改数据库模式。Room 可以自动处理迁移过程,确保数据的一致性和完整性。并发支持:Room 支持多线程并发操作,可以有效地处理多个并发请求。嵌入式数据库:Room 支持嵌入式数据库,这意味着您可以将数据库文件嵌入到您的应用程序中,而不需要单独安装和管理 SQLite 数据库。支持跨平台:除了 Android 平台,Room 还支持 iOS 和桌面应用程序。 总之,Android Room 是一个功能强大的持久性库,使得管理 SQLite 数据库变得更加简单和方便。它提供了一个对象关系映射层、事务管理、数据库抽象等功能,可以帮助您更轻松地构建和管理 Android 应用程序中的数据库。
2.Room使用: 使用教程: Room | Jetpack | Android Developers
开发文档:androidx.room | Android Developers
1.导入依赖:在build.gradle文件中加入 dependencies { //Room def room_version = "
目录
前言
win10
一、准备
1、jdk17
2、jdk11(新增)
3、jdk8
二、详细步骤
1、安装jdk
2、设置环境变量
三、测试
kali
一、安装jdk
1、用apt包管理器安装OpenJDK
2、下载jdk安装包
3、解压安装包
4、配置环境变量
5、宣告JAVA位置
6、重新载入配置文件
二、切换jdk
前言 作业过程中发现有些工具需要的java环境是不同的,如果每次都要卸载重装jdk那也太麻烦了,在网上查找资料学到了可以自由切换各个版本jdk的方法,总结此文。
参考文章:多个JDK版本可以吗:JDK17、JDK19、JDK1.8轻松切换(无坑版)小白也可以看懂_jdk17和jdk1.8区别_-南帝-的博客-CSDN博客
kali配置不同版本java并随时切换_kali切换java版本-CSDN博客
win10 一、准备 各种版本的jdk,按自己的需要下载。
我这里是需要jdk17和jdk8。
1、jdk17 下载:Java Downloads | Oracle
2、jdk11(新增) 下载:这是别人的网盘:JDK安装包-长期支持版本(LTS)_免费高速下载|百度网盘-分享无限制 (baidu.com)
这是官方地址,需要登陆:Java Archive Downloads - Java SE 11 | Oracle India
3、jdk8 下载:Java Downloads | Oracle
二、详细步骤 1、安装jdk 很简单,双击exe文件后全部默认下一步即可,安装的时候记住安装路径。
如果想卸载,按照正常应用的卸载方式即可。
2、设置环境变量 2.1 删除jdk安装时自动添加的环境变量
操作位置:系统—关于—高级系统设置—环境变量—系统变量
删除Path变量中类似于:C:\Program Files\Common Files\Oracle\Java\javapath 的变量值,不一定一模一样,但格式大同小异,如图操作。
2.2 添加Path变量值
%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin
2.3 添加CLASSPATH(一定要完全复制哦,不要忽略一开始的 .
确保你使用的Python版本是3.x系列的,因为tkinter库在Python 2.x系列中被称为Tkinter。尝试手动安装tkinter库。在Windows上,你可以从Python官方网站下载Windows安装程序,并选择安装tkinter库。在Linux上,你可以使用包管理器来安装,例如在Debian/Ubuntu上,可以运行以下命令来安装:sudo apt-get install python3-tk。检查环境变量是否正确设置。在Windows上,你需要将Python的安装目录添加到系统的PATH环境变量中。在Linux上,你需要确保Python解释器的路径正确添加到PATH环境变量中。如果以上方法都不起作用,可以尝试重新安装Python,确保使用官方提供的Python发行版,并根据官方文档的说明进行安装。
文章目录 前言一、栈1、栈的基本概念2、栈的实现(数组实现)3、栈的基本操作3.1 栈的结构设计3.2 栈常见的基本函数接口 4、栈的实现4.1 初始化栈4.2 栈的销毁4.3 入栈4.4 出栈4.5 判空4.6 长度4.7 获取栈顶元素 完整代码Stack.hStack.cTest.c 二、队列1、队列的结构及概念2、队列的实现(单链表实现)1、队列的链式结构设计2、常用的功能接口2.1、初始化队列2.2、销毁队列2.3、入队列2.4、出队列2.5、获取队列头部元素2.6、获取队列尾部元素2.7、判空2.8、获取有效元素个数 完整代码Queue.hQueue.cTest.c 前言 一、栈 1、栈的基本概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则
压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
出栈:栈的删除操作叫做出栈。出数据也在栈顶
2、栈的实现(数组实现) 栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小
3、栈的基本操作 压栈:栈的插入操作,也叫进栈/入栈/压栈,在栈顶进行数据操作。
出栈:栈的删除操作,也是在栈顶进行数据删除的。
3.1 栈的结构设计 typedef int STDataType;//方便修改类型 typedef struct Stack { STDataType* a; int top; int capacity; }ST; 3.2 栈常见的基本函数接口 //初始化 void STInit(ST* pst); //销毁栈 void STDestroy(ST* pst); //入栈 void STPush(ST* pst, STDataType x); //出栈 void STPop(ST* pst); //判空 bool STEmpty(ST* pst); //长度 int STSize(ST* pst); //栈顶 STDataType STTop(ST* pst); 4、栈的实现 4.
Java-匿名内部类 我们先分析匿名内部类的结构,然后逐一解释,最后以下罗列的问题都会在下面的内容中一一得到解答 :
匿名内部类到底是什么?
我们为什么要学习匿名内部类 ?
匿名内部类都有怎样的作用 ?
匿名内部类应用的场景又有哪些 ?
匿名内部类是否有缺陷?
让我们带着这些问题来学习Java中的匿名内部类吧 !
结构决定性质
结构 匿名内部类基本语法 : new 父类构造器(参数) / 实现接口() { // 类的主体部分 }; 解释匿名内部类语法中所有的概念:
new 父类构造器(参数) 表示匿名内部类是某个类的子类实例。
实现接口() 表示匿名内部类是某个接口的实现实例。
{ ... } 内部是匿名内部类的主体部分,包含类的字段、方法等定义。
性质 匿名内部类(Anonymous Inner Class)是一种在声明和创建对象的同时定义类的方式,它没有显式的类名。通过 匿名内部类 看这几个字的字面意思我们都知道这是个没有名字的类,即 非具名类 . 以下是匿名内部类的具备的一些性质 :
可以实现接口或继承类: 匿名内部类可以实现接口或继承某个类,从而提供具体的实现。没有显式的类名: 匿名内部类没有显式的类名,因为它是一种临时的、一次性的实现。一次性使用: 通常用于临时的、一次性的场景,不需要复用。因为匿名内部类没有类名,所以无法在其他地方重复使用。可以访问外部类的成员: 匿名内部类可以访问外部类的成员,包括成员变量和方法。对于外部类的局部变量,有一些规则,比如必须是final或者事实上是final的。可以包含字段和方法: 在匿名内部类的主体部分,可以包含字段(成员变量)和方法的定义。不可以包含静态成员: 匿名内部类不能包含静态成员,包括静态方法和静态变量。 我们来一个一个的解释,同时我也会拿具体的代码演示.
可以实现接口或继承类 匿名内部类可以用来实现接口或者继承类,这也是匿名内部类最常用的一个用法,我们在实际开发中,如果需要实现(重写)某个接口(类)的方法,而且这个方法只是临时使用,不需要复用,而且会出现很多这样的场景,我们肯定是不想一一都去额外的封装一个类去实现接口或者继承类然后再创建类的实例,取调用我们需要的方法,这个时候我们就 匿名内部类 就排上用场啦,我们可以通过匿名内部类去临时创建一个接口的实例(接口不能实例化,这里只是形象比喻一下)或者创建一个临时的子类重写了父类方法的实例. 总结一下 : 当匿名内部类需要实现接口或者继承类时,它可以直接在创建对象的地方定义类的主体,而不需要显式地声明一个具名的类。 package src.demo; //定义一个接口 interface Chef{ void cook(); } class Sever{ public void shangCai(){ System.
👉文末查看项目功能视频演示+获取源码+sql脚本+视频导入教程视频 1 、功能描述 宿舍管理系统拥有三个角色,分别为系统管理员、宿舍管理员以及学生。其功能如下:
管理员:宿舍管理员管理、学生管理、宿舍楼管理、缺勤记录管理、个人密码修改等
宿舍管理员:查看学生及添加缺勤记录、缺勤记录查看和修改
学生:查看自己的缺勤记录、修改密码
1.1 背景描述 宿舍管理系统是为学校或大学设计的一种软件系统,旨在简化和改进学生宿舍的管理和运作。该系统通常涵盖了多个方面,包括学生入住管理、房间分配、设施维护、安全管理、费用结算等功能。它可以帮助管理者更有效地监督宿舍资源的使用情况,确保学生的居住环境安全舒适。此外,它还可以提供学生自主选择室友和房间的功能,同时简化报修流程和费用支付方式,提高整体管理效率。随着技术的不断发展,许多宿舍管理系统还整合了智能设备和数据分析功能,以提供更智能化、便捷的服务。通过这些功能,宿舍管理系统可以帮助学校提升宿舍管理水平,增强学生的居住体验,并为管理者提供更全面的数据支持来做出决策。
2、项目技术 后端框架: servlet、mvc模式
前端框架:bootstrap、jsp
maven项目:否
2.1 MVC MVC(Model-View-Controller)框架是一种用于构建Web应用程序的软件架构模式。它将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)。模型负责处理数据逻辑,包括数据库交互、数据处理和业务规则。视图负责用户界面的呈现,将数据以易于理解的形式展示给用户。控制器充当中间人,接收用户输入并调用相应的模型和视图来完成用户请求。MVC框架使代码分离,提高了应用程序的可维护性和扩展性。开发人员可以独立地修改模型、视图或控制器,而不会影响其他部分。这种分离也有助于多人合作开发项目。MVC框架还促进了前后端的分离,使前端工程师和后端工程师能够更好地协同工作,从而提高了开发效率。
2.2 mysql MySQL是一款Relational Database Management System,直译过来的意思就是关系型数据库管理系统,MySQL有着它独特的特点,这些特点使他成为目前最流行的RDBMS之一,MySQL想比与其他数据库如ORACLE、DB2等,它属于一款体积小、速度快的数据库,重点是它符合本次毕业设计的真实租赁环境,拥有成本低,开发源码这些特点,这也是选择它的主要原因。
3、开发环境 mysql5-8、tomcat8-10、JDK1.8+
4、功能截图+视频演示+文档目录 4.1系统登录 系统三种角色通过此界面登录宿舍管理系统,经过密码验证通过后,分别跳转至不同的页面
4.2系统管理员-宿舍楼管理 系统管理员可以添加宿舍楼,并能够根据宿舍楼名称搜索相对应的信息,同时系统管理员还可以修改和删除宿舍楼,以及给不同的宿舍楼设置管理员等功能。
4.3系统管理员-学生管理 系统管理员可以添加、修改、删除学生,同时可以按照宿舍楼、姓名、学号等条件搜索学生。系统管理员的其它功能与上述功能类似,且可以在视频中看到,这里不在赘述。
4.4宿舍管理员-缺勤记录管理 宿舍管理员可以通过姓名学号等条件搜索学生,并给学生添加、修改和删除相应的缺勤记录
4.5学生界面 学生查看自己的缺勤记录
5 、核心代码实现 5.1 配置代码 dbUrl=jdbc:mysql://localhost:3306/db_dorm?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true dbUserName=root dbPassword=root jdbcName=com.mysql.cj.jdbc.Driver pageSize=4 5.2 其它核心代码 package com.lero.web; import java.io.IOException; import java.sql.Connection; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import com.lero.dao.UserDao; import com.
解决Android studio中下载gradle慢的方法 控诉:作为计算机专业的学生,虽然说下载和使用新的软件应该是我们的家常便饭,但是每一次用新的软件,在配置和下载方面真的花的时间都要比学习这个语法更长,要命(尤其是涉及到tizi)。最可怕的是,可能开始觉得配置好了,等到后面运用的时候还会出问题
下面来详细说明一下我的下载新路历程,可能不是最好的,但是是能解决问题的
一、gradle下载的流程 在开始创建新项目时,会先去看项目中的gradle-wrapper.properties distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists 简单介绍:
distributionBase 和 zipStoreBase 设置为 GRADLE_USER_HOME,表示 Gradle 发行版和压缩文件存储在用户主目录下。另外distributionPath 和 zipStorePath设置为wrapper/dists实际路径将是 GRADLE_USER_HOME/wrapper/dists,一般默认是在C:\user\用户名\.gradle中distributionUrl:是指Gradle发行版的远程下载路径 2.下载gradle 如果该地址下有gradle的缓存,则便可以直接使用,若没有,则需要到distributionUrl去进行下载,由于需要overseas的网站,所以下载的速度较慢
二、初步解决问题 ——直接在本地下载后应用(但本人觉得后面的方法更有保障)
在了解了gradle下载的过程后,便想说直接去官网下载到本地,但又由于本人电脑的C盘有点拥挤,我便下载到了E盘,并创建了一个gradle仓库 2.然后将下载的gradle配置到Android中 3.然后便可以开始下载了,但是我在下载的时候,最后会有错误,但是重新打开又不会显示——所以作为小白的我,不知道是否有问题。但是我的室友用这个方法不会出错,也可能是我的问题,嘿嘿。 4.但是这个方法在麻烦在:每次新建项目需要自己每次去重新修改,除非下载在用户主目录下——C:\user\用户名\.gradle,便不用每次重新下载。
本人觉得上述方法太过于麻烦了,喜欢一劳永逸的方法,主要是记性不好要是忘了咋办,所以后来去向其他大佬,求取了方法,知道了代理服务器的用处,不得感叹计网得学好啊!
三、最终解决办法 ——通过代理服务器来直接通过官网进行下载
配置代理服务器(隧道模式)其他代理服务器的同胞们,照下图依葫芦画瓢即可 打开隧道模式即可,需要使用延迟较少的节点,下载得更块
2.返回Android重新下载即可
but天空不作美:
不知道在是什么原因,在下载gradle-bin的时候没有任何问题,下载得可流畅了,但是继续下载时便提示说请求谷歌网站失败:
最后再次请求大佬出山给我解决了这个问题——说可能是该代理服务器的隧道模式不是很好,所以去配置Android studio的代理,把数据流量都转发给代理服务器进行代理,而代理服务器使用全局模式即可
配置Android studio的代理 ③主机的ip:使用的是127.0.0.1(主机回环地址:表达localhost)
④端口号
⑤检测是否连接成功
2.配置代理:去除隧道模式即可 3.重新刷新下载即可,飞速的完成,显示build success即可(忘记截图了) 上述是我的一个下载的心路历程,方法可能不是最好的,但是我是通过这个方法完成的,希望能帮助到大家。
Html转PDF,前端JS实现Html页面导出PDF(html2canvas+jspdf) 文章目录 Html转PDF,前端JS实现Html页面导出PDF(html2canvas+jspdf)一、背景介绍二、疑问三、所使用技术html2canvas+jspdf 四、展示开始1、效果展示2、代码部分3、参数说明3.1、html2canvas常用参数3.2、jsPDF常用参数 五、常见问题 一、背景介绍 当我们在不想改变后端代码的同时想是纯html页面导出PDF,那么(html2canvas+jspdf)就是无疑最好的选择,导出时它不占用我们服务器的资源,而是由用户本地自行执行js文件下载PDF,不占用我们系统的带宽,所以这无非是最好的选择方式。
二、疑问 1、为什么要使用html2canvas,单jspdf也能实现pdf下载?
HTML2Canvas 和 jsPDF 是 JavaScript 库,用于在浏览器中生成 PDF 文件。
HTML2Canvas 用于将 HTML 元素渲染成图像,可以将整个页面或特定区域以图像形式进行捕获。这对于将复杂的 HTML 结构转换为 PDF 格式非常有用,因为它可以捕获 HTML 中的样式、布局和图像等细节。 jsPDF 是一个 PDF 生成库,它允许你通过 JavaScript 代码创建和编辑 PDF 文档。与 HTML2Canvas 结合使用,你可以将 HTML 元素渲染成图像,然后将图像插入到 jsPDF 创建的 PDF 文档中。 虽然单独使用 jsPDF 也可以实现 PDF 下载,但是在某些情况下,使用 HTML2Canvas 可能更方便。例如,当你需要将整个页面转换为 PDF 或以图像形式捕获特定区域时,HTML2Canvas 提供了更灵活的选项。然后,你可以将 HTML2Canvas 生成的图像插入到 jsPDF 中,进一步编辑和操作 PDF。 综上所述,使用 HTML2Canvas 结合 jsPDF 可以更容易地将 HTML 转换为 PDF,并提供更多灵活性和控制力。
首先导入mysql的jar包,这里连接的是8版本的。
这里之前到如果mysql的jar包了
首先跳到Project模式:
直接复制粘贴到这里:
这里之前到如果了。想删掉重新导入一次,但是报错,什么ioexception。这里将Project Structure中的Moudle中的app中的引入的该jar包的依赖删除掉,然后重启as,再删除就可以了。好吧,这也不是重点。
好,这里重新导入一边,复制jar包,粘贴到libs
点击ok后:
这里还没有引入依赖,接下来引入依赖。
有两种方法:
(1)右键jar包
、
点击这个。之后出现:
点击ok,就可以直接在app的build.gradle中创建dependency。
(2)这个比较麻烦
首先进入project structure
快捷键ctrl+alt+shift+s.进入这个界面:
依次点击:
点击第二个jar dependency
出现这个界面:
输入如下路径,这里是相对app文件夹的相对路径:
添加进来了:点击ok
前面 出现‘>' ,引入成功。
app的build.gradle中也会自动引入依赖。
到这里mysql的jar包就导入完成了。、
之后再程序中可以通过:
Class.forName("com.mysql.cj.jdbc.Driver"); 来引入。
接下来就可以建立数据库连接了。
这里写了一个工具类,将连接mysql的过程封装起来,直接再main函数中调用即可。这里main函数好像可以不new对象就调用对象中的static方法。
用到的就这两个,其中connection是工具类,main调用工具类。
connection的代码如下:
package com.example.myapplication; import android.util.Log; import java.sql.DriverManager; import java.sql.SQLException; public class Connection { public static void mymysql(){ final Thread thread =new Thread(new Runnable() { @Override public void run() { while (!Thread.interrupted()) { try { Thread.
一、介绍 Office For Mac版是一款功能强大的办公套件,内含Word文本处理软件、Excel表格处理软件 、PowerPoint幻灯片制作软件、Outlook邮件收发管理客户端、OneNote数字笔记应用等几个组件。Office 2021作为微软的一个庞大的办公软件集合,是一款最好用,功能最全面的办公软件。
最新的Mac版Office是一款功能强大的办公软件套件,为用户提供了一系列高效的工具和功能,助力用户在工作和学习中取得更好的成果。这个最新版本的Office在设计上更加符合Mac系统的特点,界面简洁、操作流畅,给用户带来更好的使用体验。
Office包含了众多经典应用程序,如Word、Excel、PowerPoint和Outlook,它们都经过了优化和升级,以满足用户日常办公需求。Word提供了丰富的文字处理功能,让用户能够轻松创建和编辑文档;Excel则提供了强大的数据分析和处理能力,帮助用户更好地管理和解读数据;PowerPoint则让用户能够制作出精美的演示文稿,展示自己的想法和观点;而Outlook则是一款全功能的电子邮件和日程管理工具,帮助用户高效地管理邮件和日程安排。
最新的Office2024还支持云存储和协作功能,用户可以轻松地与他人共享和编辑文档,实现多人协同办公。而且,Office还提供了丰富的模板和插件,帮助用户快速创建专业的文档和演示。
二、下载地址
Office Mac版
https://pan.baidu.com/s/1r929BBEzeJ-zxOac9z9SkA
三、安装步骤
1.双击打开下载的安装包。
2.打开后得到以下文件,双击运行office安装程序。
3.点击继续。
4.点击继续。
5.点击同意。
6.点击安装。
7.输入你的电脑开机密码,点击安装软件。
8.软件安装中……
9.安装成功,点击关闭。
10.若有提示更新,去掉勾选后,点击X关闭。
11.双击打开【Crack】 程序。
12.点击继续。
13.点击继续。
14.点击同意。
15.点击继续。
16.点击安装。
17.输入你的电脑开机 码,点击安装软件。
18.安装成功,点击关闭。
19.打开启动台,点击运行Word软件
20.点击跳过登陆。注意不要登陆,防止激 失效。
21.点击创建。
22.点击左上角Word-关于Word,已显示许可。
23.Excel运行界面如下。
24.PowerPoint运行界面如下。
25.到此安装结束,
Win11系统开启Bing-Copilot Tips:本文的对于Win11系统如何开启Copilot做了简单讲解,本文的操作都是建立在有梯子的基础上。另外需要一个微软账号,微软账号最好是通过美国邮箱注册的,如:谷歌邮箱。
文章目录 Win11系统开启Bing-Copilot前言使用步骤1.更新系统为最新版本2.将地区改为美国3.加入Windows预览体验计划4.关联自己的微软账号5. 更新Edge浏览器到最新版6. 安装激活工具7. 使用命令行开启激活工具 总结 前言 Copilot是微软近期推出的一个基于ChatGPT4的语言大模型,能够通过对话的方式帮助解决用户提出的问题,他的知识库是实时更新的,所以相比于ChatGPT3.5来说,对于比较前沿的知识具有较好的分析能力,这一点对于需要解读论文的同学来说帮助很大,因为各领域的论文或者会议会提出一些新的概念,这些概念往往是通过ChatGPT3.5无法查阅的。
本文的操作步骤分为7步,最终的效果是能够开启Bing侧边栏的Copilot和桌面底部的Copilot功能。展示结果如下图所示:
使用步骤 1.更新系统为最新版本 2.将地区改为美国 修改方式是通过控制面板中的“时间和语言”选项卡来修改,最后区域选择美国即可
3.加入Windows预览体验计划 这个选项可以可以体验到最新的Windows功能,目前Copilot只在一部分系统中推出。
4.关联自己的微软账号 这一步实在加入体验计划之后,需要关联自己的微软账号
5. 更新Edge浏览器到最新版 因为Copilot是基于Edge浏览器推出的一个新功能,如果没有Edge也就没有Coplilot,所以需要将Edge也更新到最新版。
6. 安装激活工具 如果通过上面的步骤,重启计算机之后,已经能够正常使用Edge侧边栏的Copilot,但是不能使用桌面版的Copilot,那么你就需要用到下面的激活工具来进行激活。这个工具的下载链接如下:
ViVeTool
7. 使用命令行开启激活工具 用管理员方式打开命令行工具,开启一次就行,一劳永逸,开启完成之后需要重启电脑
总结 经过上面的步骤,应该已经能够正常使用Copilot了。不过大家第一次配置难免会出现一些问题,可以在评论区交流。
🌈个人主页:聆风吟
🔥系列专栏:网络奇遇记、数据结构
🔖少年有梦不应止于心动,更要付诸行动。
文章目录 📋正文📝活动参与规则 参与活动方式文末详见。
📋正文 AI正迅猛地改变着我们的生活。根据高盛发布的一份报告,AI有可能取代3亿个全职工作岗位,影响全球18%的工作岗位。在欧美,或许四分之一的工作可以用AI完成。另一份Statista的报告预测,仅2023年,AI就将创造230万个工作岗位,同时消除180万个工作岗位。
教育领域不可避免地受到AI的影响。国际象棋领域有句名言:“唯有与智者博弈,才能提高。”这也恰好反映了教育的核心:与优秀者互动、交流和学习,才能提升自我。AI作为难以否认的智者,有潜力成为我们的最佳教师。AI能提供个性化学习方案,有无限的耐心,可帮助学生战胜困难,实现自我提升。这正是教育追求的目标,也是普通教师难以实现的。例如,国际象棋领域已经有许多基于AI的教练系统,如Chess、Lichess、Chessable等。这些系统可以根据每个学生的水平、进步和偏好,提供定制化的训练计划、反馈和建议。它们还可以模拟不同风格和水平的对手,让学生在实战中提高自己的水平。这些系统不仅可以帮助初学者入门,也可以帮助高手进阶,这在以往是不可想象的。
在AI时代,重复性工作削减,这对教育来说意义重大。AI可能严重影响某些行业,譬如翻译将面临巨大挑战。随着谷歌翻译器、百度翻译器等在线翻译服务的发展,人类翻译员将越来越难以与机器竞争。根据一项研究,谷歌翻译器在英语和法语之间的翻译质量已经达到人类水平。人们逐渐意识到,重复性工作可由机器完成,应将精力投入到创新、思考和学习之中,提升自己的独特价值。因此,教育应更注重培养创造力,而非让学生仅服从规则。善于独立思考、敢于突破的人才能在多元化、快速变化的世界中立足。
显然,在AI的影响下,教育工作者应注重培养学生的创造力和独立思考能力,帮助学生树立正确的价值观。库克曾说:“我并不担心AI让计算机像人类一样思考,而是担心人类像计算机一样思考。”这将使我们在AI时代被机器取代。例如,在艺术领域,生成式AI已经能够生成令人惊叹的作品,如DALL·E的图像生成、OpenAI的文本生成、Magenta的音乐生成等。这些作品虽然具有高度的技术性和创造性,但缺乏人类的情感和创造力。因此,教育工作者应该鼓励学生发挥想象力,创造出有意义和有影响力的作品。
那么,有了AI,是否就不再需要专门的教育工作者了呢?是否意味着教育应该消失了呢?事实并非如此。教育的目的、方式和评估将发生巨大变化,但教育本身不会消失。
教育是一项历史悠久的活动,每当新技术出现时,总有人担忧教育工作者的意义。以大学教育为例,尽管广播、电视和互联网的出现都曾让人们质疑大学教育的必要性,但事实上大学教育依然存在,并不断适应着社会环境与发展趋势。因此,当GPT(Generative Pre-trained Transformer,生成式预训练)模型出现时,我们不能简单地认为大学将消亡。相反,教育将变得更公平,知识获取变得更容易。例如,在线教育平台如Coursera、edX、Udemy等提供了丰富的课程资源,让人们可以随时随地学习自己感兴趣或者需要的知识。这些平台不仅降低了学习成本和门槛,也扩大了学习范围和学习深度。通过这些平台,人们可以接触到来自世界各地、各个领域的优秀教师和专家,获得最新、最前沿的知识和技能。
在这个变革过程中,教师将不再仅仅是知识的传递者,而需承担更多角色。他们将成为学生的引导者、辅导员和心灵导师,帮助学生在信息洪流中保持清晰的思维,更好地理解世界,找到自己的兴趣和价值。例如,在MOOC(Massive Open Online Courses,大规模开放在线课程)中,教师不仅要设计有趣、有效的课程内容和活动,还要激发学生的学习兴趣和参与热情。教师还要通过在线论坛、视频会议、小组项目等方式,与学生交流、互动,解答他们的疑问和困惑,给予他们反馈和建议。此外,教师还要关注学生的心理和情感状态,帮助他们克服学习中的障碍,培养他们的自信心和自主学习能力。
教育将更加综合,注重培养学生的创造力、批判性思维和沟通能力。课堂也将从传统的授课方式转变为更加互动的学习环境,让学生充分参与讨论和实践,提高学习兴趣和效果。在STEM(科学、技术、工程、数学)教育中,AI可以提供更多的模拟和实验场景,让学生可以通过动手操作、探索发现、试错反馈等方式,学习基本的概念和原理。AI还可以提供更多的协作和竞争机会,让学生可以通过团队合作、项目制作、比赛评选等方式,锻炼自己的创造力、批判性思维和沟通能力。
同时,教育将不再局限于学校和课堂,而是融入生活的各个方面。随着AI技术的普及,我们可以随时随地获得知识。教育将更注重培养自主学习能力,让我们在快速发展的世界中保持竞争力。在日常生活中,我们可以通过智能手机、智能音箱、智能眼镜等设备,与AI进行语音或者图像交互,获取我们需要或者感兴趣的信息。我们还可以通过AI来管理自己的时间、任务、健康等,提高效率和生活品质。在工作中,我们可以通过AI来协助完成一些复杂或者重复的工作,提高工作的准确性和效率。我们还可以通过AI来获取最新、最相关的知识和技能,提高专业性和竞争力。
此外,AI将有助于解决教育资源不平衡问题,让更多人享受到优质教育。借助AI技术,我们可以打破地理和语言障碍,让知识和资源在全球范围内自由流动。这将提高全球教育水平,减少教育不平等现象,让更多人获得更好的发展机会。在发展中国家或者偏远地区,由于缺乏合格的教师和设施,很多孩子无法接受基础教育或者高质量教育。通过AI技术,我们可以为这些孩子提供远程教育或者智能辅导,让他们可以接触到优秀的教师和内容,并且根据自己的进度和水平进行个性化学习。AI提供的多语言翻译或者语音识别等功能,还可以让他们跨越语言障碍,与来自不同国家或者具有不同文化背景的人进行交流、合作。
在AI不断渗透到各行各业的时代,教育领域也正在经历一场变革。这不仅重塑了学习者的学习方式,也改变了家长和教育工作者的角色。本书就是在这样的大背景下应运而生的,试图解答一个关键问题:如何在AI浪潮中找到最佳教育策略,保障孩子们在未来社会的竞争力?
我坚信,家长的理解、接纳与参与是孩子们顺利适应AI时代不可或缺的一环。AI可能会让许多人感到不安或恐惧,但通过深入了解其运作机制和可能的影响,相信我们可以将恐惧转化为力量。为此,本书详细解析了AI在教育中的具体应用,以及AI对学习方式的深远影响。
未来的教育中,家长将从传统的孩子和学校的桥梁角色,转变为孩子学习的合作伙伴。家长们需要以新的眼光看待教育,视其为一个终身的、无处不在的过程,并把AI视作这个过程中的重要辅助工具。
希望通过《AIGC重塑教育》这本书,让我们能深入理解并掌握在AI时代帮助孩子学习的策略,确保他们能够积极面对AI带来的机遇和挑战,同时避免其潜在的风险。只有全社会共同参与,我们才能充分挖掘AI的潜力,构建一个更加美好的教育环境。
作者:刘文勇
来源:IT阅读排行榜
本文摘编自《AIGC重塑教育:AI大模型驱动的教育变革与实践》,机械工业出版社出版
▼
推荐语:
领跑ChatGPT时代教育和学习行动指南
全面助力教师、家长、学生在未来竞争中遥遥领先
高途教育科技集团大学生业务总经理刘文勇撰写
多位教育家、企业家鼎力推荐
配套视频讲解,持续更新AIGC领域前沿知识
长按上方二维码,可观看刘文勇老师直播回放。
📝活动参与规则 送书规则:
✅参与方式:关注博主、点赞、收藏、评论(每人最多评论三次)
⛳️本次送书1~5本【取决于阅读量,阅读量越多,送的越多】
📆 活动截止时间:2023-12-13 20:00:00 | 由博主动态公布抽奖结果
🔥注:活动结束后,会私信中奖粉丝的,各位注意查看私信哦!
php数据库操作 php连接mysql数据库 <?php $host='localhost'; // 数据库主机名 $username="root"; // 数据库用户名 $password="al6"; // 数据库密码 $dbname="mysql"; // 数据库名 $connID=mysqli_connect($host,$username,$password,$dbname); // 建立数据库连接 if (mysqli_select_db($connID,$dbname)) { // 选择数据库 echo "数据库连接成功"; // 数据库连接成功 } else { echo "数据库连接失败"; // 数据库连接失败 } ?> 使用 PHP脚本 创建数据库
PHP 使用 mysqli_query 函数来创建或者删除 MySQL 数据库。
该函数有两个参数,在执行成功时返回 TRUE,否则返回 FALSE。
语法
mysqli_query(connection,query,resultmode);
实例 以下实例演示了使用PHP来创建一个数据库:
<?php $dbhost = 'localhost'; // mysql服务器主机地址 $dbuser = 'root'; // mysql用户名 $dbpass = 'a56'; // mysql用户名密码 $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(!