深入剖析iOS网络优化策略,提升App性能
一、引言
在当今移动互联网时代,iOS 应用的网络性能直接关系到用户体验。无论是加载速度缓慢、频繁的网络错误,还是高额的流量消耗,都可能导致用户流失。因此,iOS 网络优化成为开发者提升应用质量、增强用户满意度的关键环节。本文将深入探讨 iOS 网络优化的策略与实践,帮助开发者打造高效、稳定的网络体验。
二、iOS 网络基础
2.1 网络请求流程
iOS 网络请求从应用层发起,首先进行 DNS 解析。DNS 解析将域名(如www.example.com)转换为对应的 IP 地址,这一过程如同在电话簿中查找联系人的电话号码。iOS 系统会先检查本地缓存中是否有对应域名的解析记录,如果缓存中有记录,系统将直接使用缓存的 IP 地址,跳过后续的 DNS 查询过程。若缓存中没有,便会向配置的 DNS 服务器发送查询请求 。
获取 IP 地址后,会进行 TCP 连接的建立。TCP 连接采用三次握手机制,客户端发送 SYN 包到服务器,服务器收到后返回 SYN + ACK 包,客户端再发送 ACK 包,至此三次握手完成,连接建立成功,就像双方确认彼此身份并建立起沟通的通道。
连接建立好后,进行数据传输。应用将请求数据按照 HTTP 或 HTTPS 协议格式封装,发送到服务器,服务器处理后返回响应数据,数据在网络中通过路由器等网络设备进行传输 。最后,当数据传输完成,连接会根据需要关闭,短连接在数据传输结束后立即关闭,长连接则可保持一段时间,用于后续的多次数据交互。
2.2 常见网络问题
iOS 应用网络问题中,延迟高较为常见。当网络拥塞、服务器负载过高或信号较弱时,数据传输时间增加,导致应用加载缓慢,如图片、视频加载延迟,严重影响用户体验。例如在观看在线视频时,高延迟可能导致视频卡顿,不断缓冲。
丢包也是一大问题,多发生在网络不稳定的场景,如移动过程中信号变化、网络干扰等。丢包会使数据不完整,应用可能出现请求失败、页面显示异常等情况。像在玩实时对战类游戏时,丢包可能导致游戏操作与实际画面不同步,影响游戏体验 。
连接不稳定表现为频繁断开重连,原因包括 WiFi 信号弱、路由器故障或网络切换。这会使正在进行的网络操作中断,如下载任务中断、在线聊天消息发送失败,用户需反复尝试操作,降低了应用的可用性 。
三、优化方法
3.1 优化 DNS 解析
3.1.1 本地缓存
iOS 系统自带 DNS 缓存机制,在进行 DNS 解析时,会优先查询本地缓存。开发者可以利用这一特性,手动管理缓存,减少不必要的 DNS 查询。例如,在应用启动时,将常用域名的解析结果缓存起来。当需要发起网络请求时,先检查缓存中是否有对应的 IP 地址,若有则直接使用,避免重复解析 。可以通过第三方库如SDWebImage,它在加载图片时会缓存图片 URL 的 DNS 解析结果,下次加载相同 URL 的图片时,可直接从缓存获取 IP 地址,加快加载速度。
3.1.2 使用 HTTPDNS
传统 DNS 解析易受运营商劫持,导致解析结果不准确。HTTPDNS 通过 HTTP 协议进行域名解析,绕过了运营商的 LocalDNS 服务器,从根本上解决了域名劫持问题 。以阿里云的 HTTPDNS 服务为例,接入后,应用在进行域名解析时,会向阿里云的 HTTPDNS 服务器发送请求,服务器返回准确的 IP 地址,提升解析的准确性和稳定性。这在网络环境复杂的场景下,如公共 WiFi 环境,能有效保障应用的网络连接质量。
3.2 优化请求
3.2.1 请求合并
在应用中,一些非关键业务请求,如用户行为统计、日志上报等,可进行合并。例如,将多个短时间内的用户行为统计请求合并成一个请求发送,减少与服务器的交互次数。以电商应用为例,用户在浏览商品、添加购物车等操作时,产生的行为数据可先在本地缓存,当满足一定条件(如累计达到一定数量或达到一定时间间隔)后,将这些数据合并成一个请求发送到服务器,既降低了服务器压力,又减少了客户端的流量消耗 。
3.2.2 请求压缩
采用合适的压缩算法对请求数据进行压缩,能显著减少数据传输量。iOS 中常用的压缩算法有GZIP。在设置网络请求时,通过设置请求头Accept-Encoding: gzip,告知服务器客户端支持GZIP压缩。服务器接收到请求后,对响应数据进行GZIP压缩,再返回给客户端。客户端接收到压缩数据后,进行解压缩处理。这样,在网络传输过程中,数据量大幅减少,加快了传输速度,尤其在网络带宽有限的情况下效果明显 。
3.3 优化连接
3.3.1 长连接
长连接能在一次连接中进行多次数据传输,避免了每次请求都重新建立连接的开销。在 iOS 中,使用NSURLSession进行网络请求时,可通过设置NSURLSessionConfiguration来实现长连接。例如:
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
configuration.HTTPShouldUsePipelining = YES;
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];
上述代码中,HTTPShouldUsePipelining属性设置为YES,表示启用连接管道,即长连接。长连接适用于实时性要求较高的应用场景,如即时通讯应用,能保持客户端与服务器之间的持续连接,快速接收消息 。
3.3.2 连接池
连接池是一种管理连接的机制,它预先创建一定数量的连接,并将这些连接存储在池中。当应用需要进行网络请求时,从连接池中获取一个可用连接,请求完成后,将连接放回池中,而不是直接关闭。这样可以减少连接创建和销毁的开销,提高连接的复用率。在 AFNetworking 库中,内置了连接池功能,开发者无需手动实现。当使用 AFNetworking 进行网络请求时,它会自动管理连接池,根据请求的需要从池中获取或归还连接,提升网络请求的效率 。
3.4 优化数据传输
3.4.1 数据缓存
设置合理的缓存策略能有效减少网络请求次数。对于不经常变化的数据,如商品分类信息、静态配置文件等,可以在本地缓存。在 iOS 中,可使用NSURLCache类来实现缓存功能。例如:
NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 diskCapacity:20 * 1024 * 1024 diskPath:nil];
[NSURLCache setSharedURLCache:URLCache];
上述代码创建了一个内存缓存容量为 4MB,磁盘缓存容量为 20MB 的缓存实例,并将其设置为共享缓存。当应用发起网络请求时,系统会先检查缓存中是否有对应的响应数据,若有且未过期,则直接使用缓存数据,避免重复请求 。
3.4.2 数据格式优化
选择合适的数据格式对数据传输效率影响重大。JSON 格式因其简洁、易解析的特点,在 iOS 应用中广泛使用。与 XML 格式相比,JSON 数据量更小,解析速度更快。在数据传输过程中,采用 JSON 格式能减少数据传输量,加快数据解析速度。例如,在服务器端将数据以 JSON 格式编码后返回给客户端,客户端使用系统自带的NSJSONSerialization类或第三方库如YYModel进行 JSON 数据解析,快速将数据转换为模型对象,提高应用的数据处理效率 。
四、优化工具
4.1 Charles
Charles 是一款功能强大的网络抓包工具,在 iOS 网络优化中发挥着重要作用 。它通过将自身设置为代理服务器,能捕获设备的网络请求与响应。其主要功能包括:支持 SSL 代理,可抓取 HTTPS 流量,使开发者能查看加密请求内容;能格式化显示请求和响应数据,如 JSON、XML 格式,方便阅读分析 。
在 iOS 开发中,使用 Charles 抓包的步骤如下:先在计算机上下载并安装 Charles,可从其官方网站下载对应操作系统的安装包。安装完成后,需配置 Charles 以抓取 HTTPS 流量。打开 Charles,点击 “Help” - “SSL Proxying” - “Install Charles Root Certificate on a Mobile Device or Remote Browser”,按提示完成 SSL 证书的安装 。
接着,确保 iOS 设备和运行 Charles 的计算机处于同一 Wi-Fi 网络。在 iOS 设备的 “设置” 中,找到 “Wi-Fi”,点击已连接的 Wi-Fi 网络,在 “HTTP 代理” 选项中选择 “手动”,输入运行 Charles 的计算机的 IP 地址和端口(默认 8888) 。
完成上述设置后,Charles 就能捕获 iOS 应用的网络请求。开发者可在 Charles 的界面中查看请求的详细信息,如 URL、请求参数、响应时间、响应体等,通过分析这些数据,能快速定位网络问题,如请求超时、数据加载异常等,进而针对性地进行优化 。
4.2 Network Link Conditioner
Network Link Conditioner 是一款用于模拟网络状况的工具,能模拟 3G、DSL、EDGE、WiFi 等多种网络环境,还支持自定义网络状况,如设置上下行带宽、丢包率和网络延迟 。这对于测试 iOS 应用在不同网络条件下的表现极为有用。例如,在开发视频播放应用时,可通过该工具模拟低带宽网络环境,测试视频加载速度、卡顿情况,从而优化视频加载策略,如采用自适应码率播放,根据网络状况自动调整视频画质,提升用户观看体验 。
在 Xcode 4.1 之后,该工具不再随 Xcode 自带,需单独下载,可在 Apple 开发者下载中心的 Hardware IO Tools 工具包中获取 。下载安装后,运行 Network Link Conditioner.prefPane,它会被添加到系统偏好设置的其他分类中。打开后,在 Profile 中可选择预置的网络环境,也可点击左下角锁按钮输入系统密码解锁,通过右侧 Manage Profiles 自定义网络环境 。启动该工具后,即可使用 iOS 模拟器测试应用在此网络环境下的运行情况。需注意,该工具对整个系统生效,测试结束后记得停止,以免影响正常网络使用 。
五、案例分析
5.1 爱奇艺 iOS 端优化
爱奇艺在 iOS 端面临着移动网络复杂性带来的挑战,如网络信号不稳定、接入类型和接入点变化频繁等 。为提升网络请求成功率,爱奇艺采取了一系列策略。
通过 APM(应用性能管理)的归类分析,发现请求失败的主要报错是超时,占比达九成,SSL 错误和 DNS 解析错误占比紧随其后 。基于此,爱奇艺的基线网络库针对不同业务需求提供了四种重试手段 。对于登录等强制要求 HTTPS 连接的业务,采用 IP 直连重试,通过配置直连 IP 数来控制重试次数,消除域名解析风险。对于首页等关键核心业务,采用超级管道重试,配置 1 - 3 次重试,通过公司自研基于 HTTP 的网关代理服务,消除域名解析风险和 SSL 风险。对于非关键核心的一般业务,采用 HTTP 重试,配置 1 - 3 次重试,将 Scheme 修改为 HTTP,消除 SSL 风险 。原 url 重试则由业务方自主决定是否采用 。
通过这些重试手段的组合运用,扣除无网情况,爱奇艺首页推荐页 CARD 接口成功率在 2020 第一季度末达到了 99.76% 。此外,爱奇艺还采用首次请求走 H2,失败重试时走 HTTP/1.1 的请求策略,以及合理设置超时时间等方式,进一步提升网络请求成功率 。
5.2 某图片类 App 优化
某图片类 App 以图片上传为核心功能,在网络优化方面采取了多种措施 。针对 DNS 解析过程不受控制、易受运营商域名劫持等问题,该 App 通过指定地址从服务端拉取域名与 IP 地址映射表,并进行缓存 。在有效期内,直接通过 IP 地址与服务器进行直连,减少 DNS 的请求、查询、更新,解决了 DNS 解析耗时问题,同时避免了 DNS 劫持的安全隐患 。
在 TCP 连接优化上,鉴于 HTTP1.1 中 keep - alive 连接只能处理一个请求,请求处理完成前无法接收新请求的局限性,该 App 采用 HTTP2 的多路复用机制 。此机制复用的连接支持同时处理多条请求,所有请求可并发进行,解决了 HTTP1.1 中数据串行发送,需等待上一个请求处理完才能进行下一个请求的问题,大大提高了连接的利用率和数据传输效率 。
考虑到标准协议 TLS1.2 每次建立安全连接需额外 2RTT,对用户延迟影响明显,而该 App 图片存储对加密无要求,于是将 https 改为 http,减少了 TLS 的消耗,降低了握手带来的耗时问题 。
为减少图片上传时的数据包大小,该 App 在上传前将图片格式从 jpg 转换为 webp,图片压缩率达 47% 。这一举措大幅减少了上传的数据量,在网络传输过程中,有效降低了带宽需求,加快了图片上传速度,提升了用户体验 。
六、总结与展望
iOS 网络优化涵盖从 DNS 解析到数据传输的各个环节,通过优化 DNS 解析、请求、连接和数据传输等方面,以及借助 Charles、Network Link Conditioner 等工具,能显著提升应用的网络性能 。爱奇艺 iOS 端和某图片类 App 的优化案例,为开发者提供了实际操作的借鉴。
未来,随着 5G 网络的普及和物联网的发展,iOS 网络优化将面临新的机遇与挑战。开发者需持续关注网络技术的发展,不断探索新的优化策略,如利用边缘计算减少数据传输距离、结合 AI 实现智能网络调度等,以适应不断变化的网络环境,为用户带来更优质的网络体验 。
相关文章:
深入剖析iOS网络优化策略,提升App性能
一、引言 在当今移动互联网时代,iOS 应用的网络性能直接关系到用户体验。无论是加载速度缓慢、频繁的网络错误,还是高额的流量消耗,都可能导致用户流失。因此,iOS 网络优化成为开发者提升应用质量、增强用户满意度的关键环节。本文…...
unity2022以上导出到AndroidStudio后更新步骤
1、unity里面Export出unityLibrary 2、导出apk,里面才包含libil2cpp(新版unity无法直接导出libil2cpp 3、注释AS项目app下的build.gradle里面包含unityLibrary的代码 4、注释AS项目settings.gradle包含unityLibrary的代码 5、删除AS项目里面的unityLibrary文件夹 6、…...
03JavaWeb——Ajax-Vue-Element(项目实战)
1 Ajax 1.1 Ajax介绍 1.1.1 Ajax概述 我们前端页面中的数据,如下图所示的表格中的学生信息,应该来自于后台,那么我们的后台和前端是互不影响的2个程序,那么我们前端应该如何从后台获取数据呢?因为是2个程序…...
表单中在不设置required的情况下在label前加*必填标识
参考:https://blog.csdn.net/qq_55798464/article/details/136233718 需求:在发票类型前面添加*必填标识 我最开始直接给发票类型这个表单类型添加了验证规则required:true,问题来了,这个发票类型它是有默认值的,所以我点击保存…...
Mac 使用 GVM 管理多版本 Go 环境
使用 GVM 管理多版本 Go 环境 在本文中,我们将使用 gvm(Go Version Manager)工具管理本地多个 Go 语言版本。gvm 功能类似于 Python 的 Anaconda,可以方便地切换不同版本的 Go 环境,非常适合需要多版本开发与测试的场…...
3DsMax设置中文界面
按键盘上的“Win”键,直接输入3dsmax,选择Simplified Chinese打开,之后就都是中文了...
【PyCharm】连接 Git
【PyCharm】相关链接 【PyCharm】连接 Git【PyCharm】连接Jupyter Notebook【PyCharm】快捷键使用【PyCharm】远程连接Linux服务器【PyCharm】设置为中文界面 要在 PyCharm 中连接 Git,确保您的开发环境已经安装了 Git,并且 PyCharm 能够访问它。 以下…...
使用Python和PIL裁剪图片以适应屏幕宽高比
在本教程中,我们将介绍如何使用Python和PIL(Python Imaging Library)库来裁剪图片,使其适应特定的屏幕宽高比。我们将详细解释代码的每个部分,并展示如何根据不同的裁剪模式来调整图片。 1. 安装PIL库 首先ÿ…...
Django简介与虚拟环境安装Django
目录 1.Django简介 1.1 Django 的核心特点 1.2 Django 的核心组件 1.3 Django 的应用场景 1.4 总结 2.基础环境建立 2.1 创建虚拟环境 2.1.1 使用 virtualenv 创建虚拟环境 2.1.2 使用 venv 创建虚拟环境 2.2 激活虚拟环境 2.2.1 在 Windows 上 2.2.2 在 macOS 或 …...
python实现pdf转word和excel
一、引言 在办公中,我们经常遇收到pdf文件格式,因为pdf格式文件不易修改,当我们需要编辑这些pdf文件时,经常需要开通会员或收费功能才能使用编辑功能。今天,我要和大家分享的,是如何使用python编程实现…...
Ubuntu 24.04 LTS 更改软件源
Ubuntu 24.04 LTS 修改软件源...
从CRUD到高级功能:EF Core在.NET Core中全面应用(三)
目录 IQueryable使用 原生SQL使用 实体状态跟踪 全局查询筛选器 并发控制使用 IQueryable使用 在EFCore中IQueryable是一个接口用于表示可查询的集合,它继承自IEnumerable但具有一些关键的区别,使得它在处理数据库查询时非常有用,普通集…...
浅谈云计算22 | Kubernetes容器编排引擎
Kubernetes容器编排引擎 一、Kubernetes管理对象1.1 Kubernetes组件和架构1.2 主要管理对象类型 二、Kubernetes 服务2.1 服务的作用与原理2.2 服务类型 三、Kubernetes网络管理3.1 网络模型与目标3.2 网络组件3.2.1 kube-proxy3.2.2 网络插件 3.3 网络通信流程 四、Kubernetes…...
C 语言的void*到底是什么?
一、void* 的类型任意性 void* 是一种通用指针类型。它可以指向任意类型的数据。例如,它可以指向一个整数(int)、一个浮点数(float)、一个字符(char)或者一个结构体等。在C语言中,当…...
前端【3】--CSS布局,CSS实现横向布局,盒子模型
盒子分类 1、块级盒子 2、内联级盒子 3、内联块级盒子 4、弹性盒子 5、盒子内部分区 方法一:使用 float 普通盒子实现横向布局 方法二:使用 display: inline-block 内联块级元素实现横向布局 方法三:使用弹性盒子 flexbox࿰…...
JavaEE
一.web开发概述 1.服务器 解释1:服务器是一款软件,可以向其他发送请求,服务器会做出一个响应。可以在服务器中部署文件,让其他人访问。 解释2:也可以把运行服务器软件的计算机称为服务器 2.安装服务器 Tomcat官方…...
C语言之文本加密程序设计
🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 文本加密程序设计 摘要:本文设计了一种文本加密程序,旨在提高信息安…...
Spring-Data-Redis连接模式
Redis可以在各种设置中操作。每个操作模式都需要特定的配置,这些配置将在以下部分中进行解释。 一、Redis 单机模式 最简单的入门方法是将Redis Standalone与单个Redis服务器一起使用, 配置LettuceConnectionFactory或JedisConnectionFactor࿰…...
详细介绍下linux内核的高端地址
在32位系统中,内核空间通常占据1GB,用户空间占3GB,这主要是基于历史原因、内存管理需求和系统安全性考虑。 历史原因:早期的UNIX系统就采用了将内核空间和用户空间分离的设计,在32位系统设计时,延续了这种…...
ThinkPhp项目解决静态资源请求的跨域问题的解决思路
背景:我在前端使用vue语言开发的,请求的后端是用ThinkPhp项目开发的。我vue项目里的请求php接口,自带header参数的跨域问题通过网上查询到的server端配置方法已经解决了。我使用的 是中间件的配置方法: <?php//admin 项目 配…...
通过图形界面展现基于本地知识库构建RAG应用
1. 客户需求 快速完成概念验证(PoC)通过图形界面快速完成演示本地私有数据对比不同模型和成本,决定如何部署 2. 阿里云基于本地知识库构建RAG应用 参考方案: 百炼本地知识库方案 解决方案: FastAPI Gradio Llamaindex qwen-plus 主要三大…...
GCPAAS/DashBoard:完全免费的仪表盘设计,基于Vue+ElementUI+G2Plot+Echarts,开源代码,简单易用!还在等什么呢
嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 GCPAAS/DashBoard,一款基于SpringBoot、MyBatisPlus、ElementUI、G2Plot、Echarts等技术栈的仪表盘设计器,具备仪表盘目录管理…...
深度学习笔记——循环神经网络RNN
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍面试过程中可能遇到的循环神经网络RNN知识点。 文章目录 文本特征提取的方法1. 基础方法1.1 词袋模型(Bag of Words, BOW)工作原…...
【Linux系统编程】—— 深度解析进程等待与终止:系统高效运行的关键
文章目录 进程创建再次认识fork()函数fork()函数返回值 写时拷贝fork常规⽤法以及调用失败的原因 进程终⽌进程终止对应的三种情况进程常⻅退出⽅法_exit函数exit函数return退出 进程等待进程等待的必要性进程等待的⽅法 进程创建 再次认识fork()函数 fork函数初识࿱…...
EPSANet2021笔记
来源: EPSANet: An Efficient Pyramid Squeeze Attention Block on Convolutional Neural Network 相关工作: #注意力机制 #多尺度特征表示 创新点: 贡献: 建立了长距离通道依赖关系有效获取利用不同尺度特征图的空间信息 问…...
CTTSHOW-WEB入门-信息搜集11-20
web11 1. 题目: 2. 解题步骤及思路:本题的flag已经给出,主要考点是考察域名的查询,通过查询有时候也可以得到一些有用的信息。 3. 相关知识点:查询域名可以使用nslookup命令使用方法如下:(windo…...
2025年1月19日(理论力学动静法)
动静法(Dynamic-Static Method)是理论力学中常用的一种分析方法,用来求解多自由度系统的平衡问题,尤其适用于静力学分析和动力学分析之间的转化。动静法通过引入虚拟的动力学效应,将静力学问题转化为一个动力学问题&am…...
iOS 性能优化:实战案例分享
摘要: 本文将深入探讨 iOS 性能优化的重要性,并通过一系列实际开发案例,展示如何解决常见的性能问题,包括内存管理、CPU 性能、网络性能、UI 性能和启动性能等方面的优化,帮助 iOS 开发者打造更流畅、高效的应用程序。…...
基于本地消息表实现分布式事务
假设我们有一个电商系统,包含订单服务和库存服务。当用户下单时,需要在订单服务中创建订单,同时在库存服务中扣减库存。这是一个典型的分布式事务场景,我们需要保证这两个操作要么都成功,要么都失败,以保证数据的最终一致性。 项目结构: 订单服务(Order Service)库存服务(Inv…...
select函数
系统调用 select()可用于执行 I/O 多路复用操作,调用 select()会一直阻塞,直到某一个或多个文件描述符成为就绪态(可以读或写)。其函数原型如下所示: #include <sys/select.h> int select(int nfds, fd_set *re…...
自然语言处理——自注意力机制
一、文字表示方法 在自然语言处理中,如何用数据表示文字是基础问题。独热编码(One-hot Encoding )是一种简单的方法,例如对于 “我”“你”“他”“猫”“狗” 等字,会将其编码为如 “我 [1 0 0 0 0 ……]”“你 [0 …...
C语言初阶--函数
目录 1. 函数是什么? 2. C语言中函数的分类 2.1 库函数 2.2 自定义函数 3. 函数的参数 3.1 实际参数(实参) 3.2 形式参数(形参) 4. 函数调用 4.1 传值调用 4.2 传址调用 练习:写一个函数判断一个…...
探索基于机器学习的信用评分:从数据到洞察
友友们好! 我的新专栏《Python进阶》正式启动啦!这是一个专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会找到: ● 深入解析:每一篇文章都将…...
Ubuntu 24.04 LTS 通过 docker desktop 安装 seafile 搭建个人网盘
准备 Ubuntu 24.04 LTSUbuntu 空闲硬盘挂载Ubuntu 安装 Docker Desktop [我的Ubuntu服务器折腾集](https://blog.csdn.net/jh1513/article/details/145222679。 安装 seafile 参考资料 Docker安装 Seafile OnlyOffice 并配置OnlyOffice到Seafile,实现在线编辑…...
【Golang 面试题】每日 3 题(三十六)
✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…...
Linux虚拟机安装与FinalShell使用:探索Linux世界的便捷之旅
文章目录 软件准备安装 VMware 虚拟机下载CentOS 光盘镜像文件选择适合的 CentOS 版本选择合适的镜像文件 本教程工具版本 第一部分:安装 Linux 虚拟机1. 启动 VMware 并创建新虚拟机2. 默认硬件兼容性设置3. 安装操作系统的设置4. 选择操作系统类型与版本5. 为虚拟…...
leetcode19-删除链表的第n结点
leetcode 19 思路 要删除倒数第n个元素,那么就要找到倒数第n1个元素,那么我们需要两个指针来记录,首先快指针需要先走n1步,然后快慢指针一起进行移动,直到快指针为null的时候,此时慢指针恰好走到倒数第n…...
多学科视角下探索开源Github、Git初步学习
Think 1.Github 作为现今最主流的代码托管平台、协作平台甚至是“社交平台”,本身是闭源的。一方面,它是和大多数开发者连接最紧密的开源阵地,另一方面,拥有传统“黑客精神”的人认为将用户身份绑定这样一个闭源平台上恰恰与…...
新星杯-ESP32智能硬件开发--ESP32的I/O组成-系统中断矩阵
本博文内容导读📕🎉🔥 ESP32开发板的中断矩阵、功能描述与实现、相关API和示例程序进行介绍 ESP32中断矩阵将任一外部中断源单独分配到每个CPU的任一外部中断上,提供了强大的灵活性,能适应不同的应用需求。 ESP32中断主…...
Android 右键后无Java class创建
Android studio 创建java class : 最近几个月用Android studio 开发,因为电脑设置了一个新的用户使用,原来的android studio,打开之前的正常的项目总是报一些奇奇怪怪的错误,就重新安装了最新的版本 问题描述 但是新的android s…...
leetcode-买卖股票问题
309. 买卖股票的最佳时机含冷冻期 - 力扣(LeetCode) 动态规划解题思路: 1、暴力递归(难点如何定义递归函数) 2、记忆化搜索-傻缓存法(根据暴力递归可变参数确定缓存数组维度) 3、严格表结构依…...
如何通过 Apache Airflow 将数据导入 Elasticsearch
作者:来自 Elastic Andre Luiz 了解如何通过 Apache Airflow 将数据导入 Elasticsearch。 Apache Airflow Apache Airflow 是一个旨在创建、安排(schedule)和监控工作流的平台。它用于编排 ETL(Extract-Transform-Load࿰…...
LDPC (Low-Density Parity-Check) 码min_sum、n_0、block_length 和 rate参数
1. min_sum 1; min_sum 是与 最小和解码算法(Min-Sum Decoding Algorithm)相关的参数。最小和解码算法是 LDPC 码的一种常用解码方法,主要通过传递信号的信息在接收端进行解码。此参数表示最小和算法中的缩放因子。 在 LDPC 解码过程中&am…...
基于javaweb的SpringBoot景区旅游管理系统设计和实现(源码+文档+部署讲解)
个人名片 🔥 源码获取 | 毕设定制| 商务合作:《个人名片》 ⛺️心若有所向往,何惧道阻且长 文章目录 个人名片运行环境技术栈适用功能说明使用说明 运行环境 Java≥8、MySQL≥5.7 1.运行环境:最好是java jdk 1.8,我们在这个平台…...
(二)afsim第三方库编译(qt编译)
注意:源码编译的路径不能有中文否则报错,压缩包必须用官网下载的xz格式解压的才可以,否则sudo ./configure命令找不到 先编译openssl3.1.1软件包,否则编译的qt库将不支持network,相关库的编译(上文(一&…...
重学SpringBoot3-Spring Retry实践
更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞??收藏评论 重学SpringBoot3-Spring Retry实践 1. 简介2. 环境准备3. 使用方式 3.1 注解方式 基础使用自定义重试策略失败恢复机制重试和失败恢复效果注意事项 3.2 编程式使用3.3 监听重试过程 监…...
极域电子教室破解(JiyuTrainer)
JiyuTrainer下载 byebye极域电脑安装包也可以使用 如果只玩单机游戏最简单的办法就是拔网线 另一种办法安装360卫士通过360卫安全卫士上网设置来进行禁用JiyuTrainer网络跟拔网线一样...
Oracle数据库传统审计怎么用
Oracle数据库传统审计怎么用 审计功能开启与关闭By Session还是By AccessWhenever Successful数据库语句审计数据库对象审计查看审计策略和记录Oracle数据库审计功能分为传统审计(Traditional Auditing)和统一审计(Unified Auditing)。统一审计是从Oracle 12c版本开始引入的…...
windows 搭建flutter环境,开发windows程序
环境安装配置: 下载flutter sdk https://docs.flutter.dev/get-started/install/windows 下载到本地后,随便找个地方解压,然后配置下系统环境变量 编译windows程序本地需要安装vs2019或更新的开发环境 主要就这2步安装后就可以了࿰…...
基于SpringBoot的健身房管理系统【源码+文档+部署讲解】
系统介绍 基于SpringBootVue实现的健身房管理系统采用前后端分离架构方式,系统设计了管理员、会员、员工三种角色,系统实现了用户登录与注册、个人中心、会员管理、员工管理、会员卡管理、会员卡类型管理、教练信息管理、解聘管理、健身项目管理、指导项…...