java
文章平均质量分 94
苏云南雁
喜爱技术,热爱学习,终身学习者
展开
-
spark技术特点
spark技术要点分析,借鉴意义思考原创 2022-12-07 12:36:38 · 1279 阅读 · 0 评论 -
java并发5——synchronized和volatile关键字
一,synchronized以虚拟的叫号系统为例采用并发程序叫号时会出现跳号、重号、超过最大值等现象。参照JMM模型,https://blog.csdn.net/qq_22059611/article/details/95211836可知由于工作空间数据对其他线程不可见、且叫好操作不为原子操作,所以会产生这类问题。为了解决这个问题,引入了锁的概念,在一个线程对共享数据进行操...原创 2019-12-03 16:51:50 · 223 阅读 · 0 评论 -
设计模式笔记24——职责链模式(responsibilitychain)
学校OA系统的采购审批项目: 需求是1) 采购员采购教学器材2) 如果金额 小于等于5000, 由教学主任审批 (0<=x<=5000)3) 如果金额 小于等于10000, 由院长审批 (5000<x<=10000)4) 如果金额 小于等于30000, 由副校长审批 (10000<x<=30000)5) 如果金额 超过30000以上,有校长审...原创 2019-11-29 17:52:34 · 313 阅读 · 0 评论 -
设计模式笔记23——策略模式(strategy)
编写鸭子项目,具体要求如下:1) 有各种鸭子(比如 野鸭、北京鸭、水鸭等, 鸭子有各种行为,比如 叫、飞行等)2) 显示鸭子的信息传统方案解:所有鸭子集成自 Duck传统的方式实现的问题分析和解决方案1) 其它鸭子,都继承了Duck类,所以fly让所有子类都会飞了,这是不正确的2) 上面说的1 的问题,其实是继承带来的问题: 对类的局部改动,尤其...原创 2019-11-29 17:41:42 · 298 阅读 · 0 评论 -
设计模式笔记22——状态模式(state)
APP抽奖活动问题请编写程序完成APP抽奖活动 具体要求如下:1) 假如每参加一次这个活动要扣除用户50积分,中奖概率是10%2) 奖品数量固定,抽完就不能抽奖3) 活动有四个状态: 可以抽奖、不能抽奖、发放奖品和奖品领完4) 活动的四个状态转换关系图基本介绍1) 状态模式(State Pattern):它主要用来解决对象在多种状态转换时,需要对外输出不同的...原创 2019-11-29 10:46:05 · 173 阅读 · 0 评论 -
设计模式笔记21——解释器模式(interpreter)
四则运算问题通过解释器模式来实现四则运算,如计算a+b-c的值,具体要求1) 先输入表达式的形式,比如 a+b+c-d+e, 要求表达式的字母不能重复2) 在分别输入a ,b, c, d, e 的值3) 最后求出结果:传统方案解决四则运算问题分析1) 编写一个方法,接收表达式的形式,然后根据用户输入的数值进行解析,得到结果2) 问题分析:如果加入新的运算符,...原创 2019-11-29 10:13:29 · 530 阅读 · 0 评论 -
设计模式笔记20——备忘录模式(memento)
游戏角色状态恢复问题游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力), 当大战Boss后攻击力和防御力下降, 从备忘录对象恢复到大战前的状态传统的方式的问题分析1) 一个对象,就对应一个保存对象状态的对象, 这样当我们游戏的对象很多时,不利于管理,开销也很大.2) 传统的方式是简单地做备份, new出另外一个对象出来,再把需要备份的数据放到这个新对象...原创 2019-11-28 17:29:50 · 180 阅读 · 0 评论 -
设计模式笔记19——中介者模式(mediator)
智能家庭项目:1) 智能家庭包括各种设备,闹钟、咖啡机、电视机、窗帘 等2) 主人要看电视时,各个设备可以协同工作,自动完成看电视的准备工作,比如流程为:闹铃响起->咖啡机开始做咖啡->窗帘自动落下->电视机开始播放传统的方式的问题分析1) 当各电器对象有多种状态改变时,相互之间的调用关系会比较复杂2) 各个电器对象彼此联系,你中有我,我中有你,不...原创 2019-11-28 16:52:58 · 276 阅读 · 0 评论 -
设计模式笔记18——观察者模式(observer)
天气预报项目需求,具体要求如下:1) 气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去(比如发布到自己的网站或第三方)。2) 需要设计开放型API,便于其他第三方也能接入气象站获取数据。3) 提供温度、气压和湿度的接口4) 测量数据更新时,要能实时的通知给第三方天气预报设计方案1-普通方案WeatherData类通过对气象站项目的分析,我们可以初步...原创 2019-11-27 10:01:00 · 234 阅读 · 0 评论 -
设计模式笔记17——迭代器模式(iterator)
编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。基本介绍1) 迭代器模式(Iterator Pattern)是常用的设计模式,属于行为型模式2) 如果我们的集合元素是用不同的方式实现的,有数组,还有java的集合类,或者还有其他方式,当客户端要遍历这些集合元素的时候就要使用多种遍历方式,而且还会暴露元素的内部结构...原创 2019-11-27 09:20:19 · 253 阅读 · 0 评论 -
设计模式笔记16——访问者模式(visitor)
完成测评系统需求1) 将观众分为男人和女人,对歌手进行测评,当看完某个歌手表演后,得到他们对该歌手不同的评价(评价 有不同的种类,比如 成功、失败 等)传统方式的问题分析1) 如果系统比较小,还是ok的,但是考虑系统增加越来越多新的功能时,对代码改动较大,违反了ocp原则, 不利于维护2) 扩展性不好,比如 增加了 新的人员类型,或者管理方法,都不好做3) 引出我们...原创 2019-11-26 10:25:29 · 187 阅读 · 0 评论 -
设计模式笔记15——命令模式(command)
智能生活项目需求1) 我们买了一套智能家电,有照明灯、风扇、冰箱、洗衣机,我们只要在手机上安装app就可以控制对这些家电工作。2) 这些智能家电来自不同的厂家,我们不想针对每一种家电都安装一个App,分别控制,我们希望只要一个app就可以控制全部智能家电。3) 要实现一个app控制所有智能家电的需要,则每个智能家电厂家都要提供一个统一的接口给app调用,这时 就可以考虑使用命令模式。4) ...原创 2019-11-26 09:52:14 · 360 阅读 · 0 评论 -
设计模式笔记14——模板方法(template)
豆浆制作问题编写制作豆浆的程序,说明如下:1) 制作豆浆的流程 选材--->添加配料--->浸泡--->放到豆浆机打碎2) 通过添加不同的配料,可以制作出不同口味的豆浆3) 选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的4) 请使用 模板方法模式 完成 (说明:因为模板方法模式,比较简单,很容易就想到这个方案,因此就直接使用,不再使用传统...原创 2019-11-26 09:21:24 · 283 阅读 · 0 评论 -
设计模式笔记13——代理模式(proxy)
代理模式(Proxy)1) 代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。2) 被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象3) 代理模式有不同的形式, 主要有三种 静态代理、动态代理 (JDK代理、接口代理)和 Cglib代理 (可以在内存...原创 2019-11-25 17:01:27 · 202 阅读 · 0 评论 -
设计模式笔记12——享元模式(Flyweight)
展示网站项目需求小型的外包项目,给客户A做一个产品展示网站,客户A的朋友感觉效果不错,也希望做这样的产品展示网站,但是要求都有些不同:1) 有客户要求以新闻的形式发布2) 有客户人要求以博客的形式发布3) 有客户希望以微信公众号的形式发布传统方案解决网站展现项目1) 直接复制粘贴一份,然后根据客户不同要求,进行定制修改2) 给每个网站租用一个空间3) 方案设计...原创 2019-11-25 16:31:13 · 179 阅读 · 0 评论 -
设计模式11——外观模式(facade)
外观模式基本介绍1) 外观模式(Facade),也叫“过程模式:外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用2) 外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节外观模式的原理类图原理类图的说明(外观模式的角色)1) 外观类(Fac...原创 2019-11-25 10:43:02 · 205 阅读 · 0 评论 -
设计模式10——组合模式(composite)
看一个学校院系展示需求编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。如图:传统解决方案——以继承实现层级关系1,传统方案解决学校院系展示存在的问题分析1) 将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的2) 实际上我们的要求是 :在一个页面中展示出学校的院系组...原创 2019-11-24 11:26:47 · 282 阅读 · 0 评论 -
设计模式9——装饰者模式(decorator)
星巴克咖啡订单项目(咖啡馆):1) 咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡)2) 调料:Milk、Soy(豆浆)、Chocolate3) 要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便4) 使用OO的来计算不同种类咖啡的费用: 客户可以点单品咖啡,也可以单品咖啡+调料组合。...原创 2019-11-21 16:05:42 · 152 阅读 · 0 评论 -
设计模式8——桥接模式(bridge)
现在对不同手机类型的不同品牌实现操作编程(比如:开机、关机、上网,打电话等),如图:传统方案解决手机使用问题(类图):1,传统方案解决手机操作问题分析1) 扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各个品牌手机的类,同样如果我们增加一个手机品牌,也要在各个手机样式类下增加。2) 违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这...原创 2019-11-21 11:08:33 · 379 阅读 · 0 评论 -
设计模式笔记7——适配器模式(adapter)
适配器模式就像转接口1,适配器模式基本介绍1) 适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)2) 适配器模式属于结构型模式3) 主要分为三类:类适配器模式、对象适配器模式、接口适配器模式2,适配器模式工作原理1...原创 2019-11-19 08:59:25 · 208 阅读 · 0 评论 -
设计模式6——建造者模式(builder)
1,盖房项目需求盖房项目需求1) 需要建房子:这一过程为打桩、砌墙、封顶2) 房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的.3) 请编写程序,完成需求.传统方式解决盖房需求public abstract class AbstractHouse { //打地基 public abstract void bui...原创 2019-11-18 10:30:14 · 663 阅读 · 0 评论 -
设计模式5——原型模式(prototype)
1,克隆羊问题现在有一只羊tom,姓名为: tom, 年龄为:1,颜色为:白色,请编写程序创建和tom羊 属性完全相同的10只羊。1.1传统方式解决克隆羊问题对于Sheep.java:public class Sheep { private String name; private int age; private String color; publ...原创 2019-11-13 11:30:55 · 325 阅读 · 0 评论 -
设计模式笔记2——工厂模式及其应用
1,简单工厂模式简单工厂模式:由一个类封装实例化对象的行为解决问题:一旦要根据类别进行创建对象,需要在调用的地方修改逻辑,违反ocp原则,且修改的地方会很多。简单工厂模式又叫静态工厂模式。简单工厂模式类图:实现起来大概是这样:public class EasyFactory {// 简单工厂,根据字符串创建相应的对象public static Ope...原创 2019-11-12 10:25:12 · 180 阅读 · 0 评论 -
spring boot笔记6——spring boot整合redis、集群设置
目录一、spring boot整合redis1,添加依赖2、修改application.properties3,配置缓存到redis中二、集群设置1,spring.properties中加入集群地址2,创建Redis配置类spring boot整合redis一、spring boot整合redis1,添加依赖spring boot要整合redis第一步当...原创 2018-10-10 11:28:52 · 5136 阅读 · 0 评论 -
java并发3——CPU多级缓存——乱序执行优化
处理器为提高运算速度而做出违背代码原有顺序的优化在单核时代这种优化是没有问题的,但是在多核时代,这种优化可能会存在问题。...原创 2019-07-09 17:04:43 · 336 阅读 · 0 评论 -
java并发2——CPU多级缓存——缓存一致性(MESI)
用于保证多个CPU cache之间缓存共享数据的一致。如下图所示(M表示被修改,E是独享状态,S表示共享状态,I表示无效状态):四种状态说明:M表示被该缓存行只被缓存在改CPU的缓存中并且是被修改过的,因此它与主存间的数据是不一致的,该缓存行的内存未来是要被写回主存的;E是独享状态,它的缓存行只被共享在该CPU中,它的状态是和主存中的一致的,当有其他CPU读取该CPU时,变成共享状态...原创 2019-06-25 15:52:17 · 338 阅读 · 0 评论 -
java并发1——CPU多级缓存
为什么需要CPU cache:CPU的频率太快了,快到主存跟不上,这样在处理器时钟周期内,CPU常常需要等待主存,浪费资源。所以cache的出现,是为了缓解CPU和内存之间速度的不匹配问题(结构:cpu——>cache——>memory)CPU cache有什么意义:(1)时间局部性:如果某个数据被访问,那么在不久的将来它很可能被再次访问;(2)...原创 2019-06-25 15:27:52 · 173 阅读 · 0 评论 -
java编程思想读书笔记5——jvm
先上图JVM----------------java virtual machine.sandbox栈区堆区方法区dll(windows)-----------dynamic link library,动态链接库函数库 + 资源.so(linux)-------------shared object,共享对象...原创 2019-04-12 13:54:14 · 239 阅读 · 0 评论 -
java编程思想读书笔记4——network
十八、网络tcp协议三次握手:protocal------------规则。数据格式。http:(应用)-------------hyper text transfer protocal超文本传输协议。ftp(应用层)-------------file transfer protocal.TCP------------tran...原创 2019-04-12 13:51:21 · 222 阅读 · 0 评论 -
java编程思想读书笔记3——jdbc
JDBC---------------java database connection,java数据库连接。MySQL-------------------1.卸载mysql...2.安装MySQL...custom安装->自己安装目录(不要中文和空格).配置向导.->detail configuration(默认)->Dev...原创 2019-04-12 13:49:04 · 299 阅读 · 0 评论 -
java并发4——Java内存模型(Java Memory Model,JMM)
要讲java内存模型(Java Memory Model, JMM),先需要从几个基本概念讲起。1,程序、进程与线程程序指一段代码,是静态的概念;而进程指运行中的代码,是动态的概念;而线程相对而言概念上没那么好解释,按照执行效果来说就是进程的小弟,拥有进程资源的小一号独立运行单元。为什么要讲这3个概念?因为并发针对的就是这个小弟,线程。2,JVM与线程JVM与线程有什么关...原创 2019-07-09 17:07:32 · 179 阅读 · 0 评论 -
保证每段代码只会执行一次的例子
public class AtomicExample6 { private static AtomicBoolean isHappened = new AtomicBoolean(false); // 请求总数 public static int clientTotal = 5000; // 同时并发执行的线程数 public static int t...原创 2019-07-18 15:27:12 · 262 阅读 · 0 评论 -
解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 问题
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 这个问题是mybatis的dao层接口和mapper.xml文件不匹配,仔细找找他们的名称是否一致,就搞定了。我找到的问题是:mapperLocations: classpath*:mapper/*.xmltypeAliases...原创 2019-07-16 14:58:17 · 499 阅读 · 0 评论 -
mybatis开发1
创建mybatis工程配置mybatis的运行环境,数据源,事务等(sqlMapConfig.xml) 创建PO类 创建mapper映射文件、接口(名称一致,在同一个目录下) 在sqlMapConfig.xml中加载mapper映射文件 编写程序#{}: 占位符 参数类型:简单类型 pojohashmap如果是简单类型,可以写成value如果接收pojo对象值...原创 2019-07-16 15:39:18 · 106 阅读 · 0 评论 -
mybatis开发2
动态sql通过一些表达式的判断等,对sql语句进行灵活的拼接,组装Sql片段定义sql片段引用sql片段foreachSELECT * FROM USER WHERE id = 1 OR id = 2;SELECT * FROM USER WHERE id IN (1,2);List ids定义定义接口方法测试方法注意:...原创 2019-07-16 15:40:21 · 128 阅读 · 0 评论 -
mybatis开发3
查询缓存缓存:Mybatis 默认有查询缓存,提供 一级缓存和二级缓存 减轻数据库压力,提高系统性能二级缓存禁用二级缓存:用于每次都需要查询最新数据的场景Ehcache分布式缓存框架Mybaits自身无法实现分布式缓存,引用其他缓存框...原创 2019-07-16 15:42:00 · 120 阅读 · 0 评论 -
java并发编程线程安全——原子性1
一、线程安全性线程安全性:定义——当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些进程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。原子性:提供了互斥访问,同一时刻只能有一个线程来对它进行操作。可见性:一个线程对主内存的修改可以及时的被其他线程观察到。有序性:一个线程观察其他线程中的指令执...原创 2019-07-17 16:16:02 · 333 阅读 · 0 评论 -
初探gradle
之前也有听说过gradle,现在来用用。一、安装gradlegradle的安装很简单,先在官网下载一个版本:https://gradle.org/install/找到相应的发型版本,选一个版本,最新的:只要有二进制文件就可以运行了。然后把gradle下的bin目录加入到path变量,既算安装完成:二、采用gradle构建项目1,搭建gradle项目先从h...原创 2019-08-01 10:58:39 · 141 阅读 · 0 评论 -
Cannot access nexus (http://maven.aliyun.com/nexus/content/groups/public) in offline mode
最近发现了一个困扰已久的问题,就是下不下来jar包!这个问题实际就是改这个设置即可:把勾去掉就可以了!这个offline mode实际上就是离线模式,总之根据下载包的情况,就是说它不会联网去获取jar包!...原创 2019-04-11 09:34:31 · 13722 阅读 · 2 评论 -
java编程思想读书笔记2
十三、内部类内部类,就是定义在类中的类。这种机制老实说还没在实际开发中用到~~所谓嵌套类,就是static的内部类。当然它就不能访问外围对象了。这一系列遇到了再总结到一起。嵌套类,可以用作测试接口也可以有内部类。内部类吸引人的原因:内部类可以单独继承一些接口,这种方式可以完善“多继承”(多实现)。感觉好像没什么用,whatever,遇到再看看。有一种情况,比如接口是在抽象类中,这种...原创 2019-03-31 01:26:24 · 150 阅读 · 0 评论