06 2019 档案

摘要:https://nicky-chen.github.io/2018/05/06/strategy/ 阅读全文
posted @ 2019-06-28 21:12 Chris,Cai 阅读(86) 评论(0) 推荐(0) 编辑
摘要:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象,在java 中就是clone https://www.cnblogs.com/pickKnow/p/11104193.html 阅读全文
posted @ 2019-06-28 20:20 Chris,Cai 阅读(119) 评论(0) 推荐(0) 编辑
摘要:浅复制: 测试: 深复制实现方式一:引用类型也分别clone 深复制实现方式二: 对象实现Serializable 接口,对象里面的对象也必须实现Serializable 阅读全文
posted @ 2019-06-28 18:10 Chris,Cai 阅读(293) 评论(0) 推荐(0) 编辑
摘要:适配器模式(英语:adapter pattern) 有时候也称包装样式或者包装(wrapper)。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。 适配器案例 我们就拿日本电饭煲的例子进行说明,日本电饭煲电源接口标 阅读全文
posted @ 2019-06-28 13:42 Chris,Cai 阅读(196) 评论(0) 推荐(0) 编辑
摘要:外观模式(Facade Pattern)门面模式 隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。 这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。(就是封装) 阅读全文
posted @ 2019-06-28 12:56 Chris,Cai 阅读(132) 评论(0) 推荐(0) 编辑
摘要:模板方法模式: 定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的重复代码全部在父类里面,不同业务的,抽取给子类进行实现。抽取过程 抽象方法。 父类里面是一整套业务流程模板,针对差异化的地方,可以用抽象方法封装,让不同的子类去实现 例子: 阅读全文
posted @ 2019-06-28 10:25 Chris,Cai 阅读(341) 评论(0) 推荐(0) 编辑
摘要:建造者模式:是将一个复杂的对象的分开创建和组装,使得同样的构建过程可以创建不同的表示。 工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到的。 建造者 阅读全文
posted @ 2019-06-27 18:44 Chris,Cai 阅读(124) 评论(0) 推荐(0) 编辑
摘要:1,代理模式 通过代理控制对象的访问,可以详细访问某个对象的方法,在这个方法调用处理,或调用后处理 例如:A和B是朋友,B和C是朋友,A想通过B 认识C,并且买了花,买了礼物,委托B转送给C,这里B就是A的代理,A就是B代理对象 A和B都得完成送花,送礼物的动作,A 是实际的发起者,B是代理完成者 阅读全文
posted @ 2019-06-27 13:34 Chris,Cai 阅读(305) 评论(0) 推荐(0) 编辑
摘要:1,工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。 利用工厂模式可以降低程序的耦合性,为后期的维护修改提供了很大的便利。 将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦 简单工厂: 简单工厂模式相当于是一个工厂中有各种产品,创建在一个类中,客户无 阅读全文
posted @ 2019-06-26 14:02 Chris,Cai 阅读(211) 评论(0) 推荐(0) 编辑
摘要:http://ifeve.com/disruptor/ 阅读全文
posted @ 2019-06-25 19:54 Chris,Cai 阅读(1017) 评论(0) 推荐(0) 编辑
摘要:public class App3 { public static void main(String[] args) { Task task = new Task(); Thread t1 = new Thread(task); Thread t2 = new Thread(task); t1.st 阅读全文
posted @ 2019-06-25 13:59 Chris,Cai 阅读(187) 评论(0) 推荐(0) 编辑
摘要:1 ,重入锁,也叫做递归锁。 指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。 ReentrantLock 和synchronized 都是重入锁,ReentrantLock 是轻量级锁,synchronized是重量级锁 也可以用ReentrantLock 来锁 阅读全文
posted @ 2019-06-25 13:16 Chris,Cai 阅读(173) 评论(0) 推荐(0) 编辑
摘要:多线程不管是extends Thread 还是 implements Runnable 都是要重写run 方法来实现,这两种方式子线程都没有返回值。 如果要实现主线程对子线程的监听,让子线程有返回值,可以用implememts Callable<T> 方式: Future 模式的核心:去除了主函数的 阅读全文
posted @ 2019-06-24 19:18 Chris,Cai 阅读(1028) 评论(0) 推荐(0) 编辑
摘要:什么是线程池Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即 阅读全文
posted @ 2019-06-24 16:17 Chris,Cai 阅读(203) 评论(0) 推荐(0) 编辑
摘要:队列:主要遵循先进先出的原则 阻塞式队列: 入列(存元素进队列)阻塞式队列,如果超出队列的总数,这时候会进行等待(阻塞) 出列(从队列获取元素)阻塞式队列,如果队列为空的情况下,这时候会进行等待(阻塞) 非阻塞队列:ConcurrentLinkedQueue 阻塞式队列:BlockingQueue 阅读全文
posted @ 2019-06-24 09:44 Chris,Cai 阅读(110) 评论(0) 推荐(0) 编辑
摘要:1,接口的方法没有方法体(JDK1.8之前),JDK1.8之后也会有默认的方法体,而抽象类可以有非抽象的方法,有方法体(非抽象方法) 2,接口的方法的访问修饰符都是public,抽象类的抽象方法可以有public、protected和default这些修饰符 3,抽象类中可以有普通成员变量,接口中没 阅读全文
posted @ 2019-06-20 15:47 Chris,Cai 阅读(140) 评论(0) 推荐(0) 编辑
摘要:1,String 是不可变类 immutable 不可变类:所谓的不可变类是指这个类的实例一旦创建完成后,就不能改变其成员变量值。如JDK内部自带的很多不可变类:八大包装类和String等。 可变类:相对于不可变类,可变类创建实例后可以改变其成员变量值,开发中创建的大部分类都属于可变类。 以Stri 阅读全文
posted @ 2019-06-20 13:33 Chris,Cai 阅读(171) 评论(0) 推荐(0) 编辑
摘要:wait: 必须暂定当前正在执行的线程,并释放资源锁,让其他线程可以有机会运行 notify/notifyall: 唤醒因锁池中的线程,使之运行 对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类中的。 sleep()方法导致了程序暂停执 阅读全文
posted @ 2019-06-19 15:23 Chris,Cai 阅读(142) 评论(0) 推荐(0) 编辑
摘要:重排序 数据依赖性 如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型: 名称 代码示例 说明 写后读 a = 1;b = a; 写一个变量之后,再读这个位置。 写后写 a = 1;a = 2; 写一个变量之后,再写这个变量。 读后写 阅读全文
posted @ 2019-06-14 16:00 Chris,Cai 阅读(190) 评论(0) 推荐(0) 编辑
摘要:1,可见性也就是说一旦某个线程修改了该被volatile修饰的变量,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,可以立即获取修改之后的值。 在Java中为了加快程序的运行效率,对一些变量的操作通常是在该线程的寄存器或是CPU缓存上进行的,之后才会同步到主存中,而加了volatile修 阅读全文
posted @ 2019-06-14 15:05 Chris,Cai 阅读(285) 评论(0) 推荐(0) 编辑
摘要:原子性、可见性、有序性 什么是原子性 即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。 一个很经典的例子就是银行账户转账问题: 比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减去1000元,往账户B加上1000元。这2个操作必须要具备原子性才能 阅读全文
posted @ 2019-06-14 14:36 Chris,Cai 阅读(562) 评论(0) 推荐(0) 编辑
摘要:1,Java 线程之间的通信由Java 内存模型(JMM)控制。JMM决定一个线程对共享变量的写入时,能对另一个线程可见。 从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系: 线程之间的共享变量存储在主内存(main memory)中, 每个线程都有一个私有的本地内存(local memor 阅读全文
posted @ 2019-06-14 14:28 Chris,Cai 阅读(262) 评论(0) 推荐(0) 编辑
摘要:1,ThreadLocal 不是“本地线程”的意思,而是Thread 的局部变量。每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本 2,提供的接口方法 • void set(Object value)设置当前线程的线程局部变量的值。 • 阅读全文
posted @ 2019-06-14 13:49 Chris,Cai 阅读(180) 评论(0) 推荐(0) 编辑
摘要:多线程死锁:同步中嵌套同步,导致锁无法释放 模拟死锁的情况: 两个线程,线程1 进入 对象锁,然后开始sale(),线程1 占据了this 锁(会放开),占据了对象锁(长期) 线程2 进入了sale(),占据了this 锁,因为对象锁被线程1 占据,所以不能继续执行,同时因为占据了this 锁,线程 阅读全文
posted @ 2019-06-13 17:17 Chris,Cai 阅读(117) 评论(0) 推荐(0) 编辑
摘要:1,为什么有线程安全问题? 当多个线程同时共享同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,也就是线程安全问题。但是做读操作是不会发生数据冲突问题。 可能出现的情况:同时卖了某一张票 问:为什么使用线程同步或使用锁能解决线程安全问题呢? 答:将可能会发生数据冲突问题(线程不安全问题 阅读全文
posted @ 2019-06-13 15:57 Chris,Cai 阅读(389) 评论(0) 推荐(0) 编辑
摘要:1 线程和进程区别 每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是一组指令的集合, 或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线 程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。 总结:进程 阅读全文
posted @ 2019-06-13 11:21 Chris,Cai 阅读(203) 评论(0) 推荐(0) 编辑
摘要:1,需要的包 2,需要的配置文件:放在classpath 路径下,或者 src/main/resource 名称:log4j2.xml 3 调用方式 阅读全文
posted @ 2019-06-13 11:14 Chris,Cai 阅读(126) 评论(0) 推荐(0) 编辑
摘要:TODO 阅读全文
posted @ 2019-06-03 16:28 Chris,Cai 阅读(145) 评论(0) 推荐(0) 编辑
摘要:TODO GOOGLE PASSWORD 阅读全文
posted @ 2019-06-03 16:19 Chris,Cai 阅读(471) 评论(0) 推荐(0) 编辑
摘要:TODO 阅读全文
posted @ 2019-06-03 16:14 Chris,Cai 阅读(100) 评论(0) 推荐(0) 编辑
摘要:Todo 阅读全文
posted @ 2019-06-03 16:12 Chris,Cai 阅读(84) 评论(0) 推荐(0) 编辑
摘要: KNN用于分类和回归,需要考虑最近的邻居。 分类就是编组。 回归就是预测结果(如数字)。 特征抽取意味着将物品(如水果或用户)转换为一系列可比较的数字。 能否挑选合适的特征事关KNN算法的成败。 阅读全文
posted @ 2019-06-03 16:04 Chris,Cai 阅读(377) 评论(0) 推荐(0) 编辑
摘要:贪婪算法: 这是一种近似算法(approximation algorithm)。在获得精确解需要的时间太长时,可使用近似算法。判断近似算法优劣的标准如下: 速度有多快; 得到的近似解与最优解的接近程度。贪婪算法是不错的选择,它们不仅简单,而且通常运行速度很快。在这个例子中,贪婪算法的运行时间为O 阅读全文
posted @ 2019-06-03 13:36 Chris,Cai 阅读(531) 评论(0) 推荐(0) 编辑
摘要:狄克斯特拉算法用于每条边都有关联数字的图,这些数字称为权重(weight)。 带权重的图称为加权图(weighted graph),不带权重的图称为非加权图(unweighted graph)。 要计算非加权图中的最短路径,可使用广度优先搜索。要计算加权图中的最短路径,可使用狄克斯特拉算法。 无向图 阅读全文
posted @ 2019-06-01 19:17 Chris,Cai 阅读(1259) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示