- 博客(353)
- 收藏
- 关注
原创 docker拉取nginx镜像失败(m4/arm64架构)
访问http://localhost:8080 可以看到nginx的欢迎界面。执行docker pull nginx:latest的报错信息。执行以下指令拉取镜像。
2026-01-15 22:10:03
150
原创 python序列化-dumps的妙用
本文探讨了Python中json.dumps()处理嵌套对象序列化的方法。通过default参数指定转换函数(如lambda o: o.dict),可将不可序列化的对象转换为字典形式。这种设计体现了"将解释权交给调用方"的编程思想,类似于sorted()的key参数和filter()的设计模式,提供了灵活的数据处理方式。该方法有效解决了Python对象无法直接序列化的问题。
2025-12-08 14:54:39
202
原创 单页面和多页面的区别
本文对比了单页面和多页面应用的主要区别。单页面应用由静态文件(HTML、JS、CSS)组成,数据渲染在客户端完成;而多页面应用中HTML作为服务端模板,数据渲染在服务端进行。关键差异在于:单页面将业务逻辑集中在客户端,多页面则集中在服务端。这种架构差异直接影响应用的开发方式和性能特征。
2025-12-08 14:34:09
140
原创 如何查看正在执行的事务
摘要:在PyCharm调试时,执行带有行锁的SQL查询(如with_for_update())会导致后续对该行的update操作被阻塞。原因在于事务未提交时行锁未被释放。解决方法:1)等待事务提交自动释放锁;2)通过数据库系统表(PostgreSQL的pg_stat_activity或MySQL的innodb_trx)查看并终止阻塞的事务。该问题常见于调试期间事务未及时提交的场景。
2025-12-01 21:58:17
233
原创 Python函数式编程
本文介绍了Python函数式编程的核心概念和实践方法。主要内容包括:纯函数与不可变数据的使用,高阶函数(map/filter/reduce)的应用,lambda匿名函数的使用技巧,函数组合与柯里化的实现方式,以及用递归替代循环的编程范式。文章还展示了列表推导式、生成器表达式等Pythonic的写法,并介绍了itertools和functools模块中的实用工具。最后通过数据处理管道和配置合并的实际案例,演示了如何构建函数式风格的应用。这些方法能帮助开发者编写更简洁、可维护性更高的代码。
2025-11-29 18:10:27
347
原创 跨域的坑 - nginx配置项的always参数
摘要:跨域(CORS)是浏览器出于安全考虑限制不同源请求的机制。同源要求协议、域名和端口完全一致。跨域请求分为简单请求和预检请求两种类型。后端可通过配置CORS响应头解决跨域问题,如在Nginx中添加Access-Control-Allow-Origin等头部,或使用always参数确保错误响应也包含CORS头。生产环境建议明确指定可信源而非使用通配符。应用层也可通过中间件如django-cors-headers实现跨域支持。
2025-11-24 17:38:38
418
原创 flask之“应用上下文,请求上下文”
本文对比了Flask框架中的请求上下文和应用上下文。请求上下文存储请求相关数据,生命周期为一个请求周期,主要对象包括request和session;应用上下文存储应用相关数据,主要对象为current_app和g。两者都在请求进入时自动创建,存储在各自的栈结构中(_request_ctx_stack和_app_ctx_stack)。值得注意的是,当RequestContext入栈时若应用上下文栈为空,会自动将当前应用的AppContext对象入栈。这种设计实现了请求处理过程中对两种上下文的自动管理。
2025-11-24 16:58:30
223
原创 python之循环导入
当运行脚本app.py时,book模块会被第一次执行。当在book.py中,遇到from app import app后, app.py脚本会重新执行,但是book.py模块,不会第二次执行。(from book import book,这个导入语句,不会多次导入)比如,目录fisher中,有文件app.py, book.py。在python中,模块的导入遵循:同一模块,只会导入一次。
2025-11-16 21:12:48
153
原创 Pycharm中使用自带的数据库可视化工具
sqlalchemy的数据库链接格式为:postgresql://username:password@host:port/db_name。此处的URL格式为:jdbc:postgresql://host:port/db_name?
2025-10-21 20:15:04
262
原创 (psycopg2.DatabaseError) error with status PGRES_TUPLES_OK and no message from the libpq
在我的公司,我们有一个网络应用程序,可以监控投资公司的网站,以了解他们进行的任何新投资交易。宾果游戏,那一定是虫子!Celery 工作程序在分叉之前加载 Web 应用程序,因为它需要 Celery 对象,其中包含配置设置(例如消息代理主机、端口、导入任务的位置等)在我们的例子中,我们在导入时使用连接池初始化了 SQLAlchemy 引擎。最后,我们选择了解决方案 3,因为我们希望确保发动机被处理在每个前叉上,无论是在 Celery worker、Gunicorn worker 还是我们自己的前叉中。
2025-10-21 16:42:59
1086
原创 flask-sqlalchemy中的flush()
这是因为 flush() 的本质是 “同步本地操作到数据库”,但不提交事务——PostgreSQL 中,即使执行了 INSERT 语句,只要事务未提交,该语句产生的变更就属于 “事务私有数据”,仅当前事务可见,其他事务(无论何时开启)都无法访问。综上,db.session.flush() 是 “执行 SQL 但暂存事务” 的操作,核心价值是在不永久保存数据的前提下,同步本地操作到数据库并获取必要的反馈(如自增 ID)。PostgreSQL 默认的事务隔离级别是 Read Committed(读已提交)
2025-10-06 13:58:36
340
原创 sqlalchemy初始化时,报错TypeError: ‘NoneType‘ object is not iterable
engine_options[key].update(value)TypeError: ‘NoneType’ object is not iterable其实就是有多个__bind_key__,有一个没配置。补上就可以
2025-09-12 17:34:28
242
原创 CSS 选择器的优先级/层叠性
CSS 选择器的优先级(也称为层叠顺序或特异性)决定了当多个规则应用于同一个元素时,哪个规则会被最终应用。!内联样式ID类/属性/伪类元素/伪元素特异性值越高,优先级越高。相同优先级时,后出现的规则胜出(后来者居上)。继承的样式优先级最低。
2025-09-05 23:56:08
487
原创 前端开发vscode插件 - live server
在使用 Vue.js 进行开发时,通常不需要在每次修改代码后手动重新启动项目。Vue 提供了热更新(Hot Module Replacement, HMR)功能,可以在不重新加载整个页面的情况下,实时更新修改的部分代码,从而提高开发效率。在书写纯html页面时,如果想实现类似vue同样的效果(即代码改变,页面自动刷新,无需手动刷新页面)。可以使用插件live server。
2025-09-05 22:57:59
329
原创 Python之split - 常遇见的bug
设想,在某个应用场景下,你有一个变量product_ids,是产品id的字符串组合,形如"1,2,3,4"。你想获取到各个产品id的列表,于是你,print(product_id_list) # 输出['1', '2', '3']乍一看,这么写没毛病。但是,当product_ids=""时,有bug了。print(product_id_list) # 输出 [""]此时的输出为[""], 不符合预期。当product_ids="",我们期望product_ids.split(",")返回[]。
2025-09-03 18:19:31
304
原创 使用SQLALCHEMY的outerjoin时的bug
sqlalchemy.exc.InvalidRequestError: Don't know how to join to <class 'src.models.module_name.ModelName'>; please use an ON clause to more clearly establish the left side of this join
2025-08-15 11:01:01
391
原创 Flask中的路由尾随斜杠(/)
在浏览器地址栏输入http://127.0.0.1:5000/hello,按F12可以看到 重定向308的状态码。(如果在浏览器地址栏输入http://127.0.0.1:5000/hello/,则正常访问,不重定向)因此,flask背后其实是做了一个重定向,把/hello重定向到 /hello/如下,定义一个/hello/的路由。#TODO 待研究。
2025-07-13 21:51:50
349
原创 2024年遇到的最大的bug - 转义
这段代码的本意是 模糊查询url字段中包含‘\tencent.com\testDetail’的记录,实际不符合预期。在python中,可以使用r字符串前缀,表示不转义。原因:在Go字符串字面量中,反斜杠。会被解释为制表符而不是两个字符。
2025-02-10 21:08:09
185
原创 flask使用SQLAlchemy创建表失败
python console中没有报错,但是,使用数据库管理工具(如Navicat)查看数据库,发现没有出现新建的表。flask开发文档中,有这么一句话—— 自 Flask 0.11 版开始,推荐在 shell 中使用。解决方法一,如第一张图片中的注释代码所示,然后运行app.py脚本即可新建表。解决方法二,如下图:在终端中使用flask shell命令。原因未知,但是 解决方法找到两个,命令,它可以为你做许多自动化工作。
2023-05-11 23:18:33
883
1
原创 算法 - 异或操作(^)的妙用
分析:a ^ b ^ a = a ^ a ^ b (交换律) = (a ^ a) ^ b(结合律) = 0^b(结论2) = b。如a ^ b ^ c 等价于 a ^ c ^ b , 也等价于c ^ b ^ a 等(这里使用的是交换律)如a ^ b ^ c 等价于 (a ^ b) ^ ' 这里使用的是结合律。如a ^ b ^ b = a , a^ b ^ a = b。结论2. a ^ a = 0, a ^ 0 = a。结论3. 一个数与另一个数异或两次等于本身。结论1. 异或操作满足交换律和结合律。
2023-04-19 04:25:09
798
原创 IDEA常用快捷键
Ctrl + shift + / : 批量加入多行注释,再按一次就是取消。Ctrl + / : 批量加入单行注释,再按一次就是取消。Ctrl + alt + L : 格式化代码。Alt + shift + ↑ :上移当前行。Alt + shift + ↓ :下移当前行。psvm + 回车 :快速生成main方法。Alt + 1 : 打开\隐藏工程目录结构。Alt + enter : 代码修正提示。Alt + 4 :打开\隐藏控制台。Ctrl + D :向下复制一行。Ctrl + X :剪切当前行。
2023-02-04 16:22:04
1053
原创 JDK,JRE,JVM的作用及关系
是Java语言的软件开发工具包,内部包含了代码的编译工具和运行工具。2)编译代码的过程中,需要使用JDK中的翻译工具。3)运行代码的过程中,需要使用JDK中的运行工具。我们想要运行一个已有的Java程序,那么只需安装。我们想要开发一个全新的Java程序,那么必须安装。1)编写代码的过程中,需要使用JDK。4)代码需要运行在JVM当中。虚似机、以及核心类库(Java运行时环境,帮我们写好的程序)等。
2022-12-22 12:05:14
1110
原创 PAT 甲级1098(测试点2答案错误)
和A1089一样的陷阱,初始序列不参与比较是否与目标序列相同(也就是说,题目中说的中间序列是不包括初始序列的,详见注释)正确代码:#include<iostream>#include<algorithm>using namespace std;int n, origin[110], change[110], tempOri[110];void showArr() { for(int i = 1;i<=n;i++) { if(i != 1) cout.
2022-03-14 14:28:59
229
原创 PAT 甲级1053(测试点6答案错误) —— vector二维数组排序
错误原因,参考博客正确代码如下(似乎这种思路更容易理解)#include<iostream>#include<algorithm>#include<vector>using namespace std;const int maxn = 110;int n, m, s,cnt = 0;vector<int> path, ans[maxn];struct Node{ int weight; vector<int> ch.
2022-03-10 20:03:37
210
原创 PAT 甲级-1052(测试点4段错误)
原因:数据里面可能根本就不含有结点,即此时的输入为0 -1,输出也应该为0 -1;故需要特判输出“0 -1”正确代码#include<iostream>#include<vector>#include<algorithm>using namespace std;const int maxn = 100010;struct Node{ int data, next;}node[maxn];bool cmp(const pair<in..
2022-03-03 20:41:26
196
1
原创 PAT 甲级-1105(测试点1,3运行超时)
将使用while循环计算m, n的值改为使用for循环计算m,n的值(见注释),即存在大量计算时,for循环的效率比while高正确代码#include<iostream>#include<vector>#include<cmath>#include<algorithm>using namespace std;bool cmp(const int& a, const int& b) {return a > b;}.
2022-03-02 16:12:00
152
原创 PAT 甲级-1101(测试点2格式错误)
测试点2:当输出的pivot的数量为0时,第一行要输出0,第二行要输出 空行(见注释)如测试数据:99 8 7 6 5 4 3 2 1正确代码#include<iostream>#include<algorithm>#include<vector>using namespace std;int main() { int n, max = 0; scanf("%d", &n); vector<int> v(n), .
2022-02-24 17:33:00
264
原创 PAT 乙级-1094(测试点1,2,4)(string类length()(size())函数返回值--无符号数)
测试点1:得到的k位连续的数可能为0000,即0,不为素数测试点2:例如在 200236 中找 4 位素数,0023 算是解,输出的应该是0023,而不是输出23测试点4:需要用l - k 控制循环次数,而不是str.length() - k 这里可以参考c++ string类length()(size())函数返回值--无符号数正确代码#include<iostream>using namespace std;bool is_prime(int n) { i...
2022-02-20 16:56:48
438
原创 PAT 乙级-1088(测试点4)
丙的能力值可能是小数,需使用double型存储正确代码#include<iostream>using namespace std;void print(int me, double other) { if(other > me) cout << " Cong"; else if(other == me) cout << " Ping"; else cout << " Gai"; return ;}int main() {..
2022-02-15 18:07:06
212
原创 PAT 乙级-1086(测试点1,2)
好坑, 测试点1,2的坑在于,如:100 * 9 输出应该是9,即其他的0不能输出正确的代码#include<iostream>using namespace std;int main() { int a, b, sum; cin >> a >> b; sum = a * b; while(sum % 10 == 0) sum /= 10; while(sum) { cout << sum % 10; sum /= 1...
2022-02-15 14:58:24
171
原创 PAT 乙级-1075(测试点4)
测试点4:可能存在不在链表中的结点(经常考这个坑)正确代码:#include<iostream>#include<vector>using namespace std;struct Node{ int addr, data, next, flag;}node[100000];int main() { int start, cur, n, k, temp; cin >> start >> n >> k; vector.
2022-02-12 18:22:58
224
原创 PAT 乙级-1074(测试点1,3,5)
测试点1,3:是因为最后得到的PAT数可能会超出N位, 如:305272620320415 // 输出为 117201测试点5:是因为可能得到的PAT数为0,此时需输出0正确代码#include<iostream>using namespace std;int main() { string table, num1, num2, res; int temp = 0, c = 0, len; cin >> table >...
2022-02-11 23:07:21
466
原创 PAT 乙级-1040(测试点3,4)
相乘时溢出导致的。(题中有一句这样的话 —— 由于结果可能比较大,只输出对 1000000007 取余数的结果)使用long long 即可解决正确代码#include<iostream>using namespace std;int main() { string str; cin >> str; long long cnt1 = 0, cnt2 = 0, res = 0; for(int i = 0; i < str.length(); i+.
2022-02-10 17:01:25
210
原创 PAT 乙级-1035(测试点2)
测试点2:这个测试点卡的是插入排序过程。1)第一次排序的数组小标为0 ~1,故i需从1开始(详见注释)2)给出一组测试数据:输入 输出 3 Insertion Sort 1 3 2 1 2 3 1 3 2 正确代码:#include<iostream>#include<algorithm>using namespace std;int n, num[110], mid[110], temp[110];b..
2022-02-09 22:49:58
198
原创 PAT 乙级-1034(测试点2,3)
原因:溢出。题中指出——题目保证正确的输出中没有超过整型范围的整数。但是计算过程中可能会溢出。比如约分时,把分母化为最小公倍数,因此要使用long long型。正确代码:#include<iostream>using namespace std;long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b);}string create(long long a, long long ..
2022-02-09 16:35:39
273
原创 PAT 乙级-1033(测试点2)
测试点2:可能没有坏键,此时输入的第一行为空格,第二行为应该输入的文字,使用getline可以解决问题#include<iostream>#include<cctype>using namespace std;int main() { string broken, ori; getline(cin, broken); getline(cin, ori); int flag = 0; if(broken.find('+') != string::npos) .
2022-02-08 21:27:06
261
原创 PAT 乙级-1030(测试点4,5)
测试点4:主要卡时间,找最长数列时注意剪枝。设当前最长数列的长度为max,下次寻找最长数列 j 从 i + max 开始寻找。测试点5:p需要设置为long long型正确代码:#include<iostream>#include<vector>#include<algorithm>using namespace std;int main() { int n, max = 0; long long p; scanf("%d %lld".
2022-01-29 15:40:53
267
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅