一.概述 在我参与的多个项目中,大家使用libMySQL操作MySQL数据库,而且是源码即复用,在多个项目中有多套相同或相似的源码,这样的复用方式给开发带来了不变,而且libMySQL的使用比较麻烦,要应对很多的细节,很容易出错. 我要写一个动态链接库,将对libMySQL的操作封装起来,以二进制复用代替源码级复用:要提供线程安全的接口,用户无需关系是否加锁这样细节性的问题,减少出错及死锁的机会,当然也要允许用户自己选择是否线程安全的访问数据库:要简化访问数据库的流程,接口越简单越好.   我从…
本文转自:http://www.7139.com/jsxy/cxsj/c/200607/114291.html使用ADO.NET时,每次数据库操作都要设置connection属性.建立connection.使用command.事务处理等,比较繁琐,有很多重复工作.能不能把这些繁琐的.常用的操作再封装一下,以更方便.安全地使用.下面这个类就是一种尝试:using System;using System.Data.SqlClient;using System.Text;using System.Da…
一.概述 在我參与的多个项目中.大家使用libMySQL操作MySQL数据库,并且是源代码级复用,在多个项目中同样或相似的源代码.这种复用方式给开发带来了不便. libMySQL的使用比較麻烦.非常easy出错. 基于以上原因.我写了一个动态链接库,将对libMySQL的操作封装起来.以二进制复用取代源代码级复用.要提供线程安全的接口,用户无需关系是否加锁这样细节性的问题,降低出错及死锁的机会.当然也要同意用户自己选择是否线程安全的訪问数据库:要简化訪问数据库的流程,接口越简单越好. 我从201…
原文地址:http://hankjin.blog.163.com/blog/static/33731937200942915452244/ 程序中不可避免的要用到配置文件或数据,对于数据量比较小的程序,部署数据库花费的时间就显得浪费了,因此用XML来存储不妨为一个很好的办法,而且结合C#的DataSet,我们可以很轻易的封装出一个代码简单而功能强大的数据访问类XMLConfigconfig.xml<root>  <table1>    <rowName1>hello&l…
不支持一个对象在不同异步中使用,模仿的php框架 speedphp中的model模块 GaryMysql.js var mysql = require('mysql'); var pool = null; //由于使用了一些类的属性,所以不支持在多线程情况下使用同一对象执行sql module.exports = class GaryMysql{ constructor(tabName, pk) { this.tabName = tabName;//类中变量 this.pk = typeof p…
单例模式在项目开发中使用得比较多,一个单例的模板类显得很有必要,避免每次都要重复定义一个单例类型 //非多线程模式下的一个单例模板类的实现 // template_singleton.h #include <assert.h> template<typename T>class TSingleton{protected: TSingleton() {} ~TSingleton(){} public: static T& GetInstance(); static void…
个人编程中比较喜欢重构,重构能够提高自己的代码质量,使代码阅读起来也更清晰.但是重构有一个问题,就是如何保证重构后带代码实现的功能与重构前的一致,如果每次重构完成后,对此不闻不问,则会有极大的风险,如果每次重构后,都进行一边测试,则工作量会很巨大,最终可能是即使代码有重构的欲望,也会尽量克制住,不去重构.除非代码能够进行自动化测试.实际上进行测试的是接口,而不是所有代码,只要能够保持接口不变,自动化测试的工作量也没有想象中的巨大.其实我们在单元测试的时候,会测试各种异常情况,只不过,没有将这些测…
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://dzone.com/articles/dry-dont-repeat-yourself 我们之前就发过一篇相关的文章:https://www.cnblogs.com/powertoolsteam/p/12758496.html 其中也提到了包括DRY在内的一些软件开发的原则. DRY 是软件开发的原则之一,其目的主要是为了避免代码重复,指导开发者尽量以抽象的思维去解决重复,基本上…
Liskov替换原则(Liskov Substitution Principle)是一组用于创建继承层次结构的指导原则.按照Liskov替换原则创建的继承层次结构中,客户端代码能够放心的使用它的任意类或子类而不担心所期望的行为. Liskov替换原则定义 如果S是T的子类型,那么所有的T类型的对象都可以在不破坏程序的情况下被S类型的对象替换. 基类型:客户端引用的类型(T).子类型可以重写(或部分定制)客户端所调用的基类的任意方法. 子类型:继承自基类型(T)的一组类(S)中的任意一个.客户端不…
这一年中零零散散看过几本javascript的书,回过头看之前写过的javascript学习笔记,未免有点汗颜,突出“肤浅”二字,然越深入越觉得javascript的博大精深,有种只缘身在此山中的感觉,茫茫然而不得其要领,索性在一边写博文中,求得突破,乃至更上一层楼. 看过的书籍推荐: <javascript语言精粹> Douglas Crockford <javascript设计模式> Addy Osmani <javascript设计模式> Ross Harmes…
引言 本文摘自<JavaScript设计模式与开发实践> 在现实中,很多时候也有多种途径到达同一个目的地.比如我们要去某个地方旅游,可以根据具体的实际情况来选择出行的线路. 如果没有时间但是不在乎钱,可以选择坐飞机. 如果没有钱,可以选择坐大巴或者火车. 如果再穷一点,可以选择骑自行车. 在程序设计中,我们也常常遇到类似的情况,要实现某一个功能有多种方案可以选择.比如一个压缩文件的程序,既可以选择zip算法,也可以选择gzip算法. 这些算法灵活多样,而且可以随意互相替换.这种解决方案就是本文…
学习和实践react已经有一段时间了,在经历了从最初的彷徨到解决痛点时的兴奋,再到不断实践后遭遇问题时的苦闷,确实被这一种新的思维方式和开发模式所折服,react不是万能的,在很多场景下滥用反而会适得其反,这里不展开讨论. 有了react的实践经验,结合之前自己的一点ios开发经验,决定继续冒险,开始react-native学习和实践,目前主要是从常规的native功能入手,逐步用react-native实现,基础知识如开发环境搭建.调试工具等官方文档有很清楚的指引,不再赘述,这里主要是想把实际…
转载请注明出处! ! !http://blog.csdn.net/zhonghuan1992 全部配套代码均在github上:https://github.com/ZHONGHuanGit/DesignPattern 跟着ZHONGHuan学习设计模式 桥接模式 学习桥梁模式之前,最好可以掌握开闭原则和组合复用原则,明确这两个设计原则后,会对该模式的学习有帮助. 首先来看下桥梁模式的定义:将抽象化(Abstraction)和实现(Implementation)解耦,使得两者能够独立地变化. 看到…
参考:https://www.cnblogs.com/edisonchou/p/7247990.html 在患者就医时,医生会根据病情开具处方单,很多医院都会存在以下这个流程:划价人员拿到处方单之后根据药品名称和数量计算总价,而药房工作人员根据药品名称和数量准备药品,如下图所示. 在软件开发中,有时候也需要处理像处方单这样的集合对象结构,在该对象结构中存储了多个不同类型的对象信息,而且对同一对象结构中的元素的操作方式并不唯一,可能需要提供多种不同的处理方式.在设计模式中,有一种模式可以满足上述要…
前言 模板方法模式,定义一个操作中算法的骨架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤. 模板方法模式 概念介绍 模板方法模式,其实是很好理解的,具体理解为,定义一个操作中算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法结构即可冲定义该算法的某些特定步骤.模板方法模式是最为常见的设计模式之一,是基于继承的代码复用技术.架构师定义一套骨架,开发工程师按照骨架去实现具体的逻辑. 举例 在具体的项目中其实使用模板方法的场景有很多…
前言 这次要介绍的是迭代器模式,也是一种行为模式.我现在觉得写博客有点应付了,前阵子一天一篇,感觉这样其实有点没理解透彻就写下来了,而且写完后自己也没有多看几遍,上次在面试的时候被问到java中的I/O的各种实现用到了什么设计模式,我愣是想半天没想出来了,人家还给提示了我也没想出来,最后还是面试官给出的答案,是装饰模式,听到答案后就恍然大悟了,前两天刚看了装饰模式,还写下了I/O操作中的各种类都是用到了装饰模式,后来想想两方面原因造成的当时没回答出来,一是面试时紧张就容易想不起来,二是对设计模式…
前言 这次介绍另一个行为模式,解释器模式,都说解释器模式用的少,其实只是我们在日常的开发中用的少,但是一些开源框架中还是能见到它的影子,例如:spring的spEL表达式在解析时就用到了解释器模式,以及mybatis在将SQL语句映射成对象时关系时.还有一些解析正则表达式和解析json等开源工具. 解释器模式 概念介绍 解释器模式是指给定一个使用规定格式和语法的语言,并且建立一个解释器来解释该语言中的句子.解释器本身就是一种按照规定的语法进行解析的方案,但是总体来说也是一种使用频率相对较低但学习…
vue是前端兴起的一个javascript库,相信大家都使用过jQuery,虽然vue和jQuery没有可比性,但从熟悉的角度去理解新的东西或许会容易接受一些,有时候由于思想和模式的转变会带来阵痛,但领悟到了却会有一种如何至宝的感觉. 简单来说jQuery是操作页面的dom对象,而vue是操作页面的data数据,也就是将原来的操作dom的思想转变到操作数据上来. vue是一个精简的MVVM,是一套构建用户界面的渐进式框架,专注于 MVVM 模型的 ViewModel 层.它通过双向数据绑定把 V…
<Head first设计模式>学习笔记 – 迭代器模式 代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 爆炸性新闻:对象村餐厅和对象村煎饼屋合并了!真是个好消息!现在我们可以在同一个地方,享用煎饼屋美味的煎饼早餐,和好吃的餐厅午餐了.但是,好像有一点小麻烦:新的餐厅想用煎饼屋菜单当作早餐的菜单,使用餐厅的菜单当做午餐的菜单,大家都同意了这样实现菜单项.但是大家无法同意菜单的实现.煎饼屋使用ArrayList记录他的菜单项,而餐厅使用的是数组.他们两个都不愿意改…
https://pan.baidu.com/s/1bptYGAb#list/path=%2F&parentPath=%2Fsharelink389619878-229862621083040 第04项目:淘淘商城(SpringMVC+Spring+Mybatis) 的学习实践总结[第二天] 第04项目:淘淘商城(SpringMVC+Spring+Mybatis) 的学习实践总结[第三天] 第04项目:淘淘商城(SpringMVC+Spring+Mybatis) 的学习实践总结[第四天] 04.第…
处理多维特征的输入 课程来源:PyTorch深度学习实践--河北工业大学 <PyTorch深度学习实践>完结合集_哔哩哔哩_bilibili 这一讲介绍输入为多维数据时的分类. 一个数据集示例如下: 由于使用的是多维的数据,因此模型中的x和y都应该变为向量的形式,变为如下式子: 而下方针对多维数据的式子中的一部分可以使用矩阵相乘的方式表示: \[\hat y^{(i)}=\sigma([x_1^{(i)}...x_8^{(i)}]\begin{bmatrix} w_1\\ .\\ .\\ .\…
系列 <使用sklearn进行集成学习——理论> <使用sklearn进行集成学习——实践> 目录 1 Random Forest和Gradient Tree Boosting参数详解2 如何调参? 2.1 调参的目标:偏差和方差的协调 2.2 参数对整体模型性能的影响 2.3 一个朴实的方案:贪心的坐标下降法 2.3.1 Random Forest调参案例:Digit Recognizer 2.3.1.1 调整过程影响类参数 2.3.1.2 调整子模型影响类参数 2.3.2 Gr…
开篇介绍 最近由于工作需要,学习研究了一下Nagios的安装.配置.使用,关于Nagios的介绍,可以参考我上篇随笔Nagios学习实践系列——产品介绍篇 实验环境 操作系统:Red Hat Enterprise Linux Server release 6.0 (Santiago)   64 bit. 注意,Nagios只能安装在Linux或Unix平台,不支持Windows平台,当然,它可以监控Windows平台. 环境准备 Apache 和PHP 不是安装Nagios所必须的,其实也可以说…
其实上篇Nagios学习实践系列——基本安装篇只是安装了Nagios基本组件,虽然能够打开主页,但是如果不配置相关配置文件文件,那么左边菜单很多页面都打不开,相当于只是一个空壳子.接下来,我们来学习研究一下Nagios的配置,了解一下基本的配置和了解各类配置文件. Nagios配置目录 Nagios的配置文件位于etc目录下(/usr/local/nagios/etc)如下图所示: 配置文件简介 配置文件名 功能描述 cgi.cfg 控制CGI访问的配置文件 nagios.cfg 主配置文件:主…
随着我们测试脚本中的用例越来越多,我们不可能将所有的用例都放在同一个脚本中,所以我们需要优化我们的结构.将脚本放在一个文件夹中,再通过别的脚本来执行脚本.这样,我们也可以有选择性的执行我们的脚本 先来看一下现在的目录结构 测试脚本统一放到了test_case文件夹中,注意这个文件夹中要添加一个__init__.py的文件,只要是这个名字就行了,内容为空 因为我们要导入这个文件夹中的module,所以我们先构建一个package,而package必须包含一个__init__.py文件 然后来看下我…
之前Appium学习实践(二)Python简单脚本以及元素的属性设置中的脚本,会有一个问题,就是在每个测试用例完成之后都会执行tearDown,然后重新setUp,这样导致脚本的执行效率偏低,而且会有大量的重复性的步骤.当然有时测试脚本确实需要每次都重新开启一个干净的app. 下面说下怎样让一个测试用例执行完毕后接着执行后面的测试用例而不是重置. #coding:utf-8 import unittest import os from selenium import webdriver from…
1.简单的Python脚本 Appium中的设置与Appium学习实践(一)简易运行Appium中的一致 Launch后,执行脚本 #coding:utf-8 import unittest import os from selenium import webdriver from time import sleep class Dttest(unittest.TestCase): def setUp(self): self.driver = webdriver.Remote( command_…
参考地址:http://terrylee.cnblogs.com/archive/2006/02/24/336652.html 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式. 意图 将抽象部分与实现部分分离,使它们都可以独立的变化.[GOF <设计模式>] 结构图 图1 Bridge模式结构图 生活中的例子 桥接模式将…
转载地址:http://www.cnblogs.com/zhili/p/StragetyPattern.html 一.引言 本文要介绍的策略模式也就是对策略进行抽象,策略的意思就是方法,所以也就是对方法的抽象,下面具体分享下我对策略模式的理解. 二.策略者模式介绍 2.1 策略模式的定义 在现实生活中,策略模式的例子也非常常见,例如,中国的所得税,分为企业所得税.外商投资企业或外商企业所得税和个人所得税,针对于这3种所得税,针对每种,所计算的方式不同,个人所得税有个人所得税的计算方式,而企业所得…
离上次写RN笔记有一段时间了,期间参与了一个新项目,只在最近的空余时间继续学习实践,因此进度比较缓慢,不过这并不代表没有新进展,其实这个小东西离上次发文时已经有了相当大的变化了,其中影响最大的变化就是引入了Redux,后面会系统介绍一下. 在开始主题之前,先补充一点上回说到的动画初探(像我这么靠谱严谨的攻城狮,必须精益求精,┗|`O′|┛ 嗷~~),上回文说到,经过我们自己定义了余弦动画函数之后,动态设定state的4个参数,实现了比较流畅的加载动画,这里可能有朋友已经注意到了,我们非常频繁的调…