Q: 我现在遇到的问题:我在做一个saas服务,现在面对多家客户。对同一个功能,需要使用不同客户的接口。比如,我的发送短信功能,每个客户的发消息接口都不同。那么哪种设计模式可以解决我的问题,可以使用c#来给我演示 A:
面对这种需要根据不同客户使用不同接口的情况,一个常见的解决方案是使用策略模式(Strategy Pattern)。策略模式允许在运行时选择算法或行为,非常适合于你描述的场景,即根据不同的客户使用不同的发送短信接口。
以下是使用C#实现策略模式的一个简单示例:
定义发送短信的接口: public interface ISmsSender { void SendSms(string message, string phoneNumber); } 实现具体的发送短信策略: public class SmsSenderA : ISmsSender { public void SendSms(string message, string phoneNumber) { Console.WriteLine($"Sending SMS with provider A to {phoneNumber}: {message}"); // 实现使用客户A的接口发送短信的逻辑 } } public class SmsSenderB : ISmsSender { public void SendSms(string message, string phoneNumber) { Console.WriteLine($"Sending SMS with provider B to {phoneNumber}: {message}"); // 实现使用客户B的接口发送短信的逻辑 } } 创建一个上下文类,用于设置和执行发送短信的操作: public class SmsService { private ISmsSender _smsSender; public SmsService(ISmsSender smsSender) { _smsSender = smsSender; } public void SetSmsSender(ISmsSender smsSender) { _smsSender = smsSender; } public void SendMessage(string message, string phoneNumber) { _smsSender.
序言 在本篇内容中,将为大家介绍在操作系统中的一个重要的机制 — 信号。大家可能感到疑惑,好像我在使用 Linux 的过程中并没有接触过信号,这是啥呀?其实我们经常遇到过,当我们运行的进程当进程尝试访问非法内存地址时,我们的进程会被中断,这是因为操作系统向该进程发送了中断信号。
Linux 操作系统离不开信号机制,在这篇文章中,让我们走进信号,了解信号的从哪里来,又到哪里去。
1. 信号的概念 1.1 定义 信号是操作系统向进程发送的一种通知,表示某个特定事件已经发生。在Unix、类Unix 以及其他系统中,信号被广泛使用。
1.2 特点 信号具有如下的特点:
异步性:信号的产生对进程来说是异步的,即 进程无法预知信号何时到来。通知机制:信号是一种 软件中断(由软件程序触发的中断方式),用于中断进程的正常执行流程,使其处理特定事件。进程间通信:虽然信号主要用于异常处理和系统调试,但也可以用于进程间的基本通信。
1.3 种类 在 Linux 系统下,使用指令:kill -l 即可查看所有的信号:
信号是使用宏定义的,每个信号前面的数字,就是该信号宏对应的值。
前 31 个信号为常规信号,其余为实时信号。在本篇文章中,我们主要讨论前 31 个常规信号。
你也可以使用指令: man 7 signal 查看每一个详细信息:
补充知识点:Core && Term 在描述信号的字段中,有一个叫做 Action 的特征,他的值大多都是 Core Term 这是什么呢?
Term term 是 terminate 的缩写,表示默认动作是终止进程。当进程接收到一个默认动作为 term 的信号时,进程会被立即终止。
Core core 表示 默认动作是终止进程并生成一个核心转储(core dump)文件。核心转储是一个包含进程在终止时的内存映像的文件,它对于调试程序非常有用,因为它 提供了进程终止时的状态信息。
咦?就比如,SIGSEGV 段错误 当我的程序非法访问被终结时,被没有产生传说中的核心转储文件呀?这是因为你的服务器默认关闭了该功能,使用指令 ulimit -a 查看:
现在我们使用指令 ulimit -c 4096 开启该功能:
《艾希手游》是一款以女性为主角的游戏,玩家在游戏中将扮演主角艾希,在各种场景中进行冒险,探索剧情和解开谜题。这款游戏的画面精美,操作简单易上手,同时提供了丰富的剧情和多样的玩法。
下载地址:https://pan.quark.cn/s/580d6e11d95b
更多手机游戏:https://vika.cn/share/shrveF9wiNrMxuGrQSlMh
操作方式:游戏采用触屏操作方式,玩家通过点击屏幕上的虚拟按键进行操作,如跳跃、攻击、防御、技能释放等。
地图探索:游戏中的地图非常庞大,玩家需要不断探索以找到通往下一个场景的道路。在探索过程中,玩家可以发现隐藏的宝箱和秘密通道,同时还可以与NPC交流获取有用的信息和提示。
剧情推进:艾希手游的剧情丰富,玩家通过与NPC交流、解谜题等方式推进剧情,了解艾希的身世和故事背景,并解锁更多场景和玩法。
技能学习:艾希可以学习多种技能,帮助她在战斗中更轻松地击败敌人。技能的学习和升级需要消耗金币和经验值,这些可以通过战斗和探索获得。
战斗技巧:在战斗中,艾希需要灵活运用各种攻击方式和技能。玩家需要注意敌人的攻击方式和弱点,并采取相应的策略。
我们知道在Settings中,各模块之间的Fragment基本都继承了DashboardFragment,当有点击事件时,就会回调DashboardFragment中的onPerferenceTreeClick()方法。
在onPreferenceTreeClick()方法中可以根据preference的key做事件拦截,如果不拦截,将会调用到父类InstrumentedPreferenceFragment的onPreferenceTreeClick()方法
在该方法中,又将会调用到androidx中的PreferenceFragmentCompat方法中,由于androidx中源码不开放,故在此不做分析,但下一步将回调到SettingsActivity中的onPreferenceStartFragment()方法
在该方法中由SubSettingLauncher类里面的launch()方法,启动了对应的空Activity,但在Setting中各模块的Activity都是继承SettingsActivity的。但对应的空Activity启动时,就会执行SettingsActivity中的onCreate()方法
最终在launchSettingFragment(initialFragment, isSubSettings, intent)方法中加载相对应的Fragment布局。
一、引言 蚁群算法(Ant Colony Optimization, ACO)是一种模拟蚂蚁觅食行为的启发式搜索算法。它由Marco Dorigo于1992年提出,适用于解决组合优化问题,如旅行商问题(TSP)、车辆路径问题(VRP)等。
受自然界中蚂蚁觅食行为的启发。蚂蚁在寻找食物的过程中,会在路径上释放信息素(pheromone),信息素的浓度影响其他蚂蚁选择路径的概率。通过这种方式,蚂蚁能够找到最优路径。
这种算法通过蚂蚁之间的信息素相互作用来寻找最优解,基于以下几个核心概念:
信息素:蚂蚁在行进过程中会在路径上留下信息素的浓度,其他蚂蚁依据信息素浓度选择路径,信息素的浓度会随时间衰减。
启发函数:用于指导蚂蚁的决策,通常根据问题目标来设计,例如在求解最短路径问题时,可以将启发函数设置为路径的倒数。
蚂蚁的决策:蚂蚁选择路径时会综合考虑信息素浓度和启发值。
二、算法原理 蚁群算法的核心原理是利用蚂蚁在寻找食物过程中留下的信息素进行路径选择。蚂蚁在移动过程中会释放信息素,同时能够感知其他蚂蚁留下的信息素浓度,倾向于选择信息素浓度较高的路径。随着时间的推移,一条从食物源到蚁巢的最优路径会逐渐形成。
三、数据结构 蚁群算法中涉及的主要数据结构包括:
图:表示问题的状态空间,节点表示状态,边表示状态间的转移。信息素矩阵:记录每条边的信息素浓度。启发式信息矩阵:表示每条边的启发式信息,如距离的倒数。 四、算法使用场景 蚁群算法适用于以下场景:
路径规划问题:如旅行商问题(TSP)寻找一条最短路径,经过所有城市且每个城市仅访问一次、车辆路径问题、优化配送路线,降低运输成本。 调度问题:如作业调度、任务调度。网络设计:如网络路由、拓扑设计、优化数据包在网络中的传输路径。任务调度:在多任务环境中,优化任务分配和调度顺序。 五、算法实现 初始化:设置蚂蚁数量、信息素浓度、启发函数等参数。
路径选择:每只蚂蚁根据信息素浓度和启发函数选择路径。
信息素更新:蒸发:信息素会随着时间的推移而蒸发,降低其浓度。增加:找到更优路径的蚂蚁会在路径上增加信息素。
迭代:重复路径选择和信息素更新,直到满足终止条件(如达到最大迭代次数或找到满意解)。
伪代码:
class AntColonyAlgorithm: def __init__(self, num_ants, num_iterations, alpha, beta, evaporation_rate): self.num_ants = num_ants self.num_iterations = num_iterations self.alpha = alpha self.beta = beta self.evaporation_rate = evaporation_rate self.pheromone_matrix = np.ones((num_cities, num_cities)) def update_pheromones(self): # 更新信息素 self.pheromone_matrix *= (1 - self.evaporation_rate) def ant_solution(self, ant): # 蚂蚁找到一条可行路径的方法 pass def solve(self): for _ in range(self.
在Java开发过程中,我们经常需要处理Excel文件的读写操作。当数据量较大时,如何高效地将数据写入Excel文件成为了一个关键问题。本文将介绍如何使用Apache POI库中的SXSSFWorkbook类来高效地写入大量数据到Excel文件。
一、背景
在日常工作中,我们经常遇到需要将大量数据导出到Excel文件的需求。Excel文件有.xls和.xlsx两种格式,其中.xls格式最多只能支持65536行数据,而.xlsx格式则可以支持更大的数据量。但在写入大量数据时,.xlsx格式文件的写入速度较慢,且消耗内存较多。针对这一问题,Apache POI库提供了SXSSFWorkbook类,专门用于处理大型Excel文件的写入操作。
二、SXSSFWorkbook简介
SXSSFWorkbook是Apache POI库中的一个类,它继承自XSSFWorkbook。SXSSFWorkbook在写入大量数据时具有以下优点:
写入速度快:SXSSFWorkbook在写入数据时,默认将数据分成多个块(默认100行),超出部分会写入临时文件,从而减少内存消耗。占用内存少:相较于XSSFWorkbook,SXSSFWorkbook在处理大量数据时,内存占用更少。支持大数据量:SXSSFWorkbook可以写入超过100万条甚至更多条数据。
三、代码实现
以下是一个使用SXSSFWorkbook写入大量数据到Excel文件的示例: @Test public void testWrite07BigDataFast() throws IOException { // 记录开始时间 long begin = System.currentTimeMillis(); // 创建一个SXSSFWorkbook对象 Workbook workbook = new SXSSFWorkbook(); // 创建一个sheet Sheet sheet = workbook.createSheet(); // 循环写入100000行数据,每行10个单元格 for (int rowNum = 0; rowNum < 100000; rowNum++) { // 创建一个行 Row row = sheet.createRow(rowNum); for (int cellNum = 0; cellNum < 10; cellNum++) { // 创建单元格并设置值 Cell cell = row.
对于游戏爱好者而言,如何在Mac上安装并使用Steam玩游戏成为一个重要的问题,Steam作为全球最大的数字发行平台和游戏社区,为玩家提供了丰富的游戏资源和社交交流平台。然而,由于Mac和Windows系统之间存在差异,很多人不确定苹果笔记本是否能流畅地运行Steam游戏。
在这篇文章中,我们不仅会详细给出这个问题的答案,还将提供一个完整的Steam苹果电脑安装教程,帮助你在Mac上玩Steam游戏。
一、苹果笔记本能玩Steam吗 从Steam官网可以看到,Steam提供了Mac版本的安装包,这就说明,苹果笔记本可以玩Steam。
虽然Steam支持macOS,但实际上在Steam上可以运行的Mac游戏数量相对较少,许多热门的游戏都只针对Windows进行了优化。你可以玩一些原生支持Mac的游戏,你可以在“分类-MacOS”中筛选可以玩的游戏。实际的游戏体验取决于多个因素,主要是:电脑的硬件配置、Mac系统版本和你所玩的游戏。
1、Mac电脑硬件配置:苹果笔记本的硬件配置会直接影响游戏的性能。一般来说,苹果笔记本的Pro系列有着更强的性能,运行Steam中的游戏更加流畅。相比于Air系列,由于Air系列硬件水平相对较弱,可能在运行大型游戏时遇到卡顿。
2、操作系统版本:不同版本的macOS对Steam的支持也有所不同。如果目前你的操作系统不支持安装Steam,建议你升级到MacOS的最新版,然后重新尝试安装Steam。
如果你又不想安装双系统,并且想在Mac上玩那些仅支持Windows平台的Steam游戏,建议你使用CrossOver这款软件。它可以让你在Mac上运行Windows的软件,当然包括许多Steam游戏。
总的来说,苹果笔记本可以玩Steam游戏,加上CrossOver的“神助”,你用Mac电脑也可以玩绝大多数Steam中的游戏。
二、Steam对笔记本要求高吗? Steam平台上的游戏对笔记本的要求因游戏而异。在选择笔记本时,用户应根据自己的需求和预算,权衡游戏的配置要求和个人使用习惯来做出决定。
对于低配置的游戏,如一些独立小游戏或优化较好的游戏,即使是较旧的笔记本也能流畅运行。然而,对于更大型、图形要求更高的游戏,如一些3A大作,Steam平台上的游戏对笔记本的配置要求会更高。这些游戏需要更强大的处理器和显卡来支持高分辨率和高帧率的游戏体验。
此外,Steam平台上的用户硬件调查数据显示,大多数玩家使用的CPU核心数为4核,显卡主要为GTX1060和GTX1050Ti等中端型号,内存主要为8GB或16GB。这表明,中端配置的笔记本已经能够满足大部分Steam玩家的需求。
总的来说,Steam平台上的游戏对笔记本的要求取决于游戏的类型和玩家的期望体验。对于预算有限或需要便携性的用户,可以选择一些低配置要求的游戏;而对于追求更高画质和性能的用户,可能需要考虑配置更高的笔记本或台式机。
三、Steam苹果电脑安装教程 使用CrossOver可以在Mac上运行那些仅支持Windows的Steam游戏,例如:《赛博朋克2077》、《艾尔登法环》、《霍格沃茨之遗》、《魔兽世界怀旧服》、《黑神话悟空》等。以下是通过CrossOver安装Steam的详细步骤:
1、下载并安装CrossOver:
CrossOver 24 Mac中文免费安装包(此链持续指向最新):https://souurl.cn/mWK48N
下载完成后,双击安装文件,按照提示完成安装。
2、打开CrossOver并安装Steam:安装完成后,打开软件,点击主界面右下角的“安装”。在搜索框中输入“Steam”,选择Steam软件。
3、安装Steam:CrossOver会自动下载并安装Steam,该过程需要网络,安装过程不要断网。如果需要手动安装Steam向导,保持默认安装位置即可。
安装完成后,你可以在CrossOver的容器列表中看到新创建的容器。
4、启动Steam并登录:在CrossOver中双击启动Steam,输入你的账户信息并登录。
5、下载安装游戏:登陆后,我们可以在Steam上下载并安装你需要的游戏。
注意:畅玩游戏需要M系列芯片电脑,并打开CrossOver-高级设置中的【D3DMetal】和【ESync】选项。
通过CrossOver,你可以在Mac上运行许多Windows专属的Steam游戏,享受更多的游戏乐趣。
虽然Mac电脑可以玩的游戏相比于Windows电脑来说并不多。但是通过CrossOver这款软件,Mac用户同样可以在Steam平台上享受到和Windows平台相同的游戏。希望本文对你有所帮助。
CrossOver 24 Mac中文免费安装包(此链持续指向最新):https://souurl.cn/mWK48N
CrossOver Mac激活码获取:https://souurl.cn/xneFDq
基于UDP的网络聊天室 一.项目需求: 1.如果有用户登录,其他用户可以收到这个人的登录信息
2.如果有人发送信息,其他用户可以收到这个人的群聊信息
3.如果有人下线,其他用户可以收到这个人的下线信息
4.服务器可以发送系统信息
二.代码 udp.h #ifndef UDP_H #define UDP_H #include <myhead.h> #define SER_PORT 8888 // 服务器端口号 #define SER_IP "192.168.0.105" // 服务器ip地址 #define CLI_PORT 5555 // 客户端端口号 #define CLI_IP "192.168.0.105" // 客户端地址 //枚举 enum type_t { Login, Chat, Quit, }; typedef struct MSG { char type;//Login名字 Chat内容 Quit退出 //内容编号 char name[32];//名字 char text[128];//内容 }msg_t; typedef struct NODE//链表 { struct sockaddr_in cin; struct NODE *next; }Node,*Nodeptr; //创建头节点函数 Nodeptr create(); //登录的函数 //功能: //1.
1. 系统弹出框 import { promptAction } from '@kit.ArkUI'; @Component struct weChat { @State text:string ='' build(){ Column(){ Text(this.text ) Search({value:$$this.text}) Button('改值').onClick(()=>{ promptAction.showToast({ message:this.text,duration:10000 }) }) } } } message是弹出的内容 duration是控制弹出的时间
2.interface转成class类 npm i -g interface2class 在IndexPage声明了两个interface
点击回车就自动生成了
3.vp/fp 不论是什么样的像素密度的设备,可呈现区域是一样的
fp---》字体大小
vp----->宽高大小
4. 写一个正方形 设置它的宽度 但不设定高度 不论屏幕怎么变实现他的宽高比 .aspectRatio(长/宽) 5.@State state修饰的数据是响应式数据,他只能检测到单层的数据变化,如果要更新多层
要么连带着更新单层要么重新new一个先声明interface,用工具生成class实现 interface2classinterface生命类型也是可以的 ,如果用到了嵌套更新,必须得用class 6.图片和资源 本地路径 线上路径 必须开启网络权限
svg着色-主题资源目录下-base/media(图片)(推荐)图片不需要跟后缀 rawfile(原始文件) 7.淘宝镜像 npm config get registry npm config set registry https://registry.npmirror.com/ 7.1windows 脚本禁用(操作策略 允许npm包的命令可执行) 8.
一、目标 通过前面对类和对象的介绍我们可以自己通过C++代码初步实现一个简单的日期类。
实现的主要操作有:
1.日期类的构造函数
2.日期类的拷贝构造函数(在头文件中实现)
3.日期类的比较运算符重载
4.日期类的计算运算符重载
5.流插入运算符重载。
二、总体思路 首先,我这里采用的是分文件编程的方式来实现的日期类。
分别为:
1.头文件:Date.h 该文件的主要目的是对上述目标所要实现的所有操作进行函数的声明。同时,还要包含在
源文件Date.cpp 中定义时所需要用到的头文件函数。
2.源文件:Date.cpp 该文件的目的主要是用于对 头文件Date.h 所声明的所有函数进行定义,从而完成各个函数所要实现的操作。
3.源文件:Test.cpp 该文件的目的主要是用于检测 源文件Date.cpp 中定义的函数是否能正常够使用并且达到所要实现的操作。
三、代码实现及具体思路 1.头文件:Date.h 通过上面思路的介绍,我们可以知道,我们的目的是创建一个日期类,然后在日期类中自我声明:日期类的构造函数、日期类的比较运算符重载、日期类的计算运算符重载以及流插入运算符重载。并实现拷贝构造函数。
(注意:通过我们前面对类和对象的介绍可知,因为在实现日期类过程中,我们没有动态申请空间,所以我们只需使用编译器默认生成的析构函数就可以,因此,我们不需要自己再定义一个析构函数)
代码如下:
#pragma once #include <iostream> #include <assert.h> using namespace std; class Date { public: Date(int year = 1, int month = 1, int day = 1); void Print()const { cout << _year << '-' << _month << '-' << _day << endl; } Date(const Date& d) { _year = d.
爬取视频 本次爬取,还是运用的是requests方法
首先进入此网站中,选取你想要爬取的视频,进入视频播放页面,按F12,将网络中的名称栏向上拉找到第一个并点击,可以在标头中,找到后续我们想要的一些信息。
爬取视频的步骤大致分为
1、UA伪装2、获取url3、发送请求4、获取响应的数据5、数据解析 获取存放视频和音频数据的"window.playinfo"文本内容分别获取视频和音频的url将获取到的视频和音频数据存放在两个不同的文件中 UA伪装
找到Cookie并复制—>用户登陆此网站的个人Cookie信息,每个人的都不同找到Referer并复制—>每个网站的防盗链找到User-Agent并复制—>标头的最下面
# UA伪装 head = { "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0" # 防盗链子 , "Referer":"https://www.bilibili.com/" , "Cookie":"CURRENT_FNVAL=4048; buvid3=BE2D386A-BBCB-E06E-8C2B-F5223B4C8BC517591infoc; b_nut=1721567317; _uuid=67165DF10-7B77-BDE8-3C63-732C2FCAF4D520375infoc; enable_web_push=DISABLE; buvid4=0245F01B-6C4B-CD5A-2EC5-BC060EC0777D18433-024072113-zRTpkL0r94scQqxGfSYKhQ%3D%3D; home_feed_column=5; header_theme_version=CLOSE; rpdid=|(Y|RJRR)Y~0J'u~kulY~Rkk; DedeUserID=1611307689; DedeUserID__ckMd5=b0865dba0b3ced5b; buvid_fp_plain=undefined; is-2022-channel=1; b_lsid=D8542F24_191412D93C0; bsource=search_bing; bmg_af_switch=1; bmg_src_def_domain=i1.hdslb.com; browser_resolution=1659-943; bili_ticket=eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjM2MzQ1OTMsImlhdCI6MTcyMzM3NTMzMywicGx0IjotMX0.Ox8rnEpQH5i1H_wQfH2z5CzZC0y8PlqQCy1KVa8XEfQ; bili_ticket_expires=1723634533; SESSDATA=f567fef6%2C1738927393%2C5d207%2A82CjAh2pSUKwDLr1XiI6ncU5B6NXEfWKS7ES6mDC8yGxM6aT3-BTdvK0KAlYpMhCXtEXgSVkl2aTlQWUNacTZOZ0ZNXzJwZ21QT2ozMXFXcWtFc1FpNnBIWlNWbml2Y3BxNV80bUNMZTBVN1dyb3h0STU1ZklDM0MwckJvanRmTmNkeTBFcW5qYl9RIIEC; bili_jct=8d788bcb503d69ba2ded7dfbb53f6e58; sid=71po5kkf; fingerprint=0c7279b7c69b9542a76b8d9df9b7872a; buvid_fp=BE2D386A-BBCB-E06E-8C2B-F5223B4C8BC517591infoc; bp_t_offset_1611307689=964382000909647872" } 获取url
可以在标头中看到请求URL
# 指定url 自定义一个变量接收 url = "https://www.bilibili.com/video/BV17w4m1e7PT/?spm_id_from=333.1007.tianma.1-1-1.click&vd_source=2a6e427465a2f829272f5863986dfa80" 发送请求
可以在标头中看到请求方式,这里的请求方式是GET方法
# 发送请求,这里的请求方式是get方法 response = requests.
坐标系 一、创建添加坐标系 给场景添加坐标系THREE.AxesHelper()的参数表示坐标系坐标轴线段尺寸大小,你可以根据需要改变尺寸
const axesHelper = new THREE.AxesHelper(200)//数值是坐标的尺寸 scene.add(axesHelper)//添加到场景里 坐标系包含三个坐标轴,xyz。分别是红,绿,蓝,x轴右偏下方向,Y轴默认向上,Z轴则是左偏下方向
光源 受光源影响材质 光源可以理解为,房间里有东西,可是没有光的话,就看不到。只是threejs中的物体并不是所有的都受光源限制,大致可以分为受光源限制的和不受光源限制的材质
不受光源限制的材质
const material = new THREE.MeshBasicMaterial()//不受光源限制的材质 受光源限制的材质
//MeshLambertMaterial受光照影响 const material = new THREE.MeshLambertMaterial(); 没有光源物体看不到了(其他受光源影响的是表现一样,就不一个个展示了)
光源分类 光源分为四个类,点光源PointLight(灯泡),平行光 DirectionalLight,聚光灯灯源 SpotLight,环境光 AmbientLight。
1)、PointLight 点光源 color -(可选)一个表示颜色的 Color 的实例、字符串或数字,默认为一个白色(0xffffff)的 Color 对象。
intensity -(可选)光照强度。默认值为 1。
distance - 光源照射的最大距离。默认值为 0(无限远)。
decay - 沿着光照距离的衰退量。默认值为 2。
2)、DirectionalLight 平行光 color -(可选)一个表示颜色的 Color 的实例、字符串或数字,默认为一个白色(0xffffff)的 Color 对象。
intensity -(可选)光照强度。默认值为 1。
3)、SpotLight 聚光灯 color -(可选)一个表示颜色的 Color 的实例、字符串或数字,默认为一个白色(0xffffff)的 Color 对象。
目录
前言
道路千万条,安全第一条
爬虫不谨慎,亲人两行泪
获取b站的章若楠的视频
一、话不多说,先上代码
二、爬虫四步走
1.UA伪装
2.获取url
3.发送请求
4.获取响应数据进行解析并保存
总结
前言 道路千万条,安全第一条 爬虫不谨慎,亲人两行泪 获取b站的章若楠的视频 不要问,问就是博主喜欢,嘿嘿嘿嘿(流口水)
一、话不多说,先上代码 # 请求b站视频 import json import requests from lxml import etree if __name__ == '__main__': head = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0" , # 防盗链 "Referer": "https://www.bilibili.com/" , "Cookie": "buvid3=3EEF3EE1-472C-F430-105F-0E4F321F331C25161infoc; b_nut=1720613925; _uuid=46847D108-EFD1-9828-99910-32119EADB6EB26022infoc; enable_web_push=DISABLE; buvid4=E9918A3A-008D-2748-2B1F-78B04E8CCA5825688-024071012-IYJQtQw8DTdtrI0uY1UGvQ%3D%3D; buvid_fp=adf3cfaf35396cd4f051041d58ea252d; DedeUserID=455536180; DedeUserID__ckMd5=ece5cba51b3582b0; header_theme_version=CLOSE; rpdid=|(Y|RJRRJ~m0J'u~k|YuR|k); hit-dyn-v2=1; CURRENT_BLACKGAP=0; CURRENT_FNVAL=4048; CURRENT_QUALITY=80; b_lsid=FA4254F2_190DA67F5A6; bmg_af_switch=1; bmg_src_def_domain=i0.
前言 灵办AI是一个先进的人工智能工具,专注于提高软件开发和项目管理的效率。其核心功能包括代码生成、优化、评估和自动化修复,旨在帮助开发者和团队提升开发速度和代码质量。
体验地址:https://ilingban.com/browser_extension/?from=jj
开发背景
目标:灵办AI的主要目标是简化软件开发过程,通过智能化的工具提升开发效率和代码质量,减少开发时间和成本。
技术基础:灵办AI基于最新的机器学习和自然语言处理技术,结合深度学习模型和大数据分析,能够智能生成和优化代码。核心功能
自动代码生成:根据用户输入的需求,灵办AI能够自动生成符合项目需求的代码框架和模板,减少开发人员的手动编码工作。
代码优化:分析现有代码结构,提供优化建议,帮助开发者提升代码的执行效率和可维护性。
智能检测和修复:通过智能分析技术,灵办AI能够发现代码中的潜在问题和错误,并提供自动修复方案。对代码质量进行全面评估,包括代码的规范性、性能和安全性,提供详细的改进建议。
AI翻译:灵办AI提供多种语言的相互转换,在实际开发中,起到了必不可少的帮助作用。应用场景
项目开发:在各种软件项目开发过程中,灵办AI能够显著提升开发速度,减少错误,改进代码质量。
代码审查:作为代码审查的辅助工具,帮助团队及时发现和修复问题,保证代码符合标准。
教育培训:用于培训和指导新手开发者,提升他们的编码技能和理解能力。优势
高效:通过自动化生成和优化,极大缩短了开发周期,提升了开发效率。
稳定:智能检测和修复功能提高了代码的稳定性,减少了潜在的错误和漏洞。
可靠:基于先进的人工智能技术,提供精准的代码分析和改进建议。发展前景
技术进步:随着人工智能技术的不断进步,灵办AI将继续更新和优化其功能,保持在行业中的领先地位。未来可能会扩展到更多领域,如数据分析、机器学习模型开发等,为更多行业提供支持。 开发环境配置 首先,进入灵办[官网],点击免费添加到Edge插件。这里也可以使用网页版,在经我个人使用后,我还是推荐使用插件版本。
点击获取即可,如下将会弹出一个窗口
点击 添加扩展
至此插件成功安装,接下来让我们一起体验一下灵办AI的强大功能吧!
这可以设置灵办AI小助手的显示设置,这里看个人喜好啦,我推荐还是全部打开,以便更好的体验灵办AI的功能。
项目实例应用 一:功能介绍 AI对话 灵办AI助手提供AI对话功能,包括AI搜索、文案写作、文件解读、翻译助手等强大功能。
比如查看比亚迪2024年一季度财报
可上传文档,灵办AI就可以对文档进行解析,生成全文概述,还可以针对文档中的内容进行提问。
AI翻译 对于网页上的文字,我们直接选中即可弹出灵办AI快捷小助手的图标,针对文字可进行总结、翻译等功能,简直是太方便使用啦。
正好最近在读国外分布式相关的论文,遇到不认识的单词再也不用一个个查单词意思了,大大提高了阅读效率。 AI代码 对于一个聊天服务器项目生成测试代码:
当我们在项目中不想重复实现写一些代码功能时,可直接利用AI助手几秒钟生成一份准确完整的代码,比如下图生成了一份基于C++11的线程池代码:
二:项目测试 我们可以利用灵办AI助手辅助编程实现一个播放器项目,具体操作流程如下
FFmpeg二次开发 其中最重要的就是灵办AI助手强大的代码检测功能,即对正确处理音视频数据的内存分配和释放,能给出详细代码注释,并有效的修复出现的一些代码问题,从而避免内存泄漏或数据损坏。具体代码如下:
#include <libavformat/avformat.h> #include <libavcodec/avcodec.h> #include <libswscale/swscale.h> #include <libavutil/imgutils.h> #include <SDL2/SDL.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { av_register_all(); AVFormatContext *pFormatCtx = NULL; if (avformat_open_input(&pFormatCtx, "
AudioTrack AudioTrack类说明: /** * The AudioTrack class manages and plays a single audio resource for Java applications. * It allows streaming of PCM audio buffers to the audio sink for playback. This is * achieved by "pushing" the data to the AudioTrack object using one of the * {@link #write(byte[], int, int)}, {@link #write(short[], int, int)}, * and {@link #write(float[], int, int, int)} methods. * * <p>An AudioTrack instance can operate under two modes: static or streaming.
目录
一、缺省参数
二、函数重载
三、引用
3.1 引用的概念和定义
3.2 引用的特征
3.3 引用的使用
3.4 const引用
3.5 指针和引用的关系
一、缺省参数 • 缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值,在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参,缺省参数分为全缺省和半缺省参数。(有些地方把缺省参数也叫默认参数)。
void Func(int a = 0) { cout << a << endl; } int main() { Func(); } 在这个函数中“int a”就是缺省形参,“10”就是缺省值,当使用该函数没有传参时就会使用缺省值,传参时就会使用指定参数。
• 全缺省就是全部形参给缺省值,半缺省就是部分形参给缺省值,C++规定半缺省参数必须从右往左依次连续缺省,不能间隔跳跃给缺省值。
void func(int a=1.,int b,int c=2)
{
}
上面这种给缺省参数就是错误的写法,必须从右往左连续缺省,中间不能断。
• 带缺省参数的函数调用,C++规定必须从左到右依次给实参,不能跳跃给实参。
• 函数声明和定义分离时,缺省参数不能在函数声明和定义中同时出现,规定必须函数声明给缺省 值。
避免声明和定义时缺省参数写的不一样,编译器就不清楚该用哪个缺省值。
二、函数重载 C++⽀持在同⼀作用域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者类型不同,这样C++函数调用就表现出了多态行为,使用更灵活,C语⾔是不支持同⼀作用域中出现同名函数的。
1、参数类型不同
int Add(int left, int right) { cout << "int Add(int left, int right)" << endl; return left + right; } double Add(double left, double right) { cout << "
在日常开发中,我们常常需要快速查看和操作SQLite数据库中的数据。虽然有许多现成的工具可以完成这一任务,但有时你可能想要一个更为简单、可定制的解决方案。在这篇博客中,我将带你一步步构建一个简单的SQLite数据库浏览器,它可以用来列出数据库中的表名、查看表的字段名、编写SQL语句并执行查询操作,并将结果展示在网格中。我们将使用 wxPython 来创建这个图形用户界面。
C:\pythoncode\new\sqliteanalysis.py
全部代码 import wx import sqlite3 import wx.grid as gridlib class SQLiteBrowser(wx.Frame): def __init__(self, *args, **kw): super(SQLiteBrowser, self).__init__(*args, **kw) self.InitUI() self.conn = None def InitUI(self): panel = wx.Panel(self) vbox = wx.BoxSizer(wx.VERTICAL) hbox1 = wx.BoxSizer(wx.HORIZONTAL) self.btn_open = wx.Button(panel, label="Open Database") self.btn_open.Bind(wx.EVT_BUTTON, self.OnOpen) hbox1.Add(self.btn_open, flag=wx.LEFT, border=10) vbox.Add(hbox1, flag=wx.EXPAND | wx.TOP | wx.BOTTOM, border=10) hbox2 = wx.BoxSizer(wx.HORIZONTAL) self.listbox1 = wx.ListBox(panel) self.listbox1.Bind(wx.EVT_LISTBOX, self.OnTableSelected) hbox2.Add(self.listbox1, proportion=1, flag=wx.EXPAND | wx.ALL, border=10) self.listbox2 = wx.
1、机器学习-场景化语音服务(ArkTS) 介绍:介绍了如何使用HarmonyOS提供的Speech Kit(场景化语音服务):Speech Kit(场景化语音服务)集成了语音类AI能力,包括朗读控件(TextReader)和AI字幕控件(AICaption)能力。其中,朗读控件可以在用户不方便或者无法查看屏幕文字的时候,为用户朗读新闻,提供资讯;AI字幕控件则能在用户不熟悉音频源语言或者静音的场景下,为用户提供字幕服务。
总结:通过此Codelab,可了解到以下知识点:
如何使用Harmony OS SDK完成一个基本Demo编写。
如何调用Harmony OS SDK中的Speech Kit。
详情地址:https://developer.huawei.com/consumer/cn/codelabsPortal/carddetails/tutorials_Next-SpeechKit
2、机器学习-基础视觉服务(ArkTS) 介绍:
通用文字识别服务旨在为开发者提供图像信息转换为字符信息的能力。通过拍照、扫描等光学输入方式,把各种票据、卡证、表格、报刊、书籍等印刷品文字转化为图像信息,再利用文字识别技术将图像信息转化为计算机等设备可以使用的字符信息,便于用户提取字符内容、屏幕坐标及外框。目前本服务支持识别的语言有:简体中文、英文、日文、韩文、繁体中文。
人脸检测功能通过对图片中的人脸进行识别、检测,返回高精度人脸矩形框坐标、人脸五官位置、人脸朝向、人脸置信度。可通过对人脸的定位,实现对人脸特定位置的美化修饰。广泛应用于各类人脸识别场景,如人脸解锁、人脸聚类、美颜等场景中。不支持同一用户启用多个线程。
人脸比对功能通过对两张各包含一个清晰人脸的图片,将两张人脸进行高精度比对,输出相似度值,进而判断两者是否为同一个人。
主体分割功能通过识别图片中的一个或多个显著性(图片面占比大于千分之五)主体,输出该显著性主体的边界框、前景图、掩码图等数据。
多目标识别功能通过识别图片中常见的目标对象,输出目标对象的信息。
骨骼点检测功能通过关键点描述人体骨骼信息
总结:通过此Codelab,可了解到以下知识点:
如何使用Harmony OS SDK完成一个基本Demo编写。
如何调用Harmony OS SDK 中的通用文字识别功能。
如何调用Harmony OS SDK中Core Vision Kit的人脸检测和人脸比对功能
如何调用Harmony OS SDK中Core Vision Kit的主体分割功能
如何调用Harmony OS SDK中Core Vision Kit的多目标识别和骨骼点检测功能
详情地址:https://developer.huawei.com/consumer/cn/codelabsPortal/carddetails/tutorials_Next-CoreVisionKit
3、机器学习-场景化视觉服务 介绍:Vision Kit(视觉服务)集成了视觉类AI能力,提供了人脸活体验证(interactiveLiveness)能力,便于用户与设备进行互动,验证用户为真实有效活体;提供了卡证识别能力,可以识别身份证、行驶证、驾驶证、护照、银行卡等证件,返回结构化数据信息。
总结:通过此Codelab,可了解到以下知识点:
如何使用Harmony OS SDK完成一个基本Demo编写。
如何调用Harmony OS SDK中的Vision Kit。
详情地址:https://developer.huawei.com/consumer/cn/codelabsPortal/carddetails/tutorials_Next-VisionKit
4、意图框架服务(ArkTS) 介绍:介绍了意图框架如何帮助开发者将应用和元服务内的业务功能,智能地分发到各系统入口。(以习惯推荐方案的歌曲续听推荐、事件推荐方案的还款待办事件提醒为例)
总结:通过此Codelab,可了解到以下知识点:
如何注册意图。
如何共享意图。
如何调用意图。
详情地址:https://developer.huawei.com/consumer/cn/codelabsPortal/carddetails/tutorials_IntentsKit-codelab-Clientdemo-ArkTS
5、机器学习-基础语音服务(ArkTS) 介绍:Core Speech Kit(基础语音服务)集成了语音类基础AI能力,包括文本转语音(TextToSpeech)及语音识别(SpeechRecognizer)能力,便于用户与设备进行互动,实现将实时输入的语音与文本之间相互转换。
总结:通过此Codelab,可了解到以下知识点:
在运维工作中,自动巡检与报表功能作为重要的辅助工具,对于提升管理效率、确保系统稳定运行具有重要意义。本文将结合运维行业的实际需求,探讨如何有效利用自动巡检与报表功能,为运维团队提供参考。
提高巡检效率:自动巡检可以在预设的时间内自动执行,无需人工干预,大大节省了运维人员的时间和精力。同时,自动巡检还可以实现24小时不间断的监控,确保系统的稳定运行。降低人为错误:手动巡检过程中,由于人为因素可能导致巡检结果的遗漏或错误。而自动巡检通过预设的规则和算法,减少了人为错误的可能性,提高了巡检结果的准确性。及时发现问题:自动巡检能够实时监测系统的运行状态和性能指标,一旦发现异常或故障,立即触发告警通知运维人员进行处理。这种实时性有助于运维团队及时发现并解决问题,降低故障对业务的影响。 在运维工作中,自动巡检功能的应用场景广泛。例如,在服务器、网络设备、存储系统等IT基础设施的监控中,自动巡检可以定期检查设备的运行状态、性能指标和安全设置等;在应用系统的监控中,自动巡检可以检查应用系统的响应时间、错误率、资源占用情况等;在网络环境的监控中,自动巡检可以检查网络设备的连接状态、流量情况和安全事件等。
二、报表功能的重要性与配置
报表功能作为自动巡检的重要补充,能够生成详细的巡检报告和统计报表,帮助运维团队深入了解系统的运行状况和性能瓶颈。报表功能的重要性主要体现在以下几个方面:
数据可视化:报表功能通过图表、表格等形式展示巡检数据,使得运维团队能够直观地了解系统的运行状况和性能指标。这种数据可视化有助于运维团队快速发现问题并制定相应的优化措施。历史记录查询:报表功能支持历史数据的查询和导出,使得运维团队能够回顾过去一段时间内的系统运行状态和性能指标。这对于分析系统的发展趋势、制定长期优化计划具有重要意义。定制化配置:报表功能支持根据运维团队的实际需求进行定制化配置。运维团队可以根据自身的监控需求和数据展示需求,设置不同的报表模板和展示方式,以满足不同场景下的需求。 在配置报表功能时,运维团队需要注意以下几点:首先,要明确报表的目的和需求,确定需要展示的数据指标和展示方式;其次,要选择合适的报表工具或模块,确保能够满足实际需求;最后,要对报表数据进行定期分析和总结,发现潜在问题和优化空间,为运维工作提供有力支持。
三、结合自动巡检与报表功能提升管理效率
在运维工作中,将自动巡检与报表功能相结合,可以进一步提高管理效率。具体而言,运维团队可以采取以下策略:
制定合理的巡检计划和周期:根据系统的实际运行情况和业务需求,制定合理的巡检计划和周期。通过自动巡检功能定期执行巡检任务,确保系统的稳定运行。配置定制化的报表模板:根据实际需求配置定制化的报表模板,展示关键的数据指标和性能指标。通过报表功能生成详细的巡检报告和统计报表,帮助运维团队深入了解系统的运行状况和性能瓶颈。定期对报表数据进行分析和总结:对报表数据进行定期分析和总结,发现潜在问题和优化空间。根据分析结果制定相应的优化措施和改进计划,为运维工作提供有力支持。 总之,自动巡检与报表功能作为运维工作的重要辅助工具,对于提升管理效率、确保系统稳定运行具有重要意义。运维团队应充分利用这些功能,制定合理的巡检计划和周期、配置定制化的报表模板、定期对报表数据进行分析和总结等策略相结合,进一步提高运维工作的效率和质量。
项目简介: 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案,帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践,并应用到自己的日常工作里。
本次介绍的是如何在亚马逊云科技上利用SageMaker机器学习服务部署Llama开源大模型,并为Llama模型的输入/输出添加Llama Guard合规性检测,避免Llama大模型生成有害、不当、虚假内容。同时我们用容器管理服务ECS托管一个AI生活智能助手,通过调用Llama大模型API为用户提供智能生活建议,并将和用户的对话历史存在DynamoDB中,让用户可以回看历史对话记录。本架构设计全部采用了云原生Serverless架构,提供可扩展和安全的AI解决方案。本方案的解决方案架构图如下:
方案所需基础知识 什么是 Amazon SageMaker? Amazon SageMaker 是亚马逊云科技提供的一站式机器学习服务,旨在帮助开发者和数据科学家轻松构建、训练和部署机器学习模型。SageMaker 提供了从数据准备、模型训练到模型部署的全流程工具,使用户能够高效地在云端实现机器学习项目。
什么是 Llama Guard工具? Llama Guard 是一种专门设计的工具或框架,旨在为 Llama 模型(或其他大型语言模型)提供安全和合规的防护措施。它通过对模型的输入和输出进行监控、过滤和审查,确保生成内容符合道德标准和法律法规。Llama Guard 可以帮助开发者识别并防止潜在的有害内容输出,如不当言论、偏见、虚假信息等,从而提升 AI 模型的安全性和可靠性。
为什么要构建负责任的 AI? 防止偏见和歧视: 大型语言模型可能会在训练过程中无意中学习到数据中的偏见。构建负责任的 AI 旨在识别和消除这些偏见,确保 AI 的决策公平、公正,不会因种族、性别或其他特征而产生歧视。
提升信任和透明度: 用户对 AI 系统的信任依赖于系统的透明度和可解释性。通过构建负责任的 AI,可以增加用户对系统的理解,提升系统的可信度,确保用户能够信任 AI 提供的建议和决策。
遵守法律法规: 许多国家和地区对数据隐私、安全和公平性有严格的法律要求。构建负责任的 AI 可以确保模型在符合这些法律法规的基础上运行,避免法律风险。
保护用户隐私: 负责任的 AI 重视并保护用户的隐私权,避免在处理敏感数据时泄露用户个人信息。通过对数据进行适当的加密和匿名化,确保用户的数据安全。
防止误用和滥用: 负责任的 AI 设计包括防范系统被恶意利用或误用的机制。例如,防止 AI 系统被用于生成虚假新闻、散布虚假信息或攻击他人。
道德责任: AI 系统的影响力越来越大,开发者和企业有责任确保这些系统对社会产生积极的影响。构建负责任的 AI 意味着在设计和部署 AI 系统时考虑到道德责任,避免对社会产生负面影响。
本方案包括的内容 1. 利用Streamlit框架开发AI生活助手,并将服务部署在Amazon Fargate上,前端利用负载均衡器实现高可用。 2. 利用Lambda无服务器计算服务实现与大模型的API交互 3. 在Amazon SageMaker上部署Llama 2大模型,并为大模型添加安全工具Llama Guard 4.