- 博客(34)
- 收藏
- 关注
原创 秒杀---使用乐观锁实现或cache实现
概念秒杀系统的特点新品上市 价格低廉市场造势 大幅推广指定时间开售瞬时售空读多写少秒杀系统难点高并发、负载压力大竞争资源是有限的对其他业务的影响提防“黄牛党”秒杀系统应用场景商品抢购群红包优惠卷领取抢火车票在线预约技术维度对秒杀系统的分析 —— 架构原则技术维度对秒杀系统的分析 —— 优化技术业务维度对秒杀系统的分析 修改库存放在订单支付的前面位置 体现了企业的良
2017-09-12 13:58:16
4951
原创 事件驱动
事件驱动模型事件驱动模型要素(what)事件事件源(生产者)注册中心(事件通道)侦听器(接受者)事件驱动模型示意图 观察者模式观察者设计模式涉及到两种角色:主题(Subject )和观察者(Observer ) 事件驱动编程应用场景js页面开发 Zookeeper开发GUI开发(awt/swing) Spring开发事件驱动编程优点无耦合的关联:事件发布者和事件订阅者预
2017-09-08 17:00:54
530
原创 手写数据库连接池
概述不使用连接池的缺点:tcp连接三次握手消耗时间消耗内存严重使用池化思想, 达到连接的可复用, 节省时间和资源代码连接池接口package jdbcPool;public interface IPool { //返回我们自己封装的连接对象 PooledConnection getConnection(); void createConnections(int coun
2017-09-06 11:39:49
714
原创 MySQL性能优化之索引优化
什么是优化?合理安排资源、调整系统参数使MySQL运行更快、更节省资源。优化是多方面的,包括查询优化、更新优化、服务器优化等很多方面。没有特定方式特定的方法,总是要具体场景,具体分析,但是我们要掌握基本的优化手段。原则:减少系统瓶颈,减少资源占用,增加系统的反应速度。数据库性能参数我们可以通过SHOW STATUS语句查看MySQL数据库的性能参数 SHOW STATUS LIKE ‘v
2017-08-30 14:30:59
496
原创 观察者模式
案例宝宝睡觉, 爸爸在一旁观察, 宝宝醒来后, 爸爸给宝宝喂食代码(第一版)package design.observer;/** * @ClassName: Child * @Description:小孩类 */public class Child implements Runnable { // 是否醒来 默认是睡着的 private Boolean wakeup
2017-08-29 14:27:52
318
原创 手写SpringMVC框架
springmvc在项目中的作用处理请求,把请求分发到不同的类和方法中ioc 依赖注入,创建实例。配置的方式和annotation的方式,今天实现annotation的方式aop 动态代理,事物控制,让程序员只专注于写自己的业务代码步骤定义包结构com.annotationcom.controllercom.servicecom.service.implcom.s
2017-08-28 16:38:07
427
原创 redis主从
关系型数据库和NOSQL的比较关系型数据库的优势保持数据的一致性(事务处理)可以进行Join等复杂查询其中能够保持数据的一致性是关系型数据库的最大优势关系型数据库的不足大量数据的写入处理需要等待为有数据更新的表做索引或表结构(schema)变更, 共享锁–读锁,排他锁–写锁需要等待字段不固定时应用对简单查询需要快速返回结果的处理当数据量过大时候需要进行数据库的水平切分: 数据库的分
2017-08-28 11:06:39
228
原创 SpringAOP神秘面纱之动态代理
1、写代码的原则 开闭原则 开闭原则就是说对扩展开放,对修改关闭。 2、静态代理 以找对象为例子讲解静态代理 张三写代码、玩游戏没空找对象 张三他爹着急,年龄大了,想抱孙子了。张三他爹拿着张三的照片(持有张三的引用)给张三满世界找对象 张三他爹就是张三的一个代理 1、关键
2017-08-25 13:37:57
253
原创 MySQL学习随记---触发器
概念(1) 触发器是一个特殊的存储过程, 他是MySQL在insert, update, delete 的时候自动执行的代码块(2) 触发器必须定义在特定的表上(3)自动执行, 不能直接调用作用: 监视某种情况并触发某种操作触发器的思路:监视 it_order 表, 如果 it_order 里面有增删改查的操作, 则自动触发 it_goods 里面增删改的操
2017-08-24 18:31:27
392
原创 阻塞队列ArrayBlockingQueue
队列包含固定长度队列和不固定长度队列ArrayBlockingQueue固定长度的阻塞队列 只有put()和take()方法才具有阻塞功能
2017-08-23 15:22:29
211
原创 Exchanger
用于实现两个人(线程)之间的数据交换, 每个人(线程)在完成一定的事务后想与对方交换数据, 第一个先拿出数据的人(线程)将一直等待第二个人(线程)拿着数据到来时, 才能交换数据, 例如毒品交易—哈哈
2017-08-23 14:51:41
181
原创 CyclicBarrier和CountDownLatch
CyclicBarrierCyclicBarrier初始化时规定一个数目,然后计算调用了CyclicBarrier.await()进入等待的线程数。当线程数达到了这个数目时,所有进入等待状态的线程被唤醒并继续。CyclicBarrier就象它名字的意思一样,可看成是个障碍,所有的线程必须到齐后才能一起通过这个障碍。CyclicBarrier初始时还可带一个Runnable的参数,此Run
2017-08-22 18:59:45
189
原创 Semaphore实现信号灯
Semaphore可以维护当前访问自身的线程个数, 并提供了同步机制. 使用Semaphore可以控制同时访问资源的线程个数, 例如实现一个文件允许的并发访问数Semaphore实现的功能就类似厕所有5个坑, 假如有设个人要上厕所, 那么同时能有多少个人去上厕所呢? 同时只能有5个人能够占用, 当5个人中的任何一个人离开后, 其中在等待的另外五个人中又有一个可以占用了. 另外等待的5个人中可
2017-08-22 17:01:57
258
原创 java性能优化
性能优化1. 减少gc的压力, gc 线程是一个优先级比较低的线程, 他是一个守护线程(服务于主线程), 回收我们的堆内存2. 尽量避免我们的new操作总结避免对象创建和GC 对象使用完成后进行置空1、String, StringBuffer, StringBuilderStringString a = new String("a");String a1 = "
2017-08-19 14:23:00
211
原创 HashMap那些事
1. 什么是hash它是一个任意长度的二进制值通过一个映射关系(哈希算法---相当于大学里面的学号的一个映射规则)转换成一个固定长度的二进制值(哈希值---相当于我们大学里面的学号)任意长度的二进制值 和 固定长度的二进制值 是一个一一对应关系固定长度的二进制值就相当于一个任意长度的二进制值的一个摘要固定长度的二进制值 相当于一个关键字 key真正有效的数据 就是这个学
2017-08-19 11:24:09
202
转载 通过注解实现通用导出Excel
http://blog.youkuaiyun.com/u013132051/article/details/64921585
2017-08-15 13:51:03
466
原创 Lock&Condition实现线程同步通信
Lock比传统线程模型中的synchronized方式更加面向对象, 与生活中的锁类似, 锁本身应该是一个对象. 两个线程执行的代码片段要实现同步互斥的效果, 谈么必须用一个Lock对象.锁是在代表要操作的资源的类的内部方法中, 而不是线程代码中!ReentrantLock(重入锁)在需要进行同步的代码部分加上锁,但不要忘记最后一定要释放锁,不然会造成锁永远无法释放,其它线程永远进
2017-08-04 18:41:37
313
原创 Callable和Future的应用
Future取得的结果类型和Callable返回的结果类型必须一致, 这是通过泛型来实现的Callable要采用ExecutorService的submit方法提交, 返回的future对象可以取消任务代码package mutithread.threadpool;import java.util.concurrent.Callable;import java.util.co
2017-08-04 17:38:28
254
原创 线程池
线程池的概念与Executors类的应用创建固定大小的线程池创建缓存线程池创建单一线程池(线程死掉会重新启动)代码package mutithread.threadpool;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class T
2017-08-04 16:45:36
295
原创 多个线程访问共享对象和数据的方式
如果每个线程执行的代码相同, 可以使用同一个Runnable对象, 这个Runnable对象中有那个共享数据, 例如:卖票系统(只考虑卖出)如果每个线程执行的代码不同, 这时候需要用不同的Runnable对象, 有如下两种方式来实现这些Runnable对象之间的共享数据:(1) 将共享数据封装在另外一个对象中, 然后这个对象逐一传递给各个Runnable对象. 每个线程对共享数据的操作方法
2017-08-04 14:07:08
280
原创 ThreadLocal实现线程范围的共享变量
线程范围内共享数据的示意图ThreadLocal的作用和目的: 用于实现线程内的数据共享, 即对于相同的程序代码, 多个模块在同一线程中运行时要共享一份数据, 而在另外线程中运行时又共享另外一份数据每个线程调用全局ThreadLocal对象的set方法, 就相当于往其内部的map中增加一条记录, key分别是各自的线程, value是各自的set方法传递进去的值. 在线程结
2017-08-04 09:56:48
298
原创 线程的互斥与同步通信
synchronized的使用和wait与notify实现线程间的通信案例: 子线程循环10次, 主线程循环5次, 两者交替运行50次代码package thread;public class TraditionalThreadCommunication { public static void main(String[] args) { final Bussine
2017-08-03 18:22:38
235
原创 传统线程技术和定时器的应用
创建线程的两种传统方式代码package thread;public class TraditionalThread { public static void main(String[] args) { // 第一种 继承 Thread类 Thread thread = new Thread() { @Override public void run() {
2017-08-03 15:56:28
327
原创 MySQL学习随记---存储函数
概念自定义函数他跟js中的函数几乎一样: 需要先定义, 然后调用(使用). 只是规定这个函数必须要返回数据----要有返回值(1)定义语法create function 函数名(参数) returns 返回值类型begin //代码end特别注意第三点!!!!!(2)调用跟系统函数调用一样: 任何需要数据的位置, 都可以调用该函
2017-08-03 11:38:30
270
原创 MySQL学习随记---存储过程
存储过程定义概念类似于函数, 就是把一段代码封装起来, 当要执行这一段代码的时候, 可以通过调用该存储过程来实现, 在封装的语句体里面, 可以使用 if/case, case, while 等控制结构. 可以进行sql编程.查看现有的存储过程: show procedure status存储过程的优点创建存储过程create procedur
2017-08-02 18:51:58
339
原创 java设计模式之---工厂模式在开发中的运用
问题写一个简单的计算器分析如果使用完全面向过程设计, 那么缺少代码重用, 不合理应该采用面向对象的设计思想代码采用工厂方法模式工厂public interface OperationFactory { public Operation getOperation();}public class AddOperationFactory implements
2017-07-27 18:39:12
353
原创 java设计模式之---抽象工厂模式
概念抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的. 抽象工厂模式可以向客户端提供一个接口, 使得客户端不必指定产品的具体类型的情况下, 能够创建多个产品族的产品对象产品族和产品等级结构图代码public interface Fruit { void get();}public abstract class Apple implements Fruit
2017-07-27 09:36:19
269
原创 java设计模式之---工厂方法模式
概念工厂方法模式同样属于类的创建模式又被称为多态工厂模式. 工厂方法模式的意义是定义一个创建产品对象的工厂接口, 将实际创建工作推迟到工厂子类当中. 核心工厂类不再负责产品的创建, 这样核心类成为一个抽象工厂角色, 仅负责具体工厂子类必须实现的接口, 这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品结构抽象工厂(Creator)角色: 工厂
2017-07-26 18:25:29
212
原创 MySQL学习随记---视图和SQL编程的 if case 和 循环
视图定义视图只是一个语句规则语法CREATE VIEW view_name ASSELECT column_name(s)FROM table_nameWHERE condition作用(1) 可以简化查询(2) 可以进行权限控制视图与表关系视图是表的查询结果, 自然表的数据变了, 影响视图结果(1) 视图的数据与表的数据一一对应时, 可以修
2017-07-21 14:37:55
2032
1
原创 java设计模式之---简单工厂模式
概念简单工厂模式属于类的创建型模式, 又叫做静态工厂方法模式. 通过专门定义一个类来负责创建其他类的实例, 被创建的实例通常都具有共同的父类结构模式中包含的角色及其职责: 工厂(Creator)角色: 简单工厂模式的核心, 他负责实现创建所有实例的内部逻辑. 工厂类可以被外界直接调用, 创建所需要的产品对象抽象(Product)角色: 简单工厂模式所创建的所有对象的父类, 他负
2017-07-21 13:43:01
194
原创 java设计模式之---策略模式
概念Strategy模式也叫策略模式是行为模式之一, 他对一系列算法加以封装, 为所有的算法定义一个抽象的算法接口, 并通过继承该抽象算法接口对所有的算法加以封装和实现,具体的算法选择交由客户端决定(策略). Strategy模式主要用来平滑的处理算法的切换结构Strategy: 策略(算法)的抽象ConcreteStrategy: 各种策略(算法)的实现Conte
2017-07-20 18:37:45
216
原创 java设计模式之---备忘录模式
概念 Memento模式也叫作备忘录模式, 是行为模式之一, 他的作用是保存对象的内部状态, 并在需要的时候(undo/rollback)恢复对象以前的状态(就是保存以前的记录 以便于随时恢复到这个状态) 最原始的实现 是在客户端代码中进行 保存状态 修改 回滚和还原 非常不合理备忘录模式结构图 Orginator(原生者): 需要被保存状态以便恢复的对象Memento(备忘录): 该对象由Org
2017-07-20 18:02:14
190
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人