07 2019 档案

摘要:定义一个操作中算法的骨架,将一些步骤放在子类实现,使得子类可以不改变一个算法结构即子类可以重定义该算法的某些特定步骤。 主要有两个角色: 1. 抽象模板 :是一个抽象类,并实现了一个具体模板方法,这个方法中会定义算法的骨架,其中一些步骤是引用抽象模板中的抽象方法,定义了算法的结构。 2. 具体模板 阅读全文
posted @ 2019-07-29 21:42 扁豆一号 阅读(152) 评论(0) 推荐(0) 编辑
摘要:JDK内部的“锁”优化策略 1. 锁偏向 锁偏向是针对加锁操作的优化手段,核心思想是:如果一个线程获得了锁,那么锁就进入偏向模式,当这个线程再次请求锁时,无须再做任何同步操作,这样就节省了大量有关锁申请的操作,从而提高了程序的性能。对几乎没有锁竞争的场合,偏向锁有很好的优化效果,对于锁竞争激烈的场合 阅读全文
posted @ 2019-07-28 18:07 扁豆一号 阅读(273) 评论(0) 推荐(0) 编辑
摘要:锁是最常见的同步方法之一,在高并发环境下,激烈的的锁竞争导致程序的性能下降,因此我们有必要讨论一些有关锁的性能问题,以及一些注意事项,比如避免死锁等。为了降低锁的竞争导致程序性能下降的话,可以用以下建议提高一下性能。 1. 减少锁持有时间 对于使用锁进行并发控制的应用程序而言,在锁竞争过程中,单个线 阅读全文
posted @ 2019-07-28 01:21 扁豆一号 阅读(1429) 评论(0) 推荐(0) 编辑
摘要:定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换,本模式使得算法可以独立于使用它的客户而变化。策略模式包括以下三种角色 策略(Strategy):策略是一个接口,该接口定义若干个算法标识,定义了若干个抽象方法。 具体策略(ConcreteStrategy):具体策略是实现策略接口的类,具 阅读全文
posted @ 2019-07-27 17:21 扁豆一号 阅读(513) 评论(0) 推荐(1) 编辑
摘要:JDK提供了一些高效的并发容器,下面介绍几个 ConcurrentHashMap:这是个高效的并发HashMap,可以理解为一个线程安全的HashMap。 CopyOnWriteArrayList:这是一个List,从名字看就知道它和ArrayList是一族的,在读多写少的场合,这个List的性能非 阅读全文
posted @ 2019-07-26 23:32 扁豆一号 阅读(242) 评论(0) 推荐(0) 编辑
摘要:提供一个创建一系列或相互依赖对象的接口,而无须指定他们具体的类。例如某些系统可能需要为用户提供一系列相关对象,但系统不希望用户直接使用new运算符实例化这些对象,而是应当由系统来控制这些对象的创建,否则用户不仅要清楚知道哪些类来创建对象,而且必须要清楚这些对象之间是如何相关的,使得用户代码和这些类型 阅读全文
posted @ 2019-07-24 20:59 扁豆一号 阅读(230) 评论(0) 推荐(0) 编辑
摘要:关键字Synchronize是最简单的控制方法,决定了一个线程是否可以访问临界区资源。同时,Object.wait()方法和Object.notify()方法起到了线程等待和通知的作用。下面介绍重入锁: 1. 重入锁 重入锁使用java.util.concurrent.locks.Reentrant 阅读全文
posted @ 2019-07-23 20:28 扁豆一号 阅读(409) 评论(0) 推荐(0) 编辑
摘要:线程的创建和销毁是消耗时间和资源的,创建大量的线程会抢占宝贵的内存资源,大量的线程回收也给GC带来很大的压力。为了避免这种情况的出现,可以让创建的线程复用,那么线程池就应用而生了。需要线程时,从线程池中拿一个线程,不需要时再归还给线程池,从而达到了复用线程的效果。 JDK提供了一套Executor框 阅读全文
posted @ 2019-07-19 14:17 扁豆一号 阅读(200) 评论(0) 推荐(0) 编辑
摘要:工厂模式是定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。 工厂模式涉及四种角色: 抽象产品(Product):抽象类或者接口,负责定义具体产品必须实现的方法; 具体产品(ConcreteProduct):具体产品是一个类,是抽象产品的具体实现类; 构造者( 阅读全文
posted @ 2019-07-18 21:11 扁豆一号 阅读(248) 评论(0) 推荐(0) 编辑
摘要:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 好处: (1)频繁使用的对象,可以省略new操作花费的时间,这对于那些重量级对象而言,是非常客观的一笔开销。 (2)由于new的次数减少,对系统内存的使用频率降低,减轻GC压力,缩短GC停顿时间。 其UML图如下: 还有一种方式就是懒加载,实现 阅读全文
posted @ 2019-07-18 00:36 扁豆一号 阅读(144) 评论(0) 推荐(0) 编辑
摘要:1.start()和run() start()方法是是开启线程的方法,这个方法执行后,一个线程才真正的进入RUNNABLE状态。run()方法是线程中具体执行的业务活动,一般都要重写run()方法。 2.stop() stop()方法在结束线程时,会直接终止线程,并立即释放这个线程所持有的锁,而锁恰 阅读全文
posted @ 2019-07-17 23:58 扁豆一号 阅读(1085) 评论(0) 推荐(0) 编辑
摘要:进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础,是线程的容器。 程序是指令、数据及其组织形式的描述,进程是程序的实体。 在Windows系统中,任务管理器中可以看到各个进程。 线程是轻量级进程,是程序执行的最小单位,使用多线程而不是多进程 阅读全文
posted @ 2019-07-14 23:25 扁豆一号 阅读(186) 评论(0) 推荐(0) 编辑
摘要:最近遇到一个小需求,就是刷新部门的innercode。在导入数据的时候,innercode乱了,所以需要刷新。那先说说innercode是什么吧。 大家都知道部门是一个树形结构,但是有时候想知道一个部门下面都有哪些下级部门包括下级的下级等等,如果使用上级部门pk一级一级的往下找很麻烦,为了把这个树拉 阅读全文
posted @ 2019-07-13 21:20 扁豆一号 阅读(418) 评论(0) 推荐(0) 编辑
摘要:什么是设计模式呢?这个问题曾经一直困扰着我,以前我一直以为这是门新的技术,但是随着工作年限和工作经验的增加,其实设计模式就是已经在众多软件系统得到验证的成功的并且可复用的技术方案或者解决问题的方案。Java是目前最主流的开发语言之一,在众多的实践中,总结出了多个设计模式,学习这个模式有助于程序员写出 阅读全文
posted @ 2019-07-12 23:04 扁豆一号 阅读(140) 评论(0) 推荐(0) 编辑
摘要:这几天看书的时候看到一个算法,叫粒子群算法,这个算法挺有意思的,下面说说我个人的理解: 粒子群算法(PSO)是一种进化算法,是一种求得近似最优解的算法,这种算法的时间复杂度可能会达到O(n!),得到的结果不一定是最优解,往往已经很接近最优解了。最早是Kenny 和 Eberhart于1995年提出的 阅读全文
posted @ 2019-07-12 00:16 扁豆一号 阅读(3248) 评论(1) 推荐(0) 编辑

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