腾讯一面-软件开发实习-PC客户端开发方向
1.自我介绍就不多赘述了
2. 请介绍一下你的项目经历
- 介绍了专辑鉴赏项目,前端使用html语言编写,后端基于http协议使用C语言进行网页开发。此外,还提及项目中涉及处理多线程问题以及做过内存池管理项目。
3. 项目中HTTP协议是使用库实现的吗
- 真忘了,只能往别的地方掰扯,我说我记得HTTP底层是TCP协议,通过TCP建立连接,经过传输层、网络层找到服务器地址实现通信。
4. 实际开发过程中遇到过什么问题,如何解决的
- 将项目从Linux系统移植到云服务器时,网页无法打开。经查阅资料发现是80端口未打开,打开后网页得以正常显示。
5. 处理多线程问题需要注意什么
- 需要注意线程安全、资源竞争和死锁等问题。解决线程安全问题可使用锁保护共享资源;避免死锁要尽量避免多个锁嵌套使用、统一加锁顺序或使用超时锁;线程数太多时可使用线程池复用线程。
6. 进程申请的内存是虚拟内存还是物理内存,虚拟内存和物理内存如何映射
- 进程申请内存后拿到的是虚拟内存地址。虚拟内存是操作系统提供的假象内存空间,每个进程有独立的虚拟地址空间;物理内存是内存条上的存储单元,系统会调配物理内存给不同进程使用。
7. 在一台给定配置的电脑上,每个进程理论上可得的内存大小受哪些因素影响
- 受操作系统位数、系统总物理内存、交换空间、单个进程限制、地址空间布局以及分配方式等因素影响。
8. 32位系统中每个进程理论上可操作的内存空间最大是多少
- 32位系统中,理论上每个进程可操作的虚拟内存最大为4G。
9. 假设物理内存只有4G,有5个进程,每个进程启动时申请1G内存,操作系统会如何处理
- 操作系统会使用虚拟内存、分页机制和交换空间来解决。采用按需分配和页面置换策略,不会一次性给进程分配所有所需内存,而是先给活跃部分分配物理内存页,将不常用的内存页换到硬盘的交换空间,再把新需要的内存页从磁盘换进来。
10. 内存池前后添加强防止越界怎么理解,为什么要加
-在内存池前后添加强制边界,是指在内存池的起始和结束位置额外添加一些特殊标记(通常是设置特定的标记值)。在内存池_边界标识法中,通过在内存池的前后各添加一个标记单元,设置其tag
为 1 来表示边界。
Space pav = (Space)malloc((SIZE+2) * sizeof(WORD));// 内存池 + 2 边界
pav->tag = 1; // 左边界
pav++;
// ...
(p + 1)->tag = 1; // 右边界
原因:
-防止内存越界访问:在内存管理过程中,可能会出现程序意外地访问超出内存池范围的情况。例如,在合并相邻空闲块时,如果没有边界标记,可能会错误地访问到内存池之外的区域,导致未定义行为(如程序崩溃、数据损坏等)。通过添加边界标记,可以在程序访问到边界时进行检查,避免越界访问。
-简化合并逻辑:在释放内存时,需要判断相邻的内存块是否为空闲块,以便进行合并操作。边界标记可以作为一个明确的终止条件,简化合并逻辑,避免不必要的错误。
11. 在申请内存的函数中需要传什么参数,返回值是什么
(1)在伙伴系统中:
-参数:
FreeList* pf:指向空闲链表数组的指针,用于管理不同大小的空闲块。
int n:需要申请的内存块大小,以WORD_b
为单位。
-返回值:
如果申请成功,返回一个指向分配的内存块的指针WORD_b*
;
如果申请失败(如没有足够的空闲块),返回NULL
。
(2)在边界标识法中:
-参数:
Space* pav:指向内存池的指针,用于管理空闲内存块。
int n需要申请的内存块大小,以WORD
为单位。
-返回值:
如果申请成功,返回一个指向分配的内存块的指针WORD*
;
如果申请失败(如没有足够的空闲块),返回NULL
。
12. 释放内存时如何得知之前申请的空间大小
(1)在伙伴系统中,每个内存块都有一个 kval
字段,表示该内存块的大小为 (2^{kval}) 个 WORD_b
单元。
因此,在释放内存时,可以通过访问该内存块的 kval
字段来确定其大小。
void MyFree(FreeList* pf, WORD_b* p)
{// ...int size = 1 << p->kval; // 计算内存块的大小// ...
}
(2)在边界标识法中,每个内存块的头部都有一个size
字段,用于记录该内存块的大小。
因此,在释放内存时,可以直接访问该内存块头部的size
字段来确定其大小。
void MyFree(Space* pav, WORD* p)
{// ...int size = p->size; // 获取内存块的大小// ...
}
13. TCP请求相对于UDP有什么特点
- TCP比较可靠,是面向字节流的一对一传输协议。通过序列号、确认应答、流量控制和拥塞控制等手段保证可靠性。
14. TCP的滑动窗口机制用于什么场景,有什么作用
- 滑动窗口机制用于TCP发送端和接收端之间,根据网络带宽和接收方接收能力动态调整窗口大小,主要解决流量控制和拥塞控制问题。
15. 假设客户端一次性发10个序列包,在部分包未收到应答的情况下还能继续发送吗
- 不能,需要每个数据包都被接收方确认到达,发送窗口才会滑动,释放出空间才能发送新的数据包。
16. 在浏览器上输入域名到收到后台服务器返回的包,大概流程是怎样的
- 流程包括:浏览器解析网址;进行DNS解析,查询本地缓存,若没有则向DNS服务器请求,获取目标网址的IP地址;建立TCP连接;发送HTTP请求,请求包含请求方法、请求头;服务器处理请求,如访问数据库或读取文件;服务器发送HTTP响应,通常是HTML页面、CSS、图片等;浏览器解析HTML,构建文档对象模型树,进行CSS、JavaScript解析和页面渲染;加载页面资源,可能触发新的HTTP请求,并缓存已加载资源;关闭TCP连接,通过四次挥手完成。
17. 在局域网内部,服务器如何找到发送请求的设备
- 设备连接局域网会通过动态主机配置协议或静态IP配置获得唯一的局域网内IP地址。服务器通过ARP地址解析协议,发送ARP请求询问拥有该IP地址的设备,获取设备的Mac地址。若设备和服务器在同一子网,交换机根据目标IP地址或Mac地址将数据包发送到相应设备;若在不同子网,路由器通过IP地址转发数据包。
18. 找最长递增子序列(手撕+思路)
class Solution {
public:int lengthOfLIS(vector<int>& nums) {int n = (int)nums.size();if (n == 0) {return 0;}vector<int> dp(n, 0);for (int i = 0; i < n; ++i) {dp[i] = 1;for (int j = 0; j < i; ++j) {if (nums[j] < nums[i]) {dp[i] = max(dp[i], dp[j] + 1);}}}return *max_element(dp.begin(), dp.end());}
};
-加上输入输出后死活运行不出来,最后给面试官说了解题思路
- 采用动态规划方法,定义一个Vector类型的DP数组,DP数组的第i个元素表示数组中第i个元素的最长递增子序列的长度。对于原数组中的每个元素,从它前面找所有比它小的元素,若满足条件则在相应DP元素基础上延长长度,最终DP数组中的最大值就是最长递增子序列的长度。
- 时间复杂度是O(n^2),空间复杂度是O(n)。
相关文章:
腾讯一面-软件开发实习-PC客户端开发方向
1.自我介绍就不多赘述了 2. 请介绍一下你的项目经历 - 介绍了专辑鉴赏项目,前端使用html语言编写,后端基于http协议使用C语言进行网页开发。此外,还提及项目中涉及处理多线程问题以及做过内存池管理项目。 3. 项目中HTTP协议是使用库实现的…...
Cad c# 射线法判断点在多边形内外
1、向量叉乘法 2、射线法原理 射线法是判断点与多边形位置关系的经典算法,核心思想是: 从目标点发出一条水平向右的射线(数学上可视为 y p_y, x \geq p_x 的射线),统计该射线与多边形边的交点数量: - 偶…...
【第16届蓝桥杯软件赛】CB组第一次省赛
个人主页:Guiat 归属专栏:算法竞赛 文章目录 A. 移动距离(5分填空题)B. 客流量上限(5分填空题)C. 可分解的正整数D. 产值调整E. 画展布置F. 水质检测G. 生产车间H. 装修报价 正文 总共10道题。 A. 移动距离…...
DePIN驱动的分布式AI资源网络
GAEA通过通证经济模型激励全球用户共享闲置带宽、算力、存储资源,构建覆盖150多个国家/地区的分布式AI基础设施网络。相比传统云服务,GAEA具有显著优势: 成本降低70%:通过利用边缘设备资源,避免了集中式数据中心所需…...
CC注入Tomcat Upgrade/Executor/WebSocket内存马
学习一下Tomcat中和组件内存马不一样的马。除了学习注入原理外,其payload还在一些缩短payload的场景有应用,比如shiro CC注入Tomcat Upgrade/Executor/WebSocket内存马 漏洞所用环境及测试全部代码https://github.com/godownio/TomcatMemshell 漏洞路…...
算法工程师面试题与参考答案资料(2025年版)
一、核心技术能力 1. 编程能力与工具 问题 1(选择题): 下列哪种Python数据类型是通过哈希表实现的? A. 列表 (list)...
烂土豆Juicypotato提权原理和利用
烂土豆Juicypotato提权原理和利用 0x00 Potato(烂土豆)提权的原理: 所谓的烂土豆提权就是俗称的MS16-075 可以将Windows工作站上的特权从最低级别提升到“ NT AUTHORITY \ SYSTEM” – Windows计算机上可用的最高特权级别。 一、简单的原…...
基于LangChain4J的AI Services实践:用声明式接口重构LLM应用开发
基于LangChain4J的AI Services实践:用声明式接口重构LLM应用开发 前言:当Java开发遇上LLM编程困境 在LLM应用开发领域,Java开发者常面临两大痛点:一是需要手动编排Prompt工程、记忆管理和结果解析等底层组件,二是复杂…...
重构便携钢琴专业边界丨特伦斯便携钢琴V30Pro定义新一代便携电钢琴
在便携电钢琴领域,特伦斯推出的V30Pro折叠钢琴以"技术革新场景适配"的双重升级引发关注。这款产品不仅延续了品牌标志性的折叠结构,更通过声学系统重构与智能交互优化,重新定义了便携乐器的专业边界。 ▶ 核心特点:技术…...
【uniapp-兼容性处理】安卓uView组件中u-input后置插槽不展示
【日期】2025-04-21 【问题】 在小程序上u-input后置插槽展示,真机运行安卓机上不展示 【原因】: 原代码:(插槽写法惯性使用#,此处在APP上不兼容该写法) <u-input v-model"currentScore"…...
每天学一个 Linux 命令(30):cut
可访问网站查看,视觉品味拉满: http://www.616vip.cn/28/index.html cut 命令用于从文件或输入流中提取文本的特定部分(如列、字符或字节位置)。它常用于处理结构化数据(如 CSV、TSV)或按固定格式分割的文本。以下是详细说明和示例: 命令格式 cut [选项] [文件...]…...
部署本地Dify
本文我们来演示一下Dify的部署安装。 一、安装docker环境 Dify只是一个dashboard,所以这里的话咱们一般不用使用物理部署了,直接使用docker启动一个即可,所以一定要先确保服务器上有docker环境和docker-compose环境。 docker的安装可参考&…...
大数据组件学习之--Kafka 安装搭建
一、前置环境 在搭建kafka之前,请确认自己的hadoop、zookeeper是否搭建完成且可正常运行 二、下载并上传安装包(链接为百度网盘) kafka安装包 tar -zxvf /opt/software/kafka_2.12-2.4.1.tgz -C /opt/module/ 进入解压后的目录更改文件名…...
RK3588芯片NPU的使用:PPOCRv4例子在安卓系统部署
本文的目标 将PPOCRv4 C语言例子适配安卓端,提供选择图片后进行OCR识别功能。PPOCRv4 C语言例子请参考之前的博文《RK3588芯片NPU的使用:Windows11 Docker中运行PPOCRv4例子》。 开发环境说明 主机系统:Windows 11目标设备:搭载RK3588芯片的安卓开发板核心工具:Android …...
算法 | 鲸鱼优化算法(WOA)与强化学习的结合研究
===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 鲸鱼优化算法与强化学习 一、结合机制与关键方向1、 参数动态调整2、…...
Spring AI 框架-快速搭建以及会话日志(笔记)
概述: Spring AI是Spring生态中应用于人工智能领域的应用框架,它的目标是将Spring 生态系统的设计原则(如可移植性、模块化设计)应用于AI领域,Spring AI更新迭代非常快,对Spring生态非常友好,可以大大简化…...
一段式端到端自动驾驶:VAD:Vectorized Scene Representation for Efficient Autonomous Driving
论文地址:https://github.com/hustvl/VAD 代码地址:https://arxiv.org/pdf/2303.12077 1. 摘要 自动驾驶需要对周围环境进行全面理解,以实现可靠的轨迹规划。以往的方法依赖于密集的栅格化场景表示(如:占据图、语义…...
CMake execute_process用法详解
execute_process 是 CMake 中的一个命令,用于在 CMake 配置阶段(即运行 cmake 命令时)执行外部进程。它与 add_custom_command 或 add_custom_target 不同,后者是在构建阶段(如 make 或 ninja)执行命令。ex…...
使用Postman调测“获取IAM用户Token”接口实际操作
概述 Postman是网页调试与辅助接口调用的工具,具有界面简洁清晰、操作方便快捷的特性,可以处理用户发送的HTTP请求,例如:GET,PUT、POST,DELETE等,支持用户修改HTTP请求中的参数并返回响应数据。…...
大模型面经 | 春招、秋招算法面试常考八股文附答案(三)
大家好,我是皮先生!! 今天给大家分享一些关于大模型面试常见的面试题,希望对大家的面试有所帮助。 往期回顾: 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题一) 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题二) 大模型面经 | 春招、秋招算法…...
高效Java面试题(附答案)
Java全家桶 Java基础 1. Java为什么被称为平台无关性语言? 2. 解释下什么是面向对象?面向对象和面向过程的区别 3. 面向对象的三大特性?分别解释下? 4. Java 中的参数传递时传值呢?还是传引用? 5. JD…...
Unreal如何使用后处理材质实现一个黑屏渐变效果
文章目录 前言相机后期处理材质创建材质相机设置动态修改FadeAlpha参数使用示例最后前言 UE5 开发VR ,如何通过PostProcess轻松实现黑屏渐变效果 最简单的办法,其实是使用一个半球形模型,遮挡住相机,然后控制这个半球形遮罩的颜色透明度,至少Unity中默认的Tunneling是这么…...
【自然语言处理与大模型】模型压缩技术之剪枝
一、什么是模型剪枝? 模型剪枝(Model Pruning)是一种神经网络模型压缩技术,其核心思想是通过删除或稀疏化模型中冗余的部分(如不重要的参数或神经元连接),在尽量保持模型性能的前提下࿰…...
OOA-CNN-LSTM-Attention、CNN-LSTM-Attention、OOA-CNN-LSTM、CNN-LSTM四模型多变量时序预测一键对比
OOA-CNN-LSTM-Attention、CNN-LSTM-Attention、OOA-CNN-LSTM、CNN-LSTM四模型多变量时序预测一键对比 目录 OOA-CNN-LSTM-Attention、CNN-LSTM-Attention、OOA-CNN-LSTM、CNN-LSTM四模型多变量时序预测一键对比预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于OOA-CN…...
Android Studio 国内镜像使用与 SDK 下载速度优化指南
本文适用于刚装好 Android Studio、SDK 下载缓慢、更新困难,以及 Gradle 构建缓慢的开发者。我们会讲: 如何替换国内镜像源(包括 SDK 和 Gradle) 如何解决 emulator 镜像下载失败的问题 一些终极提速技巧(比如代理配…...
PyCharm 在 Linux 上的完整安装与使用指南
PyCharm 在 Linux 上的完整安装与使用指南—目录 一、PyCharm 简介二、下载与安装1. 下载 PyCharm2. 安装前的依赖准备3. 安装步骤方法 1:通过 Snap 安装(推荐)方法 2:手动安装(从官网下载 .tar.gz 文件)方…...
强化学习(Reinforcement Learning, RL)与深度强化学习(Deep Reinforcement Learning, DRL)
1. 基本概念 强化学习(RL) 定义:通过试错与环境交互,学习策略以最大化累积奖励的机器学习范式。核心思想:智能体在环境中执行动作,接收奖励信号并更新策略,最…...
初识Redis · C++客户端set和zset
目录 前言: set sadd sismember smembers spop scard sinter sinterstore zset zadd zrange zcard zrem zrank zscore 前言: 前文我们已经介绍了string list hash在Redis-plus-plus的使用,本文我们开始介绍set和zset在redis-plus-pl…...
平板电脑做欧盟网络安全法案(EU)2022/30
平板电脑做欧盟网络安全法案(EU)2022/30 平板电脑做EN18031,平板电脑做无障碍法规EU2019/882 欧盟委员会于2022年通过补充授权法案 (EU) 2022/30,明确要求无线电设备需满足网络安全、隐私保护及反欺诈要求。 新规时间轴…...
GeoJSON 格式详解与使用指南
一、引言 GeoJSON 是一种对各种地理数据结构进行编码的格式,它基于 JavaScript 对象表示法(JSON),被广泛应用于地理信息系统(GIS)、地图应用开发以及地理数据的存储和交换。本文将详细介绍 GeoJSON 的格式…...
JavaScript与TypeScript
TypeScript 和 JavaScript 都是用于构建 Web 应用的编程语言,但它们有着不同的设计目标和特性。 一、JavaScript 1. 定义与特点 动态脚本语言:由 Brendan Eich 在 1995 年创建,最初用于浏览器端的交互逻辑。弱类型/动态类型:变量…...
ArcGIS、ArcMap查看.shp文件时属性表中文乱码
Shapefile(.shp): 根本错误原因: Shapefile 的属性数据 .dbf 是老旧格式,默认不含编码信息 解决方法: 在shapefile文件夹目录上,创建一个同名的.cpg文件,内容"oem" 使用ArcGIS再右键打开属性表,…...
C++学习:六个月从基础到就业——内存管理:自定义内存管理(上篇)
C学习:六个月从基础到就业——内存管理:自定义内存管理(上篇) 本文是我C学习之旅系列的第二十一篇技术文章,也是第二阶段"C进阶特性"的第六篇,主要介绍C中的自定义内存管理技术(上篇&…...
大模型基础
1、提示词 典型构成: - **角色**:给 AI 定义一个最匹配任务的角色,比如:「你是一位软件工程师」「你是一位小学数学老师」 - **指示**:对任务进行描述 - **上下文**:给出与任务相关的其它背景信息&#x…...
TDengine 存储引擎设计
简介 TDengine 的核心竞争力在于其卓越的写入和查询性能。相较于传统的通用型数据库,TDengine 在诞生之初便专注于深入挖掘时序数据场景的独特性。它充分利用了时序数据的时间有序性、连续性和高并发特点,自主研发了一套专为时序数据定制的写入及存储算…...
C++回溯算法详解
文章目录 引言第一题1.1 题目解析1.2 解题思路回溯解法队列解法 1.3 解题代码回溯解法队列解法 引言 回溯算法是一种通过深度优先搜索系统性地遍历问题解空间的算法。它的核心思想是"试错":逐步构建候选解,当发现当前选择无法得到有效解时&am…...
前端Javascript模块化 CommonJS与ES Module区别
一、模块化规范的演进历程 IIFE(立即执行函数)阶段 早期通过立即执行函数实现模块化,利用函数作用域隔离变量,解决全局命名冲突问题。例如通过(function(){})()包裹代码,形成独立作用域。 CommonJS(Node.js)阶段 CommonJS规范以同步加载为核心,通过require和module.exp…...
问题 | RAIM + LSTM 你怎么看???
github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 RAIM LSTM import numpy as np import tensorflow as tf from tensorflow.keras.layers import LSTM, Dense# RAIM-LSTM 融合模型 class RAIM_LSTM(tf.keras.Model):d…...
进程与线程:03 用户级线程
多进程与操作系统基础 上一个内容我们讲了多进程图像,强调多进程图像是操作系统最核心的图像。我们还通过Windows任务管理器,实际观察了操作系统里的进程。 进程是操作系统的核心内容,管理好多个进程,就能管理好操作系统和CPU。…...
四种阻抗匹配的方式
一、串联端接方式 即靠近输出端的位置串联一个电阻。 要达到匹配效果,串联电阻和驱动端输出阻抗的总和应等于传输线的特征Z0 二、并联端接方式 并联端接又被称为终端匹配。 要达到阻抗匹配的要求,端接电阻应该和传输线的特征阻抗Z0相等。 三、AC并联端…...
WebRTC通信技术EasyRTC音视频实时通话安全巡检搭建低延迟、高可靠的智能巡检新体系
一、方案背景 在现代安防和工业领域,安全巡检是确保设施正常运行和保障人员安全的关键环节。传统的巡检方式往往依赖人工,效率低下且容易出现遗漏。随着技术的发展,实时通信技术EasyRTC为安全巡检提供了更加高效和智能化的解决方案。 二、方…...
使用json_repair修复大模型的json输出错误
json_repair 有些 LLM 在返回格式正确的 JSON 数据时会有些问题,有时会漏掉括号,有时会在数据中添加一些单词。不至于这种错误每次都要丢弃,再次生成太浪费时间了,因此能修复错误时还是要尽量修复。这就是 json_repair 的主要目的…...
聊透多线程编程-线程互斥与同步-12. C# Monitor类实现线程互斥
目录 一、什么是临界区? 二、Monitor类的用途 三、Monitor的基本用法 四、Monitor的工作原理 五、使用示例1-保护共享变量 解释: 六、使用示例2-线程间信号传递 解释: 七、注意事项 八、总结 在多线程编程中,线程之间的…...
鸿蒙系统的 “成长烦恼“:生态突围与技术迭代的双重挑战
一、应用生态:从 "有没有" 到 "好不好" 的漫长爬坡 作为一款诞生于中美科技博弈背景下的国产操作系统,鸿蒙(HarmonyOS)自 2019 年发布以来,已在设备装机量上取得突破 —— 截至 2023 年底…...
ESP8266_ESP32 Smartconfig一键配网功能
目录 SmartConfig一键配网基本原理设备绑定流程 ESP8266/ESP32 SmartConfig配网AT指令配置方式Arduino程序配置方式 总结 SmartConfig一键配网 SmartConfigTM 是由 TI 开发的配网技术,用于将新的 Wi-Fi 设备连接到 Wi-Fi 网络。它使用移动应用程序将无线网凭据从智…...
图解Agent2Agent(A2A)
🧠 向所有学习者致敬! “学习不是装满一桶水,而是点燃一把火。” —— 叶芝 我的博客主页: https://lizheng.blog.csdn.net 🌐 欢迎点击加入AI人工智能社区! 🚀 让我们一起努力,共创AI未来! 🚀 嘿,朋友们!今天咱们来聊聊 Agentic 应用背后的两大神器:A2A 和 …...
Kotlin基础(①)
open 关键字:打破 Kotlin 的“默认封闭”规则 // 基类必须加 open 才能被继承 open class Animal {// 方法也要加 open 才能被子类重写open fun makeSound() {println("Some sound")} }class Dog : Animal() {override fun makeSound() {println("W…...
Android Kotlin+Compose首个应用
本教程将创建一个简单的基于 Kotlin 语言的 APP,并使用 Compose 来管理 UI。 创建一个基于 Kotlin 的Android 应用 打开 Android Studio,选择New Project来创建一个应用,然后在Phone and Tablet选项卡,选择 Empty Activity&…...
《AI大模型应知应会100篇》第30篇:大模型进行数据分析的方法与局限:从实战到边界探索
大模型进行数据分析的方法与局限:从实战到边界探索 摘要 在金融分析师用自然语言询问季度财报趋势,电商平台通过对话生成用户画像的今天,大模型正在重塑数据分析的协作模式。本文通过实战代码与行业案例,揭示大模型如何成为数据…...
基于SSM+Vue的社群交流市场服务平台【提供源码+论文1.5W字+答辩PPT+项目部署】
作者简介:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容:🌟Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…...