[{"body":"","link":"https://eSparkL.top/","section":"","tags":null,"title":""},{"body":"🔗论文\n🔗代码\n","link":"https://eSparkL.top/research/40-novebench%E8%AE%BA%E6%96%87%E9%98%85%E8%AF%BB/","section":"research","tags":null,"title":"40 Novebench论文阅读"},{"body":"","link":"https://eSparkL.top/categories/","section":"categories","tags":null,"title":"Categories"},{"body":"","link":"https://eSparkL.top/research/","section":"research","tags":null,"title":"科研"},{"body":"","link":"https://eSparkL.top/categories/%E8%AE%BA%E6%96%87%E9%98%85%E8%AF%BB/","section":"categories","tags":null,"title":"论文阅读"},{"body":"什么是探针？ “探针”，即一个有监督模型，用来确定目标模型隐藏表示中的信息内容。\n❗️ 需要注意的是，探针只能证明目标模型的表征中“存在某种信息”，但不能证明该表征与模型最终输出结果之间存在因果关系。\n若探针本身的学习能力过强（如深层网络）则不能有效证明目标模型中编码了该信息，因为这个信息有可能是探针自己学习到的。因此研究中通常先使用线性探针。\n怎么用探针？ 步骤 冻结目标模型 提取注意力头的激活，作为探针模型的输入$X$ 用$(X, y)$训练探针模型，查看预测结果 如果预测准确，说明激活中编码了特定信息 探针方法类似监督学习，只是使用了一套特殊特征（大模型的hidden states）作为输入，训练一个普通分类器。\nSelectivity 选择性 $$选择性 = 探针在真实任务上的性能 - 探针在控制任务上的性能$$\n所谓控制任务，即将标签y随机打乱，再训练探针模型。\n如果真实任务和控制任务性能差不多（选择性接近0），表明探针高分只是它自己硬性记住了标签，不能说明目标模型编码了该信息。\n什么时候用探针？ 想弄清楚模型的某一层在做什么——BERTology 领域 想要利用模型内部信息——Activations as Features论文 BERTology 领域： 专门研究 BERT 类预训练语言模型内部学到了什么知识的研究方向，探针是该领域最经典工具。Tenney 2019（What Does BERT Look At?）就是用线性探针去挖掘 BERT 里面句法、语义信息的标志性论文\n补充：无监督探针 有监督探针需要人工标注标签（比如词性标注）；而无监督探针不需要标注，直接从隐藏向量中挖掘结构、聚类、独立成分，自动发现表征里面蕴含的结构，不需要外部标签。\n用到无监督探针的相关论文在参考资料中有提及。\n参考资料 斯坦福cs224u-2021-analysis-part4-handout.pdf](https://web.stanford.edu/class/cs224u/2022/slides/cs224u-analysis-part4-handout.pdf) ","link":"https://eSparkL.top/research/39-probe%E6%8A%80%E6%9C%AF/","section":"research","tags":["LLM","模型内部机制解释"],"title":"39 Probe技术"},{"body":"","link":"https://eSparkL.top/tags/llm/","section":"tags","tags":null,"title":"LLM"},{"body":"","link":"https://eSparkL.top/tags/","section":"tags","tags":null,"title":"Tags"},{"body":"","link":"https://eSparkL.top/categories/%E6%8A%80%E6%9C%AF%E6%96%B9%E6%B3%95/","section":"categories","tags":null,"title":"技术方法"},{"body":"","link":"https://eSparkL.top/tags/%E6%A8%A1%E5%9E%8B%E5%86%85%E9%83%A8%E6%9C%BA%E5%88%B6%E8%A7%A3%E9%87%8A/","section":"tags","tags":null,"title":"模型内部机制解释"},{"body":"不想要跟踪某个文件 使用skip-worktree，可忽略本地修改，不进 git status、不提交，使得本地修改不影响其他端\n1git update-index --skip-worktree 文件.sh 检查是否生效\n1git ls-files -v | grep 文件.sh 行首标记 含义 S skip-worktree h assume-unchanged H 正常跟踪 恢复跟踪\n1git update-index --no-skip-worktree 文件.sh ","link":"https://eSparkL.top/skill/38-git%E4%BD%BF%E7%94%A8/","section":"skill","tags":null,"title":"38 Git使用"},{"body":"","link":"https://eSparkL.top/skill/","section":"skill","tags":null,"title":"各项技能"},{"body":"🔗 论文 Activations as Features: Probing LLMs for Generalizable Essay Scoring Representations\n🔗 与gpt对话记录\n复现后的项目结构 第一步 拉取https://github.com/MRWEIm/AAF.git并配置环境 vscode ssh remote中连接了服务器，一切命令请在路径shelly@shellyB115:~/chenrui$ 下进行，不要在本地运行。\n安装环境的位置：已创建的虚拟环境 idea_novelty（python=3.9）\nconda create -n idea_novelty python=3.9 conda activate\nvscode 右下角Python解释器修改：\nCtrl + Shfit + P Python select interpreter 从列表选择，或者输入解释器的绝对路径 baukit（作者 David Bau），是 NLP / 可解释性研究圈非常常用的轻量 PyTorch 工具库，专门用来抓取模型中间激活、管理 hook、探测 LLM 内部表征\n按照AI的pip指令，已经配置好环境，配置固化在requirements-lock.txt\n配置环境上，AI还是很nb的；包冲突不再是问题\n唯一需要自己介入的是git clone网络问题，这个用代理解决\n第二步 下载开源模型 代码中是 Llama-2-7b ：需要meta验证（小红书上说要美国IP+美国信息），加上模型本身至少需要24G以上（实际更多，AI建议留150G），因此先从小参数模型验证，选择了Qwen3-0.6B（无需验证、对存储要求小）\n修改了源代码中的模型配置：\n文件 原内容 修改后 config.py default='Llama-2-7b-chat-hf' default='Qwen3-0.6B' LLM_activations.py args.model_name = 'Llama-2-7b-chat-hf' args.model_name = 'Qwen3-0.6B' LLM_activations.py model_folder = f'/{args.model_name}' model_folder = args.model_name LLM_activations.py type_list = ['all', 'wo_p', 'wo_i', 'only_e'] type_list = ['all'] ，不复现消融 第三步 后台提取激活(监控进度：nohup + setsid) 1cd ~/chenrui/AAF 2mkdir -p work 3 4nohup setsid env \\ 5 CUDA_VISIBLE_DEVICES=0 \\ 6 PYTHONUNBUFFERED=1 \\ 7 /home/shelly/.conda/envs/idea_novelty/bin/python -u \\ 8 AES/LLM_activations.py \\ 9 --model_name Qwen3-0.6B \\ 10 \u0026gt; work/qwen3_0.6b_activations.log \\ 11 2\u0026gt;\u0026amp;1 \u0026lt; /dev/null \u0026amp; 12 13echo $! | tee work/qwen3_0.6b_activations.pid 服务器未安装 tmux ，不想动全局环境，所以监控改用系统自带的 nohup + setsid\n查看进度\n1tail -f work/qwen3_0.6b_activations.log 退出tail\n1Ctrl+C 检查进程\n1pid=$(cat work/qwen3_0.6b_activations.pid) 2ps -fp \u0026#34;$pid\u0026#34; 检查已完成组合数（应为42）\n1find AES/ASAP/activations/Qwen3-0.6B \\ 2 -type f -name \u0026#39;*.pt\u0026#39; | wc -l 第四步 执行探针 1cd ~/chenrui/AAF 2 3nohup setsid env \\ 4 PYTHONUNBUFFERED=1 \\ 5 OMP_NUM_THREADS=4 \\ 6 MKL_NUM_THREADS=4 \\ 7 /home/shelly/.conda/envs/idea_novelty/bin/python -u \\ 8 work/run_qwen_eval.py \\ 9 \u0026gt; work/qwen3_0.6b_probe.log \\ 10 2\u0026gt;\u0026amp;1 \u0026lt; /dev/null \u0026amp; 11 12echo $! | tee work/qwen3_0.6b_probe.pid 结果 Qwen3-0.6B 激活提取耗时 在 NVIDIA RTX A4000 16 GB 上，对 8 个 prompt、42 个有效 prompt-trait 组合共 67,604 篇次进行激活提取：\n开始：2026-09-23 21:55:01 结束：2026-09-23 22:42:25 墙钟时间：47 分 23.6 秒 平均吞吐量：约 23.8 篇次/秒 激活文件大小（AES/ASAP/activations/Qwen3-0.6B/）：7.3G\n与论文的整体对比 总体对比：\n指标 本次复现 论文 差值 Prompt AVG 0.6273 0.622 +0.0053 Trait AVG 0.6213 0.615 +0.0063 绝大多数指标与论文非常接近，说明激活提取、归一化、cross-prompt probe 和 QWK 流程正确。\nPrompt 对比 Prompt 复现 论文 差值 P1 0.6240 0.610 +0.0140 P2 0.6165 0.619 −0.0025 P3 0.6496 0.598 +0.0516 P4 0.6666 0.662 +0.0046 P5 0.6869 0.681 +0.0059 P6 0.6199 0.621 −0.0011 P7 0.5522 0.570 −0.0178 P8 0.6031 0.610 −0.0069 主要偏差集中在 P3，其他多数结果相差不到 0.02。\nTrait 对比 Trait 复现 论文 差值 Holistic 0.6894 0.689 +0.0004 Content 0.6212 0.620 +0.0012 Organization 0.5612 0.565 −0.0038 Word Choice 0.6139 0.610 +0.0039 Sentence Fluency 0.6086 0.605 +0.0036 Conventions 0.5563 0.549 +0.0073 Prompt Adherence 0.6448 0.637 +0.0078 Language 0.6326 0.632 +0.0006 Narrativity 0.6633 0.634 +0.0293 Trait 结果高度吻合；最大差异是 Narrativity。\n差异可能来自模型仓库 revision、PyTorch/Transformers 版本、浮点计算，以及论文未公开的精确运行快照。论文还直接在测试集上选最佳 head，这会放大微小数值差异。\n","link":"https://eSparkL.top/research/37-activations-as-features%E8%AE%BA%E6%96%87%E5%A4%8D%E7%8E%B0/","section":"research","tags":null,"title":"37 Activations as Features论文复现"},{"body":"“用AI 10天发一篇CCF B” xhs刷帖有感 在xhs刷到“10天发一篇CCF B”的帖子，而自己作为研0生，正在读第4篇领域论文中。感叹AI发展过快，让研究环境也变得浮躁起来，问题在于，始终觉得自己停留在初步阶段，能做是看顶会论文、跑跑改改别人的代码，有一点想法但是不成体系。\n静下心来想，AI本质上还是工具，对于那些自己走过一篇古法流程的人，完全知道利用AI完成什么、怎么进一步优化；但是对于新手来说，不知道什么时候用、怎么用，干巴巴地等AI把所有事情处理完，自己没有学到实质性的知识，错了、偏了，要么放弃，要么一遍遍消耗token试图纠正。\n心态上，容易忽略使用AI的人本身的基础，产生“为什么别人可以这么快，我是不是落后了”的疑惑，但是有的事情AI替代不了，比如正儿八经的学习阶段，比如：\n你对这个领域了解多少？ 他们的创新点在哪里？具体到是模型的注意力部分，损失函数，还是评价指标？ 故事怎么讲？ 代码报错是什么原因？ AI当然可以总结论文、回答创新点、给出初稿结构、排查错误，但是完全依赖AI能力，和自己有约束AI的能力，两者工作起来是完全不同的感受和效率。\n因此，人知道得越清楚，才能更好地指挥AI干活。 现阶段我认为自己已经走在了正确的大方向上，只是对于论文产出的时间预期应该再次提前了，继续加油，善用、多用AI，但不滥用即可。\n","link":"https://eSparkL.top/research/36-%E5%85%B3%E4%BA%8Eai%E7%9A%84%E4%B8%80%E4%BA%9B%E6%80%9D%E8%80%83/","section":"research","tags":null,"title":"36 关于AI的一些思考"},{"body":"","link":"https://eSparkL.top/categories/%E6%83%B3%E6%B3%95%E6%9D%82%E8%B0%88/","section":"categories","tags":null,"title":"想法杂谈"},{"body":"点我看题\n给定一个整数数组 nums 和一个整数目标值 target，请你在该数组中找出 和为目标值 target 的那 两个 整数，并返回它们的数组下标。\n你可以假设每种输入只会对应一个答案，并且你不能使用两次相同的元素。\n你可以按任意顺序返回答案。\n1、暴力破解 $N^2$ 设置两个指针$i, j$ ，遍历列表\n1class Solution: 2 def twoSum(self, nums: List[int], target: int) -\u0026gt; List[int]: 3 for i in range(len(nums)): 4 for j in range(i+1, len(nums)): 5 if nums[i]+nums[j] == target: 6 return [i, j] 2、哈希查找 $N$ 关键：当前元素为x时，减少查找到 target-x 所需要的次数\n增加的开销：哈希表所需的空间\n思路概要：\n建立一个空的哈希表\n指针$i$ 遍历列表，若存在 target - List[i]，输出下标；否则将 List[i] 存入哈希表中\n注：哈希表的作用为，存储值为x的元素在原始列表中的下标\n哈希表核心在于“键”“值”，对应python中的dict类型\n1class Solution: 2 def twoSum(self, nums: List[int], target: int) -\u0026gt; List[int]: 3 hashtable = dict() 4 for i in range(len(nums)): 5 x = nums[i] 6 if target - x in hashtable: 7 return [i, hashtable[target - x]] 8 else: 9 hashtable[x] = i ","link":"https://eSparkL.top/job/35-leetcode-%E4%B8%A4%E6%95%B0%E4%B9%8B%E5%92%8C/","section":"job","tags":["哈希"],"title":"35 Leetcode 两数之和"},{"body":"","link":"https://eSparkL.top/categories/leetcode/","section":"categories","tags":null,"title":"Leetcode"},{"body":"","link":"https://eSparkL.top/tags/%E5%93%88%E5%B8%8C/","section":"tags","tags":null,"title":"哈希"},{"body":"","link":"https://eSparkL.top/job/","section":"job","tags":null,"title":"实习就业"},{"body":"点我看题\n给定一个字符串数组 strs ，将 变位词 组合在一起。 可以按任意顺序返回结果列表。\n注意：若两个字符串中每个字符出现的次数都相同，则称它们互为变位词。\n分析：本质还是查找，查找→哈希。问题是用什么来作为“键”？\n用什么来作为“键”有两种思路：\n1. 字符串中各个字母的个数组成的数组，该数组长度为26 第一种时间复杂度为$O(n·(字符串长度 + 26))$，组成：\n① 对每个字符串，统计字母个数$O(字符串长度)$\n② 生成哈希表的键$O(26)$\n③ 查找$O(1)$\n2. 先对字符串排序，用排序后的字符串作为键 第二种$O(n·字符串长度·log字符串长度)$，组成：\n① 对每个字符串排序，k*logk\n② 更新哈希表$O(1)$\n第一种方法时间复杂度更低\ncollections.defaultDict(default.factory)：创建一个default.factory类型的字典，这里用list\n\u0026quot;\u0026quot;.join(list)：用\u0026quot;\u0026quot;拼接列表元素\nsorted(str)：排序，注意！返回的是列表，如['a', 'b', 'c']，转换为字符串需要用join拼接\n","link":"https://eSparkL.top/job/34-leetcode-%E5%AD%97%E6%AF%8D%E5%BC%82%E4%BD%8D%E8%AF%8D%E5%88%86%E7%BB%84/","section":"job","tags":["排序","哈希"],"title":"34 Leetcode 字母异位词分组"},{"body":"","link":"https://eSparkL.top/tags/%E6%8E%92%E5%BA%8F/","section":"tags","tags":null,"title":"排序"},{"body":"33-Pytorch\nResource you may look frequently during the course:\nGitHub - mrdbourke/pytorch-deep-learning: Materials for the Learn PyTorch for Deep Learning: Zero to Mastery course. · GitHub google colab quick key:\nctrl + M M: code to markdown\nctrl + M Y: markdown to code\nhomework:\nread the web torch.Tensor — PyTorch 2.12 documentation for 10 minutes to get a better understanding of how to use torch.tensor\n","link":"https://eSparkL.top/skill/33-pytorch/","section":"skill","tags":null,"title":"33 Pytorch"},{"body":"","link":"https://eSparkL.top/categories/pytorch/","section":"categories","tags":null,"title":"Pytorch"},{"body":"this is a test for a new file\n科研写作评估\nidea生成\n科研图表解读/生成\n科研结论生成\n2026 Xiaoyu Xiong, Yuqi Ren, and Deyi Xiong. 2026. EvoSci: A Bio-Inspired Multi-Agent Framework for the Evolution of Scientific Discovery. In Proceedings of the 64th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers), pages 9846–9878, San Diego, California, United States. Association for Computational Linguistics. URL https://aclanthology.org/2026.acl-long.447/\n大语言模型（LLM）在科学发现中展现出巨大潜力，但现有方法在科研工作流设计和多角色协作机制方面仍面临重大挑战。为缓解这些问题，我们提出了EvoSci，一种融合生物启发式进化与知识图谱建模的多智能体科学协作框架。EvoSci通过集成导师、研究员和审稿人等基于角色的多个智能体，迭代生成、评估并优化研究思路。结合协同推理、共享记忆和进化反馈机制，EvoSci显著提升了科学探索的一致性与创造性。在真实科研主题上的实验表明，EvoSci在基于LLM的结构化同行评审和比较排序评估中明显优于现有强基线模型，取得了最高的整体同行评审得分（ICLR 4.90）和最佳排名（Top-10 = 54）。这些结果表明，EvoSci在科学思想生成和持续发现方面均具有卓越优势。 Choi, J., Park, S., Song, S., \u0026amp; Shim, H. (2026, July). Posterforest: Hierarchical multi-agent collaboration for scientific poster generation. In Proceedings of the 64th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers) (pp. 379-401). URL https://aclanthology.org/2026.acl-long.15.pdf\n科学海报生成 自动化生成科学海报需要对文档进行层次化理解，并实现内容与布局的协调规划。现有方法通常依赖于扁平化的摘要，或分别优化内容与布局，因而常导致信息丢失、逻辑连贯性弱以及视觉平衡不佳。我们提出PosterForest，一种无需训练的科学海报生成框架。该方法引入了“海报树”（Poster Tree），这是一种结构化的中间表示形式，能够捕捉文档的层级结构以及多层级的图文语义关系。基于这一表示，内容与布局代理通过分层推理和递归优化，从整体架构到局部构图逐步完善海报设计。这种联合优化显著提升了语义一致性、逻辑流畅性与视觉和谐性。实验表明，PosterForest在自动评估和人工评估中均优于先前方法，且无需额外训练或领域特定的监督。 Sinhahajari, S., Majumder, N., \u0026amp; Poria, S. (2026). On the Limits of LLM-as-Judge for Scientific Novelty Assessment. arXiv preprint arXiv:2606.12071.\n大语言模型（LLM）在生成和评估科学想法方面正被越来越多地使用，这使得新颖性评估成为一个核心问题。完整的想法评估较为困难，因为它通常需要判断方法的可行性及其实证潜力。因此，我们研究一个更清晰的上游对象：研究问题（RQ）。RQ的生成是科学创新的前提，且可以与真实论文中所探讨的问题进行比较。我们提出了RQ-Bench，这是一个基于近期arXiv论文构建的基准。对于每篇论文，我们从其引用的背景、研究空白和贡献中重构出作者锚定的研究问题。这些RQ并非针对同一背景的唯一有效问题，而是作为测试新颖性判断的作者锚定参考点。我们通过独立LLM判断、对比LLM判断以及人类专家评估来评价模型生成的RQ。LLM评判者始终将模型生成的RQ评为高度新颖，从而产生一种“新颖性幻觉”；而在对比评估中，这种偏好更加明显。然而，领域专家得出了相反的结论，他们更倾向于选择作者锚定的参考问题。我们进一步发现，许多生成的研究问题（RQs）范围狭窄或局限于特定来源，而这一点往往是大语言模型（LLM）评判者在未被明确测试的情况下容易忽略的维度。总体而言，LLM评判者与人类专家之间对新颖性评估结果的矛盾，引发了人们对使用大语言模型来评估研究问题科学新颖性的可靠性的严重担忧。\n维度 作者锚定 RQ（GT 基准） 模型生成 RQ 生成方向 逆向推导：已知论文最终贡献，反向还原作者最初的研究问题 正向生成：仅输入前置文献缺口，无后续解决方案，凭空提出新问题 核心定位 真实人类科研落地的参考标准 LLM 自主产出的候选研究问题，评测对象 是否使用目标论文自身成果 是，完整使用论文方法、创新贡献I 完全不使用目标论文的方案 / 贡献，仅提供前置背景文献 2025 Yilun Zhao, Chengye Wang, Chuhan Li, and Arman Cohan. Can multimodal foundation models understand schematic diagrams? an empirical study on information-seeking QA over scientific papers. In Findings of the Association for Computational Linguistics: ACL 2025, pages 18598–18631, 2025.\n全球首个针对「学术论文里的原理图理解 + 问答」的评测数据集 Shoaib Ahmed Siddiqui, Yanzhi Chen, Juyeon Heo, Menglin Xia, and Adrian Weller. On evaluating LLMs’ capabilities as functional approximators: A Bayesian evaluation framework. In Owen Rambow, Leo Wanner, Marianna Apidianaki, Hend Al-Khalifa, Barbara Di Eugenio, and Steven Schockaert, editors, Proceedings of the 31st International Conference on Computational Linguistics, pages 5826– 5835, Abu Dhabi, UAE, January 2025. Association for Computational Linguistics. URL https://aclanthology.org/2025.coling-main.388/.\n近期的研究已成功将大语言模型（LLMs）应用于函数建模任务。然而，这种成功背后的原因尚不明确。在本研究中，我们提出了一种新的评估框架，以全面评估大语言模型的函数建模能力。通过采用函数建模的贝叶斯视角，我们发现大语言模型在理解原始数据中的模式方面相对较弱，但在利用领域先验知识来深入理解底层函数方面表现出色。我们的研究结果为大语言模型在函数建模场景下的优势与局限性提供了新的见解。 Junpyo Seo, Dongwan Kim, Jaewook Jeong, Inkyu Park, and Junho Min. FlavorDiffusion: Modeling food-chemical interactions with diffusion. In Peter Jansen, Bhavana Dalvi Mishra, Harsh Trivedi, Bodhisattwa Prasad Majumder, Tom Hope, Tushar Khot, Doug Downey, and Eric Horvitz, editors, Proceedings of the 1st Workshop on AI and Scientific Discovery: Directions and Opportunities, pages 70–77, Albuquerque, New Mexico, USA, May 2025. Association for Computational Linguistics. ISBN 979-8-89176-224-4. doi: 10.18653/v1/2025.aisd-main.7. URLhttps://aclanthology.org/2025.aisd-main.7/.\n计算美食学，不相关 Ahmed Masry, Megh Thakkar, Aayush Bajaj, Aaryaman Kartha, Enamul Hoque, and Shafiq Joty. ChartGemma: Visual instruction-tuning for chart reasoning in the wild. In Owen Rambow, Leo Wanner, Marianna Apidianaki, Hend Al-Khalifa, Barbara Di Eugenio, Steven Schockaert, Kareem Darwish, and Apoorv Agarwal, editors, Proceedings of the 31st International Conference on Computational Linguistics: Industry Track, pages 625–643, Abu Dhabi, UAE, January 2025. Association for Computational Linguistics. URL https://aclanthology.org/2025.coling-industry.54/.\n图表理解与推理 现有方法在影响图表表示模型性能的两个关键维度上存在重大缺陷：一是基于图表底层数据表生成的数据进行训练，忽略了图表图像中的视觉趋势和模式；二是使用弱对齐的视觉-语言骨干模型进行领域特定训练，导致在面对真实世界中的图表时泛化能力受限。我们针对这些重要问题提出了解决方案，并推出了ChartGemma——一种基于PaliGemma构建的全新图表理解与推理模型。ChartGemma不再依赖底层数据表，而是直接利用从图表图像中生成的指令微调数据进行训练，从而能够捕捉来自多样化图表的高层趋势和低层视觉信息。我们的简单方法在涵盖图表摘要、问答和事实核查的5个基准测试中均取得了最先进的结果。针对真实世界图表进行的详尽定性研究表明，与同类模型相比，ChartGemma生成的摘要更加真实且符合事实。我们已在 https://github.com/vis-nlp/ChartGemma 发布代码、模型检查点、数据集和演示示例。 Nacef Ben Mansour, Hamed Rahimi, and Motasem Alrahabi. How well do large language models extract keywords? a systematic evaluation on scientific corpora. In Peter Jansen, Bhavana Dalvi Mishra, Harsh Trivedi, Bodhisattwa Prasad Majumder, Tom Hope, Tushar Khot, Doug Downey, and Eric Horvitz, editors, Proceedings of the 1st Workshop on AI and Scientific Discovery: Directions and Opportunities, pages 13–21, Albuquerque, New Mexico, USA, May 2025. Association for Computational Linguistics. ISBN 979-8-89176-224-4. doi: 10.18653/v1/2025.aisd-main.2. URLhttps://aclanthology.org/2025.aisd-main.2/.\n论文关键词提取，主评估 提出一种新的评估框架，以解决不同科学语料库中关键词标准化不一致的问 现有方法（包括统计方法和基于图的方法）在处理技术术语、跨学科歧义以及动态变化的科学术语等特定领域挑战时表现不佳。本文对传统关键词提取方法（如TextRank和YAKE）与基于大语言模型（LLM）的方法进行了实证比较。我们提出了一种新的评估框架，结合基于编辑距离的模糊语义匹配与精确匹配指标（F1、精确率、召回率），以解决不同科学语料库中关键词标准化不一致的问题。通过针对九种不同大语言模型进行广泛的消融实验，我们分析了它们的性能及相应成本。研究结果表明，基于大语言模型的方法在精度和相关性方面始终优于传统方法。这一性能优势显示出其在提升学术搜索系统和信息检索能力方面具有巨大潜力。 Chunwei Liu, Enrique Noriega-Atala, Adarsh Pyarelal, Clayton T Morrison, and Mike Cafarella. Variable extraction for model recovery in scientific literature. In Peter Jansen, Bhavana Dalvi Mishra, Harsh Trivedi, Bodhisattwa Prasad Majumder, Tom Hope, Tushar Khot, Doug Downey, and Eric Horvitz, editors, Proceedings of the 1st Workshop on AI and Scientific Discovery: Directions and Opportunities, pages 1–12, Albuquerque, New Mexico, USA, May 2025. Association for Computational Linguistics. ISBN 979-8-89176-224-4. doi: 10.18653/v1/2025.aisd-main.1. URLhttps://aclanthology.org/2025.aisd-main.1/.\n论文中的数学模型的变量提取 由于科学界生产力的不断提高，若无人工智能方法的帮助，很难跟上文献的发展步伐。本文评估了多种从流行病学研究中提取数学模型变量（如“感染率（𝛼）”、“康复率（𝛾）”和“死亡率（𝜇）”）的方法。变量提取看似是一项基础任务，但在从科学文献中恢复模型的过程中起着关键作用。一旦提取完成，我们便可利用这些变量实现自动化的数学建模、模拟以及对已发表结果的复现。我们还引入了一个基准数据集，其中包含从科学论文中手动标注的变量描述和变量值。分析表明，基于大语言模型（LLM）的方法表现最佳。尽管将基于规则的提取结果与大语言模型结合能带来一定的提升，但大语言模型本身凭借迁移学习和指令微调能力所带来的性能飞跃更为显著。本研究展示了大语言模型在增强科学文献自动理解、实现模型自动恢复与模拟方面的巨大潜力。 Ethan Lin, Zhiyuan Peng, and Yi Fang. Evaluating and enhancing large language models for nov- elty assessment in scholarly publications. In Peter Jansen, Bhavana Dalvi Mishra, Harsh Trivedi, Bodhisattwa Prasad Majumder, Tom Hope, Tushar Khot, Doug Downey, and Eric Horvitz, editors, Proceedings of the 1st Workshop on AI and Scientific Discovery: Directions and Opportunities, pages 46–57, Albuquerque, New Mexico, USA, May 2025. Association for Computational Linguistics. ISBN 979-8-89176-224-4. URL https://aclanthology.org/2025.aisd-main.5/.\n论文新颖性评估 提出了SchNovel，一个用于评估大语言模型判断学术论文新颖性能力的基准，该任务对于优化科研发现流程具有核心意义 近期的研究主要从语义角度出发，利用认知科学中的基准测试来评估大语言模型（LLM）的创造力，而新颖性是其中的重要方面。然而，尽管在科学发现辅助工具的评估中，对学术出版物中新颖性的判断至关重要，并且有望加速研究周期、优先识别高影响力成果，但这一领域仍鲜有探索。为此，我们提出了SchNovel，一个用于评估大语言模型判断学术论文新颖性能力的基准，该任务对于优化科研发现流程具有核心意义。SchNovel包含来自arXiv数据集的6个领域的15000对论文，每对论文发表时间相隔2至10年，其中较新发表的论文被视为更具新颖性。此外，我们还提出RAG-Novelty，一种基于检索增强的方法，通过将新颖性评估建立在检索到的上下文中，模拟人类同行评审的过程。大量实验揭示了不同大语言模型在评估新颖性方面的能力，并表明RAG-Novelty优于近期的基线模型，凸显了大语言模型作为科学工作流程中自动化新颖性检测工具的巨大潜力。 Daniel J. Liebling, Malcolm Kane, Madeleine Grunde-McLaughlin, Ian Lang, Subhashini Venugopalan, and Michael Brenner. Towards AI-assisted academic writing. In Peter Jansen, Bhavana Dalvi Mishra, Harsh Trivedi, Bodhisattwa Prasad Majumder, Tom Hope, Tushar Khot, Doug Downey, and Eric Horvitz, editors, Proceedings of the 1st Workshop on AI and Scientific Discovery: Directions and Opportunities, pages 31–45, Albuquerque, New Mexico, USA, May 2025. Association for Computational Linguistics. ISBN 979-8-89176-224-4. URL https://aclanthology.org/2025.aisd-main.4/.\n学术写作 我们提出了一种人工智能辅助学术写作系统，包含引文推荐和引言撰写两个组件。该系统通过分析用户当前文档的上下文，提供相关性强的引文建议；并以结构化方式生成引言，将研究贡献置于已有工作的背景之中。我们通过定量评估验证了这些组件的有效性。最后，本文还进行了定性研究，探讨研究人员如何将引文整合到其写作流程中。研究结果表明，学界对精准的人工智能辅助写作系统存在需求，同时也需要简单而有效的方法来满足这些需求。 Eftekhar Hossain, Sanjeev Kumar Sinha, Naman Bansal, R. Alexander Knipper, Souvika Sarkar, John Salvador, Yash Mahajan, Sri Ram Pavan Kumar Guttikonda, Mousumi Akter, Md. Mahadi Hassan, Matthew Freestone, Matthew C. Williams Jr., Dongji Feng, and Santu Karmaker. LLMs as meta- reviewers’ assistants: A case study. In Luis Chiruzzo, Alan Ritter, and Lu Wang, editors, Proceedings of the 2025 Conference of the Nations of the Americas Chapter of the Association for Computational Linguis- tics: Human Language Technologies (Volume 1: Long Papers), pages 7763–7803, Albuquerque, New Mex- ico, April 2025. Association for Computational Linguistics. ISBN 979-8-89176-189-6. doi: 10.18653/ v1/2025.naacl-long.395. URL https://aclanthology.org/2025.naacl-long.395/.\n同行评审，主评估 在学术同行评审过程中，撰写元评审意见是一项至关重要却十分繁重的任务。该任务要求评审人整合多位专家的不同观点，以资深专家的身份形成自己的判断，并将所有这些视角综合成一份简洁而全面的概述，从而做出整体推荐。这一过程耗时较长，且容易受到疲劳、判断不一致或遗漏细微细节等人为因素的影响。鉴于大语言模型（LLM）领域的最新重大进展，深入研究LLM是否能够帮助元评审人更出色地完成这项重要任务显得尤为迫切。本文以三种主流LLM——GPT-3.5、LLaMA2和PaLM2为对象，开展了一项案例研究，旨在通过生成受控的多视角摘要（MPS），帮助元评审人更好地理解多位专家的观点。为此，我们基于近期提出的TELeR分类体系，向这三种LLM输入了不同类型和层次的提示。最后，我们对LLM生成的MPS进行了详细的定性分析，并报告了相关发现。 Douglas B Craig. A human-LLM note-taking system with case-based reasoning as framework for scientific discovery. In Peter Jansen, Bhavana Dalvi Mishra, Harsh Trivedi, Bodhisattwa Prasad Ma- jumder, Tom Hope, Tushar Khot, Doug Downey, and Eric Horvitz, editors, Proceedings of the 1st Workshop on AI and Scientific Discovery: Directions and Opportunities, pages 22–30, Albuquerque, New Mexico, USA, May 2025. Association for Computational Linguistics. ISBN 979-8-89176-224-4. doi: 10.18653/v1/2025.aisd-main.3. URL https://aclanthology.org/2025.aisd-main.3/.\n科学发现是一个需要透明推理、实证验证和结构化问题解决的迭代过程。本文提出了一种新颖的人机协同AI系统，该系统利用基于案例的推理来促进结构化的科学研究。该系统以笔记为核心，采用Obsidian笔记应用作为主要界面，将用户输入、系统案例和工具规范等所有组件均以纯文本笔记的形式呈现。这种方法确保了研究过程的每一步都对用户和AI而言都是可见、可编辑且可修改的。系统能够动态检索过往经验中的相关案例，优化假设，并以透明且迭代的方式构建研究流程。通过一项关于TLR4在脓毒症中作用的研究案例，展示了该系统如何支持问题界定、文献综述、假设生成以及实证验证。结果表明，人工智能辅助的科研工作流在提升研究效率的同时，仍能保持人类的监督与可解释性。 2024 Jun Zhuang and Casey Kennington.Understanding survey paper taxonomy about large lan- guage models via graph representation learning. In Tirthankar Ghosal, Amanpreet Singh, Anita Waard, Philipp Mayr, Aakanksha Naik, Orion Weller, Yoonjoo Lee, Shannon Shen, and Yanxia Qin, editors, Proceedings of the Fourth Workshop on Scholarly Document Processing (SDP 2024), pages 58–69, Bangkok, Thailand, August 2024. Association for Computational Linguistics. URL https://aclanthology.org/2024.sdp-1.6/. Harshit Nigam, Manasi Patwardhan, Lovekesh Vig, and Gautam Shroff. An interactive co-pilot for accelerated research ideation. In Su Lin Blodgett, Amanda Cercas Curry, Sunipa Dev, Michael Madaio, Ani Nenkova, Diyi Yang, and Ziang Xiao, editors, Proceedings of the Third Workshop on Bridging Human–Computer Interaction and Natural Language Processing, pages 60–73, Mexico City, Mexico, June 2024. Association for Computational Linguistics. doi: 10.18653/v1/2024.hcinlp-1.6. URL https://aclanthology.org/2024.hcinlp-1.6/. Benjamin Newman, Yoonjoo Lee, Aakanksha Naik, Pao Siangliulue, Raymond Fok, Juho Kim, Daniel S Weld, Joseph Chee Chang, and Kyle Lo. ArxivDIGESTables: Synthesizing scientific literature into tables using language models. In Yaser Al-Onaizan, Mohit Bansal, and Yun-Nung Chen, editors, Proceedings of the 2024 Conference on Empirical Methods in Natural Language Processing, pages 9612–9631, Miami, Florida, USA, November 2024. Association for Computational Linguistics. doi: 10.18653/v1/2024. emnlp-main.538. URL https://aclanthology.org/2024.emnlp-main.538/. Fanqing Meng, Wenqi Shao, Quanfeng Lu, Peng Gao, Kaipeng Zhang, Yu Qiao, and Ping Luo. Char- tAssistant: A universal chart multimodal language model via chart-to-table pre-training and multitask instruction tuning. In Lun-Wei Ku, Andre Martins, and Vivek Srikumar, editors, Findings of the As- sociation for Computational Linguistics: ACL 2024, pages 7775–7803, Bangkok, Thailand, August Association for Computational Linguistics. doi: 10.18653/v1/2024.findings-acl.463. URL https://aclanthology.org/2024.findings-acl.463/. Ahmed Masry, Mehrad Shahmohammadi, Md Rizwan Parvez, Enamul Hoque, and Shafiq Joty. ChartIn- struct: Instruction tuning for chart comprehension and reasoning.In Lun-Wei Ku, Andre Mar- tins, and Vivek Srikumar, editors, Findings of the Association for Computational Linguistics: ACL 2024, pages 10387–10409, Bangkok, Thailand, August 2024. Association for Computational Lin- guistics. doi: 10.18653/v1/2024.findings-acl.619. URLhttps://aclanthology.org/2024.findings-acl.619/. Yubo Ma, Zhibin Gou, Junheng Hao, Ruochen Xu, Shuohang Wang, Liangming Pan, Yujiu Yang, Yixin Cao, and Aixin Sun. SciAgent: Tool-augmented language models for scientific reasoning. In Yaser Al-Onaizan, Mohit Bansal, and Yun-Nung Chen, editors, Proceedings of the 2024 Conference on Empirical Methods in Natural Language Processing, pages 15701–15736, Miami, Florida, USA, November 2024. Association for Computational Linguistics. doi: 10.18653/v1/2024.emnlp-main.880. URL https://aclanthology.org/2024.emnlp-main.880/. Zhenwen Liang, Kehan Guo, Gang Liu, Taicheng Guo, Yujun Zhou, Tianyu Yang, Jiajun Jiao, Renjie Pi, Jipeng Zhang, and Xiangliang Zhang. SceMQA: A scientific college entrance level multimodal question answering benchmark. In Lun-Wei Ku, Andre Martins, and Vivek Srikumar, editors, Proceedings of the 62nd Annual Meeting of the Association for Computational Linguistics (Volume 2: Short Papers), pages 109–119, Bangkok, Thailand, August 2024. Association for Computational Linguistics. doi: 10.18653/v1/2024.acl-short.11. URL https://aclanthology.org/2024.acl-short.11/. Xiangci Li and Jessica Ouyang. Related work and citation text generation: A survey. In Yaser Al- Onaizan, Mohit Bansal, and Yun-Nung Chen, editors, Proceedings of the 2024 Conference on Empirical Methods in Natural Language Processing, pages 13846–13864, Miami, Florida, USA, November 2024. Association for Computational Linguistics. doi: 10.18653/v1/2024.emnlp-main.767. URLhttps://aclanthology.org/2024.emnlp-main.767/. Lei Li, Yuqi Wang, Runxin Xu, Peiyi Wang, Xiachong Feng, Lingpeng Kong, and Qi Liu. Multimodal ArXiv: A dataset for improving scientific comprehension of large vision-language models. In Lun-Wei Ku, Andre Martins, and Vivek Srikumar, editors, Proceedings of the 62nd Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers), pages 14369–14387, Bangkok, Thailand, August 2024. Association for Computational Linguistics. doi: 10.18653/v1/2024.acl-long.775. URL https://aclanthology.org/2024.acl-long.775/. Chuhan Li, Ziyao Shangguan, Yilun Zhao, Deyuan Li, Yixin Liu, and Arman Cohan. M3SciQA: A multi-modal multi-document scientific QA benchmark for evaluating foundation models. In Yaser Al-Onaizan, Mohit Bansal, and Yun-Nung Chen, editors, Findings of the Association for Compu- tational Linguistics: EMNLP 2024, pages 15419–15446, Miami, Florida, USA, November 2024. Association for Computational Linguistics.doi: 10.18653/v1/2024.findings-emnlp.904.URL https://aclanthology.org/2024.findings-emnlp.904/. Lukas Hilgert, Danni Liu, and Jan Niehues. Evaluating and training long-context large language models for question answering on scientific papers. In Sachin Kumar, Vidhisha Balachandran, Chan Young Park, Weijia Shi, Shirley Anugrah Hayati, Yulia Tsvetkov, Noah Smith, Hannaneh Hajishirzi, Dongyeop Kang, and David Jurgens, editors, Proceedings of the 1st Workshop on Customizable NLP: Progress and Chal- lenges in Customizing NLP for a Domain, Application, Group, or Individual (CustomNLP4U), pages 220– 236, Miami, Florida, USA, November 2024. Association for Computational Linguistics. doi: 10.18653/ v1/2024.customnlp4u-1.17. URL https://aclanthology.org/2024.customnlp4u-1.17/. Helia Hashemi, Jason Eisner, Corby Rosset, Benjamin Van Durme, and Chris Kedzie. LLM-rubric: A multidimensional, calibrated approach to automated evaluation of natural language texts. In Lun-Wei Ku, Andre Martins, and Vivek Srikumar, editors, Proceedings of the 62nd Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers), pages 13806–13834, Bangkok, Thailand, August 2024. Association for Computational Linguistics. doi: 10.18653/v1/2024.acl-long. URL https://aclanthology.org/2024.acl-long.745/. Marcio Fonseca and Shay Cohen. Can large language model summarizers adapt to diverse scientific communication goals? In Lun-Wei Ku, Andre Martins, and Vivek Srikumar, editors, Findings of the Association for Computational Linguistics: ACL 2024, pages 8599–8618, Bangkok, Thailand, August Association for Computational Linguistics. doi: 10.18653/v1/2024.findings-acl.508. URL https://aclanthology.org/2024.findings-acl.508/. Jiangshu Du, Yibo Wang, Wenting Zhao, Zhongfen Deng, Shuaiqi Liu, Renze Lou, Henry Peng Zou, Pranav Narayanan Venkit, Nan Zhang, Mukund Srinath, Haoran Ranran Zhang, Vipul Gupta, Yinghui Li, Tao Li, Fei Wang, Qin Liu, Tianlin Liu, Pengzhi Gao, Congying Xia, Chen Xing, Cheng Jiayang, Zhaowei Wang, Ying Su, Raj Sanjay Shah, Ruohao Guo, Jing Gu, Haoran Li, Kangda Wei, Zihao Wang, Lu Cheng, Surangika Ranathunga, Meng Fang, Jie Fu, Fei Liu, Ruihong Huang, Eduardo Blanco, Yixin Cao, Rui Zhang, Philip S. Yu, and Wenpeng Yin. LLMs assist NLP researchers: Critique paper (meta-)reviewing. In Yaser Al-Onaizan, Mohit Bansal, and Yun-Nung Chen, editors, Proceedings of the 2024 Conference on Empirical Methods in Natural Language Processing, pages 5081–5099, Miami, Florida, USA, November 2024. Association for Computational Linguistics. doi: 10.18653/v1/2024. emnlp-main.292. URL https://aclanthology.org/2024.emnlp-main.292/. Qiguang Chen, Libo Qin, Jin Zhang, Zhi Chen, Xiao Xu, and Wanxiang Che. M3CoT: A novel benchmark for multi-domain multi-step multi-modal chain-of-thought. pages 8199–8221, August 2024. doi: 10.18653/v1/2024.acl-long.446. URL https://aclanthology.org/2024.acl-long.446/. Eric Chamoun, Michael Schlichtkrull, and Andreas Vlachos. Automated focused feedback generation for scientific writing assistance. In Lun-Wei Ku, Andre Martins, and Vivek Srikumar, editors, Findings of the Association for Computational Linguistics: ACL 2024, pages 9742–9763, Bangkok, Thailand, August 2024. Association for Computational Linguistics. doi: 10.18653/v1/2024.findings-acl.580. URL https://aclanthology.org/2024.findings-acl.580/. 2023 Nils Dycke, Ilia Kuznetsov, and Iryna Gurevych. NLPeer: A unified resource for the computational study of peer review. In Anna Rogers, Jordan Boyd-Graber, and Naoaki Okazaki, editors, Proceedings of the 61st Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers), pages 5049–5073, Toronto, Canada, July 2023. Association for Computational Linguistics. doi: 10.18653/v1/2023.acl-long.277. URL https://aclanthology.org/2023.acl-long.277/. 2022 Ahmed Masry, Do Xuan Long, Jia Qing Tan, Shafiq Joty, and Enamul Hoque. ChartQA: A benchmark for question answering about charts with visual and logical reasoning. In Smaranda Muresan, Preslav Nakov, and Aline Villavicencio, editors, Findings of the Association for Computational Linguistics: ACL 2022, pages 2263–2279, Dublin, Ireland, May 2022. Association for Computational Linguistics. doi: 10. 18653/v1/2022.findings-acl.177. URLhttps://aclanthology.org/2022.findings-acl.177/. 2021 Dustin Wright and Isabelle Augenstein. Citeworth: Cite-worthiness detection for improved scientific document understanding. In Findings of the Association for Computational Linguistics: ACL-IJCNLP 2021, pages 1796–1807, May 2021. Xiuying Chen, Hind Alamro, Mingzhe Li, Shen Gao, Xiangliang Zhang, Dongyan Zhao, and Rui Yan. Capturing relations between scientific papers: An abstractive model for related work section generation. In Chengqing Zong, Fei Xia, Wenjie Li, and Roberto Navigli, editors, Proceedings of the 59th Annual Meeting of the Association for Computational Linguistics and the 11th International Joint Conference on Natural Language Processing (Volume 1: Long Papers), pages 6068–6077, Online, August 2021. Association for Computational Linguistics. doi: 10.18653/v1/2021.acl-long.473. URL https://aclanthology.org/2021.acl-long.473/. 2020 Libo Qin, Xiao Xu, Wanxiang Che, Yue Zhang, and Ting Liu. Dynamic fusion network for multi-domain end-to-end task-oriented dialog. pages 6344–6354, July 2020. doi: 10.18653/v1/2020.acl-main.565. URL https://aclanthology.org/2020.acl-main.565/. 2019 Iz Beltagy, Kyle Lo, and Arman Cohan. SciBERT: A pretrained language model for scientific text. In Kentaro Inui, Jing Jiang, Vincent Ng, and Xiaojun Wan, editors, Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing and the 9th International Joint Conference on Natural Language Processing (EMNLP-IJCNLP), pages 3615–3620, Hong Kong, China, November Association for Computational Linguistics. doi: 10.18653/v1/D19-1371. URLhttps://aclanthology.org/D19-1371/. ","link":"https://eSparkL.top/research/32-ai4research/","section":"research","tags":null,"title":"32 AI4Research"},{"body":"31-互联网程序设计\n先搞懂练习，需结合自己的代码\n有时间再梳理其他内容\n考试时打包完整的 NetworkAPP（防止缺少依赖）\n第 1 讲 Java 图形窗口程序设计 创建窗体 UI\n第 2 讲 网络对话程序设计（最最基础版 TCP） 知识点 套接字类有两个基本的方法可以获得两个通信管道：\nsocket.getInputStream()方法可获得输入字节流的入口； socket.getOutputStream()方法可获得输出字节流的出口；\n课程任务 用 TCPClientFX.java 连接教师服务器； 发送你的学号、姓名、密码及时间戳信息，之间不要留空格，用#隔开，例如：20170000007#程旭元#你的密码#时间戳 代码注释 客户端程序 1：TCPClient.java 具有网络接收和发送能力的程序。 客户端程序 2：TCPClientFX.java 为界面模块。 服务器程序：TCPServer.java 用于监听客户端的连接，具有网络接收和发送\n时间戳是通过 System.currentTimeMillis()获得的毫秒数\n⭐ 第 3 讲 多线程程序设计技术 知识点 在第 2 讲的基础上进行改进，引入多线程\n关于接收并显示服务端信息的代码都必须删除，否则 → 阻塞/乱序\n匿名内部类或 lambda 表达式中，不能访问外部类方法中的非 final 类型的局部变量。可使用临时常量，或者将定义为类中的成员变量\n课程任务 制作登录查看平时成绩程序\n代码注释 TCPClientThreadFX.java：多线程接收客户端；\nLookUpScore.java：同 TCPClient.java；\nLookUpScoreFX.java：同 TCPClientThreadFX.java，只将窗体 title 为“登录查成绩”\n第 4 讲 网络文件传输程序设计 知识点 文件传输协议规定（RFC 959），网络文件传输中用两个 TCP 端口来实现: ⚫ 一个端口（21 号）用来对话，传递控制信息，总是开启； ⚫ 一个端口（20 号）实现文件数据传递服务，有数据传输服务时开启。\n本讲实现一个简单的远程文件传输系统，我们用 2021 端口实现对话服务，如身份验证、文件列表信息浏览等，用 2020 端口传递数据文件（即文件下载）。\n课程任务 启动客户端 FileClientFX.java 程序，连接 202.116.195.71 : 2021 服务器，关注提示信息，根据提示信息操作； 根据信息显示区的文件列表，在信息输入区输入要下载文件的全名（如果实现了扩展练习要求的快捷功能，可以使用鼠标拖动加亮方式【有实现】），使用“发送”按钮发送此文件名，服务器会给出相应反馈提示信息； 在信息输入区输入要下载文件的全名（如果实现了扩展练习要求的快捷功能，可以使用鼠标拖动加亮方式），点击“下载”按钮从服务器下载文件，下载完毕可获取 1 分； 运行下载的 jar 文件（双击，或控制台使用 java -jar 文件名，如果无法运行，请参见教案中的《jar 无法运行的原因和解决方案.pdf》），如果运行成功，则可获取完整的 5 分。 代码注释 客户端程序：\n主界面客户端程序 FileClientFX.java； （在 TCPClientThreadFX 基础上添加了“下载”按钮）\n已完成扩展练习一：鼠标高亮选中； 已完成扩展练习二：成员内部类 ReceiveHandler，封装新线程读取信息的功能 文件对话客户端程序（控制进程）FileDialogClient.java； （TCPClient 基础）\n文件数据客户端程序（数据传输进程）FileDataClient.java。 主要功能是向服务器的数据端口请求连接；\n服务端程序： （教师机，自己未实现）\n文件对话服务器程序 FileDialogServer.java，开启 2021 端口；\n主要功能: 身份验证、文件目录传送。 文件数据服务器程序 FileDataServer.java，开启 2020 端口。\n主要功能：传送文件名，接收文件。 ⭐ 第 5 讲 多用户服务器程序设计 知识点 服务端的多线程，实现服务多个客户端\n方案一般是：主线程只负责监听客户请求和接受连接请求，用一个线程专门负责和一个客户对话，建议采用 线程池 的方式\n1ExecutorService executorService = Executors.newFixedThreadPool(n); 将和客户对话部分的代码抽取到一个 Runnable 的实现类 Handler（见附录）的 run 方法中，然后丢给线程池去执行。方便起见，Handler 作为主程序的内部类。\n修改 idea 配置，同时运行多个相同的程序\n课程任务 教师计分服务器将开启多个线程连接你的多用户版本 TCP 服务器（TCPThreadServer.java），你的 TCP 服务器需要按约定判断关键字，按要求返回对应信息，信息正确就可以获得本次课堂分，具体步骤如下：\n教师计分服务器将会向你的 TCPThreadServer.java 服务器程序发起多个连接，并发送信息， 你的服务器如果收到信息：\u0026quot;来自教师服务器的连接\u0026quot; ，你的服务器应该回发 1 ；如果收到信息：\u0026quot;教师服务器再次发送信息\u0026quot; ，则回发 2 。 按这个约定修改你的服务器程序，并临时关闭防火墙以及本机上的虚拟网卡，运行该服务器程序，运行的端口号建议大于 1024，不要和常用的端口号冲突，例如可以使用 7777； 用第三讲的 TCPClientThreadFX 客户端连接教师计分服务器 202.116.195.71 : 8008，发送学号验证通过后， 按如下格式发送你的服务器运行的端口号：我的服务器已经准备好，端口号是\u0026amp;****\u0026amp; 。 注意：信息一定要严格按照要求，*号用真实端口号代替，两个\u0026amp;是信息间隔符； 代码注释 TCPThreadServer.java：多服务器，采用固定数量的线程池\nGroupServer.java：在 TCPThreadServer.java 基础上修改，添加核心的群组发送方法 sendToAllMembers，用于给所有在线客服转发信息\nTcpThreadServer2.java：解决 OOM 的问题，提供动态调整大小的线程池\n⭐ 第 6 讲 UDP 套接字程序设计 知识点 和 TCP 编程相比，UDP 在使用前不需要进行连接，没有流的概念。只要知道地址（IP 地址和端口号）就可以给对方发送信息；\nUDP 编程几个关键的 Java 类：DatagramSocket，DatagramPacket，MulticastSocket。\nUDP 套接字只有一种 DatagramSocket，不像 TCP 区分客户套接字和服务器套接字。UDP 编程不太区分服务端和客户端\nUDP 套接字创建：DatagramSocket datagramSocket = new DatagramSocket(); 用于发送网络数据：datagramSocket.send(DatagramPacket packet)； 用于接收网络数据：datagramSocket.receive(DatagramPacket packet)；// 程序会在这里阻塞 指定超时：datagramSocket.setSoTimeout(int tmeout) UDP 数据报文的创建：DatagramPacket(byte [ ] data, int length, InetAddress remoteAddr, int remotePort); // 指明发送给谁，int length 表示要读取的数据长度，byte [ ] data 就是用于存储报文数据的字节数组缓存 InetAddress getAddress( )：如果是发送的报文，返回的是目标主机的地址信息；如果是要接收的报文，返回的是发送该数据报文的主机地址信息； int getPort( )：如果是发送的报文，返回的是目标主机的端口；如果是要接收的报文，返回的是发送该数据报文的主机端口； byte [ ] getData( ): 从报文中取数据，返回与数据报文相关联的字节数组； 如果你的客户端设置为 send 一个信息，然后 receive 等待回应信息，可以用这个方法来设置超时，避免程序无限等待；但如果你的客户端类似 TCP 的设计方式，开启一个新线程来专门 receive 信息，那就不要用这个命令，否则在等待的过程中就超时报错了。\n课程任务 你的 UDP 客户端向教师计分服务器发送信息\n关闭你机器上的防火墙，将你的 UDPServer 服务器在指定的端口号运行（建议端口号大于 1024，例如 8008）； 用你的客户端给计分服务器 202.116.195.71:6868 发送如下指定信息：我的 UDP 服务器已经准备好，端口号是\u0026amp;\u0026amp; 注意，信息一定要严格按照要求，表示你的 UDP 服务器的端口号，两个\u0026amp;是信息间隔符； 教师端的服务器会自动访问你的 UDP 服务器，如果你的服务器工作正常，反馈信息符合要求，就会提示成功信息，后台记录课堂成绩； 如果长时间显示正在访问你的 UDP 服务器……而没有后续提示信息，那么检查你的服务端程序，是否收发信息代码编写有误、是否端口号等信息有误，检查客户端否接收消息程序编写有误（例如没有用多线程的方式循环 receive 消息），并检查是否自己的防火墙没有关闭，教师返回的信息可能被防火墙拦截。或者是使用了 wifi 完成练习，由于 NAPT 的影响造成教师返回信息无法送达。\n代码注释 UDPClient.java：UDP 客户端程序\nUDPClientThreadFX.java：UDP 客户端发送 UI\nUDPServer.java：UDP 服务器\nMulticast.java：扩展练习一，组播程序\nMulticastFX.java：扩展练习一，组播程序 UI\n第 7 讲 邮件发送程序设计 知识点 课程任务 代码注释 ⭐ 第 8 讲 HTTP 程序设计 知识点 课程任务 代码注释 URLClientFX.java：输入网址，获取 HTTP 源码\nHTTPClient.java：\nHTTPClientThreadFX.java：\nHTTPSClient.java：\nHTTPSClientThreadFX.java：\n期末测试 online course\n可以 F12 开发者工具 → 三个竖点 → 更多工具 → 网络条件 → 取消用户浏览器默认 →java→ 刷新网页\n怀疑考试当天会修改值，需要重新获取一次\n第 9 讲 扫描程序设计 知识点 课程任务 代码注释 ⭐HostAndPortScannerWithProgressBarFX.java：同时扫描主机和端口，并有进度条，100%是处理完全部的主机和端口，一般点多线程扫描即可\nHostScannerFX.java：只扫描主机\nPortScannerFX.java：只扫描端口\n第 10 讲 网络抓包与发包程序设计(一) 知识点 课程任务 代码注释 ConfigDialog.java：抓包设置弹窗\nPacketCaptureFX.java：抓包程序 UI\nUDPClient.java：与第 6 讲一致\nUDPClientThreadFX.java：用 StringBuffer 拼接多行信息，其余与第 6 讲一致\n第 11 讲 网络抓包与发包程序设计（二） 知识点 课程任务 代码注释 如何找到正确的 MAC\n包在链路层发给默认网关，再发到局域网中其他网段的主机\n1# Windows 2ipconfig # 查看默认网关 3arp -a | findstr \u0026lt;默认网关\u0026gt; # 查看默认网关的 MAC 地址 ⭐ 第 12 讲\u0026amp;第 13 讲 RMI 程序设计（一） 知识点 A 和 B 统一接口： 序列化和反序列化：因为程序中是字符和字符串，网络中是二进制流 流程：打包参数 → 解包 → 调用方法 → 打包 → 解包 创建远程接口\n使用 名字 来找到服务器上的远程对象（类比“点单”，把名字登记，访问时就可以找到）\n接口里可能一部分自己实现，一部分教师机实现\n课程任务 调用老师的服务\n老师调用自己的服务\n代码注释 第 14 讲 基于 Java 的网络数据库程序设计 知识点 MySQL 不同版本的驱动有区别\n任务服务器 → 启动 MySQL→ 开始栏 →MySQL…Unicode\n课程任务 密码是两个小写的 student\n一定要重新登录查分\n代码注释 DBOperate1.java：硬数据库配置，插入和查询指定表\nDBOperate2.java：通过资源 Resources/db.txt 管理，添加查看整个数据所包含的表名和每个表的数据（字段名+具体值），包含删除数据。\nConnectionProvider.java：读取\nPropertyReader.java：读取 db.txt 的配置\n第 15 讲 非阻塞通信模式的 TCP 编程 非阻塞版本的 TCPServer\n考试参考 1 说明 此为 GDUFS2020 秋季学期互联网程序设计 期末考的题解，相关代码可以在 https://github.com/LeslieLeung/NetworkApp 获取。\n第一题 题目：读 TCP 服务端代码，用 TCP 客户端与考试服务器 通信。\n解法：第一题比较简单，签到题，要求发学号姓名。运行第三章的 TCPClientThreadFX，输入 ip 和端口点击连接，然后发送信息即可。坑点在于平时练习一般用\u0026amp;分隔，考试中可以看到给的代码逻辑中用-进行分隔，发送时用-隔开学号和姓名即可。\n第二题 题目：UDP 发消息到服务端，根据提示信息完成任务。\n解法：用第六章的 UDP 客户端发送消息，回答提问，然后就会有一个要求你去访问 https://oc.gdufs.edu.cn/finaltest2 ，获取 key 发送回去。这里可以用第八章的 URLClientFX 访问，也可以用之前的 hack 方法（见 https://blog.csdn.net/weixin_43409309/article/details/111824304)直接获取，然后通过 UDP 客户端发送回去即可。\n第三题 题目：RMI\n解法：客户端 FX 可以直接复用第十二章的 RmiStudentClientFX，然后把原来的 MsgService 改成 TeacherService 即可。要求实现的 getResult 方法也比较简单，就是一个字符串 的分隔，求最大最小值，详细见代码。\n⭐方法：① 启动StudentServer；② 启动StudentClientFX\n版权声明：本文为 CSDN 博主「Leslie_Leung」的原创文章，遵循 CC 4.0 BY-SA 版权协议，转载请附上原文出处链接及本声明。 原文链接：https://blog.csdn.net/weixin_43409309/article/details/112274386\n考试注意 每个题目要花时间搞懂 关闭防火墙 win11：设置 → 安全 → 打开 Windows 安全中心 → 防火墙和网络保护/有的说是“病毒和威胁防护”\nwin10：cmd“control”→ 系统和安全 →Windows Defender 防火墙 → 启用或关闭 Windows Defender 防火墙\n永久关闭：cmd“regedit”→ 转到路径 HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\mpssvc→ 双击 Start 选项，并将其数值数据修改为 4，再单击“确定”，之后再 重启一下计算机 即可彻彻底底地禁用 Windows 防火墙。\n关闭虚拟网卡 方法 1：cmd“ncpa.cpl”→ 关闭虚拟网卡对应的连接，通常名称中会包含“Virtual”或“VMware”等字样\n方法 2：Windows+X→ 设备管理器 → 网络适配器 → 禁用虚拟网卡对应的连接\n清除 idea 编译缓存 File→Invalidate Cashes / Restart\n修改系统时间 设置 → 时间和语言\n查找 IP 地址 Windows\nipconfig # 查看默认网关 arp -a | findstr \u0026lt;默认网关\u0026gt; # 查看默认网关的 MAC 地址\nkill 端口任务 netstat -ano |findstr 1099 # 查看 1099 端口下正在运行的任务 PID\n任务管理器 → 右键显示 PID→ 关闭对应的任务\n一些检查事项 u 盘能否使用！！！\n密码：\nhttps://oc.gdufs.edu.cn/：qq + 138\n查分程序：密码 859273\n课堂练习做平时分，期末机考（用平时已经写好的程序修改，2 小时 3 题）\nTHSwzKVPZDSG4qJW\n服务器默认地址：10.188.5.253\n考试也要交源代码，可以全传 src ","link":"https://eSparkL.top/study/31-%E4%BA%92%E8%81%94%E7%BD%91%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1/","section":"study","tags":null,"title":"31 互联网程序设计"},{"body":"","link":"https://eSparkL.top/categories/%E4%BA%92%E8%81%94%E7%BD%91%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1/","section":"categories","tags":null,"title":"互联网程序设计"},{"body":"","link":"https://eSparkL.top/study/","section":"study","tags":null,"title":"学习笔记"},{"body":"将 Docker Desktop 安装到其他盘\n从官网下载 Docker Desktop 的安装链接.exe 后，不要直接点击！！！使用命令行安装，指定安装目录和数据目录。\n1. 创建目录 1mkdir D:\\develop\\docker 2mkdir D:\\develop\\docker\\data 2. 执行安装 管理员身份打开 CMD，运行：\n1start /w \u0026#34;\u0026#34; \u0026#34;Docker Desktop Installer.exe\u0026#34; install -accept-license --installation-dir=D:\\develop\\docker --wsl-default-data-root=D:\\develop\\docker\\data 参数说明：\n--installation-dir：程序安装位置 --wsl-default-data-root：镜像/容器数据位置（必加，否则数据仍在 C 盘） 3. 更改 Docker 源 国内镜像源博客（持续更新）：https://blog.xuanyuan.me/archives/1154\n在 Docker Daemon 标签页的 JSON 配置中，向 \u0026quot;registry-mirrors\u0026quot; 数组添加：https://docker.xuanyuan.me；\n1{ 2 \u0026#34;builder\u0026#34;: { 3 \u0026#34;gc\u0026#34;: { 4 \u0026#34;defaultKeepStorage\u0026#34;: \u0026#34;20GB\u0026#34;, 5 \u0026#34;enabled\u0026#34;: true 6 } 7 }, 8 \u0026#34;experimental\u0026#34;: false, 9 \u0026#34;registry-mirrors\u0026#34;: [ 10 \u0026#34;https://docker.xuanyuan.me\u0026#34; 11 ] 12} 注意 部分配置文件仍在 C:\\Users\\\u0026lt;用户名\u0026gt;\\.docker（体积很小） 安装前确保已开启 WSL2 或 Hyper-V 参考 https://stackoverflow.com/questions/75727062/how-to-install-docker-desktop-on-a-different-drive-location-on-windows\n","link":"https://eSparkL.top/skill/30-docker/","section":"skill","tags":null,"title":"30 Docker"},{"body":"","link":"https://eSparkL.top/categories/docker/","section":"categories","tags":null,"title":"Docker"},{"body":"29-LangChain\n什么是LangChain LangChain 是一个开源的 Python 库，用于构建 LLM 应用。包含以下特性\nLLM统一接口和丰富的提示 链（将工具串联起来） LCEL表达式 检索增强生产（RAG） Agent 模型记忆（memory） LangChain框架组成","link":"https://eSparkL.top/skill/29-langchain/","section":"skill","tags":null,"title":"29 LangChain"},{"body":"","link":"https://eSparkL.top/categories/langchain/","section":"categories","tags":null,"title":"LangChain"},{"body":"28-英语小镇项目\n复现项目 chatdev 按照GitHub页面操作安装\n1yarn install 2 3yarn build yarn install：出现sharp无权限以及找不到python环境的问题。\n解决办法：用管理员权限打开cmd，因为python环境我统一用annaconda管理，所以在系统环境变量里配置了annaconda的路径。 yarn build：无法找到 minimatch 的类型定义文件 error TS2688: Cannot find type definition file for 'minimatch'. The file is in the program because: Entry point for implicit type library 'minimatch'\n解决办法：\n1yarn add @types/minimatch --dev ","link":"https://eSparkL.top/research/28-%E8%8B%B1%E8%AF%AD%E5%B0%8F%E9%95%87%E9%A1%B9%E7%9B%AE/","section":"research","tags":["智能体","AI+教育"],"title":"28 英语小镇项目"},{"body":"","link":"https://eSparkL.top/tags/ai+%E6%95%99%E8%82%B2/","section":"tags","tags":null,"title":"AI+教育"},{"body":"","link":"https://eSparkL.top/categories/%E9%A1%B9%E7%9B%AE/","section":"categories","tags":null,"title":"项目"},{"body":"","link":"https://eSparkL.top/tags/%E6%99%BA%E8%83%BD%E4%BD%93/","section":"tags","tags":null,"title":"智能体"},{"body":"27-Windows系统使用\nwin + R : 快捷打开程序 常用： cmd ： 打开命令行窗口 %temp% : 清理C盘 sysdm.cpl : 配置环境变量 shell:startup ： 开机启动\nconda\n","link":"https://eSparkL.top/skill/27-windows%E7%B3%BB%E7%BB%9F%E4%BD%BF%E7%94%A8/","section":"skill","tags":null,"title":"27 Windows系统使用"},{"body":"","link":"https://eSparkL.top/categories/hugo/","section":"categories","tags":null,"title":"Hugo"},{"body":"26-numpy库\n","link":"https://eSparkL.top/skill/26-numpy%E5%BA%93/","section":"skill","tags":null,"title":"26 Numpy库"},{"body":"","link":"https://eSparkL.top/categories/numpy/","section":"categories","tags":null,"title":"Numpy"},{"body":"25-百度飞桨深度学习框架\n环境配置 python=3.9 paddlepaddle=2.6.2\n使用 paddlepaddle 3.0 会出现找不到某个库的问题\n基础","link":"https://eSparkL.top/skill/25-%E7%99%BE%E5%BA%A6%E9%A3%9E%E6%A1%A8%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E6%A1%86%E6%9E%B6/","section":"skill","tags":null,"title":"25 百度飞桨深度学习框架"},{"body":"","link":"https://eSparkL.top/categories/%E7%99%BE%E5%BA%A6%E9%A3%9E%E6%A1%A8/","section":"categories","tags":null,"title":"百度飞桨"},{"body":"24-Anaconda\n环境创建、激活、退出 1# 创建环境 2conda create -n [环境名] python=3.9 3 4# 激活环境 5conda activate [环境名] 6 7# 退出环境 8conda deactivate 包下载 1# 下载百度飞桨 2conda install -c paddlepaddle paddlepaddle=2.6.4 查看命令 ","link":"https://eSparkL.top/skill/24-anaconda/","section":"skill","tags":null,"title":"24 Anaconda"},{"body":"","link":"https://eSparkL.top/categories/anaconda/","section":"categories","tags":null,"title":"Anaconda"},{"body":"自己所用的各种提示词（科研、开发、比赛、写文案等），按功能分类\n论文代码复现 1. GitHub有源码、源码有README GPT-4.0 if I want to run this project, what should I do by starting with the following setting: [project link]：https://github.com/robert1ridley/cross-prompt-trait-scoring.git [操作系统]：Windows [编译器]：pycharm [python版本]：python 3.6 [CPU/GPU]：only CPU available [其他你现在已经完成的操作]：... please teach me step by step, as detail as you could Output the answer in chinese\n(venv) D:\\administrator\\College\\课后笔记\\SE-软工\\newsAPI_project\u0026gt;vue ui (node:23504) [DEP0040] DeprecationWarning: The punycode module is deprecated. Please use a userland alternative instead. (Use node --trace-deprecation ... to show where the warning was created)\n1在 nodejs v21.0.0 以上会出现该提示 2 3识别哪些依赖项要使用punycode 4npm ls punycode 5 6发现`-- (empty)，可能意味着没有吧，先不管了 vue ui创建项目报错Cannot read properties of undefined (reading 'indexOf')\n1缺少了yarn管理器，在cmd窗口安装一个yarn管理器即可 2npm install -g yarn ","link":"https://eSparkL.top/skill/23-%E6%8F%90%E7%A4%BA%E8%AF%8D%E5%B0%8F%E4%BB%93%E5%BA%93/","section":"skill","tags":null,"title":"23 提示词小仓库"},{"body":"","link":"https://eSparkL.top/categories/%E5%B0%8F%E4%BB%93%E5%BA%93/","section":"categories","tags":null,"title":"小仓库"},{"body":"阅读CEAES: Bidirectional Reinforcement Learning Optimization for Consistent and Explainable Essay Assessment的补充\n之前在吴恩达机器学习网课中学习的应该是基于价值的（Value-Based）的强化学习方法，即DQN。它是通过学习价值函数$V(s)$来间接地获得策略。\n而基于策略（Policy-Based）的方法则直接参数化并优化策略本身。为此设计了一个用参数$\\theta$控制的函数函数$\\pi_{\\theta}(a|s)$。目的是找到最优的参数 $\\theta^{\\ast}$ ，使策略 $\\pi_{\\theta^{\\ast}}$ 积累的回报最大化。\n","link":"https://eSparkL.top/research/22-%E7%A7%91%E7%A0%94-%E7%AD%96%E7%95%A5%E6%A2%AF%E5%BA%A6%E7%AE%97%E6%B3%95%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0/","section":"research","tags":["强化学习"],"title":"22 科研 策略梯度算法（强化学习）"},{"body":"","link":"https://eSparkL.top/tags/%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0/","section":"tags","tags":null,"title":"强化学习"},{"body":"用一个项目零基础熟悉 Unity 引擎的基本操作。 开发之旅任重道远，这只是个微不足道开头，最终目标是做出自己的项目来。\n个人学习记录，非系统学习，仅记录了对自己有用的东西。\n参考课程：b 站 siki 学院 视频链接：https://www.bilibili.com/video/BV15N41177JS/\nUnity 中的 Update 方法 查看帧率（即一秒执行多少次 Update 函数） 1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Player : MonoBehaviour 6{ 7 // Start is called before the first frame update 8 void Start() 9 { 10 Debug.Log(\u0026#34;Start运行了\u0026#34;); // 日志 11 } 12 13 private float updateCount = 0f; 14 private float timer = 0f; 15 private float updateRate = 0f; 16 17 // Update is called once per frame 18 // 每帧执行一次（flush），具体的帧率看电脑性能 19 void Update() 20 { 21 updateCount++; 22 timer += Time.deltaTime; 23 24 if (timer \u0026gt;= 1f) 25 { 26 updateRate = updateCount / timer; 27 updateCount = 0f; 28 timer = 0f; 29 } 30 } 31 32 void OnGUI() 33 { 34 // 每秒调用多少次 35 GUI.Label(new Rect(10, 10, 200, 20), \u0026#34;Update Rate:\u0026#34; + updateRate.ToString(\u0026#34;F2\u0026#34;) + \u0026#34;updates/s\u0026#34;); 36 } 37} 键盘控制 1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Player : MonoBehaviour 6{ 7 public Rigidbody rd; // 定义刚体属性 8 9 // Start is called before the first frame update 10 private void Start() 11 { 12 Debug.Log(\u0026#34;Start运行了\u0026#34;); // 日志 13 } 14 15 // Update is called once per frame 16 // 每帧执行一次（flush），具体的帧率看电脑性能 17 private void Update() 18 { 19 float h = Input.GetAxisRaw(\u0026#34;Horizontal\u0026#34;); 20 float v = Input.GetAxisRaw(\u0026#34;Vertical\u0026#34;); 21 22 Vector3 dir = new Vector3(h, 0, v); 23 rd.AddForce(dir * 3); 24 } 25} ","link":"https://eSparkL.top/skill/20-unity-%E6%BB%9A%E5%8A%A8%E7%9A%84%E5%B0%8F%E7%90%83/","section":"skill","tags":null,"title":"20 Unity 滚动的小球"},{"body":"","link":"https://eSparkL.top/categories/unity/","section":"categories","tags":null,"title":"Unity"},{"body":"考试范围：\n概率论 第1章 统计学的基础知识 概率论 第2章 随机变量的分布与数字特征 概率论 第3章 随机向量 复习进度：\n6.7 第3章基础 大数定理与中心极限定理 大数定理 理论前提：当实验的次数 $n$ 足够多时，随机变量的和会收敛趋近于期望 $E(X)$\ndd\n","link":"https://eSparkL.top/%E6%A6%82%E7%8E%87%E8%AE%BA%E6%9C%9F%E6%9C%AB%E5%A4%8D%E4%B9%A0.html","section":"study","tags":null,"title":"15 概率论期末复习"},{"body":"","link":"https://eSparkL.top/categories/%E6%A6%82%E7%8E%87%E8%AE%BA/","section":"categories","tags":null,"title":"概率论"},{"body":"","link":"https://eSparkL.top/categories/%E8%AE%A1%E7%BD%91/","section":"categories","tags":null,"title":"计网"},{"body":"19-思科第六章小测-应用层\n下列哪种方法被认为是缓解蠕虫攻击的最有效方法？ 在哪两个接口或端口上可以通过配置执行超时设置来提高安全性？（请选择两项。） 技术人员要记录一所大学中所有网络设备的当前配置，包括校园外的建筑物中的设备。为了安全地访问网络设备，最好使用哪一项协议？ 必须在路由器上配置哪个命令才能完成 SSH 配置？ 以下对 ping 和 tracert 命令的描述哪一项是正确的？ 在路由器上配置 SSH 以实施安全的网络管理时，网络工程师已发出 login local 和 transport input ssh vty 线路命令。要完成 SSH 配置，必须执行下列哪三项额外的配置操作？（选择三项。） 将信息安全威胁类型与场景配对。 （并非所有选项都会用到） 在哪种类型的攻击中，攻击者会试图收集关于网络的信息来识别漏洞? 病毒与蠕虫之间的区别是什么？ 当应用到路由器时，下列哪个命令可以缓解对路由器的暴力密码攻击？ 哪种攻击涉及两个端点之间发生的数据泄露？ 把缺陷和例子进行匹配。（并非全部选项都要用到）。 某用户正在为一家小公司重新设计网络，并希望以合理的价格确保安全性。该用户在 ISP 连接上部署具有入侵检测功能的新应用感知防火墙。该用户还安装了第二个防火墙，以将公司网络与公共网络分离。此外，该用户还在公司的内部网络上安装了 IPS。该用户实施的是哪种方法？ IPS 的作用是什么？ 把描述与防火墙过滤的类型进行匹配。（并非全部选项都要用到）。 哪种防火墙功能用于确保传入网络的数据包是对内部主机所发出请求的合法响应？ 相较于 Telnet，使用 SSH 有什么优势？ 管理员决定使用 “WhatAreyouwaiting4\u0026quot; 作为新安装的路由器上的密码。哪种叙述适用于密码选择？ 从路由器 R1 到直接相连的路由器 R2 执行 ping 操作失败。网络管理员随即发出 show cdp neighbors 命令。网络管理员为什么要在两台路由器之间 ping 操作失败后发出此命令？ 哪项网络服务自动为网络上的设备分配 IP 地址？ 网络工程师正在分析来自最近实施的网络基线的报告。 以下哪种情况描述了可能的延时问题？ 请参见图示。一家小公司的基线文档显示出，在主机 H1 和 H3 之间 ping 往返时间统计信息为 36/97/132。今天，网络管理员通过主机 H1 和 H3 之间的 ping 检查连接，产生了 1458/2390/6066 的往返时间。这对网络管理员意味着什么? 要将调试消息发送到 vty 线路，管理员可在思科路由器上发出哪个命令？ 网络技术人员在一台 Windows PC 上发出 C:\u0026gt; tracert -6 www.cisco.com 命令。 -6 命令选项的作用是什么？ 管理员可以执行哪个命令来确定路由器会使用哪个接口来访问远程网络？ 请参见图示。一名管理员正在测试到一台远程设备（IP 地址 10.1.1.1）的连接。此命令的输出表示什么？ 下列有关 Cisco IOS ping 指示符的陈述哪一项是正确的？ 哪个是有关冗余的准确描述？ 网络管理员为什么要使用 tracert 实用程序？ 要允许日志消息在使用 Telnet 或 SSH 实现的远程连接会话中显示，应该在思科路由器或交换机上使用哪个命令？ 使用 show version 命令可以验证有关思科路由器的哪些信息？ 用户抱怨他们无法浏览互联网上的某些网站。管理员可以通过 Web 服务器的 IP 地址成功 ping 通 Web 服务器，但无法浏览到网站的域名。哪种故障排除工具在确定出现问题的位置时最有用？ 请参见图示。主机 H3 在与主机 H1 通信时遇到了问题。网络管理员怀疑 H3 工作站存在问题，并希望证明 R2 的配置没有问题。网络管理员可以在路由器 R2 上使用哪种工具来证明从 R2 的接口（到 H3 与远程网络进行通信时使用的接口）到主机 H1 的通信没问题？ 用户报告无网络连接。技术人员控制用户计算机，并尝试对网络中的其他计算机执行 ping 操作，这些 ping 操作都是失败的。技术人员对默认网关执行 ping 操作也失败了。根据这些测试的结果可以肯定存在什么状况？ 教师在把电脑连接到教室网络时遇到了困难。他需要验证默认网关是否配置正确。能够完成任务的最佳命令是什么？ 参考资料 https://blog.csdn.net/weixin_45395059/article/details/125162380 （所有模块，较全面）\nhttps://www.cfanz.cn/resource/detail/DBGWRKPBYqmpv （较全面）\nhttps://blog.csdn.net/weixin_68310290/article/details/124412814\nhttps://blog.csdn.net/weixin_51293984/article/details/125132647\nhttps://blog.csdn.net/weixin_43233174/article/details/106520812\nhttps://blog.csdn.net/Jessieeeeeee/article/details/117656254 （有解答，vip）\n","link":"https://eSparkL.top/study/19-%E6%80%9D%E7%A7%91%E7%AC%AC%E5%85%AD%E7%AB%A0%E5%B0%8F%E6%B5%8B-%E5%BA%94%E7%94%A8%E5%B1%82/","section":"study","tags":null,"title":"思科第六章小测 应用层"},{"body":"18-思科第五章小测-传输层\nTCP 报头中的哪个字段表示三次握手过程的状态？ 下列哪三项陈述说明了 UDP 的特征? （选择三项。） 下列哪三个字段在 UDP 数据段报头中使用？（请选择三项。） UDP 具有哪项特点？ TCP/IP 封装过程中如何使用端口号？ 当客户端需要发送 UDP 数据报时，会执行什么操作？ 在哪两种情况下，UDP 协议优于 TCP 协议，用作首选的传输协议？（选择两项。） TCP/IP 传输层报头中会添加什么重要信息，以确保与远程网络设备的通信和连接？ TCP 使用什么信息来重组和重新排序收到的数据段？ 以下哪两个特征与 UDP 会话相关？（选择两项。） 哪两种类型的应用程序最适合 UDP？（选择两项。） 哪个因素决定 TCP 窗口大小？ 下列哪三项是传输层的职责？（选择三项。） 一台 PC 从服务器下载一个大文件。TCP 窗口大小为 1000 字节。服务器使用 100 字节的数据段发送文件。服务器发送多少个数据段后会要求 PC 确认？ 客户端创建了要发送到服务器的数据包。客户端正在请求 SMTP 服务。发送数据包中的目的端口号是什么？ 与 Web 服务器通信的 PC 在发送数据时使用 6000 字节的 TCP 窗口大小和 1500 字节的数据包大小。当 Web 服务器收到来自 PC 的三个数据包后，它会确认哪个字节的信息? OSI 模型的哪三层提供类似于 TCP/IP 模型的应用层提供的网络服务？（请选择三项。） 下列哪种场景描述了传输层提供的功能？ 有关服务器消息块协议的说法哪项正确？ 哪些应用程序或服务允许主机同时充当客户端和服务器？ 哪个应用层协议使用 GET、PUT 和 POST 等消息类型？ 哪三种协议在 TCP/IP 模型的应用层工作？（选择三项。） 当一位作者将包含一章内容的文档上传到某图书出版商的文件服务器时，使用哪种网络模型？ IOS 哪一层为用于通信的应用程序和用于消息传输的底层网络提供接口？ TCP/IP 模型的应用层执行的功能与 OSI 模型的哪三层执行的功能相同？ （选择三项。） 对等网络模型的关键特征是什么？ 下列哪三项正确描述了 DHCP 发现报文？（请选择三项。） HTTP GET 消息的作用是什么？ 设备在发送邮件的应用过程中可能会使用哪两种协议？（选择两项。） 在什么样的网络模型中使用 eDonKey、eMule、BitTorrent、比特币和 LionShare？ 下列哪项是采用客户端-服务器模型的网络通信示例？ 客户端使用哪种协议来与 Web 服务器进行安全通信？ ","link":"https://eSparkL.top/study/18-%E6%80%9D%E7%A7%91%E7%AC%AC%E4%BA%94%E7%AB%A0%E5%B0%8F%E6%B5%8B-%E4%BC%A0%E8%BE%93%E5%B1%82/","section":"study","tags":null,"title":"思科第五章小测 传输层"},{"body":"关系数据库的设计\n以思维导图的方式进行梳理。 这章主要是概念和理念类的东西很多（和软工一样），需要自己多练习和推导。 ps. 课上实在是太困了，没有跟上思路（不预习的恶果QAQ）\n好的关系设计的特点 没有数据冗余 使用函数依赖进行分解 函数依赖 分解 有损分解 无损分解 定义 ？？？？ 自己理解：拆分后再通过自然连接等方式进行合并后，不会存在信息丢失。 范式 BC范式 ? 什么是BC范式 在函数依赖领域最为严格的 第三范式 BC范式虽然非常规范，但是有时候存在以下问题 不能保留原来的依赖关系 函数依赖理论 像离散数学一样，有些普遍适用的推论 使用函数依赖的分解算法（还没讲） 数据库设计过程（还没讲）","link":"https://eSparkL.top/study/14-%E6%95%B0%E6%8D%AE%E5%BA%93%E7%AC%AC8%E7%AB%A0/","section":"study","tags":null,"title":"14 数据库第8章"},{"body":"","link":"https://eSparkL.top/categories/%E6%95%B0%E6%8D%AE%E5%BA%93/","section":"categories","tags":null,"title":"数据库"},{"body":"在跟踪从 PC1 到 PC2 的路由时，显示的三个 IPv6 地址是什么? （选择三项。） 请将每个描述与相应的 IP 地址进行配对。（并非全部选项都要用到）。 子网掩码 255.255.255.224 的前缀长度记法如何表示？ 下列哪个地址是 IP 地址3FFE:1044:0000:0000:00AB:0000:0000:0057 最短的缩写？ 哪一项是 IPv6 地址 fe80:0000:0000:0000:0220:0b3f:f0e0:0029 的简写格式？ 被坑啦！\n","link":"https://eSparkL.top/study/13-%E6%80%9D%E7%A7%91%E7%AC%AC%E5%9B%9B%E7%AB%A0%E5%B0%8F%E6%B5%8B-ip%E5%AF%BB%E5%9D%80/","section":"study","tags":null,"title":"思科第四章小测 IP寻址"},{"body":"","link":"https://eSparkL.top/categories/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B/","section":"categories","tags":null,"title":"软件工程"},{"body":"进程视图 面向系统架构师和开发人员\n适用于多进程多视图，关注系统的并发性、分布性、性能和资源分配\n形式\nUML类图 进程间的交互\n进程间的交互可以用时序图表示 单线程的Web服务器\n多线程的Web服务器\n每来一个连接，创建一个线程。从线程池中分配空余的线程 多线程协作 线程同步 进程通信 死锁的预防、检测和解除 AWS ELB（弹性负载均衡器）Amazon Web Services提供的负载均衡服务\n活动图\n哪些进程 中间件 进程间信息的交互 部署图\n开发视图 关注\n模块划分 文件组织 依赖关系 构建过程 分层架构描述\nUML——包图 源代码目录结构\n包图\n按业务逻辑分 适合综合性强的团队 按功能性需求分 依赖其他模块，调试困难 构件图\n关注系统的逻辑结构（物理部署由部署图描述） 构件和类 相似： 不同：类（逻辑），构件（物理） UML package::component ○供给接口 半圆是需求接口 装配：$--(○$ 要素 构件 接口库 接口 端口 关系 图标形式、或interface形式\n连接件\n直连 代理连接 依赖和实现关系 虚线箭头、实现镜头 部署视图 非功能性需求\n关注\n软件节点 硬件 逼数 运行 寻访环境 部署时，尽量不要动源代\n开发和测试、生产的环境是有不同的\n向外开放，浏览请求增多时，并发性差\n部署图\n元素 节点 工件 通信路径 场景视图 “4+1”的“+1”部分 用例图、序列图 作用 验证其他4个视图 逻辑视图 开发视图 进程视图 部署视图 将其他四个视图整合到一起，展示他们是如何协同工作的 和甲方沟通 使用 优先关键场景 高频使用场景 绘制其交互图 检查其他四个视图是否一致，是否满足场景需求 调整其他四个视图，保持一致性 沟通 视图的选择 有所侧重 Web：逻辑视图、开发视图 并发：进程视图、物理视图 单击：部署视图（多余） 单进程视图：进程视图（多余） 额外新添视图 技术视图（可以画） 技术选型：编程语言、操作系统、数据库、框架、中间件、库 数据视图 ER O-R Mapping技术 解决对象与数据库模型不匹配问题，实现对象和记录之间的转换 核心功能 持久化 查询 关系管理 上下文视图 顶层的数据流程图 行为视图 安全视图 性能视图 运营视图 业务视图 非功能性 可用性的策略 错误检测 方法 被动式查错。设置检查点 主动式查错。规定时间检错 技术 命令（双工） 心跳（单工） 异常 错误恢复 策略 备份 热。主系统和备份系统同时运作，只有主系统返回结果，丢弃备份系统的结果 暖。主系统将结果发送给备份系统用于状态同步，备份系统不进行处理。 正在进行未结束的进程无法恢复 闲置。周期性地在持久性介质上创建检查点。 修复 影子修复 检查点修复 错误预防 研发时 运维时 可维护性策略 局部化修改 防止涟漪效应 推迟绑定时间 性能策略 资源请求：降低系统处理所有事件时对资源的需求 资源管理：提高资源的利用效率 并发。相应出现临界资源分配的问题 数据库副本。额外考虑一致性 增加可用的资源 资源仲裁 安全性 抵御攻击 认证授权 数据加密 检测攻击 在攻击中恢复 可测试性 易用性 课后熟悉UML符号\n软件质量 SOLID 面向对象的设计原则 单一职责 只有一个是导致变更的原因 一个类就是一个职责 开闭原则 封装可变点 LSP 子类应该替换基类 ISP原则 接口隔离 接口不能做得过于庞大 DIP依赖倒置 高层模块不应该依赖低层模块。即细节在低层，高层不需要考虑低层？低层服务高层 CARP复用 尽量用组合聚合复用，不要用继承（继承有很多毛病，继承会破坏封装，会把父类的实现细节暴露给子类，父类变，子类跟着变） 缺点：组合和聚合的关系比较复杂 Coad法则 子类能完全替代父类，就是好的继承 只有满足 子类是超类的特殊种类，has-A 和 is-A 只有 is-A 才符合继承关系 子类具有扩展超类的责任，是扩展，不是替换 LoD迪米特法则 最少知识原则，一个对象应该只知道与自己直接相连的对象交互，对其他对象不需要知道其内部 总结 SRP单一职责原则 OCP开闭原则 LSP里氏代换原则 DIP依赖倒置原则 ISP接口隔离原则 CARP组合聚类原则 LoD迪米特法则 设计模式（基础：GoF） Design Pattern 划分方法一（按目的，划分为三大类）\n创建型模式 关键对象的创建过程 工厂方法 适用场景：在运行时才确定需要创建的对象类型 抽象工厂 适用场景：对个相关产品的家族，e.g.UI组件；系统有多余一个的产品族，系统只消费其中某一产品族 建造者模式 Builder 结构 产品 抽象建造者：定义构造产品的抽象步骤 具体建造者：实现抽象建造者，返回具体的部件并构建返回产品 指导者：调用建造者的方法，调整 使用：复杂对象，组成部件会变化，但组成的过程不会变化。 不要在指导Director里返回产品Product 职责分离 明确Factory和Director 灵活性和封装性 可选的Director角色 适用场景：复杂的内部结构，每一个内部结构成分本身可以是对象，也可以是一个对象的组成部分。 原型模式 Prototype 适用场景：大量类似的对象，减少重复初始化的开销 关键机制： 深拷贝：包含引用（如列表、对象），创建完全独立的新实例，缺点：开销大 实现方式 手动拷贝 序列化 第三方库 浅拷贝：简单的结构，对引用类型仍指向源对象（共享），JAVA的Object.clone()属于这一种 JAVA语言天生支持原型模式 原型管理器 单例模式 饿汉法 懒汉法 适配器模式 在不改变原有实现上，让不兼容接口转变为兼容接口 实现方式 类适配器 对象适配器 桥接名词 结构型模式 处理类或对象的组合方式 模式列表7种 ... 行为性模型 关注类和对象之间的交互方式及职责分配 模式列表11种 划分方法二（按作用域，划分为动静两类）\n类模式（静态） 对象模式（动态） ","link":"https://eSparkL.top/study/12-%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B5.21/","section":"study","tags":null,"title":"软件工程5.21"},{"body":"(venv) D:\\administrator\\College\\课后笔记\\SE-软工\\newsAPI_project\u0026gt;vue ui (node:23504) [DEP0040] DeprecationWarning: The punycode module is deprecated. Please use a userland alternative instead. (Use node --trace-deprecation ... to show where the warning was created)\n1在 nodejs v21.0.0 以上会出现该提示 2 3识别哪些依赖项要使用punycode 4npm ls punycode 5 6发现`-- (empty)，可能意味着没有吧，先不管了 vue ui创建项目报错Cannot read properties of undefined (reading 'indexOf')\n1缺少了yarn管理器，在cmd窗口安装一个yarn管理器即可 2npm install -g yarn 使用SMTP服务时，出现SMTPAuthenticationError\n1原因是身份验证错误，检查一下项目中的邮箱配置是否正确，尤其注意EMAIL_HOST_PASSWORD，是开启服务时给你的授权码，不是平时的登录密码！！！不是平时的登录密码！！！不是平时的登录密码！！！ (venv) D:\\administrator\\College\\课后笔记\\News-recommendation-system\\e2\\newsAPI_project\u0026gt;redis-cli ping\n(error) NOAUTH Authentication required.\n1在 redis.windows.conf 文件中配置了密码，但是在终端执行命令时未提供。加上 -a your_passoword 即可。 报错信息\n1TypeError: Object of type set is not JSON serializable 错误代码\n1UserKeyword.objects.create( 2 user=self.user, 3 name={\u0026#39;Trump\u0026#39;, \u0026#39;Biden\u0026#39;}, # ← 这里用了 set（不合法） 4 place={\u0026#39;USA\u0026#39;, \u0026#39;Washington\u0026#39;}, 5 organization={\u0026#39;White House\u0026#39;} 6) 错误分析\n{'Trump', 'Biden'} 是一个 set\n而 Django 的 JSONField 在保存时会调用 Python 内置的 json.dumps() 来序列化数据\nset 类型不能被 json.dumps() 序列化，因此报错：\n解决办法\n将所有 set 换成 list\n配置环境 pip install tensorflow==2.0.0 时，报错 ValueError: check_hostname requires server_hostname\n1解决办法：关闭代理服务器（VPN） 在安装 spacy==2.2.4 时，出现 cymem 和 murmurhash 编译失败的报错。\n1解决办法： 21. 更换为python 3.7 环境 32. 逐个安装 spacy 2.2.4 依赖的固定版本 4pip install cymem==2.0.3 murmurhash==1.0.2 preshed==3.0.2 thinc==7.4.0 blis==0.4.1 53. pip install spacy==2.2.4 原因分析：缺少 Windows 的 io.h 头文件，无法编译 cymem 和 murmurhash 这两个底层 C 扩展。PyPI 上很多依赖（cymem、murmurhash 等）已经不再为 Py3.6 提供预编译的 Windows wheel，只能强行从源码编译 → 导致需要 MSVC 编译环境 + 头文件。\n配置好README.md环境后，在执行train_CTS.py文件时出现TypeError: Descriptors cannot not be created directly.由于Found existing installation: protobuf 4.24.4，与tensorflow版本不兼容\n1# 卸掉现有的版本 2pip uninstall protobuf 3# 安装适合的版本 4pip install protobuf==3.20.3 5# 锁定版本，避免以后自动升级（可选） 6pip install \u0026#34;protobuf\u0026lt;3.21,\u0026gt;=3.20.0\u0026#34; Resource averaged_perceptron_tagger not found. Please use the NLTK Downloader to obtain the resource: /\u0026gt;\u0026gt;\u0026gt; import nltk /\u0026gt;\u0026gt;\u0026gt; nltk.download('averaged_perceptron_tagger')\n代码在用 nltk.pos_tag()，但是 缺少 NLTK 的词性标注模型 averaged_perceptron_tagger\n1按照提示来做就好： 2python 3import nltk 4nltk.download(\u0026#39;averaged_perceptron_tagger\u0026#39;) 5exit() ","link":"https://eSparkL.top/skill/11-%E6%8A%A5%E9%94%99%E5%B0%8F%E4%BB%93%E5%BA%93/","section":"skill","tags":null,"title":"报错小仓库（持续更新）"},{"body":"","link":"https://eSparkL.top/categories/django/","section":"categories","tags":null,"title":"Django"},{"body":"","link":"https://eSparkL.top/tags/%E5%A4%A7%E4%BA%8C/","section":"tags","tags":null,"title":"大二"},{"body":"","link":"https://eSparkL.top/tags/%E5%A4%A7%E4%BD%9C%E4%B8%9A/","section":"tags","tags":null,"title":"大作业"},{"body":" 后端：Django\n参考：https://www.bilibili.com/video/BV19spseGE9Y?spm_id_from=333.788.videopod.episodes\u0026vd_source=ae5b8f4c462b3f90ff8881691bdf718b\u0026p=2\n常用命令汇总 1## 创建Django项目 2django-admin startproject project_name 3 4## 创建Django应用 5python manage.py startapp app_name 6 7## 生成数据库迁移文件 8python manage.py makemigrations [app_name] 9 10## 执行迁移文件 11python manage.py migrate [app_name] 12 13## 查看迁移状态（[ ] 表示未应用 [X] 表示已应用） 14python manage.py showmigrations [app_name] 15 16## 清除缓存 17python manage.py clearcache 18 19## 测试用开发服务器 20python manage.py runserver 21 22## 查看已注册路由 23python manage.py show_urls 24 25# 启动 Redis 26redis-server.exe redis.windows.conf 27 28# 在项目终端进行 Redis 连接测试 29redis-cli ping 30# 如有跟着博客配置密码 31redis-cli -a your_password ping 32# 返回 PONG 即说明Redis成功运行 33 34# 启动 Celery Worker（添加参数 -P） 35celery -A nrsmAPI_project worker -l info -P eventlet 36 37# 再启动 Celery Beat 38celery -A nrsmAPI_project beat --loglevel=info 开发接口尽可能遵循Restful规范： 前端架构搭建 node 和 npm 和 vue 版本 (venv) D:\\administrator\\College\\课后笔记\\SE-软工\\newsAPI_project\u0026gt;node -v v22.11.0\n(venv) D:\\administrator\\College\\课后笔记\\SE-软工\\newsAPI_project\u0026gt;npm -v 10.9.0\n(venv) D:\\administrator\\College\\课后笔记\\SE-软工\\newsAPI_project\u0026gt;vue --version @vue/cli 5.0.8\n1## 启动项目 2npm run serve JWT前后端交互 DRF框架\n1## 安装drf 2pip install djangorestframework -i https://pypi.tuna.tsinghua.edu.cn/simple 3 4## 安装drf-jwt 5pip install djangorestframework-jwt -i https://pypi.tuna.tsinghua.edu.cn/simple 跨域问题 前后端不在同一个域\nCORS（跨域资源共享，Cross-Origin Resource Sharing）是一种跨域访问的机制，可让Ajax实现跨域 访问。\n1## 安装django-cors-headers库 2pip install django-cors-headers -i https://pypi.tuna.tsinghua.edu.cn/simple 前端登录静态界面 attest文件夹下方静态资源，如全局css样式、网页背景图片等\nview下每一个.vue文件是一个页面，新建Login.vue\nrouter/index.js中加上Login.vue的路由 App.vue相当于是主界面 App.vue设置下全局样式 自定义icon实现 （略过）\nDjango局域网访问 参考博客：https://blog.csdn.net/sandalphon4869/article/details/107601765\n1python manage.py runserver 0.0.0.0:8000 后端登录功能逻辑实现 流程：\n前端传递参数 后端验证 验证成功后，生成jwt 将状态码和token传回给前端 前段将token加入请求头的AUTHORIZATION字段中 注意model中的属性名要和view中的一致，否则会出现500错误。 先建数据库，再写后端容易出现此类问题\n以及如果重新执行迁移文件发现无法No migrations to apply.，则在数据库中drop掉django_migrations表（delete对应迁移记录也可以），再重新运行python manage.py migrate [app]\n上传GitHub requirements.txt 将当前功能git到仓库，并撰写README.md文档\n环境依赖文件生成\n1## 法一：环境中所有的包 2pip freeze \u0026gt; requirements.txt 3 4## 法二：如果仅保留项目必需的包，可使用pipreqs 5pip install pipreqs ## 安装pipreqs（如已安装则跳过） 6pipreqs . 使用.env管理环境变量 Django项目根目录下的settings.py文件存储有很多敏感信息，包括数据库的ip、密码，密钥，邮件服务密钥等。在提交到GitHub前，应先对其进行处理。\n创建.env文件，定义所需的环境变量，通常与manage.py文件在同目录下\n1## .env 2 3## Django 设置 4SECRET_KEY= 5DEBUG=False 6TIMEZONE= 7 8## 允许的域名 9ALLOWED_HOSTS= 10 11## 数据库配置 12ENGINE= 13NAME= 14USER= 15PASSWORD= 16HOST= 17PORT= 18 19## Celery / Redis 20CELERY_BROKER_URL= 21CELERY_RESULT_BACKEND= 1## 安装python-dotenv库，用于读取.env中的环境变量 2pip install python-dotenv 3 4## settings.py 5import os 6from dotenv import load_dotenv 7load_dotenv() ## 加载 .env 文件 8 9## 使用 os.getenv(\u0026#39;.env中对应的键\u0026#39;) 替换敏感信息 查看自己的下载源 1pip config list 本项目用的是 global.index-url='https://pypi.tuna.tsinghua.edu.cn/simple'\n新闻浏览 1## 创建空迁移文件(由于需要在建表的同时插入初始值，非空限制) 2python manage.py makemigrations --empty news 3 4## 安装Django扩展包（Django版本从Django-4.1.13变为了django-4.2.21） 5pip install django-extensions 6 7## 查看已注册路由 8python manage.py show_urls 基于游标的新闻列表分页 单条新闻详情 出现了500，服务器内部无法响应的问题，多半与数据库连接有关\n打印错误 Unknown column 'news_tag.id' in 'field list'\n在终端执行以下语句，返回正常，排除了数据库连接/连接错误的问题\n1python manage.py shell 2 3from news.models import News 4 5## 查询 id=1 的新闻对象 6news = News.objects.get(id=1) 7 8## 打印新闻标题等信息 9print(news.id) 10print(news.title) 11print(news.body) 12print(news.pub_time) 13print(news.website) 14print(news.url) 15print(news.images) 16print(news.summary) 问题出在news_tag表与model定义不匹配，缺少了Django自加的id字段。解决方法：\n手动在数据库增加id字段。但由于已经有外键依赖，总之就是不给我加。 修改model定义。但似乎修改后不行 找出哪里用到了id。√ 发现是序列化时，尽管没有显式访问id字段，但是在某个语句背后有访问到。尝试绕过id字段的访问即可。AI修改如下\n1class NewsSerializer(serializers.ModelSerializer): 2 tags = serializers.SerializerMethodField() 3 4 class Meta: 5 model = News 6 fields = [\u0026#39;id\u0026#39;, \u0026#39;title\u0026#39;, \u0026#39;body\u0026#39;, \u0026#39;pub_time\u0026#39;, \u0026#39;website\u0026#39;, \u0026#39;url\u0026#39;, \u0026#39;images\u0026#39;, \u0026#39;tags\u0026#39;] 7 def get_tags(self, obj): 8 return list(obj.newstag_set.select_related(\u0026#39;tag\u0026#39;).values_list(\u0026#39;tag__ch_name\u0026#39;, flat=True)) 1## 报错的代码 2## models.py 3class NewsTag(models.Model): 4 news = models.ForeignKey(News, on_delete=models.CASCADE, db_column=\u0026#39;news_id\u0026#39;) 5 tag = models.ForeignKey(Tag, on_delete=models.CASCADE, db_column=\u0026#39;tag_id\u0026#39;) 6 7 class Meta: 8 db_table = \u0026#39;news_tag\u0026#39; 9 unique_together = ((\u0026#39;news\u0026#39;, \u0026#39;tag\u0026#39;), ) 10 11## serializers.py 12class NewsSerializer(serializers.ModelSerializer): 13 tags = TagSerializer(source=\u0026#39;newstag_set\u0026#39;, many=True, read_only=True) 14 15 class Meta: 16 model = News 17 fields = [\u0026#39;id\u0026#39;, \u0026#39;title\u0026#39;, \u0026#39;body\u0026#39;, \u0026#39;pub_time\u0026#39;, \u0026#39;website\u0026#39;, \u0026#39;url\u0026#39;, \u0026#39;images\u0026#39;, \u0026#39;tags\u0026#39;] 来分析一波\ntags = TagSerializer(...) 背后的机制为\n首先news.newstag_set.all() ## 获取该新闻对应的所有 NewsTag 对象\n然后通过 TagSerializer 提取每个 NewsTag 对象中的 .tag 字段进行序列化。\n也就是说，它会访问 news_tag 表中的记录，默认情况下会加载所有字段（包括 id），即使你没用到它。\n教训\n尽可能从后端建表，不然就会出现很多这样那样的问题\n潜在问题：\n如果从后端在news_tag中创建新的数据，可能会再次报错。不过由于目前新闻分类的操作由独立的python脚本完成，因此暂时可以睁一只眼闭一只眼。\n标签列表 很简单，只要返回tag表中的所有对象（为了方便先序列化）即可\n兴趣推送 实现过程 明确实现步骤\n每天在 feedtime 为每个用户推送新发布的新闻。 推送内容根据用户的兴趣标签过滤。 使用 Celery 定时任务 + Redis。 使用增强版 FeedLog 记录每条新闻的推送记录。 首先在用户模块添加用户兴趣设置和获取用户兴趣模块。目前仅基于分类标签（为简化，暂时不考虑实体）\n由于推送功能相对独立，为方便管理，新建一个app\n1python manage.py startapp feed 老操作，配置setting和路由\n1## nrsmAPI_project/settings.py 2INSTALLED_APPS = [ 3 ... 4 \u0026#39;feed.apps.FeedConfig\u0026#39;, 5] 6 7## nrsmAPI_project/urls.py 8urlpatterns = [ 9 ... 10 path(\u0026#39;feed/\u0026#39;, include(\u0026#39;feed.urls\u0026#39;)), ## 推送模块 11 ... 12] 1## 安装实现定时任务的依赖 2pip install celery redis 3 4## 安装管理定时任务的依赖 5pip install django-celery-beat 注意：用户可以不选择设置兴趣标签，则系统不会推送。但是在SRS里好像写的是必须选择三个以上的标签（尬）。总之，后端对无标签的情况是有处理的。比如可能后面用户自己去主页取消了兴趣勾选。\n迁移数据库 由于需要插入一些测试数据，为了避免把服务器上的数据库搞乱，考虑将数据库备份到本机上\n使用命令行（失败） 1## 导出数据库 2mysqldump -h 192.168.207.77 -u root -p nrsm \u0026gt; nrsm_backup.sql 3 4## 输入密码 5 6## 在本地 7## 创建备份数据库 8create database nrsm; 9 10## 查看数据库是否创建成功 11show database; 12 13## 切换到备份数据库 14use nrsm; 15 16## 使用source命令导入SQL文件（根目录为当前mysql命令窗口所在的目录） 17source nrsm_backup.sql; 出现问题，查看数据库发现仅由部分数据导入成功 改为使用mysql命令\n1mysql -u root -p nrsm_tt \u0026lt; nrsm_backup.sql 问题仍然存在 使用mysql workbench（成功） 直接使用mysql workbench的Export和Import功能\n备份成功！\n邮件发送功能 一上来就搞“定时 + 邮件 + 兴趣过滤”不好测试（主要是对其中的流程不熟，一旦出错难以定位问题），因此决定先实现邮件推送功能。\n使用的邮箱为163（QQ也可以）\n参考博客：\nhttps://blog.csdn.net/KaiSarH/article/details/116724290 https://blog.csdn.net/weixin_42677653/article/details/114535724 Django邮件功能主要基于SMTP协议。基本原理为\n授权邮箱给Django 向对应收件人发送邮件 django.core.mail封装了电子邮件的自动发送SMTP协议 开通SMTP服务 1## settings.py 2 3## 邮件配置 4EMAIL_BACKEND = \u0026#39;django.core.mail.backends.smtp.EmailBackend\u0026#39; 5EMAIL_USE_TLS = True ## 是否使用TLS安全传输协议(用于在两个通信应用程序之间提供保密性和数据完整性) 6EMAIL_USE_SSL = False ## 是否使用SSL加密，qq企业邮箱要求使用，163邮箱设置为True的时候会报ssl的错误 7EMAIL_HOST = \u0026#39;smtp.163.com\u0026#39; ## 发送邮件的邮箱的SMTP服务器，这里用的是163邮箱 8EMAIL_PORT = 25 ## 发件箱的SMTP服务器端口，默认是25 9EMAIL_HOST_USER = \u0026#39;test@163.com\u0026#39; ## 发送邮件的邮箱地址 10EMAIL_HOST_PASSWORD = os.getenv(\u0026#39;EMAIL_HOST_PASSWORD\u0026#39;) ## 发送邮件的邮箱密码(这里使用的是授权码) 邮件发送测试 通过view测试。这里用了自己的163发送给自己的qq邮箱\n1## feed/utils.py 2import os 3from django.core.mail import send_mail 4from dotenv import load_dotenv 5load_dotenv() ## 加载 .env 文件 6def send_mail_test(): 7 print(\u0026#34;开始发送邮件...\u0026#34;) 8 send_mail(\u0026#39;邮件主题\u0026#39;, 9 \u0026#39;邮件内容\u0026#39;, 10 os.getenv(\u0026#34;EMAIL_HOST_USER\u0026#34;), 11 [\u0026#39;test_1@domain.com\u0026#39;, \u0026#39;test_2@domain.com\u0026#39;], ## 这里可以同时发给多个收件人 12 fail_silently=False 13 ) 14 15 print(\u0026#34;发送邮件成功!\u0026#34;) 1## feed/views.py 2class EmailTestView(APIView): 3 def get(self, request): 4 send_mail_test() 5 return JsonResponse({\u0026#34;code\u0026#34;: 200, \u0026#34;info\u0026#34;: \u0026#34;邮件发送成功\u0026#34;}) 1## feed/urls.py 2from django.urls import path 3from feed.views import EmailTestView 4 5urlpatterns = [ 6 ... 7 path(\u0026#39;email_test/\u0026#39;, EmailTestView.as_view(), name=\u0026#39;email-test\u0026#39;), ## 邮件发送测试 8] postman测试\n1http://127.0.0.1:8000/feed/email_test/ 错误：SMTPAuthenticationError\n原因是身份验证错误，检查一下settings.py中的邮箱配置是否正确，尤其注意EMAIL_HOST_PASSWORD，是开启服务时给你的授权码，不是平时的登录密码！！！不是平时的登录密码！！！不是平时的登录密码！！！\n定时邮件发送（django-background-tasks 失败） 参考博客：https://deepinout.com/django/django-questions/271_django_how_to_use_djangobackgroundtasks.html\n使用Django自带的插件django-background-tasks\n1# 安装django-background-tasks插件 2pip install django-background-tasks 1# settings.py 2INSTALLED_APPS = [ 3 ... 4 # 后台任务 5 \u0026#39;background_task\u0026#39; 6] 1# 生成 background_task 的迁移文件（可选） 2python manage.py makemigrations background_task 3 4# 应用 migration，只创建 background_task 表 5python manage.py migrate background_task 错误：RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods\n在使用 MySQL 数据库时，尝试通过 sha256_password 或 caching_sha2_password 认证方式连接数据库，但 Python 的数据库驱动（通常是 mysqlclient 或 pymysql）缺少支持这些认证方式所需的 cryptography 库。\n安装 cryptography 库即可 pip install cryptography\n在 feed/tasks.py 中创建一个后台任务\n1# feed/tasks.py 2import os 3from dotenv import load_dotenv 4from django.core.mail import send_mail 5from background_task import background 6 7... 8 9load_dotenv() # 加载 .env 文件 10@background(schedule=60) # 每60秒运行一次 11def send_email_task(): 12 \u0026#34;\u0026#34;\u0026#34; 13 定时发送邮件任务 14 \u0026#34;\u0026#34;\u0026#34; 15 print(\u0026#34;开始执行定时邮件发送任务...\u0026#34;) 16 send_mail( 17 \u0026#39;Hello\u0026#39;, 18 \u0026#39;This is a background task to send an email.\u0026#39;, 19 os.getenv(\u0026#34;EMAIL_HOST_USER\u0026#34;), 20 [\u0026#39;to@domain.com\u0026#39;], # 这里可以同时发给多个收件人 21 fail_silently=False, 22 ) 在 feed/views.py 中设置调用任务的接口\n1# feed/views.py 2class BackTaskView(APIView): 3 def get(self, request): 4 send_email_task() 5 return JsonResponse({\u0026#34;code\u0026#34;: 200, \u0026#34;info\u0026#34;: \u0026#34;后台任务执行成功\u0026#34;}) 在 feed/urls.py 中配置路由\n1from django.urls import path 2from feed.views import FeedHistoryView, EmailTestView, BackTaskView 3 4urlpatterns = [ 5 ... 6 path(\u0026#39;back_task/\u0026#39;, BackTaskView.as_view(), name=\u0026#39;back-task\u0026#39;) # 后台任务 7] 在终端运行任务\n1python manage.py runserver 2 3# 再打开一个终端 4\u0026#34;\u0026#34;\u0026#34; 5--duration=0 表示无限运行。 6--sleep=5 表示每 5 秒检查一次是否有新任务。 7\u0026#34;\u0026#34;\u0026#34; 8python manage.py process_tasks --duration=0 --sleep=5 发现只有在请求服务时会建立后台任务，无法实现按照设定的频率进行\n解决方案\n伪周期调度 在方法内自己调度自己 然而实测出现创建任务的没有严格按照所设定的间隔，导致一次发送多封邮件，可能和时间同步有关系 使用 Celery + Celery Beat √ Celery：异步任务队列 Celery Beat：周期性任务调度器 定时邮件发送（Celery + Celery Beat） 1pip install celery django-celery-beat redis 2 3# 生成 django-celery-beat 的迁移文件 4python manage.py makemigrations django_celery_beat 5 6# 应用 migration，只创建 django-celery-beat 表 7python manage.py migrate django_celery_beat 配置celery\n参考博客：https://developer.aliyun.com/article/1582419\n下载Redis（Windows）\n参考博客：https://developer.aliyun.com/article/1395346\n完成后，执行以下步骤\n1# 启动 Redis 2redis-server.exe redis.windows.conf 3 4# 在项目终端进行 Redis 连接测试 5redis-cli ping 6# 如有跟着博客配置密码 7redis-cli -a your_password ping 8# 返回 PONG 即说明Redis成功运行 9 10# 启动 Django 开发服务器 11python manage.py runserver 12 13# 启动 Celery Worker 14celery -A nrsmAPI_project worker --loglevel=info 15 16# 启动 Celery Beat 17celery -A nrsmAPI_project beat --loglevel=info 错误：(venv) D:\\administrator\\College\\课后笔记\\News-recommendation-system\\e2\\newsAPI_project\u0026gt;redis-cli ping (error) NOAUTH Authentication required.\n在 redis.windows.conf 文件中配置了密码，但是在终端执行命令时未提供。加上 -a your_passoword 即可。\n如果修改了 redis.windows.conf 后，需要重新启动 Redis 才会生效 （很简单的道理，但总是容易忘记囧）\n检查 Celery Worker，celery -A nrsmAPI_project worker --loglevel=info 的启动日志，发现没有加载任何任务\n在 feed/apps.py 中强制导入 import feed.tasks 即可\n1The above exception was the direct cause of the following exception: 2 3Traceback (most recent call last): 4 File \u0026#34;c:\\users\\fshjp\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\billiard\\pool.py\u0026#34;, line 362, in workloop 5 result = (True, prepare_result(fun(*args, **kwargs))) 6 File \u0026#34;c:\\users\\fshjp\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\celery\\app\\trace.py\u0026#34;, line 640, in fast_trace_task 7 tasks, accept, hostname = _loc 8ValueError: not enough values to unpack (expected 3, got 0) 在win10上运行celery4.x，celery5.x会出现此问题\n参考博客：https://blog.csdn.net/showgea/article/details/109342664\n1pip install eventlet 2 3# 添加参数 -P 4celery -A nrsmAPI_project worker -l info -P eventlet 5 6# 再启动 Celery Beat 7celery -A nrsmAPI_project beat --loglevel=info 时间间隔为 20s ，实测差不多 +- 1s\n根据用户兴趣和时段推送新闻 1# settings.py 2... 3# Celery配置 4CELERY_BROKER_URL = os.getenv(\u0026#39;CELERY_BROKER_URL\u0026#39;, \u0026#39;redis://127.0.0.1:6379/0\u0026#39;) # 使用Redis作为消息代理 5CELERY_RESULT_BACKEND = os.getenv(\u0026#39;CELERY_RESULT_BACKEND\u0026#39;, \u0026#39;redis://127.0.0.1:6379/0\u0026#39;) # 使用Redis作为结果存储 6CELERY_ACCEPT_CONTENT = [\u0026#39;json\u0026#39;] 7CELERY_TASK_SERIALIZER = \u0026#39;json\u0026#39; 8CELERY_RESULT_SERIALIZER = \u0026#39;json\u0026#39; 9CELERY_TIMEZONE = os.getenv(\u0026#39;TIMEZONE\u0026#39;, \u0026#39;UTC\u0026#39;) # 北京时间 10 11# Celery beat 12CELERY_BEAT_SCHEDULER = \u0026#39;django_celery_beat.schedulers:DatabaseScheduler\u0026#39; 13 14# 定时任务配置 15from celery.schedules import crontab 16 17CELERY_BEAT_SCHEDULE = { 18 \u0026#39;check-user-feedtime-every-minute\u0026#39;: { 19 \u0026#39;task\u0026#39;: \u0026#39;feed.tasks.check_and_send_news_feed\u0026#39;, 20 \u0026#39;schedule\u0026#39;: crontab(minute=\u0026#39;*\u0026#39;), # 每分钟检查是否满足推送条件 21 }, 22} 23 24 25LOGGING = { 26 \u0026#39;version\u0026#39;: 1, 27 \u0026#39;disable_existing_loggers\u0026#39;: False, 28 \u0026#39;handlers\u0026#39;: { 29 \u0026#39;console\u0026#39;: { 30 \u0026#39;class\u0026#39;: \u0026#39;logging.StreamHandler\u0026#39;, 31 }, 32 }, 33 \u0026#39;loggers\u0026#39;: { 34 \u0026#39;feed.tasks\u0026#39;: { 35 \u0026#39;handlers\u0026#39;: [\u0026#39;console\u0026#39;], 36 \u0026#39;level\u0026#39;: \u0026#39;INFO\u0026#39;, 37 } 38 } 39} 40 41 42# 邮件配置 43EMAIL_BACKEND = \u0026#39;django.core.mail.backends.smtp.EmailBackend\u0026#39; 44EMAIL_USE_TLS = True # 是否使用TLS安全传输协议(用于在两个通信应用程序之间提供保密性和数据完整性) 45EMAIL_USE_SSL = False # 是否使用SSL加密，qq企业邮箱要求使用，163邮箱设置为True的时候会报ssl的错误 46EMAIL_HOST = \u0026#39;smtp.163.com\u0026#39; # 发送邮件的邮箱的SMTP服务器，这里用的是163邮箱 47EMAIL_PORT = 25 # 发件箱的SMTP服务器端口，默认是25 48EMAIL_HOST_USER = os.getenv(\u0026#34;EMAIL_HOST_USER\u0026#34;) # 发送邮件的邮箱地址 49EMAIL_HOST_PASSWORD = os.getenv(\u0026#39;EMAIL_HOST_PASSWORD\u0026#39;) # 发送邮件的邮箱密码(这里使用的是授权码) 1# feed/tasks.py 2import os 3 4from celery import shared_task 5from datetime import timedelta, datetime 6from django.utils import timezone 7import logging 8 9from django.core.mail import send_mail 10 11from feed.utils import send_mail_test 12 13logger = logging.getLogger(__name__) 14 15@shared_task 16def daily_news_feed(user_ids=None): 17 \u0026#34;\u0026#34;\u0026#34; 18 执行每日新闻推送任务 19 推送自上次推送以来关注标签下的新新闻 20 :param user_ids: 用户ID列表，若为None则推送所有用户 21 \u0026#34;\u0026#34;\u0026#34; 22 # 延迟导入模型 23 from feed.models import FeedLog 24 from user.models import SysUser, UserLike 25 from news.models import News 26 27 now = timezone.now() 28 logger.info(\u0026#34;开始执行每日新闻推送任务\u0026#34;) 29 30 if user_ids is None: 31 users = SysUser.objects.all() 32 else: 33 users = SysUser.objects.filter(id__in=user_ids) 34 35 for user in users: 36 try: 37 last_log = FeedLog.objects.filter(user=user).latest(\u0026#39;send_time\u0026#39;) 38 last_sent_time = last_log.send_time # 获取上次推送时间 39 except FeedLog.DoesNotExist: 40 last_sent_time = now - timedelta(days=1) # 新用户无推送记录，则将推送时间设置为当前时间减去1天 41 42 liked_tags = UserLike.objects.filter(user=user).values_list(\u0026#39;tag_id\u0026#39;, flat=True) 43 if not liked_tags.exists(): 44 logger.debug(f\u0026#34;用户 {user.username} 未设置兴趣标签，跳过推送\u0026#34;) 45 continue 46 47 new_news = News.objects.filter( 48 pub_time__gte=last_sent_time, 49 newstag__tag_id__in=liked_tags 50 ).distinct().order_by(\u0026#39;-pub_time\u0026#39;) 51 52 count = new_news.count() 53 logger.info(f\u0026#34;用户 {user.username} 新闻数量：{count}\u0026#34;) 54 55 if count == 0: 56 logger.info(f\u0026#34;用户 {user.username} 无新新闻可推送\u0026#34;) 57 continue 58 59 # 创建推送记录 60 feed_logs = [] 61 for news in new_news: 62 feed_logs.append(FeedLog( 63 user=user, 64 news=news, 65 title=news.title, 66 summary=news.summary or \u0026#39;\u0026#39;, 67 status=\u0026#39;pending\u0026#39; 68 )) 69 70 FeedLog.objects.bulk_create(feed_logs) 71 72 73 # 邮件发送后记录需要更新的状态 74 success_logs = [] 75 failed_logs = [] 76 77 for log in feed_logs: 78 try: 79 subject = f\u0026#34;【{user.username}】今日新闻推送\u0026#34; 80 message = f\u0026#34;\u0026#34;\u0026#34; 81 标题：{log.title} 82 摘要：{log.summary} 83 发布时间：{log.news.pub_time} 84 \u0026#34;\u0026#34;\u0026#34; 85 from_email = os.getenv(\u0026#34;EMAIL_HOST_USER\u0026#34;) 86 recipient_list = [user.email] 87 88 send_mail( 89 subject=subject, 90 message=message, 91 from_email=from_email, 92 recipient_list=recipient_list, 93 fail_silently=False 94 ) 95 success_logs.append(log) 96 except Exception as e: 97 logger.error(f\u0026#34;推送失败给用户 {user.username}，错误：{e}\u0026#34;) 98 log.status = \u0026#39;failed\u0026#39; 99 failed_logs.append(log) 100 101 # 批量更新成功发送的日志 102 if success_logs: 103 FeedLog.objects.filter(id__in=[log.id for log in success_logs]).update(status=\u0026#39;sent\u0026#39;) 104 105 # 批量更新发送失败的日志（如果需要区分） 106 if failed_logs: 107 FeedLog.objects.filter(id__in=[log.id for log in failed_logs]).update(status=\u0026#39;failed\u0026#39;) 108 109 110 logger.info(\u0026#34;每日新闻推送任务完成\u0026#34;) 111 112 113@shared_task 114def check_and_send_news_feed(): 115 \u0026#34;\u0026#34;\u0026#34; 116 每分钟检查用户是否到达 feedtime，如果匹配，则触发推送 117 \u0026#34;\u0026#34;\u0026#34; 118 from user.models import SysUser 119 120 now = timezone.now() 121 logger.info(f\u0026#34;正在检查是否满足推送条件，当前时间：{now}\u0026#34;) 122 123 users = SysUser.objects.all() 124 triggered_users = [] 125 126 for user in users: 127 feed_time = user.feedtime 128 today = now.date() 129 target_time = timezone.make_aware(datetime.combine(today, feed_time)) 130 delta = (now - target_time).total_seconds() 131 132 # 判断当前时间是否在用户 feedtime 的 ±1 分钟内 133 if abs(delta) \u0026lt;= 60: 134 triggered_users.append(user) 135 136 if triggered_users: 137 logger.info(f\u0026#34;将为以下用户发送新闻推送：{[u.username for u in triggered_users]}\u0026#34;) 138 daily_news_feed.delay(user_ids=[u.id for u in triggered_users]) 139 else: 140 logger.info(\u0026#34;没有用户需要推送\u0026#34;) 141 142 143# 注册定时任务（运行 manage.py runserver 时自动加载） 144from celery import current_app as celery 145 146@celery.on_after_configure.connect 147def setup_periodic_tasks(sender, **kwargs): 148 sender.add_periodic_task( 149 timedelta(minutes=1), # 每分钟检查一次 150 check_and_send_news_feed.s(), 151 name=\u0026#39;每分钟检查用户推送时间\u0026#39; 152 ) 时区问题 参考博客：https://blog.csdn.net/qq_41341757/article/details/109319850\n面对依赖时间的任务，绕不开时区问题。在Django项目中，一般这样处理\n前端传来的时间数据，在数据库中以UTC保存 后端处理时，统一用UTC为标准 在 settings.py 中，设置USE_TZ = True，TIME_ZONE = 'Asia/Shanghai' ，在涉及时区处理时候，Django将自动转换\n修改推送设置 为简单处理（同时也考虑到真实情况），舍弃原定的频率（每日/每周/每月）并统一为每日推送，保留用户可修改具体的推送时间的功能。\n获取用户信息（不包含敏感信息） 主要为了方便前端\n兴趣推送（标签 + 关键词） 在用户模块添加一个新的表UserKeyword\n修改推送逻辑\n匹配（标签 ∪ 关键词）的新闻 原本设计为关键词过滤，但考虑到标签和关键词会互相影响，例如用户可能设置“政治”标签 + “赵丽颖”关键词，但取交集可能会导致没有新闻同时符合这两个条件 编写单元测试\n执行单元测试\n1python manage.py test feed.tests.DailyNewsFeedTest 检索 邮箱验证 管理端 初始化 管理员共享一个账号，无需注册。但要存入一条默认账号密码\n创建一个独立的init_admin.py，并执行以下语句\n1python manage.py init_admin ","link":"https://eSparkL.top/skill/10-%E6%96%B0%E9%97%BB%E6%8E%A8%E8%8D%90%E7%B3%BB%E7%BB%9F%E5%90%8E%E7%AB%AF/","section":"skill","tags":["大二","大作业"],"title":"新闻推荐系统后端"},{"body":"第3章 随机向量 3.1 随机向量的分布 一、随机向量分布及其分布函数 出发点：一个事件的发生的概率受多种因素的共同作用。\n【定义3.1】 n维随机向量$$(X_1, X_2, X_3, ...)∈(\\Omega, P)$$，则称$(X_1, X_2, X_3, ...)$是在$(\\Omega, P)$上的一个随机向量。\n【定义3.2】 n维随机向量的分布函数$$F(x_1, x_2, ..., x_n)=P(X_1\\leq x_1, X_2 \\leq x_2, ..., X_n \\leq x_n)$$，又称为n个随机变量的联合分布函数，它表示的是${X_1\\leq x_1}, {X_2\\leq x_2},..., {X_n\\leq x_n}$的交事件\n对于二维向量，其几何意义是：在平面上围成的面积 随机向量分布函数的性质 以下仅对二维向量作讨论\n$$P{x_1 \\leq X \\le x_2, y_1 \\le Y \\le y_2} \\ = F(x_2, y_2) - F(x_1, y_2) - F(x_2, y_1) + F(x_1, y_1)$$ 非负性 单调非降，右连续 $$F(x, -\\infty) = 0 \\ F(-\\infty, y) = 0 \\ F(-\\infty, -\\infty) = 0 \\ F(+\\infty, +\\infty) = 1$$ 边缘分布函数 $$F(x, +\\infty) = F_X(x) \\ F(+\\infty, y) = F_Y(y)$$ 二、离散型随机向量的概率分布 【定义3.4】 离散型随机向量$(X, Y)$的概率分布，或$X$和$Y$的联合分布，写作 $$P{X = x_i, Y = y_i} = p_{ij}, i, j = 1, 2, ...,$$ 性质 非负性 归一性 边缘分布 $$p_{i}^X(i = 1, 2, ...) = \\sum_j P{X = x_i, Y = y_j} = \\sum_j p_{ij}\\p_{j}^Y(j = 1, 2, ...)同理$$ 求$X = x_1$的边缘密度函数，就把所有$y$的取值加起来（用$·$表示all） $X$ 三、连续型随机向量的概率密度函数 四、二元正态分布 3.2 条件分布与随机变量的独立性 一、条件分布与独立性的一般概念 二、离散型随机变量的条件概率分布与独立性 三、连续型随机变量的条件密度函数与独立性 3.3 随机向量的函数分布与数学期望 一、离散型随机向量的函数的分布 【离散型随机向量函数的定义】 设$Z = g(X, Y)$，则$$P{Z = z_k} = P{g(X, Y) = z_k} \\ = \\sum_{g(x_i, y_j) = z_k}P{X = x_i, Y = y_j}, k = 1, 2, \\dots$$\n【结论】 设$X$,$Y$为两个相互独立的随机变量，且$X \\sim P(\\lambda_1)$，$Y \\sim P(\\lambda_2)$，则$$\\xi = X + Y 服从参数为\\lambda_1 + \\lambda_2的泊松分布$$\n二、连续型随机向量的函数的分布 ==老师不要求计算== 【结论：正态分布的再生性】 $X$, $Y$ 相互独立且分别服从正态分布 $N \\sim (\\mu_1, \\sigma_1^2)$，$N \\sim (\\mu_2, \\sigma_2^2)$，则任意非零线性组合仍服从正态分布，且$$aX + bY \\sim N(a\\mu + b\\mu, a^2\\sigma_1^2 + b^2\\sigma_2^2 )$$ 三、随机向量的函数的数学期望 【离散型随机向量函数的数学期望定义】 离散型函数 × 对应的X,Y的联合概率，即 $$EZ = Eg(X, Y) = \\sum_{i, j}g(x_i, y_j)p_{ij}$$\n【连续型随机向量函数的数学期望定义】 连续型函数 × 密度函数，对X,Y的二重积分 $$EZ = Eg(X, Y) = \\int_{-\\infty}^{+\\infty}\\int_{-\\infty}^{+\\infty}g(x_i, y_j)f(x, y)dxdy$$\n四、数学期望的进一步性质 记结论 【结论1】$X$, $Y$ 的数学期望存在，则$E(X+Y)$存在，且 $$E(X+Y) = EX + EY$$ 【结论2】$X$, $Y$相互独立，数学期望存在，则$E(XY)$存在，且 $$E(XY) = EX EY$$ 以上结论可推而广之到多个变量 ","link":"https://eSparkL.top/study/9-%E6%A6%82%E7%8E%87%E8%AE%BA-%E7%AC%AC%E4%B8%89%E7%AB%A0%E7%AC%94%E8%AE%B0/","section":"study","tags":null,"title":"概率论-第三章笔记"},{"body":" 在前面已经跑通book_project的基础上，针对本项目的服务需求进行修改和完善。\n一、Django结构 1.1 创建新Django项目 1django-admin startproject nrsm_project 2cd nrsm_project 3python manage.py startapp news 4python manage.py startapp user 5python manage.py startapp admin_panel 再将之前book_project的虚拟环境venv和.idea文件复制过来，就不用重新配置虚拟环境了。——这样会出现路径仍然指向book_project，因此后面直接在把代码搬到book_project中了（搬人不搬屋）\n项目结构如下\n1.2 更改setting配置 1.2.1 配置数据库 使用MYSQL\n下面和参考教程不一样，在之前的项目测试中，改为1,4,13才能运行，具体原因暂按下不管。\n1.2.2 添加应用 将创建的app加入到installed_apps里面\n1.2.3 创建model 先到这一步吧，接下来是接口相关\n1.2.4 接口 先下载\n1pip install djangorestframework 2 3pip install djangorestframework-simplejwt 在 settings.py 中添加\n1INSTALLED_APPS += [ 2 \u0026#39;rest_framework\u0026#39;, 3 \u0026#39;rest_framework_simplejwt\u0026#39;, 4] ","link":"https://eSparkL.top/skill/7-django%E5%90%8E%E7%AB%AF%E9%A1%B9%E7%9B%AE%E6%A8%A1%E4%BB%BF/","section":"skill","tags":null,"title":"Django后端项目模仿"},{"body":"","link":"https://eSparkL.top/categories/windows/","section":"categories","tags":null,"title":"Windows"},{"body":" 我是参考博客\n将以下代码复制到一个文本文件，然后保存成 cmd.reg，注意文件后缀是reg，注册表文件。 1Windows Registry Editor Version 5.00 2 3; Created by: Shawn Brink 4 5; http://www.sevenforums.com 6 7; Tutorial: http://www.sevenforums.com/tutorials/47415-open-command-window-here-administrator.html 8 9[-HKEY_CLASSES_ROOT\\Directory\\shell\\runas] 10 11[HKEY_CLASSES_ROOT\\Directory\\shell\\runas] 12 13@=\u0026#34;Open cmd here as Admin\u0026#34; 14 15\u0026#34;HasLUAShield\u0026#34;=\u0026#34;\u0026#34; 16 17[HKEY_CLASSES_ROOT\\Directory\\shell\\runas\\command] 18 19@=\u0026#34;cmd.exe /s /k pushd \\\u0026#34;%V\\\u0026#34;\u0026#34; 20 21[-HKEY_CLASSES_ROOT\\Directory\\Background\\shell\\runas] 22 23[HKEY_CLASSES_ROOT\\Directory\\Background\\shell\\runas] 24 25@=\u0026#34;Open cmd here as Admin\u0026#34; 26 27\u0026#34;HasLUAShield\u0026#34;=\u0026#34;\u0026#34; 28 29[HKEY_CLASSES_ROOT\\Directory\\Background\\shell\\runas\\command] 30 31@=\u0026#34;cmd.exe /s /k pushd \\\u0026#34;%V\\\u0026#34;\u0026#34; 32 33[-HKEY_CLASSES_ROOT\\Drive\\shell\\runas] 34 35[HKEY_CLASSES_ROOT\\Drive\\shell\\runas] 36 37@=\u0026#34;Open cmd here as Admin\u0026#34; 38 39\u0026#34;HasLUAShield\u0026#34;=\u0026#34;\u0026#34; 40 41[HKEY_CLASSES_ROOT\\Drive\\shell\\runas\\command] 42 43@=\u0026#34;cmd.exe /s /k pushd \\\u0026#34;%V\\\u0026#34;\u0026#34; 哪天你不想要这个新加的选项了，请把下面的代码复制，同样保存到一个文本文件然后存为remove.reg，双击运行之。选项就会消失，菜单恢复正常。 1Windows Registry Editor Version 5.00 2 3; Created by: Shawn Brink 4 5; http://www.sevenforums.com 6 7; Tutorial: http://www.sevenforums.com/tutorials/47415-open-command-window-here-administrator.html 8 9[-HKEY_CLASSES_ROOT\\Directory\\shell\\runas] 10 11[-HKEY_CLASSES_ROOT\\Directory\\Background\\shell\\runas] 12 13[-HKEY_CLASSES_ROOT\\Drive\\shell\\runas] ","link":"https://eSparkL.top/skill/8-%E5%9C%A8%E6%8C%87%E5%AE%9A%E7%9B%AE%E5%BD%95%E6%96%B9%E4%BE%BF%E7%94%A8%E7%AE%A1%E7%90%86%E5%91%98%E6%9D%83%E9%99%90%E6%89%93%E5%BC%80%E5%91%BD%E4%BB%A4%E9%BB%91%E7%AA%97/","section":"skill","tags":null,"title":"在指定目录方便用管理员权限打开命令黑窗"},{"body":"第二章复习 2.3 常用的离散型分布 一、退化分布 定义： $$P{X=a} = 1$$ X 服从 a 处的退化分布。也就是永远取一个确定的常数 a 期望： $$E(X) = 0$$ 方差： $$D(X) = 0$$ 二、两点分布 定义： 只有两个可能的取值 $$P{X=x_1}=p,\\quad P{X=x_2}=1-p,\\quad 0\u0026lt;p\u0026lt;1,$$ X 服从 a 处参数为 $x_1$, $x_2$ 的两点分布 三、均匀分布 四、二项分布 五、几何分布 六、超几何分布 七、泊松分布 2.4 常用的连续性分布 一、均匀分布 二、指数分布 三、正态分布 2.5 随机变量函数的分布 一、随机变量的函数 二、离散型随机变量函数的分布 三、连续性随机变量函数的分布 ","link":"https://eSparkL.top/study/3-%E6%A6%82%E7%8E%87%E8%AE%BA-%E7%AC%AC%E4%BA%8C%E7%AB%A0%E5%A4%8D%E4%B9%A0/","section":"study","tags":null,"title":"概率论-第二章复习"},{"body":" 当前欠缺：\n无法渲染数学公式如 $a$, $x^2$ 代码没有显示所用语言 基础命令 修改设置后重新构建网站： 1hugo server --cleanDestinationDir 创建新内容 1hugo new content -k post \u0026#39;job/new_posts/index.md\u0026#39; 废弃：hugo new posts/new_posts/index.md # Syrella.com\n推送到GitHub Page 1hugo 2 3git add . 4 5git commit -m \u0026#34;更新时间\u0026#34; 6 7git push 脚本化创建和推送过程 1bash newpost.sh # 在其他电脑需要修改hugo.exe路径 1bash update.sh ","link":"https://eSparkL.top/skill/2-hugo%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/","section":"skill","tags":null,"title":"Hugo常用命令"},{"body":"tags: [TOC]\n需求工程 用例规约 1. 画出Use Case 2. 编写用例规约 1. 可选需求 2. 非功能需求 3. 黑盒用例规约 和 白盒用例规约 随着开发的过程要不断添加细节 1.识别用例：有哪些时间、actor 2.用例分布提纲：+前置条件 +后置条件 3.（非技术甲方）黑盒规约：+完整的事件流 4.（技术人员）白盒规约：+系统内部行为的细节描述 可以采用双列（用户视图 | 系统视图） 3. 用例图优化 符号： Include包含 从基本用例→包含用例，包含用例为基本用例提供功能 \u0026lt;\u0026gt;衍型 Extend扩展 Generalization泛化（类似类中的继承关系） Include关系 基数 Include中，不需要处理条件， 分离非主要行为，突出用例的核心价值 提出多个用例存在一段共有的行为，可以提取出来反复使用 Extend关系（见图） Extension扩展用例——Base基本用例 基数 扩展关系符号是 Generalization泛化， 建立概念模型Conceptual Class 识别Conceptual Class 分类法 物理实体 逻辑实体 组织实体 名词提取法 1.从规约中提取所有名词，可重复 2.去掉：冗余、执行者和系统本身、边界类（菜单、链接）、类的属性 3.得到基本概念类 易错：类的实体当做属性被删掉（e.g.型号） 属性特征：数字，文本 因此如果一个东西不能简单用数字或文本描述，应该为类而非属性 建立Conceptual Class之间的关系 类图：类 + 类之间的关系 类是结构，结构是静态的 UML 类名 | 属性 | 操作 可见性Visibility +公共可见性 #受保护 -私有 ~包可见 多重性Multiplicity 描述关联 *无限多个 1， 2， 0， 正好1，2，0个 {1 or 2...4}离散值 vs 基数：整个关系 多重性：某一端，“从这边看过去，能连几个那边” 关联关系Relationship：Association “一个类知道另一个类” 无箭头实线：彼此都知道 ↑耦合性 但更灵活 单向实线：A知道B，A→B，订单→支付方式 符合封装原则，↓耦合 但导航性可能会比较麻烦，比如反向查询不方便 导航性：一个类能否通过关联访问另一个类 决定哪个类负责持有或访问数据 需求分析阶段 设计阶段 聚合关系Relationship：Aggregation 整体-部分 空菱形实线箭头，菱形在整体 组合关系Relationship：Composition 生命周期，部分和组合一起消亡，强关联 实菱形实线箭头 泛化关系Relationship：Generalization 空心实线箭头，空心箭头在父类 尽量避免用多重继承 重复继承问题，“钻石问题” 优化： Liskov替换准则LSP 继承是is a kind of关系，即子类应该能替换基类型 区分：泛化 vs 聚合 带滚动条的窗口 带滚动条的窗口 是 窗口；带滚动条的窗口 包含了 滚动条 依赖关系Relationship：Dependency 虚线带箭头，依赖类型\u0026lt;\u0026lt;自定义\u0026gt;\u0026gt; 接口 一组操作的集合（不包含属性） 表示方法 \u0026lt;\u0026gt; 圆圈表示 分类 供给接口 提供的服务 圆圈 需求接口 需要得到的服务 半圆 增加属性，类的属性（先）比操作（后）更重要 状态机图 类的行为性特征 分类 行为状态机 内部 协议状态机 外部 核心元素 初始状态：实心圆⚫ 终止状态：圆圈包围⚫ 其他状态：圆角矩形，内部显示状态名 状态转移： 箭头 事件：状态机中事件触发迁移 转移上的标号表示 entry-do-exit-event？ 为什么要用状态机图 1.对象的职责或行为变化显著 2.系统或对象的用例涉及复杂的逻辑，且这些逻辑由状态驱动时 ×： 对象的逻辑简单明了，不需要额外的状态机抽象 对象的行为不依赖状态变化 对象单一状态 总结：不存在复杂的状态变化 用例实现UCR 需求和设计之间的桥梁 用例中的每一个用力，在分析模型和设计模型中至少有一个用例实现与对应 分类 动态交互图 类图，静态视图 识别分析类 分析类：描述每个角色的职责 设计阶段：角色赋与台词和动作，变成实际的系统组件 分析类： 平台无关模型，与实现无关（可能做不出来） MVC模型-视图-控制器 实体类 描述存储的信息，及信息相关的行为 反映逻辑数据结构 实体类不是某个用力实现所特有的 识别：名词过滤 边界类 分类 用户界面类 系统接口类 设备接口类 识别规则actor和用例之间的一条通信关联对应一个边界类，actor是什么类型对应对应的边界类 控制类 每一个用例一定会有一个控制类 关注流程逻辑，是事件流的抽象 构建分析模型 交互图 顺序图/时序图\n描述对象之间发送信息的时间顺序显示多个对象之间的动态协作 垂直：时间 水平：角色 垂直：生命线 生命线之间的箭头连线为消息 同步消息：实心三角 异步消息：带开放箭头的实线 返回消息：带开放箭头的虚线 创建消息：实线箭头指向新对象的头部 销毁消息：生命线 + × 自调用消息：从生命线触发，绕回同一生命线 匿名消息（不推荐） 激活条，长度有讲究 一般没有编号 fragment补充序列片段 用于简化序列片段 四种： 1.ref标签 复用已经定义好的交互场景 2.loop标签 由条件[get next item]控制执行 loop 3.alt标签 多个分支，条件执行 只有一个分支被执行 若多个为真，按情况选择执行那个分支（1st/随机） 4.par标签 并发 5.opt标签 选择执行，类似if 通信图\n所有信息需要编号，以表示时间前后 顺序图和通信图可以相互转换 VOPC类图（View Of Participating Class）\n“用例实现”中的类图 方法就是通信图中的消息 改进类图：确定分析类的职责\n确定分析类的职责 基本步骤： 1.提取交互图的消息，识别发送者和接收者 2.映射职责。专门的文档，说明职责来自哪个类，在消息图中名称，对应类里的哪个方法名等 确定分析类的属性 1.名词法识别的非实体的名词就是属性 2.一般比较简单的数据类型，e.g.字符串、整型、数值型 3.添加说明（可选） 先定职责，再定属性 完成用例分析 前景文档Vision SRS文档 主要看用例 语境图 外部实体有哪些？ 需求验证 原型确认 水平原型 需求开发 垂直原型 设计验证 需求评审 四个阶段：计划——实施——改进——结束 计划 确定需求评审人员 确定需求评审方法 审查【正式评审】 小组评审【轻式审查】 走查【非正式】 结对编程 一个小时换一次 同级桌查 作者不知道评审者如何完成任务 轮查 多人的同级桌查 临时评审 选择 风险高，用更正式的评审方式；反之可用评审低的 实施 对审查和小组评审等正式评审 改进 输入 待评审的需求文档 checklist 需求管理 获取 分析 定义 验证 主要活动 需求优先级和需求基线 需求变更控制和版本控制 尽量使用需求变更控制工具，如Rational RequisitePro 需求跟踪 需求跟踪链 需求跟踪矩阵（RTM） 需求工程工具 分析建模工具 需求管理与追踪工具 软件架构设计 软件设计模型\nPSM（平台相关模型），需要考虑平台依赖 分析模型和设计模型同时一边做一遍修改 主要目标 ①实现所有明确的和隐含的需求 ②易读和易理解 ③提供软件的全貌，从实现的角度说明数据域、功能域和行为域 类型 数据模型 面向过程：ER图、DD OO：类图、类关系 功能模型 面向过程：DFD数据流图 OO：用例图 行为模型 面向过程：状态变迁图STD OO：活动图、顺序图、状态图 软件设计过程\n确定软件架构 合适的架构风格 从逻辑、物理、进程等多个视图建立架构模型 软件质量属性的设计策略，使软件系统在架构层面满足功能性和非功能性需求 详细设计，细化每个模块 软件设计的原则\n抽象 数据抽象 过程抽象 对象抽象 分解和模块化 模块 外部特征 内部特征 封装和信息隐藏 高内聚和低耦合 软件设计质量 7种软件设计的坏味道 1、僵化性（Rigidity）：耦合性太高 2、脆弱性（Fragility）：改动一个地方导致其他看似无关部分的崩溃，封装性差 3、牢固性（Immobility）：系统难以复用，模块过于特定化（与环境的耦合程度太深） 4、粘滞性（Viscosity）：做正确的事情很难，做错误的事情很简单 软件~ 环境~ 5、不必要的复杂性（Needless Complexity）： 为了未来可能需要而添加的抽象层 6、不必要的重复（Needless Repetition）: 7、晦涩性（Opacity） 导致：难以理解、难以变更、难以复用、难以维护 软件设计的复用\nGoF设计模式 架构风格：复用整个系统架构，粒度最大 设计模式：复用模块设计方案，粒度中等，适合功能模块或子系统 编程惯用：复用代码实现，粒度最小，适合细节优化和语言特定场景 团队的编码规范 软件架构 软件架构风格 分类 通用风格 分层 管道 黑板 通用风格 分层架构 特点：单向依赖，但也允许回调（非严格分层）\n常用：三层架构，为表示层、应用/业务逻辑层、数据层\n稍复杂：四层，表示层、服务层（Spring控制器，提供API）、业务逻辑层（Spring服务）、数据层\n复杂：五层，表示层、服务层（Spring控制器，提供API）、业务逻辑层（Spring服务）、数据访问层（Spring Data JPA Repository）、数据层\n数据访问逻辑复杂，大型分布式系统或微服务框架 更复杂：六层，表示层、控制层、服务层（Spring控制器，提供API）、领域层、数据访问层（Spring Data JPA Repository）、数据层 企业级的应用 优点：简单易懂，结构清晰，适合复用和单元化测试 缺点：\n多层调用增加性能开销，出现在高并发场景 用户受限于用户接口，无法进行更细粒度的操作 分层质量受抽象影响 扩展性有限 分层架构通常是一个单体架构，通常运行在一个进程或服务器上，只能整体部署，导致难以分布或频繁横向扩展（分担负载） 分层架构与多层架构（multi-tier）：\n多层架构，物理分离，分布式部署 管道与过滤器 一系列组件，过滤器负责处理数据，管道负责将输出传递到下一个过滤器的输入，数据流？\n黑板 适用：复杂、需要协作的问题。模拟人类专家围绕黑板解决问题。\n黑板、知识源、控制器\n黑板 知识源：仅与黑板交互，观察自己能否做出贡献 控制器：由黑板状态启动 通知知识源黑板状态更新 缺点：\n知识源集中访问黑板，可能性能瓶颈 调试比较困难，因为交互式动态的 应用：\n语音识别： 黑板：共享数据结构 知识源：声学分析模块、语言理解模块、上下文理解模块、发音矫正模块 控制器：监控黑板上的数据状态，决定哪个知识源执行下一步工作 分布式架构风格 BS 三层架构 微服务架构 服务器无感知架构 云边端融合\nC/S 客户端提供本地服务，服务器端进行计算\n胖、瘦、智能。数据处理主要在哪一端\n三层架构 服务与微服务风格 服务消费者\n服务注册中心\n服务提供者\n重型：面向服务架构SOA 多个功能 共享数据库 依赖中心化，必须要服务注册中心 轻型：微服务 micoroservices.io 一个微服务仅提供一个功能 数据库隔离 去中心化，服务独立部署（便于扩展） 通过API网关进行路由 Spring Cloud 微服务开发相关组件\n容器：\n解决管理上难以跟踪服务器运行在哪台主机上 docker 微服务镜像构建及实例创建\n服务无感知架构 服务本身不维护状态\n函数式服务，由事件驱动，根据自变量的值产生因变量的值？？？\n缺点：\n冷启动 状态管理复杂 不适合长运行任务，e.g.Serverless函数由执行限制 对平台依赖性强 云边端融合架构 云：核心网中具有高可扩展的强大算力的计算中心\n边缘：在移动网络边缘\n端：移动终端\n移动端不断地产生数据，可以由选择地将数据发送给边缘服务器。 ？？？\n优点：\n近数处理 节省网络带宽 提高系统可靠性 交互式系统架构风格 MVC PAC\nMVC Spring MVC\nDjango MVT\nPAC 由智能体构成的结构层次\n反馈控制架构 批处理架构 解释器架构。仿真 事件驱动架构 Agent Channel 进程控制架构 软件架构多视图的设计 4+1架构视图 逻辑视图（静） 进程视图（动） 物理视图（动） 开发视图（静） 场景视图（联） ","link":"https://eSparkL.top/study/4-%E8%BD%AF%E5%B7%A5%E8%AF%BE%E5%A0%82%E6%80%9D%E8%B7%AF%E7%AC%94%E8%AE%B0/","section":"study","tags":null,"title":"软件工程思路笔记"},{"body":" 参考博客：https://www.cnblogs.com/zhangxue521/p/12957816.html\nDjango的安装 前提 pycharm Python 3.9.6 cmd命令 1pip install Django==3.2 -i https://pypi.tuna.tsinghua.edu.cn/simple 版本兼容参考：https://blog.csdn.net/qq_28770757/article/details/123415364\n检查是否安装成功:\n1python -m django --version 新建Django项目 1django-admin startproject book_project # 新建项目 2 3cd book_project # 进入项目根目录 4 5python manage.py startapp book # 新建app 后端准备 更改settings配置 更改数据库配置 导入pymysql包 更改installed_apps 创建model 新增接口 添加图书 显示图书列表 创建app路由 初始化数据库 1python manage.py makemigrations 2 3python manage.py migrate 启动服务 1python manage.py runserver You’re seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page. https://www.w3schools.com/django/django_404.php\n测试接口 使用postman测试接口 https://www.postman.com/downloads/\n1# 添加书籍test1 2http://127.0.0.1:8000/api/add_book?book_name=test1 3 4# 返回书籍列表 5http://127.0.0.1:8000/api/show_book 前端 安装vue 1npm install -g @vue/cli 在安装 @vue/cli 时遇到了多个 npm warn deprecated 警告，表明某些依赖表已被废弃（deprecated） 然而还是无法执行。 $ npm run dev vue-admin-template@4.4.0 dev vue-cli-service serve 'vue-cli-service' 不是内部或外部命令，也不是可运行的程序或批处理文件。 因此需要重头装Vue，在已经提前装好\nnode -v v22.11.0 npm -v 10.9.0 的前提下，步骤如下： https://blog.csdn.net/Javachichi/article/details/132868889\n1# 配置npm的全局模块目录和缓存目录配置到自己创建的那两个目录 2 3npm config set prefix \u0026#34;D:\\nodejs\\node_global\u0026#34; 4 5npm config set cache \u0026#34;D:\\nodejs\\node_cache\u0026#34; 6 7# 下载源换为华为源 8# 注：淘宝源不行npm config set registry https://registry.npm.taobao.org 9 10npm config set registry https://mirrors.huaweicloud.com/repository/npm/ 11 12# 查看是否修改成功 13 14npm config list 15 16# 配置环境变量 17# 用户变量 - Path - D:\\nodejs\\node_global 18# 系统变量 - 新建 - 变量名：NODE_PATH - 变量值：D:\\nodejs\\node_global\\node_modules 19# 系统变量 - Path - %NODE_PATH% 20 21# 安装vue 22 23npm install vue -g 24 25# 安装vue/cli 26 27npm install -g @vue/cli 28 29# 测试vue是否配置成功 30 31vue --version 安装模版 1# 克隆项目 2 3git clone https://github.com/PanJiaChen/vue-admin-template.git 4 5# 进入项目根目录 6 7cd vue-admin-template 8 9# 项目安装所需依赖， 建议不要用 cnpm 安装 会有各种诡异的bug 可以通过如下操作解决 npm 下载速度慢的问题 10npm install --registry=https://registry.npm.taobao.org 11 12# 本地开发 启动项目 13 14npm run dev 遇到此类报错可能是因为没有用管理员权限，需要用管理员权限打开cmd，cd到vue模板项目根目录，再执行命令行\n执行npm run dev成功后，可看到web界面 登录后可看到 与服务端交互 在src-\u0026gt;api-\u0026gt;创建book.js文件\n1import request from \u0026#39;@/utils/request\u0026#39; 2 3export function getList(){ 4 return request({ 5 url: \u0026#39;/api/show_books\u0026#39;, 6 method: \u0026#39;get\u0026#39;, 7 }) 8} 9 10export function addbook(book_name) { 11 return request({ 12 url: \u0026#39;/api/add_book\u0026#39;, 13 method: \u0026#39;get\u0026#39;, 14 params: { book_name } 15 }) 16} 改Bug 前端修改 后端修改 pip install django-cors-headers\n","link":"https://eSparkL.top/skill/1-django%E7%9A%84%E5%88%9D%E4%BD%BF%E7%94%A8/","section":"skill","tags":null,"title":"Django的初使用"},{"body":"标题一（两个##） 标题二 标题三 标题四 ==我是高亮==\n红色\n上引号\n删除\n应用 应用\n1import java.util.Scanner; 2 3public class HelloWorld { 4 public static void main(String[] args) { 5 // 创建一个 Scanner 对象，用于获取用户输入 6 Scanner scanner = new Scanner(System.in); 7 8 // 提示用户输入名字 9 System.out.print(\u0026#34;请输入你的名字：\u0026#34;); 10 String name = scanner.nextLine(); 11 12 // 输出欢迎消息 13 System.out.println(\u0026#34;你好，\u0026#34; + name + \u0026#34;！欢迎使用 Java！\u0026#34;); 14 } 15} 序号o 辅导费 ","link":"https://eSparkL.top/skill/6-%E6%88%91%E7%9A%84%E7%AC%AC%E4%B8%80%E7%AF%87%E5%8D%9A%E5%AE%A2/","section":"skill","tags":null,"title":"我的第一篇博客"},{"body":"这里是 eSparkL 的个人博客，用来记录学习路上的点滴。\n关于我 广东外语外贸大学信息学院在读，目前在自然语言处理领域进行科研，兴趣方向：AI4Research，文本评测，智能体设计，AI+教育。 平时喜欢游戏、画画、电影和文学阅读，喜欢猫(\u0026gt;^ω^\u0026lt;)喵。\n关于本站 本站使用 Hugo 构建，主题为 hugo-clarity。 目前用于个人学习总结记录、作品展示，推动自己养成总结回顾的好习惯。\n联系方式 e-mail：1309922813@qq.com GitHub：https://github.com/eSparkL ","link":"https://eSparkL.top/about/","section":"","tags":null,"title":"关于"},{"body":"欢迎交换友链，可以在 GitHub 上联系我。\n","link":"https://eSparkL.top/flinks/","section":"","tags":null,"title":"友情链接"},{"body":"","link":"https://eSparkL.top/series/","section":"series","tags":null,"title":"Series"}]