- 博客(42)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 设计模式学习笔记
该系列文章涉及到了一些常见的设计模式和其简单例子的实现和讲解,如策略模式,单例模式,工厂模式等等。githubdesign-pattern如果觉得不错,请先在这个仓库上点个star吧,这也是对我的肯定和鼓励,谢谢了。不定时进行调整和补充,需要关注更新的请 Watch、Star、Fork目录设计模式学习——策略模式 设计模式学习——观察者模式 设计模式学习——装饰者模式 设计...
2018-08-02 09:22:21
137
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 《Java多线程编程核心技术》读书笔记
多线程技术在Java中非常重要,整个Java多线程安全技术的发展是围绕着“可见性”与“原子性”两个主题发展的,Java的同步机制都是围绕这两个方面来保证线程安全。 多线程技术在Java中扮演着十分重要的角色。一 线程与进程的概念进程:广义上,可以理解为一个程序,如QQ,音乐,游戏等。线程:在进程中运行的子任务。当你打开QQ,你可以与他人聊天,可以下载文件,可以发送表情,那...
2018-05-25 17:34:51
503
原创 大型网站系统与Java中间件—读书笔记3(Java中间件)
一 Java中间件的定义 “软件胶水” 应用与应用间的桥梁 应用与服务间的桥梁 远程过程调用和对象访问中间件:主要解决分布式环境下 应用的互相访问(应用服务化的基础) 消息中间件:解决应用之间的消息传递、解耦、异步的问题 数据访问中间件:解决应用访问数据库的共性问题二 构建中间件基础知识 1 JVM ...
2018-09-01 08:35:37
156
原创 大型网站系统与Java中间件—读书笔记2(大型网站演进)
一 大型网站定义 特征:高访问量 海量数据二 大型网站架构演进 1 用JAVA技术与单机构件的网站 应用 数据库 WEB容器(如Tomcat) Servlet/JSP HTML CSS SSM 对于大型网站核心功能:计算(应用)和存储(数据库) 2 单机负载警告 数据库与应用分离...
2018-09-01 08:35:30
225
原创 大型网站系统与Java中间件—读书笔记1(初识分布式系统)
一 分布式系统 1 定义: 多节点 互相连通 协调工作 2 意义: 升级单机能力性价比不高 单机能力有瓶颈 单机存在宕机风险二 基础知识 1 冯·诺依曼模型...
2018-09-01 08:35:23
151
原创 大型网站系统与Java中间件—读书笔记4(服务框架)
一 网站功能持续丰富后的困境和应对 困境:访问压力不断增大 开发人员增多 应用复杂臃肿 代码冗余 数据库压力增大 应对:1 把应用拆小 问题: 数据库压力依旧在 存在重复代码 如商品管理和交易管理等功能中,都会调用与用户相关功能 2 服务化方案 ...
2018-09-01 08:35:16
146
原创 大型网站系统与Java中间件—读书笔记5(数据访问层)
一 数据库从单机到分布式的挑战和应用 1 单机数据库 JDBC ODBC ORM 2 数据库水平垂直/水平拆分的困难 数据库减压方案: 优化应用(看是否有没必要的压力给数据库) 其他办法降低对数据库的压力(引入缓存,搜索引擎) ...
2018-09-01 08:35:09
214
原创 大型网站系统与Java中间件—读书笔记6(消息中间件)
一 消息中间件的价值 1 消息中间件的定义 胶水 为我们带来异步的特性,对系统进行了解耦 2 透过示例看消息中间件对应用的解耦 通过服务调用让其他系统感知事件发生的方式 例子:用户登录成功 让登录系统给用户发送短信/通知安全系统/通知其他系统 这会让登录系统变得更加复杂,并依赖非常多的系统...
2018-09-01 08:35:02
103
原创 设计模式学习——代理模式
如果我们想购置房屋,绝大多数情况下不会直接去找房主谈生意,因为这个过程实在是太消耗精力和时间了,我们会选择经验老道的中介,来挑选我们自己喜欢的房源,协商价格,一切都委托给他办理,我们需要做的就是付钱而已。代理模式起到的作用,就和中介一样,架起了客户与委托者之间的桥梁。代理模式定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用UML图客户:使用委托类的对象...
2018-08-01 10:19:53
117
原创 设计模式学习——状态模式
状态模式将状态封装成为独立的类,并将动作委托到代表当前状态的对象,将容易产生问题的if语句删除,以方便日后的维护,同时也让每一个状态对修改关闭,让含有状态的类对扩展开放。状态模式定义:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。UML图内容:内部持有某些状态接口,并维护着对象的现有状态 状态接口:抽象状态类或者接口,用以封装行为 具体状态:具体状态类,...
2018-08-01 10:19:45
262
原创 设计模式学习——模板方法模式
模板方法模式将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。这可以确保算法的结构保持不变,同时由子类提供部分实现。模板方法模式定义:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。UML图例子我们知道泡茶和泡咖啡步骤大致一致,分别是1 把水煮沸 2 用沸水煮泡咖啡/浸泡茶叶...
2018-08-01 10:19:24
129
原创 设计模式学习——适配器模式
适配器(Adpater),顾名思义,与我们平时生活中常见的电源转换头一样,起着转换的作用,是用来适配的中间件,连接原本不匹配的两类。适配器模式定义:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。类适配器 对象适配器 接口适配器UML图目标:目标抽象类定义客户所需的接口,可以是一个抽象类或接口,也可以是具体类 转换类:所有的请求都委托...
2018-08-01 10:19:16
144
原创 设计模式学习——命令模式
现在我们手里有一副遥控器,上面有分别控制着电视、电灯、电脑开关的按钮,当我们按下按钮的开或者关控制键时,这些电器就会做出相应的反应,即请求者(遥控器),向接受者(电器)发送命令,接受者根据收到的命令做出相应的反应,这就是典型的命令模式场景,它利用命令这个接口实现了请求者与接受者的解耦。命令模式定义:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化对象,命令模式也支持撤销的操作...
2018-08-01 10:19:08
260
原创 设计模式学习——单例模式
当我们使用线程池,缓存,注册表和日志等这些对象时,是否疑惑过,我们那么多个类使用的这些对象是同一个对象实例吗?答案显而易见——如果不是的话,那么这些功能将面临着无数的问题,这就是单件模式。事实上,想让一个对象全局共享,static关键字也起着重要的作用,但是如果我们不是经常使用这个对象且该对象十分消耗资源的话,要知道这个对象是一开始就会被出创建的,那么是对我们系统资源的极大浪费,而单件模式可以...
2018-08-01 10:18:57
109
原创 设计模式学习——工厂模式
在装饰者模式中我们讲到一条设计原则,即我们应该为对象间的松耦合而努力。在初始化对象时,除了使用new操作符之外,还有更多制造对象的方法,实例化这个活动不应该总是公开的进行,初始化经常造成“耦合”问题,我们不希望这样,而工厂模式能够将我们从复杂的依赖中解脱出来。工厂模式简单工厂模式 工厂方法 抽象工厂模式简单工厂模式准确的说,简单工厂其实不是一个设计模式,反而比较像是一种编程习...
2018-08-01 10:17:00
170
原创 设计模式学习——装饰者模式
当我们来到KFC开始点餐的时候,一开始还不是特别有胃口,所以只点了一份汉堡套餐,有一份汉堡和饮料,但后来又点了一份薯条,最后干脆再点一份炸鸡腿,那么如何来计算我们花了多少钱呢?在这个场景下,装饰者模式会起到很好的效果。装饰者模式定义:动态的将责任附加到对象身上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。即通过将装饰者和组件组合的方式,来加入新的行为。行为来自装饰者和组件的...
2018-08-01 10:16:44
150
原创 设计模式学习——观察者模式
如果我们现在向一家报社订阅了一份报纸,那么这家报社不管今天我们有没有心情看报纸,它都会把报纸送过来。有一天我们实在是不想看这家的报纸了,我们如果取消了订阅,那么从此以后报社再也不会送报纸到我们家了。上面这一段情景,其实和观察者模式的工作性质是一样的。观察者模式定义:在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。其实就是有人发布信息,...
2018-08-01 10:16:30
230
原创 设计模式学习——策略模式
不管你在何处工作,构建些什么,用何种编程语言,在软件开发上,一直有条颠扑不破的真理:成长与改变。不管软件设计的多好,一段时间之后,总是需要成长与改变,否则软件就会死亡。对于此,首先有第一条设计原则:封装变化 即将应用中需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。除此在外,我们还希望我们的代码易于维护和扩展,更加富有弹性,对于此,有第二条设计原则:面向...
2018-08-01 10:15:50
127
原创 spring-springmvc-mybatis整合笔记(14)——遇到的问题
其实这些博客早就应该发出来了,因为六月份的毕业季,实验室师兄师姐的离去,又有新来的师弟加入,还有期末考试的各种琐事,一直拖到了这些天才发,其实还有一部分内容没写完,争取写完之后发出来,先在这里整理一下写这个小demo期间遇到的BUG。一 maven自动生成的web.xml版本问题碰到过类似于以下的BUG:org.apache.jasper.JasperException: Unable to co...
2018-07-09 11:07:21
149
原创 spring-springmvc-mybatis整合笔记(13)——json交互
一 json数据串json数据格式在接口调用中、html页面中较常用,json格式比较简单,解析还比较方便。二 pom依赖<!-- json 转换--><dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databi...
2018-07-09 10:22:47
226
原创 spring-springmvc-mybatis整合笔记(12)——上传图片
一 springmvc.xml中配置解析器在springmvc.xml中配置multipart类型解析器<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 设置上传文件的最大尺寸为5MB --&...
2018-07-09 10:05:46
159
原创 spring-springmvc-mybatis整合笔记(11)——全局异常处理器
一 异常介绍Java中的异常分为两类:1 运行时异常2 预期异常前者通过规范代码开发、测试通过手段减少运行时异常的发生,后者通过捕获异常从而获取异常信息。系统的dao、service、controller出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理。springmvc通过全局异常处理器来处理异常。(只能有一个全局异常处理器)二 自...
2018-07-09 09:59:59
256
原创 spring-springmvc-mybatis整合笔记(10)——数据回显
一 什么是数据回显在表单中,如果提交后数据错误,那么再回到原来的页面中。二 POJO数据回显方法springmvc默认对POJO数据进行回显。POJO数据传入controller方法后,springmvc自动将pojo数据放到request域中。key等于pojo类型,首字母小写。使用@ModelAttribute指定pojo回显到页面在request中的key。@ModelAttribute还可...
2018-07-08 21:07:14
180
原创 spring-springmvc-mybatis整合笔记(9)——validation校验
一 何为Validation校验校验是WEB应用中非常重要的一个环节,如用户登录时对有效信息的校验,购买商品时购物车中商品是否过期校验等等。在springmvc中使用hibernate的校验框架validation(和hibernate没有任何关系)。校验思路:页面提交请求的参数,请求到controller方法中,使用validation进行校验。如果校验出错,将错误信息展示到页面。具体需求:商品...
2018-07-08 20:48:14
649
原创 spring-springmvc-mybatis整合笔记(8)——集合类型参数绑定
一 数组1 需求商品批量删除,用户在页面选择多个商品,批量删除。2 表现层实现关键:将页面多选的商品ID,传到controller方法的形参中,方法形参使用数组接受传过来的ID。JSP页面修改后为:<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.d...
2018-07-08 11:54:01
184
原创 spring-springmvc-mybatis整合笔记(7)——包装类型参数绑定
在前文中,我们提出来ItemsCustom这个包装类,用于满足商品信息的扩展。现在在前端页面中,传入的参数如果十分复杂,如用户信息,商品编号,订单信息等,远远超出了items本身的属性,这里就可以使用上文提到的ItemsCustom这个包装类型,来帮我们实现这个需求。当然了,直接在Controller的方法中传入HttpServletRequest参数也是可以的。现在首先需要在前端页面传入的参数名...
2018-07-08 10:35:02
171
原创 spring-springmvc-mybatis整合笔记(6)——简单参数绑定
一 简单类型的绑定在上文中可以看到Controller方法中出现了参数,那么Controller方法对于接受的参数有什么要求呢?1 默认参数HttpServletRequestHttpServletResponseModel/ModelMapHttpSession 2 简单参数要求request传入参数名称和Controller方法的形参名称一致,才可以绑定成功。但是可以使用@RequestPar...
2018-07-08 10:10:16
142
原创 spring-springmvc-mybatis整合笔记(5)——添加商品修改功能
一 功能需求在商品列表中点击需要修改的商品,跳转到商品修改页面,在该页面做商品的修改。二 service接口新增方法由于逆向工程已经生成了实现这一功能我们需要的方法,这里直接在service接口中新增方法: @Override public ItemsCustom findItemsById(int id) throws Exception { Items items...
2018-07-07 19:21:38
970
原创 spring-springmvc-mybatis整合笔记(4)——controller包
一 编写Controllerpackage com.lpc.controller;import com.lpc.po.ItemsCustom;import com.lpc.service.ItemsService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework...
2018-07-07 15:01:28
265
原创 spring-springmvc-mybatis整合笔记(3)——service包
一 service包在service包下创建ItemsService接口与实现类的包serviceimpl1 定义ItemsService接口public interface ItemsService { //商品查询列表 List<ItemsCustom> findItemsList(ItemsQueryVo itemsQueryVo) throws Exceptio...
2018-07-07 14:04:52
161
原创 spring-springmvc-mybatis整合笔记(2)——mapper包
一 通过逆向工程生成po与mapperMyBatis官方提供了强大的逆向工程代码,即可以通过数据库生成po与mapper,这里不去做过多的讨论,争取写完这一系列后更新一篇关于mybatis逆向工程的博文。生成后目录如下(注:ItemsMapperCustom,ItemsCustom,ItemsQueryVo为自定义po与mapper,下一部分将讲解):二 手工定义po与mapper随着项目的进展和...
2018-07-07 13:41:16
344
原创 spring-springmvc-mybatis整合笔记(1)——通过maven创建项目
一 如何通过MAVEN创建一个WEB项目(IntelliJ)参考博客:https://www.cnblogs.com/weishenhong/p/5533200.html1 新建项目在File->New->Project中,选择maven项目,按红色框所示选择,直接选择最简单的webapp模板。...
2018-07-07 11:58:20
223
原创 Java基础查漏补缺--继承中的子父类构造函数
在子父类的构造函数中存在以下关系:1:在调用子类构造函数时,父类构造函数也会运行 因为在子类构造函数中,隐式地认为第一行为super(),即调用父类的无参数构造方法。 如果父类没有无参数构造方法,那么需要在子类中给出父类的含参构造方法。 如果父类中没有构造函数,那么子类中就无需给出任何父类的构造函数。2:如果需要调用父类的含参构造函数,必须在子类构造方法的第一行调用3:...
2018-06-13 11:35:54
154
原创 MyBatis笔记(六)——与Spring框架的整合
Spring作为一款优秀的开源框架,支持mybatis框架的使用。 一 文件结构在src目录下新建配置文件夹config,在其下新建mybatis文件夹存放配置文件。 二 配置文件<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.o...
2018-05-25 11:14:02
195
原创 MyBatis笔记(五)——查询缓存
MyBatis的缓存分为一级缓存与二阶缓存,缓存的存在能够大大减少数据库使用的压力其中一级缓存是基于SqlSession的缓存,二阶缓存是基于mapper的缓存。一级缓存 一级缓存基于sqlSession,mybatis创建sqlsession对象的时候,该对象内部存在Hashmap数据结构,保存着缓存的数据。不同的sqlsession是互不影响的。 二级缓存是mapper级别的缓存,...
2018-05-11 17:03:31
141
原创 MyBatis笔记(四)——懒加载
在数据库查询记录过程中,单表查询要比多表查询来得效率更加高,单表查询的使用会提高数据库的性能。 在映射文件中,我们可以自定义映射类型,即resultmap,在其中,能够做到一对多(collection),一对一(association)的高级映射效果,而collection与association具有懒加载的功能。 例子 住房信息与户主信息,相关部门需要查询住房信息,当需要查询户主...
2018-05-11 15:16:41
194
原创 MyBatis笔记(三)——动态Sql
动态Sql是MyBatis的核心部分,能够对Sql语句进行非常灵活的操作,通过表达式对条件进行判断,对Sql语句进行灵活的操作、组装。 If判断 以下是mapper文件 <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0/...
2018-05-11 11:19:02
130
原创 MyBatis笔记(二)——一对一,一对多映射
/* 今天学习的是关联关系的部分内容 */(一)一对一关系这里我以住房和户主为例,在通常情况下(土豪和炒房团奏凯!),它们是一对一的关系。我们先写两个持久类:House 与 HostHost持久类:package ouc;public class Host { private int mid; ...
2018-03-26 22:26:56
173
原创 MyBatis笔记(一)——MyBatis介绍与入门程序
/* 这段时间刚开始学习MyBatis,学习过程中有许多不理解和犯错的地方,希望能借助博客记录下来。 */MyBatis是一款优秀的开源框架,用于持久层的设计开发中,MyBatis支持开发者编写特定的SQL语句,支持存储化过程(?)与高级映射(?)。MyBatis几乎避免了所有的JDBC代码和手动设置参数以及获取结果集。MyBatis通过XML设置配置和映射原生信息,将接口和...
2018-03-25 16:41:13
233
原创 Java-Web学习笔记(1) Session与Cookie
在谈论Session与Cookie之前,我们需要先明白一个概念:“会话”。 所谓的“会话”技术,是在Web技术中经常用到的技术,用来跟踪用户的一次完整会话。顾名思义,就像在日常生活中我们拿起电话,向他人拨打电话,当你挂断电话的时候,就代表了一次会话的结束,在现在的绝大多数浏览器中,在同一个浏览器下的不同窗口向一个网站发出请求,也视为一次会话。 常用的会话跟踪技...
2018-03-08 21:14:28
143
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人