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

杂记 08

1 调试断点

编程实践严重不足,index out of range是怎么一步步看的都不清楚的猪头。。。

调试断点是个实用技能,跟着我一步步来学 Python 里用调试断点(以常见的 PyCharm 编辑器为例,其他编辑器 / IDE 逻辑类似 ):

一、基础操作流程

  1. 打(设置)断点
    找到代码行号,点击行号左侧的空白区域,会出现一个小红点(断点标记),就像你截图里代码 del list_a[i] 那行的黄色小灯旁边,点行号左边就能打。
  2. 启动调试模式
    点击编辑器右上角(或工具栏里)的 “虫子” 图标(调试运行按钮),代码会运行到第一个断点处暂停,进入调试状态。
  3. 调试面板功能
  • 变量查看:下方调试区域能看当前变量值(像你截图里 ilist_a 的实时数据 ),清楚代码执行到这一步变量啥状态。
  • 单步执行
    • Step Over(F8):逐行执行代码,遇到函数调用不进去,直接执行完函数看结果,适合快速走流程。
    • Step Into(F7):遇到函数调用会进入函数内部逐行调试,想深究函数逻辑就用它。
    • Step Out(Shift + F8):在函数里调试时,直接执行完当前函数剩下代码,跳出函数回到调用位置。
  • 继续运行(F9):从当前断点直接跑到下一个断点(没新断点就跑完程序),适合跳过中间已知没问题的代码。

二、实用小技巧

  • 条件断点:右键断点小红点,能设置条件(比如 i > 5 ),代码执行到这行且满足条件才暂停,过滤无效调试超好用。
  • 监视表达式:在调试面板 “监视” 区,手动输入变量、表达式(像 list_a[i] > 3 ),实时看计算结果,不用频繁看变量列表。

简单说,就是打个断点 → 调试运行 → 用单步 / 继续等控制代码暂停,看变量 / 表达式找问题 ,多试几次写几行小代码(比如你截图里的列表操作)调试,很快就熟练啦,遇到具体编辑器问题随时再问~

2 关于python多模块学习

Python 模块多是常态,但无需全部学习,核心是按 “需求驱动” 分类学习,优先掌握高频实用模块,再逐步拓展。以下是一套可落地的学习路径,帮你避免 “眉毛胡子一把抓”:

第一步:明确 “优先级”—— 先学 “基础高频模块”(必学)

这些模块是 Python 开发的 “基本功”,几乎所有场景都会用到,优先掌握能快速解决 80% 的基础问题。

模块类别核心模块学习重点(解决什么问题)学习建议
数据处理math基础数学运算(如开方、三角函数、取整)不用死记,用到时查官方文档,重点记常用函数(如math.sqrtmath.ceil
random生成随机数(如随机选值、打乱列表)结合小案例练(如 “模拟掷骰子”“随机抽选名单”)
datetime处理时间(如获取当前时间、时间格式转换、计算时差)重点掌握datetime.datetimestrftime/strptime(时间与字符串互转)
数据结构list/dict(虽不是 “模块”,但属于核心数据类型)熟练掌握列表推导式、字典键值操作,这是后续模块的基础
文件操作os/os.path操作文件 / 文件夹(如创建文件夹、遍历文件、路径拼接)重点练 “批量处理文件”(如批量修改文件名),结合os.path.join避免路径错误

第二步:按 “应用场景” 学 “进阶模块”(按需选择)

学会基础模块后,根据你的目标(如数据分析、自动化、Web 开发)针对性学习,避免无目的拓展。

场景 1:数据分析 / 可视化(最热门场景之一)
  • 核心模块numpy(数值计算)→ pandas(表格数据处理)→ matplotlib/seaborn(画图)
  • 学习逻辑:先学numpy的数组操作(比列表快 10 倍 +),再用pandas处理 Excel/CSV 数据(如筛选、分组统计),最后用matplotlib画折线图 / 柱状图。
  • 小案例驱动:比如 “用pandas读取 Excel 表格,统计每月销售额,再用matplotlib画趋势图”,边做边记。
场景 2:自动化办公(提高效率)
  • 核心模块openpyxl(操作 Excel)、python-docx(操作 Word)、smtplib(发邮件)、pyautogui(模拟鼠标键盘)
  • 学习逻辑:先解决 “重复工作”(如 “用openpyxl批量填写 Excel 表格”“用python-docx批量生成报告”),再学复杂自动化(如 “用pyautogui自动截图 + 发邮件”)。
场景 3:Web 开发(做网站 / 接口)
  • 核心模块flask(轻量 Web 框架)/django(全能 Web 框架)、requests(发送 HTTP 请求,调用别人的接口)
  • 学习逻辑:先学requests(比如 “调用天气 API 获取天气数据”),再用flask写一个简单接口(如 “接收前端请求,返回数据”),最后学django做完整网站。

第三步:掌握 “查模块” 的能力(比记模块更重要)

Python 模块太多,没人能全记住,关键是 “用到时能快速找到方法”:

  1. 优先查官方文档:Python 官方文档(docs.python.org)是最权威的,比如查pandas就搜 “pandas official documentation”,看 “Quick Start” 和 “User Guide”。
  2. 用 “关键词 + 模块名” 搜案例:比如 “python pandas 筛选数据”,优先看 Stack Overflow 或掘金的实战文章,比纯看文档快。
  3. 善用help()函数:在 Python 终端输入help(模块名.函数名)(如help(pandas.DataFrame.filter)),能直接看函数的参数和用法,不用跳网页。

总结:3 个核心原则

  1. 不贪多,先 “用” 再 “记”:比如学pandas,先做 “处理一个 Excel 表格” 的案例,比先背 10 个函数管用。
  2. 不脱离场景:如果你的目标是 “自动化办公”,就别先学numpy(用不上),先学openpyxl;如果是 “数据分析”,就别先学pyautogui
  3. 先解决 “小问题”:比如先学 “用os模块批量删除空文件夹”,再学 “用pandas处理 10 万行数据”,从小问题积累信心。

按这个路径,你不会被 “模块多” 吓到,反而能快速把模块用起来,形成 “学习→实践→巩固” 的正循环。

不能使用本地Windows路径在Linux服务器上访问文件

在 Linux 服务器上无法直接使用 Windows 本地路径(如 C:\Users\File.txt)访问文件,核心原因是操作系统的文件系统架构、路径格式和网络协议完全不同。要实现跨系统文件访问,需通过「协议挂载」「远程传输」或「工具映射」等方式解决,以下是具体原因分析和解决方案。

一、核心原因:Windows 与 Linux 的底层差异

直接使用 Windows 路径失败的本质是两者的底层设计不兼容,主要体现在 3 个方面:

对比维度Windows 系统Linux 系统不兼容后果
路径分隔符使用反斜杠 \(如 C:\Doc使用正斜杠 /(如 /home路径符号不识别,直接报错
文件系统基于盘符(C 盘、D 盘)管理基于单根目录 / 树形结构不存在 “C 盘”“D 盘” 概念,路径无效
访问协议本地路径依赖 NTFS/FAT32 协议本地路径依赖 Ext4/XFS 协议跨系统无统一协议,无法直接读取

二、解决方案:3 种常用跨系统文件访问方式

根据需求(临时传输 / 长期挂载 / 可视化操作),可选择以下 3 种方案,覆盖绝大多数场景:

方案 1:临时文件传输(适合单次 / 少量文件)

如果仅需偶尔传输文件(如把 Windows 本地文件传到 Linux,或反之),无需长期挂载,推荐用「文件传输协议」工具,操作简单且无需配置系统。

工具类型推荐工具操作步骤(以 Windows→Linux 为例)
GUI 可视化工具FileZilla(免费)、WinSCP1. 打开工具,输入 Linux 服务器的 IP、用户名、密码(端口默认 22,需确保 Linux 开启 SSH 服务);
2. 左侧是 Windows 本地文件(可直接选 C 盘 / D 盘文件),右侧是 Linux 目录;
3. 拖拽文件即可完成传输。
命令行工具Windows Terminal(自带)1. 打开 Terminal,输入命令:
scp C:\Users\YourName\test.txt 用户名@LinuxIP:/home/用户名/
(解释:scp是跨系统复制命令,前半段是 Windows 本地路径,后半段是 Linux 目标路径);
2. 输入 Linux 密码,等待传输完成。
方案 2:长期挂载(适合频繁访问,像用本地文件一样)

如果需要长期、高频访问 Windows 文件(如 Linux 服务器需持续读取 Windows 共享文件夹中的数据),可将 Windows 路径「挂载」到 Linux 目录,实现 “Linux 中用本地路径访问 Windows 文件”。

核心原理:通过 Samba 协议(Windows 文件共享默认协议),让 Linux 识别 Windows 的共享目录,并映射为 Linux 的本地目录(如 /mnt/win_share)。

具体步骤(以 CentOS/Ubuntu 为例):
  1. Windows 端:共享目标文件夹

    • 找到需要访问的 Windows 文件夹(如 D:\Linux_Share),右键「属性」→「共享」;
    • 添加 “Everyone” 或指定用户,设置 “读取 / 写入” 权限(根据需求调整);
    • 记录 Windows 的 IP 地址(按 Win+R 输入 cmd,执行 ipconfig 查看 IPv4 地址,如 192.168.1.100)。
  2. Linux 端:安装 Samba 客户端并挂载

    • 安装 Samba 工具(CentOS 用 yum,Ubuntu 用 apt):

      bash

      # CentOS/RHEL
      sudo yum install -y cifs-utils
      # Ubuntu/Debian
      sudo apt install -y cifs-utils
      
    • 创建 Linux 本地挂载目录(如 /mnt/win_share):

      bash

      sudo mkdir -p /mnt/win_share
      
    • 执行挂载命令(将 Windows 共享目录挂载到 Linux 目录):

      bash

      sudo mount -t cifs //192.168.1.100/Linux_Share /mnt/win_share \
      -o username=Windows用户名,password=Windows密码,vers=3.0
      
       
      • 参数说明://WindowsIP/共享文件夹名 是 Windows 共享路径,/mnt/win_share 是 Linux 本地目录,vers=3.0 是 Samba 协议版本(避免兼容性问题)。
  3. 验证与开机自动挂载

    • 挂载后,访问 /mnt/win_share 即可看到 Windows 文件夹中的文件,操作方式与 Linux 本地文件完全一致;
    • 若需开机自动挂载,编辑 /etc/fstab 文件(需谨慎操作):

      bash

      sudo vi /etc/fstab
      # 在末尾添加一行
      //192.168.1.100/Linux_Share /mnt/win_share cifs username=Windows用户名,password=Windows密码,vers=3.0 0 0
      
    • 保存后执行 sudo mount -a 生效,下次开机将自动挂载。
方案 3:远程桌面映射(适合图形化操作)

如果习惯用 Windows 远程桌面(RDP)控制 Linux(需 Linux 安装 XRDP 服务),可在远程桌面中直接 “映射” Windows 本地磁盘到 Linux,实现可视化访问。

操作步骤:

  1. Linux 端:安装 XRDP 服务(以 Ubuntu 为例):

    bash

    sudo apt install -y xrdp xfce4
    sudo systemctl enable --now xrdp
    
  2. Windows 端:打开远程桌面连接(按 Win+R 输入 mstsc):
    • 输入 Linux 服务器 IP,点击「显示选项」→「本地资源」→「详细信息」;
    • 勾选需要映射的 Windows 本地磁盘(如 C 盘、D 盘),点击「确定」→「连接」;
  3. 远程登录 Linux 后
    • 打开 Linux 的文件管理器(如 Thunar),在左侧 “网络” 中会看到映射的 Windows 磁盘(如 tsclient/C),双击即可访问 Windows 本地文件。

三、常见问题排查

  1. 挂载时提示 “权限被拒绝”

    • 检查 Windows 共享文件夹的权限是否正确(确保指定用户有读写权限);
    • 确认 Linux 挂载命令中的 Windows 用户名 / 密码是否正确(注意区分大小写)。
  2. Samba 挂载后中文文件名乱码

    • 挂载命令中添加编码参数 iocharset=utf8,如:

      bash

      sudo mount -t cifs //192.168.1.100/Linux_Share /mnt/win_share \
      -o username=xxx,password=xxx,vers=3.0,iocharset=utf8
      
  3. Linux 无法连接 Windows 共享目录

    • 检查 Windows 防火墙是否关闭(或允许 “文件和打印机共享” 端口);
    • 确认 Windows 和 Linux 在同一局域网(或能互通 IP),可通过 ping 192.168.1.100 测试连通性。

通过以上方案,可实现 Windows 与 Linux 的文件互通,替代无效的 “直接使用 Windows 本地路径” 方式。根据访问频率和操作习惯选择对应方案即可(临时传文件用方案 1,长期访问用方案 2,图形化操作用方案 3)。

4 OOM错误

OOM(Out Of Memory)错误是指程序或系统在尝试分配内存时,发现可用内存不足而导致的错误。这种错误在各种编程语言和操作系统中都可能出现,尤其常见于内存密集型应用或资源受限的环境中。

一、OOM 错误的常见表现

  • 程序突然崩溃或终止,无明显征兆
  • 系统日志中出现 "Out of memory" 相关提示
  • 应用响应变慢,最终停止响应
  • 部分系统会触发 "内存不足杀手(OOM Killer)",自动终止消耗内存最多的进程

二、常见原因分析

  1. 内存泄漏:程序未能正确释放不再使用的内存,导致内存占用持续增长
  2. 数据量过大:处理的数据超过了系统或程序的内存限制
  3. 内存分配不合理:一次性申请了过多内存(如创建过大的数组)
  4. 资源竞争:多个进程 / 线程同时竞争有限的内存资源
  5. 配置不当:JVM 等运行环境的内存参数设置不合理
  6. 内存碎片化:频繁分配和释放小块内存导致内存碎片,无法分配连续的大块内存

三、不同环境下的 OOM 错误处理

1. Java 中的 OOM 错误

Java 中常见的 OOM 错误包括:

  • java.lang.OutOfMemoryError: Java heap space:堆内存不足
  • java.lang.OutOfMemoryError: PermGen space/Metaspace:方法区 / 元空间不足
  • java.lang.OutOfMemoryError: Requested array size exceeds VM limit:数组过大

解决方法

  • 调整 JVM 参数:-Xms(初始堆大小)、-Xmx(最大堆大小)、-XX:MetaspaceSize
  • 使用内存分析工具(如 VisualVM、MAT)检测内存泄漏
  • 优化数据处理方式,避免一次性加载大量数据
2. Linux 系统中的 OOM

Linux 内核有 OOM Killer 机制,当系统内存耗尽时,会选择 "最合适" 的进程终止以释放内存。

查看 OOM 相关日志

bash

dmesg | grep -i 'out of memory'
grep -i 'killed process' /var/log/messages

临时解决方法

  • 增加系统内存或交换分区
  • 终止不必要的进程释放内存:kill -9 <进程ID>
  • 调整 OOM Killer 参数,保护关键进程
3. Python 中的 OOM 错误

Python 中 OOM 错误通常表现为MemoryError异常。

解决方法

  • 使用生成器(generator)处理大数据,避免一次性加载
  • 增加系统内存或使用 64 位 Python
  • 使用内存分析工具(如 memory_profiler)定位内存问题
  • 采用分批处理的方式处理大数据集

四、通用排查与解决策略

  1. 监控内存使用情况

    • 系统层面:topfreevmstat等命令
    • 应用层面:各语言对应的内存分析工具
  2. 优化内存使用

    • 及时释放不再使用的资源
    • 采用流式处理而非一次性加载全部数据
    • 使用更高效的数据结构和算法
  3. 增加可用内存

    • 物理内存升级
    • 配置适当的交换分区(swap)
    • 分布式处理,将任务分配到多个节点
  4. 设置内存限制

    • 为进程设置最大内存使用限制
    • 实现内存使用监控,在接近阈值时主动释放资源

五、预防措施

  1. 进行充分的压力测试,模拟高负载场景
  2. 实现内存监控告警机制
  3. 定期检查内存使用趋势,及时发现内存泄漏
  4. 为关键服务配置自动重启机制,在 OOM 后能快速恢复
  5. 合理规划系统架构,避免单点内存压力过大

处理 OOM 错误通常需要结合具体环境和应用场景,通过监控、分析和优化三个步骤,逐步定位问题根源并采取相应措施。

http://www.dtcms.com/a/355727.html

相关文章:

  • CnSTD+CnOCR的联合使用
  • vsgCs显示谷歌全球倾斜模型-节点
  • 9 从 “内存怎么存” 到 “指针怎么用”:计算机内存编址机制 + C 语言指针核心 + memory 模拟实现
  • “AI+制造”政策下,户外智能清洁如何跑出加速度?
  • 20250828-学习JumpServer开源堡垒机使用:统一访问入口 + 安全管控 + 操作审计
  • 复杂BI报表SQL
  • 集成电路学习:什么是TensorFlow
  • MCP Factory——专业 MCP Server 开发平台,正式发布,免费下载!
  • 一站式爬虫MCP服务器助力AI市场分析师
  • 微服务相关面试题
  • ComfyUI ControlNet 保姆级教程:开箱即用的示例工作流,精准控制AI图像生成
  • 记录git报错ssh: connect to host github.com port 22: Connection timed out,已解决
  • P3373 【模板】线段树 2
  • l六步完成麒麟操作系统挂载本地REPO源
  • 软考 系统架构设计师系列知识点之杂项集萃(134)
  • IPv6过渡技术IPv6 over IPv4
  • 【数据结构与算法】LeetCode 20.有效的括号
  • 跨网络通信:路由器如何实现全球互联
  • QT控件:【控件概述】【QWidget核心体系】【按钮类控件】【显示类控件】
  • 实战回忆录从webshell开始突破边界
  • 3D血管图像处理与连接系统
  • Odoo AI 智能查询系统
  • 【LeetCode每日一题】160.相交链表 206. 反转链表
  • AI智能供应链深度解析:从库存优化到风险预警,解锁企业降本提效新路径
  • 基于deepseek的Spring boot入门
  • Zabbix监控Dell R系列硬件(PowerEdge R740等)
  • git 小白入门教学
  • TypeScript:symbol类型
  • vscode自动格式化,取消保存时自动格式化也不好使
  • open webui源码分析11-四个特征之记忆