自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JAVA设计模式之 15.迭代器设计模式

优点提供一个统一的方法遍历对象,客户不用再考虑聚合的类型,使用一种方法就可以遍历对象了。 隐藏了聚合的内部结构,客户端要遍历聚合的时候只能取到迭代器,而不会知道聚合的具体组成。 提供了一种设计思想,就是一个类应该只有一个引起变化的原因(叫做单一责任原则)。在聚合类中,我们把迭代器分开,就是要把管理对象集合和遍历对象集合的责任分开,这样一来集合改变的话,只影响到聚合对象。而如果遍历方式改变的话,只影响到了迭代器。 当要展示一组相似对象,或者遍历一组相同对象时使用, 适合使用迭代器模式//迭代器设计

2020-09-30 16:58:22 76

原创 JAVA设计模式之 14.访问者设计模式

优点访问者模式符合单一职责原则、让程序具有优秀的扩展性、灵活性非常高 访问者模式可以对功能进行统一,可以做报表、UI、拦截器与过滤器,适用于数据结构相对稳定的系统缺点具体元素对访问者公布细节,也就是说访问者关注了其他类的内部细节,这是迪米特法则所不建议的, 这样造成了具体元素变更比较困难 违背了依赖倒转原则。访问者依赖的是具体元素,而不是抽象元素 因此,如果一个系统有比较稳定的数据结构,又有经常变化的功能需求,那么访问者模式就是比较合适的.//访问者设计模式public class Vis

2020-09-30 14:23:23 74

原创 JAVA设计模式之 13.命令设计模式

命令设计模式:将发起请求的对象与执行请求的对象解耦。发起请求的对象是调用者,调用者只要调用命令对象的 execute()方法就可以让接收者工作,而不必知道具体的接收者对象是谁、是如何实现的,命令对象会负责让接收者执行请求的动作,也就是说:”请求发起者”和“请求执行者”之间的解耦是通过命令对象实现的,命令对象起到了纽带桥梁的作用。 容易设计一个命令队列。只要把命令对象放到列队,就可以多线程的执行命令 容易实现对请求的撤销和重做//命令设计模式public class Command { .

2020-09-30 12:06:52 98

原创 JAVA设计模式之 12.代理设计模式之 静态代理模式,动态代理模式,cglib代理模式

静态代理优缺点:优点:在不修改目标对象的功能前提下, 能通过代理对象对目标功能扩展 缺点:因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类 一旦接口增加方法,目标对象与代理对象都要维护//代理设计模式 静态代理public class StaticProxy { public static void main (String[] args) { //创建目标对象 TeacherDao teacherDao = new TeacherDao(

2020-09-30 10:04:42 52

原创 JAVA设计模式之 11.享元设计模式

享元设计模式:所谓享元就是会自定义一个hashmap,当你创建对象时,有就直接取,没有就存进去。String 常量池、数据库连接池、缓冲池的的池技术,就是使用了享元模式。//享元设计模式public class Flyweight { public static void main (String[] args) { WebSiteFactory webSiteFactory = new WebSiteFactory(); WebSite webSite =

2020-09-29 14:11:10 101

原创 JAVA设计模式之 10.外观设计模式

外观设计模式:有个外观类把一些小的方法归类为几个大方法里面。最后调用时就简单明了了。//外观设计模式 也叫 过程设计模式,门面设计模式public class Facade { public static void main (String[] args) { System.out.println("*******************************"); HomeTheaterFacade homeTheaterFacade = new Home

2020-09-29 10:42:20 78

原创 JAVA设计模式之 9.组合设计模式

理的对象具有树形结构时, 非常适合使用组合模式//组合设计模式public class Composite { public static void main (String[] args) { //从大到小创建对象 学校 OrganizationComponent university = new University("清华大学","北京的大学"); //学院 OrganizationComponent college1

2020-09-28 19:15:49 88

原创 JAVA设计模式之 8.桥接设计模式

技术重点:一个抽象类通过构造函数注入接口,调用接口的方法。在用一个类继承抽象类。解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。//桥接设计模式public class Bridge { public static void main (String[] args) { Phone phone = new FoldedPhone(new XiaoMi()); Phone phone1 = new UpRightPhone(ne

2020-09-28 10:55:55 56

原创 数据库联表查询,增加一个结果字段,为何会改变排序的顺序?

记一个问题,有缘再解释。同属与MYSQL数据库顶层排序机制的问题。1.数据库联表查询,增加一个结果字段,排序的顺序改变SELECT id, name, type, cts.hot FROM CT ct LEFT JOIN CTS cts ON cts.topic_id = ct.id ORDER BY cts.hot ASC然后条件不变只是取消type的查询。SELECT id, name, cts.hot FROM CT ct LEFT JOIN C

2020-09-27 17:10:38 632 1

原创 数据库联表查询,用第二张表的独有字段排序,为何会乱序?

记一个问题,有缘再解释。解决办法其实就是order by指明唯一确定的字段 如order by id。此处是想知道MYSQL底层排序原理。1.数据库联表查询,用第二张表的独有字段排序时,乱序SELECT id, name, type, cts.hot FROM CT ct LEFT JOIN CTS cts ON cts.topic_id = ct.id ORDER BY cts.hot ASC当排序的条件一样时,为何会以此种顺序显示,且不会出现多次搜索排序结果不一致的情况.

2020-09-27 17:01:51 521

原创 MYSQL数据库中,查询emoji表情的方法。

字符集:CHARSET=utf8mb4 数据库可以存储emoji表情排序规则COLLATE=utf8mb4_unicode_ci 数据库可以查询emoji表情,_ci:case insensitive,不区分大小写。排序规则COLLATE=utf8mb4_bin 也可以查询出emoji表情,utf8mb4_bin是根据二进制(Binary)来查询的。可具体根据自己的需求去选择。SELECT ct.name FROM CT ct WHERE ct.NAME LIKE '%????

2020-09-27 15:21:34 3506

原创 JAVA设计模式之 7.适配器设计模式之 类适配器模式,对象适配器模式,接口适配器模式

类适配器模式:如家用电是220V,手机充电加入需要5V你就要去转换它。设计的逻辑:1.Phone需要充电所以有个充电的方法charging()方法。2.charging()中传入适配5v电压的接口 interface IVoltage5V--->charging(IVoltage5V iVoltage5V)3.适配5v电压的接口 interface IVoltage5V中有个output5V()方法被VoltageAdapter类重写。把220V处成5V输出。//被适配的类cl

2020-09-27 14:32:12 133

原创 读取txt文件内容,并打印到控制台

public class ReadText { public static String loadFile (String path) { try { Reader in = new FileReader(path); BufferedReader br = new BufferedReader(in); String line = null; StringBuilder sb .

2020-09-25 14:02:29 2207 1

原创 JAVA设计模式之 6.模板方法设计模式

模板方法设计模式:写好一个抽象的模板,预留空方法,给你继承,你就可以重写空的方法了。abstract class TemplateStyle { public void templateStyle() { System.out.println("开始"); long start = System.currentTimeMillis(); code(); long end = System.currentTimeMillis();

2020-09-25 11:54:58 88

原创 JAVA设计模式之 5.装饰者设计模式

装饰者设计模式,对于一个抽象的类,对其添加自己想要的各种类修饰它。代码特点:一边继承,一边又关联。意味着可以重写你,又可以拿到你所有的属性。 当然就可以装饰了。abstract class Condiment extends Beverage { protected Beverage beverage;@Dataabstract class Beverage { private String description; public Beverage (Stri.

2020-09-25 10:13:24 80

原创 JAVA设计模式之 4.建造者设计模式。

优点:1.创建对象的过程稳定不变(因为有ComputerBuilder接口来稳定过程)2.创建对象的过程只写了一次,没有重复代码。(指挥者完成)3.当需要扩展的时候,不用修改之前的代码。(新增xxxxxBuilder接口 即可)//建造者设计模式public class Builder { public static void main (String[] args) { AdvancedComputerBuilder acb = new AdvancedComp

2020-09-24 15:18:42 59

原创 JAVA设计模式之 3.原型设计模式,以及浅克隆与深克隆。

解决某些entity大量属性的重用率很高,手动设置过于繁琐且无必要的问题。先看原型设计模式之浅拷贝//原型模式public class Prototype { public static void main (String[] args) throws CloneNotSupportedException { Report report = new Report(); report.setId (1); report.setName("ma

2020-09-24 14:29:48 119

原创 JAVA设计模式之 2.工厂方法模式。 分析工厂模式解决的问题。简单工厂模式的缺点然后升级到---->工厂方法模式---->抽象工厂模式

工厂模式解决的问题,看下图中的代码。我做出一个产品后,名字更改,用户必须更改,这样违反迪米特法则。我们来看简单工厂模式 如何解决这种情况。public class SimpleFactory { public static void main (String[] args){ Food food = FoodFactory.getFood(1); food.eat(); }}interface Food { void eat();}class .

2020-09-23 20:06:29 163

原创 JAVA设计模式之 1.单例模式。各种单例模式的写法,推荐使用静态内部类或者枚举型写的单例模式。

饿汉式的不足是直接给你加载了对象,如果你确定会使用其加载的对象,就不会造成内存浪费,那么也是推荐使用的。如 java中 的RunTime类 就是饿汉式单例模式。静态内部类或者枚举型写的单例模式都是懒加载的,且线程安全。推荐使用。public class SingletonTest01 { public static void main (String[] args){ System.out.println( SingletonHungryStyle.getInstance())

2020-09-23 16:58:16 81

原创 学习数据结构(二叉树,平衡二叉树,红黑树,B树,B+树等),排序算法(冒泡排序 插入排序 快速排序 插入排序等)必须要知道的网页。

以动图的形式让你更明白,数据的插入,查询路径。排序方法的比较过程。更多的请点击Data Structure Visualizations

2020-09-21 14:37:25 124

原创 mysql中 索引数据结构用+树的原因,与hash,二叉树,红黑树的简单对比。

hash索引的优势:一次查找,精准定位。不足: 范围查询 > < ,排序 order by 。比如要找id<4,那它只能快速定位4的hash位置,1 2 3 都不能快速定位。二叉树:和插入顺序有关,极端情况会出现倾斜二叉树(顺序插入1 2 3 4 5 查找5 就要5次)。红黑树:解决了二叉树插入顺序的问题,但是又没有从根本上解决,顺序插入,严重右倾。B+Tree: 由于叶子节点上存放了所有的数据,并且有指针相连,每个叶子节点在逻辑上是相连的,所以对于范围查找比较友好。

2020-09-21 14:28:46 184

原创 mybatis 用<foreach>根据ID批量更新时的一个注意点。

看接口。传入一个Long型的List。int updateReadCount(@Param(value = "topicIdList") List<Long> topicIdList);xml里面循环update.<update id="updateReadCount" parameterType="java.util.List"> update CTS set read_count = read_count + 1 w

2020-09-18 17:50:41 583 2

原创 mysql获取排名后的名次(根据话题热度,获得话题的热度名次)

根据话题热度,获得话题的热度名次 SELECT b.ranking FROM ( SELECT a.id, a.hot, ( @ranknum := @ranknum + 1 ) AS ranking FROM ( SELECT ct.id, cts.hot FROM

2020-09-18 17:25:38 992

原创 update中批量更新用in的一个小问题。

数据库字段。根据topic_id批量更新read_count,mybatis中的语句 update c set read_count = read_count + 1 where topic_id in <foreach item="topicId" index="index" collection="topicIdList" open="(" close=")" separator=","> #{.

2020-09-17 12:15:38 4668 3

原创 判断List中是否有重复的元素。

list的初始值 uid都为1,AccountData2单独设置了NickName("aaa"); List<AccountData> AccountDataList = new ArrayList<>(); AccountData AccountData = new AccountData(); AccountData AccountData2 = new AccountData(); AccountData.setUid..

2020-09-17 10:54:45 2566

原创 Mybatis 加载 映射器(mappers)配置的四种方式,以及优先级。

你可以使用相对于类路径的资源引用,或完全限定资源定位符(包括 file:/// 形式的 URL),或类名和包名。1.使用相对于类路径的资源引用 resource<!-- 使用相对于类路径的资源引用 --><mappers> <mapper resource="org/mybatis/builder/AuthorMapper.xml"/> <mapper resource="org/mybatis/builder/BlogMapper.xml"/.

2020-09-07 10:23:04 2225

原创 redis单线程为什么执行速度这么快的原因。

(一)纯内存操作,避免大量访问数据库,减少直接读取磁盘数据,redis将数据储存在内存里面,读写数据的时候都不会受到硬盘 I/O 速度的限制,所以速度快;(二)单线程操作,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;(三)多样的数据结构(四)采用了异步非阻塞I/O多路复用机制I/O操作的阻塞:当用户线程发出IO请求之后,内核会去查看数据是否就绪,如果没有就绪就会等.

2020-09-05 13:24:35 479

原创 PriorityQueue 略解

PriorityQueue 一个基于优先级的无界优先级队列。优先级队列的元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator 进行排序,可自定义排序方法。该队列不允许使用 null 元素也不允许插入不可比较的对象。(没有实现Comparable接口的对象)。package com.example.demo;import com.example.demo.pojo.User;import java.util.Comparator;import java.util.Pri.

2020-09-04 16:03:35 184

原创 Mybatis choose when, otherwise 标签

choose标签是按顺序判断其内部when标签中的test条件出否成立,如果有一个成立,则 choose 结束。当 choose 中所有 when 的条件都不满则时,则执行 otherwise 中的sql。 <select id="isUserLiked" resultType="java.lang.Integer"> select count(1) from community_likes <where&gt

2020-09-03 15:41:26 151 2

原创 mongodb 的分片策略优劣 略解

1.使用hash分片。分布比较均匀,不会出现某一个片,某一个片比其他片数据大量高于的情况。2.范围分片。根据一写特殊项目需要,如年龄段,查询时,用hash分片,会散列在各个片里面,如果是分片时,按照年龄段分片,查询要求也在该年龄段内,就不回取搜索所有的片,再整合一个结果给你, 只会取响应的片读取,节约了响应时间,减小服务器压力。3.自定义分片。同2.根据业务不同,可节约查询时间,减小服务器压力。...

2020-09-02 14:40:29 1363

原创 Java中将List集合对象转换成json字符串的两种方法

1.使用Gson类中的toJson()方法 Gson gson = new Gson(); String listToJsonString = gson.toJson(list);2.使用JSONArray json=JSONArray.fromobject(list);在调用json.toString()方法转换成字符串JSONArray jsa = JSONArray.fromObject(list);String result = jsa.toString();...

2020-09-02 11:17:24 15687 1

原创 mongoDB主节点选举规则

arbiter仲裁者的priority为0。

2020-09-01 19:56:43 483

原创 List排序的方法。

@Data@AllArgsConstructorpublic class User implements Serializable { private static final long serialVersionUID = -1078433404507796595L; private Integer id ; private String userName ; private String password ;}Collections.sort,Java 8.

2020-09-01 18:23:51 191

空空如也

空空如也

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

TA关注的人

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