第二章 LangChain入门指南 文章目录 第二章 LangChain入门指南前言一、主要内容1、初识LangChain1.1 为什么需要LangChain1.2 LLM应用开发的最后1公里1.3 LangChain的2个关键词1.4 LangChain的3个场景1.5 LangChain的6个模块 2、LangChain的开发流程2.1 开发秘钥指南2.2 编写一个取名程序2.3 创建你的第一个聊天机器人 3、 LangChain表达式 二、总结 前言 前面一章我们了解了LangChain和一些大语言模型的基础知识。接下来我们继续跟随《LangChain入门指南》深入的了解LangChain的体系架构以及具体的应用场景,并且尝试使用LangChain构建第一个基于大语言模型的应用。
文章的结尾提供了一个基于LangChain开发的AIGC知识库平台,可以免费使用,有任何疑问欢迎提出。
一、主要内容 1、初识LangChain 1.1 为什么需要LangChain 我们在开发一款LLM的应用时,需要集成各种各样的大语言模型和一些基础的模块,在集成时需要对每个模型和模块进行了解,工作量很大。而LangChain就是一个集成框架,处理的就是一系列组件和工具的集成。并且它在开发者社区有着有高的关注度。
1.2 LLM应用开发的最后1公里 LangChain为LLM应用的开发者提供了很大的便利,包括模型的接口,常用的组件和大量常用的提示词。为那些准备进入LLM应用开发领域的人铺平了最后一公里的道路。
1.3 LangChain的2个关键词 LangChain有两个关键词,同时也是LangChain的核心,分别是”组件“和”链“。组件可以理解为一整条完整的流水线上的工作站,每个组件有各自的功能各司其职,而链就可以理解为把所有使用到的工作站串联起来的链条。
1) 组件。
我们在开发一个大语言模型应用时有很多的工作流程,每一项工作都有一个单元来负责完成,例如:数据加载、与大语言模型沟通、构建提示词等等工作都需要实例化LangChain提供的一些类来完成,这些类就称为组件。
2) 链。
当我们使用LangChain实例化了很多的组件之后,发现单个组件并不能完成一整个复杂的任务,需要有多个组件结合。这时链就是来充当将所有需要的组件根据顺序串联起来的角色,使得整个程序像流水线一样按照预设路径顺序执行。
1.4 LangChain的3个场景 LangChain有三个比较典型的应用场景。
1) 问答系统。LangChain可以轻松的与外部数据源进行交互,迅速提取关键信息,然后生成准确的回答。
2) 数据处理与管理。LangChin可以将每一个数据处理的流程都标准化,包括加载、分割、存储、检索。
3) 自动问答机器人。开发者可以使用LangChain构建实时响应用户查询的客服机器人。
1.5 LangChain的6个模块 LangChain是由6个模块组成。
1) 模型I/O。模块主要用于与大语言模型进行交互,并且其中已经包装好了很多与市面上大多数模型交互的类。
2) 数据增强。模块主要是对外部数据处理的一整套流程。
3) 链。模块主要用于将所有的组件组合起来形成一条完整的业务线。
4) 记忆。模块一用于存储对话期间的对话内容,使得大语言模型具有记忆能力。
5) Agent。模块是为AGI的基础,他使用LLM来完成思考然后根据思考的结果执行操作。
6) 回调处理器。模块是LangChain提供的一个回调系统,允许开发者在LLM应用的各个阶段进行干预。
2、LangChain的开发流程 2.1 开发秘钥指南 我们在开发大语言模型应用程序时,需要调用大语言模型的接口,而接口往往需要一个秘钥要验证我们的身份。当我们从平台拿到秘钥之后,常用的有三种方法使用秘钥。
1、直接把秘钥硬编码到代码中。
2、把秘钥放入环境变量中,使用时获取。
3、通过第三方模块在使用秘钥时由用户输入秘钥。
2.2 编写一个取名程序 我们尝试调用大语言模型完成第一个应用的开发,功能就是帮助公司起一个名字。
大家好,今天给大家带来最近爆火的AI图片转视频制作超级小白保姆级教程!如果AI作图还不熟悉的小伙伴请观看前文哦~
成果展示:
下面开启我们的教程:
首先,小伙伴们需要准备一个科学上网工具(你懂的)
第一步:把图片上传上去
首先打开Runway的网址:
https://app.runwayml.com/login
我们点击右上角注册或登录
(然后小杨哥就用浏览器自带的翻译把网站翻译成了中文~)
接着我们点击这个【开始生成】
接着就把图片上传
然后默认的就是文本/图像到视频,就是利用图片+文字描述生成视频
把图片上传上去,然后加上描述,这里我的描述也很简单:
水珠滑落,微风
Water droplets slide down, breeze
第二步:设置动效 这里的动效设置有两种:
相机设置
相机动作,主要控制整个画面镜头的放大缩小平移旋转等等,直接看小窗口的预览图就能很直观地感受到镜头的变化
运动画笔 只需要勾选画笔,他就能智能识别区域
这里提供X Y Z轴的运动
如果你不知道该如何调整运动,那么只要拉动这个【氛围】就行,算法会帮你的
小Tip:画完笔画一定要拉动参数,调整一下,【做(完成)】按钮才能激活
接下来就等待生成!
第三步:下载
在稍加等待之后,我们的视频效果出来啦!
先看看效果!
哇哦~~
如果你有调整时长的需要,在这里调整时长,现在默认是4s,没有特殊需要可以不调,因为根据我的经验,越往后生成的画面精度越不如原图(在没有升级会员的情况下)
点击Download,就可以下载啦~~
最终就得到你开头看到的成品啦~~
怎么样,是不是还蛮简单的~~
后面我还会分享更多AI生成视频相关的知识,感兴趣的小伙伴,可以星标,关注哦
写在最后 感兴趣的小伙伴,赠送全套AIGC学习资料,包含AI绘画、AI人工智能等前沿科技教程和软件工具,具体看这里。
AIGC技术的未来发展前景广阔,随着人工智能技术的不断发展,AIGC技术也将不断提高。未来,AIGC技术将在游戏和计算领域得到更广泛的应用,使游戏和计算系统具有更高效、更智能、更灵活的特性。同时,AIGC技术也将与人工智能技术紧密结合,在更多的领域得到广泛应用,对程序员来说影响至关重要。未来,AIGC技术将继续得到提高,同时也将与人工智能技术紧密结合,在更多的领域得到广泛应用。
一、AIGC所有方向的学习路线
AIGC所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、AIGC必备工具
工具都帮大家整理好了,安装就可直接上手!
三、最新AIGC学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、AIGC视频教程合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
若有侵权,请联系删除
作者:来自 Elastic Enrico Zimuel
从 elasticsearch-php v8.13.0 开始,你可以执行 ES|QL 查询并将结果映射到 stdClass 或自定义类的 PHP 对象。
ES|QL ES|QL 是 Elasticsearch 8.11.0 中引入的一种新的 Elasticsearch 查询语言。 目前,它在技术预览版中可用。 它提供了一种强大的方法来过滤、转换和分析存储在 Elasticsearch 中的数据。
它利用 “管道” (|) 逐步操作和转换数据。 这种方法允许用户组合一系列操作,其中一个操作的输出成为下一个操作的输入,从而实现复杂的数据转换和分析。
例如,以下查询返回 sample_data 索引的前 3 个文档(行):
FROM sample_data | LIMIT 3 使用案例 为了说明官方 PHP 客户端中开发的 ES|QL 功能,我们在 Elasticsearch 中存储了包含 81,828 本书 (54.4 MB) 的 CSV 文件,其中包括以下信息:
Title;Descrition;Author;Year;Publisher;Ratings 我们从公开的亚马逊图书评论数据集中提取了此列表。
我们使用以下 Elasticsearch 映射创建了一个 books 索引:
'mappings' : { 'properties': { 'title': { 'type': 'text' }, 'description': { 'type': 'text' }, 'author': { 'type': 'text' }, 'year': { 'type': 'short' }, 'publisher': { 'type': 'keyword' }, 'rating': { 'type': 'half_float' } } } rating 值是从 2.
由于需要在 Windows 上使用一些软件,今天在 Mac M2 上安装了 Windows 11。以前在 X86 Mac 上安装很容易,都是 X86 架构随便找个镜像安装上就可以用了。到了 M1/M2 Arm 架构就会麻烦一些,先在网上找到 Windows 10 Arm 架构的安装镜像,安装后不知为何不能访问网络,可能Vmware Fusion 的原因,没找到解决方案,就尝试一下 Windows 11 吧。
我在网上没找到可以直接下载 Windows 11 Arm IOS 镜像的位置,还好,Vmware Fusion 有个下载 Windows的功能,抱着试试态度,下载了半天时间,终于下载下来了,安装成功,启动之后安装了 X86 架构的软件,没什么问题,运行很丝滑。
我把镜像放到网盘了,有需要的可以去下载。我安装的是家庭版不用输入授权密钥,先用着,主要的工作还是在 Mac 上做。
链接: https://pan.baidu.com/s/1Ecg3byc4nuAZR80PuwcCHQ 提取码: 9naa --来自百度网盘超级会员v7的分享
来自B站up@秋葉aaaki,近期发布了Stable Diffusion整合包v4.7版本,一键在本地部署Stable Diffusion!! 适用于零基础想要使用AI绘画的小伙伴~本整合包支持SDXL,预装多种必须模型。无需安装git、python、cuda等任何内容,无需任何配置解压即用
2024年3月12日 更新至V4.7
后续自己安装时产生问题再补充
官方教程说明
启动器在整合包压缩包内,直接解压双击即可使用。
部分人如弹出窗口则需要安装启动器运行依赖,点击 Yes 即可自动跳转下载。
手动下载链接:
https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/runtime-desktop-6.0.25-windows-x64-installer?cid=getdotnetcore
秋叶WEBUI整合包免费下载地址:
网盘链接: https://pan.baidu.com/s/1MjO3CpsIvTQIDXplhE0-OA?pwd=aaki 提取码: aaki b站地址 【AI绘画】Stable Diffusion整合包v4.2发布!全新加速 解压即用 防爆显存 三分钟入门AI绘画 ☆可更新 ☆训练 ☆汉化_哔哩哔哩_bilibili
如果些文章对您有帮助或有解决您的问题,随手打赏一杯咖啡
实现html导出word,需要使用两个库。 html-docx-js和file-saver
导出word的js方法
> npm install html-docx-js
>npm install file-saver
js引入 import FileSaver from "file-saver";
import htmlDocx from "html-docx-js/dist/html-docx";
/**导出word方法 */
exportWord() {
let contentHtml = document.getElementById("myContainer").innerHTML; //myContainer是需要导入的dom元素的id,也就是像<div id="myContainer"></div>
let content = `
<!DOCTYPE html><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<div>
${contentHtml}
</div>
</body>
</html>`;
console.log(content)
let converted = htmlDocx.asBlob(content);//利用插件转
FileSaver.saveAs(converted, "xxx.docx");//导出为word,要以.docx为后缀,xxxx可任意名字
},
要注意的点及推荐:
1:要导出word的html代码不推荐使用组件,例如<el-table>等,bug很多,最好使用原始的html代码。但是像v-model这种数据绑定的都是可以用的
2:表格推荐使用<table> <tr> <td> </td> </tr> </table>的形式,另外像<h1>标签都会在word生成目录,适配度还是挺好的。
3:生成的表格在word里可能会被截断,就是表格太长跑到了下一行,这个可以设置在word里面设置不让表格换页即可。要善于利用表格属性 colspan,border-collapse: collapse等。
4:样式一定要写内联样式,bug最少!例如 <td style="width:33%; height: 50px; text-align: center;"
版权声明:转载必须注明本文转自严振杰的博客:http://blog.yanzhenjie.com
本人用 Perfetto 快 2 年了,公司一些同事和网友都来咨询过使用姿势,本人只能把自己一个略显粗糙点的笔记发给同事,有点不够细节和不够深度,于是趁着清明假期,我把经验总结成一篇博客,结合 Perfetto 官网资料取长补短尽量做到深入浅出。
Perfetto 支持多个平台,包括 Linux、Android 和 Chrome,并提供了用于记录系统级和应用级活动的服务和库、低开销的针对 Native 和 Java 的内存分析工具、可供 SQL 分析跟踪文件的 C++库和 Python 库(Python 基于 C++库),以及基于 Web 可视化方便分析 Trace 文件的 Perfetto UI。
快速开始,Android 抓 Trace: https://perfetto.dev/docs/quickstart/android-tracing 可视化工具,Perfetto UI: 地址:https://ui.perfetto.dev/教程:https://perfetto.dev/docs/visualization/perfetto-ui 开源: 地址:https://github.com/google/perfetto贡献:https://perfetto.dev/docs/contributing/getting-started 聪明的同学从上面的信息中可以了解到很多信息了,下面咱们就展开细节聊一聊。
1、生成 Perfetto 抓 Trace 的配置 做 App 性能分析,一般关注这几类信息:
Memory。CPU。GPU。Power。系统层消耗。 我们在抓 Trace 的时候可以指定应用、内存、CPU、GPU、电源和系统事件等,使用 Perfetto 时可以使用 PerfettoUI 来生成配置:https://ui.perfetto.dev/#!/record。
第一步,选择目标 Android 设备系统版本。打开 Perfetto UI,选择要抓 Trace 的目标设备,有 2 种方式,如图一所示:
方式一,选择目标系统版本。方式二,选择 ADB 连接的设备。 (图一) 第二步,调整 Trace 文件记录设置。主要是为了控制 Trace 文件大小或者 Trace 记录时长,如果文件太大则加载缓慢操作也不太顺畅,如图二所示:
CentOS 7 下安装RabbitMQ教程 一、做准备(VMWare 虚拟机上的 CentOS 7 镜像 上安装的) (1)准备RabbitMQ的安装包(rabbitmq-server-3.8.5-1.el7.noarch)下载地址mq
(2)还得准备erlang语言(erlang-21.3.8.16-1.el7.x86_64)erlang下载地址
(3)这两个软件的对应版本 地址
也可以使用下载好的离线安装包
离线安装包,公开免费的,如遇收费请下方留言
二、可用mobaxterm上传离线文件到虚拟机 三、安装rabbitmq (1)先在linux上创建一个rabbitmq文件夹用来存放离线文件,示例路径:/opt/rabbitmq (2)上传文件到目录/opt/rabbitmq (3)安装erlang语言 rpm -ivh erlang-21.3.8.16-1.el7.x86_64.rpm (4)安装socat rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm (5)安装rabbitmq rpm -ivh rabbitmq-server-3.8.5-1.el7.noarch.rpm 现在已经安装完毕!
(6)开机启动,如果你需要的话就添加开机启动(不添加开机启动的不要添加了) systemctl enable rabbitmq-server (7)启动rabbitmq # 启动rabbitmq systemctl start rabbitmq-server # 查看rabbitmq状态 systemctl status rabbitmq-server # 停止rabbitmq systemctl stop rabbitmq-server (8)开始配置web管理端,首先停掉mq # 停止rabbitmq systemctl stop rabbitmq-server # 停止开启web管理端 rabbitmq-plugins enable rabbitmq_management # 然后启动rabbitmq就可以访问管理页面 systemctl start rabbitmq-server (9)访问页面 在浏览器上面输入你的ip加上15672
前言:本人前端小白一枚,在B站听了一个很不错的视频,关于uniapp Vue3超详细教程,有需要的小伙伴可以去听,受益匪浅,下面是该博主的链接:
gitee源码地址:https://gitee.com/qingnian8/uniapp-ling_project.git
官方推荐链接:动态-哔哩哔哩
本文参考链接:在uniapp Vue3版本中如何解决web/H5网页浏览器跨域的问题_uniapp webview跨域-CSDN博客
第一次写博客,主要是想分享与自己总结~(有问题还希望看到的小伙伴多多指教~)
下面直接进入正题,关于uniapp微信小程序的跨域解决:
什么是跨域 跨域指的是在浏览器中,当一个网页尝试加载另一个不同域名(或协议、端口号)下的资源时所面临的限制。
en,简单说,之所以存在跨域是因为不同源,什么是不同源呢,要知道同源策略
同源策略是一种安全机制,它限制了一个网页中加载的资源与当前页面本身来自同一来源的资源进行交互。这种策略保护了用户的信息安全,防止恶意网站通过 JavaScript 等方式获取到用户的敏感信息。
例如,如果一个网页(http://example.com)试图通过 JavaScript 代码加载另一个网页(http://anotherdomain.com)中的数据,这就属于跨域请求,浏览器会阻止这种操作。
错误提示像这种,就是跨域了
解决跨域 前提:你已经创建好了项目哦(HBuilder Vue3项目)
配置vite.config.js 打开HBuilder项目,创建一个新的名为“vite.config.js”的js文件,参考目录结构:
vite.config.js参考代码如下:
import { defineConfig } from 'vite'; import uni from '@dcloudio/vite-plugin-uni'; export default defineConfig({ plugins: [uni()], server: { host: "localhost", // 指定服务器应该监听哪个IP地址,默认:localhost port: 7788, // 指定开发服务器端口,默认:5173,端口号自己改 proxy: { // 为开发服务器配置自定义代理规则 // 这个代理路径名称/wxapi自行修改,如/proapi "/wxapi": { target: "https://tiyu.baidu.com", // 目标接口,请求的根地址拿过来 changeOrigin: true, // 是否换源 rewrite: (path) => path.
什么是互相关函数 互相关函数是用于衡量两个信号之间的相似程度的一种方法。在信号处理领域中,互相关函数被广泛应用于模式识别、语音处理等领域。它可以帮助我们分析两个信号之间的关系,从而找到它们之间的相似性。
互相关函数的计算方法 在信号处理中,互相关函数通常被表示为两个信号之间的卷积。具体来说,互相关函数 R x y ( n ) R_{xy}(n) Rxy(n) 可以由以下公式计算得出:
R x y ( n ) = ∑ m = − ∞ ∞ x ( m ) y ( m − n ) R_{xy}(n) = \sum_{m=-\infty}^{\infty} x(m) y(m-n) Rxy(n)=m=−∞∑∞x(m)y(m−n)
其中, x ( m ) x(m) x(m) 和 y ( m ) y(m) y(m) 分别表示两个信号在时刻 m m m 的值, n n n 表示时间偏移量。当 n = 0 n=0 n=0 时,互相关函数的值最大,表示两个信号完全重合的情况。
最近在开发小程序,因为一些需求在小程序内实现不了,转向引入webview来解决,说实话,坑很多,后面再一一梳理遇到的问题,今天先记录一下webview遇到的缓存问题
webview 先说下自己的理解吧,webview是独立于微信客户端之外的,是为了解决小程序或者APP解决不了的问题,比如小程序不能操作dom元素,需求里面需要大量的操作dom元素,就可以引入webview,但是相对地,就会有缓存和兼容的问题,先说一下缓存的问题
借鉴了两位大佬的解决方案 跳转1跳转2,好奇的可以先看着两篇文章
先讲一下缓存的问题,每次小程序加载webview的url的时候,url是每次加载都不变的情况下,访问的资源大多数是走的缓存,webview本质是浏览器,浏览器默认是带缓存的,排除一些设置的情况下,后续每次访问页面,一些资源请求或者Index.html文件的请求,都是走的缓存,查看接口也是服务器返回了304(304代表优先走本地缓存)
看下图,能够看到确实走的客户端内的缓存,第一次加载客户端就已经缓存的页面文件
单页面应用的缓存方向主要是两个(主要也是上图中两种缓存)
入口index.html的缓存打包后的资源文件的缓存 之前所了解到的解决缓存的方法 index.html的head部分添加meta标签 < meta
http-equiv=“Cache-control”
content=“no-store,no-cache”
/>
< meta http-equiv=“Pragma” content=“no-cache” />
< meta http-equiv=“Expires” content=“0” />
< webview url=“后面参数带时间戳”></ webview> 这两种方式都试过,都不太行,页面还是有缓存,后面看到一个大佬的文章,感觉好像很可行的样子,就试了一下,果然可以
最终解决方案 先总体说下解决方案
解决入口文件index.html缓存(服务器响应增加请求头Cache-Control,本项目采用Nginx部署,就直接在Nginx配置文件添加了–add_header Cache-Control “no-store, no-cache”
这样每次加载项目地时候都会不走缓存)解决资源缓存问题(资源加载主要是webpack打包后端 dist文件,这里调整项目配置文件,增加hash:true属性,给每次打包后的文件添加hash标识符) add_header Cache-Control "no-store, no-cache"的解释
关于清除资源文件的缓存
打包后的js文件
根据上面的调整试了一下,确实没有走缓存
调整之前
调整之后 (服务器返回都是200,不是304或者来自磁盘缓存了)
大概就是这些,我这里是记录了最简单快速的解决方式,有不同意见的可以提出来哦
python爱心源代码集锦(18款) 本文目录:
一、代码效果预览索引图
二、爱心源代码集锦
(1)、爱心图形1(弧线型)(显示的文字写在代码里)
(2)、爱心图形2(直线型)(显示的文字写在代码里)
(3)、爱心图形3(弧线型)(通过输入方式显示文字)
(4)、用python绘制爱心树
(5)、粒子系统组成爱心,中间加字
(6)、粒子系统组成爱心
(7)、粒子系统组成爱心
(8)、最先复现“李峋爱心”代码的作者
(9)、跳动爱心
(10)、空心爱心
(11)、空心立体爱心
(12)、李峋同款爱心代码【有声版】
三、python字符画爱心 (1)、一行代码画爱心
(2)、用字符输出 I 爱 U (2种形式)
(3)、输出五个爱心,由Dear I love you forever! 五个单词填充而成
(4)、字符输出爱心曲线公式爱心1
(5)、字符输出爱心曲线公式爱心2
这篇文章是python 绘制爱心动画的源码集锦合集,每篇都附有原作者的名字博客链接。使用时将代码复制后在相关的编程语言环境下运行。
代码仅供学习参考,请尊重原作者的创作和版权!
如果代码作者转载地址有错,请原作者留言,我会更正相应的代码原作者博客链接。
一、代码效果预览索引图 本文收集的python绘制的爱心动画源代码,主要涉及的模块有turtle、tkinter、math等。代码涉及的库,学习研究运行前需确保代码需要的库函数有安装。
11、空心立体爱心12、李峋同款爱心代码【有声版】
8、最先复现李峋爱心代码的作者9、跳动爱心10、爱心
5、粒子组成爱心,中间加字
6、粒子组成爱心
7、粒子组成爱心
1、(弧线型)(显示文字)
2、(直线型)(显示文字)
3、(弧线型)(输入显示文字)
4、爱心树
python字符画爱心
此部分的代码会显示在终端,如果你没有打开终端会看不到效果。如果你没有专业的代码编辑器,只想试试效果,运行方式:
1、安装python配置好环境
2、将代码完整复制,保存成:你的文件名.py
3、同时按window+R键,输入cmd,打开命令提示符窗口
输入:python 你的文件名.py
(1)一行代码画爱心(2)用字符输出 I 爱 U (2种形式)(2)用字符输出 I 爱 U (2种形式)
一、基本介绍 GROUP BY 语句在 SQL 中用于将来自数据库表的记录分组,以便可以对每个组执行聚合函数(如 COUNT(), MAX(), MIN(), SUM(), AVG() 等)。使用 GROUP BY 时,数据库会根据一个或多个列的值将结果集分为多个分组,在每个分组内可以独立地使用聚合函数。GROUP BY 通常与 SELECT 语句一起使用,以汇总每个分组的数据。
二、基本语法 SELECT column_name(s), AGGREGATE_FUNCTION(column_name) FROM table_name WHERE condition GROUP BY column_name(s) ORDER BY column_name(s); 这个 SQL 模板展示了一个结构化查询语言(SQL)的基本结构,用于从数据库中选择、汇总、分组和排序数据。下面逐步解释每个部分的功能和作用:
sql SELECT column_name(s), AGGREGATE_FUNCTION(column_name) SELECT 关键字用于指定要从数据库表中检索的列或字段。 column_name(s) 是你想从选定表中选择的列的名称。你可以选择一个列、多个列或所有列(使用 *)。
AGGREGATE_FUNCTION(column_name) 是应用于某列的聚合函数。聚合函数对数据进行数学运算,如计算平均值(AVG)、总和(SUM)、最大值(MAX)、最小值(MIN)或计数(COUNT)。
sql FROM table_name FROM 关键字后面跟着的是表名,指示 SQL 从哪个表中检索数据。
WHERE condition WHERE
子句是可选的,用于指定筛选条件,以限制哪些行应该被包括在你的结果集中。只有满足指定条件的行才会被选中参与后续的 GROUP BY 或聚合操作。
GROUP BY column_name(s)
GROUP BY 关键字后面跟着的列名用于指定数据库应该如何将数据分组。在使用聚合函数时,GROUP BY
使你能够将行分组成小的数据块,并对每个组分别计算聚合函数。如果有多个列,数据库将根据这些列的组合值进行分组。
在程序员的职业规划中,成为软件架构师是一个非常有吸引力的选择。但是对于如何才能成为一名架构师,不少同学认为只要代码写得好,就能得到公司提拔,晋升为架构师。
还真不是这样的,如果不具备架构思维,即使代码能写到极致,在开展工作时也将不可避免地掉到坑里去。例如,看起来面面俱到的设计,但因为太复杂而无法落地;错估需求,导致高射炮打蚊子,浪费资源;实现方案总想毕其功于一役,结果需求变化就要推倒重来。
所以程序员要清醒地认识到,写好代码仅是软件开发过程中的一个环节,把代码写到极致也不会自动成为架构师。架构工作贯穿了软件生命周期,做好架构一定要学会架构思维。
有一本书专门告诉程序员如何培养架构思维——《架构思维:从程序员到CTO》。本书以架构师工作中的痛点问题为导向,结合大量真实、复杂的案例,帮助架构师建立起思考框架,提高架构设计能力,规划职业成长路径。
▼点击下方即可购书,限时特惠5折
https://item.jd.com/14019725.html
我们先弄清楚,架构师到底是干什么的。
01
架构师都是干什么的
曾听有的同学说,当上架构师以后就也不用再写代码了,只要把设计做出来,交给程序员去实现就行。这是对架构师工作的片面理解,做架构并不是在编程能力上进行简单的延伸,而是需要综合能力的提升。
先引用书中原话,来看一下架构师的定义:架构师是为复杂场景设计结构化软件并且引导多个团队来实施它的人。
互联网企业大规模架构活动的领域模型
根据上图中架构师所处的位置,可以总结出架构师所要承担的职责:
· 理解业务需求,分析和评估技术方案,制定合适的架构设计方案;
· 负责系统架构设计,涉及软件模块的分解、组织、交互和集成等方面;
· 选择最适合的技术栈,包括编程语言、框架、数据库等;
· 指导和参与开发人员进行编码实现,并对其进行代码审查;
· 审查和评估系统设计和代码开发过程中的技术风险和问题,并提出改进建议;
· 协调各开发团队之间的合作,确保系统架构的一致性和兼容性。
所以在架构师的技能树中,不仅需要技术能力,还要有沟通协调能力、管理能力、解决问题的能力,以及学习和创新能力。这看起来要求还不少,一般人都能达得到吗?
本书作者郭东白,就走过了一条从业余编程爱好者到程序员、架构师、CTO 的职业发展完整路径。他想通过本书浓缩对架构师这个职业的理解,也更期望这本书能帮助程序员在通往架构师的路上获得更快、更好的发展。
郭东白从布朗大学获得博士学位后,先后在美国甲骨文、微软、亚马逊任职。2014 年回国,在阿里集团先后担任全球速卖通 CTO、Lazada 集团 CTO。目前担任酷澎网络科技副总裁,同时兼任浙江大学计算机学院兼职教授和博导。
他是云计算和国际化电商平台领域的资深专家,分别为亚马逊、阿里巴巴和 Lazada 搭建每秒上万次成交,年成交额超百亿美金的大型电商平台,覆盖数字、跨境和本地三种电商商业模式,同时支持内容化、社交化、游戏化、私域化等一系列创新技术。
跟着大佬学,成为顶级架构师绝非奢望,有四大法宝可助我们一臂之力。
02
成为顶级架构师的四大法宝
程序员在通往架构师的路上没有捷径,但掌握正确的思考方式和做事原则,就可以大大缩短这个过程。书中将其分为四个独立的部分,每个部分讨论一个主题,这也是大佬传授给我们的四大法宝。
架构师的思维模式
首先介绍架构师的三种思维定式:
· 价值思维:架构师的每个决策都要最大化自己为企业创造的长期价值;
· 实证思维:通过对软件架构方法论的建模来发现指导软件架构的宏观规律,从而可被独立验证且有实用价值;
· 成长思维:以最大化能力成长为目标而进行职业选择。
架构师的实证思维、成长思维和价值思维之间的共生关系
然后将架构活动分解成为想法形成、架构规划、实施和复盘 4 个阶段,针对每个阶段的特点提出四种思维模式:全方位思维、批判思维、实用主义思维和分析思维。
这些思维定式和思维模式是贯穿全书的思考起点,是作者所强调的“架构思维”,读者需要耐心理解与消化。
架构师的生存法则
本部分内容是作者从20多年互联网软件架构生涯中亲身经历,或者近距离观察到的惨痛失败中得出的抽象总结。做架构不想掉到坑里去,就要认真学习这 6 条法则。
· 生存法则一:有唯一且正确的目标;
· 生存法则二:架构设计要顺应人性;
· 生存法则三:最大化经济价值;
· 生存法则四:架构选型必须顺应技术趋势;
· 生存法则五:通过架构手段为企业注入外部适应性;
· 生存法则六:在一个友善的企业文化中成长。
源 “MySQL 8.0 Community Server” 的 GPG 密钥已安装,但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。
失败的软件包是:mysql-community-server-8.0.31-1.el7.x86_64 GPG 密钥配置为:file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
sudo yum install mysql-server --nogpgcheck
一、查看Tomcat版本信息 (64位还是32位) 1、打开dos命令(windows键+r,输入cmd)回车。
2、进入tomcat的bin目录:输入d: 回车,例如 cd tools\apache-tomcat-8.5.37\bin。
3、输入catalina version 回车。
4、完成。信息如下:Architecture的后面,x86就是32位,amd64就是64位。
D:\tools\apache-tomcat-8.5.43\bin>catalina version
Using CATALINA_BASE2: "D:\tools\apache-tomcat-8.5.43\"
Using CATALINA_HOME2: "D:\tools\apache-tomcat-8.5.43\"
Using CATALINA_TMPDIR: "D:\tools\apache-tomcat-8.5.43\\temp"
Using JRE_HOME: "D:\tools\apache-tomcat-8.5.43\webs\jdk\jre"
Using CLASSPATH2: "D:\tools\apache-tomcat-8.5.43\\bin\bootstrap.jar;D:\tools\apache-tomcat-8.5.43\\bin\tomcat-juli.jar"
Server version: Apache Tomcat/8.5.43
Server built: Jul 4 2019 20:53:15 UTC
Server number: 8.5.43.0
OS Name: Windows 10
OS Version: 10.0
Architecture: x86
JVM Version: 1.8.0_181-b13
JVM Vendor: Oracle Corporation
二、 查看JDK版本信息 (64位还是32位) java -version # 如果没有表明64,就是32位 结果为如下,就是64位的
java version "1.8.0_391" Java(TM) SE Runtime Environment (build 1.
首先在对接api时 参数要设置stream: true,
const data = { chatId: 'abc', stream: true,//这里true返回流式数据 detail: false, variables: { uid: 'sfdsdf', name: 'zhaoyunyao,' }, messages: [{ content: text, role: 'user' }] }; 不要用axios发请求 不然处理不了流式数据 我这里使用fetch
const response = await fetch(`${url}`, { method: 'post', headers: headers, body: JSON.stringify(data) }); const reader = response.body.getReader(); //创建了一个读取器对象,用于从响应主体中读取数据。response.body 是一个 ReadableStream 对象,通过调用 getReader() 方法可以获取一个读取器对象,以便逐步读取响应的内容。 // 循环读取响应流 while (true) { const { done, value } = await reader.read(); if (done) break; // 将ArrayBuffer转为文本 const chunk = new TextDecoder('utf-8').
对您来说,另一个很棒的项目是使用我最喜欢的JavaScript库:VueJS构建聊天应用程序。
该应用程序将如下所示:
您将学到什么
学习本教程后,您将学习如何从头开始设置Vue应用-创建组件,处理状态,创建路由,连接到第三方服务,甚至处理身份验证。
技术栈和功能
Vue
Vuex
Vue Router
Vue CLI
Pusher
CSS
这真的是一个很棒的项目,开始使用Vue或提高您的现有技能,以应对2020年的发展。
您可以在此处找到该教程。
https://www.sitepoint.com/pusher-vue-real-time-chat-app/
3.使用Angular 8构建美丽的天气应用
此示例将帮助您使用Google的Angular 8构建美观的天气应用程序:
您将学到什么
这个项目将教您从头开始创建应用程序的宝贵技能,从设计到开发,再到生产就绪部署。
技术栈和功能
Angular 8
Firebase
Server-side rendering
CSS with Grid Layout and Flexbox
Mobile friendly and responsive
Dark mode
Beautiful UI
我真的非常喜欢这个综合项目,因为您不会孤立地学习东西。相反,您将学习整个开发过程——从设计到最终部署。
你真的应该做这个。
https://medium.com/@hamedbaatour/build-a-real-world-beautiful-web-app-with-angular-6-a-to-z-ultimate-guide-2018-part-i-e121dd1d55e
4.使用Svelte构建待办应用
Svelte有点像一个新来的孩子,至少与React, Vue和Angular相比是这样。尽管如此,它仍然是2020年的热门之一。
待办事项不一定是最热门的话题,但这确实可以帮助您提高Svelte技能。看起来像这样:
您将学到什么
本教程将向您展示如何使用svelte3制作一个应用程序,从开始到结束。它使用组件、样式和事件处理程序。
技术栈和功能
Svelte 3
Components
Styling via CSS
ES 6 语法
市面上并没有那么多好的的Svelte入门项目,所以我觉得这是一个不错的开始。
https://medium.com/codingthesmartway-com-blog/building-a-svelte-3-todo-app-from-start-to-deployment-1737f72c23a6
5.使用Next.js构建电商购物车
Next.js是最流行的框架,用于创建支持应用程序开箱即用的React应用程序。
该项目将向您展示如何构建一个如下所示的电子商务购物车:
您将学到什么
在这个项目中,您将学习如何设置一个Next.js开发环境——创建新页面和组件、获取数据、设置样式并部署下一个应用程序。
技术栈和功能
开发前的准备 1.阿里云开通模型服务灵积-获取key 阿里云-通义千问文档: 点击跳转
2.使用文档中的sse流式返回 参考:官方文档中 HTTP调用接口-请求实例(SSE开启)
1.请求地址: 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation' 1.请求头: --header 'Authorization: Bearer <your-dashscope-api-key>' \ --header 'Content-Type: application/json' \ --header 'X-DashScope-SSE: enable' \ 3.post传值: data{ "model": "qwen-turbo", "input":{ "messages":[ { "role": "system", "content": "You are a helpful assistant." }, { "role": "user", "content": "你好,哪个公园距离我最近?" } ] }, "parameters": { "result_format": "message" } }' 3.vue中使用 (1)安装请求sse 接口调用fetchEventSource npm install @microsoft/fetch-event-source (2)将fetchEventSource引入到项目中 import { fetchEventSource } from "@microsoft/fetch-event-source" (3)请求接口-通义千问api //封装调用千问api方法,data:请求bady, key:密钥 aiSse (data,key) { let that = this let controller = new AbortController() const eventSource = fetchEventSource('/tyqw/api/v1/services/aigc/text-generation/generation', { method: 'POST', headers: { Authorization: key, 'Content-Type': 'application/json', 'Accept':'text/event-stream', 'X-DashScope-SSE': 'enable', }, body: JSON.
生成文件夹 */
public static void makeRootDirectory(String filePath) {
File file = null;
try {
file = new File(filePath);
if (!file.exists()) {
file.mkdir();
}
} catch (Exception e) {
Log.i(“error:”, e + “”);
}
}
/**
读取本地文件 */
public static String readDeviceId() {
String path = Constant.PATH_SAVE_DEVICE + fileName;
StringBuilder stringBuilder = new StringBuilder();
File file = new File(path);
if (!file.exists()) {
return “”;
}
if (file.isDirectory()) {
Log.e(“TestFile”, “The File doesn’t not exist.