- 博客(25)
- 收藏
- 关注
转载 Redis的5中数据类型及应用场景
Redis的全称是Remote Dictionary Server,本质上是一个Key-Value类型的内存数据库,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据Flush到硬盘行保存。因为是纯内存操作,Redis的性能很出色,可每秒10w次读写,是已知性能最快的Key-Value DB。此外Redis支持保存多种数据结构,单个value的最大限制是1GB,可以用来实...
2019-09-08 17:06:00 175
转载 多线程(11) — NIO
Java NIO是new IO的简称,是一种可以替代Java IO的一套新的IO机制。它提供了一套不同于Java标准IO的操作机制,严格来说,NIO与并发并无直接关系,但是使用NIO技术可以大大提高线程的使用效率。Java NIO设计的基础内容有通道(Channel)、缓冲区(Buffer)、Selector(选择器)。下面说说这几个内容1)通道(Channel) Chan...
2019-08-12 00:23:00 298
转载 多线程(10) — Future模式
Future模式是多线程开发中常用常见的一种设计模式,它的核心思想是异步调用。在调用一个函数方法时候,如果函数执行很慢,我们就要进行等待,但这时我们可能不着急要结果,因此我们可以让被调者立即返回,让它在后台慢慢处理这个请求,对于调用者来说可以先处理一些其他事物,在真正需要数据的场合再去尝试获得需要的数据。对于Future模式来说,虽然它无法立即给出你需要的数据,但是它们返回一个契约给...
2019-08-11 16:10:00 165
转载 Java的设计模式(7)— 生产者-消费者模式
生产者-消费者模式是一个经典的多线程设计模式,它为多线程间的协作提供了良好的解决方案。这个模式中,通常有两类线程,即若干个生产者线程和若干个消费者线程。生产者线程负责提交用户请求,消费者线程则负责具体处理生产者提交的任务。生产者和消费者之间通过共享内存缓存区进行通信,这样就避免了生产者和消费者直接通信,从而将生产者和消费者解耦。不管是生产高于消费,还是消费高于生产,缓存区的存在可以确...
2019-08-10 17:57:00 143
转载 多线程(9) — 无锁
对于并发控制而言,锁是一种悲观策略,它总是假设每一次的临界区操作会产生冲突。如果有多个线程同时需要访问临界区资源,则宁可牺牲性能让线程进行等待,所以说锁会阻塞线程执行。而无锁是一种乐观策略,它会假设对资源的访问是没有冲突的,既然没有冲突就不会让线程等待,所有线程可以在不停顿的情况下持续执行。那遇到冲突了咋办呢?无锁的策略使用一种比较交换的技术(CAS,Compare And Swap...
2019-08-09 23:36:00 223
转载 多线程(8) — ThreadLocal
ThreadLocal是一个线程的局部变量,也就是只有当前线程可以访问,是线程安全的。为每一个线程分配不同的对象,需要在应用层面保证ThreadLocal只起到简单的容器作用。ThreadLocal类很简单,只有4个方法,它们是如下方法:void set(Object value)设置当前线程的线程局部变量的值。public Object get()该方法返回当前线程...
2019-08-04 19:32:00 94
转载 Java的设计模式(6)— 模板模式
定义一个操作中算法的骨架,将一些步骤放在子类实现,使得子类可以不改变一个算法结构即子类可以重定义该算法的某些特定步骤。主要有两个角色: 1. 抽象模板 :是一个抽象类,并实现了一个具体模板方法,这个方法中会定义算法的骨架,其中一些步骤是引用抽象模板中的抽象方法,定义了算法的结构。 2. 具体模板 :是一个具体类,是抽象类的子类,重写父类中抽象方法,这样就在不改变抽象模板中...
2019-07-29 21:42:00 82
转载 多线程(7)— JDK对锁优化的努力
JDK内部的“锁”优化策略1. 锁偏向 锁偏向是针对加锁操作的优化手段,核心思想是:如果一个线程获得了锁,那么锁就进入偏向模式,当这个线程再次请求锁时,无须再做任何同步操作,这样就节省了大量有关锁申请的操作,从而提高了程序的性能。对几乎没有锁竞争的场合,偏向锁有很好的优化效果,对于锁竞争激烈的场合,效果不佳,因为每次都是不同的线程在申请锁,偏向模式就会失效,还不如不启用偏向...
2019-07-28 18:07:00 98
转载 多线程(6) — 提高锁性能的一些看法
锁是最常见的同步方法之一,在高并发环境下,激烈的的锁竞争导致程序的性能下降,因此我们有必要讨论一些有关锁的性能问题,以及一些注意事项,比如避免死锁等。为了降低锁的竞争导致程序性能下降的话,可以用以下建议提高一下性能。 1. 减少锁持有时间 对于使用锁进行并发控制的应用程序而言,在锁竞争过程中,单个线程对锁的持有时间与系统性能有着直接关系,如果线程持有锁的时间越长,那么锁的...
2019-07-28 01:21:00 220
转载 Java的设计模式(5)-- 策略模式
定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换,本模式使得算法可以独立于使用它的客户而变化。策略模式包括以下三种角色策略(Strategy):策略是一个接口,该接口定义若干个算法标识,定义了若干个抽象方法。具体策略(ConcreteStrategy):具体策略是实现策略接口的类,具体策略实现策略接口所定义的抽象方法,给出算法标识的具体算法。上下文(Con...
2019-07-27 17:21:00 444
转载 多线程(5) — JDK的并发容器
JDK提供了一些高效的并发容器,下面介绍几个ConcurrentHashMap:这是个高效的并发HashMap,可以理解为一个线程安全的HashMap。CopyOnWriteArrayList:这是一个List,从名字看就知道它和ArrayList是一族的,在读多写少的场合,这个List的性能非常好,远远优于Vector。ConcurrentLinkedQue...
2019-07-26 23:32:00 119
转载 Java的设计模式(4)--抽象工厂模式
提供一个创建一系列或相互依赖对象的接口,而无须指定他们具体的类。例如某些系统可能需要为用户提供一系列相关对象,但系统不希望用户直接使用new运算符实例化这些对象,而是应当由系统来控制这些对象的创建,否则用户不仅要清楚知道哪些类来创建对象,而且必须要清楚这些对象之间是如何相关的,使得用户代码和这些类型形成耦合,不利维护,一般会包括以下四种角色:抽象产品(Product):一个抽...
2019-07-24 20:59:00 194
转载 多线程(4) — 同步控制
关键字Synchronize是最简单的控制方法,决定了一个线程是否可以访问临界区资源。同时,Object.wait()方法和Object.notify()方法起到了线程等待和通知的作用。下面介绍重入锁: 1. 重入锁 重入锁使用java.util.concurrent.locks.ReentrantLock类来实现。重入锁有着显示的操作过程,必须手动指定何时加锁何时释放锁...
2019-07-23 20:28:00 106
转载 多线程(3) — 线程池
线程的创建和销毁是消耗时间和资源的,创建大量的线程会抢占宝贵的内存资源,大量的线程回收也给GC带来很大的压力。为了避免这种情况的出现,可以让创建的线程复用,那么线程池就应用而生了。需要线程时,从线程池中拿一个线程,不需要时再归还给线程池,从而达到了复用线程的效果。 JDK提供了一套Executor框架,用于进行线程控制,本质是一个线程池。ThreadPoolExecutor表示...
2019-07-19 14:17:00 132
转载 Java的设计模式(3)--工厂模式
工厂模式是定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。 工厂模式涉及四种角色: 抽象产品(Product):抽象类或者接口,负责定义具体产品必须实现的方法; 具体产品(ConcreteProduct):具体产品是一个类,是抽象产品的具体实现类; 构造者(Creator):一个接口或者抽象类,构造者定义一...
2019-07-18 21:11:00 313
转载 Java的设计模式(2)--单例模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点。 好处: (1)频繁使用的对象,可以省略new操作花费的时间,这对于那些重量级对象而言,是非常客观的一笔开销。 (2)由于new的次数减少,对系统内存的使用频率降低,减轻GC压力,缩短GC停顿时间。其UML图如下:public class Singleton{ priv...
2019-07-18 00:36:00 77
转载 多线程(2) — 线程中一些常用的方法和关键字
1.start()和run() start()方法是是开启线程的方法,这个方法执行后,一个线程才真正的进入RUNNABLE状态。run()方法是线程中具体执行的业务活动,一般都要重写run()方法。2.stop() stop()方法在结束线程时,会直接终止线程,并立即释放这个线程所持有的锁,而锁恰恰是用来维护对象一致性的。例如写线程正在写到一半,线程被强行终止,对象就会被...
2019-07-17 23:58:00 145
转载 多线程(1) — 开篇,线程的状态
进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础,是线程的容器。 程序是指令、数据及其组织形式的描述,进程是程序的实体。 在Windows系统中,任务管理器中可以看到各个进程。 线程是轻量级进程,是程序执行的最小单位,使用多线程而不是多进程去进行并发程序设计,因为线程间的切换和调度成本远远小于进程。 ...
2019-07-14 23:25:00 85
转载 部门innercode刷新
最近遇到一个小需求,就是刷新部门的innercode。在导入数据的时候,innercode乱了,所以需要刷新。那先说说innercode是什么吧。 大家都知道部门是一个树形结构,但是有时候想知道一个部门下面都有哪些下级部门包括下级的下级等等,如果使用上级部门pk一级一级的往下找很麻烦,为了把这个树拉平,创建一个innercode字段。例如本系统中这样,加入本级部门的innerc...
2019-07-13 21:20:00 483
转载 Java的设计模式之开篇(1)
什么是设计模式呢?这个问题曾经一直困扰着我,以前我一直以为这是门新的技术,但是随着工作年限和工作经验的增加,其实设计模式就是已经在众多软件系统得到验证的成功的并且可复用的技术方案或者解决问题的方案。Java是目前最主流的开发语言之一,在众多的实践中,总结出了多个设计模式,学习这个模式有助于程序员写出高质量的而又有效的代码。因此一种设计模式能够解决类似的问题,并加以复用。但是在实际的编...
2019-07-12 23:04:00 124
转载 粒子群算法(PSO)
这几天看书的时候看到一个算法,叫粒子群算法,这个算法挺有意思的,下面说说我个人的理解: 粒子群算法(PSO)是一种进化算法,是一种求得近似最优解的算法,这种算法的时间复杂度可能会达到O(n!),得到的结果不一定是最优解,往往已经很接近最优解了。最早是Kenny 和 Eberhart于1995年提出的,算法的参数配置少,易于应用,理解起来也很简单。实现步骤如下: (1)初始化所...
2019-07-12 00:16:00 1469
转载 mysql时间与字符串相互转换
时间、字符串、时间戳之间的互相转换很常用,但是几乎每次使用时候都喜欢去搜索一下用法;本文整理一下三者之间的 转换(即:date转字符串、date转时间戳、字符串转date、字符串转时间戳、时间戳转date,时间戳转字符串)用法,方便日后学习和查阅;涉及的函数date_format(date, format) 函数,MySQL日期格式化函数date_format()unix_t...
2017-01-09 14:21:00 62
转载 Jsp中使用EL表达式对字符串进行操作
用fn函数:<%@ taglib prefix="fn" uri="http://Java.sun.com/jsp/jstl/functions" %>下面是JSTL中自带的方法列表以及其描述函数名 函数说明 使用举例fn:contains 判定字符串是否包含另外一个字符串 <c:if test="${fn:contains(name, searchStrin...
2016-12-20 09:06:00 191
转载 quartz搭建与应用
1.添加依赖依赖包括Quartz和logback<dependencies> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> ...
2016-09-21 19:19:00 66
转载 webservice实例
前言:朋友们开始以下教程前,请先看第五大点的注意事项,以避免不必要的重复操作。本文引自:http://www.iteye.com/topic/1135747一、准备工作(以下为本实例使用工具)1、MyEclipse10.7.12、JDK1.6.0_22二、创建服务端1、创建【Web Service Project】,命名为【TheService】。...
2016-09-21 14:17:00 47
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人