P – FULL TANK?

vector实现邻接表比普通二维数组实现更优的地方在于它不用记录各个点邻接点的个数,而只用一个简单的push_back()函数就轻松实现了边的记录。
题目解答:1.到i城市所花的费用作为优先队列的权值
# main config for srs. # @see full.conf for detail config. listen 1936; max_connections 1000; #srs_log_tank file; #srs_log_file ./objs/srs.log; daemon on; #srs_log_tank console; http_api { enabled on; listen 1985; } http_server { enabled on; listen 8080; dir ./objs/nginx/html; } rtc_server { enabled on; listen 8000; # UDP port # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#config-candidate candidate 121.43.231.156; } vhost __defaultVhost__ { #转码配置 1080p – 720p transcode { enabled on; ffmpeg /usr/bin/ffmpeg; engine ff { enabled on; vfilter { #缩放滤镜 调整分辨率 vf scale=1280:-1; } vcodec libx264; vbitrate 1500; vfps 30; vwidth 1280; vheight 720; #同时调度8个虚拟线程 vthreads 8; #没看懂啥意思 vprofile baseline; #veryfast适合实施转码,快速生成文件;medium存储空间有限,对画质要求较高 vpreset veryfast; vparams { #关键帧间隔 影响HLS切片 x264opts force_keyframe=expr:get(n,n_forced*50); } acodec aac; abitrate 128; asample_rate 44100; achannels 2; aparams { } output rtmp://127.0.0.1:1936/[app]?vhost=[vhost]/[stream]_[engine]; } } #HLS切片生成配置 hls { enabled on; hls_fragment 3; #切片时长(秒) hls_window 30; #保留切片总时长(秒) hls_path ./objs/nginx/html/hls; #切存储路径 hls_m3u8_file [app]/[stream].m3u8; hls_ts_file [app]/[stream]-[seq].ts; hls_cleanup on; #自动清理旧切片 } http_remux { enabled on; mount [vhost]/[app]/[stream].flv; } rtc { enabled on; # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtmp-to-rtc rtmp_to_rtc on; # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtc-to-rtmp rtc_to_rtmp on; } tcp_nodelay on; min_latency on; play { gop_cache on; queue_length 3; mw_latency 50; } publish { mr off; } }延迟很高,请优化
03-14
资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 华为移动服务(Huawei Mobile Services,简称 HMS)是一个全面开放的移动服务生态系统,为企业和开发者提供了丰富的工具和 API,助力他们构建、运营和推广应用。其中,HMS Scankit 是华为推出的一款扫描服务 SDK,支持快速集成到安卓应用中,能够提供高效且稳定的二维码和条形码扫描功能,适用于商品扫码、支付验证、信息获取等多种场景。 集成 HMS Scankit SDK 主要包括以下步骤:首先,在项目的 build.gradle 文件中添加 HMS Core 库和 Scankit 依赖;其次,在 AndroidManifest.xml 文件中添加相机访问和互联网访问权限;然后,在应用程序的 onCreate 方法中调用 HmsClient 进行初始化;接着,可以选择自定义扫描界面或使用 Scankit 提供的默认扫描界面;最后,实现 ScanCallback 接口以处理扫描成功和失败的回调。 HMS Scankit 内部集成了开源的 Zxing(Zebra Crossing)库,这是一个功能强大的条码和二维码处理库,提供了解码、生成、解析等多种功能,既可以单独使用,也可以与其他扫描框架结合使用。在 HMS Scankit 中,Zxing 经过优化,以更好地适应华为设备,从而提升扫描性能。 通常,ScanKitDemoGuide 包含了集成 HMS Scankit 的示例代码,涵盖扫描界面的布局、扫描操作的启动和停止以及扫描结果的处理等内容。开发者可以参考这些代码,快速掌握在自己的应用中实现扫码功能的方法。例如,启动扫描的方法如下: 处理扫描结果的回调如下: HMS Scankit 支持所有安卓手机,但在华为设备上能够提供最佳性能和体验,因为它针对华为硬件进行了
<think>在 SQL 中,FULL JOIN(或 FULL OUTER JOIN)是一种连接类型,它返回左表和右表中的所有记录。如果某行在另一个表中没有匹配的行,则结果集中该行的另一个表的部分将包含 NULL 值。 换句话说,FULL JOIN 结合了 LEFT JOIN 和 RIGHT JOIN 的结果。它返回: - 左表中的所有行,即使右表中没有匹配。 - 右表中的所有行,即使左表中没有匹配。 - 当左表和右表中的行匹配时,返回匹配的行。 FULL JOIN 的语法如下: ```sql SELECT column_name(s) FROM table1 FULL OUTER JOIN table2 ON table1.column_name = table2.column_name; ``` 注意:在某些数据库系统中(如 MySQL),并不直接支持 FULL OUTER JOIN。但是,我们可以通过 LEFT JOIN 和 RIGHT JOIN 的 UNION 来模拟 FULL JOIN。 下面是一个示例,假设我们有两个表:`Customers` 和 `Orders`。 **Customers 表:** | CustomerID | CustomerName | |------------|--------------| | 1 | John | | 2 | Mary | | 3 | Alice | **Orders 表:** | OrderID | CustomerID | OrderDate | |---------|------------|-----------| | 1 | 1 | 2020-01-01| | 2 | 2 | 2020-01-02| | 3 | 4 | 2020-01-03| 我们想要获取所有客户以及他们的订单,同时也要获取没有客户的订单和没有订单的客户。 使用 FULL JOIN: ```sql SELECT Customers.CustomerName, Orders.OrderID FROM Customers FULL OUTER JOIN Orders ON Customers.CustomerID = Orders.CustomerID; ``` 结果应该如下(具体顺序可能不同): | CustomerName | OrderID | |--------------|---------| | John | 1 | | Mary | 2 | | Alice | NULL | | NULL | 3 | 由于 MySQL 不支持 FULL JOIN,我们可以用以下方式模拟: ```sql SELECT Customers.CustomerName, Orders.OrderID FROM Customers LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID UNION SELECT Customers.CustomerName, Orders.OrderID FROM Customers RIGHT JOIN Orders ON Customers.CustomerID = Orders.CustomerID; ``` 注意:使用 UNION 会自动去重。如果两个 JOIN 中有重复的行,UNION 会将其合并为一行。如果不想去重,可以使用 UNION ALL,但需要自己处理重复。 解释: - 第一个查询(LEFT JOIN)返回所有客户及其订单(没有订单的客户,订单部分为NULL)。 - 第二个查询(RIGHT JOIN)返回所有订单及其客户(没有客户的订单,客户部分为NULL)。 - 使用 UNION 将两个结果集合并,并去重(因为 FULL JOIN 不应该有重复行,除非有重复数据)。 在支持 FULL JOIN 的数据库(如 PostgreSQL, SQL Server, Oracle等)中,直接使用 FULL JOIN 即可。 下面是一个在 PostgreSQL 中使用的例子: ```sql -- 创建示例表 CREATE TABLE Customers ( CustomerID INT PRIMARY KEY, CustomerName VARCHAR(50) ); CREATE TABLE Orders ( OrderID INT PRIMARY KEY, CustomerID INT, OrderDate DATE ); -- 插入示例数据 INSERT INTO Customers VALUES (1, 'John'), (2, 'Mary'), (3, 'Alice'); INSERT INTO Orders VALUES (1, 1, '2020-01-01'), (2, 2, '2020-01-02'), (3, 4, '2020-01-03'); -- 使用FULL JOIN查询 SELECT Customers.CustomerName, Orders.OrderID, Orders.OrderDate FROM Customers FULL JOIN Orders ON Customers.CustomerID = Orders.CustomerID; ``` 运行上述查询后,会得到以下结果: ``` customername | orderid | orderdate --------------+---------+------------ John | 1 | 2020-01-01 Mary | 2 | 2020-01-02 Alice | NULL | NULL NULL | 3 | 2020-01-03 ``` 注意事项: 1. 在 FULL JOIN 中,ON 条件用于指定连接条件。 2. 如果两个表中的连接列有相同的列名,可以使用 USING 子句简化:`FULL JOIN Orders USING (CustomerID)`。这样在结果中,CustomerID 列只会出现一次。 3. 在 FULL JOIN 中,WHERE 子句可以用于过滤掉那些不匹配的行。例如,如果我们只想看没有匹配的行,可以这样写: ```sql SELECT ... FROM Customers FULL JOIN Orders ON Customers.CustomerID = Orders.CustomerID WHERE Customers.CustomerID IS NULL OR Orders.CustomerID IS NULL; ``` 4. 在模拟 FULL JOIN 时,确保两个子查询的列数和数据类型兼容。 最后,请注意,FULL JOIN 可能会产生大量的结果集,特别是当两个表都很大且匹配行很少时,因为它会返回两个表的笛卡尔积中满足连接条件的部分以及不匹配的部分。因此,在使用时要谨慎,确保理解其含义。 §§相关问题§§: 1. SQL 中除了 FULL JOIN,还有哪些 JOIN 类型? 2. 在 MySQL 中如何模拟 FULL JOIN? 3. FULL JOIN 和 INNER JOIN 有什么区别? 4. 在 FULL JOIN 中,如何只选择那些在另一个表中没有匹配的行?</think>### SQL 中的 FULL JOIN(全外连接) 在 SQL 中,`FULL JOIN`(也称为 `FULL OUTER JOIN`)是一种连接操作,它返回左表和右表的所有记录,无论是否满足连接条件。如果某行在另一个表中没有匹配,则结果中对应列显示为 `NULL`。 #### 基本语法 ```sql SELECT columns FROM table1 FULL JOIN table2 ON table1.column = table2.column; ``` #### 工作原理 1. 返回左表(`table1`)的所有记录 2. 返回右表(`table2`)的所有记录 3. 匹配的记录合并为一行 4. 未匹配的记录用 `NULL` 填充缺失部分 #### 示例代码 假设有两个表:`Employees` 和 `Departments`: **Employees 表** | EmployeeID | Name | DepartmentID | |------------|---------|--------------| | 1 | Alice | 101 | | 2 | Bob | 102 | | 3 | Charlie | NULL | **Departments 表** | DepartmentID | DepartmentName | |--------------|----------------| | 101 | HR | | 102 | IT | | 103 | Finance | 使用 FULL JOIN 查询: ```sql SELECT E.Name AS EmployeeName, D.DepartmentName FROM Employees E FULL JOIN Departments D ON E.DepartmentID = D.DepartmentID; ``` **查询结果**: | EmployeeName | DepartmentName | |--------------|----------------| | Alice | HR | | Bob | IT | | Charlie | NULL | | NULL | Finance | #### 结果说明 - Alice 和 Bob 有匹配的部门 - Charlie 没有部门(DepartmentName 为 NULL) - Finance 部门没有员工(EmployeeName 为 NULL) #### 数据库兼容性注意事项 1. **MySQL 不支持 FULL JOIN** 需用 `LEFT JOIN + RIGHT JOIN + UNION` 模拟: ```sql SELECT E.Name, D.DepartmentName FROM Employees E LEFT JOIN Departments D ON E.DepartmentID = D.DepartmentID UNION SELECT E.Name, D.DepartmentName FROM Employees E RIGHT JOIN Departments D ON E.DepartmentID = D.DepartmentID; ``` 2. **支持 FULL JOIN 的数据库** PostgreSQL, SQL Server, Oracle 等直接支持。 #### 典型应用场景 - 数据完整性检查(找出未关联的记录) - 合并两个数据源(保留所有原始记录) - 数据差异分析
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值