编程技巧 - 文章列表
-
Python读取文件报错UnicodeDecodeError 'gbk' codec can't decode byte的解决方法(encoding参数、编码检测与BOM处理)
Windows下用Python读UTF-8文件报UnicodeDecodeError,根子是open()不写encoding时用了cp936。记录确认文件真实编码的做法、utf-8与utf-8-sig的选择、gbk与gb18030的取舍、errors参数的坑,以及PYTHONUTF8与warn_default_encoding两个开关。
-
adb devices显示unauthorized或offline的解决方法(撤销USB调试授权、adbkey与5037端口占用)
真机调试时adb devices显示unauthorized、offline或设备列表为空,三种现象原因不同。给出处理步骤:撤销USB调试授权后重新弹窗、删除adbkey与adbkey.pub重生成密钥、解决adb server version不匹配、排查5037端口占用、安装Android ADB Interface驱动、Linux下补51-android.rules与无线调试配对。
-
ASP.NET Core部署到IIS报错HTTP Error 500.30与502.5的排查与解决方法(ANCM、stdout日志、应用池配置)
ASP.NET Core站点部署到IIS后报HTTP Error 500.30 - ANCM In-Process Start Failure,页面只有一行错误码。给出排查链路:直接用dotnet运行看异常堆栈、确认装的是Hosting Bundle而不是SDK、开启stdout日志、解读事件查看器里的ErrorCode、处理应用池32位开关与ASPNETCORE_ENVIRONMENT。
-
JavaScript报错Cannot read properties of undefined的定位与解决方法(Source Map、可选链、防御性取值)
控制台报Uncaught TypeError: Cannot read properties of undefined (reading 'name'),说明有值在取属性时是undefined。报错只指出崩溃那一行,源头要靠堆栈往上追。记录Source Map还原压缩代码行号、异常断点定位、接口结构变化与异步首帧等四类常见来源,以及可选链与请求层结构校验的取舍。
-
Golang交叉编译后的程序在Linux上报错cannot execute binary file与no such file or directory的排查与解决方法(GOOS、GOARCH、CGO_ENABLED)
Go程序本地能跑,丢到Linux服务器或容器里却报cannot execute binary file: Exec format error,或者standard_init_linux.go:228: exec user process caused: no such file or directory。两个报错一个指向CPU架构,一个指向动态链接库。按uname、file、ldd三步定位,配合GOOS、GOARCH与CGO_ENABLED=0即可解决,附scratch与Alpine镜像的注意事项。
-
Visual Studio编译报错LNK2019无法解析的外部符号的排查与解决方法
VS编译通过却在链接阶段报LNK2019 unresolved external symbol,多半不是语法问题。从undname反解析修饰名入手,逐项排查cpp未加入工程、静态成员只声明没定义、lib未配置、extern "C"缺失、调用约定不一致、模板定义放在cpp、入口函数与子系统不匹配七类原因,并给出dumpbin与/VERBOSE两种定位手段。
-
PHP上传大文件失败返回413或$_FILES为空的解决方法(upload_max_filesize与nginx client_max_body_size配置)
PHP上传大文件失败,$_FILES为空且服务端不报错,多半是php.ini、nginx与反向代理三层配置各有一处限制。按错误码定位是PHP挡的还是请求体在更外层被拒,再逐一放开upload_max_filesize、post_max_size与client_max_body_size,附curl复现与前端预校验写法。
-
MySQL报错Too many connections的排查与解决方法(max_connections与连接泄漏定位)
MySQL出现ERROR 1040 Too many connections时,先用Threads_connected与Threads_running判断是并发高还是连接没释放,再用processlist按来源IP聚合定位到具体服务。文中包含8.0.14管理端口救急、max_connections与线程级buffer的内存账、HikariCP与Druid的maxLifetime和wait_timeout配合,以及清理堆积连接的方法。
-
Java进程CPU占用过高的排查方法(top -H与jstack定位到具体代码行)
Java进程CPU打满时先分清us高还是sy高,再用top -Hp找出高CPU线程,把线程id转十六进制后到jstack输出里搜nid定位到具体代码行。文中包含连续三次抓栈对比、容器内jstack失效的两种原因、GC线程占高的判断方法,以及正则回溯、JSON序列化等常见代码原因。
-
Windows端口被占用的排查方法(netstat与PowerShell定位进程并结束)
本地服务起不来报WinError 10048或nginx的10013,是端口被占或落在系统保留区间的典型表现。记录netstat -ano配合findstr定位PID、tasklist查进程、taskkill结束进程的做法,以及用Get-NetTCPConnection一步拿到OwningProcess的写法,附带PID 4被http.sys占用、Hyper-V保留端口段和TIME_WAIT三种特殊情况的处理命令。