当前位置: 首页 > news >正文

Swift 周报 第三十六期

在这里插入图片描述

在这里插入图片描述

文章目录

    • 前言
    • 新闻和社区
      • 消息称苹果公司和印度财政部官员磋商,扩大在印度的制造产能
      • iPhone 15 Pro 机型新增泰坦灰
      • iPhone 15 全系配 USB-C 苹果拒绝接口和安卓互通
    • 提案
      • 正在审查的提案
    • Swift论坛
    • 推荐博文
    • 话题讨论
    • 关于我们

前言

本期是 Swift 编辑组整理周报的第三十六期,每个模块已初步成型。各位读者如果有好的提议,欢迎在文末留言。

欢迎投稿或推荐内容。目前计划每两周周一发布,欢迎志同道合的朋友一起加入周报整理。

一米阳光下阴雨绵绵,一米阳光上晴空万里,这就是生活。Swift社区伴你一起,走过风雨,沐浴暖阳!

周报精选

新闻和社区:iPhone 15 全系配 USB-C 苹果拒绝接口和安卓互通

提案:对 AsyncStream 的 Backpressure 支持

Swift 论坛:提议全局变量的严格并发

推荐博文:WWDC23 10105 - 打造响应更快的相机体验

话题讨论:

日本核污水排海,你还会吃海鲜吗?

上期话题结果

根据投票结果可以看出,大家有不同的想法。小编认为家长应该根据孩子的个性特点和兴趣爱好灵活调整,注重培养他们的创新精神和独立思考能力。

新闻和社区

消息称苹果公司和印度财政部官员磋商,扩大在印度的制造产能

8 月 25 日消息,根据印度当地媒体 Business Today 报道,苹果印度地区的高管已经和当地财政部会面,探讨扩大 iPhone 在印度产能相关事宜。

消息称本次探讨涉及面很广,印度政府希望以苹果公司带头下,进一步推动本土智能手机制造业,并磋商相关的扶持政策。

而苹果公司在交流中也表示,印度是非常重要的生产地和消费市场,乐于扩大在印度市场的产能,但希望能获得更多的补贴,以及政策福利。

IT之家此前报道,根据市场调查机构 Counterpoint Research 公布的统计数据,2023 年第 2 季度印度市场营收表现首次超过法国和德国,成为苹果第五大 iPhone 市场。

苹果 iPhone 零售业在印度市场的快速增长的同时,苹果也加快了 iPhone 在印度制造的脚步。苹果加大了在印度市场的投资力度,希望供应链实现多元化发展。(来源:IT之家)

iPhone 15 Pro 机型新增泰坦灰

新渲染图曝光,消息称苹果 iPhone 15 Pro 机型泰坦灰将替代金色 iPhone15Pro新增灰色。8 月 25 日消息,根据国外科技媒体 9to5Mac 报道,苹果今年将调整 iPhone 15 Pro 和 iPhone 15 Pro Max 两款机型的颜色选项,取消金色,新增灰色。
在最新报道称这种全新灰色官方名称为“泰坦灰”(Titan Gray),并分享了这种颜色的概念渲染图,可以看到“泰坦灰”颜色要比现有的银色 / 白色更深一些,但比深空黑要更淡一些。
该媒体还透露苹果今年推出的 iPhone 15 Pro 机型将会取消暗紫色,并由深蓝色替代。
注: iPhone 14 Pro 机型共有暗紫色、金色、银色和深空黑四种颜色。
苹果预估将于 9 月 12 日发布 iPhone 15 系列,其中 iPhone 15 系列标准版将有黑色,绿色,蓝色,黄色和粉红色。(来源:IT之家)
在这里插入图片描述

iPhone 15 全系配 USB-C 苹果拒绝接口和安卓互通

8月19日消息,据供应链最新消息称,iPhone 15 全系将会配备 USB-C 接口,不过不同型号会被差异对待。

按照供应链说法,iPhone 15 标准版只是配备普通版本的 USB-C 接口,而 iPhone 15 Pro 系列则在速度上有明显的提升,同时这个功能只能在 MFi 认证的 USB 数据线下发挥功效。

具体来说就是,iPhone 15 标准版提供 USB 2.0 版本,传输速度最高 480 Mbps,与之前的 Lightning 接口差不多。而 iPhone 15 Pro 系列用的是 USB 3.2,传输速度能达到 20 Gbps,比标准版快 20 倍以上。

对于消费者来说,这将是多年来 iPhone 系列手机最大的改进之一。配备该端口后,iPhone 用户在旅行时不再需要为手机和其他移动设备携带两根不同的充电线,不过想法是好的,但苹果却不会这么干。

按照供应链配件商的说法,苹果不会让 iPhone 15 的 USB-C 接口与安卓通用,即便是有违法的行为,但依然会如此做,毕竟 MFi 认证背后一年是几十亿美元的盈利。

此外,从苹果的备货来看,Pro 系列占比超过 60%,他们也是想从这些细节的地方卡位用户,让大家主动去买高价版本。
在这里插入图片描述

提案

正在审查的提案

SE-0407 成员 Macro 一致性 提案正在审查。

SE-0402中从一致性宏到扩展宏的转变包括扩展宏能够了解类型已经遵循了哪些协议(例如,因为遵循了超类或在某处声明了显式一致性),这样宏就可以避免添加不需要的声明和一致性。这也意味着添加的任何新声明都是扩展的一部分——而不是原始类型定义的一部分——这通常是有益的,因为这意味着(例如)新的初始化器不会抑制成员初始化器。将协议一致性拆分为各自的扩展通常也被认为是一种很好的形式。

然而,有时用于一致性的成员确实需要成为原始类型定义的一部分。例如:

  • 非 final 类中的初始化项必须是必需的初始化项,以满足协议要求。
  • 非 final 类的可重写成员。
  • 存储的属性或大小写只能在主类型定义中。

对于这些情况,成员宏可以生成声明。然而,成员宏并没有提供任何关于应该为哪种协议一致性提供成员的信息,因此宏可能会错误地尝试将一致性成员添加到已经符合协议的类型中(例如,通过超类)。这可能使某些宏(例如实现 EncodableDecodable 协议的宏)无法实现。

SE-0406 对 AsyncStream 的 Backpressure 支持 提案正在审查。

SE-0314引入了新的 Async[Throwing]Stream 类型,作为根异步序列。这两种类型允许从同步回调(如委托)桥接到异步序列。该提案增加了一种构建异步流的新方法,目的是将 Backpressure 系统桥接成异步序列。此外,该提案旨在澄清消费任务取消和生产方表示终止时的取消行为。

Swift论坛

  1. 提议宏文字协议

目前仅允许在顶层使用宏。 然而,在某些情况下,嵌套宏会很有好处。

例如,我们可以添加具有宏要求的新文字协议:

public protocol ExpressibleByMacroIntegerLiteral {associatedtype IntegerLiteralType: _ExpressibleByBuiltinIntegerLiteral@freestanding(expression)macro Init(integerLiteral: IntegerLiteralType) -> Self
}

然后用编译器的魔法,酱子:

let x: Decimal = 5.3

可以变成酱子:

let x = #Decimal.Init(integerLiteral: 5.3)

然后将扩大

我知道宏的设计目标之一是避免这种不可见的宏使用,但是已经有很多编译器魔法可以通过 _ 文字协议来表达,这将使它们更加通用。

例如,当前如果类型是 ExpressibleByStringLiteral 但只有某些字符串文字有效,则唯一的选择是在运行时遇到无效字符串文字时捕获。 这违背了文字的编译时性质,而文字应该允许检查文字。 在基金会提出将 URL 改为 ExpressibleByStringLiteral 时,这个问题在某种程度上被掩盖了,但已经完全解决了。

这个语句:

downloadFile(at: "https://apple.com")

看起来比这个好很多:

downloadFile(at: #URL("https://apple.com"))
  1. 提议嵌套 if let 和 guard let

介绍

在 Swift 中,if let 语句通常用于可选的解包。 它通过处理可选值帮助开发人员编写更干净、更安全的代码。

目前,if let 语句解包单个可选值。 然而,在某些情况下,我们希望以更简洁的方式解开嵌套对象的可选属性。

该提案建议扩展 if let 和 Guard let 语句以支持嵌套可选展开。

1. if let 嵌套

嵌套 if let 的拟议语法将允许开发人员有条件地解包嵌套对象的可选属性。 如下:

if let myOptionalObject?.optionalValue {// 'optionalValue' is now safely unwrapped and ready to use // *1
} else {// Handle the case where 'optionalValue' is nil
}

2. 嵌套的 guard let

类似地,所提议的嵌套 Guard Let 语法将允许开发人员有条件地解开嵌套对象的可选属性。 如下:

guard let myOptionalObject?.optionalValue else {// Handle the case where 'myOptionalObject' or 'optionalValue' is nil// This could include returning from the current function, loop, or throwing an error
}// 'optionalValue' is now safely unwrapped and ready to use // *1
  1. 提议全局变量的严格并发

介绍

该提案定义了无数据竞争的全局变量的使用选项。 在此提案中,全局变量包含静态持续时间的任何存储:在全局范围内声明或作为静态成员变量声明的 let 和存储变量。

动机

全局状态在并发性中提出了挑战,因为它是可以从任何程序上下文访问的内存。 全局变量在数据隔离检查中受到特别关注,因为它们违背了其他强制隔离的尝试。

本地且未捕获的变量只能从本地上下文访问,这隐式地隔离了它们。 值类型的存储属性已经通过排他性规则隔离。

可以通过使用可发送性强制或使用参与者限制来隔离引用类型的包含对象,从而隔离引用类型的存储属性。 但全局变量可以从任何地方访问,所以这些工具不起作用。

建议的解决方案

在严格的并发检查下,要求每个全局变量要么与全局参与者隔离,要么两者都隔离:

  • 不可变的(immutable)
  • 可发送类型(Sendable)

immutable 并且 Sendable 的全局变量可以从任何上下文安全地访问,否则需要隔离。

详细设计

这些要求可以在声明时在类型检查器中强制执行。

源兼容性

由于增加了限制,因此在使用严格的并发检查时可能需要更改某些类型声明。 然而,此类源代码更改仍然向后兼容任何具有并发功能的 Swift 版本。

ABI兼容性

该提案本身不会添加或影响 ABI(Application Binary Interface),但是它可能对采用的项目引发的类型声明更改可能会影响该项目的 ABI。

对采用的影响

在采用严格并发检查的项目中,可能需要修改某些全局变量类型。

考虑的替代方案

为了隔离,我们可以隐式锁定变量的访问,而不需要全局参与者。 在提供内存安全的同时,这可能会给线程安全带来问题,因为开发人员可以轻松编写 non-atomic 的模式:

// value of global may concurrently change between
// the read for the multiplication expression
// and the write for the assignment
global = global * 2

虽然如果我们需要在旧语言模式中做一些源兼容的事情,我们可以考虑隐式锁定,但通常我们的方法只是说旧语言模式是并发不安全的。

它也不适用于非可发送类型,除非我们强制该值在访问它时保持隔离。我们可能可以通过提议的跨隔离域安全发送不可发送值功能来实现这一目标,但这可能是一个过于先进的功能,无法作为此类基本问题的解决方案来推动。

我们可以将所有需要隔离的全局变量默认为 @MainActor。 可以说,让开发人员考虑选择会更好(例如,也许它应该只是一个 let 常量)。

访问控制在理论上是有用的:例如,我们可以知道全局变量是并发安全的,因为它是文件私有的,并且该文件中的所有访问都来自单个全局参与者上下文,或者因为它永远不会 变异了。

不过,这比我们通常希望在编译器中进行的分析更加全局化; 我们必须检查上下文中的所有内容,然后开发人员可能很难理解它为什么起作用。

未来发展方向

我们不一定需要明确地要求隔离全球参与者; 有空间推断正确的全球行动者。 全局角色约束类型的全局可变变量可以被推断为约束到该全局角色(尽管如果变量是不可变的,则没有必要,因为全局角色约束类类型是可发送的)。

  1. 讨论用 globalActor 标记的方法修改类中的属性
protocol Po {@MainActorfunc foo()
}class Base: Po {var str = ""func foo() {str = "w"print("foo: \(Thread.isMainThread)") // true}
}if #available(macOS 10.15, *) {Task {let b = Base()await b.foo()}
} RunLoop.main.run()while true {}

我不明白为什么我可以直接在标有MainActor的方法中修改属性?

因为这对我来说似乎是错误的。
我相信 Base 及其属性不在 MainActor 上运行。

回答

您在顶层创建 Task,这隐式地使其在 main actor 上运行。 由于 Base 只是一个类(而不是 actor),因此它的方法在其调用者所在的任何上下文中运行,在本例中这是 main actor。
属性和方法可以单独与特定参与者相关联,包括作为协议要求的一部分。 在这种情况下 foo 隐式是 @MainActor,因为 Po 协议如此声明它。

这可能有点太神奇了 - foo 也是隐式异步的,尽管它从未真正被标记为异步,即使在原始协议声明中也是如此。

为了进一步测试这一点,如果您添加到 Base 例如:

func bar() {foo()
}

将收到编译器错误 Call to main actor-isolated instance method 'foo()' in a synchronous nonisolated context,表明编译器将 foo 视为 @MainActor(但 Base 的其余部分不是)。

  1. 讨论[在 “super.init” 调用之前使用的 “self” 与 “在 super.init 调用时未初始化属性” 冲突](https://forums.swift.org/t/self-used-before-super-init-call-conflicts-with-property-not-initialized-at-super-init-call/66896 “在 “super.init” 调用之前使用的 “self” 与 “在 super.init 调用时未初始化属性” 冲突”)

我需要在 init 中创建一个捕获 self 的闭包来初始化属性,但我无法使用 self,因为 super.init 尚未被调用。 但是,我无法调用 super.init,因为该属性尚未初始化!

import Foundationclass Base {
}class Sub: Base {let timer: Timervar value = 0// option 1 - try to initialize the propertyoverride init() {// ERROR: 'self' used before 'super.init' calltimer = .scheduledTimer(withTimeInterval: 1, repeats: true) { [weak self] _ inself!.value += 1}super.init()}// option 2 - try to initialize super firstoverride init() {super.init()  // ERROR: Property 'self.timer' not initialized at super.init calltimer = .scheduledTimer(withTimeInterval: 1, repeats: true) { [weak self] _ inself!.value += 1}}}

除了使属性既可选又可变(在 super.init 期间初始化为 nil,然后在之后更改它)之外,还有什么办法可以解决这个问题吗?

我有点明白为什么编译器不能接受这种情况,但是必须使属性可选且可变,这很烦人,而一旦类完全初始化,它实际上既不应该为零,也不应该变。

回答

需要在函数内有一个本地变量:

init() {var futureSelf: Sub? = niltimer = .scheduledTimer(withTimeInterval: 1, repeats: true) { [weak futureSelf] _ infutureSelf?.value += 1}super.init()futureSelf = self
}

值得注意的是,编译器无法知道采用闭包捕获 self 的对象是否不会立即被调用,并且它试图避免使用半初始化的 self 实例调用闭包。

  1. 讨论显式使用引用类型后是否应该调用 deinit?

我想通过使用 _ = Consumer 对象显式结束演员/类的生命周期,以避免引入具有单独作用域的另一级嵌套。 但是,在显式消费之后不会调用该对象的 deinit。 相反,它是在作用域末尾调用的。 这是预期行为还是编译器错误? 对于不可复制的结构,它可以按预期工作。

class Object {deinit { print("deinit object") }
}struct Noncopyable: ~Copyable {deinit { print("deinit noncopyable") }
}func testDeinitAfterConsume() {do {let object = Object()print("before consume")_ = consume objectprint("after consume")}print()do {let noncopyable = Noncopyable()print("before consume")_ = consume noncopyableprint("after consume")}
}

打印结果:

before consume
after consume
deinit objectbefore consume
deinit noncopyable
after consume

回答

这是可以理解的。 一般来说,每当对象丢失最后一个引用时,类析构器就会运行,而不考虑变量范围。

在某种程度上不鼓励在类去初始化中依赖共享可变状态,并且强烈不鼓励依赖与常规代码中的副作用相关的顺序。 即使没有优化,它通常也会很棘手并且容易出错。

对对象生命周期的显式控制是 Swift 中依赖类取消初始化顺序的官方方法:

withExtendedLifetime(object) {// Modify shared mutable state without accessing object.
}

对于局部变量(包括参数),编译器(5.7 后)遵循一些保守的生命周期规则,以便大多数“看起来正常”的编程模式无需显式生命周期管理即可工作。 事实上,如果我们按照字面意思理解这个示例,则 deinit 将不会发生,并且我们永远不会看到以下输出:

deinit object
before consume
after consume

额外的安全规则是:

如果不安全指针或弱引用可能依赖于局部变量的生命周期,则编译器会自动扩展该变量持有的任何引用。

如果常规代码在 Swift 外部调用(包括所有 I/O)或跨任务同步(调用异步函数),则类析构器将不会跨这些边界重新排序。 这也意味着程序员可以通过添加同步代码来控制对象的生命周期,而无需 withExtendedLifetime。 在此示例中,调用 “print” 被视为同步点,从而阻止优化。

这里有更详细的描述:https://gist.github.com/atrick/cc03c4d07fb0a7bee92c223ae5e5695b#lexical-variable-scope-can-affect-object-lifetime
在这方面,消耗参数与 “let”、“var” 和非 “消耗” 参数不同,因为它们的生命周期可以在隐式消耗时提前结束:

func bar(_ object: consuming Object) {}func foo(object: consuming Object) {bar(object)print("after consume")
}

总是得到结果:

deinit object
after consume

这为那些关心 ARC 开销和 CoW 行为的人提供了理想的编程模型。 很快,我希望所有局部变量都具有“消耗”的效果。

推荐博文

掌握 StoreKit2

摘要: 本文介绍了 Swift 中的 StoreKit2,这是一个用于构建应用内购买和订阅的框架。文章从配置项目和创建 StoreKit 配置文件开始,介绍了如何使用 Store 类型处理应用内购买逻辑。通过示例代码和说明,文章展示了如何使用 Store 类型来获取和显示应用内购买产品列表,并启动购买流程。还介绍了产品类型和其 purchase 函数,在成功购买时处理交易和验证过程。文章还涉及了处理挂起状态和监视交易更新的方法。此外,提到了 StoreKit2 提供的 currentEntitlements 属性,用于获取活动订阅和已购买产品列表。最后,文章给出了一个基本的 App 结构示例,其中包含了 Store 对象,并在应用程序启动时获取活动交易。

iOS 防 dump 可行性调研报告

摘要: 文章介绍了如何防止 iOS App 被 dump ,包括代码混淆、加密、完整性检查等多层防御策略,以及服务器端验证、动态加载、API 安全性和多因素认证等方案。此外,监控与告警、定期安全审计和安全培训等后置方案也可以提高 App 的安全性。最后,还介绍了禁止越狱设备的实施方案,以及 DeviceCheck 和 App Attest API 等新技术方案。

WWDC23 10105 - 打造响应更快的相机体验

摘要: 文章介绍了 iOS17 提供了一些新的特性,通过延迟图片处理、快门零延迟、响应捕获等新特性,以及状态监听等措施,能大幅提高相机响应速度,创造更流畅的拍摄体验。

话题讨论

日本核污水排海,你还会吃海鲜吗?

  1. 不会

欢迎在文末留言参与讨论。

关于我们

Swift社区是由 Swift 爱好者共同维护的公益组织,我们在国内以微信公众号的运营为主,我们会分享以 Swift实战SwiftUlSwift基础为核心的技术内容,也整理收集优秀的学习资料。

特别感谢 Swift社区 编辑部的每一位编辑,感谢大家的辛苦付出,为 Swift社区 提供优质内容,为 Swift 语言的发展贡献自己的力量。

相关文章:

Swift 周报 第三十六期

文章目录 前言新闻和社区消息称苹果公司和印度财政部官员磋商,扩大在印度的制造产能iPhone 15 Pro 机型新增泰坦灰iPhone 15 全系配 USB-C 苹果拒绝接口和安卓互通 提案正在审查的提案 Swift论坛推荐博文话题讨论关于我们 前言 本期是 Swift 编辑组整理周报的第三十…...

手写Mybatis:第19章-二级缓存

文章目录 一、目标:二级缓存二、设计:二级缓存三、实现:二级缓存3.1 工程结构3.2 二级缓存类图3.3 二级缓存队列3.3.1 FIFI缓存策略3.3.2 事务缓存3.3.3 事务管理3.3.4 修改一级缓存 3.4 缓存执行器3.4.1 执行器接口3.4.2 执行器抽象基类3.4.…...

Alibaba Canal 使用记录

项目中使用 canal 来同步数据到 Elasticsearch, 遇到很多问题,做一下记录: 版本问题: 1. 解析binlog出错 ,表现为 limit excceed:xx 目前使用 mariadb 10.9.7/10.10.6 canal 1.1.6 hotfix ,在这个版本组…...

GIT实战篇,教你如何使用GIT可视化工具

系列文章目录 手把手教你安装Git,萌新迈向专业的必备一步 GIT命令只会抄却不理解?看完原理才能事半功倍! 快速上手GIT命令,现学也能登堂入室 GIT实战篇,教你如何使用GIT可视化工具 系列文章目录一、GIT有哪些常用工具…...

lv3 嵌入式开发-4 linux shell命令(文件搜索、文件处理、压缩)

目录 1 查看文件相关命令 1.1 常用命令 1.2 硬链接和软链接 2 文件搜索相关命令 2.1 查找文件命令 2.2 查找文件内容命令 2.3 其他相关命令 3 文件处理相关命令 3.1 cut 3.2 sed 过滤 3.3 awk 匹配 4 解压缩相关命令 4.1 解压缩文件的意义 4.2 解压缩相关命令 1 …...

SpringBoot2.0集成WebSocket,多客户端

适用于单客户端,一个账号登陆一个客户端,登陆多个客户端会报错 The remote endpoint was in state [TEXT_FULL_WRITING] 这是因为此时的session是不同的,只能锁住一个session,解决此问题的方法把全局静态对象锁住,因…...

华为OD机试 - 等和子数组最小和 - 深度优先搜索(Java 2022 Q4 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷)》…...

浏览器会因为什么样的脚本而崩溃

浏览器可能因为以下几种情况而崩溃: 无限循环:如果JavaScript脚本包含一个无限循环,浏览器将无法停止脚本的执行,导致浏览器不响应甚至崩溃。例如,以下代码会导致无限循环: while (true) {// 无限循环 } 内…...

生成与调用C++动态链接库(so文件)

文章目录 前言生成C动态链接库步骤1:编写C源码步骤2:生成共享库步骤3:验证生成的SO文件 调用C动态链接库步骤1:修改原来makefile步骤2:编译调用程序步骤3:运行调用程序 总结 前言 动态链接库是代码重用和模…...

韶音的耳机怎么样,韶音骨传导耳机值得入手吗

韶音关于骨传导耳机的产品在质量方面还是有着不错的表现,其最具代表性的骨传导耳机就是韶音OpenRun Pro,在国产骨传导耳机中是具备了一定的知名度,有着自主研发的声学技术。 最突出的点就在于颜色上多样化,有着经典的黑色&#xf…...

STM32G030F6 (SOP-20)Cortex ® -M0+, 32KB Flash, 8KB RAM, 17 GPIOs

淘宝淘了一批 STM32G030F6P6 SOP20.先备注一下, 还没想到能干嘛用. 手上的 STM32F103C6T6还剩一些. 一堆 “淘宝原厂STM32F103C8T6”, 还烫着手. 理解信息: ( 逐步补充 ) System Clock GPIOs GPIOs 17 PA[7:0] : 8bits USART Timer ADC I2…...

常用的字符集和字符编码

基础概念 字符 字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等 字符集 一个操作系统支持的字符的集合。 字符编码和解码 将每个字符都设置一个唯一编号,编码就是将字符集中的字符编号以一定形式转化为字节存储下来&#xff0c…...

容器技术简介

引言 随着云计算、大数据、人工智能等技术的不断发展,容器技术作为一种新兴的虚拟化技术,正逐渐成为IT领域的热点。容器技术可以帮助开发者更好地管理、部署和扩展应用程序,提高开发效率和应用程序的可靠性。本文将深入探讨容器技术的概念、…...

数据分享|R语言用lme4多层次(混合效应)广义线性模型(GLM),逻辑回归分析教育留级调查数据...

全文链接:http://tecdat.cn/?p22813 本教程为读者提供了使用频率学派的广义线性模型(GLM)的基本介绍。具体来说,本教程重点介绍逻辑回归在二元结果和计数/比例结果情况下的使用,以及模型评估的方法(点击文末“阅读原文…...

macos 不支持svn安装

macos 10.13可能不支持svn命令,所以要安装 xcode-select --install 弹窗在线安装失败的话只能手动下载安装 打开:Sign In - Apple 搜索Command Line Tools (macOS 10.13) 下载9.4.1版本直接安装后即可...

如何通过实际操作来加深对Linux命令和概念的理解?

作为一个新手,你一定不要被Linux那堆命令吓到。其实,它们就像你的“超能力”,只要你掌握它们,你就能成为Linux世界的超级英雄! 首先,我们要了解的是,Linux命令其实就像你的“魔法咒语”&#x…...

【开发语言】C语言与Python的互操作详解

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…...

华为配置聚合vlan(Super vlan--Sub vlan)

聚合vlan,Aggregation vlan,也称Super vlan,可以实现用Sub vlan二层隔离广播域,但又将这些Sub vlan聚合使用同一IP子网和网关的情况。 这样,多个Sub-VLAN共享一个网关地址,节约了子网号、子网定向广播地址、…...

CentOS7安装时直接跳过了安装信息摘要页面的解决方法

最近在配置Hadoop虚拟机的时候,创建的centos7虚拟机在安装信息摘要时直接自动跳过,直接跳到设置用户名和密码,在重复多次的重新删除安装后发现了问题所在: 在进行到选择操作系统来源时,注意是否出现“该操作系统将使用…...

python基础运用例子

python基础运用例子 1、⼀⾏代码交换 a , b :a, b b, a2、⼀⾏代码反转列表 l[::-1]3、合并两个字典 res {**dict1, **dict2}**操作符合并两个字典for循环合并dict(a, **b) 的方式dict(a.items() b.items()) 的方式dict.update(other_dict) 的方式 4、⼀⾏代码列…...

k8s基本概念

一、什么是Kubernetes二:Kubernetes部署方式的演变三、为什么要用K8S四、K8S的特性五、Kubernetes 集群架构与组件5.1 Master 组件① Kube-apiserver② Kube-controller-manager③ Kube-scheduler④ AUTH 认证模块 5.2 配置存储中心5.3 Node 组件① Kubelet② Kube-…...

Python exp() 函数

描述 exp() 方法返回x的指数,ex。 语法 以下是 exp() 方法的语法: import mathmath.exp( x ) 注意:exp()是不能直接访问的,需要导入 math 模块,通过静态对象调用该方法。 参数 x -- 数值表达式。 返回值 返回x的指数,ex。 实例 以下展…...

Day 34 贪心算法 part03 : 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果

134. 加油站 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 给定两个整数数组 gas…...

气象站的构成及功能应用

气象站是一种用于观测、记录和报告天气数据的设备。它是由数据采集系统、通讯系统、供电系统和立杆支架构成。 一、气象站的构成: 数据采集系统:用于测量气温、湿度、风速、风向、气压、降雨量、雪深等气象参数。 通讯系统:收集和处理传感…...

Qt中布局管理使用总结

目录 1. 五大布局 1.1 QVBoxLayout垂直布局 1.2 QHBoxLayout水平布局 1.3 QGridLayout网格布局 1.4 QFormLayout表单布局 1.5 QStackedLayout分组布局 1.6 五大布局综合应用 2. 分割窗口 3. 滚动区域 4. 停靠区域 1. 五大布局 1.1 QVBoxLayout垂直布局 #include <…...

(位运算) 剑指 Offer 15. 二进制中1的个数 ——【Leetcode每日一题】

❓ 剑指 Offer 15. 二进制中1的个数 难度&#xff1a;简单 编写一个函数&#xff0c;输入是一个无符号整数&#xff08;以二进制串的形式&#xff09;&#xff0c;返回其二进制表达式中数字位数为 ‘1’ 的个数&#xff08;也被称为 汉明重量).&#xff09;。 提示&#xff…...

基于SSM的新能源汽车在线租赁系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

CTF 代码审计之绕过过滤的空白字符

题目 &#xfeff;<?php header("Content-Type:text/html;charsetutf-8"); highlight_file(02kbzf.php);//引入名为 flag2.php 的文件。 include(f . lag2 . .php);//初始化变量 $info 和 $req。 $info ""; $req [];//读取文件 flag2.php 的内容到变…...

【Vue】 Vue3 安装说明,适合小白新手

1、独立版本 我们可以在 Vue.js 的官网上直接下载最新版本, 并用 下载 Vue.js https://unpkg.com/vuenext 2、使用 CDN 方法 以下推荐国外比较稳定的两个 CDN&#xff0c;国内还没发现哪一家比较好&#xff0c;目前还是建议下载到本地。 Staticfile CDN&#xff08;国内&am…...

电脑提示“系统找不到指定的文件”怎么办?

“系统找不到指定的文件”对于Windows用户来说是一个很常见的错误&#xff0c;尤其是Win10用户&#xff0c;经常会遇到Win10提示找不到指定文件。在此错误后面有时还会出现错误代码&#xff1a;0x80070002&#xff0c;但是&#xff0c;故障类型或代码在不同的操作系统规范上是不…...