基本思路:sqlite导出sql保存到mysql
何为过大:mongodump之前2G,导入后变成15G,大约8倍.
原因:如果mongo版本小于3,则正常,mongo请升级到3.0版本上,目前3.6.7较稳定版
第一,虽然网上有很多教程,但大都不得要领,导致设计模式看起来非常复杂,就个人而言,从毕业到现在,反复学习过不下10遍,但由于工作中使用场景有限,不久就又忘记了。所以计划整理出一个适合个人的学习or复习的教程。
第二,设计模式,本来是渐进的演化,或者基于需求驱动的,而非静态的结构 也就是说应该是原有结构-》遇到xx问题-》演变成xx结构,最终演变成的xx结构,就是我们常看到的最终设计模式,但实际开发过程中更为在乎的是“遇到xx问题”,将xx结构变成xx结构。所以需要学习时主动补全一些信息,否则虽然学会了绘制关系图,却不明白在那种场景下使用。
第三,设计模式一样是”需求驱动“,出现了问题,解决问题时才会用,而不是为了套用xx就用。而且如果有完整源代码,并且自己也懂,修改源代码依然是最优方式,设计模式本来是为了处理模块对接(比如跨系统对接,跨平台对接,找不到源代码等),或者是为了对未来的兼容进行的抽象化。而不是为了增加代码复杂度的累赘。
参考:http://www.runoob.com/design-pattern/factory-pattern.html
意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
参考:https://www.w3cschool.cn/shejimoshi/abstract-factory-pattern.html
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
按照工厂的方式,只提炼干货
看起来负责,真正的内容只是AbstractFactory的实现部分,这里个工厂返回的是工厂,所以抽象工厂其实更适合称之为“双层工厂”
代码样例:第一层
意图:为其他对象提供一种代理以控制对这个对象的访问。
主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。
实现
我们将创建一个 Image 接口和实现了 Image 接口的实体类。ProxyImage 是一个代理类,减少 RealImage 对象加载的内存占用。
ProxyPatternDemo,我们的演示类使用 ProxyImage 来获取要加载的 Image 对象,并按照需求进行显示。
意图:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
主要解决:主要解决在软件系统中,常常要将一些”现存的对象”放到新的环境中,而新环境要求的接口是现对象不能满足的
举例:
有一个 MediaPlayer 接口和一个实现了 MediaPlayer 接口的实体类 AudioPlayer。默认情况下,AudioPlayer 可以播放 mp3 格式的音频文件。
还有另一个接口 AdvancedMediaPlayer 和实现了 AdvancedMediaPlayer 接口的实体类。该类可以播放 vlc 和 mp4 格式的文件。
想让 AudioPlayer 播放其他格式的音频文件。为了实现这个功能,我们需要创建一个实现了 MediaPlayer 接口的适配器类 MediaAdapter,并使用 AdvancedMediaPlayer 对象来播放所需的格式。
AudioPlayer 使用适配器类 MediaAdapter 传递所需的音频类型,不需要知道能播放所需格式音频的实际类。AdapterPatternDemo,我们的演示类使用 AudioPlayer 类来播放各种格式。
近期和p2p公司合作进行闲置资金的货币基金购买。
核心功能自然是原有的网上交易核心service层,之前的service层服务的是ctrl层,现在ctrl层变成了第三方接口,而非常规的网页的ctrl层,简单来说就是重写ctrl层,返回json而非网页。
微信公众号,支付宝服务号对接资料现在已经很多了。但当时资料很少的。
微信公众号是前辈开发的,我是进行二次开发。第一代开发主要集中在普通基金净值查询,不需要登录。后来微信提供了oauth2的认证,支持公众号提取到用户的更详细的信息,就可以通过公众号和用户账号建立绑定关系,从而实现用户查询资产,以及通过菜单中的网页链接登录h5形式的app,进行基金交易。
攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。 如下:其中Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户
OAuth(Open Authorization,开放授权)是为用户资源的授权定义了一个安全、开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息。
OAuth在”客户端”与”服务提供商”之间,设置了一个授权层,”客户端”不能直接登录”服务提供商”,只能登录授权层,以此将用户与客户端区分开 来,”客户端”登录授权层是使用令牌(token),”客户端”登录授权层以后,”服务提供商”根据令牌的权限范围和有效期,向”客户端”开放用户储存的资料
单点登录( Single Sign-On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要 登录一次就可以访问所有相互信任的应用系统
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
最近要对一个webservice接口做测试,需测试高并发接口是否会以异常数据返回,编写了如下demo,有类似需求的可以参考下。
注意事项:
1,线程使用了callable接口形式,call相对runable接口有个好处是允许带有返回值。
2,线程需要的入参可以在初始化时带入。比如本例中的List
3,线程出参return 出来即可。使用线程提交到线程池submit时返回的future对象的get()方法可以取得线程的最终返回值,本例中future.get()取得的就是各个线程返回的genIDs的list
Update your browser to view this website correctly. Update my browser now