编写系统服务来启动weed 通过weed命令的内容比较多,想要方便使用我们可以将命令生成系统服务的方式来进行启动关闭。
使用命令
1.master服务 sudo vi /etc/systemd/system/seaweedmaster.service 编写内容
[Unit] Description=SeaweedFS Server [Service] Type=simple User=root Group=root ExecStart=/usr/local/bin/weed master -ip=192.168.1.31 -port=9333 WorkingDirectory=/usr/local/bin SyslogIdentifier=seaweedfs-master [Install] WantedBy=multi-user.target 2.volume服务 使用命令创建服务文件
sudo vi /etc/systemd/system/seaweedvolume.service 编辑内容
[Unit] Description=SeaweedFS Volume [Service] Type=simple User=root Group=root ExecStartPre=/bin/sleep 30 ExecStart=/usr/local/bin/weed volume -dir="/media/jmn/HDD/SeaweedFS" -port=8801 -max=100 WorkingDirectory=/usr/local/bin/ SyslogIdentifier=seaweedfs-volume [Install] WantedBy=multi-user.target 3.filer服务 生成服务文件:
sudo vi /etc/systemd/system/seaweedfiler.service 编辑文件内容:
[Unit] Description=SeaweedFS Filer [Service] Type=simple User=root Group=root ExecStartPre=/bin/sleep 30 ExecStart=/usr/local/bin/weed filer -master=localhost:9333 -port=8888 -port.grpc=18888 -disableDirListing WorkingDirectory=/home/ SyslogIdentifier=seaweedfs-filer [Install] WantedBy=multi-user.
pip install gdown 首先获取链接
得到一个类似https://drive.google.com/file/d/1wCthhCvLh_Usa9f6EVStdhsEcdgo7zlY/view?usp=sharing的链接。其中d/到/view之间的部分是ID。
使用:
gdown https://drive.google.com/uc?id=ID 断点续传
gdown https://drive.google.com/uc?id=ID -c
实验环境: Ubuntu20.04xv6实验必要的依赖环境能通过make qemu进入系统 问题描述 在使用gdb调试的过程中,无法通过riscv64-linux-gnu-gdb或者riscv64-unknown-elf-gdb进入gdb,显示**‘riscv64-linux-gnu-gdb’ Command not found**。
网上的解法各异,但是鲜有成功解决该问题,包括sudo apt-get install gdb-multiarch。成功安装后,能通过键入gdb-multiarch进入gdb调试界面,但是打入断点b _entry后显示’the program is not being running’。
参考资料:https://blog.csdn.net/LostUnravel/article/details/120397168
参考资料给出了解决方案,但是有一些细节上的问题导致仍然无法成功运行gdb,下面给出我的完整解决方案。
解决方案 安装依赖(== 确保apt版本最新!!==sudo apt-get update) sudo apt-get install libncurses5-dev python python-dev texinfo libreadline-dev sudo apt install libgmp-dev 下载gdb-9.2.tar.gz安装包,注意此处不能下载最新版本gdb13的安装包,会显示与python版本不匹配。
下载地址:https://mirrors.tuna.tsinghua.edu.cn/gnu/gdb/?C=M&O=D解压安装包到当前目录 tar -zxvf gdb-9.2.tar.gz 定位到要操作的build目录 cd gdb-9.2 mkdir build cd build 执行以下命令 ../configure --prefix=/usr/local --with-python=/usr/bin/python --target=riscv64-unknown-elf --enable-tui=yes 编译安装 make clean make -j$(nproc) 初始化gdb
借用一下参考资料:https://blog.csdn.net/LostUnravel/article/details/120397168的图片
此处需要在/home/username目录下新建目录,图中的情况需要新建gdb目录,并新建gdbinit文件。我在初始化过程中显示/home/username/.gdbinit,因此我只需要在我的用户目录下新建/.gdbinit文件即可。 vim .gdbinit 在。gdbinit文件中输入红框中add-auto-load-safe-path /home/username/.gdbinit即可。
8.安装完成,重新启动riscv64-unknown-elf,显示0x0000000000001000 in ?
系列文章目录 Hypervisor launch failed
centos7配置ssh免密登陆完成,进行ssh登陆时出现”代理承认未能使用密钥签名“
解决pip更新的代码
文章目录 系列文章目录
一、问题描述
二、启用了侧通道缓解的虚拟机可能会出现性能下降 (79832)
症状
原因
分辨率
禁用侧信道缓解的过程:
关于融合:
在 Workstation Pro 上:
注意:以上设置不适用于 VMware Workstation Player
三、实操环节
3.1、打开虚拟机设置
3.2、选择选项---高级设置
总结
一、问题描述 您正在运行的此虚拟机已启用侧通道缓解。侧通道缓解可增强安全性,但也会降低性能。
要禁用缓解,请在虚拟机设置的“高级”面板中更改侧通道缓解设置。有关更多详细信息,请参阅 VMware 知识库文章 79832,
网址为 https://kb.vmware.com/s/article/79832。
网址提示修改信息
二、启用了侧通道缓解的虚拟机可能会出现性能下降 (79832) 症状 在 Mac OS 11.0 或更高版本的 Fusion 上或在启用了基于虚拟化的安全性的 Windows 主机上的工作站上运行时启用了侧通道缓解的虚拟机可能会运行缓慢。
原因 性能下降的根本原因很可能是由于侧信道攻击(如 Spectre 和 Meltdown)的缓解措施。侧信道攻击允许恶意进程或虚拟机对受保护内核或主机内存的内容进行未经授权的读取访问。CPU 供应商引入了许多功能来保护数据免受此类攻击,例如间接分支预测屏障、单线程间接分支预测器模式、间接分支限制推测模式和 L1 数据缓存刷新。虽然这些功能可有效防止侧信道攻击,但在某些情况下可能会导致明显的性能下降。
分辨率 禁用侧信道缓解的过程: 要禁用侧信道缓解措施,请使用工作站专业版/融合 UI。 关于融合: 开始融合应关闭虚拟机转到“虚拟机>设置”>“高级”选中“禁用侧信道缓解” 在 Workstation Pro 上: 启动工作站应关闭虚拟机转到“VM >设置”>“选项”>“高级”选中“禁用启用 Hyper-V 的主机的侧信道缓解” 注意:以上设置不适用于 VMware Workstation Player 三、实操环节 3.
一、多页面设置 步骤: 1 创建主的.py文件 (以home.py)为例子 2 和主文件 同目录级下创建 名为 pages或Pages的文件夹(文件夹的名字必须为这两个,换成其他文件名的话,它就不会识别当作子页面了) 3 Terminal终端输入打开网页命令: streamlit run home.py 过程可视化
网页端
官方多页面介绍:
https://docs.streamlit.io/library/get-started/multipage-apps/create-a-multipage-app
二、主题Theming设置 方法一:只能临时更改主题颜色(F5刷新网页又变为原来的样子) 可以后你很高兴看到 网页界面确实 变了你想要的颜色, 然后你再按下F5刷新页面又回到最初的样子。这样子不能做到持久化
方法二:持久化Theming 步骤: 1 创建 .streamlit 文件夹 注意文件夹名字前 要有 . , 让后在其文件夹下创建 名为 config.toml 的文件,然后创建成功后(.streamlit/config.toml), 把刚刚楼上教程中拷贝下来的主题 复制到这个文件中,Pycharm会提示你安装 .toml文件的东西,你就点安装。
2 在终端断掉命令, 然后重新运行启动网页命令
官方主题设置介绍:
https://docs.streamlit.io/library/advanced-features/theming
看完后如果您觉得有用的话,能不能【点点赞呀~】
**
搭建新项目 前端环境 及启动项目前的相关配置 **
文章目录 搭建新项目 前端环境 及启动项目前的相关配置 前言一、编程 语言及框架二、步骤1.打开 VS2.导入项目3、配置地址及 请求端口4、启动项目5、查看报错 的日志文件6、运行 命令 安装相关有依赖及 jar 包7、特别要注意:8.并且导致 即使在 该项目的目录下 直接以管理员的身份运行 cmd 也会报错9.删除掉 package-lock.json 文件10.配置(自定义) 启动使用 命令11.启动项目12.启动项目运行命令:npm run server 三、总结 前言 提示:这里可以添加本文要记录的大概内容:
搭建新项目 前端环境
下图所示为开发时前端所用的编辑器
提示:以下是本篇文章正文内容,下面案例可供参考
一、编程 语言及框架 二、步骤 1.打开 VS 2.导入项目 3、配置地址及 请求端口 注意:在配置时 有时候 localhost 可能 不太好用,所以我们 最好配置 成 127.0.0.1 指向我们的电脑
代码如下(示例):
4、启动项目 方式一:
使用 node.js 启动项目
方式二:
使用 npm 启动项目
注:我们特别要注意 我们电脑中的 node.js 和 npm的版本问题。
*如若遇到下图所示情况,我们需要耐心的去解决。(在此记录下,后来将 node卸载后,重新安装了 node 工具重新下载之后才好使的)
先来一个常用例子
// WebSocket构造函数,创建WebSocket对象 let ws = new WebSocket('ws://localhost:8888') // 连接成功后的回调函数 ws.onopen = function (params) { console.log('客户端连接成功') // 向服务器发送消息 ws.send('hello') }; // 从服务器接受到信息时的回调函数 ws.onmessage = function (e) { console.log('收到服务器响应', e.data) }; // 连接关闭后的回调函数 ws.onclose = function(evt) { console.log("关闭客户端连接"); }; // 连接失败后的回调函数 ws.onerror = function (evt) { console.log("连接失败了"); }; // 监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,这样服务端会抛异常。 window.onbeforeunload = function() { ws.close(); } 封装的代码
上面的代码就够用,也可以查看我封装好的 WebSocket 代码(包括心跳机制):点击查看
下面详细说明常用的属性和方法
更全面的官网的文档可以去这里看:点击查看
下面是我总结的内容
WebSocket
WebSocket 对象提供了用于创建和管理 WebSocket 连接,以及可以通过该连接发送和接收数据的 API。
var ws= new WebSocket(url, protocols); 参数
至少,托管文件传输(MFT)解决方案是一种产品,它包含入站和出站文件传输的所有方面,同时使用行业标准的网络协议和无缝加密。它可以从单个集中管理点在您的网络,系统,应用程序,贸易伙伴和云环境中自动化和传输数据。各种规模的组织都可以使用MFT解决方案来满足加密文件传输的需求,范围从每周几十个到每天数千个甚至更多。
使用MFT解决方案进行加密文件传输会带来很多好处。这里有7个主要优点:
1.保持强大的网络安全实践 一个强大的解决方案将保持相同水平的网络安全实践。MFT提供完善的安全设置,包括详细的审计跟踪和针对多个安全区域的分段组,以满足严格的内部策略。维持这些繁重的网络安全措施对于成功发送加密的文件传输至关重要。
2.遵循加密协议 MFT使用几种领先的数据安全保护技术(包括Open PGP,AES,SSL和SSH)对传输和静止状态下的加密文件传输进行加密和压缩。
3.符合合规要求 多功能的MFT解决方案可轻松保护您的数据和加密文件传输,以符合PCI DSS,FISMA,HIPAA / HITECH,GBLA,SOX和GDPR等要求。
4.降低成本 尽管必须加密文件传输并保护数据安全,但代价可能很高。MFT解决方案迅速消除了您对自定义脚本和程序,单功能工具和手动过程的需求-从时间角度来看,所有这些维护和管理成本都很高。
5.通过工作流程简化数据传输 MFT解决方案使用易于设计和处理的工作流,无需使用其他工具或程序即可简化和自动化大量加密文件的传输,所有这些当然都取决于所使用的MFT解决方案的类型。
6.部署在多个平台上 成功的MFT解决方案易于调整,可以在本地,云或混合环境中实施您的解决方案。这项优势使灵活性和可伸缩性可以与业务增长相匹配,而不会造成任何滞后。
7.带有一系列出色的补充功能 当前市场上有很多文件共享/传输和集成解决方案,但是强大的企业MFT解决方案通常将包括对以下补充功能的访问:
审核和报告:审核日志可帮助您监视环境中文件移动的活动。报告指标提供了此活动的统计详细信息,图形和图表。您还可以立即收到通知,并可以恢复已删除的传输。
自动化:具有批处理自动化功能的MFT解决方案将使您能够确定和监视加密文件传输的执行时间。寻找一个可以同时执行多个加密文件传输,在另一个进程完成时触发并带有内置调度程序的选项,从而避免使用其他工具或软件来启动您的工作流。
安全的电子邮件功能:一种MFT解决方案,提供了一种安全的方式发送电子邮件,并通过将它们转换为加密的包来帮助确保消息和文件的安全性。然后可以通过受保护的HTTPS连接下载这些软件包。
怎样的方式可以解决文件传输难题呢? 以往我们会上传到某网盘,然后让对方下载。如今看来,这是一类蛮老套的方法了,现在可以和它说拜拜了。
超大文件传输现在可以使用最具创新体验的文件协作平台——镭速云平台,只需一次上传文件到平台,需要时,只需使用分享功能,无论文件再多再大,一键就可以将文件传递给相关人员。
镭速的超大文件传输功能,可以不受时间、距离、文件大小甚至网络速度的限制,随时随地的把文件传达到需要的人面前。这些功能的实现,简单到只需要一次性把文件上传到平台,点击分享按钮即可。而以后如果再对文件有多次修改,版本将自动覆盖,无需再次上传。
如何实现超大文件传输?如今看来,已经不是一个难题。使用镭速云平台,只需注册一个账号,即可同步实现!
同时,镭速传输在文件传输和存储都采用AES-256最高等级加密,确保除个人之外任何人都不可访问,具有强大的安全保障。选择镭速云,让您轻松实现超大文件传输!
镭速传输,超大文件传输专家,让您的超大文件传输畅通无阻,实现高效,便捷!
下面来看一下镭速和FTP跨国传输速度对比 跨国传输环境下,镭速传输的文件传输实际速率
跨国传输速度对比
从中国到美国,使用镭速传输海量小文件,比公司同一区域两台机器互传还快。
那么如何使用镭速文件传输呢? 下面教大家如何部署镭速服务端
一、服务器部署:下载镭速软件包,在服务器解压启动,打开防火墙TCP端口8090和UDP端口 32001;下载地址:获取镭速体验版License-文件传输-文件传输协议-镭速传输
二、客户端部署:在用户电脑网页上访问镭速服务器,下载安装镭速客户端,使用内置test用户 访问镭速服务;
三、激活授权:向镭速技术支持申请授权码;
镭速传输提供一站式文件传输加速解决方案,旨在为IT、影视、生物基因、制造业等众多行业客户实现高性能、安全、稳定的数据传输加速服务。传统文件传输方式(如FTP/HTTP/CIFS)在传输速度、传输安全、系统管控等多个方面存在问题,而镭速文件传输解决方案通过自主研发、技术创新,可满足客户在文件传输加速、传输安全、可管可控等全方位的需求。
本文《使用MFT进行加密文件传输的7个好处》内容由镭速大文件传输软件整理发布,如需转载,请注明出处及链接:使用MFT进行加密文件传输的7个好处-镭速传输
Bug场景: Windows环境,Pytorch:1.10.0,使用tensorboard时发生如下错误
Traceback (most recent call last): File "/usr/local/lib/python3.7/site-packages/torch/utils/tensorboard/__init__.py", line 2, in <module> from tensorboard.summary.writer.record_writer import RecordWriter # noqa F401 File "/usr/local/lib/python3.7/site-packages/tensorboard/summary/__init__.py", line 33, in <module> from tensorboard.summary._output import DirectoryOutput # noqa: F401 File "/usr/local/lib/python3.7/site-packages/tensorboard/summary/_output.py", line 17, in <module> from tensorboard.compat.proto import event_pb2 File "/usr/local/lib/python3.7/site-packages/tensorboard/compat/proto/event_pb2.py", line 7, in <module> from google.protobuf.internal import enum_type_wrapper ModuleNotFoundError: No module named 'google.protobuf' 解决方案: 网上比较多的方法如下(但并未奏效)
pip uninstall protobuf pip uninstall google pip install google pip install protobuf 在github上看到有人提到相关问题:参考链接
请在下面的问题中选择一些来回答:
1)你人生中第一次接触到“人工智能”的概念和产品是什么?什么让你觉得“人类做的东西的确有智能”?
阿尔法狗在韩国与围棋世界冠军李世石进行了一场五局三胜的比赛,最终以4比1的成绩赢得了比赛的胜利。这是人工智能在围棋比赛中首次战胜职业选手,让我感受的了AI强大。
2)描述你在学习中碰到的最高级的 AI 是什么?
谷歌的LaMDA
OpenAI公司的 GPT4、DALL-E 2.0
DeepMind公司的Gato
new bing
Bard
3)你听说过最近的GPT,new bing,bard,AI绘画,AI编程工具么?请看:https://blog.csdn.net/nav/ai/chatgpt 哪一项技术让你觉得最惊艳?
最让我惊艳的是GPT,GPT技术是目前最为先进的自然语言处理模型之一,拥有数亿个参数和多层的神经网络结构,可以处理超过数十亿级别的语料库数据。GPT可以根据给定的上下文信息生成质量很高的语句,甚至可以生成完整的文章、故事等长文本,和人类写作风格非常接近。
4)现在有很多帮助大家编程,发表作品的工具,CSDN 刚推出了https://inscode.csdn.net/ 这是一个教程的视频:https://inscode.csdn.net/@aresn/inscode-ai 视频在线URL:https://file.iviewui.com/inscode/InsCode-AI.mp4,还有 博客介绍
请你也在 InsCode 发布你的作品吧,请在博客中帖一个你的 InsCode 作品的链接。
https://blog.csdn.net/nav/ai/chatgpt
5)作为一个 IT/计算机/软件专业的学生,如果 AI 可以帮助人类快速编程序,那么这些专业毕业生的职业发展是更好了,还是有更大的挑战?请说说你的观点。请看这篇分析文章。
AI 可以帮助人类快速编程序对于我们来说既是一次机遇,但同时也是挑战,所以我们更要应该利用起来。
Ubuntu 系统关闭端口号方法 1,查找端口号进程PID sudo lsof -i :80 这个命令意思就是查找80端口号的进程,如果是其他端口号,把那个80改下就行
2,关闭进程 sudo kill PID 其中,PID 是要关闭的进程的进程 ID。可以通过第一步中的命令得到。
另外,如果进程无法正常终止,可以使用强制终止命令:
sudo kill -9 PID 这个命令会强行终止进程,因此可能会导致数据丢失或其他问题,应该尽量避免使用。建议先尝试使用普通的 kill 命令结束进程。
Windows 系统关闭端口号方法 1,查找进程 netstat -ano | findstr :80 2,关闭进程 taskkill /F /PID PID 后面的那个PID是替换你进程的PID,前面那个PID不要动。
其他方法- Resource Monitor Resource Monitor 是 Windows 系统自带的一个性能监视器工具,可以用来查看系统的资源使用情况,包括 CPU、内存、磁盘、网络等。通过 Resource Monitor,可以方便地查找和关闭占用特定端口的进程。
具体步骤如下:
1,打开 Resource Monitor,方法是在任务管理器中选择 Performance 选项卡,然后点击底部的 Open Resource Monitor 按钮;
2,在 Resource Monitor 中选择 Network 选项卡,在右侧的 TCP Connections 部分中找到占用需要关闭的端口的进程;
3,右键点击该进程,选择 End Process,即可结束该进程
在运行局域网中另一台电脑上的程序时,总是弹出“无法验证发行者,确定要运行此软件吗”
或者 ”Security warning: The publisher could not be verified. Are you sure…?“ 这个对话框很气人。想了很多办法,最终可以通过下面的方法完美解决:
运行 gpedit.msc, 打开组策略
用户配置 -? 管理模板 -? Windows 组件 -? 附件管理器
启用“中等危险文件类型的包含列表”,在“指定中等危险扩展名”中填入:.cmd; .bat; .exe; .js
确定后,OK,终于搞定。
原文链接:https://blog.csdn.net/u013002790/article/details/78976041
Prompt-Tuning——深度解读一种全新的微调范式 作者:王嘉宁 邮箱:lygwjn@126.com
转载请注明出处:https://wjn1996.blog.csdn.net/article/details/120607050
本博客针对Prompt进行的综述博客,暂时为半成品,持续更新中,若对您的科研和工作有所帮助,期待您的收藏与引用。
作者简介:王嘉宁,华东师范大学 数据学院 博士生,研究方向为自然语言处理、知识图谱。
首次发布日期:2021年11月19日
第一次全面更新:2023年2月3日
第二次全面更新:2023年3月29日
阅读该博客,您将系统地掌握如下知识点:
什么是预训练语言模型?什么是prompt?为什么要引入prompt?相比传统fine-tuning有什么优势?自20年底开始,prompt的发展历程,哪些经典的代表方法?面向不同种类NLP任务,prompt如何选择和设计?面向超大规模模型,如何借助prompt进行参数有效性训练?面向GPT3,什么是In-Context Learning?什么是Chain-Of-Thought?面向黑盒模型,如何使用prompt?ChatGPT里有哪些prompt技术?未来prompt的发展与研究前景 Prompt的由浅入深的理解:
1级:Prompt是一种对任务的指令;2级:Prompt是一种对预训练目标的复用;3级:Prompt本质是参数有效性训练; **热点预览 🔥预告: HugNLP 正式发布⌛️⌛️ HugNLP 框架即将发布!目前已经开放开源地址:https://github.com/HugAILab/HugNLP,欢迎Star、Issue和PR!
HugNLP是一个统一的面向自然语言处理的训练和部署框架,其支持预训练、文本分类、信息抽取、阅读理解、多项选择、代码克隆监测与修复等众多自然语言理解和生成任务的训练和推理。HugNLP完全基于HuggingFace开发,具备可扩展性强、通用型好的特点,HugNLP的打造,可以极大地方便研究者和用户上手NLP的训练和部署;
如今大语言模型和Prompt-Tuning的发展迅速,HugNLP同样集成了面向分类和生成的Prompt-tuning、In-Context Learning、Instruction-tuning等技术,并应用在NLP各种类型任务上,未来也将集成各种大模型API服务;
目前博主已经推出两个基于 HugNLP 框架训练的产品和技术方案,包括:
HugChat:模拟ChatGPT训练的面向中小规模语言模型的对话模型,主要技术是Instruction-tuning,GPT-2、LLaMA等开源模型作为Backbone。HugNLP开源了训练数据和技术方案; HugIE:统一的中文信息抽取框架,采用Global Pointer实现文本中结构化信息的抽取; HugNLP实时更新,欢迎Star、Issue和PR!
🔥预训练语言模型的发展历程: 截止23年3月底,语言模型发展走过了三个阶段:
第一阶段:设计一系列的自监督训练目标(MLM、NSP等),设计新颖的模型架构(Transformer),遵循Pre-training和Fine-tuning范式。典型代表是BERT、GPT、XLNet等;第二阶段:逐步扩大模型参数和训练语料规模,探索不同类型的架构。典型代表是BART、T5、GPT-3等;第三阶段:走向AIGC(Artificial Intelligent Generated Content)时代,模型参数规模步入千万亿,模型架构为自回归架构,大模型走向对话式、生成式、多模态时代,更加注重与人类交互进行对齐,实现可靠、安全、无毒的模型。典型代表是InstructionGPT、ChatGPT、Bard、GPT-4等。 🔥面向预训练语言模型的Prompt-Tuning技术发展历程: Prompt-Tuning自从GPT-3被提出以来,从传统的离散、连续的Prompt的构建、走向面向超大规模模型的In-Context Learning、Instruction-tuning和Chain-of-Thought。
自从GPT、EMLO、BERT的相继提出,以Pre-training + Fine-tuning 的模式在诸多自然语言处理(NLP)任务中被广泛使用,其先在Pre-training阶段通过一个模型在大规模无监督语料上预先训练一个预训练语言模型(Pre-trained Language Model,PLM),然后在Fine-tuning阶段基于训练好的语言模型在具体的下游任务上再次进行微调(Fine-tuning),以获得适应下游任务的模型。这种模式在诸多任务的表现上超越了传统的监督学习方法,不论在工业生产、科研创新还是竞赛中均作为新的主流方式。然而,这套模式也存在着一些问题。例如,在大多数的下游任务微调时,下游任务的目标与预训练的目标差距过大导致提升效果不明显,微调过程中依赖大量的监督语料等。至此,以GPT-3、PET为首提出一种基于预训练语言模型的新的微调范式——Prompt-Tuning,其旨在通过添加模板的方法来避免引入额外的参数,从而让语言模型可以在小样本(Few-shot)或零样本(Zero-shot)场景下达到理想的效果。Prompt-Tuning又可以称为Prompt、Prompting、Prompt-based Fine-tuning等。
因此简单的来说,Prompt-Tuning的动机旨在解决目前传统Fine-tuning的两个痛点问题:
降低语义差异(Bridge the gap between Pre-training and Fine-tuning):预训练任务主要以Masked Language Modeling(MLM)为主,而下游任务则重新引入新的训练参数,因此两个阶段的目标通常有较大差异。因此需要解决如何缩小Pre-training和Fine-tuning两个阶段目标差距过大的问题;避免过拟合(Overfitting of the head):由于再Fine-tuning阶段需要新引入额外的参数以适配相应的任务需要,因此在样本数量有限的情况容易发生过拟合,降低了模型的泛化能力。因此需要面对预训练语言模型的过拟合问题。 本文将深入解读Prompt-Tuning的微调范式,以综述+讨论的形式展开。
第一章:预训练语言模型 涉及知识点:
单向语言模型、双向语言模型;Transformer;预训练任务,包括MLM、NSP等;NLP的任务类型以及fine-tuning; 预训练语言模型想必大家已经不再陌生,以GPT、ELMO和BERT为首的预训练语言模型在近两年内大放异彩。预训练语言模型主要分为单向和双向两种类型:
单向:以GPT为首,强调从左向右的编码顺序,适用于Encoder-Decoder模式的自回归(Auto-regressive)模型;双向:以ELMO为首,强调从左向右和从右向左双向编码,但ELMO的主体是LSTM,由于其是串形地进行编码,导致其运行速度较慢,因此最近BERT则以Transformer为主体结构作为双向语言模型的基准。 现如今常用的语言模型大多数是BERT及其变体,它的主体结构Transformer模型是由谷歌机器翻译团队在17年末提出的,是一种完全利用attention机制构建的端到端模型,具体算法详解可详情【预训练语言模型】Attention Is All You Need(Transformer)。之所以选择Transformer,是因为其完全以Attention作为计算推理技术,任意的两个token均可以两两交互,使得推理完全可以由矩阵乘机来替代,实现了可并行化计算,因此Transformer也可以认为是一个全连接图,缓解了序列数据普遍存在的长距离依赖和梯度消失等缺陷。
1、 查看自己selenium版本
方法一:
本机进入CMD
在cmd窗口中输入
pip show selenium 如果是在Pycharm中直接安装的selenium。则有可能会有如下提示。那么请尝试方法二。
方法二:
在pycharm中查看selenium版本
步骤一:在pycharm里打开命令行,输入python
步骤二:执行 import selenium 和 help(selenium) ,将信息返到最后即可看到 VERSION信息
以上就是查看所安装的selenium版本的方法。
清楚了自己的selenium版本后,可以参考以下文章,确定每种selenium版本的元素定位方法的不同
python中selenium各个版本的元素定位方法
Python是一种面向对象、解释型、跨平台的高级程序设计语言,可应用于诸多领域,比如:web开发、网络爬虫、数据分析、自动化测试、自动化运维等,其中自动化测试是很多Python人员的首选就业方向,本文为大家总结了一些Python自动化测试面试常见问题,你答对了吗?
1、什么项目适合做自动化测试?
不变的、重复的、规范的
①任务测试明确,需求不会频繁变动
②项目周期要足够长
③自动化测试脚本可重复使用,比如:比较频繁的回归测试
④被测软件系统开发比较规范,能够保证系统的可测试性
⑤软件系统界面稳定,变动少
⑥项目进度压力不太大
2、什么是PO模式?
是指把一个具体的页面转化为编程语言当中的一个对象,页面特性转化成对象属性,页面操作转化为对象方法。
①通俗来讲把每个页面当成一个对象,页面层写定位元素方法和页面操作方法
②用例层从页面层调用操作方法,写成用例
③可以做到定位元素与脚本的分离
④主要用来实现对页面操作和测试逻辑的一个分离
3、Python中*args和**kwargs的作用?
都是不定长参数,解决参数不固定问题。
args是非关键字参数,用于元组;kwargs是关键字参数
也就是说args表示任何多个无名参数,然而kwargs表示一个有着对应关系的关键字参数
在使用的时候需要注意,*args要在**kwargs之前,不然会发生语法错误。
4、关闭浏览器中的quit和close的区别?
简单来说,两个都可以实现退出浏览器session功能。
close只会关闭浏览器,而quit关闭全部浏览器的同时,也会杀掉驱动进程。
5、举例一下你遇到过哪些异常?
①ElementNotSelectableException:元素不能选择异常
②ElementNotVisibleException:元素不可见异常
③NoSuchAttributeException:没有这样属性异常
④NoSuchElementException:没有该元素异常
⑤NoSuchFrameException:没有该frame异常
⑥TimeoutException:超时异常
6、如何提高selenium脚本的执行速度?
①使用显性等待,减少强制等待或隐性等待的使用。
②减少不必要的操作步骤。
③如果页面加载的内容过多,就设置超时时间,中断页面加载。
最近写vue3+ts和组合式API遇到了上面的问题,代码如下:
<template> </template> <script setup lang="ts"> import { useStore } from 'vuex' import { useRoute } from 'vue-router' import { onMounted } from 'vue' const store = useStore() store.dispatch('initMenus') const route = useRoute() onMounted(() =>{ console.log(route.path) }) </script> <style lang="scss" scoped> </style> 这个是因为在这个组合式onMounted之前调用了store.dispatch(‘initMenus’) 内部包含async/await
解决方法:
[Vue warn]: onMounted is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup().
聚类算法 算法概括聚类(clustering)聚类的概念聚类的要求聚类与分类的区别 常见算法分类聚类算法中存在的问题 距离度量闵可夫斯基距离欧式距离(欧几里得距离)曼哈顿距离切比雪夫距离皮尔逊相关系数余弦相似度杰卡德相似系数 划分聚类K-means聚类算法算法原理基本概念算法实例聚类分析的度量 聚类评价指标簇内平方和(Inertia)轮廓系数(Silhouette Coefficient) 簇类个数k的调整(了解)选择正确的聚簇数相似性度量初始聚类中心的选择 K-Means算法评价 算法概括 机器学习有两种学习类型:
有监督学习:即数据点有已知的结果。无监督学习:即数据点没有已知的结果,利用无标签的数据学习数据的分布或数据与数据之间的关系被称作无监督学习。
注:
①有监督学习和无监督学习的最大区别在于数据是否有标签。
②无监督学习最常应用的场景是聚类和降维,聚类算法用于识别数据中未知的结构,降维则是使用数据中的结构特征来简化数据。 聚类(clustering) 聚类的概念 聚类就是根据数据的“相似性”将数据分为多类的过程。聚类把各不相同的个体分割为有更多相似子集合的工作。聚类生成的子集合称为簇。 聚类的要求 生成的簇内部的任意两个对象之间具有较高的相似度。属于不同簇的两个对象间具有较高的相异度
聚类与分类的区别 之前学习过k近邻算法分类算法,分类和聚类听上去好像很相似,但是两者完全是不同的应用和原理。
例如,根据下图的四个属性进行预测某一输入的所属类别:
概括而来就是这样一个流程:
可以看出训练样本是有明确的标签的,数据点是有已知结果的,而聚类不同,聚类算法本身训练的样本就是无标签的,你不知道它属于哪一类,而把具有空间相近性、性质相似性的数据点归为一类,这就是聚类算法要做的事情。
还是上面的例子:
这个时候训练样本的标签被盖住了,我们必须从这四个属性入手,把样本聚合成不同的簇,每个簇中的数据点的属性最相似。
概括而来就是这样一个过程:
现在小结一下,分类和聚类的区别概括而来就是这样:
分类:学习/训练有监督,训练样本有明确标签。
聚类:学习/训练过程无监督,样本无明确标签。
聚类与分类的区别在于聚类不依赖于预先定义的类,没有预定义的类和样本——聚类是一种无监督的数据挖掘任务。
常见算法分类 划分聚类: 大部分方法是基于距离的聚类算法。如:K-Means、K-Medoids、CLARANS等。层次聚类: 例如:BIRCH、CURE、CHAMELEON等。层次聚类可采用“自底向上”或“自顶向下”方案。在“自底向上”方案中,初始时每一个数据纪录都被视作一个单独的簇,接着再把那些相互邻近的簇合并成一个新的簇,直到所有的记录都在一个簇或者满足某个终止条件为止。密度聚类: 该方法是基于(结点)密度的聚类算法,主要算法有:DBSCAN、OPTICS、DENCLUE等。只要一个区域中的点的密度大于某个阈值,就把它加到与之相近的聚类中去。网格聚类: 主要算法有:STING、CLIQUE、WAVE-CLUSTER。将数据空间按某种特征(属性)划分成网格,聚类处理以网格(单元)为基本单位。
注:
①后边三种聚类不做介绍,主要以划分聚类中的K-Means算法作为本章学习重点。
②需要说明的是,这些算法本身无所谓优劣,而最终运用于数据的效果却存在好坏差异,这在很大程度上取决于数据使用者对于算法的选择是否得当。 聚类算法中存在的问题 ①高维数据集中存在大量无关的属性,所有维中存在簇的可能性几乎为零。②高维空间中数据较低维空间中数据分布稀疏,其中数据间距离几乎相等是普遍现象,而传统聚类方法是基于距离进行聚类的,因此在高维空间中无法基于距离来构建簇。 距离度量 评估两个不同样本之间的“相似性”,通常使用的方法就是计算两个样本之间的“距离”,使用不同的方法计算样本间的距离关系到聚类结果的好坏。
大多数聚类分析是以相似性计算为基础的,同一个聚类中的个体模式相似,不在同一个聚类中的个体模式则相异。目前,相似性距离的计算都是基于向量的,也就是计算两个向量的距离,距离相近则相似度越大。
下面,介绍几种常见的距离计算方法。
闵可夫斯基距离 闵可夫斯基距离(Minkowski Distance)是一种常见的方法,用于衡量数值点之间距离。
假设 X ( x 1 , x 2 , . . . , x n ) , Y ( y 1 , y 2 , .
前段时间,在上课的时候,老师发布了一个在线讨论,后面,老师把所有同学的回答结果展示了出来,不同颜色和不同大小,这样就一目了然看出了同学们回答的最多的是哪些关键词,这让我对词云图产生了兴趣,于是参考了下面博主代码,自己做了测试。
利用python制作词云图_词云图python_陈佳2002的博客-CSDN博客
1.运行工具:jupyter,无版本、环境要求。
2.安装相关包:打开Anaconda Powershell Prompt
pip install wordcloud pip install jieba pip install matplotlib 3.运行代码:记得修改文本打开路径和保存路径
import jieba import matplotlib.pyplot as plt from wordcloud import WordCloud # 标明文本路径,打开 text = open(r"C:\Users\32601\Desktop\ciyuntongji.txt", encoding="utf-8").read() text = ' '.join(jieba.cut(text)) # 生成对象 wc = WordCloud(font_path = "C:\Windows\Fonts\Microsoft YaHei UI\msyh.ttc",width=500, height=400, mode="RGBA", background_color=None).generate(text) # 显示词云图 plt.imshow(wc, interpolation="bilinear") plt.axis("off") plt.show() #保存文件 wc.to_file(r"C:\Users\32601\Desktop\ciyun.png") 4.效果展示:
5.备注: 大数据(IT行业术语)_百度百科 (baidu.com)
上面这个链接是我获取文本内容的地方,下面是我复制下来的文本内容
对于“大数据”(Big data)研究机构Gartner给出了这样的定义。“大数据”是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力来适应海量、高增长率和多样化的信息资产。 麦肯锡全球研究所给出的定义是:一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合,具有海量的数据规模、快速的数据流转、多样的数据类型和价值密度低四大特征。 [3] 大数据技术的战略意义不在于掌握庞大的数据信息,而在于对这些含有意义的数据进行专业化处理。换而言之,如果把大数据比作一种产业,那么这种产业实现盈利的关键,在于提高对数据的“加工能力”,通过“加工”实现数据的“增值”。 [4] 从技术上看,大数据与云计算的关系就像一枚硬币的正反面一样密不可分。大数据必然无法用单台的计算机进行处理,必须采用分布式架构。它的特色在于对海量数据进行分布式数据挖掘。但它必须依托云计算的分布式处理、分布式数据库和云存储、虚拟化技术。 [1] 随着云时代的来临,大数据(Big data)也吸引了越来越多的关注。分析师团队认为,大数据(Big data)通常用来形容一个公司创造的大量非结构化数据和半结构化数据,这些数据在下载到关系型数据库用于分析时会花费过多时间和金钱。大数据分析常和云计算联系到一起,因为实时的大型数据集分析需要像MapReduce一样的框架来向数十、数百或甚至数千的电脑分配工作。 大数据需要特殊的技术,以有效地处理大量的容忍经过时间内的数据。适用于大数据的技术,包括大规模并行处理(MPP)数据库、数据挖掘、分布式文件系统、分布式数据库、云计算平台、互联网和可扩展的存储系统。 最小的基本单位是bit,按顺序给出所有单位:bit、Byte、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB。 它们按照进率1024(2的十次方)来计算: 1 Byte =8 bit 1 KB = 1,024 Bytes = 8192 bit 1 MB = 1,024 KB = 1,048,576 Bytes 1 GB = 1,024 MB = 1,048,576 KB 1 TB = 1,024 GB = 1,048,576 MB 1 PB = 1,024 TB = 1,048,576 GB 1 EB = 1,024 PB = 1,048,576 TB 1 ZB = 1,024 EB = 1,048,576 PB 1 YB = 1,024 ZB = 1,048,576 EB 1 BB = 1,024 YB = 1,048,576 ZB 1 NB = 1,024 BB = 1,048,576 YB 1 DB = 1,024 NB = 1,048,576 BB 特征编辑 播报 容量(Volume):数据的大小决定所考虑的数据的价值和潜在的信息; [5] 种类(Variety):数据类型的多样性; [5] 速度(Velocity):指获得数据的速度; [5] 可变性(Variability):妨碍了处理和有效地管理数据的过程。 [5] 真实性(Veracity):数据的质量。 [5] 复杂性(Complexity):数据量巨大,来源多渠道。 [5] 价值(value):合理运用大数据,以低成本创造高价值。 结构编辑 播报 大数据包括结构化、半结构化和非结构化数据,非结构化数据越来越成为数据的主要部分。据IDC的调查报告显示:企业中80%的数据都是非结构化数据,这些数据每年都按指数增长60%。 [6] 大数据就是互联网发展到现今阶段的一种表象或特征而已,没有必要神话它或对它保持敬畏之心,在以云计算为代表的技术创新大幕的衬托下,这些原本看起来很难收集和使用的数据开始容易被利用起来了,通过各行各业的不断创新,大数据会逐步为人类创造更多的价值。 [7] 其次,想要系统的认知大数据,必须要全面而细致的分解它,着手从三个层面来展开: 第一层面是理论,理论是认知的必经途径,也是被广泛认同和传播的基线。在这里从大数据的特征定义理解行业对大数据的整体描绘和定性;从对大数据价值的探讨来深入解析大数据的珍贵所在;洞悉大数据的发展趋势;从大数据隐私这个特别而重要的视角审视人和数据之间的长久博弈。 第二层面是技术,技术是大数据价值体现的手段和前进的基石。在这里分别从云计算、分布式处理技术、存储技术和感知技术的发展来说明大数据从采集、处理、存储到形成结果的整个过程。 第三层面是实践,实践是大数据的最终价值体现。在这里分别从互联网的大数据,政府的大数据,企业的大数据和个人的大数据四个方面来描绘大数据已经展现的美好景象及即将实现的蓝图。 [7] 应用编辑 播报 洛杉矶警察局和加利福尼亚大学合作利用大数据预测犯罪的发生。 Google流感趋势(Google Flu Trends)利用搜索关键词预测禽流感的散布。 统计学家内特·西尔弗(Nate Silver)利用大数据预测2012美国选举结果。 麻省理工学院利用手机定位数据和交通数据建立城市规划。 梅西百货的实时定价机制。根据需求和库存的情况,该公司基于SAS的系统对多达7300万种货品进行实时调价。 [8] 医疗行业早就遇到了海量数据和非结构化数据的挑战,而近年来很多国家都在积极推进医疗信息化发展,这使得很多医疗机构有资金来做大数据分析。 [9] 意义编辑 播报 现在的社会是一个高速发展的社会,科技发达,信息流通,人们之间的交流越来越密切,生活也越来越方便,大数据就是这个高科技时代的产物。 [10] 阿里巴巴创办人马云来台演讲中就提到,未来的时代将不是IT时代,而是DT的时代,DT就是Data Technology数据科技,显示大数据对于阿里巴巴集团来说举足轻重。 [11] 有人把数据比喻为蕴藏能量的煤矿。煤炭按照性质有焦煤、无烟煤、肥煤、贫煤等分类,而露天煤矿、深山煤矿的挖掘成本又不一样。与此类似,大数据并不在“大”,而在于“有用”。价值含量、挖掘成本比数量更为重要。对于很多行业而言,如何利用这些大规模数据是赢得竞争的关键。 [12] 大数据的价值体现在以下几个方面: (1)对大量消费者提供产品或服务的企业可以利用大数据进行精准营销; (2)做小而美模式的中小微企业可以利用大数据做服务转型; (3)面临互联网压力之下必须转型的传统企业需要与时俱进充分利用大数据的价值。 不过,“大数据”在经济发展中的巨大意义并不代表其能取代一切对于社会问题的理性思考,科学发展的逻辑不能被湮没在海量数据中。著名经济学家路德维希·冯·米塞斯曾提醒过:“就今日言,有很多人忙碌于资料之无益累积,以致对问题之说明与解决,丧失了其对特殊的经济意义的了解。”这确实是需要警惕的。 在这个快速发展的智能硬件时代,困扰应用开发者的一个重要问题就是如何在功率、覆盖范围、传输速率和成本之间找到那个微妙的平衡点。企业组织利用相关数据和分析可以帮助它们降低成本、提高效率、开发新产品、做出更明智的业务决策等等。例如,通过结合大数据和高性能的分析,下面这些对企业有益的情况都可能会发生: (1)及时解析故障、问题和缺陷的根源,每年可能为企业节省数十亿美元。 (2)为成千上万的快递车辆规划实时交通路线,躲避拥堵。 (3)分析所有SKU,以利润最大化为目标来定价和清理库存。 (4)根据客户的购买习惯,为其推送他可能感兴趣的优惠信息。 (5)从大量客户中快速识别出金牌客户。 (6)使用点击流分析和数据挖掘来规避欺诈行为。 [13] 趋势编辑 播报 趋势一:数据的资源化 何为资源化,是指大数据成为企业和社会关注的重要战略资源,并已成为大家争相抢夺的新焦点。因而,企业必须要提前制定大数据营销战略计划,抢占市场先机。 趋势二:与云计算的深度结合 大数据离不开云处理,云处理为大数据提供了弹性可拓展的基础设备,是产生大数据的平台之一。自2013年开始,大数据技术已开始和云计算技术紧密结合,预计未来两者关系将更为密切。除此之外,物联网、移动互联网等新兴计算形态,也将一齐助力大数据革命,让大数据营销发挥出更大的影响力。 趋势三:科学理论的突破 随着大数据的快速发展,就像计算机和互联网一样,大数据很有可能是新一轮的技术革命。随之兴起的数据挖掘、机器学习和人工智能等相关技术,可能会改变数据世界里的很多算法和基础理论,实现科学技术上的突破。 趋势四:数据科学和数据联盟的成立 未来,数据科学将成为一门专门的学科,被越来越多的人所认知。各大高校将设立专门的数据科学类专业,也会催生一批与之相关的新的就业岗位。与此同时,基于数据这个基础平台,也将建立起跨领域的数据共享平台,之后,数据共享将扩展到企业层面,并且成为未来产业的核心一环。 趋势五:数据泄露泛滥 未来几年数据泄露事件的增长率也许会达到100%,除非数据在其源头就能够得到安全保障。可以说,在未来,每个财富500强企业都会面临数据攻击,无论他们是否已经做好安全防范。而所有企业,无论规模大小,都需要重新审视今天的安全定义。在财富500强企业中,超过50%将会设置首席信息安全官这一职位。企业需要从新的角度来确保自身以及客户数据,所有数据在创建之初便需要获得安全保障,而并非在数据保存的最后一个环节,仅仅加强后者的安全措施已被证明于事无补。 趋势六:数据管理成为核心竞争力 数据管理成为核心竞争力,直接影响财务表现。当“数据资产是企业核心资产”的概念深入人心之后,企业对于数据管理便有了更清晰的界定,将数据管理作为企业核心竞争力,持续发展,战略性规划与运用数据资产,成为企业数据管理的核心。数据资产管理效率与主营业务收入增长率、销售收入增长率显著正相关;此外,对于具有互联网思维的企业而言,数据资产竞争力所占比重为36.
基于 Kubernetes 实现云资源分析与成本优化平台 一、基本介绍1.主要功能2.整体架构 二、基于 Kubernetes 实现云资源分析与成本优化平台1.准备工作2.安装 Prometheus/Grafana 软件包3.安装 Crane 软件包4. 使用智能弹性 EffectiveHPA4.配置集群 三、功能验证1.成本展示2.资源推荐3.副本数推荐 四、总结 前言: 为推进云原生用户在确保业务稳定性的基础上做到真正的极致降本,腾讯云推出了国内第一个基于云原生技术的成本优化开源项目 Crane(Cloud Resource Analytics and Economics)。Crane 遵循 FinOps 标准,旨在为云原生用户提供云成本优化一站式解决方案。
一、基本介绍 Crane 是一个基于 FinOps 的云资源分析与成本优化平台。它的愿景是在保护客户应用运行质量的前提下实现极致的降本。
官网地址GitHub 地址 1.主要功能 1)成本可视化和优化评估
提供一组 Exporter 计算集群云资源的计费和账单数据并存储到你的监控系统,比如 Prometheus。多维度的成本洞察,优化评估。通过 Cloud Provider 支持多云计费。 2)推荐框架
提供了一个可扩展的推荐框架以支持多种云资源的分析,内置了多种推荐器:资源推荐,副本推荐,HPA 推荐,闲置资源推荐。 3)基于预测的水平弹性器
EffectiveHorizontalPodAutoscaler 支持预测驱动的弹性;基于社区的 HPA 做底层的弹性控制,支持更丰富的弹性触发策略(预测,观测,周期),让弹性更加高效,并保障了服务的质量。 4)负载感知的调度器
动态调度器根据实际的节点利用率构建了一个简单但高效的模型,并过滤掉那些负载高的节点来平衡集群。 5)拓扑感知的调度器
Crane Scheduler 与 Crane Agent 配合工作,支持更为精细化的资源拓扑感知调度和多种绑核策略,使得资源得到更合理高效的利用。 6)基于 QOS 的混部
QOS 相关能力保证了运行在 Kubernetes 上的 Pod 的稳定性。具有多维指标条件下的干扰检测和主动回避能力,支持精确操作和自定义指标接入;具有预测算法增强的弹性资源超卖能力,复用和限制集群内的空闲资源;具备增强的旁路 cpuset 管理能力,在绑核的同时提升资源利用效率。 2.
目录
一、什么是 Auto-GPT
二、用Auto-GPT自动给我实现了一个网站
1、运行过程
2、执行任务
3、运行结果
三、如何安装使用?怎么玩
1、注册OpenAI的账号,并获取key
2、下载Git和Python3(无脑安装)
3、克隆仓库到本地
4、安装运行依赖
5、输入openAIkey
6、愉快的玩耍吧
总结
写到最后
大家好,我是大侠,AI领域的专业博主。
基于GPT-4技术的人工智能机器人Auto-GPT在近期受到了广泛关注
截止于2023年5月18日,Auto-GPT项目在GitHub上已经获得了132k个星标,吸引了全球AI领域关注者们的高度关注。
一、什么是 Auto-GPT Auto-GPT是一种自主人工智能,它能够自动地使用互联网和第三方工具,进行思考、观察结果并做出决策,从而形成一个完整的循环过程。
其核心能力在于自主性,完全无需人类干预。
Auto-GPT可以使用GPT-4技术进行文本存储、生成摘要等操作,为用户提供高质量、个性化的内容。
AutoGPT具备一项令人惊叹的能力:当它发现GPT无法回答某个问题时,它会主动上网搜索答案,从而弥补Chat-GPT,训练数据仅限于2021年9月的不足。这个功能让AutoGPT具备了无限扩展知识的潜力。
二、用Auto-GPT自动给我实现了一个网站 当我第一次用Auto-GPT,不到一分钟就创建一个登录页面时,真的是惊讶。
只需输入一个简单的命令:“写一个登录页面”,Auto-GPT就为我完成了这个任务,而且完全不需要亲自动手。
这个过程让我感到非常不可思议,Auto-GPT自主上网搜索、使用第三方工具、进行思考,甚至操作你的电脑,这无疑是一种令人称奇的体验。
1、运行过程 定义AI角色(html前端工程师)->设定目标(用户登录页面)
2、执行任务 3、运行结果 三、如何安装使用?怎么玩 1、注册OpenAI的账号,并获取key 注意:要使用OpenAI API与Auto-GPT,需要付费帐户,可在Manage account > Billing > Overview中升级账户 2、下载Git和Python3(无脑安装) git:https://git-scm.com/downloads
python3:https://www.python.org/downloads/windows/
3、克隆仓库到本地 源码地址:https://github.com/Significant-Gravitas/Auto-GPT
4、安装运行依赖 首要任务:选择 origin/stable 分支,避免奇怪的 Bug。
运行命令-pip install -r requirements.txt
等待依赖下载完成即可
5、输入openAIkey 覆写env.template文件中的key
把.env.template重命名为.env 6、愉快的玩耍吧 输入命令 python -m autogpt
总结 AutoGPT是一款具有独特特点的语言模型,其最大的特点,在于能够全自动地根据任务指令进行分析和执行,并且不需要用户参与中间环节。
AutoGPT具备自主性和自动化执行能力,能够自己思考并为自己提出问题,并能够自行回答这些问题。
用户只需要设定目标,不需要花费时间和精力去安排执行方案。
使用Linux的软链接非常简单,以下是具体步骤:
打开终端或命令行界面。
导航到你希望创建软链接的目录。你可以使用cd命令来切换目录。
运行以下命令创建软链接:
ln -s <目标文件或目录> <链接文件名> 将<目标文件或目录>替换为你想要链接到的文件或目录的路径,将<链接文件名>替换为你希望创建的软链接的名称。
例如,假设你有一个名为/path/to/target的目录或文件,你想在当前目录下创建一个名为link的软链接,指向该目标,你可以运行以下命令:
ln -s /path/to/target link 现在你已经创建了软链接。你可以使用常规的文件操作命令来访问软链接,比如cd进入软链接指向的目录,或者使用软链接来执行其他文件操作。
需要注意的是,软链接可以使用相对路径或绝对路径来指向目标文件或目录。如果你使用相对路径创建软链接,则链接文件将相对于当前工作目录解析目标路径。如果你使用绝对路径,则链接文件将始终指向该绝对路径上的目标。
此外,你可以使用ls -l命令来列出目录中的文件和软链接,并查看软链接的详细信息,包括指向的路径和目标文件或目录的权限等信息。
一、jwt的组成部分 1、Header(头部) 常见的属性有:alg(签名加密使用的算法),typ(标识token,默认为JWT),是json字符串类型。
2、Payload(有效荷载) 用来承载传递的数据,是josn字符串类型。它的属性值对是Claim类,调用Payload的属性值对时,采用DecodedJWT类的getClaim方法,可以用asString方法转换成String类型。
3、Signture(签名) 就是使用base64编码后的header和payload数据,通过header中alg属性指定的算法进行加密生成哈希。
二、JWT运行机制 1、发送第一次请求,携带用户信息的username和password。当有拦截器拦截路径时,第一次访问只能访问未被拦截的地址。
//拦截器 @Configuration public class WebMvcConfig extends WebMvcConfigurationSupport { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new JWTInterceptor()) .addPathPatterns("/**") .excludePathPatterns("/login1"); super.addInterceptors(registry); } } 2、当用户信息的username和password登录成功时,通过JWT工具生成token。在jwt工具中可以设置header和payload的属性,withClaim方法用来放入数据,sgin方法中放入使用算法(一般使用HMAC256算法,该算法需要设置盐值(密钥))签名加密。
//设置盐值(密钥) private static String salt="oiaho2h434"; //生成token public static String createToken(LoginUser user){ LoginUser user1 = getLoginUser(); //创建一个JWT JWTCreator.Builder builder = JWT.create(); //设置JWT的头部 alg typ Map map1 = new HashMap(); map1.put("alg","HMAC256"); map1.put("typ","JWT"); builder.withHeader(map1); //设置 JWT的有效荷载 Payload Map map2 = new HashMap(); map2.
目录
1.设计目的、作用
2.设计要求
3.设计的具体实现
3.1 设计原理
3.2 硬件系统设计
3.2.1 AT89C51 单片机原理
3.2.2 晶振电路设计
3.2.3 复位电路设计
3.2.4 LED 数码管显示
3.3 系统实现
3.3.1 系统仿真与调试
3.3.2 演示结果
4.总结
附录
附录 1
附录 2
1.设计目的、作用 (1 )掌握 51 系列单片机的基本硬件结构及工作原理; (2 )掌握 51 系列单片机的汇编语言及基本程序设计方法; (3 )学习并掌握使用 51 系列单片机开发控制系统的基本步骤及方法; (4) 能灵活运用 Keil 进行软件编程调试以及用 proteus 软件仿真; (5) 设计组成电子时钟系统,画出系统硬件电路图,设计编写程序。 2.设计要求 基于 AT89C51 单片机的 4 位数字时钟主要具有如下功能。 基本要求如下: ( 1 )时间计数电路采用 24 进制,从 00 开始到 23 后再回到 00 ; (2)用数码管显示时、分、秒; (3)具有手动校时校分功能,可以分别对时、分进行单独校时,使其校正标准时间; (4)计时过程具有报时功能,当时间达到整点前 10 秒开始,蜂鸣器 1 秒响1 秒停响 5 次; (5)增加秒表功能,按键按下后进入 60 秒倒计时。 3.
本笔记为阿里云天池龙珠计划SQL训练营的学习内容,链接为:https://tianchi.aliyun.com/specials/promotion/aicampsql;
一、根据对 RDBMS(关系型数据库管理系统) 赋予的指令种类的不同,SQL 语句可以分为以下三类:
1、DDL(Data Definition Language,数据定义语言)
#用来创建或者删除存储数据用的数据库以及数据库中的表等对象
CREATE : 创建数据库和表等对象
DROP : 删除数据库和表等对象
ALTER : 修改数据库和表等对象的结构
2、DML( Data Manipulation Language,数据操纵语言) #用来查询或者变更表中的记录
SELECT :查询表中的数据
INSERT :向表中插入新数据
UPDATE :更新表中的数据
DELETE :删除表中的数据
3、DCL(Data Control Language,数据控制语言)
#用来确认或者取消对数据库中的数据进行的变更
COMMIT : 确认对数据库中的数据进行的变更
ROLLBACK : 取消对数据库中的数据进行的变更
GRANT : 赋予用户操作权限
REVOKE : 取消用户的操作权限
二、SQL的基本书写规则
SQL语句要以分号( ; )结尾SQL 不区分关键字的大小写,但是插入到表中的数据是区分大小写的win 系统默认不区分表名及字段名的大小写linux / mac 默认严格区分表名及字段名的大小写常数的书写方式是固定的单词需要用半角空格或者换行来分隔 三、数据库的创建
创建一个名为TEST的数据库:CREATE DATABASE TSET
创建一个名为product的表:CREATE TABLE product
创建表中的列:
CREATE TABLE product(
product_id char(4) NOT NULL,
前言 本文将介绍一款名为 Clang-format 的代码格式化工具,并详细讲解如何在 Keil MDK5 中使用 Clang-format 插件进行代码格式化,同时展示 Clang-format 对代码的格式化效果。如果您是一名 C/C++ 程序员,本文对您的日常开发工作会有所帮助。
一. Clang-format简介 Clang-format 是一个用于代码格式化的工具,可以帮助开发人员在不同的编程语言和编码风格之间实现一致的代码样式。它支持多种编程语言,包括 C++、Java、JavaScript 和 Objective-C 等,并提供了丰富的代码格式化选项,可以满足不同团队和个人的编码风格需求。
Clang-format 是基于 LLVM(Low Level Virtual Machine,低级虚拟机) 的 Clang 编译器实现的,它使用了 Clang 的解析引擎来理解代码结构,并根据配置文件中指定的规则对代码进行格式化。它可以通过命令行工具或编辑器插件进行使用,非常易于集成到开发环境中。
使用 Clang-format 可以带来很多好处,例如:
提高代码的可读性和一致性。减少代码审查中关于格式问题的讨论和争议。使代码更易于维护和修改。 总之,Clang-format 是一个强大、灵活、易于使用的代码格式化工具,可以帮助开发人员在编写和维护代码时提高效率和质量。
二. Clang-format下载 最新版本下载网址:https://github.com/llvm/llvm-project/releases
打开LLVM的Github版本发布页,现在(20230517)的最新版本是16.0.4,点击Show all assets展开所有条目,再找到LLVM-xx-win64.exe,点击下载。
下载得到LLVM-xx-win64.exe文件。下面介绍如何从中提取出Clang-format.exe文件。
第一步,将文件后缀名.exe改为.zip。
第二步,解压zip文件。
第三步,在解压后的文件夹/bin中,找到Clang-format.exe,这就是我们需要的代码格式化程序。
三. Clang-format配置 Clang-format自带六种配置:
LLVM:这是默认配置,遵循 LLVM 项目的代码风格。
Google:遵循 Google 的 C++ 代码风格。
Chromium:遵循 Chromium 项目的代码风格。
Microsoft:遵循 Microsoft 的 C++ 代码风格。
Mozilla:遵循 Mozilla 项目的代码风格。
主函数 #include <REGX52.H> #include "Delay.h" #include "LCD1602.h" #include "Timer0.h" unsigned char Sec = 55,Min = 59,Hour = 23; void main() { LCD_Init(); //初始化LCD1602显示屏 Timer0Init(); //调用 Timer0Init() 函数初始化定时器0,并设置中断 LCD_ShowString(1,1,"Clock:"); /*使用 LCD_ShowString() 和 LCD_ShowNum() 函数在LCD上显示初始的时钟字符串和时间*/ LCD_ShowString(2,1," : :"); while(1) //无限循环,在每次迭代中调用 LCD_ShowNum() //函数更新LCD上的时间显示。 { LCD_ShowNum(2,1,Hour,2); LCD_ShowNum(2,4,Min,2); LCD_ShowNum(2,7,Sec,2); } } void Time0_Routine() interrupt 1 { static unsigned int T0Count; TL0 = 0x18; TH0 = 0Xfc; //使用 TL0 和 TH0 设置定时器0的初始值 T0Count++; //在每次中断中,T0Count 自增并进行判断 if(T0Count>=1000) //如果 T0Count 达到 1000(约为1秒), //则将其重置为 0,并进行时间递增操作。 { T0Count = 0; //时间递增的逻辑为:秒数 Sec 自增, //如果秒数超过等于 60,则秒数重置为 0, //分钟数 Min 自增,如果分钟数超过等于 60,则分钟数重置为 0, //小时数 Hour 自增,如果小时数超过等于 24,则小时数重置为 0 Sec++; if(Sec>=60) { Sec=0; Min++; if(Min>=60) { Min = 0; Hour++; if(Hour>=24) { Hour = 0; } } } } } 定时器初始化函数 #include <REGX52.
STM32-ADC多通道数据采集: 什么是ADC?
Analog to Digital Converter(模拟-数字转换器),ADC采样是将模拟信号转换成数字信号的过程。ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁。12位逐次逼近型ADC,1us转换时间。输入电压范围:0到3.3V,转换结果范围:0~4095。
ADC采样的过程可以分为四个主要步骤: 1.采样保持:在一定时间内,对模拟信号进行采样并保持其电压值不变。
2.量化:将采样保持的模拟信号电压值转换成数字量,通常使用比特位数表示。
3.编码:将量化后的数字量编码成二进制形式。
4.存储:将编码后的数字信号存储在计算机或其他数字处理设备中,以便进行进一步的数字信号处理。
ADC采样的精度和速度很大程度上取决于采样率和比特数的选择。较高的采样率和比特数可以提供更精确的数字信号,但也会增加系统成本和复杂性。
ADC的特性: 1.分辨率:ADC的分辨率是指它能够将输入信号分成多少个离散的量化级别。通常用比特数来表示,例如8位ADC的分辨率为2^8=256个量化级别。
2.采样率:ADC的采样率是指它能够对输入信号进行采样的频率。采样率越高,可以捕获到更高频率的信号,但是也需要更高的处理能力和更大的存储空间。
3.精度:ADC的精度是指它能够将输入信号转换为数字信号的准确程度。精度通常用百分比误差或最小有效位(LSB)来表示。
4.噪声:ADC的噪声是指在信号转换过程中引入的随机误差。噪声越小,ADC的精度和可靠性就高。
5.功耗:ADC的功耗是指它在工作中消耗的电力。功耗越低,可以延长电池寿命或降低系统成本。
在多通道采集时需要注意以下几点: 1.通道选择:需要指定采样的通道数以及每个通道的物理引脚。
2.采样顺序:需要指定采样的顺序,可以是顺序采样或者随机采样。
3.转换时间:需要根据ADC的转换时间和采样频率来确定每个通道的采样时间,以确保转换完成后能够在下一个转换周期开始前完成数据读取。
4.数据格式:需要确定ADC输出数据的格式,包括数据位数、精度和符号位等。
ADC功能框图: 多通道采集模式----轮询: 1.连续转换,扫描模式(手动转换)。在扫描模式下启动列表之后,里面每一个单独的通道转换完成后不会产生任何标志位、和中断。它只有在整个列表都转换完成后才会产生一次EOC标志位,才能触发中断。这种方法容易造成数据覆盖的问题如果想要用扫描模式实现多通道采集,最好要配合DMA来实现。
其他解决方法:
在扫描的时候每转换一个通道就暂停一次,我们可以等手动把数据转运走之后在继续触发,继续下一次的转换。就能避免数据覆盖的问题但是这种方式效率较低(不建议使用)。
2.单次转换,非扫描模式:在每次触发转换前,我们可以手动更改一下列表的第一个位置的通道就行这种我们可以通过代码来实现。
uint16_t AD_GetValue(uint8_t ADC_Channel) { ADC_RegularChannelConfig(ADC1, ADC_Channel, 1, ADC_SampleTime_55Cycles5);//采样不同的通道直接修改第三个参数 ADC_SoftwareStartConvCmd(ADC1, ENABLE); while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET); return ADC_GetConversionValue(ADC1); } 主函数代码:
int main(void) { AD_Init(); Usart_Init(); while (1) { AD0 = AD_GetValue(ADC_Channel_0); AD1 = AD_GetValue(ADC_Channel_1); AD2 = AD_GetValue(ADC_Channel_2); AD3 = AD_GetValue(ADC_Channel_3); printf("ADC0: %d ADC1:%d ADC2: %d ADC3: %d\r\n"
需要 Pycharm 专业版 以 2022 版的 PyCharm 为例: 1. 连接服务器 File ---- Settings ---- Python Interpreter ---- Add Interpreter ---- On SSH
输入服务器的 Host、Port 和 Username ---- Next
输入密码 ---- Next
Next
可以选择虚拟环境,我个人习惯选择下面那个 System Interpreter选择本机项目地址和对应的服务器同步地址
点击 Create ---- Apply ---- OK
建议将自动上传取消掉 Tools ---- Deployment ---- Automatic Upload(Always)
Tools ---- Deployment ---- Configuration ---- Connection ---- Test Connection 测试是否连接成功
注意看下面两处是否都发生了变化
右键相关项目 ---- Deployment 将其上传到服务器
运行程序,显示为刚刚设定的服务器地址 即为连接上传服务器成功
小提示:当连接多个服务器 有时分辨不清楚时,可以点击 Show All… 通过右侧的端口号进行分辨
1.卸载老版本docker yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine \ docker-ce 2.下载安装包 查看Linux版本
cat /proc/version 前往docker(Index of linux/centos/)官网下载相应安装包。以下以centos8.5为例,下载目为Index of linux/centos/8/x86_64/stable/Packages/
3.安装docker引擎 前往安装包所在目录,执行以下命令
sudo yum install ./***.rpm 4.启动docker systemctl start docker 5.通过运行hello-world镜像,验证docker是否安装成功 docker run hello-world
1.依赖 <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.21</version> </dependency> 2.代码 import cn.hutool.json.JSONUtil; import java.util.List; /** * 字符串类型的JSON数组转List<Object> */ public class StrJsonArrayToListObject { public static void main(String[] args) { String strJsonArray = "[\n" + " {\n" + " \"_object_version\": 4,\n" + " \"updateAuthorizers\": [\n" + " ],\n" + " \"RELATED_POOL\": \"网络云-大区金华可信11\",\n" + " \"CLOUD\": \"大区网络云\",\n" + " \"modifier\": \"easyops\",\n" + " \n" + " },\n" + " {\n" + " \"_object_version\": 4,\n" + "
标题ActiveRecord被莫名写入? 准备知识
ActiveRecord的基本用法。
/** * @property integer $id * @property string $name * @property string $detail * @property double $price * @property integer $area **/ class OcRoom extends ActivieRecord { ... } $room = OcRoom::find() //先取出一个对象。 ->select(['id']) //只取出'id'列 ->where(['id'=>20]) ->one(); $room->save(); //保存,会发现此行的其它字段都被写成默认值了。 总结问题
这个例子的问题在于:
我从数据库中取出了一行,也就是代码中的room,但是只取出了id字段,而其他字段自然就是默认值。
当我$room->save()的时候,那些是默认值的字段也被保存到数据库里去了。what!?
也就是说,当你想节约资源,不取出所有字段的时候,一定要注意不能保存,否则,很多数据会被莫名修改为默认值。
解决方法
然而,我们有什么解决办法呢?提供几种思路:
自己时刻注意,避免未完全取出的ActiveRecord的保存。
修改或继承ActiveRecord, 使得,当此对象由find()新建,且字段没有完全取出,调用save()方法,抛出异常。
修改或继承ActiveRecord,使得,当此对象由find()新建,且字段没有完全取出,调用save()方法时,只保存取出过的字段,其他字段被忽略。
标题你的Transaction生效了吗? /** * @property integer $id * @property string $name **/ class OcRoom extends ActiveRecord { public function rules() { return [['name','string','min'=>2,'max'=>10]]; } .
问题 一个小型的文章系统的网站,用来存储内容content的字段,我选择的是varchar(8000),最多可容纳4000汉字,对绝大多数用户来说,应该够用了。但是一个问题是允许用户输入代码(HTML,JS,CSS等),实际上如果存储代码的话,会变得更多
那么是用varchar还是text?还是别的?
结论 用text
资料 TEXT TEXT有4有类型:
TINYTEXT 256bytesTEXT 64kbMEDIUMTEXT 16MbLONGTEXT 4GB 使用注解 @Lob @Basic(fetch=FetchType.LAZY) @Column(columnDefinition="TEXT",nullable=true) public String getContent() { return Content; } BLOB TINYBLOB
BLOB、MEDIUMBLOBLONGBLOB blob 保存的是二进制数据,利用这个特性,可以把图片存储到数据库里面。text只能存储文本。
使用注解 @Lob @Basic(fetch=FetchType.LAZY) @Column(columnDefinition="BLOB",nullable=true) public String getContent() { return Content; } TEXT 与 BLOG TEXT:存储可变长度的非Unicode数据,最大长度为 65535 (2^16-1) 个字符 。
MEDIUMTEXT :存储可变长度的非Unicode数据,最大长度为 16777215 (2^24-1) 个字符。
LONGTEXT :存储可变长度的非Unicode数据,最大长度为 2147483647 (2^32-1) 个字符。
TINYTEXT :存储可变长度的非Unicode数据,最大长度为 255 (2^8-1) 个字符。
与TEXT类似的数据类型是BLOG,区别是
BLOB保存二进制数据,TEXT保存字符数据。
使用BLOB的优势在于文本和图片都可以以二进制的形式存储在数据库中。但是,不幸的是,现在大部分得图片都是以标签引入到前端的,而且图床和CDN的出现直接导致我们自己的数据库中只会存储文本数据,也就是说比较常用的是 TEXT。
BLOB列没有字符集,排序和比较基于列值字节的数值。TEXT列有一个字符集,会根据字符集的校对规则对值进行排序和比较 。那么,在存储包含中文字符时,建议使用 TEXT。
这里写目录标题 问题原因解决方法 问题 layout布局中最外层的父控件是ConstraintLayout布局,接下来有两个子控件,一个是自定义的View控件,一个是ConstraintLayout控件
但是子控件的高度超出了父控件的范围,然后导致不显示。
原因 由于上面的控件时一个空白的画板,下面的控件是有具体内容的控件,所以主要问题是出在了上面空白画板的控件属性上面。
画板控件的高度不管是设置wrap还是match,都是有效果的。
解决方法 上面控件的属性:高度应该设置为0dp,然后设置专有的上下左右对齐
<com.view.SignatureView android:id="@+id/signature_view" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toTopOf="@+id/bottom_button" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" /> ok,布局达到了我想要的结果。
1. Oracle 1.1 driverClassName 以下是不同版本的Oracle数据库所使用的driverclassname:
Oracle 9i:ojdbc14.jar (oracle.jdbc.driver.OracleDriver)
Oracle 10g:ojdbc14.jar (oracle.jdbc.driver.OracleDriver)
Oracle 11g Release 1:ojdbc5.jar (oracle.jdbc.OracleDriver)
Oracle 11g Release 2:ojdbc6.jar (oracle.jdbc.OracleDriver)
Oracle 12c Release 1:ojdbc6.jar (oracle.jdbc.OracleDriver)
Oracle 12c Release 2:ojdbc8.jar (oracle.jdbc.OracleDriver)
Oracle 18c:ojdbc8.jar (oracle.jdbc.OracleDriver)
Oracle 19c:ojdbc8.jar (oracle.jdbc.OracleDriver)
需要注意的是,Oracle的JDBC驱动程序名称在不同版本中并没有变化,都是使用oracle.jdbc.driver.OracleDriver。但是,不同版本的驱动程序可能具有不同的功能和特性,因此建议在使用特定版本的Oracle数据库时,选择与该版本兼容的JDBC驱动程序。
1.2 Oracle 版本号 Oracle是一种关系型数据库管理系统(RDBMS),其版本号格式通常是"主版本号.副版本号.发布号"。以下是Oracle主要版本的版本号:
Oracle 7:版本号为7.x。
Oracle 8:版本号为8.x。
Oracle 8i:版本号为8.1.x,其中"x"表示补丁级别。
Oracle 9i:版本号为9.0.x和9.1.x,其中"x"表示补丁级别。
Oracle 10g:版本号为10.1.x、10.2.x和10.3.x,其中"x"表示补丁级别。
Oracle 11g:版本号为11.1.x和11.2.x,其中"x"表示补丁级别。
Oracle 12c:版本号为12.1.x和12.2.x,其中"x"表示补丁级别。
Oracle 18c:版本号为18.1.x和18.2.x,其中"x"表示补丁级别。
Oracle 19c:版本号为19.1.x和19.2.x,其中"x"表示补丁级别。
需要注意的是,Oracle的版本号可能因为不同的产品和组件而有所不同,以上列举的是Oracle数据库的主要版本号。
2. Mysql 2.1 不同版本的MySQL数据库所使用的driverclassname: MySQL 3.x: org.gjt.mm.mysql.Driver
MySQL 4.
目录 1. 概述2. 下载最新版本3. 下载历史版本无LIC下载 4. 下载pack包5 总结 1. 概述 换工作、换电脑,常需要重新安装软件。作为单片机从业人员,Keil MDK通常是必不可少的开发工具。本文主要记录下不同版本keil以及不同芯片pack包的下载。
2. 下载最新版本 先说下如何从官网下载最新版本的keil工具。不过这更适合个人尝鲜体验,更多时候公司会统一要求使用的keil版本。
直接搜索官网下载keil,选择第一个搜索结果:
跳转到keil官网的下载界面,选择产品下载:
跳转新的界面,选择要下载的产品。框出的英文提示了可以获取最新版本:
新界面给出的就是最新版本了,继续点击选择:
这时就弹出了下载保存界面:
3. 下载历史版本 前面有提到,更多时候不会使用最新版本。这一节就记录下如何获取某一历史版本。
打开界面:ARM Product Updates。这时界面列出了keil的历史版本:
选择需要的版本,页面会自动跳转。在这个界面需要填一个基本信息,自己随便写写就行:
填完之后滑到最后:
页面继续跳转,这时就跟上面下载最新版本一样,点击选择:
保存即可:
无LIC下载 在浏览器中直接复制一下内容,然后回车跳转即可下载:
https://armkeil.blob.core.windows.net/eval/MDK536.EXE 可以将网址中的MDK536,替换为其他自己想要的版本。
参考链接:点击进入。
4. 下载pack包 除了安装keil工具,芯片的pack包也是必不可少的。keil环境安装一次即可,芯片pack包难免时常需要安装,毕竟项目使用不同的MCU是常有的事。一些国产单片机,厂家会提供pack包,直接安装即可。而主流单片机,或者个人开发,则需要自己到keil官网下载。
打开界面::MDK5 Software Packs。
选择自己对应的芯片下载,通常下载最新版本即可:
需要注意的是,有时候并不是最新的pack包最好。在下载S32_SDK_DFP时,试了各个版本,只有1.2.0能够正常编译。 5 总结 这一篇其实没啥东西,主要是记录下跳转连接吧。毕竟个人看到浏览器一堆标签,还是比较难受的。为浏览器减负!
如下图所示,AD21软件,在PCB画图时,当前在TOP layer,其他层全部变成灰色了,看起来有些奇怪。
原因:此时选择的应该是single layer mode,将这个模式关闭即可。
步骤:右下角 panels->view configuration->single layer mode 选择off 即可
骁龙神经处理引擎SDK参考指南(5) 4.4.3定义 UDO 包4.4.4创建 UDO 包 创建 UDO 配置
用户应该旨在填写上面配置中描述的字段,以充分描述 UDO。在某些情况下,此配置中所需的信息可以很容易地从有关该操作的框架文档中获得。然而,可能会有细微的警告,因此鼓励用户确保正确分类和描述输入、输出和参数。一个潜在的警告是,如果仅根据文档编写配置,输入可能会被错误分类为参数,反之亦然。在这种情况下,一个有用的技巧是使用 Netron(可在此处找到:https: //github.com/lutzroeder/netron )等开源工具可视化模型,以协助正确制作 UDO 配置。
一旦创建了充分描述的配置,就可以将其用作框架转换器的参数,如使用UDO 准备模型中所述。
笔记:
一个配置文件中可以定义多个 UDO 包。用户应注意,此处指定的包名称必须与创建相应包时使用的包名称相匹配。每个输入、输出和张量参数都被归类为同一类型的张量对象,这意味着所有字段都是共享的。输入和输出的名称不是必需的,因为配置是操作的一般描述。对于参数,名称字段始终是必需的。张量布局是指示张量内数据排列的约定。因此, NHWC的张量布局意味着数据以 组织(batch x height x width x channel),其中通道是变化最快的维度。请注意,这是 SNPE 的默认排列,如果选择了其他张量布局,这可能会对包含 UDO 的模型产生影响。值得注意的是,如果NCHW的张量布局被选中,则可能需要将数据和/或张量参数重塑为 SNPE 默认值以保持维度理解。如果用户遇到这种情况,他们可能会注意到在 UDO 层之前引入了中间置换层,这最终将提供所讨论的张量。这些警告应该作为转换器警告、调试消息或通过工具中描述的可视化工具的输出显示出来。有关张量布局的更多详细信息,用户可以参阅文档的 输入图像格式部分。对于 CPU、GPU 和 DSP 核心类型,每个 UDO 包可以定义任意数量的运算符。然而,所提供的框架代码被定制为在一个包中只定义一个操作。一个微妙的区别是生成的 DSP V65 或 DSP V66 实现源代码期望每个实现库执行一个操作。而在 CPU、GPU 和 DSP V68 或更高版本的情况下,库中可能有任意数量的操作。张量的数据类型决定了张量中包含的数据将如何存储在 DLC 中,以及 SNPE 在运行时执行期间移交的内存类型。虽然张量以 UDO 定义指定的确切数据类型存储在 DLC 中,但根据所选的核心类型,用户可能期望接收的内存类型可能存在运行时限制。用户应访问以下部分:编译 UDO 包以获取更多详细信息。 4.4.3定义 UDO 包 一个 UDO 包主要由一个注册库和一个或多个实现库组成。主要思想是注册库包含有关操作性质的信息,而实现包含执行操作所需的内核(有关更多详细信息,请参阅UDO 概述)。UDO 包可以通过 UDO 配置来定义,它包含操作和路径的文本规范,最终将帮助定义将代表 UDO 包的目录结构。本节将讨论 UDO 包的定义,而定义包后的创建将推迟到创建UDO 包的部分。
骁龙神经处理引擎SDK参考指南(4) 4.4 用户定义的操作4.4.1 UDO概述4.4.2定义 UDO 4.4 用户定义的操作 4.4.1 UDO概述 介绍
SNPE 为用户提供了以用户定义操作(以下简称 UDO)的形式插入运行时引擎可能不支持的自定义神经网络操作的能力。这些可以是在 Tensorflow 等流行的训练框架中定义的操作,也可以是基于框架扩展构建但在 SNPE SDK 中不可用的自定义操作。它们可以在实现它们的任何支持的硬件加速器上本地执行。与执行内部支持的操作相比,SNPE 提供了以无缝方式执行这些操作的基础设施,几乎没有开销。
UDO 包剖析
SNPE 允许用户以动态库的形式提供 UDO 实现,动态库可以被查询、加载和运行,以使用其中定义的内核执行推理。SNPE 提倡“UDO 包”的概念,用户可以使用它轻松表达 UDO 不同组件之间的关联。这个概念是所有工具的核心,这些工具使用户能够创建要在网络推理中使用的 UDO 包。但是,需要注意的是,SNPE 仍然在运行时直接与各种 UDO 库交互,而不是与 UDO 包构造交互。因此,用户可以自由地构建独立的库,而不必严格遵守包的概念。
下图说明了 UDO 包的概念:
从图中可以看出,一个UDO包由一个注册组件和一个实现组件组成。它们通常分别表示为一个注册库和一组实现库,每个硬件加速器对应一个实现内核。如果愿意,用户可以选择将这两个组件构建到一个库中。
注册库由指定所有用户定义操作的方法和它们设计的硬件内核组成。它还包含允许在创建网络时验证操作是否正常的方法。注册库在ARM CPU上加载并执行。
特定于硬件的实现库公开了其他几种实现操作实例创建、执行、分析和销毁的方法。这些是通过相应软件平台支持的编程结构实现的,例如用于 GPU 的 OpenCL 和用于 DSP 的 Hexagon-NN SDK。虽然特定于内核的实现文件在源代码上可能完全不同,但它们都需要使用 $SDK_ROOT/share/SnpeUdo/include/SnpeUdo 中定义的一组 C API 与 SNPE 交互。可以从C++ API获得有关这些 API 的完整详细信息。
UDO 工作流程
SNPE 建议采用以下工作流程来开发 UDO 并将其集成到运行时中:
工作流的第一步是识别模型中需要表示为用户定义操作的操作,并通过配置文件描述它们的属性。该文件的格式和内容在定义 UDO中进行了描述。
MIO引脚直接连接在PS上,像其他普通ARM一样,不需要通过XPS进行硬件配置,直接通过SDK编程即可。MIO位置是固定好的,功能也是预先定义好的。不需要添加管脚约束。
使用EMIO引脚必须通过XPS进行硬件配置,然后在PS部分使用SDK进行编程控制。
如果排除appid、包名等问题、那就是你文件目录的包名不对,比如说你项目的文件目录层级为
com/xxxxx/project
但是你的微信开放平台注册的报名为com.xxxxx.www,那么哪怕你applicationId是和微信开放平台一致的,微信回调也不会生肖,因为微信回调是根据包名来调用你的activity的。
微信回调会找你的com.xxxxx.www.wxapi.WXPayEntryActivity,然而,你目录和你的包名,并不一致,所以回调就无法正常被唤起。
解决方案: 1、将你的目录包名改成和开放平台一致的。
2、使用activity-alias 给你的回调activity创建别名,可以这样写
<activity android:name=".wxapi.WXPayEntryActivity" android:exported="true" android:launchMode="singleTop"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="你的appid" /> </intent-filter> </activity> <activity-alias android:name="${applicationId}.wxapi.WXPayEntryActivity" android:exported="true" android:targetActivity=".wxapi.WXPayEntryActivity" />
前言 epicsim 是芯华章的仿真器,基于iverilog 据说速度快两倍。
源码 github
https://github.com/x-epic/EpicSim
gittee
https://gitee.com/x-epic/
公司网站
https://www.x-epic.com/index.html#/en/developer 维护中了
安装 依赖 有些 apt-get install 就可以,readline 和 termcap 需要下载源码安装
编译安装仿真器 cd EpicSim
mkdir build
cd build
cmake …
sudo make install
中间会遇到问题 缺少lib lbz2
$ sudo apt-get install zlib1g-dev
$ sudo apt-get install bzip2*
还有找不到文件parse.hh 的编译报错,需要修改成parse.h 就可以了,文件名写错了。
测试 在example 文件夹中有几个例子,选择最简单的hello.vl
使用编译仿真命令
结果就是这样
# 命令说明
文章目录 前言一、lambda表达式 是什么?1, lambda表达式 的背景2, 什么是 函数式接口3, lambda表达式 的语法 二、lambda表达式 的使用方式1, 无参无返回值2, 有一个参, 无返回值3, 有多个参, 无返回值4, 无参, 有返回值5,有一个参,有返回值6,有多个参,有返回值7, 说明 三、 变量捕获1, 匿名内部类 的变量捕获2, lambda表达式 的变量捕获 四、为什么要有 lambda表达式总结 前言 📕各位读者好, 我是小陈, 这是我的个人主页
📗小陈还在持续努力学习编程, 努力通过博客输出所学知识
📘如果本篇对你有帮助, 烦请点赞关注支持一波, 感激不尽
📙 希望我的专栏能够帮助到你:
JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等
Java数据结构: 顺序表, 链表, 堆, 二叉树, 二叉搜索树, 哈希表等
JavaEE初阶: 多线程, 网络编程, TCP/IP协议, HTTP协议, Tomcat, Servlet, Linux, JVM等(正在持续更新)
由于正在更新 Java【EE初阶】部分中多线程相关的文章,lambda表达式 是多线程编程中很常用的语法功能,本篇将分享 lambda表达式 相关的内容, 主要介绍 lambda表达式 的使用方式 以及在集合中的一些应用
最近刚刚接触servlet,学习servlet需要安装Tomcat,然而下载tomcat解压后,就遇到一个Tomcat启动闪退的问题,通过查阅各种资料,粗略的了解了这个问题的解决方法。我觉得很好用,顺便总结了一些在评论区看到的问题和对应的解决方法,本菜鸟在此总结一下,分享给遇到此问题的朋友们啦!
Tomcat安装及配置教程主要分为四步:
步骤一:首先确认自己是否已经安装JDK;
步骤二:下载安装Tomcat;
步骤三:Tomcat配置环境变量;
步骤四:验证Tomcat配置是否成功。
一、首先确认自己是否已经安装JDK 1.Win+R打开运行,输入cmd回车,在命令行窗口中输入java,出现这些代表JDK已经安装。
2.然后查看自己的JDK版本,输入:java -version。
这里可以看到我的JDK版本是1.8的,Tomcat在JDK1.8版本下能够正常运行,其他版本会因为版本级别不兼容,不能正常启动。目前我尝试过Tomcat11.0和JDK17.0、Tomcat10.0和JDK17.0、Tomcat9.0和JDK17.0、Tomcat11.0和JDK1.8、Tomcat10.0和JDK1.8、Tomcat9.0和JDK1.8以及Tomcat8.0和JDK1.8,其中只有Tomcat9.0和JDK1.8以及Tomcat8.0和JDK1.8可以正常启动,其他的一直是未发现(Not Found)的状态。
所以最终我选择了Tomcat8.0和JDK1.8。
二、下载安装Tomcat 1.官网:http://tomcat.apache.org/,选择下载版本(tomcat 8.0版本为例讲述其过程),下载64-bit Windows zip(Win64)
2.之后选择解压到任意一个盘,我这里是解压到D盘,一定要记住解压的路径,后面系统环境变量配置的时候要浏览目录。
三、Tomcat配置环境变量 1.安装完成后,右击【我的电脑】,点击【属性】;
2.选择【高级系统设置】选项卡,点击【环境变量】;
(1)新建系统变量,变量名为CATALINA_HOME,变量值为解压文件夹的路径,点击浏览目录,然后浏览到刚刚Tomcat压缩包解压到的文件目录下;
(2)找到系统变量Path,双击空白处或新建即可在末尾加上%CATALINA_HOME%\bin;
四、验证Tomcat配置是否成功 注:上面操作已经完成配置了,但不代表着就已经成功完成配置了,还需要验证Tomcat配置是否成功。
1.进入Windows命令行窗口(Win+R,输入cmd,回车进入命令行)
2.输入startup.bat,回车,看到如下画面。
3.有可能Tomcat会出现了乱码,如下图所示。
(1)这是因为我们的默认编码语言是UTF-8,要把它改成GBK。
(2)具体步骤:打开apache-tomcat-8.5.88——conf——logging.properties,如下图所示文件位置。
(3)用记事本打开logging.properties找到下图那一行代码,改成:java.util.logging.ConsoleHandler.encoding =GBK,即把这一行的UTF-8改为GBK。
(4)改完之后正确显示如下图所示
4.验证Tomcat是否配置成功。在浏览器输入:http://localhost:8080/。因为Tomcat默认的端口号就是8080,如果我们没有修改的话,默认端口号是8080,成功的画面如下图所示。
注:不是https:啊!!!
(1)如果出现NOT FOUND的问题。
(1 黑窗口,也就是打开的Tomcat窗口被关闭了,此时就会显示NOT FOUND。
解决方法:把Tomcat重新打开后再去输入对应的网址(http://localhost:8080/)
(2 默认端口8080被占用,此时可以选择改变原本默认的端口8080。
解决方法:打开apache-tomcat-8.5.88——conf——server.xml,然后将图中选中的port端口号8080改为其他未被占用的端口号。
注:如果端口号发生改变,网址必须改变,不然也依旧会是not found。
注:刚才那个黑窗口一定不能关闭,否则肯定打不开这个页面的!!!
端口不能关闭!!!
端口不能关闭!!!
端口不能关闭!!!
以下问题和解决方法来自个人亲测+网友评论。
(2)如果步骤走完了,但startup.bat还是失败、闪退。
解决方法:检查一下看看是不是用管理员身份打开cmd的。
(3)配置环境变量以后,输入 startup.bat显示:The jre home environment variable is not defined correctly. This environment variable is needed to run this program.
最近在使用Tomcat需要配置jdk,但以前安装的jdk17因为版本过高,出现不兼容,因此安装了jdk1.8,现在我来记录一下Windows下JDK1.8下载和配置环境变量的过程。
一、下载和安装 1.官网下载链接:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html,现在jdk已经更新到20.0,但我们以1.8为例。
注:有Linux、macOS、Windows三个版本,自行选择。Windows建议下载Windows下的x64 Installer安装包。
注:如果下载的时候显示以下图片让你登录,你可以进行登录。如果不想下载可以私信我,可以将jdk执行文件进行分享。
2.下载好的安装包
3.双击.exe文件运行下载好的安装包
4.安装过程中可以更改安装JDK的路径,例如我们选择安装目录为 D:\Program Files\Java\jdk1.8
5.安装完毕
二、配置JDK环境变量 1.安装完成后,右击【我的电脑】,点击【属性】;
2.选择【高级系统设置】选项卡,点击【环境变量】;
3.在【系统变量】中,设置3项属性:(1)JAVA_HOME,(2)PATH。(3)CLASSPATH,若已存在则点击【编辑】,不存在则点击【新建】;
(1)JAVA_HOME 指明JDK安装路径就是刚才安装时所选择的路径,比如我的是:D:\Program Files\Java\jdk1.8,此路径下包括lib,bin,jre等文件夹。
具体步骤:输入JAVA_HOME 和 JDK的安装路径注:(不要包括bin文件) ,可以直接点击浏览目录选中JDK的安装路径。(如图所示)
注:如果选择在用户变量中新建 JAVA_HOME,可能后面会出现 javac不是内部或外部命令,也不是可运行的程序。
(2)PATH 使得系统可以在任何路径下识别java命令,选中系统变量中的 Path点击编辑,然后点击新建,输入 %JAVA_HOME%\bin 和%JAVA_HOME%\jre\bin即可,全部点击确定。
%JAVA_HOME%\bin %JAVA_HOME%\jre\bin (3)CLASSPATH 为java加载类(class or lib)路径,只有类在classpath中,java命令才能识别,设为:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar (要加.表示当前路径),%JAVA_HOME%就是引用前面指定的JAVA_HOME;
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar 4.Win+R,键入“cmd”,打开命令行,检测jdk是否安装成功;
5.键入命令“java -version”,“java”,“javac”几个命令,出现画面,说明环境变量配置成功;
启动文件中指定JDK环境变量。
三、验证是否安装和配置成功 1.在编写一个简单的程序,运行一下,验证一下是不是安装正确。
(1)首先我们在f盘路径f:\java下新建一个记事本,并将其文件扩展名改为.java。
注:要先把后缀显示出来再修改!!!
(2)文件的内容为下面的代码:
public class helloWorld{ public static void main(String[] args){ System.out.println("Hello world!"); } } 2.进行如下方式运行,如果成功输出,则说明安装成功。
(1)切换到f盘根目录下:
f: (2)切换到f盘下的java路径:
cd java (3)编译器javac将Java文件编译为.class文件:
javac helloWorld.java (4)输入运行:
问题 1 启动后不动了,一直卡住

11、点“完成”
Part 2 新建Windows XP虚拟机 12、双击打开桌面上的VMware Workstation,如果弹窗提示产品更新就先点跳过
13、点“创建新的虚拟机”
14、点“下一步 >”
15、将XP系统的iso文件(xp.iso)下载到路径D:\VMware下,iso文件见上面安装包
16、找到上一步的镜像文件并填入“安装程序光盘映像文件”一栏,点“下一步 >”
17、密码和确认都填“12345”,点“下一步 >”
18、弹出的提示窗口点“是”
19、虚拟机名称不变,位置设置为D:\VMware\bin,点“下一步 >”
20、点“下一步 >”
21、点“完成”后等待
22、出现这个错误提示就点“确定”然后随便写一个姓名和单位
23、点“下一步”后要求输入XP系统的密钥(密钥见上面安装包),点“下一步 >”
24、出现这个警示框,点“确定”,等待系统配置
25、进入下图界面后输入密码12345,进入系统
MySQL的特点
1、性能卓越,服务稳定,很少出现异常宕机;
2、开放源代码无版本制约,自主性及使用成本低;
3、历史悠久,社区和用户非常活跃,遇到问题及时寻求帮助;
4、软件体积小,安装使用简单且易于维护,维护成本低;品牌口碑效应;
5、支持多种OS,提供多种API接口,支持多种开发语言,对流行的PHP,Java很好的支持
MySQL的缺点
1、MySQL最大的缺点是其安全系统,主要是复杂而非标准,另外只有到调用mysqladmin来重读用户权限才会发生改变;
2、MySQL的另一个主要的途径之一是缺乏标准的RI(Referential Integrity-RI)机制,RI限制的缺乏(在给定字段域上的一种固定的范围限制)可以通过大量的数据类型来补偿;
3、MySQL不支持热备份;
Oracle的特点
1、兼容性:Oracle产品采用标准SQL,并经过美国u构架标准技术所(NIST)测试,与IBM SQL/DS、DB2、INGRES、IDMS/R等兼容。
2、可移植性:Oracle的产品可运行于很宽范围的硬件与操作系统平台上。可以安装在多种 大、中、小型机上,可在多种操作系统下工作。
3、可联结性:Oracle能与多种通讯网络相连,支持各种协议。
3、可联结性:Oracle能与多种通讯网络相连,支持各种协议。
4、高生产率:Oracle产品提供了多种开发工具,能极大地方使用户进行进一步的开发。
5、开放性:Oracle良好的兼容性、可移植性、可连接性和高生产率使Oracle RDBMS具有良好的开放性。
Oracle的缺点
1、对硬件要求很高;
2、价格比较昂贵;
3、管理维护麻烦一些;
4、操作比较复杂,需要技术含量高;
mysql和oracle的区别有:
1、Oracle数据库是一个对象关系数据库管理系统,要收费;MySQL是一个开源的关系数据库管理系统,是免费的;
2、数据库安全性的区别;
3、对象名称的区别;
4、临时表处理方式上的区别等等。
MySQL和Oracle都是流行的关系数据库管理系统(RDBMS),在世界各地广泛使用;大多数数据库以类似的方式工作,但MySQL和Oracle的这里和那里总是存在一些差异的。
MySQL和Oracle有什么区别?两个数据库的特性是不同的,所以与Oracle相比,MySQL的使用方式不同;与MySQL相比,Oracle的使用情况有所不同。它们的特点也是不同的。
1.基本差异:
1.事务
Oracle很早就完全支持事务。
Mysql在innodb存储引擎的行级锁的情况下才支持事务。
2.数据持久性
Oracle
保证提交的数据均可恢复,因为oracle把提交的sql操作线写入了在线联机日志文件中,保持到了磁盘上,如果出现数据库或主机异常重启,重启后oracle可以考联机在线日志恢复客户提交的数据。
Mysql:
默认提交sql语句,但如果更新过程中出现db或主机重启的问题,也许会丢失数据。
3.提交方式
Oracle默认不自动提交,需要用户手动提交。
Mysql默认是自动提交。
4.sql语句的扩展和灵活性
Mysql对sql语句有很多非常实用而方便的扩展,比如limit功能,insert可以一次插入多行数据,select某些管理数据可以不加from。
Oracle在这方面感觉更加稳重传统一些。
5.复制
Oracle:既有推或拉式的传统数据复制,也有dataguard的双机或多机容灾机制,主库出现问题是,可以自动切换备库到主库,但配置管理较复杂。
Mysql:复制服务器配置简单,但主库出问题时,丛库有可能丢失一定的数据。且需要手工切换丛库到主库。
6.性能诊断
Oracle有各种成熟的性能诊断调优工具,能实现很多自动分析、诊断功能。比如awr、addm、sqltrace、tkproof等
Mysql的诊断调优方法较少,主要有慢查询日志。
7.分区表和分区索引
Oracle的分区表和分区索引功能很成熟,可以提高用户访问db的体验。
Mysql的分区表还不太成熟稳定。
8.事务隔离级别上的区别
Oracle是read commited的隔离级别,而MySQL是repeated read的隔离级别,同时二者都支持serializable串行化事务隔离级别,可以实现最高级别的读一致性。每个session提交后其他session才能看到提交的更改。
Oracle通过在undo表空间中构造多版本数据块来实现读一致性,每个session查询时,如果对应的数据块发生变化,Oracle会在undo表空间中为这个session构造它查询时的旧的数据块
MySQL没有类似Oracle的构造多版本数据块的机制,只支持read commited的隔离级别。一个session读取数据时,其他session不能更改数据,但可以在表最后插入数据。session更新数据时,要加上排它锁,其他session无法访问数据。
2、数据库安全性
MySQL使用三个参数来验证用户,即用户名,密码和位置;Oracle使用了许多安全功能,如用户名,密码,配置文件,本地身份验证,外部身份验证,高级安全增强功能等。
3、SQL语法的区别
Oracle的SQL语法与MySQL有很大不同。Oracle为称为PL / SQL的编程语言提供了更大的灵活性。Oracle的SQL * Plus工具提供了比MySQL更多的命令,用于生成报表输出和变量定义。
这里写自定义目录标题 起因使用场景步骤一步骤二 找回的过程稍麻烦一些,不过总比自己在重写一遍要好多了 起因 开发过程中,有时可能不知道自己操作了什么,然后写好的代码就被弄丢了(包括已跟踪文件或未跟踪文件)。此笔记记录的方法是通过 对象数据库(.git/objects) 目录中的数据记录来找回被弄丢的代码
Tip: .git/objects 这个目录下的数据记录,是在操作过一些 Git 命令后才会产生数据记录,例如 添加到暂存区(git add)、拉取(git pull)、贮藏(git stash) 等命令
使用场景 项目开发过程中如果是和别人一起开发,基本上都是使用同一个分支,这种情况下如果自己在项目里新建了其它文件并且没有对新建文件跟踪,但是自己又不想对新的文件进行提交,而且又怕不小心把未跟踪的文件弄丢找不回来的情况下,此时就可以通过操作一些 Git 命令,来在 .git/objects 目录下留有一个记录
步骤一 1.1 新建文件:首先在项目中创建一个新的文件然后随便添加一些内容
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tqbIdS0n-1684316145390)(img/1.png)]
1.2 打开 Git 终端窗口输入命令查看文件状态
输入命令后查看到有两个未跟踪的文件,此时如果删除它们的话就真的没有了,Git 也找不回来了,因为 .git/objects 中还没有记录
1.3 避免未跟踪的文件被弄丢,此时需要对文件进行一次 Git 操作
这里我操作一下 添加到暂存(git add) 但不 git commit,来使 .git/objects 目录产生记录
1.4 然后把刚刚添加到暂存区的文件再从暂存区中取出来,之后再把 testFile.vue 这个文件删除掉,再查看一下文件状态
1.5 现在项目目录中已经没有 testFile.vue 这个文件了,接下来进入到 .git/objects 目录
步骤二 2.1 开始操作找回代码,打开项目所在的目录
2.2 进入到 .git > objects 这个目录里
在 objects 这个目录下的这些子目录中存储的就是操作过的代码,刚才删掉的 testFile.
目录
友元
1 全局函数做友元
2 类做友元
3 成员函数做友元
运算符重载
1.加号运算符重载
(1)成员函数重载+号
(2)全局函数重载+号
2.左移运算符重载
3.递增运算符重载
4.赋值运算符重载
5.关系运算符重载
6.函数调用运算符重载
友元 让一个函数或者类访问另一个类中私有成员
关键字:friend
三种实现:
1 全局函数做友元 使用全局函数访问类中的私有成员
friend void goodGay(Building* building);
#include <iostream> using namespace std; #include<string> class Building { //goodGay全局函数是Building的友元函数,可以访问私有成员 friend void goodGay(Building* building); public: Building() { m_SittingRoom = "客厅"; m_BedRoom = "卧室"; } public: string m_SittingRoom; // 客厅 private: string m_BedRoom; // 卧室 }; //全局函数 void goodGay(Building * building) { cout << "