![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程素质
文章平均质量分 86
兔兔西
殿宇的支柱总是彼此分立的,橡树和松柏也不在彼此的阴影下生长
展开
-
【编程素质】代码及性能优化
1,思路一般如果性能有问题,一般打印日志,在每一处输出消耗时间,看时间消耗在哪里。如果是sql性能问题,查看执行计划,看慢在哪里,优化sql。2,常用工具1)StopWatch除了下面介绍的方法外还有其它方法。以下为笔者习惯用法 StopWatch stopWatch = new StopWatch("getSearchResult"); stopWatch.start("total"); Thread.sleep(1000); System.原创 2020-07-17 11:14:02 · 237 阅读 · 0 评论 -
【编程素质】UML类图
1,类图基础属性-表示private #表示protected ~表示default,也就是包权限 _下划线表示static 斜体表示抽象 2,关系在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)1)泛化:继承、实现表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。原创 2020-07-14 14:34:34 · 273 阅读 · 0 评论 -
项目管理-git使用
1,简介Git是目前世界上最先进的分布式版本控制系统(没有之一)。2,集中式和分布式CVS及SVN都是集中式版本控制系统,Git是分布式版本控制系统。 集中式必须联网才能工作。如果中央服务器出问题,所有人都受影响。 分布式可以不在一个网络工作,它的中央服务器仅受用来方便交换大家的修改。3,使用创建目录$ mkdir learngit$ cd learngit$ ......原创 2019-10-04 14:07:50 · 1782 阅读 · 14 评论 -
【编程素质】单元测试(Junit)
1,概念1)单元测试单元测试是编写测试代码,用以检测特定的、明确的、细颗粒的功能。严格来说,单元测试只针对功能点进行测试,不包括对业务流程正确性的测试。java常用来进行单元测试的是Junit框架。2)目的保证代码的正确性,记录问题的所在和缺陷以及正确的状态便于后期重构和改进2,测试分类1)接口功能性测试接口能被正常调用输出数据有效。2)局部数据结构测试保证数据结构的正确性。变量是否有初始值 或 在某场景下是否有默认值变量是否溢出3)边界条件测试变量无赋值(nu原创 2020-09-21 18:02:42 · 879 阅读 · 0 评论 -
【编程素质】设计模式-模板方法模式(Visitor Pattern)
1,概念定义一个算法中的操作框架,而将一些步骤延迟到子类中。使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。模板方法模式是类的行为模式。2,场景3,类图1)抽象类定义功能时,这些功能由三部分组成:模板方法:对外暴露的方法,public,在抽象方法中供外部接口调用。基本方法:抽象方法:模板方法调用的不确定方法,延迟到子类实现。具体方法:不允许子类重写的方法,一般定义为final方法、private方法。钩子方法:对于抽象方法或者接口中定义的方法的一个空实现,给子类留有原创 2020-07-14 16:44:17 · 206 阅读 · 0 评论 -
【编程素质】设计模式—建造者模式(Builder Design Pattern,生成器模式,Builder Pattern)
1,概念封装一个产品的构造过程并允许按步骤构造(有多个步骤,工厂模式只有一个步骤,所以两者不同),并可以改变过程。将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。2,场景相同的方法,不同的执行顺序,产生不同的事件结果时;多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时;产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候使用建造者模式非常合适;3,类图4,优缺点1)优点良好的封装性, 使用建造者模式可以使客户端不必知道产品内部原创 2020-07-14 14:54:16 · 218 阅读 · 0 评论 -
【编程素质】设计模式原则(SOLID原则)
一个类,应该只有一个引起它变化的原因。注意:这个变化是同一个行为的变化,如果行为不同,那么违反了SRC原则。所有引用基类的地方必须能透明地使用其子类的对象。通俗点讲:只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或异常,使用者可能根本就不需要知道是父类还是子类。但是,反过来就不行了,有子类出现的地方,父类未必就能适应。即:子类可以扩展父类的功能,但不能改变父类原有的功能。子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法子类中可以增加自己特有的方法。原创 2020-07-03 09:24:29 · 366 阅读 · 1 评论 -
玩转编程——快捷操作
1,快捷键1)基本操作操作功能Command + deldelCommand + del + shift清空垃圾桶Command + w关闭winCommand + tab切换Command + 空格searchCommand + Control + f全屏切换Command + shift + 3全屏截图Comman.................................原创 2019-10-29 15:27:28 · 905 阅读 · 1 评论 -
【编程素质】设计模式-工厂模式(Factory Pattern)
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。原创 2018-04-27 08:32:11 · 1329 阅读 · 1 评论 -
【数据结构】排序算法
1,概念1)插入排序直接插入排序、折半插入排序、2-路插入排序、表插入排序、希尔排序、快速排序、冒泡排序2)选择排序简单选择排序、堆排序2, 直接插入排序(Insertion Sort)1)原理每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。2)代码实现public stati...原创 2018-07-26 13:28:00 · 870 阅读 · 1 评论 -
【编程素质】多线程编程之设计模式
全文是读书笔记。书为:《Java多线程编程实战指南 设计模式篇》黄海文 著1,可复用实现代码(1)遍历线程安全的集合时加锁多线程环境中,遍历一个集合对象时,即便被遍历的对象本身是线程安全的,为防止遍历过程中该集合的内部结构(增删)被其他线程改变而导致出错,也引入锁。Vector vector = null;//此处以vector本身为锁,防止遍历过程中的其他线程改变...原创 2017-01-31 01:03:27 · 1775 阅读 · 1 评论 -
项目管理-SVN学习
1,概念1)项目管理为了使工作项目能够按照预定的成本、进度、质量顺利完成,而对人员(People)、产品(Product)、过程(Process)和项目(Project)进行分析和管理。2)常见的项目管理软件①SVN (Subversion)SVN 是开发源码软件,无需支付购买费用。同时没有生产厂家为其提供技术的支持。如发现问题,通常只能靠自己查找网上的资料进...原创 2018-03-20 13:43:22 · 3287 阅读 · 0 评论 -
【设计模式】观察者模式(Observer Pattern)和“发布者-订阅者”模式(Pub-Sub Pattern)
1,观察者模式(发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)1)定义了对象之间的一对多依赖,这样一来当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。2)用途通常被用来实现事件处理系统。 在实际应用中,如果一个事物改变了需要通知另一个事物此时就需要使用观察者来监控3...原创 2018-03-23 14:34:58 · 872 阅读 · 0 评论 -
【编程素质】三层架构、MVC、MVP、MVVM
1,对比1)MVC和三层架构是完全不同的2种设计规范。但核心一致:分层,解耦。 2,MVC (Model View Controller) 工作原理:当用户出发事件的时候,view层会发送指令到controller层,接着controller去通知model层更新数据,model层更新完数据以后直接显示在view层上。1)概念:①M - 模型(mod...原创 2017-07-12 11:53:35 · 1878 阅读 · 0 评论 -
【编程素质】设计模式-代理模式(委托模式、Proxy Pattern):动态扩充对象功能
为其他对象提供一种代理以控制对这个对象的访问。对象的使用有三种方式:组合、继承、委托(C++),代理模式是委托的一种java实现。原创 2017-01-31 21:34:10 · 1027 阅读 · 1 评论 -
【编程素质】设计模式-适配器模式(Adapter)
1,适配器模式(Adapter,包装器,Wrapper)将一个类的接口,转换成客户期待的另一个接口。适配器类让原本不兼容的类合作无间。属于结构型模式.需要被适配的类、接口、对象,这些是我们已有的数据,简称 src(source); 最终需要的输出的数据:简称 dst (destination,即Target) ,适配器称之为 Adapter 。一句话描述适配器模式: src->...原创 2018-04-24 09:35:09 · 432 阅读 · 0 评论 -
【算法】电梯调度算法/磁盘扫描算法
1,问题描述假如有十层楼,每层都有相同数量的人,一共有三部电梯并且没有楼梯。你将如何分配电梯来实现性能最优,及最小化每一层的等待时间? 设计一个使大楼里所有人等待时间最短的算法,同时要考虑每一层的负载量。假定每一层人数相同且每层的人以同样的方式使用电梯。假设每天有几个小时是“高峰时段”,算法需要提供一种最“公平”的方式来将电梯分配到不同的楼层。2,问题分析分析问题,问题规定如下: ...原创 2018-05-14 09:43:07 · 31628 阅读 · 0 评论 -
【数据结构】树
1,概念结点的度:结点拥有的子树数。 堂兄弟:双亲在同一层结点。 层次:根为第一层,树的最大层次就是树的深度或高度。2,二叉树1)性质性质1:二叉树的第i层至多有2^(i-1)个结点 性质2:深度为k的二叉树至多有(2^k)-1个结点。 性质3:若叶子结点为n0,度为2的结点数为n2,则n0 = n2 + 1对于结点总数n,度为1的结点数n1,有: n...原创 2018-07-26 13:27:37 · 1982 阅读 · 0 评论 -
【编程素质】Java编码约定
优秀的代码胜过冗长的文档。1,命名规范驼峰风格:不用下划线,各个单词拼一起,首字母大写以区别。变量名和方法名首字母小写,类名首字母大写。统一、达意、简洁、英文。1.1 类名命名首字母大写、驼峰风格。后缀:类名往往用不同的后缀表达额外的意思,如下表。后缀名意义Service表明这个类是个服务类,里面包含了给其他类提同业务服务的方法Impl这个类是一个实现类.........原创 2018-09-29 09:14:09 · 1169 阅读 · 0 评论 -
【编程素质】编程思想总结
1,数据结构和算法【数据结构】排序算法【数据结构】查找【数据结构】树【数据结构】图【数据结构】数组【数据结构】队列和栈【数据结构】线性表:顺序表、单链表【java学习】String字符串【算法】电梯调度算法/磁盘扫描算法【算法】剑指offer【数据结构】斐波那契数列(Fibonacci sequence,黄金分割数列,兔子数列)2,设计模式【编程素质】多线程编程之设计模式...原创 2018-09-28 09:37:40 · 417 阅读 · 0 评论 -
【编程素质】设计模式-装饰模式(Decorator,包装模式Wrapper)
1,概念是动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。是以对客户端透明的方式扩展对象的功能,换句话说,客户端不会察觉到装饰前与装饰后有什么不同。在不修改底层代码情况下,给对象赋予新的职责。2,场景(处于安全目的,保护被访问者)现在有一个对象,我们想给他增加方法或者属性,怎么去做,并且可以随意修改增加方法和属性的顺序。I/O、过滤器。3,...原创 2018-09-14 21:15:06 · 294 阅读 · 0 评论 -
【编程素质】设计模式—策略模式(Strategy,政策模式Policy)
1,概念定义了算法族,分别封装起来,让它们之间可以互相替换。核心思想就是面向对象编程的多形性的思想.是硬编码(Hard Coding)的替换。如查找、排序等,硬编码是在一个类中,提供多个方法,每一个方法对应一个具体的查找算法。如果需要增加一种新的查找算法,需要修改封装算法类的源代码;更换查找算法,也需要修改客户端调用代码。在这个算法类中封装了大量查找算法,该类代码复杂,维护困难。如果我...原创 2018-09-14 20:11:55 · 690 阅读 · 0 评论 -
【算法】剑指offer
1,从1到整数n中1出现的次数思路:若百位上数字为0,百位上可能出现1的次数由更高位决定;若百位上数字为1,百位上可能出现1的次数不仅受更高位影响还受低位影响;若百位上数字大于1,则百位上出现1的情况仅由更高位决定。 举例: ①534 个位1出现的次数:round*1+1 (每次循环1出现一次,0-9循环了53次,第54次循环为0-4) 十位1出现的次数:round*10 +...原创 2018-08-30 15:13:57 · 303 阅读 · 0 评论 -
【数据结构】斐波那契数列(Fibonacci sequence,黄金分割数列,兔子数列)
1,概念结点的度:结点拥有的子树数。 堂兄弟:双亲在同一层结点。 层次:根为第一层,树的最大层次就是树的深度或高度。2,二叉树的性质1)二叉树的第i层至多有2^(i-1)个结点2)深度为k的二叉树至多有(2^k)-1个结点。3)若叶子结点为n0,度为2的结点数为n2,则n0 = n2 + 1对于结点总数n,度为1的结点数n1,有: n = n...原创 2018-09-04 17:55:10 · 2699 阅读 · 0 评论 -
【数据结构】队列和栈
1,队列(queue)只允许在队头(front)出,队尾(rear)进。 先进先出(FIFO,first in first out)1)循环队列循环队列充分利用向量空间,克服“假溢出”。①插入删除在循环队列中,队头指针和队尾指针的动态变化决定队列的长度。 front指定队首位置,删除一个元素就将front顺时针移动一位; rear指向元素要插入的位置,插入一个元素就将...原创 2018-08-13 21:23:42 · 491 阅读 · 0 评论 -
【编程素质】组合模式(Composite Pattern、合成模式、部分整体模式)
1,概念允许将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。 树节点可以对子节点进行增删改查等操作。2,场景1)需要描述对象的部分和整体之间的等级结构关系,如树形菜单、文件和文件夹管理等等 2)需要客户端忽略个体和组合构件的区别,平等对待所有的构件。组合模式在java和android源码中也是有不少的应用的,比如List框架,...原创 2018-07-31 21:03:51 · 1038 阅读 · 0 评论 -
【编程素质】设计模式-单例模式(Singleton pattern)
1,概念单例模式(Singleton pattern,单件模式,单子模式): 确保有一个类只有一个实例,并提供一个全局访问点。单例设计模式是设计模式中简单且常用的一种。2,场景1)场景单例模式只允许创建一个对象,因此节省内存,加快对象访问速度,因此对象需要被公用的场合适合使用,如多个模块使用同一个数据源连接对象等等。 ① 资源共享的情况下,避免由于资源操作时导致的性......原创 2017-07-25 15:13:35 · 592 阅读 · 1 评论 -
【编程素质】活动安排问题(会场安排问题、图着色问题)
贪心算法1,问题 i-第i个活动 s[i]:开始时间。 f[i]:结束时间。 贪心算法: 选择活动1,则开始时间大于4的最近活动为:活动4。 选择活动4,开始时间大于7的最近活动为:活动8。 选择活动8,同样,选择活动11。2,demo1)会场安排问题。【问题描述】假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。(这个问题实际上是著名的图着色问题。若将每一个活原创 2017-06-12 15:16:19 · 1562 阅读 · 1 评论 -
【编程素质】设计模式-桥接模式
1,概念桥接模式(Bridge Pattern):将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化。2,场景①需要跨越多个平台的图形和窗口系统上。 ②需要不同的方式改变接口和实现。3,demo1)汽车①需求对于汽车有不同的类型,它们所行驶的环境(高速、公路)也在变化。在系统中如何适应这两方面的变化?②传统做法通过多次继承实现。 遵循了开放原创 2017-02-27 10:35:22 · 617 阅读 · 0 评论 -
【编程素质】产品设计
1,文档1)PRD(Product Requirement Document产品需求文档)PRD文档是产品项目由“概念化”阶段进入到“图纸化”阶段的最主要的一个文档,其作用就是“对MRD中的内容进行指标化和技术化”,这个文档的质量好坏直接影响到研发部门是否能够明确产品的功能和性能。2)MRD(Market Requirement Document市场需求文档)该文档在产品项目中是一个“承上启下”的作原创 2017-02-21 15:00:19 · 626 阅读 · 0 评论 -
【快捷键大全】eclipse、win、chrome快捷键
eclipse快捷键【Alt + /】 提示 【Ctrl + Shift + F】快速缩进 【Shift + Tab】左缩进 【鼠标左键双击】选中 【Ctrl + /】 注释 【Ctrl + F】查找、替换、一键替换本文档所有此词汇 【Shift + Alt + S】 可以选择快速新建getters 和 setters 【ctrl+alt+H】查看方法被引用 或者:方法名上点原创 2017-01-03 11:19:32 · 582 阅读 · 0 评论 -
【编程素质】展望未来-互联网软件
1,概念: 软件在服务器上运行,浏览器作为操作界面。未来的计算机网速很快,电脑打开可能只有一个浏览器。什么应用都可以使用。2,好处: 1)不受地域限制,任何地方都可以使用。 2)使用“你的电脑”概念转换为“你的数据”。可以从任何电脑获取数据 3)不用安装,不会出现不兼容问题 4)购买之前容易试用,也不需要为新版本付费以及额外的升级准备。(注:开发者要注意平滑升级)原创 2016-11-15 11:00:41 · 469 阅读 · 0 评论 -
【编程素质】MVC和三层架构
MVC和三层架构是完全不同的2种设计规范。但是他们的核心是一致的:分层,解耦。若要区分,根据http://blog.csdn.net/beijiguangyong/article/details/7029257所述的图,更好理解。【MVC (Model View Controller)】M - 模型(model) :应用程序核心,处理应用程序数据逻辑。 负责在原创 2016-09-08 22:13:49 · 397 阅读 · 2 评论 -
程序员必备素质-团队
最近看了《极客与团队》,我想这是我目前看过的,对我触动最大的讲述团队作用及重要性的一本书。一直知道团队合作的重要,现在才发现自己以前认知的肤浅,只知其然而不知其所以然。下面是我的一些感触。(一)在开发初期,与人多交流 很多人在初期写程序时,喜欢埋头苦干,不与人交流。这样做通常有2个原因:1)不愿意被别人看见自己初期的错误,希望等一切做完功成名就之后将其展现给众人,显示自己的“天才”。2)害怕被原创 2016-04-02 21:46:34 · 501 阅读 · 0 评论 -
【编程素质】构件 基于构件的开发
最近看了一篇论文:《ABC:于体系结构、面向构件的软件开发方》,梅宏等著。 这篇文章主要讲了2点。一, 什么是基于构件的软件开发(CBSD)。二, 如何使用ABC方法来进行面向构件的软件开发。 首先,基于构件的软件复用和开发被认为是提高软件开发效率和质量的有效途径。只要拥有完备的构件库,软件系统的开发就可以像堆积木一样,系统的开发重点从程序设计变成构件组装。原创 2016-09-07 22:23:35 · 2187 阅读 · 0 评论 -
【编程素质】设计模式-其它
1,迭代器模式1)概念提供一种方法顺序访问一个聚合对象的各个元素,而又不暴露其内部的表示。2)实现3)demopublic interface Iterator{ boolean hasNext(); Object next();}public class DinerMenuIterator implements Iterator{ MenuItem[] items;原创 2017-05-17 22:30:26 · 596 阅读 · 0 评论 -
【算法】算法-二分搜索
package BinarySearch;public class BinarySearch { /** * 二分查找递归算法 * @param a * @param m 查找数 * @param left 起始下标 * @param right 终止下标 * @return 查找到的数组下标+1,即是数组中的第几个数 */原创 2017-04-27 16:27:08 · 515 阅读 · 0 评论 -
【算法】算法-独立任务最优调度问题(双机调度问题)
1,问题(问题来自:《计算机算法设计与分析(第4版)》王晓东 编著) 用2台处理机A和B处理n个作业。设第i个作业交给机器A处理时所需要的时间是a[i],若由机器B来处理,则所需要的时间是b[i]。现在要求每个作业只能由一台机器处理,每台机器都不能同时处理两个作业。设计一个动态规划算法,使得这两台机器处理完这n个作业的时间最短(从任何一台机器开工到最后一台机器停工的总的时间)。研究一个实例:n=6原创 2017-06-05 16:02:28 · 2727 阅读 · 0 评论 -
【编程素质】设计模式-外观模式
1,概念 提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。2,场景 ①当你要为一个复杂子系统提供一个简单接口时。 子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。 这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。facade可以提供一个简单的原创 2016-10-30 14:58:12 · 539 阅读 · 0 评论 -
【算法】算法-矩阵连乘问题(枚举法、备忘录法、动态规划)
1,问题给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2…,n-1。确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。输入数据为矩阵个数和每个矩阵规模,输出结果为计算矩阵连乘积的计算次序和最少数乘次数。2,枚举法(穷举搜索法)枚举所有加括号的方式。 对于n个矩阵的连乘积,设其不同的计算次序为P(n)。每个问题可分解为两个子问题:(A1…Ak)(原创 2017-06-05 20:59:50 · 3713 阅读 · 0 评论