2026年3月

平多多原价 3350 ,花 68 买了个 v3 会员,可以满 2000 减 200 ,最终 3150 买到了东南亚版+捆绑的马里奥赛车。

新人入坑掌机,有没有大佬推荐下需要买写啥配套的装备吗?比如什么膜,壳,遥感帽等?我想买个屏幕在出租屋玩有推荐的嘛?最好是不要太大,搬家要方便的那种

有没有啥游戏推荐的?我 b 站简单看了看,想入手 2077 (没玩过),还有那个🦍的游戏。宝可梦以前在朋友机器上玩过,感觉不好玩。塞尔达也玩过还可以。

在网络活动日益频繁的当下,无论是排查网络故障、验证代理设置,还是判断网络请求来源,个人用户常常需要查询某个IP地址的地理位置和运营商信息。快速、准确、易用,无疑是大家对这类查询工具的核心诉求。

一、为何查询的IP有时会“漂移”到隔壁省?

在深入探讨查询方法之前,我们要了解IP地理定位的精度是分层次的,据相关网络测量研究显示,在国家级别的定位准确率能达到92% - 99%,然而到了城市级(50公里范围内),准确率就会下降至50% - 75%左右。这背后有几个关键因素:

1. IP动态分配问题

普通家庭宽带大多采用动态IP,若数据库未能及时更新,显示的可能是该IP池的注册地址,比如市级总公司的地址,而非用户实际位置。

2. 运营商NAT技术的影响

移动端用户常处于大内网环境,出口IP可能归属于省公司,进而造成定位偏差。

3. 数据库更新频率

免费的公开数据库可能几个月才更新一次,而像IP数据云这样的商业库能做到24小时快速更新,数据时效性更强。

二、个人查询IP的三种实操方法

明白了上述原理,下面我为大家介绍三种个人查询IP的实操方法:

1. 在线网页查询(最简单)

打开IP 数据云查询页,输入目标 IP,一键获取国家、省份、城市、运营商、IP 类型等信息。

2. 普通免费工具查询

市面上还有一些公共工具,如IPinfo.io、IP-api等。不过,这类工具更适合临时简单使用,在准确性和数据丰富度上可能稍逊一筹。

3. 系统命令查询

对于有一定技术基础的用户,可以使用系统命令进行查询。Windows 运行cmd执行ping + 域名,获取 IP,再用tracert辅助判断线路与运营商,适合有基础的用户快速核验。
第一步:打开命令提示符(CMD)
第二步:用 ping 命令获取域名对应的IP
ping+域名
示例:
ping www.baidu.com
执行后,中括号里的就是目标 IP。
图片
第三步:用 tracert 辅助判断线路与运营商
tracert IP
第四步:由于CMD 只能粗略判断,可以用免费工具精准确认。

三、IP查询方案对比方案

准确度易用性适合用户普通免费工具一般高临时简单查询系统命令查询较低低有技术基础用户IP数据云查询高极高所有个人用户

方案准确度易用性适合用户
普通免费工具一般临时简单查询
系统命令查询较低有技术基础用户
IP数据云查询较高所有个人用户

四、查询小贴士

  1. 优先 IPv4 查询,定位更稳、结果更准。
  2. 内网 IP(192.168/10 段)只能查局域网,无法获公网位置。
  3. 代理或 VPN 环境下,查到的是节点 IP,非真实出口 IP。
  4. 选定期更新 IP 库的平台。

总之,个人用户查询 IP 地理位置与运营商,优先选免费、准确、无广告工具。网页查询省心,命令行适合快速核验,我个人使用下来IP数据云这样的专业平台,为用户提供可靠的IP查询服务,满足日常网络排查、安全验证、信息核验等多种需求,是个人用户值得信赖的IP查询工具。

从「AI For What」到「Value From AI」,100+可落地实践案例打通 AI 实战最后一公里!

4 月 16 日-4 月 18 日,QCon 全球软件开发大会将在北京举办。本届大会锚定 Agentic AI 时代的软件工程重塑,聚焦 Agentic AI、多智能体协作、算力优化、技术债治理、多模态和 AI 原生基础设施等前沿话题,邀请来自腾讯、阿里、百度、华为、蚂蚁、小米、网易等企业技术专家,带来百余项真实落地案例,系统性分享前沿洞察与实战干货,以技术共创探索 AI 落地新路径。

ElasticElastic 社区首席布道师刘晓国已确认出席 “Agentic Engineering” 专题,并发表题为Elastic MCP 及 Agentic AI:构建可信、上下文感知能力的搜索的主题分享。随着不断的研发探索,Elasticsearch 正从搜索引擎进化为 Agentic AI 的核心基础设施。本次分享将讨论如何用 Elasticsearch 为 Agentic AI 提供可用、可验证的上下文。通过 MCP,LLM 可按需访问企业数据与外部工具;结合向量/混合检索与对话历史记忆存储,检索结果可作为后续推理输入,从而减少因上下文缺失导致的错误回答。演讲还将介绍基于 Elastic 9.2 版本的 Agent Builder 与 9.3 版本的 Workflow:使用 ES|QL 封装查询与统计分析工具,使用 MCP 接入其他工具,并用工作流将数据处理、分类、通知与 API 调用串联。包含自然语言查询与工具编排 Demo。

刘晓国,曾就职于新加坡科技,康柏电脑,通用汽车,爱立信,诺基亚,Linaro 非营利组织 (Linux for ARM),Ubuntu,Vantiq 等企业。从事过电脑设计,汽车电子,计算机操作系统,通信,云实时事件处理等行业。从爱立信开始、诺基亚、Ubuntu 到现在的 Elastic,刘晓国从事社区工作已经有将近 20 年的经历。他在本次会议的详细演讲内容如下:

演讲提纲

  1. 搜索市场演变

  • 搜索的变迁

  • 把企业数据提供给 Agent 是充满挑战的

  • 智能体时代,搜索比以往任何时候都更相关

2. Elastic MCP

  • Elastic MCP 服务器介绍

  • 定制 MCP 服务器

  • Demo: 使用 Elastic MCP 及 定制 MCP 进行自然语言查询

3. AI Agents

  • 什么是 Agents

  • 为什么需要上下文工程

  • Agent builder 架构

  • Elastic Workflow 介绍

  • Demo:使用 AI Agent builder 创建 tools 及 Agents (包括 workflows)

这样的技术在实践过程中有哪些痛点?

智能体的开发对于很多开发者来说不是很容易。如何让开发者迅速地开发出高质量的智能更不容易。在智能体的开发者中,上下文工程显得非常重要。如果缺失精确的上下文,大模型所生成的工作流也不会完善。

演讲亮点

  • 高效的向量搜索为智能体的构建提供语义相关的上下文

  • Elastic 提供一个可视化界面,在几分钟内迅速地创建智能体所需要的 tools 及 agents

  • 使用方便,直接,快速的管道查询语言 ES|QL 来关联多个表格里的数据,丰富数据,为智能体提供更多的上下

  • 提供 MCP,A2A 及 API 接口供应用扩展

听众收益

  • 深入了解 Elasticsearch 的向量搜索原理,使用及长处

  • 了解 AI Agent Builder 如何轻松创建 Agentic AI

除此之外,本次大会还策划了Agentic Engineering多模态理解与生成的突破记忆觉醒:智能体记忆系统的范式重塑与产业落地具身智能与物理世界交互Agent Infra 架构设计AI 重塑数据生产与消费AI 原生基础设施AI 驱动的技术债治理小模型与领域适配模型大模型算力优化Agent 可观测性与评估工程AI for SRE等 20 多个专题论坛,届时将有来自不同行业、不同领域、不同企业的 100+资深专家在 QCon 北京站现场带来前沿技术洞察和一线实践经验。

更多详情可扫码或联系票务经理 18514549229 进行咨询。

mackbookpro m5pro 和 m5max 已发布,本人目前使用 m1max 64g ,有必要换个 14 寸的 pro 吗。
原因有以下几个,看下是否合理

  1. 16 寸的没 14 的方便,希望有个便捷的
  2. m1max 已战 5 年,到更新换代时机
  3. 换个电脑,新气象,m1max 单独在家里当做 maxmini ,做个小服务器

另外 xdr 显示器 2w4 还是买 1w2 的,程序员需要这个显示器吗

基于YOLOv8的脑肿瘤识别(中英文双版) | 附完整源码与效果演示

引言

脑肿瘤是严重威胁人类健康的疾病之一,其早期准确诊断对患者的治疗和预后至关重要。传统的脑肿瘤诊断主要依赖放射科医生的经验,通过CT、MRI等医学影像进行人工判读。然而,这种方法存在主观性强、工作量大、易受疲劳影响等问题。随着深度学习技术的快速发展,基于计算机视觉的医学影像分析为脑肿瘤的自动识别提供了新的解决方案。

本文介绍了一个基于YOLOv8目标检测算法的脑肿瘤识别系统,该系统能够自动检测和定位医学影像中的脑肿瘤区域,为临床诊断提供辅助支持。YOLOv8作为当前最先进的目标检测算法之一,以其出色的检测速度和精度,在医学影像分析领域展现出巨大的应用潜力。
在这里插入图片描述

背景意义

脑肿瘤的早期发现和准确诊断对提高患者生存率具有重要意义。据统计,脑肿瘤的发病率逐年上升,且呈现年轻化趋势。传统的诊断方式存在以下局限性:

  1. 诊断效率低:放射科医生需要逐一分析大量医学影像,耗时耗力
  2. 主观性强:不同医生对同一影像的判断可能存在差异
  3. 易漏诊误诊:长时间工作容易导致疲劳,影响诊断准确性
  4. 医疗资源分布不均:偏远地区缺乏专业的放射科医生

基于深度学习的脑肿瘤自动识别技术能够有效解决上述问题。通过训练神经网络模型,系统可以快速、准确地识别脑肿瘤区域,减轻医生工作负担,提高诊断效率。同时,该技术还可以作为辅助诊断工具,帮助医生发现可能被忽略的微小病灶,降低漏诊率。

在临床应用中,脑肿瘤识别系统可以广泛应用于:

  • 医院影像科的辅助诊断
  • 健康体检中的早期筛查
  • 医学教育和培训
  • 远程医疗诊断支持
    在这里插入图片描述

项目视频展示

https://www.bilibili.com/video/BV1LJPKzBEbi/在这里插入图片描述

包含:
📦完整项目源码
📦预训练模型权重
🗂️数据集

项目详细效果展示

在这里插入图片描述
在这里插入图片描述

数据集信息

本项目使用脑肿瘤医学影像数据集进行模型训练和验证。数据集采用YOLO格式组织,包含训练集和验证集两部分。

数据集配置文件如下:

path: main/datasets
train: images/train
val: images/val

# 类别
names:
  0: 阴性
  1: 阳性

数据集具有以下特点:

  1. 数据格式:采用YOLO标准格式,每张图片对应一个同名的标注文件
  2. 标注方式:使用边界框标注脑肿瘤区域,标注文件包含类别和坐标信息
  3. 图像质量:医学影像经过预处理,保证图像清晰度和一致性
  4. 类别平衡:数据集包含阴性和阳性两类样本,确保模型训练的平衡性

数据集目录结构如下:

main/datasets/
├── images/
│   ├── train/      # 训练集图片
│   └── val/        # 验证集图片
├── labels/
│   ├── train/      # 训练集标注
│   └── val/        # 验证集标注
└── brain-tumor.yaml  # 数据集配置文件

本项目主要工作

本项目基于YOLOv8算法构建了完整的脑肿瘤识别系统,主要工作包括以下几个方面:

1. 数据集构建与预处理

  • 收集和整理脑肿瘤医学影像数据
  • 进行数据清洗和质量控制
  • 实现数据增强策略,包括旋转、翻转、缩放等操作
  • 将数据集划分为训练集和验证集

2. 模型训练与优化

  • 基于YOLOv8架构进行模型训练
  • 调整超参数以获得最佳性能
  • 实现损失函数优化,提高检测精度
  • 采用迁移学习策略,加速模型收敛

3. 系统集成与部署

  • 开发图形用户界面,提供友好的操作体验
  • 实现模型推理功能,支持单张图片和批量检测
  • 集成可视化模块,直观展示检测结果
  • 优化系统性能,确保实时检测能力

4. 性能评估与验证

  • 使用多种评估指标衡量模型性能
  • 在验证集上进行充分测试
  • 分析模型在不同场景下的表现
  • 持续优化模型参数和结构

系统整体架构如下图所示:

graph TB
    A[输入医学影像] --> B[图像预处理]
    B --> C[YOLOv8模型推理]
    C --> D[目标检测]
    D --> E[边界框回归]
    D --> F[类别分类]
    E --> G[结果后处理]
    F --> G
    G --> H[可视化展示]
    H --> I[输出检测结果]
    
    style A fill:#e1f5ff
    style C fill:#ffe1e1
    style I fill:#e1ffe1

国内外研究现状

脑肿瘤识别是医学影像分析领域的重要研究方向,近年来取得了显著进展。

国外研究现状

国外在脑肿瘤识别领域的研究起步较早,主要集中在以下几个方面:

  1. 传统机器学习方法:早期研究主要基于手工特征提取和传统机器学习算法,如支持向量机(SVM)、随机森林等。这些方法需要依赖领域专家设计特征,泛化能力有限。
  2. 深度学习方法:随着深度学习技术的发展,卷积神经网络(CNN)在医学影像分析中得到广泛应用。研究者提出了多种网络架构,如U-Net、V-Net等,在脑肿瘤分割任务中取得了良好效果。
  3. 目标检测方法:近年来,目标检测算法被引入脑肿瘤识别领域。Faster R-CNN、SSD、YOLO等算法在检测速度和精度方面各有优势,为临床应用提供了更多选择。
  4. 多模态融合:一些研究探索了结合多种医学影像模态(如MRI、CT)的方法,通过多源信息融合提高诊断准确性。
    在这里插入图片描述

国内研究现状

国内在脑肿瘤识别领域的研究发展迅速,主要特点包括:

  1. 算法创新:国内学者在改进现有算法方面做出了重要贡献,提出了多种改进的网络结构和训练策略。
  2. 数据集建设:国内研究机构积极构建和发布脑肿瘤数据集,为算法研究提供了数据支持。
  3. 临床应用:部分研究成果已开始应用于临床实践,为医生提供辅助诊断支持。
  4. 产学研结合:高校、医院和企业加强合作,推动技术成果转化。
    在这里插入图片描述

技术发展趋势

当前脑肿瘤识别技术呈现以下发展趋势:

  1. 模型轻量化:为了满足移动端和边缘设备的应用需求,研究者致力于开发轻量级模型,在保持精度的同时降低计算复杂度。
  2. 可解释性增强:提高模型决策的可解释性,增强医生对AI辅助诊断的信任度。
  3. 联邦学习:保护患者隐私的同时,利用多中心数据进行模型训练。
  4. 实时检测:优化算法性能,实现实时或准实时的脑肿瘤检测。

快速开始-部署指南

环境要求

  • Python 3.8+
  • PyTorch 1.12+
  • CUDA 11.0+(GPU加速)
  • Windows/Linux操作系统

安装步骤

  1. 克隆项目代码
git clone [项目地址]
cd braintumor
  1. 创建虚拟环境
conda create -n braintumor python=3.8
conda activate braintumor
  1. 安装依赖包
pip install -r requirements.txt
  1. 准备数据集

将数据集放置在指定目录,确保目录结构与配置文件一致。

模型训练

使用以下命令开始训练:

python main/train.py --data main/datasets/brain-tumor.yaml --epochs 100 --batch 16

主要参数说明:

  • --data:数据集配置文件路径
  • --epochs:训练轮数
  • --batch:批次大小
  • --imgsz:输入图像尺寸
  • --device:训练设备(cpu或cuda)

模型推理

训练完成后,使用以下命令进行推理:

python main/predict.py --weights best.pt --source test_images/

系统使用

启动图形界面:

python youi/main.py

在界面中可以:

  • 选择模型文件
  • 上传待检测图片
  • 查看检测结果
  • 导出检测报告
    在这里插入图片描述

技术亮点

本项目在技术实现上具有以下亮点:

1. 先进的算法架构

采用YOLOv8作为核心检测算法,该算法具有以下优势:

  • 检测速度快,适合实时应用
  • 检测精度高,在多个基准数据集上表现优异
  • 模型结构优化,参数量适中
  • 支持多种输入尺寸,适应不同应用场景

2. 完善的数据处理流程

实现了完整的数据处理流水线:

  • 自动数据清洗和质量检查
  • 多样化的数据增强策略
  • 智能的数据集划分
  • 标注格式自动转换

3. 高效的训练策略

采用先进的训练优化方法:

  • 自适应学习率调整
  • 混合精度训练加速
  • 梯度累积支持大批次训练
  • 早停机制防止过拟合

4. 友好的用户界面

开发了直观易用的图形界面:

  • 简洁的操作流程
  • 实时检测结果显示
  • 批量处理支持
  • 结果导出功能

5. 可扩展的系统架构

系统设计具有良好的可扩展性:

  • 模块化代码结构
  • 支持多种模型格式
  • 可配置的检测参数
  • 插件式功能扩展

6. 全面的性能优化

从多个维度优化系统性能:

  • 模型推理加速
  • 内存使用优化
  • 多线程处理
  • GPU并行计算

总结

本文介绍了一个基于YOLOv8的脑肿瘤识别系统,该系统通过深度学习技术实现了对医学影像中脑肿瘤的自动检测和定位。项目从数据集构建、模型训练、系统集成到性能评估,形成了完整的解决方案。

系统的主要优势包括:

  • 检测精度高,能够准确识别脑肿瘤区域
  • 处理速度快,满足临床实时应用需求
  • 操作简便,提供友好的用户界面
  • 可扩展性强,便于后续功能扩展

未来工作可以从以下几个方面展开:

  1. 扩充数据集规模,提高模型泛化能力
  2. 优化模型结构,进一步提升检测性能
  3. 增强系统可解释性,提高临床接受度
  4. 探索多模态融合,综合利用多种医学影像
  5. 开发移动端应用,扩大应用场景

基于深度学习的脑肿瘤识别技术为医学影像分析提供了新的思路和方法,随着技术的不断发展和完善,必将在临床诊断中发挥越来越重要的作用,为提高脑肿瘤诊断效率和准确性做出贡献。

大家好,我是 Java陈序员

在数据驱动决策的时代,每个企业和个人都渴望快速从数据中挖掘价值,但复杂的 SQL 语句、繁琐的数据库操作却成了横亘在多数人面前的高墙。

今天,给大家介绍一款基于大模型和 RAG 的智能问数系统,通过对话分析数据,告别复杂 SQL!

关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。

项目介绍

SQLBot —— 一款基于大模型和 RAG 的智能问数系统,是对话式数据分析神器。它通过结合大模型与 RAG(检索增强生成)技术,实现了高质量的文本转 SQL 功能。

功能特色

  • 开箱即用: 无需复杂的配置流程,只需简单设置好大模型和数据源,就能立即开启智能问数之旅
  • 多样化操作:支持生成 SQL、生成图表、数据分析、数据预测等多种操作,满足不同的数据需求
  • 数据源管理:可配置多种数据库连接信息,轻松对接各类数据源
  • 工作空间管理:实现资源隔离和权限管理,方便团队协作与数据管控
  • 多模型支持:兼容阿里云百炼、千帆大模型、DeepSeek、腾讯混元、讯飞星火、Gemini、OpenAI、Kimi 等多种主流大模型
  • 易于集成: 支持快速嵌入到第三方业务系统,也支持被 n8n、MaxKB、Dify、Coze 等 AI 应用开发平台集成调用,让各类应用快速拥有智能问数能力
  • 安全可控:提供基于工作空间的资源隔离机制,能够实现细粒度的数据权限控制,确保敏感数据只被授权人员访问,让数据查询既便捷又安全

工作原理

快速上手

SQLBot 支持 Docker 部署,可使用 Docker 快速部署。

1、拉取镜像

docker pull dataease/sqlbot

2、创建挂载目录

mkdir -p /data/software/sqlbot/{excel,file,images,logs,postgresql}

3、运行容器

docker run -d \
  --name sqlbot \
  --restart unless-stopped \
  -p 8000:8000 \
  -p 8001:8001 \
  -v /data/software/sqlbot/excel:/opt/sqlbot/data/excel \
  -v /data/software/sqlbot/file:/opt/sqlbot/data/file \
  -v /data/software/sqlbot/images:/opt/sqlbot/images \
  -v /data/software/sqlbot/logs:/opt/sqlbot/app/logs \
  -v /data/software/postgresql:/var/lib/postgresql/data \
  --privileged=true \
  dataease/sqlbot

4、容器启动成功后,浏览器访问

http://{IP/域名}:8080
  • 用户名: admin
  • 密码: SQLBot@123456

功能体验

SQLBot 开启问数功能需要先配置 AI 模型和数据源。

AI 模型配置

1、进入后台系统管理,选择 AI 模型配置,点击添加模型

2、选择好模型供应商后,输入模型名称、模型、API Key 等配置信息

3、最后,点击保存

数据源配置

1、打开首页,选择数据源,点击新建数据源

2、选择好数据源后,输入数据源连接信息,点击校验

3、数据源配置信息校验通过后,点击下一步,选择数据表

4、最后,点击保存

智能问数

1、首页智能问数,点击开启问数

2、选择数据源,并确定

3、在对话框中输入描述,开始生成图表信息

仪表盘

SQLBot 还提供了仪表盘的功能,可以将智能问数产生的图表自定义刻制成仪表盘。

1、首页仪表盘,点击新建仪表盘

2、选择要展示的图表

3、同时支持富文本、Tab设计

4、最后,预览并保存

无论你是需要快速生成报表的业务人员、追求效率的分析师,还是希望为系统赋能的开发者,SQLBot 都能成为你的得力助手。快去部署体验吧~

项目地址:https://github.com/dataease/SQLBot

最后

推荐的开源项目已经收录到 GitHub 项目,欢迎 Star

https://github.com/chenyl8848/great-open-source-project

或者访问网站,进行在线浏览:

https://chencoding.top:8090/#/

我创建了一个开源项目交流群,方便大家在群里交流、讨论开源项目

但是任何人在群里打任何广告,都会被 T 掉

如果你对这个交流群感兴趣或者在使用开源项目中遇到问题,可以通过如下方式进群

关注微信公众号:【Java陈序员】,回复【开源项目交流群】进群,或者通过公众号下方的菜单添加个人微信,并备注【开源项目交流群】,通过后拉你进群

大家的点赞、收藏和评论都是对作者的支持,如文章对你有帮助还请点赞转发支持下,谢谢!

个人网站或博客启用HTTPS无需复杂流程和高额成本,仅需3步即可通过免费SSL证书完成全链路加密升级,且能通过注册码解锁专属权益、获取技术支持。这不仅可避免浏览器标记“不安全”提示,还能提升搜索引擎排名权重,让访客更放心浏览内容。

第一步:前期准备与域名验证

  1. 确认域名备案状态:国内服务器托管的个人博客需先完成工信部ICP备案,未备案域名无法申请免费SSL证书,且会被搜索引擎限制收录。地区用户可通过省通信管理局官网提交备案申请,审核周期约7个工作日。
  2. 注册SSL账户并解锁专属权益:访问JoySSL官网注册账户时,输入专属注册码230959,可自动解锁免费单域名DV证书(有效期3个月),并享受1次免费证书到期提醒服务专属技术支持通道,工作人员将在1-2个工作日内响应部署咨询与故障排查。
  3. 验证域名所有权:目前主流CA服务商提供两种验证方式,建议优先选择DNS验证:

    • 在域名解析控制台添加TXT记录,内容为CA服务商生成的32位随机字符串,验证通过后15分钟内即可签发证书。
    • 若无法操作域名解析,可选择文件验证:将CA提供的验证文件上传至网站根目录下的.well-known/pki-validation/文件夹内,确认文件可通过外网访问。

第二步:下载证书文件与适配服务器

  1. 选择证书格式:证书签发完成后,根据服务器环境下载对应格式文件:

    • 宝塔面板、Nginx服务器下载PEM格式证书(包含cert.pemprivate.key文件)。
    • Apache服务器下载CRT格式证书。
    • 若使用国内云服务商托管,可直接通过云控制台一键部署,无需手动下载文件。
  2. 备份原始配置文件:在修改服务器配置前,建议备份Nginx或Apache的原始配置文件,避免因配置错误导致网站无法访问。

第三步:部署证书与优化配置

  1. 宝塔面板快速部署:登录宝塔面板后台,进入对应网站的SSL设置界面,将下载的private.key复制粘贴至“密钥(KEY)”输入框,cert.pem粘贴至“证书(PEM)”输入框,勾选“强制HTTPS”后点击保存,网站将自动切换至HTTPS协议。
  2. 手动配置Nginx示例:编辑Nginx配置文件(通常位于/etc/nginx/conf.d/目录),添加以下配置:
nginx
    server {
        listen 80;
        server_name 你的域名;
        return 301 https://$server_name$request_uri; # 强制跳转HTTPS
    }
    server {
        listen 443 ssl;
        server_name 你的域名;
        ssl_certificate /path/to/cert.pem;
        ssl_certificate_key /path/to/private.key;
        ssl_protocols TLSv1.2 TLSv1.3; # 启用安全TLS协议
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    }
    
执行`nginx -t`验证配置文件语法正确后,重启Nginx服务生效。
  1. 检查部署效果:使用浏览器访问网站,地址栏显示锁形图标即表示HTTPS部署成功,可通过SSL Labs服务器测试工具扫描确认证书链完整性与配置安全性。

兄弟们,最近有个产品想法一直在我脑子里转,想拿出来和大家聊聊,看看是不是真有需求,以及大家愿意为它掏多少钱。

想法来源
生活中总有些对话让人心累——比如另一半突然说“你从来都不关心我!”、父母责备“你怎么这么不听话”、同事抱怨“这都做不好?”。
这些话带着情绪和攻击性,但背后其实是需求没被满足(渴望关注、需要帮助、期待认可)。
我就在想:能不能做一个 AI 工具,帮我把这些带有攻击性的语言,实时“翻译”成对方真正的情绪和需求,让我能冷静回应,而不是情绪对抗?

产品形态设想
用户场景:你在微信(或个人微信)上收到一条火药味十足的消息,你想知道 ta 到底想表达什么,以便更好地沟通。
核心功能:将对方的消息(甚至多条的上下文)转发到一个企微机器人,机器人分析后输出一句温和的、以“我”为主语的陈述句,揭示背后的情绪和需求。
例如:“你是不是有病?”
机器人:“我现在感到非常生气,因为我需要你停止这样做,我希望我们能好好沟通。”

为什么觉得可能有价值
亲密关系、亲子沟通、职场协作中,很多人因为“听不出话外音”而吵架或误会。
非暴力沟通的理念越来越被认可,但实践起来很难,AI 正好可以充当“翻译官”。
如果它能帮用户减少一次争吵、挽回一段关系,应该会有人愿意付费。

现在想请教大家
如果你有类似需求,会愿意为这样的工具付费吗?愿意付多少(按月订阅/按次/买断)?
你觉得哪些场景最需要它?(情侣吵架?家长辅导作业?职场沟通?)
技术上还有哪些坑需要提前注意?(隐私、准确性、延迟等)
如果有类似的产品你已经用过,体验如何?
目前想到用企微账号实现,但是转发聊天记录这个操作有点麻烦,你觉得你愿意这么操作吗?你想以怎样的形式操作?

欢迎畅所欲言,无论是吐槽、建议还是直接泼冷水,我都虚心接受。如果能找到几个同好一起探讨,那就更棒了!

一、什么是国密证书?

国密SSL证书,全称是采用国密算法实现SSL/TLS协议功能的数字证书 。

这里的“国密”即国家密码管理局认定的国产商用密码算法。它并非对国际标准的简单模仿,而是一套由中国自主研发、具备自主知识产权的密码算法体系,主要包括 :

  • SM2算法:非对称加密算法,用于数字签名和密钥交换,替代国际上的RSA/ECC算法。
  • SM3算法:密码杂凑算法,用于生成数据摘要,确保信息完整性,替代国际上的SHA算法。
  • SM4算法:对称加密算法,用于数据的加密和解密,替代国际上的AES算法。

简单来说,国密证书就是使用了中国自己的密码算法(SM系列)来为网站传输数据加解密的数字证书 。

二、国密证书与普通证书的核心区别

我们通常所说的“普通证书”,指的是采用国际通用算法(如RSA、ECC)的SSL证书。两者之间的区别主要体现在以下几个方面:

对比维度国密SSL证书普通SSL证书(国际算法)
核心算法采用中国自主的SM2/SM3/SM4算法体系 。采用国际通用的RSA/ECC/SHA算法体系。
秘钥安全更高强度。例如,256位的SM2算法,其安全强度相当于3072位的RSA算法,运算效率更高,抗攻击性更强。依赖密钥长度扩展(如2048位RSA),面对量子计算的威胁,风险日益增加。
自主可控完全自主可控。由国内CA机构签发,根证书掌握在自己手中,能有效防范“后门”风险和技术制裁 。技术根基在海外,根证书由国外机构掌握,在极端情况下存在被吊销或断供的风险 。
兼容性生态闭环。在通用的Chrome、Edge等浏览器上默认不信任,需使用360国密浏览器、红莲花等支持国密的专用浏览器访问。全球通用。预置于几乎所有主流浏览器和操作系统中,全球用户均可无感知访问 。
合规性合规必选。满足《密码法》、等保2.0、密评等国家法规的强制要求,是政府、金融、能源等关键基础设施领域的“必答题” 。通用选择。适用于无强制合规要求的商业场景及跨国业务 。

三、为什么推荐JoySSL?

国密SSL证书申请入口

  1. 申请便捷:用户只需访问JoySSL官网,注册账户时填写特定的申请码230970即可获得优惠和技术支持,快速申请并部署国密证书。
  2. 支持“双算法”自适应:JoySSL提供支持国密算法的证书,并允许用户选择“双算法”方案 。这意味着你可以在服务器上同时部署国密证书和国际证书。当普通浏览器访问时,自动走RSA算法;当国密浏览器访问时,自动走SM2算法。既满足了合规,又兼顾了全球访客的兼容性。
  3. 数据不出境,安全合规:JoySSL基于国内服务器验证签发,证书验签、OCSP等全链路都在国内完成,确保数据传输和响应的及时性与稳定性,消除了数据外泄的风险。
  4. 高性价比与服务:JoySSL不仅提供国密证书,还面向广大站长提供多种免费型及付费型SSL证书,涵盖单域名、多域名和通配符证书。对于教育版和政务版域名,甚至提供一年期的免费DV证书,极大降低了用户尝试国密方案的门槛。

结语

国密SSL证书绝非普通SSL证书的简单替代品,它是我国在网络空间实现“自主可控、安全可信”战略的核心载体 。虽然目前在兼容性上仍需通过“双证书”策略过渡,但其更高的安全强度和符合国家法规的合规属性,已成为政企及关键基础设施网站的必然选择。

如果您正面临国密合规改造,或希望提前布局更安全的加密体系,不妨了解一下 JoySSL,为您的网站筑起一道坚固的“中国盾牌”。

很奇怪,每次在梦境中如果跟人起了争执,发生肢体冲突时总是有力无处使,全力一个大耳巴子挥过去却打不到人,一点也不爽.

昨天的事情:梦中在跟朋友吃宵夜,可能上厕所时碰到了隔壁桌,被找茬,对方从背后给了我一脚,我转身加入战斗,然后左一拳右一拳就是打不着,就很气,然后就结束了.

网上有很多做梦时无法无天的例子,什么弹指间毁天灭地那种,所以这是不是和平日里的下意识培养有关系?

武斗技巧?心理素质?

1 、上次应该追溯到一年前了,本来以为是眼睛疾病。
2 、昨天下班回家一觉醒来眼睛好多了。本来以为是手部沾染了病毒碰到,今早还没碰眼睛。结果今早刚坐入办公室半小时,眼睛又开始疼了。然后就是充满血丝,有点恐怖。

之前 2 站找佬要了个 l 站邀请码,也是水到 3 级了 再放个邀请码吧doge
invites/RJmJRzUsTg

AI 时代,感觉 Token 成了硬通货。只要用 AI 就离不开 Token 。不管是自己,还是公司层面,都要求采购 AI 。大家有哪些好用的 Token 渠道?

关于同步/异步,阻塞/非阻塞,Unix IO模型,可以先看这篇文章网络系统 - Unix IO模型

BIO概述

阻塞式IO。也就是说io没有就绪的时候,操作IO当前线程会被阻塞。也就是用户线程需要等待IO线程完成

服务器实现模式为一个连接一个线程,也就是说,客户端每当有一个连接请求的时候,服务器就需要启动一个对应线程进行处理。但是如果这个连接不做任何事情,就会造成不必要的线程开销。这种模型一般适用于连接数目小且固定的架构。

BIO 其实就是 Reactor的 单reactor 单进程/线程模型

BIO的问题

  • 同一时间,服务器只能接受来自于客户端A的请求信息;虽然客户端A和客户端B的请求是同时进行的,但客户端B发送的请求信息只能等到服务器接受完A的请求数据后,才能被接受。
  • 由于服务器一次只能处理一个客户端请求,当处理完成并返回后(或者异常时),才能进行第二次请求的处理。很显然,这样的处理方式在高并发的情况下,是不能采用的。

多线程方式 - 伪异步方式

上面说的情况是服务器只有一个线程的情况,那么我们就能想到使用多线程技术来解决这个问题:

  • 当服务器收到客户端X的请求后,(读取到所有请求数据后)将这个请求送入一个独立线程进行处理,然后主线程继续接受客户端Y的请求。
  • 客户端一侧,也可以使用一个子线程和服务器端进行通信。这样客户端主线程的其他工作就不受影响了,当服务器端有响应信息的时候再由这个子线程通过 监听模式/观察模式(等其他设计模式)通知主线程。

如下图所示:

这种方式其实就是Reactor 的 单reactor 多线程/多进程模型,同样有是有局限性的,因此也就有了后文的NIO方案

  • 虽然在服务器端,请求的处理交给了一个独立线程进行,但是操作系统通知accept()的方式还是单个的。也就是,实际上是服务器接收到数据报文后的“业务处理过程”可以多线程,但是数据报文的接受还是需要一个一个的来
  • 在linux系统中,可以创建的线程是有限的。可以通过cat /proc/sys/kernel/threads-max 命令查看可以创建的最大线程数。当然这个值是可以更改的,但是线程越多,CPU切换所需的时间也就越长,用来处理真正业务的需求也就越少。
  • 创建一个线程是有较大的资源消耗的。JVM创建一个线程的时候,即使这个线程不做任何的工作,JVM都会分配一个堆栈空间。这个空间的大小默认为128K,可以通过-Xss参数进行调整。当然还可以使用ThreadPoolExecutor线程池来缓解线程的创建问题,但是又会造成BlockingQueue积压任务的持续增加,同样消耗了大量资源。
  • 另外,如果应用程序大量使用长连接的话,线程是不会关闭的。这样系统资源的消耗更容易失控。 那么,如果真想单纯使用线程解决阻塞的问题,那么自己都可以算出来您一个服务器节点可以一次接受多大的并发了。看来,单纯使用线程解决这个问题不是最好的办法。

BIO通信方式深入分析

BIO的问题关键不在于是否使用了多线程(包括线程池)处理这次请求,而在于accept()、read()的操作点都是被阻塞。要测试这个问题,也很简单。这里模拟了20个客户端(用20根线程模拟),利用JAVA的同步计数器CountDownLatch,保证这20个客户都初始化完成后然后同时向服务器发送请求,然后观察一下Server这边接受信息的情况。

服务器端使用单线程

  • 客户端代码(SocketClientDaemon),模拟20个客户端连接
public class SocketClientDaemon {
    public static void main(String[] args) throws Exception {
        Integer clientNumber = 20;
        CountDownLatch countDownLatch = new CountDownLatch(clientNumber);

        //分别开始启动这20个客户端
        for (int index = 0; index < clientNumber; index++) {
            SocketClientRequestThread client = new SocketClientRequestThread(countDownLatch, index);
            new Thread(client).start();
            countDownLatch.countDown();
        }

        //这个wait不涉及到具体的实验逻辑,只是为了保证守护线程在启动所有线程后,进入等待状态
        synchronized (SocketClientDaemon.class) {
            SocketClientDaemon.class.wait();
        }
    }
}
  • 客户端代码(SocketClientRequestThread模拟20个请求)
@Slf4j
public class SocketClientRequestThread implements Runnable {

    private CountDownLatch countDownLatch;

    //线程编号
    private Integer clientIndex;

    /**
     * countDownLatch是java提供的同步计数器。
     * 当计数器数值减为0时,所有受其影响而等待的线程将会被激活。这样保证模拟并发请求的真实性
     *
     * @param countDownLatch
     */
    public SocketClientRequestThread(CountDownLatch countDownLatch, Integer clientIndex) {
        this.countDownLatch = countDownLatch;
        this.clientIndex = clientIndex;
    }

    @Override
    public void run() {
        Socket socket = null;
        OutputStream clientRequest = null;
        InputStream clientResponse = null;

        try {
            socket = new Socket("localhost", 83);
            clientRequest = socket.getOutputStream();
            clientResponse = socket.getInputStream();

            //等待,直到SocketClientDaemon完成所有线程的启动,然后所有线程一起发送请求
            this.countDownLatch.await();

            //发送请求信息
            clientRequest.write(("这是第" + this.clientIndex + " 个客户端的请求。").getBytes());
            clientRequest.flush();

            //在这里等待,直到服务器返回信息
            log.info("第{}个客户端的请求发送完成,等待服务器返回信息", this.clientIndex);
            int maxLen = 1024;
            byte[] contextBytes = new byte[maxLen];
            int realLen;
            String message = "";

            //程序执行到这里,会一直等待服务器返回信息(注意,前提是in和out都不能close,如果close了就收不到服务器的反馈了)
            while ((realLen = clientResponse.read(contextBytes, 0, maxLen)) != -1) {
                message += new String(contextBytes, 0, realLen);
            }
            log.info("接收到来自服务器的信息:{}", message);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        } finally {
            try {
                if (clientRequest != null) {
                    clientRequest.close();
                }
                if (clientResponse != null) {
                    clientResponse.close();
                }
            } catch (IOException e) {
                log.error(e.getMessage(), e);
            }
        }
    }
}
  • 服务器端(SocketServer) 单个线程
@Slf4j
public class SocketServer {

    public static void main(String[] args) throws Exception {
        ServerSocket serverSocket = new ServerSocket(83);

        try {
            while (true) {
                //这里会被阻塞,直到能获取到连接
                Socket socket = serverSocket.accept();

                //下面开始收取信息
                InputStream in = socket.getInputStream();
                OutputStream out = socket.getOutputStream();

                //获取端口
                Integer sourcePort = socket.getPort();
                int maxLen = 2048;
                byte[] contextBytes = new byte[maxLen];

                //这里会被阻塞,直到有数据准备好
                int realLen = in.read(contextBytes, 0, maxLen);
                //读取信息
                String message = new String(contextBytes, 0, realLen);

                //打印信息
                log.info("服务器收到来自于端口: {}的信息: {}", sourcePort, message);

                Thread.sleep(10000);//模拟执行业务逻辑
                //开始发送信息
                out.write("回发响应信息!".getBytes());

                //关闭
                out.close();
                in.close();
                socket.close();
            }
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        } finally {
            if (serverSocket != null) {
                serverSocket.close();
            }
        }
    }
}

经过执行就会发现,服务器一次只能处理一个客户端请求,当处理完成并返回后(或者异常时),才能进行第二次请求的处理。这就是上面提到的BIO存在的问题

优化服务器端为多线程

客户端代码和上文一样,最主要是更改服务器端的代码:

@Slf4j
public class SocketServer {

    static {
        BasicConfigurator.configure();
    }

    public static void main(String[] args) throws Exception {
        ServerSocket serverSocket = new ServerSocket(83);

        try {
            while (true) {
                Socket socket = serverSocket.accept();
                //业务处理过程可以交给一个线程(这里可以使用线程池),并且线程的创建是很耗资源的。
                //但最终还是改变不了.accept()只能一个一个接受socket的情况,并且被阻塞的情况
                SocketServerThread socketServerThread = new SocketServerThread(socket);
                new Thread(socketServerThread).start();
            }
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        } finally {
            if (serverSocket != null) {
                serverSocket.close();
            }
        }
    }
}

@Slf4j
class SocketServerThread implements Runnable {

    private Socket socket;

    public SocketServerThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        InputStream in = null;
        OutputStream out = null;
        try {
            //下面收取信息
            in = socket.getInputStream();
            out = socket.getOutputStream();
            Integer sourcePort = socket.getPort();
            int maxLen = 1024;
            byte[] contextBytes = new byte[maxLen];
            //使用线程,同样无法解决read方法的阻塞问题,
            //也就是说read方法处同样会被阻塞,直到操作系统有数据准备好
            int realLen = in.read(contextBytes, 0, maxLen);
            //读取信息
            String message = new String(contextBytes, 0, realLen);

            log.info("服务器收到来自于端口: " + sourcePort + "的信息: " + message);

            Thread.sleep(10000);//模拟执行业务逻辑
            //下面开始发送信息
            out.write("回发响应信息!".getBytes());
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        } finally {
            //关闭资源
            try {
                if (in != null) {
                    in.close();
                }
                if (out != null) {
                    out.close();
                }
                if (this.socket != null) {
                    this.socket.close();
                }
            } catch (IOException e) {
                log.error(e.getMessage(), e);
            }
        }
    }
}

这里与单线程相比,使用了多线程来处理具体的业务。但还是改变不了.accept()只能一个一个阻塞处理 socket的情况

问题根源

那么重点的问题并不是“是否使用了多线程”,而是为什么accept()、read()方法会被阻塞。

API文档中对于 serverSocket.accept() 方法的使用描述:

Listens for a connection to be made to this socket and accepts it. The method blocks until a connection is made.
翻译一下:监听与此套接字的连接并接受它。该方法会一直阻塞,直到建立连接为止。

这主要就涉及到阻塞式同步IO的工作原理:

  1. 服务器线程发起一个accept动作,询问操作系统 是否有新的socket套接字信息从端口X发送过来。accept源码如下:

    // java.net.ServerSocket#accept
    public Socket accept() throws IOException {
        if (isClosed())
            throw new SocketException("Socket is closed");
        if (!isBound())
            throw new SocketException("Socket is not bound yet");
        Socket s = new Socket((SocketImpl) null);
        implAccept(s);//显然会走到这个逻辑
        return s;
    }
    
    //java.net.ServerSocket#implAccept(java.net.Socket)
    protected final void implAccept(Socket s) throws IOException {
        SocketImpl si = s.impl;
        
        // Socket has no SocketImpl
        if (si == null) {//上面传进来的null
            si = implAccept();
            s.setImpl(si);
            s.postAccept();
            return;
        }
    
        //...省略
        s.postAccept();
    }
    
    //java.net.ServerSocket#implAccept()
    private SocketImpl implAccept() throws IOException {
        if (impl instanceof PlatformSocketImpl) {
            return platformImplAccept();
        } else {
            //...省略
        }
    }
    
    //java.net.ServerSocket#platformImplAccept
    private SocketImpl platformImplAccept() throws IOException {
        assert impl instanceof PlatformSocketImpl;
    
        // create a new platform SocketImpl and accept the connection
        SocketImpl psi = SocketImpl.createPlatformSocketImpl(false);
        implAccept(psi);
        return psi;
    }
    
    //java.net.ServerSocket#platformImplAccept
    private void implAccept(SocketImpl si) throws IOException {
       assert !(si instanceof DelegatingSocketImpl);
    
       // accept a connection
      impl.accept(si);
    
      //...省略
    }
    
    
    //java.net.AbstractPlainSocketImpl#accept
    protected void accept(SocketImpl si) throws IOException {
        si.fd = new FileDescriptor();
        acquireFD();
        try {
            socketAccept(si);
        } finally {
            releaseFD();
        }
        SocketCleanable.register(si.fd, true);
    }
  1. 注意,是询问操作系统。也就是说socket套接字的IO模式支持是基于操作系统的,那么自然同步IO/异步IO的支持就是需要操作系统级别的了。如下:

    // java.net.PlainSocketImpl#socketAccept
    void socketAccept(SocketImpl s) throws IOException {
            int nativefd = checkAndReturnNativeFD();
    
            if (s == null)
                throw new NullPointerException("socket is null");
    
            int newfd = -1;
            InetSocketAddress[] isaa = new InetSocketAddress[1];
            if (timeout <= 0) { //如果没有设置timeout,那么在调用JNI时会一直等待,直到有数据返回
                newfd = accept0(nativefd, isaa);//这是个JNI方法
            } else {
                configureBlocking(nativefd, false);
                try {
                    waitForNewConnection(nativefd, timeout);
                    newfd = accept0(nativefd, isaa);
                    if (newfd != -1) {
                        configureBlocking(newfd, true);
                    }
                } finally {
                    configureBlocking(nativefd, true);
                }
            }
            /* Update (SocketImpl)s' fd */
            fdAccess.set(s.fd, newfd);
            /* Update socketImpls remote port, address and localport */
            InetSocketAddress isa = isaa[0];
            s.port = isa.getPort();
            s.address = isa.getAddress();
            s.localport = localport;
            if (preferIPv4Stack && !(s.address instanceof Inet4Address))
                throw new SocketException("Protocol family not supported");
    }
    
    // java.net.PlainSocketImpl#accept0
    static native int accept0(int fd, InetSocketAddress[] isaa) throws IOException;

最后调用的accept0十个native方法,就是调用的操作系统级别的accept。因此如果操作系统没有发现有套接字从指定的端口X来,那么操作系统就会等待。这样serverSocket.accept()方法就会一直等待。这就是为什么accept()方法为什么会阻塞: 它内部的实现是使用的操作系统级别的同步IO

朋友拜托我帮他写个人网站, 希望国内和国外都能良好访问. 我自己有博客, 之前回国出差的时候发现就算没被 ban 也访问巨慢. 自己博客无所谓, 帮朋友写毕竟拿钱的所以希望做好. 没用过国内相关服务, 所以想问下有经验的大佬如何正常在国内访问. 服务器想买国外的, 域名是 dynadot 买的. 目前有下面的想法, 不知道可行与否.

  1. 备案是必须的吗? 查了下似乎不备案不能用国内的 OSS 和 CDN 服务.
  2. 打算日本/香港/韩国服务器 + 国内 OSS 托管图片是否可行. 如果国内 OSS 不行用香港 OSS 会很慢吗.
  3. 日流量小几千的话成本大概多少, 使用这些服务有没有什么暗坑 (比如被刷流量导致出现高额费用).

此外, 也想问下这种程度的活儿人工费通常是怎么算的呢 (朋友有钱, 让我按市场价算).

如果高还原的 figma 转前端代码,接了一个小项目,但是 figma make ai 或者 codex mcp 都还原不好,高价有偿请教专家 寻求经验
qq 1072505283

📰 今日新闻精选:

  • 大会发言人娄勤俭表示:未来十多年,中国中等收入群体可能超 8 亿人
  • 委员洪明基建议:高考英语由 150 分降至 100 分;委员熊水龙建议:取消在身份证卡片上印制 “住址” 信息
  • 2025 年前 500 家物业服务企业的物业费平均收缴率已降至 71%,连续四年下滑
  • 广东高层建筑消防新规将施行:禁止电动自行车及其电池进入电梯
  • 中国量子手机面世:宣称通话内容无法被窃听,预计今年底或明年初面向民用市场推出
  • iPhone17 严重褪色遭集体投诉:有用户反映只用一个月橙色变粉色
  • 我国再次刷新短距离磁悬浮加速世界纪录,在 5.3 秒内加速至时速 800 公里
  • 中国石油市值突破 2.14 万亿,时隔七年重夺 A 股市值榜首
  • 多家券商试水 7×24 小时银证转账,打破传统交易时段限制,实现资金 “随转随用”
  • 日媒:日防卫省决定扩建硫黄岛自卫队基地,并考虑扩大其 “防空识别区” 范围
  • 外媒:欧洲天然气价格近期暴涨约 75%,欧盟或将重新讨论俄罗斯天然气进口禁令
  • 美媒:伊朗称完全控制霍尔木兹海峡,十多艘油轮被炮弹击中;特朗普首次承认与伊朗冲突推高了国际油价
  • 外媒:特朗普威胁要切断与西班牙贸易往来,因西班牙不支持美国打击伊朗,西班牙回应:美国必须尊重双边协定
  • 美军潜艇在印度洋击沉一艘伊朗军舰,造成至少 80 人死亡;美防长称美以要一周内完全控制伊朗领空
  • 外媒:伊朗宣布即将选出新任最高领袖,哈梅内伊之子或有望当选;以色列威胁称,任何成为伊朗最高领袖的人都将成为清除目标

📅 今日信息:

  • 公历:2026-03-05 星期四 双鱼座
  • 农历:二〇二六年正月十七
  • 公历纪念日:周恩来诞辰纪念日、中国青年志愿者服务日
  • 下一节气:2026-03-05,惊蛰
  • 今年进度:17.53%(已过 64 天,剩余 300 天)

🌟 历史上的今天

  • 1827 年:意大利作曲家威尔第出生,他的歌剧《茶花女》等作品至今仍被广泛演出。
  • 1970 年:《不扩散核武器条约》生效,旨在防止核武器扩散,促进和平利用核能。

喉咙不痛不痒,痰不浓不大味不冲。
颜色不深量也不多类似唾沫的集聚,舌头探上去质感也是稍黏而已。

但是总是时不时的就要清一下喉咙。这是个啥毛病。

是这样子。
本来孩子 3 个月。之前都是爱他美 半水解。
但我想,国产除了正常思维习惯,很多人都会异口同声买进口。
但我们如果要从客观事实分析 ,国产奶粉真的会比国外进口的差吗?
如果要分析应该怎么分析。
娃是 12 月出生的,今天买了完达山,
但我纯粹是因为看销量不错,二,是国产。三,我看评论那么高。值得尝试。
但我还是不知道应该怎么客观去分析这个奶粉。