【编程学习】代理模式-打造代码的优雅之道
代理模式 代理模式通常在以下的情形下使用: 在访问某个对象之前执行一个或多个重要的额外操作 访问敏感信息或关键功能前需要具备足够的权限 将计算成本较高的对象的创建过程延迟到用户首次真正使用时才进行(惰性求值) 常见类型有: 远程代理:实际存在于不同地址空间(如网络服务器)的对象在本地的代理者(对使用者透明) 虚拟代理:用于惰性求值,将一个大计算量对象的创建延迟到真正需要的时候进行 保护/防护代理:控制对敏感对象的访问 智能(引用)代理:在对象被访问时执行额外的动作,如引用计数或线程安全检查等 实现示例 我们来通过一个案例来看看代理模式具体做了什么。 首先我们定义一个用户信息管理的类KeyRecords,其中拥有大量敏感的不宜公开的信息。 123456789class KeyRecords(Record): def __init__(self): self.users=['admin'] def read(self): return ' '.join(self.users) def add(self,user): self.users ...
【编程学习】适配器模式&抽象类-打造代码的优雅之道
适配器模式 所谓适配器模式就是将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。其中有几个重要概念: 目标类(Target):定义客户所需的接口,可以是一个抽象类或接口,也可以是具体类 适配器类(Adapter):转换器,通过调用另一个接口对Adaptee和Target进行适配 适配者类(Adaptee):被适配类,包括了客户希望的业务方法 实现示例 我们来通过一个案例来看看适配器模式具体做了什么。 首先我们定义一些用户可能会用到的对象,比如一个电脑Computer和一个音响Synthesizer: 123456789101112131415161718192021222324252627class Computer: def __init__(self,name): self._name=name @property def name(self): return self._name @name.setter def name(self,value): self._name=value def __str__(self): r ...
【编程学习】观察者模式-打造代码的优雅之道
模式 观察者模式 观察者模式又叫发布-订阅模式,模型-视图模式,从属者模式。我们希望用一个目标对象管理所有依赖于它的观察者对象,并且在它本身的状态改变时主动发出通知。使用观察者模式,能够完美地将观察者和被观察的对象分离。一般在消息交换、多级触发等场景下使用。 观察者模式的优点有: 观察者与被观察者之间抽象耦合 可以触发多个符合单一职责的模块 可以很方便地实现广播 但是也有效率可能不高的缺点。 实现示例 我们来通过一个案例来看看观察者模式具体做了什么。 首先,我们定义一个主题,比如是股票市场主题的 12345678910111213141516171819202122232425262728293031# 抽象主题类class Subject: def __init__(self): self.observers=[] # 观察者列表 def addObserver(self,observer): self.observers.append(observer) # 添加观察者 def notifyAll(self,info): for observer in self.ob ...
【个人博客】一个侧边直达评论的方案
Hexo博客传统上习惯于在文章末尾设置评论区。然而,这种设计方式存在一定问题,当你专心阅读时,突然产生了一个问题。为了提问或寻找答案,你不得不去页面底部的评论区寻找答案,然后再慢慢的翻回到原来的阅读位置。又或者你选择在文章全文阅读结束后再提出问题。无论采取何种方式,都会产生阅读流畅性的断裂感。 在这种情况下,一种更为便捷的设计是能够保留当前的阅读进度,同时允许打开评论区并与阅读评论同步进行。这样一来,读者可以在需要时方便地进行互动,而不必中断阅读体验。这种优化将大大提升用户友好性,使阅读和互动更加无缝融合。 针对这个问题,Alikar大佬提出了一个解决方案,在这里我记录一下: 引用站外地址 Butterfly comment board beautify Akilar 具体实现方案 CSS样式文件设置 12345678910111213141516171819202122232425262728293031323334353 ...
【编程学习】工厂模式-打造代码的优雅之道
工厂模式 常规的对象创建模式为直接用类来创建一个对象,但是这样创建对象和使用对象的职责耦合在一起,会出现耦合太强,导致后续会影响程序的拓展。 而当你的代码出现一下的一些情况,就十分适合运用工厂模式解决问题: 两个类A和B之间的关系应该仅仅是A创建B或是A使用B,而不能两种关系都有 将对象的创建和使用分离,也使得系统更加符合“单一职责原则”,有利于对功能的复用和系统的维护 防止用来实例化一个类的数据和代码在多个类中到处都是 一些类实例的构建过程可能十分复杂,需要进行封装 为类实例的构建提供更好的多态支持(不确定具体对象) 具体工厂模式的好处有以下几点: 模块间解耦、降低代码重复 减少使用者因为创建逻辑导致的错误。 一个调用者想创建一个对象,只要知道其名称就可以了。屏蔽产品的具体实现,调用者只关心产品的接口。 扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 但是也有一定的缺点: 每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。 实践 ...
【编程学习】单例模式-打造代码的优雅之道
写在前面 这是我第一次分享设计模式相关的知识,因此先给大家介绍一下什么是设计模式。 所谓设计模式,就是为了让代码拥有更好的可读性、可拓展性以及可靠性的代码编写方式。 设计模式的使用有几个原则: 开闭原则(Open Close Principle) 对扩展开放,对修改关闭 里氏代换原则(Liskov Substitution Principle) 任何基类可以出现的地方,派生类一定可以出现 即基类可被派生类替换 依赖倒转原则(Dependence Inversion Principle) 针对接口编程,依赖抽象而不依赖具体 接口隔离原则(Interface Segregation Principle) 使用多个隔离的接口,比使用单个接口要好 降低类之间的耦合度 最小知道原则(Demeter Principle) 一个实体应当尽量少地与其他实体发生作用 系统功能模块应相对独立 合成复用原则(Composite Reuse Principle) 尽量使用合成/聚合的方式,而不是使用继承 单例模式 单例模式,顾名思义,就是全局只有一个一个实例的设计模式, ...
【个人博客】Hexo与Typora的灵魂联动
写在前面 众所周知,Typora是最受欢迎的Markdown编辑器之一,而基于Hexo框架的博客文章也是使用markdown语法写的,因此在编写Hexo文章时使用Typora就是自然而然地选择了。 但是,直接使用二者时却总有一些不对劲。其主要原因是Typora和Hexo对于图片路径的识别不太一样,因此编辑时使用的图片路径和网站中能看到的图片路径是不同的。因此如何能方便而灵活的将两者结合在一起还是需要一个“调教”的过程的。 抬头设置 首先,我们去查看一下博客根目录下的root/scaffolds/post.md文件,可以在其中定义一些希望文章具备的属性,比如文章的标签、分类、封面等属性。设置好后,使用hexo初始化你的文章时,就可以在文件中自动生成这些信息了。 图片设置 将__config.yml 中的 post_asset_folder 设置为 true,这样每次创建文章的时候会生成同名的文件夹,可以将图片等资源文件放进去。 使修改Typora 中设置——图像——复制到指定路径,将其改为./${filename},之后,我们在Typora中插入图片时,图片 ...
【个人博客】在Hexo中制作一个steam游戏展示页面
写在前面 我的代码大部分是参考HCLonely项目的,但是在使用过程中有一些不顺手的地方,因此有了对其魔改的想法,从个人使用角度优化了几个问题,请大家多多支持本项目与原项目(。・∀・)ノ゙ 引用站外地址 为Hexo添加Steam游戏库页面 HCLonely 使用方法 首先给出本插件的地址: 引用站外地址 hexo-better-steam 6Young 在博客项目的根目录运行命令安装插件: 1npm install hexo-better-steam --save 在博客配置文件_config.yml中添加配置信息,当你只有一个账号时: 123456789steam: enable: true steamId: '******' apiKey: ...
【个人博客】在Hexo中添加纪念日侧边栏
效果预览 参考了一些大佬的代码以及网络中零零碎碎的代码片段,做出来了一个这个纪念我和女朋友爱情长跑时间记录的侧边栏,先来给大家看看效果~~~ 里面主要有几个要素:双方头像(可以链接至双方网站),双方在一起的计时以及一句随机土味情话。下面就看看是怎么做的吧~ 首先,我们要创建卡片所需的js和css文件,我们可以将二者放在根目录的source文件夹下或者主题目录的source文件夹下。 相关文件 Javascript文件 下面card_love.js文件内容,其中月份使用的是monthIndex,也就是说0代表着一月……11代表着十二月,要特别注意。 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273var htmer_time = document.getElementById("htmer_time");var htmer_time_time ...
【金融知识】行为金融学知识补充
在这篇文章中介绍了行为金融学的一些基本知识框架,下面我想要再补充一些内容: 引用站外地址 【金融知识】行为金融知识提纲 6Young 有限套利 在实际市场中,信息在不同投资者之间的传递速度不同,投资的时间尺度不同,不同投资者关注的信息也有所差异,加上人类大脑中的根深蒂固的认知偏差,有效市场理论的假设条件几乎无法被满足。其中有一群人,或是误将噪音当成了真正有用的信息,抑或只是因为他们喜欢交易,而成为**“噪音交易者”**。 由于噪音交易者的存在,价格往往会偏离资产的内在价值,出现定价错误,给套利者以套利机会。但同样因为由于噪音交易者的存在,套利者在套利的过程中,价格可能并不会像他们预期的那样回归正确轨道,其背后原因正是有限套利。赚取套利收益时会面对基本面风险、噪音交易者风险以及实施成本,这些风险使得理性投资者无法做到充分套利。 基本面风险 假设某股票的价格因噪音投资者的抛售而下跌,大幅低于其内在价值。如果套利者想要买 ...
【金融知识】行为金融知识提纲
行为金融学是金融学、心理学、行为学、社会学等学科相交叉的边缘学科,力图揭示金融市场的非理性行为和决策规律。**行为金融理论认为,证券的市场价格并不只由证券内在价值所决定,还在很大程度上受到投资者主体行为的影响,即投资者心理与行为对证券市场的价格决定及其变动具有重大影响。**行为金融学本质上是研究人们在市场上的真实行为,而不是按照随机漫步理论上的行为。心理学以及社会学和人类学的社会科学学科为研究真实的人在市场中的行为提供了模型。使用基于这些学科的研究揭示了人类行为的可预测模式。 曾看到一句话解释传统金融学与行为金融学非常好:传统金融学研究的是市场“应该是”什么样,而行为金融学研究的是市场“实际是”什么样。在看待任何领域的事物时,“应该是”的视角帮我们把握长远基准,“实际是”的视角帮我们理解当下发生的事情。 理论基础 要深入系统的了解行为金融学,首先需要了解行为金融学的三大理论基础:有限理性假说、有限套利以及前景理论。 有限理性假说 传统金融学假设人都是“理性人”,其基本特征是每一个从事经济活动的人所采取的经济行为和决策都是用最小的成本代价去获得最大的经济利益。然而,因为人 ...
【数理知识】概率论试题(一)
1 确定与随机 问题 设你和朋友玩一个游戏,规则如下: 1、桌子上有7颗棋子,你们二人轮流拿走一定数量,最终谁先拿走最后一颗棋子的人获胜; 2、你的朋友相信随机,在他的回合里,他可以投掷一枚6面子,并拿走对应数目的棋子(如果剩下的棋小于这个数目则全部拿走); 3、你不喜欢随机,因此在你的回合里可以自行决定拿走1颗棋子或2颗棋子,但是不能不拿,同时你可以选择先走或后走那么在最优决策的情况下你的获胜几率是多少? 解答 首先最优决策的情况一定是选择后手,且每次只拿1颗棋子,除非到你的回合时场上只剩1-2颗棋子,此时可以全部拿走获胜,因为在没有把握决胜时,给对方回合留的棋子越少,你失败的概率更高。 定义轮到你时,如果还剩nnn个棋子,胜率为pnp_npn。则易得:p1=p2=100p_1 = p_2 = 100%p1=p2=100 n=3n=3n=3时,你拿1,对方拿1,你再拿1才能胜利,即:p3=16p1=16p_3 = \frac{1}{6}p_1=\frac{1}{6}p3=61p1=61 同理p4=16p1+16p2=26p_4 = \frac{1}{6}p_1+\fra ...
【量化金融】因子的中性化
为什么中性化? 在因子投资的研究中,深入探索和理解因子的作用至关重要,包括对因子的检验和因子收益的计算等关键步骤。而为了提高因子的表现,降低因子在各个维度的风险暴露,我们通常会遵循一个去极值、标准化、中性化的标准流程。其中,去极值、标准化都很容易理解,那么什么叫中性化,又如何中性化呢? 我们一般会针对因子在行业上的暴露中性化,有些因子与特定行业关联紧密,例如银行业或制造业。当我们仅仅通过回归分析得出一个因子与收益的关系良好,但没有考虑到不同行业之间的差异时,我们可能过早得出这一因子非常有效的结论。 市值也是一个需要格外留意的因素。在过去,小市值股票通常表现出更高的平均收益,而如今大市值股票可能更具吸引力。若某因子在小市值股票中表现出色,我们需要搞清楚,是因为市值本身的作用还是因为因子本身的效用。市值中性化有助于解决这一谜团。 当然我们也可以对更多的风险因子进行中性化,比如Barra的十个风险因子就是常用的用于风险中性化的指标。 为什么要中性化?用生活中的场景举例,通常我们可以用价格评价一个苹果的好坏,毕竟一分价钱一分货,但是进口的苹果一般会比国产贵不少,能说明进口苹果一定好吗?显然不行 ...