老司机 iOS 周报 #64 | 2019-04-22

老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新手推荐

? Designing Swift APIs

@zvving:如何写出可读性更高的代码?本文提供一些示例:参数标签可以帮助我们定义清晰易读的 API,嵌套类型能提供辅助的上下文关系,强类型为代码增添必要的仪式感,可扩展的 API 设计能同时满足便捷调用和丰富定制。

作者认为:『人人都是 API 设计师,当我们在设计非私有属性或方法时,我们都在设计 API』,你认为呢?

文章

? ? Humble Asset Catalog & Assets Catalogs 与 I/O 优化

@looping:这两篇文章分别从各自的角度解释了在使用 Asset Catalogs 后,读取图片资源的速度变快的原因。

通过仔细阅读这两篇文章,我们能够更清晰地了解到:

  • Asset Catalogs 和 car (Compiled Asset Catalogs) 文件的相关内容以及它们的作用
  • CoreUI 框架对图片资源加载过程的一些逻辑细节

从而明白使用 Asset Catalogs 后,在加载资源上速度更快的原因:

  • Asset Catalogs 会对图片进行分类压缩存储,减少在目标机型上的资源文件大小,提高读取速度
  • 通过内存映射 (mmap),减少 I/O 操作,加速读取 car 文件内容
  • car 文件实际上是一种特殊的 BOM 文件,能够在加载图片时直接获取 rendition、renditionKey 以及 attribute 这些信息,不同于从文件夹 (bundle) 中读取,需要执行耗时的 -[CUIMutableStrucetedThemeStore canGetRenditionWithKey:] 操作来读取 rendition 和 renditionKey

除了文章带给我们的结论,以及我们今后可以做的事情 (将常规资源文件都迁移到 xcassets 中) 之外,两位作者对问题的探寻和思考的方式也是非常值得学习借鉴的。

? ? Let’s write Swift code to intercept SSL Pinning HTTPS Requests

@含笑饮砒霜:现在几乎绝大部分的 iOS App 都使用了 HTTPS 请求,这极大提升了我们使用的安全性,但也不意味着这就是绝对安全的。

如果想检查 iOS 应用中的 HTTPS 请求,最常用的方法就是中间人(MITM)攻击,这种技术需要使用某台主机作为代理服务器,为客户端提供服务。为了保证攻击成功,客户端需要将代理服务器的证书安装到设备的全局信任存储区中。这样处理后,客户端就会将证书添加到白名单中,允许与代理服务器之间的 HTTPS 通信。

如果想保护应用免受 MITM 攻击影响,可以使用 SSL 校验证书绑定,此时受信任服务器的证书副本会打包到 iOS 应用中,还有一些附加代码可以确保应用只与使用特定证书的服务器通信。当 SSL 证书绑定处于激活状态时,应用不会将任何请求发送到不受信任的服务器上。

即便如此,也依然可以绕过 SSL 证书绑定。也就是在具体请求通过受保护的 HTTPS 通道发送之前,尝试拦截这个请求,这需要将代码植入到应用中,这里会用到代码注入的相关知识。

如果想更细致的了解如何拦截 HTTPS 请求,本文不可错过,绝对深度好文。

? ? 干货 | 近万字长文详述携程大规模应用RN的工程化实践

@Damonwong: 如果谈起 React Native 在国内的业务落地,我可能第一个会想起的就是携程和赵辛贵老师。在上次听完赵兴贵老师分享的专题《携程无线持续交付平台工程实践》之后,意犹未尽,一直想更加深入了解一下携程在 RN 方面的技术探索。今天终于等到了携程的 RN 建设及他们设计的 CRN 的分享。这篇文章主要讲了下面几个事情:

  1. RN 在携程中的使用情况
  2. 携程基于 RN 优化的 CRN 框架的设计及使用
  3. CRN 做了哪些性能优化及实际效果比较
  4. 如何发布及运维

比较可惜的是没有看到这套系统相比较于原生开发,对业务增长,开发效率有哪些优化,所以比较期待后续能有这方面的分享。

最后,在文中提到将要开源的 CRN,也已经开源了,感兴趣的同学移步 携程开源RN开发框架CRN 查看。

? JSON as configuration files: please don’t

@olddonkey:这是一篇 2016 年的老文章,但是其中的观点直到今天依然具有参考价值。

很多公司,很多团队使用 JSON 文件作为 App 的配置文件,不论是从远程下发,还是本地加载。

但是,在实际的项目中,用 JSON 来作为配置文件解决方案并不是个完美的方案,它存在的很多问题,这些问题会在实际中逐渐暴露。

文章作者围绕这他心中的几个缺点展开论述:

  1. 注释容易缺失。
  2. 可读性差。
  3. 过分严格的格式。
  4. 缺乏可编程性。

本文虽本意是针对 Web 开发提出观点,但是对 Mobile 开发也一样适用。

? Swift 5 Frozen enums

@没故事的卓同学:在 Swift 5.0 中编译器针对使用 C style 枚举增加了一类提醒(即使 switch 已经覆盖了所有的 case 依然会有这样的警告):

Switch covers known cases, but 'XXXXX' may have additional unknown values,Handle unknown values using "@unknown default"

提醒用户虽然现在你已经覆盖了所有的 case,但是未来这个枚举值有可能会增加新的值,我建议你还是处理一下这样的情况。

不过有的枚举值作者可以保证未来不会新增值,针对这个场景苹果增加了 NS_CLOSED_ENUM。如果枚举用 NS_CLOSED_ENUM 声明而不是 NS_ENUM,Swift 使用这个枚举编译器就不会产生建议使用 @unknown default 的警告。

? Asynchronous completion handlers with Result type

@邦Ben:Swift 5 中的标准库中加入了 Result Enum (success / failure),该文作者通过一个 URLSession 的请求例子,演示了使用 Result Enum 改造过程。使用 Enum 会让你的程序看上去更为简洁以及意思明确,详细请看文章内容。

? Improve your iOS team’s productivity by building features as frameworks

@老峰:如果你使用 Swift 开发过大一点的项目,那么你可能会有这样的感受,明明只是修改了一行代码,但却把整个 App 重新编译了一次,花费了很多时间。

本文作者针对这一痛点提出一种优化方案,通过把功能独立的业务代码改为 Framework 动态库,这样就不会每次重新编译整个 Project,从而减少编译时间,文中结合示例代码给出了详细的优化过程。

尽管作者这一方案可以缩短编译时间,但如果 Framework 粒度太小,太多动态库反而会引起其他问题如增加 APP 启动时间、App 安装包变大;粒度太大,每次修改代码又会涉及多个 Framework ,编译时间优化又不会很明显,感兴趣的读者可以借鉴这一思路,做些有益的尝试。

? How to deploy a Swift backend on Amazon AWS

@小非86:目前 Swift 的后端框架主要有 Perfect、Vapor、Kitura 和 Zewo 等。往期周报 推荐过使用 Perfect 开发后端的经验。本期推荐大家这篇使用 Kitura 开发后端的另一种尝试。

? Disjoint-set union in C++ and Swift

本文使用 C++ 与 Swift 实现了简单的并查集。大家可以借此对比同一个数据架构在不同语言的实现。

工具

Accio

Accio 是一个基于 SwiftPM 和 Carthage 的包管理工具,其有以下特点:

  • 依赖预编译,也就是二进制化。
  • 自动集成到项目文件里,不像 Carthage 那样需要手动集成,这也解决了 Carthage 项目中最麻烦的部分。
  • 基于 SwiftPM 的依赖管理系统,只要第三方库使用 Package.swift 声明即可,不需要去跟 xcodeproj 和 Cartfile 打交道。
  • 基于 SwiftPM 的缓存管理,可以减少不必要的重复的下载和编译。

代码

Markdown Playgrounds for Swift

@莲叔:Markdown Playgrounds for Swift 是 objc.io 基于 Swift5 开发的一款 markdown 编辑器,最大的特性就是在你 markdown 中的 Swift 代码可以被执行。对比传统 markdown 编辑器,核心就是实现了 Swift 语法的高亮以及将 Swift 代码提取出来后用 Swift REPL 程序去执行并拿到返回的结果(Swift REPL 程序就是终端中的 Swift 命令)。整个工具是开源的,并且 objc.io 有一整套配套的教学视频(第一章是免费的)一步步的教你如何写一个类似的工具出来,从工具的属性可以看出从中可以学到各种高级的字符串处理(如符号高亮、代码提取等),算是非常不错的 Swift 学习材料。

音视频

? 深入了解 Flutter 的高性能图形渲染

@CrazyCoderShi:本视频为 Google Flutter 团队的软件工程师 Yuqian Li 在 2018 谷歌开发者大会做的演讲,内容包含 Flutter 介绍,Flutter 的工作原理(对比原生开发和其他跨平台框架),Skia 介绍,分析常见的性能瓶颈等,通过解决 Flutter 样例 App - Flutter Gallery 的性能问题(Issue #13736),与大家分享如何通过 Flutter 工具定位、调试和解决性能问题。

视频主要讨论点:

  • Flutter 为何能够拥有媲美原生的高性能图形渲染
  • 如何通过 Skia 调试来分析 Flitter 应用
  • 关于 saveLayer 和 clipPath 的注意点
  • 使用 flutter screenshot 截取 skp 来单步调试绘图指令

ggtalk | 向架构进发

@J_Knight_:本期 ggtalk 邀请的嘉宾是 Casa Taloyum,他所写的 iOS 架构系列文章在社区非常受欢迎。本期主要围绕“架构”这一主题,主要讨论了以下几点:

  • 做架构到底是在做什么
  • 架构师和工程价值观
  • 架构师和高级工程师的区别在哪里
  • 如何定义真正的问题
  • 如何看待新技术和旧技术

除此之外,Casa 还分享了对跨平台技术以及区块链的一些看法。

推荐阅读:

内推

老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。

如果你想找工作,点这里:www.yuque.com/iosalliance…

如果你想招人,点这里:www.yuque.com/iosalliance…

当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。

关注我们

我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。

同时也支持了 RSS 订阅:github.com/SwiftOldDri…

说明

? 表示需翻墙,? 表示编辑推荐

预计阅读时间:? 很快就能读完(1 - 10 mins);? 中等 (10 - 20 mins);? 慢(20+ mins)

转载于:https://juejin.im/post/5cbd3062e51d456e51614abb

标题SpringBoot智能在线预约挂号系统研究AI更换标题第1章引言介绍智能在线预约挂号系统的研究背景、意义、国内外研究现状及论文创新点。1.1研究背景与意义阐述智能在线预约挂号系统对提升医疗服务效率的重要性。1.2国内外研究现状分析国内外智能在线预约挂号系统的研究与应用情况。1.3研究方法及创新点概述本文采用的技术路线、研究方法及主要创新点。第2章相关理论总结智能在线预约挂号系统相关理论,包括系统架构、开发技术等。2.1系统架构设计理论介绍系统架构设计的基本原则和常用方法。2.2SpringBoot开发框架理论阐述SpringBoot框架的特点、优势及其在系统开发中的应用。2.3数据库设计与管理理论介绍数据库设计原则、数据模型及数据库管理系统。2.4网络安全与数据保护理论讨论网络安全威胁、数据保护技术及其在系统中的应用。第3章SpringBoot智能在线预约挂号系统设计详细介绍系统的设计方案,包括功能模块划分、数据库设计等。3.1系统功能模块设计划分系统功能模块,如用户管理、挂号管理、医生排班等。3.2数据库设计与实现设计数据库表结构,确定字段类型、主键及外键关系。3.3用户界面设计设计用户友好的界面,提升用户体验。3.4系统安全设计阐述系统安全策略,包括用户认证、数据加密等。第4章系统实现与测试介绍系统的实现过程,包括编码、测试及优化等。4.1系统编码实现采用SpringBoot框架进行系统编码实现。4.2系统测试方法介绍系统测试的方法、步骤及测试用例设计。4.3系统性能测试与分析对系统进行性能测试,分析测试结果并提出优化建议。4.4系统优化与改进根据测试结果对系统进行优化和改进,提升系统性能。第5章研究结果呈现系统实现后的效果,包括功能实现、性能提升等。5.1系统功能实现效果展示系统各功能模块的实现效果,如挂号成功界面等。5.2系统性能提升效果对比优化前后的系统性能
在金融行业中,对信用风险的判断是核心环节之一,其结果对机构的信贷政策和风险控制策略有直接影响。本文将围绕如何借助机器学习方法,尤其是Sklearn工具包,建立用于判断信用状况的预测系统。文中将涵盖逻辑回归、支持向量机等常见方法,并通过实际操作流程进行说明。 一、机器学习基本概念 机器学习属于人工智能的子领域,其基本理念是通过数据自动学习规律,而非依赖人工设定规则。在信贷分析中,该技术可用于挖掘历史数据中的潜在规律,进而对未来的信用表现进行预测。 二、Sklearn工具包概述 Sklearn(Scikit-learn)是Python语言中广泛使用的机器学习模块,提供多种数据处理和建模功能。它简化了数据清洗、特征提取、模型构建、验证与优化等流程,是数据科学项目中的常用工具。 三、逻辑回归模型 逻辑回归是一种常用于分类任务的线性模型,特别适用于二类问题。在信用评估中,该模型可用于判断借款人是否可能违约。其通过逻辑函数将输出映射为0到1之间的概率值,从而表示违约的可能性。 四、支持向量机模型 支持向量机是一种用于监督学习的算法,适用于数据维度高、样本量小的情况。在信用分析中,该方法能够通过寻找最佳分割面,区分违约与非违约客户。通过选用不同核函数,可应对复杂的非线性关系,提升预测精度。 五、数据预处理步骤 在建模前,需对原始数据进行清理与转换,包括处理缺失值、识别异常点、标准化数值、筛选有效特征等。对于信用评分,常见的输入变量包括收入水平、负债比例、信用历史记录、职业稳定性等。预处理有助于减少噪声干扰,增强模型的适应性。 六、模型构建与验证 借助Sklearn,可以将数据集划分为训练集和测试集,并通过交叉验证调整参数以提升模型性能。常用评估指标包括准确率、召回率、F1值以及AUC-ROC曲线。在处理不平衡数据时,更应关注模型的召回率与特异性。 七、集成学习方法 为提升模型预测能力,可采用集成策略,如结合多个模型的预测结果。这有助于降低单一模型的偏差与方差,增强整体预测的稳定性与准确性。 综上,基于机器学习的信用评估系统可通过Sklearn中的多种算法,结合合理的数据处理与模型优化,实现对借款人信用状况的精准判断。在实际应用中,需持续调整模型以适应市场变化,保障预测结果的长期有效性。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值