Android第五次面试总结(网络篇)
一、引言:为什么需要 DNS?
在浏览器输入www.example.com
的瞬间,一场跨越全球的数字接力赛悄然启动。DNS(域名系统)如同互联网的 “电话号码簿”,将人类可读的域名转化为机器可识别的 IP 地址。本文将以工程师的视角,拆解这一过程的技术细节。
二、DNS 解析全流程:7 大关键步骤
1. 本地缓存快速响应
- 浏览器缓存:Chrome/Firefox 等会存储最近访问的域名(默认 5 分钟),可通过
chrome://net-internals/#dns
查看。 - 系统 hosts 文件:优先级最高的本地配置(如
C:\Windows\System32\drivers\etc\hosts
),常用于本地开发或屏蔽广告。 - 系统 DNS 缓存:Windows 通过
ipconfig /displaydns
查看,Linux/macOS 用dscacheutil -flushcache
清除。
2. 递归查询本地 DNS 服务器
- 运营商 DNS:通常为
202.96.128.86
等地址,客户端发送请求后,服务器全程负责解析(递归查询)。 - 对比迭代查询:根服务器仅返回下一步查询的服务器地址列表,客户端需自己继续查询(如本地 DNS→根服务器的交互)。
3. 根服务器层级解析
- 根服务器架构:全球 13 组根服务器(
a.root-servers.net
至m.root-servers.net
),通过 Anycast 技术实现分布式部署。 - 顶级域名服务器(TLD):
.com
由 Verisign 运营,.cn
由中国互联网络信息中心管理。- 根服务器返回
.com
服务器地址(如a.gtld-servers.net
)。
4. 权威服务器最终响应
6. 协议细节与安全扩展
7. 解析失败排查指南
2. DNSSEC:抵御中间人攻击
通过数字签名验证解析结果真实性,防止 DNS 劫持。权威服务器需配置 DS 记录,验证链如下:
三、核心技术深度解析
1. 递归查询 vs 迭代查询
类型 | 执行者 | 响应内容 | 适用场景 |
---|---|---|---|
递归查询 | 本地 DNS 服务器 | 最终 IP 地址或错误 | 客户端→本地服务器 |
迭代查询 | 根 / TLD / 权威服务器 | 下一步查询的服务器地址列表 | 本地服务器→根 / TLD 服务器 |
- 域名管理权限:由注册商(如阿里云 / GoDaddy)配置,存储
A记录
(IPv4)、AAAA记录
(IPv6)等。 - 查询路径示例:
本地DNS → 根服务器 → .com服务器 → example.com权威服务器
5. 多级缓存机制优化
- TTL(生存时间):权威服务器在响应中携带 TTL 字段(如
TTL=86400
表示缓存 1 天)。 - 缓存层级:客户端、本地 DNS 服务器、递归过程中缓存所有中间结果。
- 查询协议:默认 UDP 53 端口(速度快),超过 512 字节自动切换到 TCP。
- 安全技术:
- DNSSEC:通过数字签名验证结果真实性。
- DoH/DoT:加密查询流量(如 Chrome 默认启用 DoH)。
- 常见错误码:
NXDOMAIN
:域名不存在SERVFAIL
:服务器内部错误超时
:网络问题或服务器过载
- 排查工具:
- Windows:
nslookup www.baidu.com
- Linux/macOS:
dig @8.8.8.8 www.google.com
- 路径追踪:
traceroute -n www.qq.com
- Windows:
2. DNSSEC:抵御中间人攻击
通过数字签名验证解析结果真实性,防止 DNS 劫持。权威服务器需配置 DS 记录,验证链如下:
根服务器 → TLD服务器 → 权威服务器 → 域名记录
3. Anycast 技术:全球负载均衡
根服务器和 TLD 服务器通过 Anycast 技术,将相同 IP 映射到全球多个物理节点,实现就近响应。例如,访问a.root-servers.net
会自动连接到最近的节点。
四、典型案例:解析www.example.com
- 本地缓存未命中,客户端向本地 DNS 服务器发起递归查询。
- 本地 DNS 服务器向根服务器查询
.com
服务器地址。 - 根服务器返回
.com
顶级服务器 IP(如a.gtld-servers.net
)。 - 本地 DNS 服务器向
.com
服务器查询example.com
权威服务器地址。 .com
服务器返回example.com
权威服务器 IP。- 权威服务器返回
www.example.com
对应的 IP(如93.184.216.34
)。 - 本地 DNS 服务器缓存结果并返回客户端,浏览器通过 IP 访问网站。
Android 中的 DNS 实现与网络解析全攻略
一、Android 系统 DNS 配置体系
1. 系统级 DNS 设置
- 获取方式:通过 DHCP 协议从路由器获取(如
192.168.1.1
) - 存储路径:
/system/etc/dnsmasq.conf
(系统级)、/data/misc/dns/
(用户级) - 切换逻辑:当连接到不同 Wi-Fi 时,系统会自动更新 DNS 服务器地址
2. 应用层 DNS 策略
// 获取系统默认DNS服务器
List<InetAddress> dnsServers = NetworkCapabilities.getDnsServers(network);
// 设置自定义DNS(需系统权限)
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest request = new NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR).setDnsServers(InetAddress.getAllByName("1.1.1.1")).build();
cm.requestNetwork(request, new ConnectivityManager.NetworkCallback() { ... });
二、Android DNS 解析流程深度剖析
1. 系统层解析流程
2. 应用层解析方案对比
方案 | 实现方式 | 适用场景 | 优缺点分析 |
---|---|---|---|
Java 原生 | InetAddress.getAllByName() | 基础网络请求 | 简单易用,但无缓存控制 |
OkHttp | 自定义 Dns 实现 | 需要灵活控制解析行为 | 支持同步 / 异步解析,可配置缓存策略 |
WebView | Chromium 内置解析 | 混合开发场景 | 与浏览器解析逻辑一致,性能优化好 |
三、Android DNS 优化实践
1. 缓存策略优化
// OkHttp自定义DNS缓存
public class CachedDns implements Dns {private final Dns delegate;private final LruCache<String, InetAddress> cache = new LruCache<>(1024);public CachedDns(Dns delegate) {this.delegate = delegate;}@Overridepublic List<InetAddress> lookup(String hostname) throws UnknownHostException {if (cache.get(hostname) != null) {return cache.get(hostname);}List<InetAddress> addresses = delegate.lookup(hostname);cache.put(hostname, addresses);return addresses;}
}
2. 连接复用与性能提升
- TCP 长连接:通过
ConnectionPool
管理持久连接 - 预解析技术:在应用启动时预解析关键域名
- HTTP/2 推送:利用服务端推送技术减少 DNS 延迟
四、Android DNS 安全实践
1. DoH/DoT 支持
// Android 9+启用DoH
NetworkRequest request = new NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).setDnsOption(NetworkCapabilities.DNS_TLS).setDnsServers(InetAddress.getAllByName("1.1.1.1")).build();
2. 防止 DNS 劫持
- 证书固定:验证服务器证书链
- 加密传输:强制使用 HTTPS
- DNSSEC 验证:通过
DnsResolver
接口实现验证逻辑
五、常见问题诊断方案
1. 解析失败排查
# 通过adb查看系统DNS请求
adb shell
logcat -b events | grep "dns_.*query"
2. 性能分析工具
- Netstat:监控网络连接状态
- Traceroute:追踪路由路径
- Network Profiler:Android Studio 内置网络分析工具
六、最佳实践总结
- 缓存策略:实现二级缓存(应用层 + 系统层)
- 协议选择:优先使用 DoH/DoT 加密解析
- 性能监控:建立 DNS 解析耗时统计体系
- 容灾方案:配置备用 DNS 服务器(如 114.114.114.114)
- 版本适配:针对 Android 8 以下系统进行兼容性处理
通过深入理解 Android DNS 解析机制,开发者可以构建更健壮、更安全的网络连接方案。未来随着 5G 网络的普及和边缘计算的发展,DNS 解析将在移动应用中扮演更加重要的角色,需要持续关注技术演进并进行针对性优化。
感谢观看!!!
相关文章:
Android第五次面试总结(网络篇)
一、引言:为什么需要 DNS? 在浏览器输入www.example.com的瞬间,一场跨越全球的数字接力赛悄然启动。DNS(域名系统)如同互联网的 “电话号码簿”,将人类可读的域名转化为机器可识别的 IP 地址。本文将以工程…...
全网首创/纯Qt/C++实现国标GB28181服务/实时视频/云台控制/预置位/录像回放和下载/事件订阅/语音对讲
一、前言说明 用纯Qt来实现这个GB28181的想法很久了,具体可以追溯到2014年,一晃十年都过去了,总算是整体的框架和逻辑都打通了,总归还是杂七杂八的事情多,无法静下心来研究具体的协议,最开始初步了解协议后…...
详解MySQL的事务实现机制
MySQL事务实现机制 1. 锁机制2. Redo Log(重做日志)3. Undo Log(撤销日志)4. MVCC(多版本并发控制)综合事务处理流程 在MySQL中(主要以InnoDB为例),事务的实现依赖于多个…...
什么是 BA ?BA怎么样?BA和BI是什么关系?
前几天有朋友在评论区提到了BA这个角色,具体是干什么的,我大概来说一下。 什么是BA BA 英文的全称是Business Analyst,从字面上意思就是商业分析师,做过商业智能BI项目的应该比较了解。实际上以我个人的经验,BA 的角…...
Junit在测试过程中的使用方式,具体使用在项目测试中的重点说明
JUnit 是一个广泛使用的 Java 单元测试框架,主要用于编写和运行可重复的测试。以下是 JUnit 在项目测试中的使用方式和重点说明: 1. 基本使用 场景:测试一个简单的 Java 类。 示例: import org.junit.Test; import static org.junit.Assert.*;public class CalculatorTe…...
网络安全之前端学习(HTML篇)
前言:网络安全中有一个漏洞叫xss漏洞,就是利用网页引发弹窗,这就要求我们看得懂源码,所以我会持续更新前端学习,可以不精通,但是一定要会,主要掌握HTML,css,js这三项技术…...
Lineageos 22.1(Android 15)实现负一屏
一、前言 方案是参考的这位大佬的,大家可以去付费订阅支持一波。我大概理一下Android15的修改。 大佬的方案代码 二、Android15适配调整 1.bp调整,加入aidl引入,这样make之后就可以索引代码了 filegroup {name: "launcher-src"…...
Redisson分布式锁(超时释放及锁续期)
🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…...
SQL授予用户查询某个模式或者具体某个表
例如:需要给sjzt授权查询这个模式下的这个表的操作 数据库:DB_HZ_HYZHFZ 模式:hn_proxy 服务注册表:hn_proxy."serverrg" 账号:sjzt -- 登录到目标数据库 DB_HZ_HYZHFZ -- 授予权限给账号 sjzt 在模式 hn_proxy 中访问…...
Burp Suite 代理配置与网络通信
目录 1. 引言 2. Burp 代理基础配置 2.1 浏览器代理设置 2.2 Burp 监听端口配置 2.3 常见错误排查 3. 网络问题解决 3.1 端口占用检查 3.2 防火墙配置 3.3 证书信任问题 4. 虚拟机环境配置 4.1 NAT 模式与端口转发 4.2 桥接模式配置 4.3 跨设备访问测试 5. 技术概…...
PyCharm安装redis,python安装redis,PyCharm使用失败问题
报错信息 Usage: D:\wb2\wbrj_pys\venv\Scripts\python.exe -m pip install [options] [package-index-options] … D:\wb2\wbrj_pys\venv\Scripts\python.exe -m pip install [options] -r [package-index-options] … D:\wb2\wbrj_pys\venv\Scripts\python.exe -m pip instal…...
使用命令行工具控制wireshark对抓包文件进行针对性处理的总结
近日,工作中有开发对抓包文件进行针对性过滤的小程序的需求,兜兜转转踩了很多坑后还是绕回了wireshark。 作为最出名的开源软件之一,wireshark也具有使用命令行进行操作的功能,这就是我们今天会总结到的“tshark.exe”。 通常&a…...
【STM32实物】基于STM32的太阳能充电宝设计
基于STM32的太阳能充电宝设计 演示视频: 基于STM32的太阳能充电宝设计 硬件组成: 系统硬件包括主控 STM32F103C8T6、0.96 OLED 显示屏、蜂鸣器、电源自锁开关、温度传感器 DS18B20、继电器、5 V DC 升压模块 、TB4056、18650锂电池、9 V太阳能板、稳压降压 5 V三极管。 功能…...
NLP 与常见的nlp应用
自然语言处理(NLP)是一个广泛的领域,它不仅包括自然语言理解(NLU),还涉及一系列其他任务和子领域。以下是NLP领域中的主要组成部分及其相关任务: 1. 自然语言理解(NLU) …...
基于javaweb的SSM+Maven宠物领养宠物商城流浪动物管理系统与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...
Java数据类型 Arrays VS ArraysList VS LikedList 解析
在学习Java过程中,在刷题时总是搞不清楚这三种数据结构的区别,打算写篇文章记录一下 Arrays VS ArrayList ArrayList VS LinkedList 总结 Arrays VS ArrayList ArraysArrayList类型Java的基本数据类型Java集合框架中的一个类,实现了List接…...
C++进阶(一)
个人主页:PingdiGuo_guo 收录专栏:C干货专栏 前言 本篇博客是讲解函数的重载以及引用的知识点的。 文章目录 前言 1.函数重载 1.1何为函数重载 1.2函数重载的作用 1.3函数重载的实现 2.引用 2.1何为引用 2.2定义引用 2.3引用特性 2.4常引用 2…...
Elasticsearch 在航空行业:数据管理的游戏规则改变者
作者:来自 Elastic Adam La Roche 数字化客户体验不再是奢侈品,而是欧洲航空公司必不可少的需求。它推动了客户满意度,提升了运营效率,并创造了可持续的竞争优势。随着行业的不断发展,优先投资前沿数字技术和平台的航空…...
Powershell WSL部署ubuntu22.04.5子系统
前提条件WSL 安装 wsl 安装参考1wsl 安装csdn参考2wsl 百度网盘离线下载 本地目录安装ubuntu22.04.5 子系统 powershell 管理员打开执行(实现,下载安装ubuntu子系统,用户创建,远程ssh登录设置,防火墙端口开放)子系统IP 查看方法wsl...
华为网路设备学习-16 虚拟路由器冗余协议(VRRP)
VRRP是针对干线上三层网络设备(如:路由器、防火墙等)的网络虚拟化技术,提供冗余和状态监测等功能。确保在网络中的单点故障发生时,能够快速切换到备份设备,从而保证网络通信的连续性和可靠性。 VRRP通过…...
SQLark中如何进行数据筛选与排序
本文将为你介绍在 SQLark 中如何进行数据筛选与排序,掌握这些操作能够极大提升你的工作效率。 SQLark官网链接:www.sqlark.com 数据筛选 在数据库操作中,数据筛选是一项关键功能,它依据特定条件对数据进行过滤,帮助用户从海量数据…...
slq-labs日志
上次写了第五关的布尔盲注,和双查询报错注入,还有其他报错注入的方法 一.extractvalue函数 extractvalue函数 原理 extractvalue 是一个在 XML 数据中提取值的 MySQL 内置函数。它的语法为: EXTRACTVALUE(xml, xpath_expr)xml 是 XML 字符…...
Webrtc编译官方示例实现视频通话
Webrtc编译官方示例实现视频通话 前言 webrtc官网demo中给了一个供我们学习和应用webrtc的一个很好的例子:peerconnection,这期我们就来编译和运行下这个程序看看视频通话的效果以。 1、打开源码工程 继上期源码编译完成后,我们使用vs打开…...
对接SaToken @SaCheckEL 鉴权注解
对接SaToken SaCheckEL 鉴权注解 文章目录 对接SaToken SaCheckEL 鉴权注解前言一、引入插件和配置SaToken属性配置二、配置1.自定义SaTokenInterceptor并注入Bean2.WebMvcConfig配置SaTokenInterceptor,拦截所有请求路径 三、重载SaToken权限接口和方法注入SaCheck…...
【数据结构】顺序表(附源码)
数据结构之顺序表 1、线性表2、顺序表2.1 概念与结构2.2 顺序表的分类 3、动态顺序表3.1 结构3.2 初始化3.3 容量检查3.4 尾部插入数据3.5 删除尾部数据3.6 头部插入数据3.7 头部删除数据3.8 任意位置pos插入数据3.9 任意位置pos删除数据3.10 查找 4、动态顺序表实现的源码 1、…...
java使用Apache POI 操作word文档
项目背景: 当我们对一些word文档(该文档包含很多的标题比如 1.1 ,1.2 , 1.2.1.1, 1.2.2.3)当我们删除其中一项或者几项时,需要手动的对后续的进行补充。该功能主要是对标题进行自动的补充。 具…...
【Linux网络编程】网络基础
目录 1、OSI分层思想2、数据的封装3、ip地址ipv4的ip地址分类:为什么这样划分?举例 4、端口号5、tcp三次握手为什么需要三次握手?tcp连接的标识为什么 IP 地址不能单独标识一条连接? 6、tcp四次挥手为什么需要四次挥手为什么需要三…...
国内首家,百度智能云千帆AppBuilder全面兼容MCP协议
百度智能云千帆 AppBuilder 已兼容 MCP 协议!作为国内首家支持 MCP 协议的大模型应用开发平台(Claude、LangGraph、Cursor、Cline、N8N等海外平台已支持),千帆 AppBuilder 完成兼容后,用户可通过千帆 AppBuilder 轻松调…...
eclipse [jvm memory monitor] SHOW_MEMORY_MONITOR=true
eclipse虚拟机内存监控设置SHOW_MEMORY_MONITORtrue D:\eclipse-jee-oxygen-2-win32-x86_64\workspace\.metadata\.plugins\org.eclipse.core.runtime\.settings org.eclipse.ui.prefs (文件比较多,别找错了) SHOW_MEMORY_MONITORtrue 重启 -xms 1024…...
k8s中的组件
1.namespace Namespace 用于将集群资源划分为不同的逻辑组,方便管理和隔离 kubectl get namespace 查看所有逻辑组 kubectl describe namespace <namespace-name> 查看某个逻辑组信息详情 kubectl create namespace ... 创建逻辑组 kubectl delete names…...
单目3d detection算法记录
1、centernet object as points 这篇文章的核心单目3d检测主要是利用中心点直接回归出3d模型的所有属性,head共享整个backbone,其中3d属性包括:2d目标中心点、2dw和h、2d offsets、3doffsets、3d dimmession、rot还有depth。 其中对应的dep…...
vue3二次封装tooltip实现el-table中的show-overflow-tooltip效果
开发过程中遇到需要根据后端返回的数据长度来判断是否需要使用el-tooltip的情况,想到el-table里面就有这种交互效果,如果不论文字是否超出容器长度都展示tooltip的话,交互效果难免会差很多,所以二次封装了这个组件: 给…...
STM32八股【1】-----启动流程和startup文件理解
启动流程 知识点 MCU 上电复位。MSP从向量表第0个地址读取一个32位(2字节)的值并保存,该值为栈顶地址。PC计数器从第1个地址读取一个两字节的值并保存,该值为程序入口,一般是Reset_Handler。想了解FLASH地址映射可以…...
Go语言中package的使用规则《二》
在 Go 语言中,包(Package) 是代码组织和复用的核心单元。以下是其定义、引用规则及使用习惯的详细说明: 一、包的定义规则 目录与包名 一个包对应一个目录(文件夹),目录名通常与包名一致。 包名…...
初级:控制流程面试题精讲
一、引言 在Java开发中,控制流程语句是构建程序逻辑的基础。面试官通过相关问题考察候选人对if-else、switch、循环等语句的理解和运用能力,以及在复杂业务场景下合理选择控制流程语句的水平。本文将深入剖析常见的控制流程面试题,结合实际开…...
HTTP 失败重试(重发)方案
在 Qt 网络开发中,使用 QNetworkAccessManager 进行 HTTP 请求时,可能会遇到网络超时、服务器错误等情况。为了提高请求的可靠性,可以实现 HTTP 失败重试(重发) 机制。下面介绍几种常见的 失败重发方案: 单…...
TNNLS 2024 | 基于残差超密集网络的高光谱图像空间光谱融合方法
A Spatio-Spectral Fusion Method for Hyperspectral Images Using Residual Hyper-Dense Network IEEE Transactions on Neural Networks and Learning Systems 2024 这篇文章的研究背景是针对高光谱图像(HS)与全色图像(PAN)的…...
深入探究 JVM 堆的垃圾回收机制(二)— 回收
GC Roots 枚举需要遍历整个应用程序的上下文,而在进行可达性分析或者垃圾回收时,如果我们还是进行全堆扫描及收集,那么会非常耗时。JVM 将堆分为新生代及老生代,它们的回收频率及算法不一样。 1 回收算法 在进行可达性分析时&am…...
【ELK】节省存储 之 压缩存储方式调整
目录 集群版本: 7.17.6 解释几个概念: 段(Segment) 合并(Merge) 索引设置: 压缩方式(index.codec): 测试设置前提条件 对比 在创建的时候指定压缩类型(index.codec) 对比 在…...
MATLAB 控制系统设计与仿真 - 26
状态空间控制系统概述 状态空间描述 现代控制理论是建立在状态空间基础上的控制系统分析和设计理论,它用状态变量来刻画系统的内部特征,用‘一节微分方程组’来描述系统的动态特性。系统的状态空间模型描述了系统输入/输出与内部状态之间的关系&#x…...
下载与快速上手 NVM:Node.js 版本管理工具
一、准备工作:卸载旧版 Node.js 重要提示:在安装 NVM 前,请先彻底删除已安装的 Node.js,避免路径冲突: 检查安装路径 bash where node常见路径: C:\Program Files\nodejs\C:\Users\用户名\AppData\Local\n…...
SQL Server Management Studio(SSMS)安装教程
目录 一、SSMS的下载 二、SSMS 的安装 三、连接服务器 四、卸载 SSMS 一、SSMS的下载 1.进入 SQL Server Management Studio 官方下载页面:SQL Server Management Studio点击进入下载页面 2.点击链接开始下载,浏览器右上角会显示下载进度;…...
运维知识:Linux下Vim编辑器使用详解
运维知识:Linux下Vim编辑器使用详解 引言 在Linux的世界里,Vim不仅仅是一个文本编辑器,更是程序员的「瑞士军刀」。从1991年Bram Moolenaar发布第一个版本至今,Vim以其高效的模态编辑、高度可定制性和跨平台兼容性,成…...
复习HCIA
一、网络基础概念 1. OSI七层模型与TCP/IP四层模型 OSI七层模型详解: 物理层(Physical Layer): 功能:传输原始比特流(0/1),定义电气、机械特性(如电压、线缆类型&#…...
在QT中进行控件提升操作
目录 一、概述 二、功能需求 三、提升操作 1)拖入标准控件 2)自定义类 3)提升控件 一、概述 QT中提供的标准控件能够满足我们大多数情况下的功能需求,但是在一些特殊应用场合,我们可能需要对控件的功能进行扩展&am…...
Linux下JDK1.8安装配置
目录 1.下载完上传到Linux系统中 2.解压JDK压缩包 3.配置JDK环境变量 4.设置环境变量生效 5.查看环境变量是否配置成功 官网下载地址:Java Downloads | Oracle 1.下载完上传到Linux系统中 2.解压JDK压缩包 tar -zxvf jdk-8u151-linux-x64.tar.gz -C /usr/local (解压…...
JVM 知识点梳理
JDK 、JRE、JVM JDK( Java Development Kit ) Java开发工具包 JRE 开发命令工具(运行java.exe、编译javac.exe、javaw.exe) JRE( Java Runtime Environment )Java运行环境 JVM Java核心类库(l…...
求职招聘网站源码,找工作招工系统,支持H5和各种小程序
招聘找活招工平台系统源码 招聘求职找工作软件 发布信息积分充值招聘系统,里面带纤细教程 功能介绍: 招工小程序主要针对工地招工工人找工作,工地可以发布招工信息,工人可以发布找活信息,招工信息可以置顶,置顶需要积分,积分可以通过签到、分享邀请好友、充值获取,后…...
拓展 Coco AI 功能 - 智能检索 Hexo 博客
在之前的文章中,我们成功让 Coco AI 检索 Hugo 博客,这对于博客作者来说是一大福音。然而,从 Hexo 迁移到 Hugo 的成本不容小觑,毕竟大多数开发者对 Node.js 更熟悉,而 Golang 相对陌生。那么,既然 Coco AI…...
深入解析 Java Stream API:从 List 到 Map 的优雅转换!!!
🚀 深入解析 Java Stream API:从 List 到 Map 的优雅转换 🔧 大家好!👋 今天我们来聊聊 Java 8 中一个非常常见的操作:使用 Stream API 将 List 转换为 Map。🎉 具体来说,我们将深入…...