当前位置: 首页 > news >正文

【运营商查询】批量手机号码归属地和手机运营商高速查询分类,按省份城市,按运营商移动联通电信快速分类导出Excel表格,基于WPF的实现方案

WPF手机号码归属地批量查询与分类导出方案

应用场景

  1. ​市场营销​​:企业根据手机号码归属地进行精准营销,按城市或省份分类制定针对性推广策略
  2. ​客户管理​​:快速对客户手机号码进行归属地分类,便于后续客户关系管理
  3. ​数据分析​​:对大量手机号码进行批量查询和分类,支持导出为表格进行进一步分析
  4. ​呼叫中心​​:在外呼系统中识别客户归属地,优化呼叫策略

界面设计

<Window x:Class="PhoneQueryApp.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="手机号码归属地查询系统" Height="600" Width="800"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <!-- 操作区域 --> <StackPanel Grid.Row="0" Margin="10" Orientation="Horizontal"> <Button Content="导入号码" Click="ImportButton_Click" Width="100" Margin="5"/> <Button Content="开始查询" Click="QueryButton_Click" Width="100" Margin="5"/> <Button Content="导出Excel" Click="ExportButton_Click" Width="100" Margin="5"/> <ComboBox x:Name="cmbQueryMode" Width="120" Margin="5" SelectedIndex="0"> <ComboBoxItem Content="本地查询"/> <ComboBoxItem Content="联网查询"/> <ComboBoxItem Content="本地+联网"/> </ComboBox> </StackPanel> <!-- 数据显示区域 --> <DataGrid x:Name="dgResults" Grid.Row="1" Margin="10" AutoGenerateColumns="False" IsReadOnly="True"> <DataGrid.Columns> <DataGridTextColumn Header="手机号码" Binding="{Binding PhoneNumber}" Width="120"/> <DataGridTextColumn Header="省份" Binding="{Binding Province}" Width="100"/> <DataGridTextColumn Header="城市" Binding="{Binding City}" Width="100"/> <DataGridTextColumn Header="运营商" Binding="{Binding Operator}" Width="100"/> </DataGrid.Columns> </DataGrid> <!-- 状态区域 --> <StatusBar Grid.Row="2"> <StatusBarItem> <TextBlock x:Name="txtStatus" Text="就绪"/> </StatusBarItem> <StatusBarItem> <ProgressBar x:Name="pbProgress" Width="200" Height="20"/> </StatusBarItem> </StatusBar> </Grid> </Window>

详细代码实现

1. 数据模型

public class PhoneInfo { public string PhoneNumber { get; set; } public string Province { get; set; } public string City { get; set; } public string Operator { get; set; } }

2. 主窗口代码

using Microsoft.Office.Interop.Excel; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net.Http; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; namespace PhoneQueryApp { public partial class MainWindow : Window { private List<PhoneInfo> phoneInfos = new List<PhoneInfo>(); public MainWindow() { InitializeComponent(); } private void ImportButton_Click(object sender, RoutedEventArgs e) { var openFileDialog = new Microsoft.Win32.OpenFileDialog { Filter = "文本文件|*.txt|Excel文件|*.xlsx;*.xls|所有文件|*.*" }; if (openFileDialog.ShowDialog() == true) { try { var filePath = openFileDialog.FileName; var extension = Path.GetExtension(filePath).ToLower(); if (extension == ".txt") { var lines = File.ReadAllLines(filePath); phoneInfos = lines.Select(line => new PhoneInfo { PhoneNumber = line.Trim() }).ToList(); } else if (extension == ".xlsx" || extension == ".xls") { // 使用EPPlus或Interop.Excel读取Excel文件 // 这里简化为读取第一列 var excelApp = new Application(); var workbook = excelApp.Workbooks.Open(filePath); var worksheet = (Worksheet)workbook.Sheets[1]; var range = worksheet.UsedRange; phoneInfos = new List<PhoneInfo>(); for (int i = 1; i <= range.Rows.Count; i++) { var cellValue = ((Range)range.Cells[i, 1]).Value2?.ToString(); if (!string.IsNullOrEmpty(cellValue)) { phoneInfos.Add(new PhoneInfo { PhoneNumber = cellValue.Trim() }); } } workbook.Close(false); excelApp.Quit(); } dgResults.ItemsSource = phoneInfos; txtStatus.Text = $"已导入 {phoneInfos.Count} 个号码"; } catch (Exception ex) { MessageBox.Show($"导入失败: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error); } } } private async void QueryButton_Click(object sender, RoutedEventArgs e) { if (phoneInfos.Count == 0) { MessageBox.Show("请先导入手机号码", "提示", MessageBoxButton.OK, MessageBoxImage.Information); return; } pbProgress.Maximum = phoneInfos.Count; pbProgress.Value = 0; txtStatus.Text = "正在查询..."; var queryMode = ((ComboBoxItem)cmbQueryMode.SelectedItem).Content.ToString(); try { await Task.Run(() => { for (int i = 0; i < phoneInfos.Count; i++) { var phoneInfo = phoneInfos[i]; // 本地查询优先 if (queryMode == "本地查询" || queryMode == "本地+联网") { var localResult = QueryLocal(phoneInfo.PhoneNumber); if (localResult != null) { phoneInfo.Province = localResult.Province; phoneInfo.City = localResult.City; phoneInfo.Operator = localResult.Operator; } else if (queryMode == "本地+联网") { var onlineResult = QueryOnline(phoneInfo.PhoneNumber).Result; if (onlineResult != null) { phoneInfo.Province = onlineResult.Province; phoneInfo.City = onlineResult.City; phoneInfo.Operator = onlineResult.Operator; } } } else if (queryMode == "联网查询") { var onlineResult = QueryOnline(phoneInfo.PhoneNumber).Result; if (onlineResult != null) { phoneInfo.Province = onlineResult.Province; phoneInfo.City = onlineResult.City; phoneInfo.Operator = onlineResult.Operator; } } Dispatcher.Invoke(() => { pbProgress.Value = i + 1; txtStatus.Text = $"正在查询... ({i + 1}/{phoneInfos.Count})"; }); } }); dgResults.Items.Refresh(); txtStatus.Text = $"查询完成,共 {phoneInfos.Count} 个号码"; } catch (Exception ex) { MessageBox.Show($"查询失败: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error); txtStatus.Text = "查询失败"; } } private PhoneInfo QueryLocal(string phoneNumber) { // 这里实现本地数据库查询逻辑 // 可以使用SQLite或内置的号码段数据库 // 返回null表示本地查询失败 // 示例代码 - 实际应替换为真实的本地查询逻辑 if (phoneNumber.StartsWith("138")) { return new PhoneInfo { Province = "北京", City = "北京", Operator = "移动" }; } return null; } private async Task<PhoneInfo> QueryOnline(string phoneNumber) { // 使用第三方API查询 try { using (var client = new HttpClient()) { // 替换为实际的API密钥和URL var apiKey = "your_api_key_here"; var apiUrl = "https://eolink.o.apispace.com/teladress/teladress"; client.DefaultRequestHeaders.Add("X-APISpace-Token", apiKey); var content = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("mobile", phoneNumber) }); var response = await client.PostAsync(apiUrl, content); if (response.IsSuccessStatusCode) { var json = await response.Content.ReadAsStringAsync(); // 解析JSON响应 // 示例代码 - 实际应替换为真实的API响应解析逻辑 return new PhoneInfo { Province = "上海", City = "上海", Operator = "联通" }; } } } catch { // 忽略错误,返回null表示查询失败 } return null; } private void ExportButton_Click(object sender, RoutedEventArgs e) { if (phoneInfos.Count == 0) { MessageBox.Show("没有数据可导出", "提示", MessageBoxButton.OK, MessageBoxImage.Information); return; } var saveFileDialog = new Microsoft.Win32.SaveFileDialog { Filter = "Excel文件|*.xlsx", FileName = $"手机号码归属地_{DateTime.Now:yyyyMMddHHmmss}.xlsx" }; if (saveFileDialog.ShowDialog() == true) { try { // 使用EPPlus导出Excel using (var package = new OfficeOpenXml.ExcelPackage()) { // 创建按省份分类的工作表 var byProvince = package.Workbook.Worksheets.Add("按省份"); byProvince.Cells["A1"].Value = "省份"; byProvince.Cells["B1"].Value = "城市"; byProvince.Cells["C1"].Value = "运营商"; byProvince.Cells["D1"].Value = "手机号码"; var provinceGroups = phoneInfos .Where(p => !string.IsNullOrEmpty(p.Province)) .GroupBy(p => p.Province) .OrderBy(g => g.Key); int row = 2; foreach (var group in provinceGroups) { foreach (var item in group) { byProvince.Cells[row, 1].Value = item.Province; byProvince.Cells[row, 2].Value = item.City; byProvince.Cells[row, 3].Value = item.Operator; byProvince.Cells[row, 4].Value = item.PhoneNumber; row++; } } // 创建按运营商分类的工作表 var byOperator = package.Workbook.Worksheets.Add("按运营商"); byOperator.Cells["A1"].Value = "运营商"; byOperator.Cells["B1"].Value = "省份"; byOperator.Cells["C1"].Value = "城市"; byOperator.Cells["D1"].Value = "手机号码"; var operatorGroups = phoneInfos .Where(p => !string.IsNullOrEmpty(p.Operator)) .GroupBy(p => p.Operator) .OrderBy(g => g.Key); row = 2; foreach (var group in operatorGroups) { foreach (var item in group) { byOperator.Cells[row, 1].Value = item.Operator; byOperator.Cells[row, 2].Value = item.Province; byOperator.Cells[row, 3].Value = item.City; byOperator.Cells[row, 4].Value = item.PhoneNumber; row++; } } // 保存文件 package.SaveAs(new FileInfo(saveFileDialog.FileName)); } MessageBox.Show("导出成功", "提示", MessageBoxButton.OK, MessageBoxImage.Information); txtStatus.Text = $"已导出到 {saveFileDialog.FileName}"; } catch (Exception ex) { MessageBox.Show($"导出失败: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error); txtStatus.Text = "导出失败"; } } } } }

总结与优化

1. 性能优化

  1. ​多线程查询​​:使用Task.Runasync/await实现异步查询,避免UI冻结
  2. ​批量查询​​:对于API查询,可以实现批量查询接口,减少网络请求次数
  3. ​本地缓存​​:将查询结果缓存到本地数据库,减少重复查询

2. 功能扩展

  1. ​号码验证​​:添加手机号码格式验证功能,过滤无效号码
  2. ​历史记录​​:保存查询历史,支持重新加载
  3. ​自定义导出​​:允许用户选择导出字段和排序方式

3. 异常处理

  1. ​网络异常​​:处理API调用失败情况,提供重试机制
  2. ​数据异常​​:处理返回数据格式不正确的情况
  3. ​导出异常​​:处理文件被占用或权限不足的情况

技术要点

  1. ​WPF MVVM模式​​:建议使用MVVM模式重构代码,提高可维护性
  2. ​EPPlus库​​:使用EPPlus库导出Excel,比Interop.Excel更轻量
  3. ​API集成​​:集成第三方归属地查询API,如APISpace
  4. ​本地数据库​​:使用SQLite存储本地号码段数据,提高查询速度
  5.  咕嘎批量手机号码归属地查询系统
  6.  Excel VBA实现批量查询 APISpace手机号码归属地API WPF实现手机号码归属地查询与数据分析
  7. APISpace API调用示例、智能呼叫系统技术实现、WPF导出Excel数据、WPF导入导出Excel

相关文章:

【运营商查询】批量手机号码归属地和手机运营商高速查询分类,按省份城市,按运营商移动联通电信快速分类导出Excel表格,基于WPF的实现方案

WPF手机号码归属地批量查询与分类导出方案 应用场景 ​​市场营销​​&#xff1a;企业根据手机号码归属地进行精准营销&#xff0c;按城市或省份分类制定针对性推广策略​​客户管理​​&#xff1a;快速对客户手机号码进行归属地分类&#xff0c;便于后续客户关系管理​​数…...

中级统计师-统计学基础知识-第四章 假设检验

一、假设检验的基本原理 1. 基本思想 反证法&#xff1a;假设原假设成立&#xff0c;通过样本矛盾性进行反驳小概率原理&#xff1a;设定显著性水平 α \alpha α&#xff08;通常取 0.05&#xff09;&#xff0c;若观测结果的概率 p ≤ α p \leq \alpha p≤α&#xff0c…...

等于和绝对等于的区别

1. &#xff08;等于&#xff09; 特点&#xff1a;比较时会自动进行类型转换&#xff08;隐式转换&#xff09;&#xff0c;尝试将两边的值转为相同类型后再比较。规则&#xff1a; 如果类型相同&#xff0c;直接比较值。如果类型不同&#xff0c;按以下规则转换&#xff1a; …...

家庭关系处理个人总结

首先要说到前面的是&#xff0c;每个家庭的成员背景环境经济状况不同&#xff0c;原生家庭差异&#xff0c;导致面临具体问题是不同的。就类似软件“没有银弹”的概念&#xff0c;没有一种方法可以解决每个人问题。 举个例子&#xff0c;面对婆媳矛盾 网上父辈的人 会说 百行孝…...

【Python训练营打卡】day29 @浙大疏锦行

DAY 29 复习日 知识点回顾 1. 类的装饰器 2. 装饰器思想的进一步理解&#xff1a;外部修改、动态 3. 类方法的定义&#xff1a;内部定义和外部定义 作业&#xff1a;复习类和函数的知识点&#xff0c;写下自己过去29天的学习心得&#xff0c;如对函数和类的理解&#xff0c;…...

React 19版本refs也支持清理函数了。

文章目录 前言一、refs 支持清理函数二、案例演示1.useEffect写法2.React 19改进 的ref写法 总结 前言 React 19版本发布了ref支持清理函数了&#xff0c;这样就可以达到useEffect一样的效果了。为啥需要清理函数呢&#xff0c;这是因为节约内存。 清理事件监听&#xff08;避…...

uniapp的适配方式

文章目录 前言✅ 一、核心适配方式对比&#x1f4cf; 二、rpx 单位&#xff1a;uni-app 的核心适配机制&#x1f9f1; 三、默认设计稿适配&#xff08;750宽&#xff09;&#x1f501; 四、字体 & 屏幕密度适配&#x1f6e0; 五、特殊平台适配&#xff08;底部安全区、刘海…...

Java面试场景:从音视频到AI应用的技术探讨

面试场景&#xff1a;音视频与AI应用技术的碰撞 在某互联网大厂的面试中&#xff0c;面试官王先生与求职者明哥展开了一场关于音视频技术与AI应用的对话。 第一轮提问&#xff1a;音视频场景 面试官&#xff1a;明哥&#xff0c;你能谈谈在音视频场景中&#xff0c;Spring B…...

es聚合-词条统计

es语句 ---普通结构----"tags":{"type": "keyword","index": true},GET /knowledge_test/_search {"size": 0,"aggs": {"tag_count": {"terms": {"field": "tags",&quo…...

【沉浸式求职学习day43】【Java面试题精选3】

沉浸式求职学习 1.Java中this和super的区别2.为什么返回类型不算方法重载3.方法重写时需要注意什么问题4.深克隆和浅克隆有什么区别5.如何实现深克隆6.什么是动态代理7.静态代理和动态代理的区别8.如何实现动态代理&#xff1f;9.JDK Proxy 和 CGLib 有什么区别&#xff1f;10.…...

OpenAI推出Codex — ChatGPT内置的软件工程Agents

OpenAI继续让ChatGPT对开发者更加实用。 几天前,他们增加了连接GitHub仓库的支持,可以"Deep Research"并根据你自己的代码提问。 今天,该公司在ChatGPT中推出了Codex的研究预览版,这是迄今为止最强大的AI编码Agent。 它可以编写代码、修复错误、运行测试,并在…...

Win 11开始菜单图标变成白色怎么办?

在使用windows 11的过程中&#xff0c;有时候开始菜单的某些程序图标变成白色的文件形式&#xff0c;但是程序可以正常打开&#xff0c;这个如何解决呢&#xff1f; 这通常是由于快捷方式出了问题&#xff0c;下面跟着操作步骤来解决吧。 1、右键有问题的软件&#xff0c;打开…...

中级统计师-统计学基础知识-第三章 参数估计

统计学基础知识 第三章 参数估计 第一节 统计量与抽样分布 1.1 总体参数与统计量 总体参数&#xff1a;描述总体特征的未知量&#xff08;如均值 μ \mu μ、方差 σ 2 \sigma^2 σ2、比例 π \pi π&#xff09;。统计量&#xff1a;由样本数据计算的量&#xff08;如样本…...

学习黑客HTTP 请求头

HTTP 请求头&#xff08;Request Headers&#xff09;是 HTTP 请求中非常重要的一部分&#xff0c;它们以键值对的形式向服务器传递关于请求的附加信息、客户端的能力或上下文。 理解请求头对于 Web 开发、API 交互、网络调试和安全都至关重要。下面我将常见的 HTTP 请求头字段…...

日志参数含义

一 学习率相关 base_lr&#xff1a;基础学习率&#xff0c;初始设定的学习率 -lr&#xff1a;当前实际使用的学习率&#xff0c;通常是 base_lr 经过学习率调整策略后的值&#xff0c;比如lrbase_lr*(1start_factor) 时间统计 time&#xff1a;每次迭代总时间&#xff0c;单位…...

[Linux]安装吧!我的软件包管理器!

一、常见安装方式 在 Linux 中&#xff0c;有 3 种常见的软件安装方式&#xff1a; &#xff08;1&#xff09;yam、apt &#xff08;2&#xff09;.rpm 安装包安装 &#xff08;3&#xff09;源码安装 二、什么是软件包 在 Linux 下安装软件&#xff0c;通常的办法是下载…...

Flink 作业提交流程

Apache Flink 的 作业提交流程&#xff08;Job Submission Process&#xff09; 是指从用户编写完 Flink 应用程序&#xff0c;到最终在 Flink 集群上运行并执行任务的整个过程。它涉及多个组件之间的交互&#xff0c;包括客户端、JobManager、TaskManager 和 ResourceManager。…...

牛客网NC276110题解:小红的数组重排

牛客网NC276110题解&#xff1a;小红的数组重排 题目解析 算法思路 对数组进行排序&#xff08;非降序&#xff09;检查特殊情况&#xff1a; 如果存在三个连续相等的元素&#xff0c;则无解如果前两个元素都是0&#xff0c;则无解 若不存在特殊情况&#xff0c;则排序后的数…...

从零启动 Elasticsearch

elastic 有弹力的 ElaticSearch &#xff08;ES&#xff09;是一个基于 Lucene 的分布式全文检索引擎。可以做到近乎实时地存储、检索数据&#xff0c;并且本身具有良好的扩展性&#xff0c;可以扩展到上百台服务器&#xff0c;处理PB级别&#xff08;1 Petabyte 1024TB&…...

nginx服务器实验

1.实验要求 1&#xff09;在Nginx服务器上搭建LNMP服务&#xff0c;并且能够对外提供Discuz论坛服务。 在Web1、Web2服务器上搭建Tomcat 服务。 2&#xff09;为nginx服务配置虚拟主机&#xff0c;新增两个域名 www.kgc.com 和 www.benet.com&#xff0c;使用http://www.kgc.…...

王树森推荐系统公开课 排序02:Multi-gate Mixture-of-Experts (MMoE)

专家模型 与上一节相同&#xff0c;模型的输入是一个向量&#xff0c;包含用户特征、物品特征、统计特征、场景特征&#xff0c;把向量输入三个神经网络&#xff0c;三个神经网络都是由很多全连接层组成&#xff0c;但是并不共享参数&#xff0c;三个神经网络各输出一个向量&a…...

【OpenCV基础 1】几何变换、形态学处理、阈值分割、区域提取和脱敏处理

目录 一、图像几何变化 1、对图片进行放大、缩小、水平放大和垂直放大 2、旋转、缩放、控制画布大小 二、图像形态学处理 1、梯度运算 2、闭运算 3、礼帽运算 4、黑帽运算 三、图像阈值分割 1、二值化处理 2、反二值化处理 3、截断阈值处理 4、超阈值零处理 5、低…...

代码随想录算法训练营 Day49 图论Ⅰ 深度优先与广度优先

图论 基础 图的概念 图的概念 概念清单有向图 (a)无向图 (b)有向/无向如图 a 所示每条边有指向如图 b 所示每条边没有箭头指向权值每条边的权值每条边的权值度-有几条边连到该节点 (eg V 2 V_2 V2​ 度为 3)入度/出度出度&#xff1a;从该节点出发的边个数入度&#xff1a;…...

LG P9844 [ICPC 2021 Nanjing R] Paimon Segment Tree Solution

Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1​,a2​,⋯,an​)&#xff0c;有 m m m 次修改 ( l , r , v ) (l,r,v) (l,r,v)&#xff1a; 对每个 i ∈ [ l , r ] i\in[l,r] i∈[l,r]&#xff0c;令 a i ← a i v a_i\gets a_iv ai​←…...

PyTorch音频处理技术及应用研究:从特征提取到相似度分析

文章目录 音频处理技术及应用音频处理技术音视频摘要技术音频识别及应用 梅尔频率倒谱系数音频特征尔频率倒谱系数简介及参数提取过程音频处理快速傅里叶变换(FFT)能量谱处理离散余弦转换 练习案例&#xff1a;音频建模加载音频数据源波形变换的类型绘制波形频谱图波形Mu-Law 编…...

【IPMV】图像处理与机器视觉:Lec10 Edges and Lines

【IPMV】图像处理与机器视觉&#xff1a;Lec10 Edges and Lines 本系列为2025年同济大学自动化专业**图像处理与机器视觉**课程笔记 Lecturer: Rui Fan、Yanchao Dong Lec0 Course Description Lec3 Perspective Transformation Lec7 Image Filtering Lec8 Image Pyramid …...

Elasticsearch 初步认识

Elasticsearch 初步认识 1 索引&#xff08;index&#xff09; 索引是具有相同结构的文档集合。例如&#xff0c;可以有一个客户信息的索引&#xff0c;包括一个产品目录的索引&#xff0c;一个订单数据的索引。在系统上索引的名字全部小写&#xff0c;通过这个名字可以用来执…...

数据库DDL

数据库DDL&#xff08;数据定义语言&#xff09;全面解析 一、DDL定义 DDL&#xff08;Data Definition Language&#xff0c;数据定义语言&#xff09;是SQL语言的一个子集&#xff0c;专门用于定义和管理数据库结构。它允许数据库管理员和开发人员创建、修改和删除数据库对象…...

企业级小程序APP用户数据查询系统安全脆弱性分析及纵深防御体系构建

一、用户数据查询系统安全现状分析 1.1 业务场景风险建模 在企业小程序用户数据查询业务中&#xff0c;普遍存在以下安全风险点&#xff1a; ①输入验证缺失&#xff1a;未对姓名、身份证号等关键输入进行严格的格式校验与合法性检查 ②身份认证薄弱&#xff1a;仅依赖基础参数…...

互联网大厂Java面试:从Spring Boot到微服务架构的技术深挖

场景描述 在某互联网大厂的面试会议室里&#xff0c;严肃的面试官老王正审视着面前的程序员明哥。这场面试以业务场景为切入点&#xff0c;围绕Java技术栈展开。 第一轮&#xff1a;基础知识与Spring生态 面试官老王&#xff1a; 明哥&#xff0c;你对Spring Boot的核心功能…...

23种设计模式解释+记忆

一、创建型模式&#xff08;5种&#xff09;—— “怎么造对象&#xff1f;” 单例模式&#xff08;Singleton&#xff09; 场景&#xff1a;公司的CEO只能有一个。 核心&#xff1a;确保一个类只有一个实例&#xff0c;全局访问。 关键词&#xff1a;唯一、全局访问。 工厂方…...

逻辑与非逻辑的弥聚

非逻辑弥聚与逻辑弥聚是复杂系统中两种不同的信息整合方式。逻辑弥聚侧重于通过明确的规则、规律和结构化方法&#xff0c;将分散的信息或功能进行有序的组织和集中处理&#xff0c;强调理性和确定性。而非逻辑弥聚则更多地涉及情感、直觉、经验等非线性、非结构化的因素&#…...

Python 从列表中删除值的多种实用方法详解

# Python 从列表中删除值的多种实用方法详解 在Python编程中&#xff0c;列表&#xff08;List&#xff09;是一种常用的数据结构&#xff0c;具有动态可变的特性。当我们需要从列表中删除元素时&#xff0c;根据不同的场景&#xff08;如按值删除、按索引删除、批量删除等&…...

C++多线程数据错乱

C多线程数据错乱&#xff08;也称为线程安全问题或数据竞争&#xff09;主要是由于多个线程在没有正确同步的情况下&#xff0c;并发访问和修改共享数据导致的。其主要原因包括以下几个方面: 一、线程交替执行导致的非原子操作 线程在执行时&#xff0c;可能会在中途被挂起&a…...

StarRocks Community Monthly Newsletter (Apr)

版本动态 3.4.3 版本更新 核心功能升级 Routine Load和Stream Load新增Lambda表达式支持&#xff0c;支持复杂的列数据提取 增强JSON数据处理能力&#xff0c;支持将JSON Array/Object转为ARRAY/MAP类型 优化information_schema.task_runs视图查询&#xff0c;新增LIMIT支持…...

延时双删-争议与我的思路-001

目录 概括大概思路目的场景思路一退货时间差 思路2思路3 最后 概括 延时双删,是指在代码中删除两次缓存. 第一次自己访问,先删除.之后直接访问数据库获得数据 第二次是指 在第一步之后,在删除一次缓存的数据 大概思路 不进行延时双删的.寻找别的解决方法 目的 主要是为了…...

Tomcat简述介绍

文章目录 Web服务器Tomcat的作用Tomcat分析目录结构 Web服务器 Web服务器的作用是接收客户端的请求&#xff0c;给客户端作出响应。 知名Java Web服务器 Tomcat&#xff08;Apache&#xff09;&#xff1a;用来开发学习使用&#xff1b;免费&#xff0c;开源JBoss&#xff0…...

掌握版本控制从本地到分布式

一、什么是版本控制&#xff1f; 版本控制是一种记录文件&#xff08;尤其是源代码&#xff09;在“时间轴”上变更的系统&#xff0c;主要功能包括&#xff1a; 历史回溯&#xff1a;随时恢复到任意版本的代码或文档&#xff1b;差异比较&#xff1a;查看两个版本之间的改动…...

Linux `touch` 命令深度解析与高阶应用指南

Linux `touch` 命令深度解析与高阶应用指南 一、核心功能解析1. 基本作用2. 与类似操作对比二、选项系统详解1. 基础选项说明2. 时间格式说明三、高阶应用技巧1. 时间戳控制2. 批量文件操作3. 特殊文件处理四、企业级应用场景1. 日志系统维护2. 持续集成系统3. 安全审计跟踪五、…...

Django学习

1&#xff1a;在PyCharm终端&#xff1a; # 查看已安装的Django版本 python -m django --version # 或 pip show django # 卸载当前Django pip uninstall django# 安装指定版本&#xff08;例如Django 3.2.10&#xff09; pip install django3.2.10 2. 检查Python版本兼容性 …...

Java IO框架

I/O框架 流 流的分类&#xff1a; 按方向&#xff1a; 输入流&#xff1a;将存储设备的内容读入到内存中 输出流&#xff1a;将内存的内容写入到存储设备中 按单位&#xff1a; 字节流&#xff1a;以字节为单位&#xff0c;可以读取所有数据 字符流&#xff1a;以字符为单…...

Spring AI Alibaba集成阿里云百炼大模型

1.准备工作 开发环境&#xff1a;JDK17、SpringBoot3.x 2.引入maven依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&q…...

5月18总结

一.算法题总结 1. 解题思路&#xff1a;对于这个题&#xff0c;我最开始想到就是二分&#xff0c;但是头痛的是有三个解&#xff0c;如果我在-100到100之间二分&#xff0c;那么只能得出一个解&#xff0c;然后我就想了一下&#xff0c;这个要求精度&#xff0c;那么0.01这么小…...

动态规划(4)可视化理解:图形化思考

引言 动态规划作为一种强大的算法设计范式,其抽象性常常使初学者感到困惑。许多学习者在理解状态定义、状态转移方程和递归结构时遇到困难,这些困难往往源于动态规划问题的高度抽象性和复杂性。然而,人类的大脑天生擅长处理视觉信息,通过将抽象的动态规划概念转化为直观的…...

2025年- H31-Lc139- 242.回文链表(快慢指针)---java版--需2刷

1.题目描述 2.思路 &#xff08;1&#xff09;将链表取中位数&#xff0c;分为左右两部分。 &#xff08;2&#xff09;右半部分的元素进行反转链表&#xff0c;能达到O&#xff08;1&#xff09;的空间复杂度 &#xff08;3&#xff09;再判断左右部分的元素&#xff0c;是否…...

云原生安全:IaaS安全全解析(从基础到实践)

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念:IaaS的核心价值与安全边界 1.1 什么是IaaS? 基础设施即服务(Infrastructure as a Service)是云计算的基础层,提供虚拟机、存储、网络等基础资源。用户通过…...

【AGI】大模型微调数据集准备

【AGI】大模型微调数据集准备 &#xff08;1&#xff09;模型内置特殊字符及提示词模板&#xff08;2&#xff09;带有系统提示和Function calling微调数据集格式&#xff08;3&#xff09;带有思考过程的微调数据集结构&#xff08;4&#xff09;Qwen3混合推理模型构造微调数据…...

二分算法的介绍简单易懂

目录 1.概论 2.朴素的二分算法 3.求左端点的二分算法和求右端点的二分算法 4.总结 1.概论 要想了解什么是二分算法&#xff0c;我们就要知道什么是二分算法&#xff0c;二分算法是根据数组的规律&#xff0c;每次查找的数据原来的效率可能要O&#xff08;n&#xff09;,而我…...

Trae IDE和VSCode Trae插件初探

Trae IDE初探 输入以下提示词&#xff1a; 生成一个to do list清单web页面&#xff0c;采用vue实现&#xff0c;可以在页面上进行todolist进行增删改查。​ VSCode Trae插件初探 trae vscode插件初探 tips&#xff1a;如果还是提示找不到npm命令&#xff0c;重启vscode即可&am…...

数据结构 -- 树形查找(三)红黑树

红黑树 为什么要发明红黑树 平衡二叉树AVL&#xff1a;插入/删除很容易破坏平衡性&#xff0c;需要频繁调整树的形态。如&#xff1a;插入操作导致不平衡&#xff0c;则需要先计算平衡因子&#xff0c;找到最小不平衡子树&#xff08;时间开销大&#xff09;&#xff0c;在进行…...