- 博客(34)
- 收藏
- 关注
原创 dao层理解
所以后面使用xml生成,或在dao层自己写函数完成特定功能,这样兼顾了效率与维护。但大部分业务不需要你追求极致的效率,而扩展一个linq式的dao层让你的代码维护扩展能力大大提升。(C#,python使用完全的linq式orm封装)所以骚年,用起来吧。go,java的orm的框架(gorm, MyBatis)对sql表模型做了非常简单的封装,实际编写业务代码仍然使用原生sql,主要是因为追求运行效率,而不是代码维护。使用反射也能完成linq式代码,但大大影响了运行效率。
2024-08-25 16:11:54 290
原创 SSH和vpn使用场景差异
VPN侧重远程访问,电脑A vpn连接到电脑B后,你的身份,命令执行环境还是A,只不过B和A相当于在一个网段中,可以执行ping等访问B的操作。SSH:远程登录到电脑B,发布web新版本。如果使用linux系统做服务器,你无法查看你的web页面效果。VPN:远程访问到电脑B,你可以调用B的80端口来查看web页面效果。SSH侧重远程登录,电脑A ssh登录电脑B成功后,你的身份,命令执行环境就是B了。
2024-05-10 13:34:06 471
原创 VPN 服务器通俗理解
当VPN客户端连接到服务器后,服务器将会对每个客户端分配一个虚拟IP地址,VPN服务器就相当于这个网络中的网关,负责给连接上来的客户端分配虚拟IP地址和数据转发等网关功能,客户端在VPN网络里能够相互通讯。
2024-05-08 13:55:09 987
原创 opcda+python 连接流程
1:python要使用32位的,因为opcdaauto.DLL是32位的,如果dll是64位就用64位python。3:OpenOPC 库有一些bug,测试可以参考这个代码,部署请参考OpenOPC 写pywin32程序。2:opcda服务器的ProgID你要去看服务器的手册,如wincc的你就去看wincc的手册。2:pip 下载OpenOPC-Python3x , pywin32。1:下载32位python3.11,opcdaauto.dll,3:注册opcdaauto.DLL。可以看到提示注册成功。
2024-05-06 15:06:36 719 5
原创 做T的现实依据
实验如下:获取全市场所有股票日K信息,A代表当日收盘与开盘的涨幅,B代表开盘与前一日收盘的涨幅。第一列为symbol,第二列为A,第三列为B, 第四列为A + B(即开盘买,收盘卖的收益)。当然A股不能T0操作,所以只能两手操作做T。
2023-05-19 14:28:05 122
原创 basemanage 缺点
最重要的一个注意点:当调用的函数是一个阻塞函数时,客户端的任何操作都无法继续(包括断开连接)。总结:basemanage很强大灵活,能够替换rpc调用,需要注意一下相关点。1:使用进程作为handle的执行环境(测试时显示是子进程)2:未作队列消峰,导致高并发请求生成大量子进程,容易爆炸。3:未作连接保持机制,长时间未操作会断开连接。使用场景:简单的服务,接口即时返回。
2023-03-03 15:37:38 157
原创 数据库冗余思考
个人认为 历史记录 符合这个场景,比如你买的商品名,不需要关联商品表,否则商品名改变了记录也变了。2:冗余导致的数据不同步,当修改主表的数据,是否需要同步从表的数据。主要问题就是第二点,所以第二个问题可以拆分为什么情况下可以不管数据同步问题?1:冗余不符合数据库三范式。
2023-01-05 11:57:32 211
原创 协程通俗理解
答:最基础的事件就是 socket的可读,可写,异常信号,我们注册事件hanler 绑定到信号,信号触发我们的程序(回调),而回调。的执行顺序由我们的 await 控制,及信号来了代表可以处理,但处理的时机由我们控制,加await 立刻处理,不加await 可以一直等待程序处理(即使数据已经准备好了)答:当 socket(句柄)可以写入时,或者可以读取时(数据准备好让你处理了)第六个问题:什么机制可以监听socket 可读,可写,发生异常的时机?yield 生成器,功能:中断函数,yield 值。
2022-11-28 23:36:07 213
原创 非本地独立进程使用共享数据(分布式)--python
特殊场景:父进程无法与子进程 交互(假设使用的框架没有提供这个能力),父进程创建一个manager.dict( ),使用pickle 保存在本地文件,子进程启动时使用 pickle导入dict对象,这样就完成了。同理,两个无关进程也可以使用这个方法(当然前提同一台机器)。Manager()返回的manager对象控制了一个server进程(数据代理进程),此进程包含的python对象可以被其他的进程通过proxies来访问。理解 数据只有一份,保存在代理进程里面,我们本地进程的数据名字只是一个连接。
2022-10-27 15:49:51 405
原创 fastapi starlette uvicorn 的关系
人话就是说它搭了个异步框架专门用于处理web请求(但这个很原始),你只需要按照app的规范来写py文件就跑起来了一个web后台。理解成 Uvicorn 搭了个线程池(进程池),你只需要写池需要调用的任务即可,当HTTP请求到来,它把这个请求作为参数调用你的任务函数。Starlette 是一个轻量级的 ASGI 框架 / 工具包, 人话就是它进一步封装了web请求,让你能够方便的使用。的现代、快速(高性能)的 web 框架,封装Starlette,进一步引入了 pydantic进行 模型数据校验。
2022-10-26 17:35:45 1199
原创 fastapi执行环境
普通函数 fastapi使用多线程执行, 注意全局数据加锁问题。async函数 使用协程运行,注意使用 异步函数,不然容易卡住。
2022-10-25 17:17:13 836
原创 fastapi 总结2
@ 响应模型就是函数前面的装饰器添加‘response_model’字段, :@app.post("/items/", response_model=Item)功能包括:1,将输出数据转为声明类型2,验证数据3,在openapi路径操作中为响应添加json模式4,自动文档5,将输出数据限制为模型数据@ 响应模型在此参数中声明而不是作为函数返回类型注释,因为路径函数实际上可能不会返回该响应模型,而是返回一个dict, 数据库对象或一些其他模型,然后使用response...
2021-07-09 12:01:21 811
原创 fastapi总结 1
1 带类型的路径参数:就是函数参数定义具有类型声明2 数据转换:就是fastapi 会将URL中的str按照参数类型声明自定转换3 数据验证:当数据转换失败是就会报错4 文档:自动的,交互式的api文档5 基于标准的好处,替代文件:就是替代的api文档6 pydantic:所有数据验证都由pydantic再后台执行。7 路径顺序:后台识别 /users/me 和 /users/{user_id} 时,根据定义的顺序派发8 预定义值: 就是接受的url参数必须是预定义好的en...
2021-07-09 11:59:24 449
原创 fastapi 总结 第一步
@ FastApi跨域 来自 <https://www.cnblogs.com/zwnsyw/p/13836336.html> RESTful API接...
2021-07-09 11:55:03 182
原创 matplot绘制三维图
def show_3d(data, axis=-1): """绘制三维""" import matplotlib.pyplot as plt import pandas as pd if not isinstance(data, pd.DataFrame): data = pd.DataFrame(data) # 1. 创建图(绘制环境) figure = plt.figure('3D图形', figsize=(13, 10)) #.
2020-12-16 12:46:53 920
转载 pyqtgraph 绘图停止自动刷新
pyqtgraph实时绘图时,会概率出现无法实时刷新绘制图,原因是while True:......update()# 通过 plotitem.setData()更新数据......这里使用的是while循环,不断的更新数据概率出现绘图不刷新和操作不响应(最小化操作会高概率出现该问题)解决方法1:我使用的是PlotWidget,remove后再addwidget,然后再重新绘制解决方法2:不使用while循环,使用QTime定时器t...
2020-11-17 20:49:34 1226 2
原创 流畅的python8:对象引用,可变性和垃圾回收
8.1变量不是盒子@ 变量是别名8.2标识,相等性和别名@使用is ,而不是比较id()相等@注意,在不同的解释器中,id()返回的不一定是内存地址,但一定是唯一的标注,且在变量生命周期中不变。8.2.1 在==和 is 之间选择@==标记值相等,而 is 比较id()相等@ == 调用的是__eq__()方法8.2.2 元组的相对不可变性@元组不变是指元组的引用不变。8.3 默认做浅赋值@注意列表的复制是浅复制8.3 为对...
2020-10-23 11:03:32 205 1
原创 流畅的python:7,装饰器和闭包
@装饰器这个名称可能更适合在编译器领域使用,因为它会遍历并 注解句法树。@除了在装饰器中有用处之外,闭包还是回调式异步编程和函数式编程风格的基础。7.1 装饰器基础知识@装饰器是可调用的对象,其参数是另一个函数(被装饰的函数)。2 装饰器可能会处理被装 饰的函数,然后把它返回,或者将其替换成另一个函数或可调用对象@装饰器可以像常规的可调用对象那样调用,其参 数是另一个函数。有时,这样做更方便,尤其是做元编程(在运行时改变程序的行为)时。@综上,装饰器的一大特性是,能把被装饰的...
2020-10-20 15:45:51 182
原创 流畅的python:5 一等函数
在 Python 中,函数是一等对象。编程语言理论家把“一等对象”定义为满足下述条件的程 序实体:• 在运行时创建• 能赋值给变量或数据结构中的元素• 能作为参数传给函数• 能作为函数的返回结果5.1 把函数视作对象@函数式编程的特点之一是使用高阶函数5.2 高阶函数@接受函数为参数,或者把函数作为结果返回的函数是高阶函数@在函数式编程范式中,最为人熟知的高阶函数有 map、filter、reducemap、filter和reduce的现代替代品@使用...
2020-10-20 15:44:51 172
原创 流畅的python:4,文本和字节序列
本章将讨论下述话题:• 字符、码位和字节表述• bytes、bytearray 和 memoryview 等二进制序列的独特特性• 全部 Unicode 和陈旧字符集的编解码器• 避免和处理编码错误• 处理文本文件的最佳实践• 默认编码的陷阱和标准 I/O 的问题• 规范化 Unicode 文本,进行安全的比较4.1 字符问题@,从Python 3 的 str 对象中获取 的元素是Unicode 字符,这相当于从Python 2 的 unicode 对...
2020-10-20 15:44:09 256
原创 流畅的python:3,字典和集合
import collectionscollections.namedtuple('Card', ['rank', 'suit'])用以构建只有少数属性但是没有方法的对象(有名元组)def __len__(self):def __getitem__(self, position): 实现索引返回from random import choicechoice(deck):提供__getitem__ 即可随机返回仅仅实现了 __getitem_...
2020-10-20 15:43:08 134
原创 流程的python:1,2章
截图无法上传,抱歉。import collectionscollections.namedtuple('Card', ['rank', 'suit'])用以构建只有少数属性但是没有方法的对象(有名元组)def __len__(self):def __getitem__(self, position): 实现索引返回from random import choicechoice(deck):提供__getitem__ 即可随机返回...
2020-10-20 15:39:48 152
原创 python multiprocessing 类与方法集合
multiprocessing 官方文档:https://docs.python.org/zh-cn/3.7/library/multiprocessing.html#module-multiprocessing.pool功能概述(建议先看下方的方法集合后再回头看):Process类上下文和启动方法¶在进程之间通信进程之间的同步¶在进程之间共享状态使用工作进程Processclassmultiprocessing.Process(group=None,...
2020-08-06 15:31:54 1795
原创 c语言实现面向对象的基础思想
本文适合会C语言,并了解面向对面思想的同志。如果连多态还 不了解的话,就可以不用看了;代码为随手打的,看思路为紧,下面说的类就是结构体面向对象三要素:封装,继承,多态,1:先说封装:假设A类有成员变量int ,成员函数void fun(), 没有实现的成员函数 void fun2(),相当于一个虚函数实现就是struct而已,成员函数用函数指针实现.typede...
2019-08-16 15:22:24 256
转载 exit函数和return函数的主要区别
https://www.cnblogs.com/noble/p/4144166.htmlC语言中exit()与return的区别整理自exit函数和return函数1、exit函数和return函数的主要区别是: 1)exit用于在程序运行的过程中随时结束程序,exit的参数是返回给OS的。main函数结束时也会隐式地调用exit函
2017-12-10 13:46:57 328
转载 归并的两种方法
void Merge(int* data,int* tmp,int left,int right,int rightend){ int leftend = right-1; int size = rightend-left+1; int cnt = left; while(left if(data[left]
2017-11-20 21:06:23 572
转载 Description(关于如何取好二分)
DescriptionFarmer John是一个令人惊讶的会计学天才,他已经明白了他可能会花光他的钱,这些钱本来是要维持农场每个月的正常运转的。他已经计算了他以后N(1Input第一行:两个用空格隔开的整数:N和M第2..N+1行:第i+1行包含FJ在他的第i个工作日的花费Output第一行:能够维持每个月农场正常运转的钱数 Sample
2017-11-18 18:37:17 179
转载 qsort详解第二篇 转载
C/C++中有一个快速排序的标准库函数 qsort ,在stdlib.h 中声明,其原型为:void qsort(void *base, int nelem, unsigned int width, int ( * pfCompare)( const void *, const void *)); 使用该函数,可以对任何类型的一维数组排序。该函数参数中,base 是待排序数组的起
2017-11-05 17:05:44 246
转载 qsort快速排序用法--完整版(解释了cmp)【转】
原文地址:http://hi.baidu.com/xuhanqiu/item/99505e41aeef4eae61d7b916用qsort快两年的时候了,却一直没有真正弄懂cmp函数的返回值1,-1,0的函数. 今天在做凸包时,郁闷了....所以请教了snoopy,终于弄懂了cmp返回值的意识:int cmp(const void *a, const void *b)返回正数就是说 c
2017-11-05 11:44:32 1742
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人