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

核心代码编程-社交网络相同爱好好友查询-200分

题目描述在一个社交网络中用户之间通过关注关系形成有向图。每个用户有两个属性用户ID整数字符串兴趣标列表字符串数组现在需要实现一个函数查询在指定用户k跳内k度关系内其他用户的兴趣和给定用户兴趣相符的用户ID列表不含自己注意 兴趣相符是指两个用户的兴趣列表有交集。实现函数queryFriends(nodes, relations, myld, maxHop)输入参数1. nodes - 用户节点数据类型整数二维数组向量·每行表示一个用户包含[id兴趣1兴趣2,...]示例[0.music,reading表示用户0有2个兴趣music和reading·所有用户ID是0到n-1的连续整数对应的字符串2. relations - 关注关系类型整数二维数组向量每行表示一个关注关系关注者ID被关注者ID]示例[0,1表示用户0关注了用户13. myld - 起始用户ID示例04. maxHop - 最大跳数k示例 2返回值·内容所有满足条件的用户ID及共同的兴趣列表如[0, music, reading],[1, reading]]·格式1不同用户之间按以下规则排序按与起始用户的最短距离从小到大排序距离相同的用户按ID对应整数值进行从小到大排序格式2对于具体某用户与起始用户的共同兴趣列表按以下规则排序按照ascii码序从小到大排序·如果没有满足条件的用户返回空数组约束条件1用户数n:1≤n s 10^4可认为用户的id字符串对应整数范围符合该条件2关注关系数m:0≤ms2x10^4若关系任一端包含不存在的点应该自动忽略不影响原始查询诉求3最大跳数k: 1≤k≤100大于最大跳数按照上限100对待4. 每个用户最多10个兴趣标签可认为所有用户的兴趣个数符合该条件5给定查询条件中的起始用户ID一定存在示例1输入[[O, music,sports],[1, music, reading][2, music], [3play,music,sports]1,[[O,1], [1, 2], [2, 3], [0,3]],0,2输出[[1,music],[3,music,sports],[2,music]]说明从ID0出发兴趣相同(3跳内可以匹配到用户1、2、3同时用户1、3跳数少因此用户1、3在用户2之前。,又因为1相比于3整数序靠前因此用户1在用户3。用户3中匹配到了多项爱好根据字母序排列music在sports之前。示例2输入[[O, music], [1, music],[2, music], [3, music],[4, music]]1,[[0, 1], [1,2], [2, 3], [3, 4]],0,1输出[[1,music]]说明所有用户都满足兴趣条件但是跳数限制在1跳内因此仅用户1满足条件示例3输入[[0, music]],0,0,2输出[ ]说明不存在满足条件的结果返回空数组实现思路数据预处理解析用户节点数据构建用户ID到兴趣集合的映射。解析关注关系构建有向图的邻接表忽略无效节点。广度优先搜索(BFS)从起始用户myId开始计算在maxHop跳内所有可达用户的最短距离跳数。记录每个用户的距离并确保不超过最大跳数限制上限100。兴趣匹配对BFS得到的用户排除起始用户检查其兴趣与起始用户兴趣的交集。若有交集计算共同兴趣列表并按ASCII码序排序。结果排序与输出用户按最短距离升序排序距离相同则按ID整数值升序排序。输出格式为二维列表[[用户ID, 共同兴趣1, 共同兴趣2, ...], ...]。以下为各语言实现Pythonfrom collections import deque def queryFriends(nodes, relations, myId, maxHop): # 预处理用户兴趣 interests {} for node in nodes: user_id node[0] interests[user_id] set(node[1:]) # 构建有向图忽略无效关系 graph {} valid_users set(interests.keys()) for rel in relations: follower, followee rel if follower in valid_users and followee in valid_users: if follower not in graph: graph[follower] [] graph[follower].append(followee) # BFS计算最短距离 dist {} queue deque() dist[myId] 0 queue.append(myId) max_k min(maxHop, 100) # 跳数上限处理 while queue: current queue.popleft() current_dist dist[current] if current_dist max_k: continue if current in graph: for neighbor in graph[current]: if neighbor not in dist: dist[neighbor] current_dist 1 queue.append(neighbor) # 收集并过滤结果 result [] start_interests interests[myId] for user, d in dist.items(): if user myId: # 排除起始用户 continue common interests[user] start_interests if common: sorted_common sorted(common) # ASCII码序排序 result.append([user] sorted_common) # 用户排序先距离升序再ID整数值升序 result.sort(keylambda x: (dist[x[0]], int(x[0]))) return resultJavaimport java.util.*; public class Solution { public ListListString queryFriends(ListListString nodes, ListListString relations, String myId, int maxHop) { // 预处理用户兴趣 MapString, SetString interests new HashMap(); for (ListString node : nodes) { String userId node.get(0); SetString set new HashSet(node.subList(1, node.size())); interests.put(userId, set); } // 构建有向图忽略无效关系 MapString, ListString graph new HashMap(); SetString validUsers new HashSet(interests.keySet()); for (ListString rel : relations) { String follower rel.get(0); String followee rel.get(1); if (validUsers.contains(follower) validUsers.contains(followee)) { graph.computeIfAbsent(follower, k - new ArrayList()).add(followee); } } // BFS计算最短距离 MapString, Integer dist new HashMap(); QueueString queue new LinkedList(); dist.put(myId, 0); queue.offer(myId); int maxK Math.min(maxHop, 100); // 跳数上限处理 while (!queue.isEmpty()) { String current queue.poll(); int currentDist dist.get(current); if (currentDist maxK) continue; ListString neighbors graph.get(current); if (neighbors ! null) { for (String neighbor : neighbors) { if (!dist.containsKey(neighbor)) { dist.put(neighbor, currentDist 1); queue.offer(neighbor); } } } } // 收集并过滤结果 ListListString result new ArrayList(); SetString startInterests interests.get(myId); for (Map.EntryString, Integer entry : dist.entrySet()) { String user entry.getKey(); if (user.equals(myId)) continue; // 排除起始用户 SetString common new HashSet(interests.get(user)); common.retainAll(startInterests); if (!common.isEmpty()) { ListString sortedCommon new ArrayList(common); Collections.sort(sortedCommon); // ASCII码序排序 ListString item new ArrayList(); item.add(user); item.addAll(sortedCommon); result.add(item); } } // 用户排序先距离升序再ID整数值升序 result.sort((a, b) - { int distA dist.get(a.get(0)); int distB dist.get(b.get(0)); if (distA ! distB) return distA - distB; return Integer.parseInt(a.get(0)) - Integer.parseInt(b.get(0)); }); return result; } }JavaScriptfunction queryFriends(nodes, relations, myId, maxHop) { // 预处理用户兴趣 const interests new Map(); for (const node of nodes) { const userId node[0]; interests.set(userId, new Set(node.slice(1))); } // 构建有向图忽略无效关系 const graph new Map(); const validUsers new Set(interests.keys()); for (const rel of relations) { const [follower, followee] rel; if (validUsers.has(follower) validUsers.has(followee)) { if (!graph.has(follower)) { graph.set(follower, []); } graph.get(follower).push(followee); } } // BFS计算最短距离 const dist new Map(); const queue []; dist.set(myId, 0); queue.push(myId); const maxK Math.min(maxHop, 100); // 跳数上限处理 while (queue.length 0) { const current queue.shift(); const currentDist dist.get(current); if (currentDist maxK) continue; const neighbors graph.get(current); if (neighbors) { for (const neighbor of neighbors) { if (!dist.has(neighbor)) { dist.set(neighbor, currentDist 1); queue.push(neighbor); } } } } // 收集并过滤结果 const result []; const startInterests interests.get(myId); for (const [user, d] of dist) { if (user myId) continue; // 排除起始用户 const userInterests interests.get(user); const common [...userInterests].filter(x startInterests.has(x)); if (common.length 0) { common.sort(); // ASCII码序排序 result.push([user, ...common]); } } // 用户排序先距离升序再ID整数值升序 result.sort((a, b) { const distA dist.get(a[0]); const distB dist.get(b[0]); if (distA ! distB) return distA - distB; return parseInt(a[0]) - parseInt(b[0]); }); return result; }C#include vector #include string #include unordered_map #include unordered_set #include queue #include algorithm using namespace std; vectorvectorstring queryFriends(vectorvectorstring nodes, vectorvectorstring relations, string myId, int maxHop) { // 预处理用户兴趣 unordered_mapstring, unordered_setstring interests; for (auto node : nodes) { string userId node[0]; interests[userId] unordered_setstring(node.begin() 1, node.end()); } // 构建有向图忽略无效关系 unordered_mapstring, vectorstring graph; unordered_setstring validUsers; for (auto kv : interests) validUsers.insert(kv.first); for (auto rel : relations) { string follower rel[0], followee rel[1]; if (validUsers.find(follower) ! validUsers.end() validUsers.find(followee) ! validUsers.end()) { graph[follower].push_back(followee); } } // BFS计算最短距离 unordered_mapstring, int dist; queuestring q; dist[myId] 0; q.push(myId); int maxK min(maxHop, 100); // 跳数上限处理 while (!q.empty()) { string current q.front(); q.pop(); int currentDist dist[current]; if (currentDist maxK) continue; auto neighbors graph.find(current); if (neighbors ! graph.end()) { for (string neighbor : neighbors-second) { if (dist.find(neighbor) dist.end()) { dist[neighbor] currentDist 1; q.push(neighbor); } } } } // 收集并过滤结果 vectorvectorstring result; auto startInterests interests[myId]; for (auto kv : dist) { string user kv.first; if (user myId) continue; // 排除起始用户 auto userInterests interests[user]; vectorstring common; for (auto interest : userInterests) { if (startInterests.find(interest) ! startInterests.end()) { common.push_back(interest); } } if (!common.empty()) { sort(common.begin(), common.end()); // ASCII码序排序 vectorstring item {user}; item.insert(item.end(), common.begin(), common.end()); result.push_back(item); } } // 用户排序先距离升序再ID整数值升序 sort(result.begin(), result.end(), [](vectorstring a, vectorstring b) { int distA dist[a[0]], distB dist[b[0]]; if (distA ! distB) return distA distB; return stoi(a[0]) stoi(b[0]); }); return result; }Gopackage main import ( sort ) func queryFriends(nodes [][]string, relations [][]string, myId string, maxHop int) [][]string { // 预处理用户兴趣 interests : make(map[string]map[string]bool) for _, node : range nodes { userId : node[0] interests[userId] make(map[string]bool) for _, interest : range node[1:] { interests[userId][interest] true } } // 构建有向图忽略无效关系 graph : make(map[string][]string) validUsers : make(map[string]bool) for user : range interests { validUsers[user] true } for _, rel : range relations { follower, followee : rel[0], rel[1] if validUsers[follower] validUsers[followee] { graph[follower] append(graph[follower], followee) } } // BFS计算最短距离 dist : make(map[string]int) queue : []string{myId} dist[myId] 0 maxK : maxHop if maxK 100 { maxK 100 } for len(queue) 0 { current : queue[0] queue queue[1:] currentDist : dist[current] if currentDist maxK { continue } for _, neighbor : range graph[current] { if _, exists : dist[neighbor]; !exists { dist[neighbor] currentDist 1 queue append(queue, neighbor) } } } // 收集并过滤结果 result : [][]string{} startInterests : interests[myId] for user, d : range dist { if user myId { // 排除起始用户 continue } common : []string{} for interest : range interests[user] { if startInterests[interest] { common append(common, interest) } } if len(common) 0 { sort.Strings(common) // ASCII码序排序 item : append([]string{user}, common...) result append(result, item) } } // 用户排序先距离升序再ID整数值升序 sort.Slice(result, func(i, j int) bool { distI : dist[result[i][0]] distJ : dist[result[j][0]] if distI ! distJ { return distI distJ } return toInt(result[i][0]) toInt(result[j][0]) }) return result } func toInt(s string) int { res : 0 for _, c : range s { res res*10 int(c-0) } return res }C#include stdio.h #include stdlib.h #include string.h #define MAX_USERS 10000 #define MAX_INTERESTS 10 typedef struct { char** items; int size; } StringList; typedef struct { StringList* data; int size; } ResultList; int compareStrings(const void* a, const void* b) { return strcmp(*(const char**)a, *(const char**)b); } int toInt(const char* s) { int res 0; while (*s) { res res * 10 (*s - 0); s; } return res; } ResultList queryFriends(char*** nodes, int nodesSize, int* nodesColSize, char*** relations, int relationsSize, char* myId, int maxHop) { // 预处理用户兴趣 char*** interests (char***)malloc(MAX_USERS * sizeof(char**)); int* interestCount (int*)calloc(MAX_USERS, sizeof(int)); for (int i 0; i nodesSize; i) { int userId atoi(nodes[i][0]); interestCount[userId] nodesColSize[i] - 1; interests[userId] (char**)malloc(interestCount[userId] * sizeof(char*)); for (int j 0; j interestCount[userId]; j) { interests[userId][j] nodes[i][j1]; } } // 构建有向图忽略无效关系 int** graph (int**)malloc(MAX_USERS * sizeof(int*)); int* graphSize (int*)calloc(MAX_USERS, sizeof(int)); int* validUsers (int*)calloc(MAX_USERS, sizeof(int)); for (int i 0; i nodesSize; i) { int userId atoi(nodes[i][0]); validUsers[userId] 1; } for (int i 0; i relationsSize; i) { int follower atoi(relations[i][0]); int followee atoi(relations[i][1]); if (validUsers[follower] validUsers[followee]) { graph[follower] (int*)realloc(graph[follower], (graphSize[follower] 1) * sizeof(int)); graph[follower][graphSize[follower]] followee; } } // BFS计算最短距离 int* dist (int*)malloc(MAX_USERS * sizeof(int)); for (int i 0; i MAX_USERS; i) dist[i] -1; int* queue (int*)malloc(MAX_USERS * sizeof(int)); int front 0, rear 0; int startId atoi(myId); dist[startId] 0; queue[rear] startId; int maxK maxHop 100 ? 100 : maxHop; while (front rear) { int current queue[front]; int currentDist dist[current]; if (currentDist maxK) continue; for (int i 0; i graphSize[current]; i) { int neighbor graph[current][i]; if (dist[neighbor] -1) { dist[neighbor] currentDist 1; queue[rear] neighbor; } } } // 收集并过滤结果 ResultList result; result.size 0; result.data (StringList*)malloc(MAX_USERS * sizeof(StringList)); for (int i 0; i MAX_USERS; i) { if (dist[i] -1 || i startId) continue; // 排除起始用户 StringList common; common.size 0; common.items (char**)malloc(MAX_INTERESTS * sizeof(char*)); for (int j 0; j interestCount[i]; j) { for (int k 0; k interestCount[startId]; k) { if (strcmp(interests[i][j], interests[startId][k]) 0) { common.items[common.size] interests[i][j]; break; } } } if (common.size 0) { qsort(common.items, common.size, sizeof(char*), compareStrings); // ASCII码序排序 result.data[result.size].size common.size 1; result.data[result.size].items (char**)malloc((common.size 1) * sizeof(char*)); char userIdStr[10]; sprintf(userIdStr, %d, i); result.data[result.size].items[0] strdup(userIdStr); for (int j 0; j common.size; j) { result.data[result.size].items[j1] strdup(common.items[j]); } result.size; } free(common.items); } // 用户排序先距离升序再ID整数值升序 for (int i 0; i result.size; i) { for (int j i 1; j result.size; j) { int idI toInt(result.data[i].items[0]); int idJ toInt(result.data[j].items[0]); int distI dist[idI], distJ dist[idJ]; if (distI ! distJ) { if (distI distJ) { StringList temp result.data[i]; result.data[i] result.data[j]; result.data[j] temp; } } else if (idI idJ) { StringList temp result.data[i]; result.data[i] result.data[j]; result.data[j] temp; } } } // 清理临时内存 for (int i 0; i MAX_USERS; i) { if (interests[i]) free(interests[i]); if (graph[i]) free(graph[i]); } free(interests); free(graph); free(graphSize); free(validUsers); free(dist); free(queue); return result; }

相关文章:

核心代码编程-社交网络相同爱好好友查询-200分

题目描述:在一个社交网络中,用户之间通过"关注"关系形成有向图。每个用户有两个属性 ﹣用户ID(整数字符串) ﹣兴趣标列表(字符串数组) 现在需要实现一个函数,查询…...

从0到4倍:一次产品冷启动的完整复盘

近期终于有了大块的时间,打算把自己做开发者关系的一些经历都梳理出来。背景:我们做了一个类似 Windows 注册表的配置管理模块,并在上面增加了配置叠加和分层权限管控。它的核心价值是这样的:之前之后系统集成团队想改某个应用的行…...

RMSNorm:均方根归一化总结

RMSNorm:均方根归一化总结 1. RMSNorm 是什么? RMSNorm 的全称是 Root Mean Square Normalization,中文可以叫:均方根归一化它是 Transformer 大模型中常用的一种归一化方法,例如 LLaMA、Qwen、DeepSeek、Gemma 等模型…...

年度名场面!黄仁勋逛胡同被投喂豆汁,眉头紧锁。网友:弥补了没有喝过 XX 的遗憾

5 月 15 日,「黄仁勋 南锣鼓巷」话题突然在多平台引爆热议。谁能想到,手握 5 万亿美刀市值的科技大佬,私下里竟是胡同干饭人。昨天在大会堂还是西装革履,今天老黄换上他的经典皮肤套装,带几名随行人员低调逛南锣鼓巷和…...

小学生如何高效通过GESP七八级

‌GESP 7-8级是通往信息学竞赛复赛的关键跳板‌,对小学生而言,需结合科学规划、系统学习与真题实战。以下是高效通关路径: 一、明确目标:GESP 7-8级的核心价值 1、‌GESP C 7级 ≥80分‌ 或 ‌8级 ≥60分‌ → 可免CSP-J初赛&…...

集成三相桥驱动的MCU:AiP8F7201电机控制方案解析

1. 项目概述:为什么我们需要“集成三相桥式驱动的微控制器”?在电机控制领域,尤其是消费电子、家电、工业自动化这些我们每天都会接触到的场景里,工程师们一直在和一堆“麻烦”作斗争。想象一下,你要设计一个驱动无刷直…...

GESP学习,如何判断孩子是否适合跳级

判断孩子是否适合跳级,核心是综合评估其学术能力、心理成熟度、社交适应力及政策合规性‌。以下是基于教育规律与官方政策的系统性判断标准: 一、学术能力:是否真正“学有余力” 1、‌成绩特别优异‌: 在当前年级中,各…...

6541616

56465651...

探索GitHub导航菜单:平台功能、解决方案、资源及GlycemicGPT项目全揭秘

导航菜单包含登录、外观设置等选项,还有平台、解决方案、资源、开源、企业版等板块。平台有AI代码创作(如GitHub Copilot、GitHub Spark等)、开发者工作流(如Actions、Codespaces等)、应用程序安全(如GitHu…...

基于RK3568J核心板的隔离网闸设计:硬件选型、系统架构与工程实践

1. 项目概述:当嵌入式核心板遇上网络安全“守门员”最近几年,“科技与狠活”这个词火遍全网,让大家对各种产品的成分和安全性都多了一份审视。其实,除了我们吃进嘴里的东西,另一个看不见摸不着却至关重要的领域——网络…...

Swift集成飞书开放平台:feishu-swift SDK架构解析与实战指南

1. 项目概述与核心价值最近在折腾一个需要深度集成飞书开放平台的项目,目标是构建一个能与飞书服务端API高效、稳定交互的iOS原生应用。在技术选型阶段,我几乎翻遍了GitHub和各大技术社区,最终锁定了ricsy/feishu-swift这个开源库。简单来说&…...

前台测试想转后台优化?这4个条件缺一不可,否则别折腾

很多做前台测试的兄弟都问过同一个问题:我能不能转后台?今天这篇文章,一次性把后台工程师的准入清单说清楚。一、基础条件:5条缺一不可年龄20-50岁太小的缺经验,太大的学新东西慢,这个区间刚刚好。有网优基…...

深入解析浮点数内存存储与IEEE 754标准:从0.1+0.2≠0.3说起

1. 从一次“诡异”的计算错误说起前几天,一个刚入行的同事跑来找我,一脸困惑地给我看了一段Python代码。他写了个简单的循环累加,想计算0.1加10次,理论上应该等于1.0。但打印出来的结果却是0.9999999999999999。他反复检查了代码&…...

Swift集成飞书生态:使用feishu-swift SDK实现高效开发

1. 项目概述:一个连接飞书与Swift生态的桥梁最近在折腾一个内部工具,需要把iOS App里的某些数据自动同步到飞书文档里,方便团队协作查看。一开始想用飞书官方API直接写,但发现Swift这边原生的HTTP请求和JSON处理起来有点啰嗦&…...

AI短剧拉片应用软件2026推荐,助力高效内容分析

AI短剧拉片应用软件2026推荐,助力高效内容分析在当今的娱乐市场中,AI短剧凭借其紧凑的剧情、便捷的观看方式,受到了广大观众的喜爱。据艾瑞咨询《2026 年中国短剧行业发展报告》显示,2026 年 AI 短剧市场规模持续增长,…...

DGX服务器上Spark性能优化:NUMA绑定与GPU资源精细调度实践

1. 项目概述与核心价值最近在折腾一个挺有意思的项目,叫adadrag/nemoclaw-dgx-spark。乍一看这个名字,像是把几个八竿子打不着的技术名词硬凑在了一起:adadrag像是个开发者代号,nemoclaw听着像某个工具或框架,dgx让人联…...

手机短剧拉片软件2026推荐,助力高效内容分析

手机短剧拉片软件2026推荐,助力高效内容分析在当今的影视行业中,手机短剧以其短小精悍、节奏紧凑的特点受到了广大观众的喜爱。对于创作者来说,如何深入分析这些短剧,学习其中的创作技巧,成为了提升自身水平的关键。据…...

为什么92%的团队在ElevenLabs多角色对话项目中3周内失败?——基于17个真实SaaS客户日志的根因分析

更多请点击: https://intelliparadigm.com 第一章:为什么92%的团队在ElevenLabs多角色对话项目中3周内失败?——基于17个真实SaaS客户日志的根因分析 ElevenLabs 的 VoiceLab API 虽然提供了强大的多说话人语音合成能力,但其多角…...

开源AI本地化框架py-gpt:微内核插件化架构与RAG应用实战

1. 项目概述:一个本地化、可扩展的AI应用框架最近在折腾AI应用本地化部署的朋友,可能都绕不开一个核心矛盾:既想享受大语言模型(LLM)强大的对话和推理能力,又对数据隐私、网络依赖和持续付费心存顾虑。市面…...

为什么预训练再好的VLA,在新任务上普通SFT 并不好用?CapVector给出了原因和方案

Vision-Language-Action(VLA)模型现在已经很强了。 但一个很现实的问题是: 预训练再充分的 VLA,到了新任务上,普通 SFT 往往并不好用。 很多工作发现: 训练收敛慢少量 demonstration 不够泛化能力并没有…...

高效大语言模型优化全攻略:从量化、LoRA到推理引擎实战

1. 项目概述:为什么我们需要关注高效大语言模型?最近在GitHub上看到一个叫“Awesome-Efficient-LLM”的项目,点进去一看,好家伙,简直是个宝藏。这个项目本质上是一个精心整理的资源列表,专门收集那些致力于…...

Adobe-GenP 3.0深度解析:破解Adobe Creative Cloud订阅验证的技术实现

Adobe-GenP 3.0深度解析:破解Adobe Creative Cloud订阅验证的技术实现 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP Adobe Creative Cloud订阅模式为设…...

告别玄学:给STM32/CH32V的SD卡SPI驱动加上超时、重试与状态机

从零构建工业级SD卡SPI驱动:超时重试与状态机设计实战 在嵌入式系统中,SD卡作为可靠的大容量存储介质被广泛应用。然而许多开发者都经历过这样的困境:实验室测试完美的SD卡驱动,一旦部署到真实环境中就频繁出现读写失败、卡死甚至…...

AI Agent Harness Engineering 的安全攻防:你的智能体如何被欺骗、劫持与利用

AI Agent Harness Engineering 安全攻防深度解析:你的智能体如何被欺骗、劫持与利用 关键词 AI Agent安全、Harness工程、Prompt注入、工具劫持、智能体攻防、LLM安全、权限逃逸 摘要 随着AI Agent从概念验证走向大规模产业落地,作为智能体控制平面的Harness层已成为攻防…...

思源宋体TTF完全指南:7种字重免费解决中文排版难题

思源宋体TTF完全指南:7种字重免费解决中文排版难题 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为中文设计项目找不到合适的字体而烦恼吗?无论是网页设计…...

AI Agent交互设计新范式:基于Leader Key的可编程对话流实践

1. 项目概述与核心价值最近在折腾AI智能体(AI Agent)的开发,发现一个挺有意思的现象:很多开发者,包括我自己在内,在初期都会把大量精力花在模型调用、工具链集成这些“硬核”功能上,却常常忽略了…...

朋友学过都说好的家电清洗培训 行业前景与培训内容科普解读

家电清洗培训行业前景随着人们生活水平的提高,家电的普及率越来越高,对家电清洗的需求也日益增长。据相关数据显示,近年来家电清洗市场规模呈现逐年上升的趋势。在城市中,越来越多的家庭开始重视家电的清洁与保养,以延…...

企业出海聘用海外员工该怎么挑选靠谱名义雇主服务商?

很多企业出海初期,都会卡在海外员工聘用这一步:没有海外实体,没法合法签合同、缴社保,想找名义雇主服务商,又怕选到不靠谱的,踩坑又不合规。结合我这几年帮出海企业对接服务商的经验,今天不玩虚…...

Minecraft服务器技能数据自动化管理:mcpskills-cli命令行工具实战指南

1. 项目概述与核心价值 最近在折腾一些Minecraft服务器的自动化管理,发现很多重复性的技能配置、权限同步工作特别耗时。手动去游戏里敲指令,或者对着配置文件一条条改,效率低还容易出错。就在这个当口,我发现了 alibiinformatio…...

BallonsTranslator:3分钟搞定漫画翻译的终极AI辅助工具

BallonsTranslator:3分钟搞定漫画翻译的终极AI辅助工具 【免费下载链接】BallonsTranslator 深度学习辅助漫画翻译工具, 支持一键机翻和简单的图像/文本编辑 | Yet another computer-aided comic/manga translation tool powered by deeplearning 项目地址: https…...