OrangePi Zero 3学习笔记(Android篇)1 - 搭建环境
目录
1. 下载安装Ubuntu22.04
1.1 安装增强功能
1.2 设置共享文件夹
1.3 创建AOSP.vdi
1.4 更新相关软件包
2. 解压AOSP源代码
3. 编译代码
3.1 编译uboot/Linux
3.2 编译AOSP源代码
3.3 内存问题调试记录
3.3.1 查看具体什么问题
3.3.2 关闭dex2oat(无效)
3.3.3 增加cache(无效)
3.3.4 修改art/dex2oat/dex2oat.cc
3.3.5 进入控制台的方式编译
4. 烧录
4.1 恢复TF卡
4.2 烧录镜像
5. 使用命令链接WIFI
5.1 打开wifi
5.2 链接wifi路由器
5.3 查看wifi状态
6. 实用工具
6.1 SSH
6.2 Samba
6.3 Visual Studio Code
6.4 adb
编译环境需要使用Ubuntu22.04,在Windows环境下使用Virtual Box V7.0.8 r156879 (Qt5.15.2)虚拟系统。
1. 下载安装Ubuntu22.04
Virtual Box V7.0.8可以支持自动安装,改一下密码和主机名即可。
安装完成后默认是英文版本,如果需要中文版本,建议手动安装
1.1 安装增强功能
点击VBox的“设备”->“安装增强功能”,进入Ubuntu终端,进入增强功能光盘,运行
sudo apt-get install gcc make perl
sudo ./VBoxLinuxAdditions.run
1.2 设置共享文件夹
此时进系统是访问不了共享文件夹的,需要添加用户
sudo usermod -aG vboxsf xxx
其中xxx是你的用户名。
重启后就可以访问共享文件夹了。
1.3 创建AOSP.vdi
相当于创建一个新的硬盘,用来放AOSP源代码(最少200GB)
fdisk /dev/sdb
进入系统是看不到这个硬盘的,需要格式化。
sudo fdisk -l
查看硬盘信息,找到对应的硬盘,例如这里是/dev/sdb。然后给这个硬盘分区,只分一个区即可
fdisk /dev/sdb
命令(输入 m 获取帮助): n
选择 (默认 p): p
分区号 (1-4, 默认 1): 1
第一个扇区 (2048-419430399, 默认 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-419430399, 默认 419430399):
除了第一个命令输入n,其他命令可以直接回车即可(即选择默认值)。
最后输入命令w退出fdisk。
格式化这个分区:
sudo mkfs.ext4 /dev/sdb1
此时可以看到这个硬盘会自动挂载。最好重新挂载一下(自动挂载的名字很长)
在主文件夹内创建一个OrangePiZero3的文件夹。
sudo mount -t ext4 /dev/sdb1 /home/pq/OrangePiZero3
使用df -h查看:
/dev/sdb1 196G 28K 186G 1% /home/pq/OrangePiZero3
设置开机自动挂载:
sudo gnome-text-editor /etc/fstab
在文件结尾添加一行:
/dev/sdb1 /home/pq/OrangePiZero3 ext4 defaults 0 0
修改一下文件夹权限:
sudo chmod -R 777 /home/pq/OrangePiZero3
1.4 更新相关软件包
sudo apt-get update
sudo apt-get install -y git gnupg flex bison gperf build-essential \
zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache \
libgl1-mesa-dev libxml2-utils xsltproc unzip u-boot-tools python-is-python3 \
libssl-dev libncurses5 clang gawk
1.5 网络配置
主要是为了固定IP,避免使用SSH时IP变化后需要重新配置。
虚拟机设置2个网卡,第一个设置为“桥接网卡”,另外一个设置为“网络地址转换(NAT)”。桥接网卡的方式用来固定IP,而NAT用于访问外网。
使用ifconfig,看一下哪个网卡是和主机一样的IP掩码,将其IP固定就可。
2. 解压AOSP源代码
从官方提供的百度云盘上下载对应AOSP源代码。
将多个压缩包合并为一个压缩包:
cat H618-Android12-Src.tar.gza* > H618-Android12-Src.tar.gz
然后解压:
tar -xvf H618-Android12-Src.tar.gz -C /home/pq/OrangePiZero3
注意,这个tar.gz文件必须放在Ubuntu系统里面解压,千万不要通过共享文件夹解压,可能会冒出一些莫名的问题。
3. 编译代码
可以将Android系统分为uboot、Linux内核和AOSP,而uboot/Linux内核放在解压出来的longan文件夹内,其他则为AOSP。
3.1 编译uboot/Linux
终端进入longan文件夹,首先运行./build.sh config 设置编译选项,每一步的选择如下:
All available platform:0. android1. linuxChoice [android]: 0All available ic:0. h618Choice [h618]: 0All available board:0. ft1. p12. p23. p74. p7l5. perf16. perf27. perf38. qaChoice [ft]: 2All available flash:0. default1. norChoice [default]: 0All available kern_ver:0. linux-5.4Choice [linux-5.4]: 0All available arch:0. arm1. arm64Choice [arm]: 1
然后运行./build.sh编译即可。
如果要clean,可以执行./build.sh -f
PS:要clean是因为不知道为什么,烧录进去的img跑不起来,shell老是提示错误(实际上是因为后面的make的时候-j4这个参数太大导致,用-j2后恢复正常):
[2671]Jump to second Boot.
NOTICE: BL3-1: v1.0(debug):54937d5
NOTICE: BL3-1: Built : 17:44:59, 2021-12-13
NOTICE: BL3-1 commit: 8
NOTICE: hardware check error1
PANIC in EL3 at x30 = 0x0000000048001f54
更多的命令可以查看build文件夹里面的mkcommon.sh
3.2 编译AOSP源代码
对于Android 12的编译,官方推荐要使用16GB的内存,虚拟机只分配了8GB,可以尝试加大交换内存空间(尝试是失败的,最终是加了一根内存条)。
返回上一级目录,环境设置:
source build/envsetup.sh
选择lunch版本
lunch apollo_p2-userdebug
编译
make -j2
-j2表示2个进程编译,可以根据自己的电脑配置设定。 注意,最好不要太大,不然可能编译没问题,但是烧录到板子上会出错。现在的版本应该是不需要这个参数,会自动选择合适的参数。
打包
pack
编译生成的安卓镜像存放路径为:
longan/out/h618_android12_p2_uart0.img
3.3 内存问题调试记录
有时候会出现编译错误(其实就是内存不够导致的,内存必须大于16GB,其他方式都无效)。
ERROR: Dex2oat failed to compile a boot image.It is likely that the boot classpath is inconsistent.Rebuild with ART_BOOT_IMAGE_EXTRA_ARGS="--runtime-arg -verbose:verifier" to see verification errors.
3.3.1 查看具体什么问题
make -j2 ART_BOOT_IMAGE_EXTRA_ARGS="--runtime-arg -verbose:verier" -j1
不过这个命令有时候跑不完,运行会自动关闭终端。
3.3.2 关闭dex2oat(无效)
export WITH_DEXPREOPT=false
无效。
3.3.3 增加cache(无效)
安装ccache
sudo apt-get install ccache
编辑~/.bashrc文件
sudo gnome-text-edit ~/.bashrc
在文件结尾添加:
export CCACHE_DIR="/home/pq/.ccache"
export CC="ccache gcc" export CXX="ccache g++"
export PATH="$PATH:/usr/lib/ccache"
注意CCACHE_DIR中改为自己的用户名。
更新环境变量
source ~/.bashrc
配置更大的cache
ccache -M 20G
20G表示分配20G的cache空间。不过,也没有用。
3.3.4 修改art/dex2oat/dex2oat.cc
参考文档:
Android dex2oat 导致编译失败:ERROR: Dex2oat failed to compile a boot image_android编译dex2oatd报错_qgcqk的博客-CSDN博客
在编辑器中查找“in_length”,把对应地方的程序改一下,原来的是直接将文件拷贝(int64 in_length = in->GetLength),当文件比较大的时候就出问题了,所以改为8K循环拷贝。
std::unique_ptr<File> out(OS::CreateEmptyFile(oat_unstripped_[i].c_str()));
size_t buffer_size = 8192;
std::unique_ptr<uint8_t[]> buffer(new uint8_t[buffer_size]);
if(out == nullptr){PLOG(ERROR) << "Failed to pen oat file for writing:" << oat_unstripped_[i];return false;
}
while(true)
{int bytes_read = TEMP_FAILURE_RETRY(read(in->Fd(), buffer.get(), buffer_size));if (bytes_read <= 0)break;bool write_ok = out->WriteFully(buffer.get(), bytes_read);CHECK(write_ok);
}
这一步改完有效,不过后面会出同样的错误提示。
还有会出现编译时间太长,终端自动关闭,这种方式可以通过再次make解决。
3.3.5 进入控制台的方式编译
Ubuntu默认是进入图形界面,可以进入控制台以节省内存。
进入控制台:
sudo systemctl set-default multi-user
恢复图形模式:
sudo systemctl set-default graphical
设置后重启即可进入相应的模式。
在纯命令行模式下会出现无法显示中文的问题,参考:
Ubuntu(20.04)在纯命令行模式下中文出现菱形乱码的解决办法(Ubuntu版本应该是通用的)_ubuntu命令行菱形乱码_天才花道的博客-CSDN博客
首先安装字库
sudo apt-get install zhcon
添加用户到video中
sudo adduser $(whoami) video
重启一下,运行该字库
zhcon --utf8
编辑一下.bashrc
sudo vim ~/.bashrc
找到alias l='ls -CF',在后面一行添加:
alias hz='zhcon --utf8'
4. 烧录
TF卡通过读卡器插入Windows系统,通过官方提供的工具PhoenixCard烧录。
4.1 恢复TF卡
因为烧录过Android镜像的TF卡分区会比较多,所以先将TF卡恢复一下,如下图:
4.2 烧录镜像
选择固件镜像文件,然后选择“启动卡”,选择正确的TF卡,最后点击“烧卡”。
5. 使用命令链接WIFI
由于Zero3的开发板默认不带屏幕,且没有Micro HDMI线,所以需要采用命令的方式链接WIFI。
首先要进入shell(可以插入USB使用adb shell或串口console输入)
5.1 打开wifi
cmd wifi set-wifi-enabled enabled
5.2 链接wifi路由器
cmd -w wifi connect-network ssid wpa2 password
其中ssid是wifi网络名,password是wifi的密码。
5.3 查看wifi状态
cmd wifi status
6. 实用工具
6.1 SSH
在Ubuntu中安装SSH
sudo apt-get install openssh-server
安装完成后使能开机自启动SSH服务器功能:
sudo systemctl enable ssh
然后重启一下ssh服务:
sudo systemctl restart ssh
在VBox的设置里面,设置网络的端口转发规则,如下图:
在Windows端查看虚拟机的IP地址,如下图192.168.56.1
在windows端安装客户端,例如Tabby,官方给的是MobaXterm
点中Session,如下图
弹出界面:
位置2填入之前查的IP地址:192.168.56.1
位置3填入用户名
最后设置的效果:
6.2 Samba
samba是Linux系统上实现SMB协议(Server Messages Block,信息服务块)的一个免费软件。SMB协议是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。
sudo apt-get install samba
修改配置文件:
sudo gnome-text-editor /etc/samba/smb.conf
在合适的位置添加一个新类目:
[OrangePiZero3]comment = OrangePiZero3path = /home/pq/OrangePiZero3browseable = truewritable = true
保存退出,然后执行下面的命令添加一个用户(最好和Ubuntu的用户名一样)
sudo smbpasswd -a pq
使能并复位smb
sudo systemctl enable smbd
sudo systemctl restart smbd
然后把VBox的网络连接方式改一下,改为桥接网卡
回到Ubuntu执行ifconfig查看ip地址,记住这个地址(例如192.168.13.100),在windows端Winr + R,填入这个地址即可访问Ubuntu下的共享文件夹了。
注意,此时Ubuntu的IP地址变掉了,6.1的SSH配置需要同步修改,把IP地址改为新的地址即可。
此时最好把Ubuntu的IP地址固定。
6.3 Visual Studio Code
VSCode也可以直接使用SSH的方式编辑Ubuntu中的源代码。
位置1:选择“远程资源管理器”
位置2:点击“+”,添加一个新的远程
位置3:输入
ssh -22 pq@192.168.3.85
-22表示端口号,@前是用户名,@后是IP地址(在Ubuntu中可以通过ifconfig得到,注意这里的虚拟机网络设置里面选择的是桥接网卡的方式)。
随后选择第一个配置文件即可。
如果需要修改这个配置,可以点击位置2的配置图标(上图鼠标位置),选择对应的配置文件。
注意:可以采用“用户@ IP地址”的方式设置Host,这样SSH会直接引用这个字符串作为ssh命令的参数。
然后连接Server,选择Linux
注意,如果提示“试图写入的管道不存在”的错误,可以尝试修改ssh的路径。首先先确定git中ssh的位置,例如:C:\Program Files\Git\usr\bin。在VSCode找到配置的图标,选择Setting
搜索ssh,找到“Edit in setting.json”
在里面添加"remote.SSH.path": "C:\\Program Files\\Git\\usr\\bin\\ssh.exe",
下图中后面2个是VSCode自动添加的。
6.4 adb
这里只介绍在windows中使用adb的情况,Ubuntu是类似的。
下载
https://dl.google.com/android/repository/platform-tools-latest-windows.zip
解压,然后将路径加到windows的环境变量中。
连接到Zero 3开发板:
C:\>adb connect 192.168.3.81:5555
* daemon not running; starting now at tcp:5037
* daemon started successfully
connected to 192.168.3.81:5555
相关文章:
OrangePi Zero 3学习笔记(Android篇)1 - 搭建环境
目录 1. 下载安装Ubuntu22.04 1.1 安装增强功能 1.2 设置共享文件夹 1.3 创建AOSP.vdi 1.4 更新相关软件包 2. 解压AOSP源代码 3. 编译代码 3.1 编译uboot/Linux 3.2 编译AOSP源代码 3.3 内存问题调试记录 3.3.1 查看具体什么问题 3.3.2 关闭dex2oat(无…...
RabbitMq(尚硅谷)
RabbitMq 1.RabbitMq异步调用 2.work模型 3.Fanout交换机(广播模式) 4.Diret交换机(直连) 5.Topic交换机(主题交换机,通过路由匹配) 6.Headers交换机(头交换机) 6…...
OpenAI的“四面楚歌”:从营利到非营利,一场关于AGI控制权的革命
引言 当“奥特曼妥协”与“四面楚歌”并置时,OpenAI的这次重大调整,仿佛在科技史上投下一颗震撼弹。这家曾因“拒绝盈利”而备受争议的人工智能公司,如今却在资本与理想之间艰难抉择——放弃营利性转型,回归非营利初心。这不仅是对…...
[250505] Arch Linux 正式登陆 Linux 的 Windows 子系统
目录 Arch Linux 正式登陆 Windows Subsystem for Linux (WSL) Arch Linux 正式登陆 Windows Subsystem for Linux (WSL) Arch Linux 社区与 Microsoft 合作,正式宣布 Arch Linux 现已提供官方的 Windows Subsystem for Linux (WSL) 镜像。这意味着 Windows 用户现…...
MySQL 日期格式化:DATE_FORMAT 函数用法
MySQL 日期格式化:DATE_FORMAT 函数用法 在 MySQL 中,DATE_FORMAT() 函数用于将日期或时间值格式化为指定的字符串格式。 正确语法 DATE_FORMAT(date, format)常用格式说明符 说明符描述%Y四位数的年份(例如:2023)…...
java springboot解析出一个图片的多个二维码
引入 <dependencies><!-- ZXing --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.4.1</version></dependency><dependency><groupId>com.google.zxing…...
【四川省专升本计算机基础】第一章 计算机基础知识(上)
前言 对计算机专业的同学来说这门课程可能很简单,容易拿高分(125分以上),但也可能很容易大意丢分。因为本门课程人称:背多分。大意丢分者的心态觉得计算机基础都学过,内容很简单,最后才开始背计…...
406错误,WARN 33820 --- [generator] [nio-8080-exec-4] .w.s.m.s.DefaultHa
在接口调用过程中,后端出现.w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: No acceptable representation]错误。检查了一个小时才发现我返回的对象没有写getter方法, 当Spring B…...
基于STM32、HAL库的SST26VF064B NOR FLASH存储器驱动应用程序设计
一、简介: SST26VF064B是Microchip公司生产的一款64Mbit(8MB)串行闪存器件,采用SPI接口通信,具有以下特点: 工作电压:2.7-3.6V 最高104MHz时钟频率 统一4KB扇区结构 快速擦除和编程时间 低功耗特性 支持标准SPI、Dual SPI和Quad SPI模式 二、硬件接口: STM32L4引脚SST26V…...
美信监控易:全栈式自主可控的底层架构优势
在当今数字化时代,企业的运维管理面临着越来越多的挑战。为了确保业务的稳定运行,企业需要一款高效、可靠的运维管理软件。北京美信时代的美信监控易运维管理软件,以其全栈式自主可控的底层架构优势,成为了运维团队的理想选择。 …...
Class AB OPA corner 仿真,有些corenr相位从0开始
Class AB OPA做 STB 仿真时,会遇到有些corner(c0_0、c0_4、c0_5)相位从0开始的情况。 首先应该去检查电路,电路里是否有正反馈;排除没有正反馈后,考虑是图中的红框中的线性跨导环中的Vds 太大导致了碰撞电离导致的。 查找了网上…...
【JEECG】BasicTable单元格编辑,插槽添加下拉组件样式错位
1.功能说明 BasicTable表格利用插槽,添加组件实现单元格编辑功能,选择组件下拉框错位 2.效果展示 3.解决方案 插槽内组件增加::getPopupContainer"getPopupContainer" <template #salesOrderProductStatus"{ column, re…...
第十五届蓝桥杯单片机国赛-串口解析
串口通信像是蓝桥杯单片机组国赛中一个若隐若现的秘境,总在不经意间为勇者们敞开大门。然而,初次探索这片领域的冒险者,常常会被其神秘莫测的特性所震慑,黯然退场(编不下去了,直接进入正题)。 附…...
Flutter开发HarmonyOS实战-鸿蒙App商业项目
Flutter开发HarmonyOS实战内容介绍: Flutter开发HarmonyOS 鸿蒙App商业项目(小米商城APP)实战视频教程 Flutter开发鸿蒙APP是在《FlutterGetx仿小米商城》项目基础之上讲解的,调试Flutter HarmonyOS应用需要有HarmonyOS Next的手机…...
【回眸】香橙派Zero2 超声波模块测距控制SG90舵机转动
前言 知识准备 超声波模块时序图 gettimeofday()函数作用 gettimeofday()函数原型 tv结构体 获取当前系统时间与格林威治时间的时间差 获取香橙派数10万秒花费的时间 使用超声波模块获取到障碍物距离 SG90舵机模块 舵机模块的作用 舵机模块方波时序图 舵机模块工作原…...
RabbitMQ 添加新用户和配置权限
以下是关于使用 sudo rabbitmqctl add_user 命令创建新用户的详细示例,同时包含创建用户后进行权限设置、角色设置等相关操作的示例。 1. 前提条件 确保你的 RabbitMQ 服务已经正常运行,并且你具有执行 sudo 命令的权限。 2. 创建新用户 假设我们要创…...
【前缀和】矩阵区域和
文章目录 1314. 矩阵区域和解题思路1314. 矩阵区域和 1314. 矩阵区域和 给你一个 m x n 的矩阵 mat 和一个整数 k ,请你返回一个矩阵 answer ,其中每个 answer[i][j] 是所有满足下述条件的元素 mat[r][c] 的和: i - k <= r <= i + k, j - k <= c <= j + k …...
编程日志4.25
栈的stl模板 可直接用<stack>库进行调用 #include<iostream> #include<stack>//栈的模板库 using namespace std; int main() { stack<int> intStk;//整数 栈 stack<double> doubleStk;//浮点数 栈 intStk.push(1); intStk.pu…...
【中间件】brpc之工作窃取队列
文章目录 BRPC Work Stealing Queue1 核心功能2 关键数据结构2.1 队列结构2.2 内存布局优化 3 核心操作3.1 本地线程操作(非线程安全)3.2 窃取操作(线程安全) 4 设计亮点4.1 无锁原子操作4.2 环形缓冲区优化4.3 线程角色分离 5 性…...
用OMS从MySQL迁移到OceanBase,字符集utf8与utf8mb4的差异
一、问题背景 在一次从MySQL数据库迁移到OceanBase的MySQL租户过程中,出现了一个转换提示: [WARN][CONVER] he table charset:utf8->utf8mb4, 你可能会担心这种转换可能导致字符集不兼容的问题。但通过查阅相关资料可知,utf8m…...
知乎前端面试题及参考答案
Webpack 和 Vite 的区别是什么? 构建原理: Webpack 是基于传统的打包方式,它会将所有的模块依赖进行分析,然后打包成一个或多个 bundle。在开发过程中,当代码发生变化时,需要重新构建整个项目,构建速度会随着项目规模的增大而变慢。Vite 利用了浏览器对 ES 模块的支持,…...
项目中为什么选择RabbitMQ
当被问及为什么选择某种技术时,应该结合开发中的实际情况以及类似的技术进行分析,适合的技术才是最好的。 在项目中为什么选择RabbitMQ 作为消息中间件,主要可以基于以下几方面进行分析: 1. 可靠性 消息持久化:Rabbi…...
深入解析二维矩阵搜索:LeetCode 74与240题的两种高效解法对比
文章目录 [toc]**引言** **一、问题背景与排序规则对比****1. LeetCode 74. 搜索二维矩阵****2. LeetCode 240. 搜索二维矩阵 II** **二、核心解法对比****方法1:二分查找法(适用于LeetCode 74)****方法2:线性缩小搜索范围法&…...
Qt案例 以单线程或者单生产者多消费者设计模式实现QFTP模块上传文件夹功能
前文:Qt案例 使用QFtpServerLib开源库实现Qt软件搭建FTP服务器,使用QFTP模块访问FTP服务器 已经介绍了Qt环境下搭建FTP服务器或者使用QFTP上传的方式示例, 这里主要介绍下使用QFTP模块上传整个文件夹的案例示例。 目录导读 前因后果单线程处理1.定义FTPFolderUpload 继承 QT…...
含锡废水回收率提升技术方案
一、预处理环节优化 物理分离强化 采用双层格栅系统(孔径1mm0.5mm)拦截悬浮物,配套旋流分离器去除密度>2.6g/cm的金属颗粒,使悬浮物去除率提升至85%。增设pH值智能调节模块,通过在线pH计联动碳酸钠/氢氧化钠投加系…...
第八章,STP(生成树协议)
广播风暴----广播帧在二层环路中形成逆时针或顺时针的转动的环路,并且无限循环,最终导致设备宕机,网络瘫痪。 MAC地址表的翻摆(漂移)----同一个数据帧,顺时针接收后将记录MAC地址及接口的对应信息ÿ…...
《面向对象程序设计-C++》实验五 虚函数的使用及抽象类
程序片段编程题 1.【问题描述】 基类shape类是一个表示形状的抽象类,area( )为求图形面积的函数。请从shape类派生三角形类(triangle)、圆类(circles)、并给出具体的求面积函数。注:圆周率取3.14 #include<iostream> #in…...
PCIe - ZCU106(RC) + KU5P(EP) + 固化
目录 1. 简介 1.1 Data Mover 1.2 描述符 2. ZCU102 2.1 Ubuntu OS 2.2 USB Host 2.2.1 连接拓扑 2.2.2 设备类型 2.2.3 USB 跳帽设置 2.3 无线网卡 2.4 PCIe Info 2.4.1 Diagram 2.4.2 lspci -tv 2.4.3 lspci -v 2.4.2.1 设备基本信息 2.4.2.2 控制与状态寄存…...
网络编程核心技术解析:从Socket基础到实战开发
网络编程核心技术解析:从Socket基础到实战开发 一、Socket编程核心基础 1. 主机字节序与网络字节序:数据传输的统一语言 在计算机系统中,不同架构对多字节数据的存储顺序存在差异,而网络通信需要统一的字节序标准,这…...
SQL注入总结
一.sql注入 原理:当一个网站存在与用户交互的功能(如登录表单、搜索框、评论区等),并且用户输入的数据未经充分过滤或转义,直接拼接到后台数据库查询语句中执行时,就可能引发SQL注入漏洞。攻击者可以通过构…...
conda 安装cudnn
通过 Conda 安装 cuDNN 确保你有 NVIDIA GPU 和 CUDA Toolkit:首先,确保你的系统上安装了 NVIDIA GPU 和 CUDA Toolkit。你可以通过运行以下命令来检查 CUDA 是否已安装:nvcc --version 如果没有安装 CUDA,你需要先从 NVIDIA CU…...
强啊!Oracle Database 23aiOracle Database 23ai:使用列别名进行分组排序!
大家好,这里是架构资源栈!点击上方关注,添加“星标”,一起学习大厂前沿架构! 从 Oracle Database 23ai 开始,您可以在 GROUP BY 和 HAVING 子句中直接使用列别名。此功能在早期版本的 Oracle Database 中不…...
RAG 2.0 深入解读
一、Introduction 过去一年可谓是RAG元年,检索增强生成技术迅速发展与深刻变革,其创新与应用已深刻重塑了大模型落地的技术范式。站在2025年,RAG不仅突破了早期文本处理的局限,更通过多模态融合、混合检索优化和语义鸿沟跨越等突…...
Excel Vlookup
VLOOKUP(A2, Sheet2!A:B, 2, 0) 代表的是检查A2,匹配源是sheet2表AB两列 Sheet2!A:B:指定要在其中查找数据的范围,这里是 Sheet12中的 A 列和 B 列,A 列是查找的依据列,B 列是要返回值的列。2:表示要返回查找区域中的…...
css媒体查询及css变量
媒体查询是 CSS 样式表最重要的功能之一,所谓媒体查询指的就是根据不同的媒体类型(设备类型)和条件来区分各种设备(例如:电脑、手机、平板电脑、盲文设备等),并为它们分别定义不同的 CSS 样式。…...
CSS网格布局
网格布局将元素占用的空间划分为二维格子,下级元素放置在格子所在的位置上。划分格子的元素叫做网格容器,其 display 属性是 grid (块元素)或 inline-grid (内联块元素)。网格容器的下级元素叫做网格项。容…...
Windows远程连接MySQL报错,本地navicat能连接MySQL
一、报错 telnet 119.87.111.79 3306“无法打开到主机的连接。在端口 3306: 连接失败” 表明无法通过 TCP 协议连接到目标服务器的 3306 端口。 二、目的 (1)Telnet 测试的目的 Telnet 仅用于测试 TCP 端口是否开放ÿ…...
Github打不开怎么办?
国内无法打开github,使有watt toolkit一键加速即可打开。 加速器 加速器直接加速Github原站,在开发者使用或者需要登录账号时非常有效 Watt Toolkit(原Steam) 官网地址:Watt Toolkit 一、进入官网后,点…...
亿级流量系统架构设计与实战(四)
本章关键词 : 读 / 写分离 、 数据缓存 、 缓存更新 、 CQRS 、 数据分片 、 异步写。 高并发架构设计的要点 形成高并发系统的必要条件 高性能、高可用、可扩展。 高性能: 性能代表一个系统的并行处理能力,在同样的硬件设备条件下 , 性能越高 , 越能节约硬件资源。高可…...
Java基础问题——八股盛宴 | 3w字分享
目录 面向对象与面向过程的区别? Java面向对象有哪些特征,如何应用? 介绍下Java中的四种引用? Java中创建对象有几种方式? Java中的序列化和反序列化是什么? 什么是Java中不可变类? Java…...
保障企业的数据安全需要做什么?
守护企业数据安全,犹如构筑一座固若金汤的城堡,需要从技术壁垒、管理护城河、流程吊桥和人员守卫等多维度精心布局,打造环环相扣的立体防御体系。我们从以下关键项分析: 一、技术层面 数据加密 对敏感数据(如客户信息、…...
Flutter开发IOS蓝牙APP的大坑
Core Bluetooth 框架限制:iOS 的 Core Bluetooth 框架存在限制,如果指定的特征配置同时允许通知(Notifications)和指示(Indications),调用相关方法设置通知值时,默认仅会开启通知功能…...
LeetCode 解题思路 45(分割等和子集、最长有效括号)
解题思路: dp 数组的含义: 在数组中是否存在一个子集,其和为 i。递推公式: dp[i] | dp[i - num]。dp 数组初始化: dp[0] true。遍历顺序: 从大到小去遍历,从 i target 开始,直到 …...
AI Agent 入门指南:从 LLM 到智能体
AI. AI. AI. 最近耳朵里是不是总是被这些词轰炸?特别是“Agent”、“AI Agent”、“智能体”、“Agentic”…… 感觉一夜之间,AI 就从我们熟悉的聊天框里蹦出来,要拥有“独立思考”和“自主行动”的能力了? 说实话,一…...
高级java每日一道面试题-2025年5月02日-基础篇[反射篇-编码]-使用反射,获取Class对象
如果有遗漏,评论区告诉我进行补充 面试官: 编写代码通过三种方式(类名.class、对象.getClass()、Class.forName())获取java.util.ArrayList的Class对象。 我回答: 在Java中,反射(Reflection)是一种强大的机制&#…...
【bug】fused_bias_act_kernel.cu卡住没反应
简述 在推理人脸修复face restoration算法 GPEN的时候,发现有时候fused_bias_act_kernel.cu卡住没反应。 解决 清理下缓存,让程序自己再编译下...
小游戏(2)扫雷游戏
一、简述 鸽子的时间太长了,其实学完数组和函数就应该搞出来这个丐版的小游戏了,不耽误,反正总归是轮到了,嘻嘻。 二、依旧菜单\. 我们这里写的是一个丐版的扫雷游戏,难度就固定了,所以菜单写起来就是玩游…...
如何在vscode中set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`
1.打开工作区设置文件 在 VS Code 中通过文件 -> 首选项 -> 设置,接着在设置窗口的右上角点击打开设置(JSON),这会打开settings.json文件。 2.添加环境变量设置 "terminal.integrated.env.linux": { "TF_EN…...
leetcode 24. 两两交换链表中的节点
题目描述 代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next…...
微调大模型如何准备数据集——常用数据集,Alpaca和ShareGPT
微调大模型如何准备数据集——常用数据集,Alpaca和ShareGPT 数据集准备常用数据集自定义数据集AlpacaShareGPT数据集准备 常用数据集 预训练数据集 Wiki Demo (en)RefinedWeb (en)RedPajama V2 (en)Wikipedia (en)Wikipedia (zh)Pile (en)...