阅读视图
Swift 进阶: 自动引用计数原理
黄子韬送车直播点赞数变负数,背后引起程序员技术的思考!
目录:
1. 现象
2. 原因
3. 为什么
4. 优化
5. 总结
现象
最近,黄子韬的直播间因送车而吸引了大量粉丝的关注,短时间内,粉丝数暴涨千万,堪称一次直播界的“爆发性增长”。然而,令人意外的技术问题也在这次直播中浮现——点赞数竟然出现了负数!这一现象引发了大家对直播平台技术背后细节的热议。
原因
-
高并发访问: 在直播间的高流量下,短时间内会有极大量的点赞请求。尤其是当黄子韬进行送车等活动时,粉丝互动频繁,点赞数激增。假设某个时刻,直播间的点赞数迅速突破了
int
类型的最大值,那么就会触发溢出,最终导致点赞数显示为负值。 -
数据类型选择不当: 由于平台早期的设计没有考虑到如此极端的情况,存储点赞数的字段选择了
int
类型,最大值是2147483647,而没有使用更大的数据类型,如long
(64位整数)。当点赞数远远超出int
类型的限制时,会显示负数。来看看各个数据类型的取值范围!
为什么超出int
类型的限制会显示负数
因为在计算机内部 int
类型的内存存储采用二进制补码的形式表示,超出范围后会环绕到负数区间。在 int 类型中,通常使用 4 个字节(32 位)来存储整数值。其中,最高位表示符号位,0 表示正数,1 表示负数。
如果int 类型来存储一个int的最大值 2147483647,二进制表示如下
01111111 11111111 11111111 11111111
如果再将这个值加 1,则二进制表示如下(即补码)
10000000 00000000 00000000 00000000
这个值超出了 int 类型能表示的范围,因此会溢出,而由于最高位为 1,表示负数,计算机中的负数用补码表示的。为了将其转换为十进制数,我们需要使用二进制补码的转换规则:补码=反码+1,那么
反码=补码-1
01111111 11111111 11111111 11111111
反码(原码除了符号位,每一位取反,即0变为1,1变为0),那
原码如下,即2的31次方,因为是负数,所以值是-2的31次方
10000000 00000000 00000000 00000000
如何优化
-
使用更大的数据类型: 将点赞数的存储类型由
int
升级为long
,long
类型的最大值为9223372036854775807,远远超过了大多数社交平台可能遇到的点赞数。因此,选择long
类型可以确保平台在高并发、高流量的情况下仍能准确存储点赞数。 -
数据溢出保护机制: 对于这种极端情况,可以引入数据溢出保护机制。比如,当点赞数接近
int
的最大值时,系统可以提前进行警告,或者通过智能算法限制点赞数的增长速度,防止一次性飙升至不合理的数值。 - 实时监控与调整: 在直播间这种特殊场景下,可以设立实时监控机制,动态调整点赞数的存储方案。例如,当发现点赞数过快增长时,平台可以临时切换到更大的数据存储类型,避免由于类型限制导致的问题。
- 缓存机制的优化: 在高并发的环境中,单一数据库存储可能会存在瓶颈。因此,合理使用分布式缓存系统,如Redis自增方案,可以有效降低数据库负载,并提高点赞数更新的效率。通过缓存层的优化,还能减少点赞数数据因并发过高而导致的存储问题。
总结
黄子韬直播间点赞数变负数的现象,不仅仅是一次技术失误的体现,更提醒了我们在面对极端流量时,技术架构的弹性与可扩展性的重要性。随着互联网平台规模的不断扩大,开发者在设计系统时,必须要充分考虑到数据的最大值、并发访问、溢出保护等一系列问题,避免类似情况的发生。
从这次事件可以看到,技术在背后发挥的巨大作用。而我们作为开发者和技术从业者,更应时刻保持敏锐的技术视角,才能在风口浪尖上为平台保驾护航。
webview 关闭之后 音频没有立即停止播放
信息安全管理体系认证:保障、信任、竞争优势与风险控制
JS requestAnimationFrame 底层实现
星级服务认证,打造卓越售后,提升企业竞争力
在这个日新月异的商业世界中,售后服务认证已成为企业提升品牌形象、优化服务流程、提高客户满意度、增强市场竞争力的重要手段。售后服务认证属于服务认证类别,它运用了《商品售后服务评价体系》标准(GB/T2799-2011)这一权威标准,对企业的服务能力进行审核,对服务水平做出评价。认证结果分为达标、三星、四星、五星,通过认证的企业可以按照认证的星级进行宣传推广,并合法使用认证星级标识。
首先,售后五星级服务认证无疑可以提高品牌形象和信誉。当消费者了解到企业通过了五星级服务认证,他们会对企业的服务质量和专业能力产生更高的信任度。这种信任不仅有助于提升企业的销售额,还能在竞争激烈的市场中建立良好的口碑。
其次,售后五星级服务认证有助于优化服务流程。通过认证的企业会更加注重客户的需求和反馈,他们会不断优化服务流程,提高服务效率和质量。这样,企业的服务水平会得到显著提升,从而满足更多客户的期待。
再者,售后五星级服务认证可以提高客户满意度。企业通过认证后,会更加注重客户的服务体验,他们会不断改进服务中的不足,提供更优质、更快捷的服务。这样,客户的满意度会显著提高,从而带来更多的回头客和口碑传播。
此外,售后五星级服务认证还能增强企业的市场竞争力。在竞争激烈的市场中,拥有卓越服务的企业往往能获得更多的机会和资源。通过售后五星级服务认证的企业,无疑会在市场中占据更有优势的地位,增强他们的市场竞争力。
最后,售后五星级服务认证还能提高服务团队的专业能力。通过认证的过程,企业会邀请专业的评估团队对服务团队进行评估和培训,这无疑会提高服务团队的专业能力和服务水平。
除了以上这些显而易见的好处外,售后五星级服务认证还有许多潜在的优势。它符合法律法规要求,是企业在市场中合法经营的必要条件。同时,它还能促进企业持续改进,推动企业不断追求卓越的服务水平。
售后五星级服务认证不仅有助于提升企业的服务质量和客户满意度,还能增强企业的市场竞争力,促进企业的持续发展。那么,如何获得售后五星级服务认证呢?事实上,获得售后五星级服务认证并非易事,它需要企业具备完善的服务体系、专业的服务团队、优质的服务内容等诸多要素。只有当企业真正具备这些要素时,才有可能通过认证并获得这一荣誉。
那么,为了满足广大企业的需求,我们特别为您推荐一款名为“星耀服务”的售后服务认证品牌。该品牌拥有丰富的经验和完善的服务体系,致力于为企业提供卓越的售后服务认证服务,帮助企业提升服务质量和竞争力。
flutter自学笔记8- package、插件、主题、国际化
[转载] 告别构建错误, iOS 开发架构难题全面解析, 避免 CPU 架构陷阱
前言
如果你经常开发 iOS 中的第三方框架,那么你可能会遇到以下错误:
1 |
"Could not find module *** for target 'x86_64-apple-ios-simulator'." |
或者:
1 |
"building for iOS Simulator, but linking in dylib built for iOS, file, '.../Frameworks/xxx.framework/xxx' for architecture arm64." |
要解决这个问题,我们需要了解 CPU 架构和 Xcode 构建设置的一些知识,今天我们就来聊聊这个。
理解 CPU 架构
每个 CPU 都有一组可以执行的指令。这些指令主要分为两种类型:
CISC(复杂指令集计算)
- 复杂且强大的指令。
- 每条指令执行多个任务。
- 例如:x86 处理器(由 Intel 和 AMD 使用)。
RISC(精简指令集计算)
- 简单且快速的指令。
- 每条指令执行一个任务。
- 例如:ARM 处理器(由 Qualcomm、MediaTek 和苹果的 M1 芯片使用)。
什么是 32 位和 64 位
32 位:一次可以处理 32 位数据。
64 位:一次可以处理 64 位数据,允许更多的计算能力和内存使用。
常见架构
x86:Intel 和 AMD 使用的 32 位架构。
x86_64:x86 的 64 位版本,更强大,能处理更多数据。
ARM:Qualcomm 和 MediaTek 使用的 32 位架构。
ARM64:ARM 的 64 位版本,更强大,苹果的 M1 芯片使用。
主要的制造商
Intel 和 AMD:制造 x86 和 x86_64 处理器。
Qualcomm 和 MediaTek:制造 ARM 和 ARM64 处理器。
Apple:在 Apple Silicon 系列(M1、M1、M2、M3、M4 等)Mac 中使用
ARM64 处理器。
向 M 系列过渡与 Rosetta 的作用
M 系列处理器的引入,始于 M1,标志着苹果及其生态系统的重大转变。由于 M 系列基于 ARM,现有为 x86 构建的软件无法在这些新芯片上原生运行。为弥补这一差距,苹果推出了 Rosetta,它是一种兼容层,主要作用是允许 x86 软件在 M 系列处理器上运行。
M1 MacBooks 推出后,Xcode 最初就是使用 Rosetta 支持 x86 应用程序。
虽然这让开发者可以继续无缝工作,但 Rosetta 只是 Apple Silicon 过渡期的临时解决方案。随着 Xcode 12 的推出,苹果使 Xcode 能够在 ARM 上原生运行,全力支持 M 系列 MacBooks,而不再依赖于 Rosetta。
iOS 14 之前的模拟器仅限于 x86,并通过 Rosetta 在 M 系列 Mac 上运行。自 iOS 14 起,模拟器更新支持 ARM 和 x86,这意味着虽然模拟器可以在 M 系列 Mac 上原生运行,但未为 ARM 优化的应用程序仍会通过 Rosetta 运行。这种双重架构支持确保了过渡期间的兼容性和性能。
要检查你的应用程序正在使用哪种架构,你可以使用活动监视器。在活动监视器中,有一个名为”Kind”的列,显示应用程序是运行在 Intel(x86)还是 Apple(ARM)架构下。这一功能仅在 M 系列 Mac 上可用。
Apple 物理设备架构
- arm64:也称为 AArch64,现代 64 位 iOS 设备(iPhone 5S及更新机型),包括 A7、A8、A9、A10 和 A11 芯片的设备。
- arm64e:较新的 64 位 iOS 设备,带有 A12仿生芯片及更新版本(例如,iPhone XS、XR、11、12、13 等)。
- armv7:较旧的 32 位 iOS 设备(iPhone 3GS、4、4S)。
- armv7s:略新的 32 位设备(iPhone 5、5C)。
Apple 模拟器架构
- x86_64:基于 Intel 的 Mac 上的模拟器。
- i386:用于较旧 iOS 版本的 32 位模拟器(主要是遗留支持)。
- arm64:Apple Silicon(M1、M2)Mac 上的模拟器。
在了解了 CPU 架构基础知识、列出设备和模拟器架构,并讨论了 M
系列的历史和 Rosetta
的作用后,为解决之前提到的错误,我们需要知道如何找出我们集成的框架所支持的架构。
此外,我们需要调整构建设置,如 EXCLUDED_ARCHS 和
ONLY_ACTIVE_ARCH。接下来聊聊这些。
确定支持的架构
要确定 .xcframework 支持的架构,我们可以在终端中使用 lipo -info 命令。通过检查 .xcframework 中的目录,我们可以识别出支持哪些架构。以下是使用 lipo -info ~/Downloads/Bugly.framework/Bugly
查看 Bugly 2.6.0 版本的示例:
根据命令输出可以看出 Bugly 2.6.0 版本支持 armv7、i386、x86_64 和 arm64 架构。
理解 EXCLUDED_ARCHS 和 ONLY_ACTIVE_ARCH
EXCLUDED_ARCHS
- 定义:Xcode 中的一个构建设置,用于指定在构建目标时要排除的架构。
- 用途:排除某些架构以避免兼容性问题或不必要的构建。
- 示例:EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64 在为 iOS 模拟器构建时排除 arm64 架构,以确保兼容基于 Intel 的 Mac 上的 x86_64 模拟器。
ONLY_ACTIVE_ARCH
- 定义:一个构建设置,决定 Xcode 是仅构建活动架构还是所有指定架构。
- 用途:通过仅构建活动架构来加快开发过程中的构建速度。
- 示例:ONLY_ACTIVE_ARCH = YES 仅构建活动架构,在开发过程中减少构建时间。通常在 Debug 配置中设置为 YES,在 Release 配置中设置为 NO,以确保最终构建支持所有所需架构。
说白了一个是黑名单,一个是白名单。
之前提到的错误
错误消息”Could not find module *** for target ‘x86_64-apple-ios-simulator’.”通常表示我们尝试使用的框架或模块不可用于我们目标的架构,它需要原生运行而不是使用 Rosetta,但我们试图导入仅为 x86_64 构建的框架或可测试应用:
解决方法
我们可以实施一种变通方法来让测试目标运行,但这取决于使用的机器:
Apple Silicon M 系列:在 EXCLUDED_ARCHS 中排除 arm64。
基于 Intel 的:在 Debug 模式下使用”仅构建活动架构”,这将允许项目成功运行。
更好的解决方案
如果你可以控制框架的构建,建议打包的时候支持缺失的架构,特别是 arm64 模拟架构。
在分发的时候,优先使用 ios-arm64_i386_x86_64-simulator 或 ios-arm64_x86_64-simulator,更旧的模拟器一般就不用支持了。
如果你无法控制框架的构建,也无法联系开发者,你需要使用 EXCLUDED_ARCHS 排除缺失的架构。然而,这种方法可能限制你只能在物理设备上运行,特别是对于 Apple M 系列。此外,它要求你在使用此框架的所有依赖项中排除缺失的架构。例如,如果你使用的核心框架依赖于缺少架构的库,则核心框架和导入核心的项目都必须排除相同的架构。因此,在解决此类错误时要谨慎和耐心。
ISO27001信息安全认证:护航企业信息安全之旅
如何获得ISO27001认证?本文将为你详细解读这一过程,帮助你了解如何通过深入理解标准、风险评估、建立体系、审核认证以及持续改进,获得这一国际信息安全领域的权威认证。
ISO27001,作为全球广泛认可的信息安全标准,为企业提供了清晰的方向和框架,帮助企业在日益复杂多变的信息环境中保障信息安全。深入理解ISO27001的要求和框架,是迈向信息安全之路的第一步。
在信息时代,信息安全隐患无处不在。通过风险评估,我们可以识别出信息系统中可能存在的安全风险,并据此制定相应的控制措施。这一过程需要专业的知识和技能,以确保评估的准确性和全面性。
根据ISO27001标准,建立、实施、维护和改进信息安全管理体系,是企业走向规范化和标准化的必经之路。这一过程需要企业全员参与,共同维护企业的信息安全环境。
获得ISO27001认证的过程,离不开第三方机构的审核。通过专业的审核团队,我们可以确保企业的信息安全管理体系符合ISO27001的要求,为企业赢得权威的认证。
获得ISO27001认证并非终点,而是起点。获得认证后,企业还需定期进行内部和外部的审核,确保体系持续有效,不断适应变化的环境。同时,企业还需关注新的安全威胁和挑战,及时更新和改进信息安全管理体系,以应对不断变化的安全环境。
那么,如何进行内部和外部的审核呢?内部审核是企业自我检查和改进的过程,通过定期的自我审视,可以及时发现和解决信息安全问题。外部审核则是由专业的第三方机构进行的,他们拥有丰富的经验和专业的技能,可以帮助企业发现一些可能被忽视的问题。无论是内部还是外部审核,都需要全员参与,共同维护企业的信息安全环境。
为了应对不断变化的安全环境,企业还需关注新的安全技术和产品。不断更新和升级安全设备和技术,以提高企业的信息安全防护能力。同时,企业还需要加强员工的信息安全意识培训,提高员工的信息安全素养,从源头上保障企业的信息安全。
获得ISO27001认证是企业走向信息安全之路的重要一步。通过深入理解标准、进行风险评估、建立完善的信息安全管理体系、获得第三方机构的认证以及持续改进,企业可以赢得更广阔的发展空间,为企业的稳健发展保驾护航。