数据库04sqlite转mysql

基本思路:sqlite导出sql保存到mysql

rabbitMQ入门

消息队列

软件_避免用chrome进行网站配置调试

坑1:自动填充

数据库03mongodb占用磁盘空间过大

何为过大:mongodump之前2G,导入后变成15G,大约8倍.
原因:如果mongo版本小于3,则正常,mongo请升级到3.0版本上,目前3.6.7较稳定版

数据库02mongodb异常错误

mongo报错WiredTiger.wt, connection: /data/db/WiredTiger.wt: handle-open: open: Operation not permitted

快捷手册11mongodb

快捷手册mongodb

快捷手册10redis

数据库05redis常用命令整理

redis启动

01_原因

 第一,虽然网上有很多教程,但大都不得要领,导致设计模式看起来非常复杂,就个人而言,从毕业到现在,反复学习过不下10遍,但由于工作中使用场景有限,不久就又忘记了。所以计划整理出一个适合个人的学习or复习的教程。
 第二,设计模式,本来是渐进的演化,或者基于需求驱动的,而非静态的结构 也就是说应该是原有结构-》遇到xx问题-》演变成xx结构,最终演变成的xx结构,就是我们常看到的最终设计模式,但实际开发过程中更为在乎的是“遇到xx问题”,将xx结构变成xx结构。所以需要学习时主动补全一些信息,否则虽然学会了绘制关系图,却不明白在那种场景下使用。
 第三,设计模式一样是”需求驱动“,出现了问题,解决问题时才会用,而不是为了套用xx就用。而且如果有完整源代码,并且自己也懂,修改源代码依然是最优方式,设计模式本来是为了处理模块对接(比如跨系统对接,跨平台对接,找不到源代码等),或者是为了对未来的兼容进行的抽象化。而不是为了增加代码复杂度的累赘。

02_概览

六大原则

03_工厂

参考:http://www.runoob.com/design-pattern/factory-pattern.html
意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

04_抽象工厂

参考:https://www.w3cschool.cn/shejimoshi/abstract-factory-pattern.html
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
按照工厂的方式,只提炼干货

看起来负责,真正的内容只是AbstractFactory的实现部分,这里个工厂返回的是工厂,所以抽象工厂其实更适合称之为“双层工厂”
代码样例:第一层

05_单例

这个没太多可以看的,就是创建对象。
这个对象特殊之处在于全局就一个实例,这里暗坑比较多,最好的方法,使用时直接copy过来模板就行了。

06_原型

利用已有的一个原型对象,快速地生成和原型对象一样的实例。
原型模式是通过拷贝一个现有对象生成新对象的。浅拷贝实现 Cloneable,重写,深拷贝是通过实现 Serializable 读取二进制流。
典型应用

07_建造者

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。
注意事项:与工厂模式的区别是:建造者模式更加关注与零件装配的顺序。

09_代理模式

意图:为其他对象提供一种代理以控制对这个对象的访问。
主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。
实现
我们将创建一个 Image 接口和实现了 Image 接口的实体类。ProxyImage 是一个代理类,减少 RealImage 对象加载的内存占用。
ProxyPatternDemo,我们的演示类使用 ProxyImage 来获取要加载的 Image 对象,并按照需求进行显示。

08_适配器

意图:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
主要解决:主要解决在软件系统中,常常要将一些”现存的对象”放到新的环境中,而新环境要求的接口是现对象不能满足的
举例:
有一个 MediaPlayer 接口和一个实现了 MediaPlayer 接口的实体类 AudioPlayer。默认情况下,AudioPlayer 可以播放 mp3 格式的音频文件。
还有另一个接口 AdvancedMediaPlayer 和实现了 AdvancedMediaPlayer 接口的实体类。该类可以播放 vlc 和 mp4 格式的文件。
想让 AudioPlayer 播放其他格式的音频文件。为了实现这个功能,我们需要创建一个实现了 MediaPlayer 接口的适配器类 MediaAdapter,并使用 AdvancedMediaPlayer 对象来播放所需的格式。
AudioPlayer 使用适配器类 MediaAdapter 传递所需的音频类型,不需要知道能播放所需格式音频的实际类。AdapterPatternDemo,我们的演示类使用 AudioPlayer 类来播放各种格式。

10_桥接

桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。
意图:将抽象部分与实现部分分离,使它们都可以独立的变化。
主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。

11_装饰器

装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。
意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。
主要解决:一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。
python有装饰器,可以较好理解这种模式的用法。 比如统计函数的执行时间等。

12_外观模式

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。

13_享元模式

享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。
简单来说,有则使用,无则新建。

14_组合结构

组合(Composite)模式的定义:有时又叫作部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性。
典型案例,树结构,二叉树等,每个节点都实现同样接口。

15_模板

在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,可以延迟到子类中实现。

17_命令

命令(Command)模式的定义如下:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。

16_策略

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。
介绍
意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。
个人感觉:这个并没有减少ifesle不过是将子方法的ifelse挪到调用他的父方法,通过想context传入不同Strategy实现不同代码逻辑。

18_责任链

避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。
主要解决:职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。

20_观察者

意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。
何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。

19_状态

在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。
在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。

22_中介者

中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。

21_迭代器

迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。
迭代器模式属于行为型模式。
意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。
主要解决:不同的方式来遍历整个整合对象。

git_git异常错误

删远端分支报错remote refs do not exist或git: refusing to delete the current branch解决方法

git_git常用命令整理

git merge 的撤销

项目实战04请求幂等性

接口调用存在的问题

项目实战03第三方接口对接之注意事项

近期和p2p公司合作进行闲置资金的货币基金购买。
核心功能自然是原有的网上交易核心service层,之前的service层服务的是ctrl层,现在ctrl层变成了第三方接口,而非常规的网页的ctrl层,简单来说就是重写ctrl层,返回json而非网页。

项目实战02微信支付宝服务号对接

微信公众号,支付宝服务号对接资料现在已经很多了。但当时资料很少的。
微信公众号是前辈开发的,我是进行二次开发。第一代开发主要集中在普通基金净值查询,不需要登录。后来微信提供了oauth2的认证,支持公众号提取到用户的更详细的信息,就可以通过公众号和用户账号建立绑定关系,从而实现用户查询资产,以及通过菜单中的网页链接登录h5形式的app,进行基金交易。

项目实战01网上交易和网站

网站相关技术点简单说明

http认证鉴权04CSRF跨站请求伪造

攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。 如下:其中Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户

http认证鉴权03OAuth2入门

OAuth(Open Authorization,开放授权)是为用户资源的授权定义了一个安全、开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息。
OAuth在”客户端”与”服务提供商”之间,设置了一个授权层,”客户端”不能直接登录”服务提供商”,只能登录授权层,以此将用户与客户端区分开 来,”客户端”登录授权层是使用令牌(token),”客户端”登录授权层以后,”服务提供商”根据令牌的权限范围和有效期,向”客户端”开放用户储存的资料

http认证鉴权02CAS和SSO(单点登录)

单点登录( Single Sign-On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要 登录一次就可以访问所有相互信任的应用系统

http认证鉴权01基本认证和摘要认证

基本认证与摘要认证用于在HTTP报文交互中,服务端确认客户端身份。

python入门05数据可视化

百度搜索:
python特征工程,绘图
python特征工程 数据可视化

python入门04map,numpy,pandas速查

Map操作

python入门03int的四舍五入

默认:向下取整。
正常情况下 int(5.5) 结果为5

java小白03StringDateTimestampCalendar之间的关系及转换

SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);

快捷手册03vim

快捷手册vim

java小白02多线程测试框架

 最近要对一个webservice接口做测试,需测试高并发接口是否会以异常数据返回,编写了如下demo,有类似需求的可以参考下。
 注意事项:
1,线程使用了callable接口形式,call相对runable接口有个好处是允许带有返回值。
2,线程需要的入参可以在初始化时带入。比如本例中的ListkeyList, ListtenantIdList,就是线程入参。
3,线程出参return 出来即可。使用线程提交到线程池submit时返回的future对象的get()方法可以取得线程的最终返回值,本例中future.get()取得的就是各个线程返回的genIDs的list对象。

快捷手册09mysql

python实战01FFT快速傅里叶变换

本科小作业,快速傅里叶变换
python3.2

数据库01mysql常用操作速查

启动停止服务和设置

java小白01常用代码速查

网络

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×