自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 Linux安装与配置

一、什么是LinuxLinux是一个操作系统,相比于Windows,Linux以它的可靠和安全著称,而且更新频繁。Linux是免费的,而且运行在上面的程序也大多是免费的。Linux是开源的。GNU项目 + Linux系统内核 = GNU/Linux完整的操作系统二、不同的Linux发行版Red Hat 性能稳定,老牌Linux发行版。RHEL收费。Fedora:Red Hat ...

2020-04-29 19:11:53 234

原创 动态规划(一)

什么是动态规划动态规划就是将原问题拆解成若干个子问题,同时保存子问题的答案,使得每个子问题只求解一次,最终获得原问题的答案。1. 斐波那契数列写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1...

2020-04-28 21:14:00 243

原创 ThreadLocal【一次解决老大难问题】

一、使用场景每个线程需要一个独享的对象(通常是工具类,典型需要使用的类有SimpleDateFormat和Random)每个线程内需要保存全局变量(例如在拦截器中获取用户信息),可以让不同方法直接使用,避免参数传递的麻烦。1.每个线程需要一个独享的对象每个Thread内有自己的实例副本,不共享。SimpleDateFormat的进化之路自己写一个类,实现两个线程分别打印出时间信...

2020-04-28 10:26:52 801

原创 线程池【治理线程的最大法宝】

一、线程池的介绍1.线程池的重要性(1)如果不使用线程池,那么每一个任务都会新开一个线程如果任务很多,那么就会反复创建和销毁很多线程,造成很大的开销。过多的线程会占用太多内存。(2)线程池的好处加快响应速度合理利用CPU和内存统一管理(3)线程池适合应用的场合服务器:会收到大量请求实际开发中,需要创建5个以上的线程时,就可以使用线程池。二、创建和停止线程池1....

2020-04-26 15:40:26 374

原创 命令模式

需求:一套智能家电(照明灯、风扇、冰箱、洗衣机),我们只需要在手机上安装app就可以控制这些家电工作。我们希望只要一个app就可以控制所有的智能家电,则每个智能家电都要提供一个统一的接口给app调用,这时就可以考虑使用命令模式。命令模式可将“动作的请求者”从“动作的执行者”对象中解耦出来。在例子中,动作请求者是app,动作执行者是每个家电。1.基本介绍在软件设计中,我们经常需要向某些对象...

2020-04-25 10:47:05 156

原创 递归和回溯

一、树形问题本身没有定义在树中,但解决时发现是树的结构。1.电话号码的字母组合给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。虽然这不是一个树的问题,但是可以转化为一棵树。如下图,通过给定的字符串找对应按键可能出现的字母,然后添加到 StringBuilder里递归。之所以叫做回溯,那是因为在每...

2020-04-23 20:05:38 480

原创 模板方法模式

需求:豆浆制作问题编写制作豆浆的程序,说明如下:制作豆浆的流程 选材–>添加配料–>浸泡–>放到豆浆机打碎通过添加不同的配料,可以制作出不同口味的豆浆。选材、浸泡、放到豆浆机这几个步骤对于每一种豆浆都一样。1.模板方法模式基本介绍在一个抽象类中公开定义了执行它的方法的模板,它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方法进行。简单说,模板方法模式定...

2020-04-23 19:22:54 126

原创 代理模式(Proxy)

1.基本介绍代理模式:为一个对象提供一个替身,以控制对这个对象的访问,即通过代理对象访问目标对象。这样做的好处是:可以在目标对象实现的基础上,增强额外的功能,即扩展目标对象的功能。被代理的对象可以是远程对象、创建开销大的对象或者需要安全控制的对象。代理模式有三种形式:静态代理、动态代理和Cglib代理。代理模式示意图如下:2.静态代理(1)基本介绍静态代理在使用时,需要定义接口...

2020-04-23 16:39:54 155

原创 享元模式

需求:小型的外包项目,给客户A做一个产品展示网站,客户A的朋友感觉效果不错,也希望做这样的产品展示网站,但是要求都有些不同。有客户要求以新闻的形式发布有客户要求以博客的形式发布有客户希望以微信公众号的形式发布1.传统方案复制粘贴一份,然后根据客户不同的要求,进行定制修改。缺点:网站相似度高,但是都有各自的实例,造成服务器的浪费解决思路:整合到一个网站中,共享其相关的代码和数据...

2020-04-22 16:52:38 168

原创 外观模式

需求:1.传统如果为每一个设备建一个类,在其中写调用这个设备的方法。但是Client在操作这些设备的时候就比较繁琐,有以下问题:在Client中,创建各个子系统的对象,并直接去调用子系统(对象)相关方法,会造成调用过程混乱,没有清晰的过程。不利于在Client中去维护对子系统的操作。解决思路:定义一个高层接口,给子系统中的一组接口提供一个一致的界面(比如在高层接口中提供四个方法re...

2020-04-21 15:10:57 133

原创 组合模式

学校院系展示需求编写程序展示一个学校院系结构:类似下图1.使用组合模式使用继承关系不能很好的实现管理的操作。解决方案:把学校、院、系都看作组织结构,他们之间没有继承的关系,而是一个树形结构,可以更好地实现管理操作。2.组合模式基本介绍组合模式,又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构以表示“整体-部分”的层次关系。组合模式依据树形结构来组合对象,用来表示部...

2020-04-20 08:51:33 159

原创 装饰者模式

星巴克咖啡订单项目咖啡种类:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡)调料:Milk、Soy(豆浆)、Chocolate要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便使用OO的方式来计算不同种类咖啡的费用:客户可以点单品咖啡,也可以点单品咖啡+调料组合1.传统方案使用一个抽象类Drink,其中有成...

2020-04-19 11:26:52 139

原创 桥接模式

现对不同手机类型的不同品牌实现操作编程(比如:开机、关机、上网、打电话等)1.传统方法扩展性问题:如果再增加手机的样式,就需要增加各个品牌类的手机2.桥接模式的基本介绍桥接模式是指:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变结构型设计模式Bridge模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象与实现分离开来,...

2020-04-18 13:34:50 225

原创 适配器模式

比如插座,不同国家的插座与插头需要适配器。1.适配器模式基本介绍适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是兼容性,让原本因接口不匹配而不能一起工作的两个类可以协同工作。别名为包装器。适配器模式属于结构型模式。分为三类:类适配器模式、对象适配器模式、接口适配器模式2.适配器模式工作原理适配器模式:将一个类的接口转换成另一种接口,让原本不兼容的类可以兼容。从用...

2020-04-18 09:40:00 161

原创 建造者模式

盖房项目需求:流程是打桩、砌墙、封顶房子有各种各样,建造流程虽然一样,但是具体操作不同1.传统方式最容易想到的,就是让不同的房子种类继承一个共同的父类,并且实现其抽象方法。其中build()中调用其他三个方法,在使用时只需要调用build()即可建房子。缺点:将房子和建房子的过程封装在了一起,耦合性增强了。2.建造者模式基本介绍是一种创建型模式,可以将复杂对象的建造过程抽象...

2020-04-17 15:27:53 139

原创 原型模式

克隆羊问题:现在有一只羊tom,姓名为tom,年龄为:1,颜色为:白色,请编写程序创建和tom羊属性完全相同的10只羊。1.简单粗暴直接new一个新的Sheep实例,在创建时传入被克隆实例的属性即可。@Datapublic class Sheep { private String name; private int age; private String colo...

2020-04-17 10:09:56 145

原创 工厂模式

鉴于课程中的工厂模式确实讲得不好,所以我自己总结整理了一篇。一、简单工厂模式定义:专门定义一个类用来创建其他类的实例,被创建的实例通常具有共同的父类。简单工厂模式不是23种里的一种,简而言之,就是有一个专门生产某个产品的类。比如下图中的鼠标工厂,专业生产鼠标,给参数0,生产戴尔鼠标,给参数1,生产惠普鼠标。有三个要素:产品接口产品实现工厂实现每次想要获得不同的产品时,只需要...

2020-04-14 18:01:22 776

原创 移动IP

简介一、需求对接入点:在移动的过程中会改变接入点。手机使用的蜂窝网络中,移动会改变基站。在WLAN中,一个用户在移动的过程中会改变AP(连接点)对应用:希望应用不会再移动性上被打扰基站改变,但通话质量不变(蜂窝)AP改变继续应用(WLAN)二、移动解决方案1.蜂窝GSM 有自己的 注册、切换、移动管理过程2.移动网络移动IP,基于主机和移动用户三、Mobile I...

2020-04-13 22:04:12 3197 3

原创 单例模式

一、设计模式概述和分类1.创建型模式单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式2.结构型模式适配者模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式3.行为型模式模板方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式单例模式就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个...

2020-04-13 13:31:38 178

原创 UML类图

一、UML基本介绍统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML使用面向对象设计的建模工具,但独立于任何具体程序设计语言。UML本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中各个元素和他们之间的关系,比如类、接口、实现、泛化、依赖、...

2020-04-12 14:14:26 151

原创 设计模式的七大原则

一、设计模式的重要性设计模式是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式可以提高代码重用性、可读性、可扩展性、可靠性,使程序呈现高内聚、低耦合的特性。二、单一职责原则一个类应该只负责一项职责。如果类A负责职责1和...

2020-04-12 10:26:23 165

原创 二叉树和递归

二叉树的天然递归结构1. 二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。使用一个递归可以轻松解决,那么递归函数的定义为:返回当前二叉树的最大深度所以每个函数内部只需要返回左右子树最大深度+1即可。class Solution { int res; public i...

2020-04-10 20:58:52 300

原创 MyBatis 第三扇门

缓存1.什么是缓存查询是需要连接数据库的,耗资源。如果我们把一次查询的结果暂存在一个可以直接取到的地方(缓存),下次查询相同数据时便直接走缓存,不用走数据库了。什么是缓存?存在内存中的临时数据将用户经常查询的数据存放在缓存中,用户就不用到磁盘中查询,而是从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。为什么要有缓存?减少和数据库的交互次数,减少系统开销,提高系统效...

2020-04-08 19:52:28 162

原创 老八秘制二叉树生成器

LeetCode二叉树题目自己测不了,就用老八秘制……写了一个小工具,数组转二叉树:package Tree;import java.util.LinkedList;import java.util.Queue;public class TreeUtils { /** * 将一个数组转为二叉树 * @param nums 传入的数组 * @ret...

2020-04-07 21:30:19 1178 4

原创 MyBatis 第二扇门

一、日志1.日志工厂如果一个数据库操作出现了异常,我们需要排错。STDOUT_LOGGING标准日志输出 <settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings>设置即可使用。这样在执行时即可打印日志。2.LOG4JLog4j...

2020-04-07 17:05:17 168

原创 队列

二叉树的层次遍历例题:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。使用一个队列,来保存每一层的结点。每次我们从队列中依次取出这一层的所有结点,然后保存它们的值为一个列表,并将它们的左右结点入队。当队列为空的时候,二叉树也就被遍历完了。class Solution { public List<List<Integer&...

2020-04-04 20:50:21 167

原创 MyBatis 入门

环境:JDK1.8Mysql 5.7maven 3.6.1IDEA回顾:JDBCMysqlJava基础MavenJunit框架:最好的方式是看文档一、简介1.什么是MyBatisMyBatis 是一款优秀的持久层框架它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis ...

2020-04-03 19:27:16 189

原创

栈的基本使用例题:有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。很经典的题目,当初第一次做还是个懵懂的少年,现在头发刷刷的掉。利用栈可以很轻松的实现,遇到左括号就进栈,右括号就出栈栈顶元素进行匹配。如果匹配错...

2020-04-02 09:48:31 136

原创 Spring Boot Web开发-基础篇

一、简介最简单的使用Spring Boot方法:创建SpringBoot应用,选中我们需要的模块;SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来;自己编写业务代码。思考一下:这个场景SpringBoot帮我们配置了什么?能不能修改?能修改哪些配置?能不能扩展?xxxxAutoConfiguration:帮我们给容器中自动配置组件;xx...

2020-04-01 18:27:32 151

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除