Android第五次面试总结之网络篇(修)
一、域名解析到服务器的过程(DNS 解析流程)
当应用发起网络请求(如https://www.example.com
)时,操作系统需先将域名转换为服务器 IP 地址,这一过程通过 DNS(域名系统) 完成,具体步骤如下:
1. 客户端本地缓存查询(递归查询)
- 浏览器缓存:浏览器会首先检查自身缓存(如 Chrome 通过
chrome://net-internals/#dns
查看),存储近期解析过的域名 - IP 映射,有效期由 DNS 响应的TTL
(生存时间)决定。 - 系统缓存:若浏览器未命中,操作系统(Android)会查询本地 DNS 缓存(可通过
android.system.DnsCache
类访问,但需权限)。 - Hosts 文件:Android 系统会读取
/system/etc/hosts
文件(需 root 权限)或应用自定义的 hosts 文件(如通过 VPN 代理设置),优先于 DNS 服务器查询。
2. DNS 服务器迭代查询
若本地缓存未命中,客户端会向 本地 DNS 服务器(如运营商提供的 DNS,或用户手动设置的公共 DNS 如 8.8.8.8)发起查询,该过程为 迭代查询:
- 根域名服务器:本地 DNS 服务器首先查询根域名服务器(全球 13 组,负责
.com
、.cn
等顶级域名),根服务器返回对应顶级域名服务器(TLD Server)的地址。 - 顶级域名服务器:如
.com
服务器,返回域名example.com
的权威域名服务器(Authoritative Server)地址。 - 权威域名服务器:存储
example.com
的 DNS 记录(如 A 记录、AAAA 记录),返回最终的 IP 地址(如192.168.1.1
)。
3. 返回 IP 地址
本地 DNS 服务器将解析结果缓存并返回给客户端,后续请求可直接使用 IP 地址建立连接。
二、DNS 解析过程的核心机制
1. 递归查询 vs 迭代查询
- 递归查询(客户端→本地 DNS 服务器):客户端只需发送一次查询请求,本地 DNS 服务器负责全程查询并返回结果(类似 “一站式服务”)。
- 迭代查询(本地 DNS 服务器→根→TLD→权威服务器):每一步查询返回下一级服务器地址,需多次交互(类似 “分步导航”)。
2. DNS 记录类型
- A 记录:域名→IPv4 地址(最常用)。
- AAAA 记录:域名→IPv6 地址。
- CNAME 记录:别名解析(如
www.example.com
→example.com
)。 - MX 记录:邮件服务器解析。
- TXT 记录:存储文本信息(如 SPF 反垃圾邮件策略)。
三、DNS 请求使用的协议:UDP 为主,TCP 为辅
1. 默认使用 UDP(端口 53)
- 原因:
- 轻量化:DNS 查询 / 响应数据量小(通常 < 512 字节),UDP 无需建立连接,延迟更低(适合移动端弱网场景)。
- 速度优先:移动端网络环境复杂,UDP 的无连接特性避免了 TCP 三次握手的耗时。
- Android 中的实现:
- 系统通过
Dns
类(如Dns.resolve()
)发起 UDP 查询,底层调用libresolv
库。
- 系统通过
2. 何时使用 TCP?
- DNS 区域传输:主从 DNS 服务器同步数据时,因数据量大(可能超过 UDP 缓冲区),使用 TCP 保证可靠传输。
- 响应超过 512 字节:当 DNS 响应数据超过 UDP 最大载荷(512 字节),服务器会在响应中标记
TC
(Truncated)标志,客户端自动切换为 TCP 重新查询。
四、UDP 不可靠性的解决方案
虽然 UDP 不保证可靠传输,但 DNS 通过以下机制弥补缺陷:
1. 客户端超时重传
- 客户端发送 UDP 查询后,若未在超时时间(通常 2-5 秒)内收到响应,会自动重试(默认重试次数 2-3 次)。
- Android 源码中,
DnsResolver
类通过AsyncTask
实现异步查询,超时后触发重试逻辑。
2. DNS 服务器的可靠性设计
- 冗余部署:权威 DNS 服务器通常部署多副本,避免单点故障(如阿里云 DNS、Cloudflare DNS)。
- TCP 作为备用:当 UDP 查询失败(如频繁超时),客户端会尝试通过 TCP 重新请求(如 HTTPS 场景下的 DoH(DNS over HTTPS)强制使用 TCP)。
3. 移动端优化
- 预解析:在应用启动或空闲时,提前解析常用域名(如通过
android:usesCleartextTraffic
配置或DnsPrefetch
策略),减少实时查询延迟。 - HTTPS 化:使用 DoH(RFC 8484)或 DoT(DNS over TLS),通过 HTTPS/TLS 加密 DNS 流量,避免 UDP 被劫持,同时利用 TCP 的可靠性。
五、TCP 滑动窗口:流量控制与高效传输
1. 核心作用
滑动窗口是 TCP 实现 流量控制 和 拥塞控制 的关键机制,允许发送方在收到确认前批量发送数据,提升传输效率。
2. 工作原理
- 窗口大小:接收方在 ACK 报文中告知发送方自己当前的接收缓冲区剩余空间(即 “接收窗口”),发送方根据此动态调整 “发送窗口” 大小。
- 滑动过程:
- 发送方将数据分割为多个段(Segment),放入发送窗口,无需等待每个段的 ACK 即可连续发送。
- 接收方收到数据后,返回 ACK 并更新接收窗口(如
ACK 1000 + 窗口大小2000
表示 “前 1000 字节已接收,剩余可接收 2000 字节”)。 - 发送方根据 ACK 移动窗口,发送窗口右侧未确认的数据会触发超时重传。
3. 滑动窗口的三个阶段(结合 Android 网络优化)
- 慢启动(Slow Start):初始窗口较小(如 1-2 个 MSS),逐步指数级增长,避免网络拥塞(如 Android 下载大文件时的初始阶段)。
- 拥塞避免(Congestion Avoidance):窗口增长到阈值后,转为线性增长,防止网络过载(如 OkHttp 的连接池管理)。
- 快速重传与恢复(Fast Retransmit/Fast Recovery):若收到 3 个重复 ACK,判定数据段丢失,立即重传而不等待超时(提升弱网环境下的稳定性)。
4. Android 中的实际应用
- OkHttp 连接优化:通过
ConnectionSpec
配置 TCP 参数(如窗口大小、超时时间),结合滑动窗口机制减少延迟。 - NDK 开发:在 C/C++ 层通过
setsockopt()
设置 TCP 窗口选项(如TCP_NODELAY
禁用 Nagle 算法,配合滑动窗口提升实时数据传输效率)。
总结(面试应答要点)
- DNS 解析流程:从本地缓存到递归 / 迭代查询,逐层解析域名到 IP,结合 TTL 缓存提升性能。
- DNS 协议选择:默认 UDP(低延迟),必要时切换 TCP(大数据量 / 可靠性),移动端可通过预解析和 DoH 优化。
- UDP 可靠性:依赖客户端超时重传、服务器冗余及 TCP 备用通道,结合现代加密方案(DoH/DoT)增强安全性。
- TCP 滑动窗口:通过动态调整发送 / 接收窗口实现流量控制,分阶段优化传输效率,是 HTTP/2 多路复用、QUIC 协议的底层基础。
扩展追问:
一、DNS 挟持的核心原理(面试必问基础)
1. 基础概念与攻击本质
DNS 挟持是通过篡改域名解析结果,将用户请求的域名(如www.bank.com
)指向恶意 IP 地址,导致用户访问钓鱼网站或被劫持流量的攻击行为。其核心逻辑是破坏域名到 IP 的映射关系,分为以下三个阶段:
- 请求阶段:用户设备向 DNS 服务器发送域名解析请求(如
nslookup www.example.com
)。 - 篡改阶段:攻击者通过中间人攻击、路由器漏洞或恶意软件,在 DNS 查询路径中替换正确的 IP 地址为恶意地址。
- 重定向阶段:用户设备根据伪造的 IP 连接到恶意服务器,导致数据泄露或服务中断。
2. Android 特有的攻击场景
- 恶意 APP 篡改本地配置:
攻击者通过WRITE_SETTINGS
权限修改设备 DNS 服务器地址,或篡改/system/etc/hosts
文件(需 root 权限)15。// 示例:恶意APP修改DNS设置(需权限) Settings.Global.putString(context.getContentResolver(), Settings.Global.ETH0_DNS1, "192.168.1.253"); // 篡改DNS服务器
- 公共 Wi-Fi 中间人攻击:
攻击者在咖啡店等场景伪造热点,通过 DNS 欺骗将用户流量导向钓鱼页面14。 - 运营商层面劫持:
部分 ISP 违规插入广告页面(如访问不存在的域名时跳转广告),或篡改 DNS 响应2。
二、Android 系统的 DNS 解析流程(面试重点:技术实现)
1. 解析流程与关键组件
Android 设备的 DNS 解析分为系统层和应用层两个层面:
- 系统层解析:
- 设备向本地 DNS 服务器(如运营商 DNS)发送 UDP/TCP 请求。
- DNS 服务器递归查询根域名服务器,获取目标 IP 地址。
- 系统缓存解析结果(TTL 时间内复用)。
- 应用层解析:
- 应用通过
InetAddress.getByName()
或网络库(如 OkHttp)发起解析。 - 若系统 DNS 被劫持,解析结果可能指向恶意 IP34。
- 应用通过
2. Android 版本差异与限制
- Android 7.0(API 24)限制:
禁止普通应用直接修改全局 DNS 设置,需通过 VPN 或设备管理员权限配置21。 - Android 9+(API 28)支持 DoT:
可通过系统设置或代码启用加密 DNS(如DnsOverTls
),防止中间人篡改910。 - Android 10+(API 29)支持 DoH:
部分浏览器(如 Chrome)默认启用 DNS over HTTPS,加密解析过程27。
三、DNS 挟持的检测方法(面试高频:代码实现)
1. 编程层面检测
- 对比官方 IP 地址:
try { InetAddress address = InetAddress.getByName("www.google.com"); String expectedIp = "142.250.186.14"; // 谷歌官方IP(需动态更新) if (!expectedIp.equals(address.getHostAddress())) { // DNS解析异常,触发警告 showToast("DNS可能被劫持!"); } } catch (UnknownHostException e) { e.printStackTrace(); }
- 多 DNS 服务器校验:
同时请求 Google DNS(8.8.8.8)和 Cloudflare DNS(1.1.1.1),对比解析结果是否一致4。
2. 系统 API 获取 DNS 配置
- Android 10 + 获取当前 DNS 服务器:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network); List<InetAddress> dnsServers = capabilities.getDnsServers(); // 检查是否包含恶意DNS(如192.168.1.253) }
- 面试追问:为什么 Android 7.0 后禁止直接修改全局 DNS?
答:出于安全考虑,防止恶意 APP 篡改网络设置,需通过Settings
或设备管理员权限配置21。
四、Android 开发中的防护方案(高频考点:代码与系统配置)
1. 强制使用 HTTPS 并校验证书
- 网络安全策略配置:
在AndroidManifest.xml
中禁用明文流量,并固定证书:<network-security-config> <base-config cleartextTrafficPermitted="false"> <trust-anchors> <certificates src="system" /> <!-- 仅信任系统证书 --> <certificates src="@raw/bank_ca" /> <!-- 证书固定 --> </trust-anchors> </base-config> </network-security-config>
- 面试考点:证书固定(Certificate Pinning)的作用?
答:即使 DNS 被劫持,若服务器证书与本地固定证书不匹配,请求会失败,防止连接到伪造站点18。
2. 自定义 DNS 解析器(绕过系统 DNS)
- 使用 OkHttp 自定义 DNS:
OkHttpClient client = new OkHttpClient.Builder() .dns(new Dns() { @Override public List<InetAddress> lookup(String hostname) throws UnknownHostException { // 自定义DNS解析逻辑(如使用阿里云公共DNS) return InetAddress.getAllByName(hostname); } }) .build();
- 面试问题:为什么使用 HTTPDNS 能防劫持?
答:HTTPDNS 通过 HTTP 协议直接向权威服务器查询 IP,绕过运营商 DNS,避免劫持1128。
3. 启用加密 DNS 协议(DoT/DoH)
- Android 9 + 配置 DoT:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { DnsOverTls dnsOverTls = DnsOverTls.create(network, "dns.cloudflare.com"); // 应用层使用该DNS解析器 }
- DoT 与 DoH 的区别:
- DoT:基于 TLS 协议,端口 853,传输层加密,Android 9 + 原生支持9。
- DoH:基于 HTTPS 协议,端口 443,应用层加密,Android 10 + 浏览器支持27。
4. 检测本地 hosts 文件篡改
- 读取 hosts 文件并校验:
try { BufferedReader reader = new BufferedReader(new FileReader("/system/etc/hosts")); String line; while ((line = reader.readLine()) != null) { if (line.contains("恶意域名") || line.contains("可疑IP")) { // 触发安全警告 } } } catch (IOException e) { e.printStackTrace(); }
五、设备与系统层面的防护(面试需结合 Android 特性)
-
路由器与网络环境加固:
- 修改路由器默认密码,关闭远程管理权限,启用 DNS 防劫持功能(如小米路由器的 “DNS 过滤”)7。
- 优先使用家庭 Wi-Fi,避免公共网络;必要时使用 VPN 加密流量14。
-
系统级防护策略:
- Android 9 + 私有 DNS:
在设置中配置私有 DNS(如dns.google
),强制所有网络请求使用加密解析10。 - 权限控制:
拒绝应用获取CHANGE_NETWORK_STATE
等危险权限,防止篡改 DNS 设置12。
- Android 9 + 私有 DNS:
-
用户引导与教育:
- 提示用户手动设置公共 DNS(如 8.8.8.8),并定期检查网络配置24。
- 关键场景(如网银)使用 HTTPS 并验证证书有效性6。
六、面试高频追问与参考答案
-
“为什么 HTTPS 不能完全防止 DNS 挟持?”
- 答:HTTPS 仅加密数据传输,若域名解析被劫持,用户会先连接到恶意服务器,后续加密无意义。需结合证书固定和加密 DNS(DoT/DoH)212。
-
“Android 中如何实现 DNS 劫持的实时监控?”
- 答:通过
ConnectivityManager
监听网络变化,每次网络切换后触发域名解析校验(如解析baidu.com
并对比官方 IP),若连续多次解析错误则触发警报315。
- 答:通过
-
“如果用户连接的 Wi-Fi 被劫持,APP 如何保证安全?”
- 答:① 强制使用 HTTPS 并启用证书固定;② 在 APP 内集成 DoH/DoT 解析器,绕过系统 DNS;③ 检测到异常解析时提示用户切换网络或使用 VPN69。
-
“为什么有些 APP 在被 DNS 挟持后仍能正常访问?”
- 答:若 APP 直接使用 IP 地址而非域名(如硬编码服务器 IP),或使用了内置的 DNS 解析库(如 OkHttp 自定义 DNS),可绕过系统 DNS 设置,但存在维护成本高、IP 变更无法自动更新的问题1117。
总结(面试加分项)
DNS 挟持的核心是篡改域名解析结果,而 Android 开发者需从 ** 应用层加密(HTTPS / 证书固定)、系统层配置(DoT/DoH/ 私有 DNS)、用户层引导(手动设置公共 DNS)** 三方面防范。
相关文章:
Android第五次面试总结之网络篇(修)
一、域名解析到服务器的过程(DNS 解析流程) 当应用发起网络请求(如https://www.example.com)时,操作系统需先将域名转换为服务器 IP 地址,这一过程通过 DNS(域名系统) 完成…...
JavaScript 作用域全面总结
JavaScript 作用域全面总结 作用域(Scope)是JavaScript中一个核心概念,决定了变量、函数和对象的可访问性。以下是JavaScript作用域的全面总结,结合表格和箭头图进行讲解。 一、作用域类型 JavaScript 作用域类型详解 JavaScript 中有四种主要的作用…...
Redis核心与底层实现场景题深度解析
Redis核心与底层实现场景题深度解析 在互联网大厂Java求职者的面试中,经常会被问到关于Redis的核心与底层实现相关的场景题。本文通过一个故事场景来展示这些问题的实际解决方案。 第一轮提问 面试官:马架构,欢迎来到我们公司的面试现场。…...
代发考试战报:4月份 思科认证,华为认证,考试战报分享
CCNP 300-410考试通过战报,350-401 考试通过战报,CCNA 200-301 考试通过战报,HCIP数通 H12-821考试通过,H12-831考试通过,HCSP 行业金融 H19-611考试通过,HCSE 行业金融 H21-293 考试通过 报名考试一定要找…...
Linux 内核中 TCP 协议的支撑解析
在 Linux 网络协议栈中,TCP(传输控制协议)作为面向连接的可靠传输协议,其实现依赖于一系列复杂的内核机制。本文通过分析四个关键函数(cookie_v4_init_sequence、tcp_fastopen_ctx_destroy、sk_forced_mem_schedule 和 sk_stream_alloc_skb),探讨它们如何共同保障 TCP 的…...
std::string的底层实现 (详解)
目录 std::string的底层实现* 写时复制原理探究 CowString代码初步实现 短字符串优化(SSO) 最佳策略 std::string的底层实现* 我们都知道, std::string的一些基本功能和用法了,但它底层到底是如何实现的呢? 其实在std::stri…...
蓝桥杯 11. 最大距离
最大距离 原题目链接 题目描述 在数列 a1, a2, ⋯, an 中,定义两个元素 ai 和 aj 的距离为: |i - j| |ai - aj|即元素下标的距离加上元素值的差的绝对值,其中 |x| 表示 x 的绝对值。 给定一个数列,请找出元素之间最大的元素…...
【运维】使用 DataX 实现 MySQL 到 PostgreSQL 的数据同步
🚀 使用 DataX 实现 MySQL 到 PostgreSQL 的数据同步 在日常的数据开发工作中,数据同步是一项极其常见的任务。而 DataX 作为阿里开源的一款通用数据同步工具,支持多种数据源之间的互通,使用简单,扩展性强,非常适合进行结构化数据的迁移和同步。 本文将详细介绍如何通…...
Mangodb基本概念和介绍,Mango三个重要的概念:数据库,集合,文档
MongoDB基本概念和介绍 MongoDB 是一个开源的、基于分布式文件存储的NoSQL数据库,由 C 编写。 它的主要特点是: 使用**面向文档(Document-Oriented)**的存储方式,不是传统的表格行列模式。存储的数据格式是BSON&…...
什么是ICSP编程
ICSP编程介绍 ICSP 编程(In-Circuit Serial Programming),即“在线串行编程”,是一种通过 SPI 协议 直接对微控制器(如 Arduino 的 ATmega328P)进行编程的技术,无需移除芯片。它常用于以下场景…...
LeetCode 155题解 | 最小栈
最小栈 一、题目链接二、题目三、算法原理思路1:用一个变量存储最小元素思路2:双栈普通栈和最小栈 四、编写代码五、时间复杂度 一、题目链接 最小栈 二、题目 三、算法原理 栈用数组、链表实现都行,最主要的就是在能在常数时间内检索到最…...
Modal 深度解析:无服务器高性能计算平台实战指南
概览 Modal 是一个 “零配置,无需 YAML” 的云函数平台,通过将你的 Python 代码打包进容器并在 Modal 自建的云环境中执行,实现秒级启动、按秒计费、自动弹性扩缩容等能力。它构建在高性能 Rust 容器堆栈与 gVisor 沙箱之上,为大规模 AI 推理、批量数据处理、作业调度、Web…...
数字逻辑--期末大复习
写卷子前准备:二进制串、卡诺图的数序、分析与设计的步骤,直接写上省的忘了 进制转化 二进制 刚开始做题前可以把0-9次方的列出来 十进制转二进制:不断除以2得到余数,直到商为0,再将余数倒着拼起来即可。 如十六进制ÿ…...
【Redis】缓存|缓存的更新策略|内存淘汰策略|缓存预热、缓存穿透、缓存雪崩和缓存击穿
思维导图: Redis最主要的用途,三个方面: 1.存储数据(内存数据库) 2.缓存(redis最常用的场景) 3.消息队列 一、什么是缓存 我们知道对于硬件的访问速度来说,通常情况下࿱…...
kubelet 清理资源以缓解磁盘压力
kubelet 资源清理缓解磁盘压力指南 在 Kubernetes 集群中,当节点磁盘压力过大时,可通过以下几种方式利用 kubelet 清理资源,从而缓解磁盘压力。 一、镜像垃圾回收 自动回收 kubelet 内置了镜像垃圾回收机制,其行为由配置参数控…...
机器人“跨协议对话”秘籍:EtherNet IP转PROFINET网关应用实录
近期,我们工厂在进行自动化生产线升级改造时,引进了一批全新的机器人手臂设备。这批机器人采用EtherNet/IP通信协议,而生产线上原有的终端控制器则使用PROFINET协议。由于两种协议在通信标准和数据格式上存在差异,导致机器人手臂无…...
松下机器人快速入门指南(2025年更新版)
松下机器人快速入门指南(2025年更新版) 松下机器人以其高精度、稳定性和易用性在工业自动化领域广泛应用。本文将从硬件配置、参数设置、手动操作、编程基础到维护保养,全面讲解松下机器人的快速入门方法,帮助新手快速掌握核心操…...
开启健康养生,重塑生活品质
当你习惯性地用咖啡开启忙碌的一天,当熬夜加班成为生活常态,当外卖占据一日三餐,或许未曾察觉,健康正悄然亮起红灯。在快节奏的现代生活中,健康养生不再是可选项,而是关乎生活质量与生命活力的必答题&#…...
百度「心响」:通用超级智能体,重新定义AI任务执行新范式
在AI技术从“对话交互”迈向“任务执行”的转折点,百度于2025年4月正式推出移动端超级智能体应用——心响。这款以“AI任务完成引擎”为核心的创新产品,被誉为“AI指挥官”,通过自然语言交互实现复杂任务的全流程托管,覆盖知识解析…...
AXPA17388: 4x45W 车用AB类四通道桥式输出音频功率放大器
AXPA17388是采用BCD(双极型,CMOS,DMOS)工艺技术设计的四通道桥式输出AB类车用音频功率放大器,采用完全互补的P型/ N型输出结构, 具有轨到轨的输出电压摆幅,高输出电流,具有出色的低失真性能。 AXPA17388可以…...
【codeforces 2086d】背包+组合数学
【codeforces 2086d】背包组合数学 Problem - D - Codeforces 题意: 给出字符串中每个字符的出现次数 c i ( 1 ≤ i ≤ 26 ) c_i(1 \leq i \leq 26) ci(1≤i≤26)。现构造一个字符串,要求任意相同字母之间的距离必须是偶数。求满足要求的字符串的数量…...
[特殊字符]OCR,给交通领域开了“外挂”?
OCR 技术是什么 宝子们,OCR 其实就是光学字符识别(Optical Character Recognition)的英文缩写。简单来说,它能让电子设备,比如扫描仪、摄像头这些,像长了眼睛一样,“看” 懂图片或文档里的文字&…...
【语法】C++继承中遇到的问题及解决方法
目录 1.子类构造函数中初始化父类成员 2.子类显式调用父类的析构函数 第一种说法:重定义 反驳: 第二种说法:operator~ 3.因编译器版本过低而出现错误 贴主在学习C的继承时,遇到了很多问题,觉得很变态,…...
【自然语言处理与大模型】LangChain大模型应用框架入门②
本文介绍LangChain的另一个重要组件——提示词模板(Prompt Template)组件,它主要用于将用户输入和参数转换为语言模型可理解的指令。有助于引导模型生成符合预期的响应,帮助其更好地理解上下文,从而输出相关且连贯的语…...
首页数据展示
排版 现在做首页的排版,依旧是偷antd里面的东西 使用card包裹list的样式 import React from react import axios import { Card, Col, Row, List } from antd import { EditOutlined, EllipsisOutlined, SettingOutlined } from ant-design/icons; import { Avat…...
推荐系统实验指标置信度:p值核心原理与工程应用指南
目录 一、推荐系统实验中的置信度困境二、p值核心原理:从假设检验到推荐场景适配2.1 基础概念与数学定义2.2 通俗版本核心白话总结: 2.2 推荐系统指标分类与统计方法 三、推荐系统实验p值计算全流程3.1 实验设计阶段:流量分配与检验效能3.2 数…...
linux FTP服务器搭建
FTP服务器搭建 系统环境:ubuntu 搭建方式:win系统下通过ssh连接ubuntu,搭建FTP服务 一、ssh连接 ssh -p 端口 用户名IP ssh -p 22 ubuntu192.168.1.109 密码:ubuntu123456 二、安装配置FTP服务器 1、安装 sudo apt install v…...
如何搭建一个简单的文件服务器的方法
搭建一个简易的文件服务器可以让你在局域网或互联网中共享文件,方便不同设备之间的访问与管理。以下是基于常见平台(Windows、Linux)分别介绍如何搭建一个简单的文件服务器的方法,适合个人或小型办公环境使用。 一、文件服务器的准备工作 所需条件&#…...
通信原理第七版与第六版的区别附pdf
介绍 我用夸克网盘分享了「通信原理 第7版》樊昌信」, 链接:https://pan.quark.cn/s/be7c5af4cdce 《通信原理(第7版)》是在第6版的基础上,为了适应当前通信技术发展和教学需求,并吸取了数十所院校教师的反…...
【工具】PDF转HTML
【工具】PDF转HTML 可通过命令执行, 集成到项目中 pdf2htmlEX windows系统可执行版下载地址: http://soft.rubypdf.com/software/pdf2htmlex-windows-version https://github.com/coolwanglu/pdf2htmlEX .\pdf2htmlEX.exe --zoom 1.8 a.pdf .\pdf2html…...
Latex全面汇总
文章目录 简介1.基本使用中文编码的方式2.文章标题日期等3.加粗斜体等格式4.章节问题5.图片问题6.列表7.数学公式8.表格9.常用的latex网站汇总总结 简介 Latex 基本使用教程,主要还是为manim而准备的. 现在发现用typora来记录笔记更方便些,csdn用的就很少了&…...
AI日报 - 2025年04月30日
🌟 今日概览(60秒速览) ▎🤖 AGI突破 | 扎克伯格预言通用智能将超越个体,Neuralink助ALS患者思维交流 通用智能系统潜力巨大,脑机接口实现重大应用突破。 ▎💼 商业动向 | 阿里巴巴发布Qwen3,xAI推Grok 3 M…...
redis高级进阶
1.redis主从复制 redis主从复制1 2.redis哨兵模式 哔哩哔哩视频 redis哨兵模式1 redis哨兵模式2 redis哨兵模式3 3.redis分片集群 redis分片集群1 redis分片集群2 redis分片集群3...
【android bluetooth 协议分析 06】【l2cap详解 11】【l2cap连接超时处理逻辑介绍】
我们在使用蓝牙的过程中, 当上层 应用 断开所有的 profile 后, 协议栈就会帮我们下发 disconnect 命令。本节就让笨叔, 带大家一起梳理这块内容,具体在协议栈如何处理的。 梳理开始前, 先思考一下。 我们为什么要梳理…...
Spring、Spring MVC 与 Spring Boot 的关系与核心用途
1. 三者关系图解 ------------------- | Spring Boot | → 基于 Spring,简化配置与部署 -------------------▲| 依赖 ------------------- | Spring Framework | → 核心容器(IoC/AOP)与基础模块 -------------------▲| 扩展 ---…...
如何搭建spark yarn 模式的集群集群
(一)什么是SparkONYarn模式 Spark on YARN(Yet Another Resource Negotiator)是 Spark 框架在 Hadoop 集群中运行的一种部署模式,它借助 Hadoop YARN 来管理资源和调度任务。 架构组成 ResourceManager:作为…...
共探蓝海赛道增长新方法 阿里国际站智能AI全球买家分析峰会在深落幕
来源:深圳晚报 随着全球贸易环境不断变化,跨境电商已成为推动企业发展的重要动力。为帮助企业更好地应对新的市场挑战,阿里巴巴国际站深莞惠大区于4月29日举办了“万亿商机 蓝海新市场”智能AI全球买家分析峰会,现已圆满落幕&…...
今日行情明日机会——20250429
指数依然在区间震荡,等待方向,重点关注决定大盘方向的板块,如证券的走势~ 2025年4月29日涨停主要行业方向分析 一、核心主线方向 一季报增长(业绩驱动资金避险) • 涨停家数:16家。 • 代表标的ÿ…...
什么是缓存?在NGINX中如何配置缓存以提升性能?
大家好,我是锋哥。今天分享关于【什么是缓存?在NGINX中如何配置缓存以提升性能?】面试题。希望对大家有帮助; 什么是缓存?在NGINX中如何配置缓存以提升性能? 1000道 互联网大厂Java工程师 精选面试题-Java…...
价值投资笔记:企业护城河——虚假陷阱与隐性壁垒的深度解析
一、护城河的本质与误判风险 护城河是企业抵御竞争、维持超额利润的核心能力。然而,市场中充斥着大量“虚假护城河”,它们看似构成壁垒,实则脆弱易碎。晨星公司研究显示,超过60%的企业竞争优势被误判为护城河,投资者需…...
2025年04月29日Github流行趋势
项目名称:Deep-Live-Cam 项目地址url:https://github.com/hacksider/Deep-Live-Cam项目语言:Python历史star数:52291今日star数:380项目维护者:hacksider, KRSHH, vic4key, pereiraroland26, kier007项目简…...
docker排查OOM Killer
文章目录 一.检查1.内存不足 (OOM Killer)2. CPU 资源限制3. 存储空间不足4. 应用自身崩溃5. 健康检查失败针对性建议 二.内存不足问题根源解决方案(按优先级排序)1. 紧急措施:立即释放内存2. 启用 Swap 交换空间(必须做ÿ…...
leetcode继续c++10/100
不应该是10-13-3吗 ChatGLM 引用 从代码片段来看,函数 findAnagrams 的目的是在字符串 s 中找到所有与字符串 p 是字母异位词的子串的起始索引。 代码中有一些调试输出语句,这些语句可能会影响程序的正常逻辑。具体来说: cpp 复制 cout …...
Kubernetes集群使用Harbor容器镜像仓库
实验环境 一、容器镜像仓库Harbor部署 1、配置主机名 192.168.10.14: hostnamectl set-hostname harbor 2、安装Docker wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum -y install docker-…...
归并排序排序总结
1. 归并排序 1.1 基本思想 归并排序(Merge Sort)是采用分治法(Divide and Conquer)的一个非常典型的应用。它的基本思想是将一个数组分成两个子数组,分别对这两个子数组进行排序,然后将排好序的子数组合并…...
面试手撕——快速排序
思路 partition方法将整个区间分为两部分,一部分比pivot小,一部分比pivot大, i表示,小于等于pivot的下标,j表示当前遍历到哪一个元素了,如果发现当前元素j小于等于pivot,i,在i1的位…...
大模型微调之LLaMA-Factory 系列教程大纲
LLaMA-Factory 系列教程大纲 一、基础入门篇:环境搭建与核心功能解析 环境部署与框架特性 硬件要求: 单机训练:推荐 24GB 显存 GPU(如 RTX 4090),支持 7B-32B 模型 LoRA 微调。分布式训练:2 块…...
26考研 | 王道 | 计算机网络 | 第一章 计算机网络的体系结构
26考研 | 王道 | 第一章 计算机网络的体系结构 文章目录 26考研 | 王道 | 第一章 计算机网络的体系结构1.1 计算机网络概述1.计算机网络的概念2.计算机网络的组成**从组成部分看****从工作方式看****从逻辑功能看** 3.计算机网络的功能4.电路交换、报文交换、分组交换1. 电路交…...
CentosLinux系统crontab发现执行删除命令失效解决方法
权限或安全策略限制 可能场景: ### 目录权限冲突: 你的目录权限为 drwxr-xr-x(属主 mssql),但 cron 任务以 root 执行。 风险点:若目录内文件属主为 mssql 且权限为 700&…...
UniApp页面路由详解
一、路由系统概述 1.1 路由机制原理 UniApp基于Vue.js实现了一套跨平台的路由管理系统,其核心原理是通过维护页面栈来管理应用内不同页面之间的跳转关系。在小程序端,UniApp的路由系统会映射到对应平台的原生导航机制;在H5端则基于HTML5 Hi…...