04 2017 档案
摘要:因为网络饱和的可能性,如何在异步框架中高效地写大块的数据是一个特殊的问题。由于写操作是非阻塞的,所以即使没有写出所有的数据,写操作也会在完成时返回并通知ChannelFuture。当这种情况发生时,如果仍然不停地写入,就有内存耗尽的风险。所以在写大型数据时,需要准备好处理到远程节点的连接是慢速连接的
阅读全文
摘要:毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象构建不同的冰箱。希望你喜欢这个比喻。 下面是一篇新鲜出炉的文章,其作者是Redis作者@antire
阅读全文
摘要:队列(queue)简述 队列(queue)是一种常用的数据结构,可以将队列看做是一种特殊的线性表,该结构遵循的先进先出原则。Java中,LinkedList实现了Queue接口,因为LinkedList进行插入、删除操作效率较高。 在处理元素前用于保存元素的 collection。除了基本的 Col
阅读全文
摘要:当我们通过Executor提交一组并发执行的任务,并且希望在每一个任务完成后能立即得到结果,有两种方式可以采取: 方式一: 通过一个list来保存一组future,然后在循环中轮训这组future,直到每个future都已完成。如果我们不希望出现因为排在前面的任务阻塞导致后面先完成的任务的结果没有及
阅读全文
摘要:并发编程实践中,ConcurrentHashMap是一个经常被使用的数据结构,相比于Hashtable以及Collections.synchronizedMap(),ConcurrentHashMap在线程安全的基础上提供了更好的写并发能力,但同时降低了对读一致性的要求(这点好像CAP理论啊 O(∩
阅读全文
摘要:装好Tomcat7后,发现除了本机能访问外界访问不了,岂有此理。于是请教百度大神,在费一番周折后,总结步骤如下: 1.修改文件/etc/sysconfig/iptables [root@bogon ~]# cd /etc/sysconfig/[root@bogon sysconfig]# vi ip
阅读全文
摘要:在项目前期目标是确保功能能够正常运行,但是随着时间的推移,数据的增加,逻辑的复杂,导致数据查询会越来越慢,这个时候我们首先想到的应该就是尽量优化sql。 sql优化常见注意点: 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。(order
阅读全文
摘要:其实很简单,只是为了忘记,做个记录,用的时候方便。 不管是在网站开发还是在应用程序开发中,我们经常会碰到需要将MySQL或MS SQLServer某个表的数据批量导入到另一个表的情况,甚至有时还需要指定导入字段。 本文就将以MySQL数据库为例,介绍如何通过SQL命令行将某个表的所有数据或指定字段的
阅读全文
摘要:今天生产服务器上的MySQL出现了一个不算太陌生的错误“Too many connections”。平常碰到这个问题,我基本上是修改/etc/my.cnf的max_connections参数,然后重启数据库。但是生产服务器上数据库又不能随便重启。 没办法,只好想办法手动去释放一些没用的连接。登陆到M
阅读全文
摘要:1.进入服务,找到mysql服务,在属性里找到mysql的安装路径 2.登陆 mysql -h 192.168.0.11 -P 3310 -u root -p 如果是访问的本机并且端口是默认的,那么-h和-P可以不写 3.备份 接着第一步 mysqldump -h 192.168.0.11 -P 3
阅读全文
摘要:一、简述 Exchanger可以在两个线程之间交换数据,只能是2个线程,他不支持更多的线程之间互换数据。当线程A调用Exchange对象的exchange()方法后,他会陷入阻塞状态,直到线程B也调用了exchange()方法,然后以线程安全的方式交换数据,之后线程A和B继续运行。 二、代码示例
阅读全文
摘要:一、CyclicBarrier简述 一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,
阅读全文
摘要:一、定义 一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个acquire(),然后再获取该许可。每个release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。
阅读全文
摘要:一、前言 JCIP 提到了在 Java 6 中引入了两个新的并发集合类 ConcurrentSkipListMap 和 ConcurrentSkipListSet。其实只要介绍一下 ConcurrentSkipListMap 即可(后面简称为 CSLM),因为我们都知道 JDK 中 Set 是基于
阅读全文
摘要:首先,为什么需要使用迭代器Iterator,原有的for循环和for each不能满足需求吗? 那是因为Iterator模式是用于遍历集合类的标准访问方法。它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构。 例如,如果没有使用Iterator,遍历一个数组的方法是使用
阅读全文
摘要:一、简介 CountDownlatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 它本身而言是Java并发包中非常有用的一个类,它可以让某些任务完成以后再继续运行下面的内容,每个任务本身执行完毕后让计数器减一,直到计数器清零后,以下的内容才可以继续运行,
阅读全文
摘要:一、区别介绍 shutDown() 当线程池调用该方法时,线程池的状态则立刻变成SHUTDOWN状态。此时,则不能再往线程池中添加任何任务,否则将会抛出RejectedExecutionException异常。但是,此时线程池不会立刻退出,直到添加到线程池中的任务都已经处理完成,才会退出。 shut
阅读全文
摘要:为什么要比较Hashtable、SynchronizedMap()、ConcurrentHashMap之间的关系?因为常用的HashMap是非线程安全的,不能满足在多线程高并发场景下的需求。 那么为什么说HashTable是线程不安全的?具体参阅关于java集合类HashMap的理解 如何线程安全的
阅读全文
摘要:spring的@Transactional不支持redis的事务,并且redis的事务和其它关系型数据库的事务概念不是太一样,redis事务不支持回滚,并且一条命令出错后,后面的命令还会执行。 所以不建议使用redis的事务,要想实现一串命令的原子性,直接在java代码里加锁,如果是分布式环境,要加
阅读全文
摘要:1.使用线程池的好处? 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一
阅读全文
摘要:CopyOnWriteArraySet是基于CopyOnWriteArrayList实现的,其唯一的不同是在add时调用的是CopyOnWriteArrayList的addIfAbsent方法。 具体可以看CopyOnWriteArraySet的构造方法和add方法 adIfAbsent方法同样采用
阅读全文
摘要:Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现
阅读全文
摘要:1.fail-fast和fail-safe比较 Iterator的安全失败是基于对底层集合做拷贝,因此,它不受源集合上修改的影响。java.util包下面的所有的集合类都是快速失败的,而java.util.concurrent包下面的所有的类都是安全失败的。快速失败的迭代器会抛出Concurrent
阅读全文
摘要:一、HashMap概述 HashMap基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 值得注意
阅读全文
摘要:一、 ArrayList概述: a.ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。 为什么说ArrayList是基于数组实现的,看看jdk源码ArrayList的构造函数 所以准确的说,这个数组是一个Object数组。 还有一个带参
阅读全文
摘要:RBAC模型概述 RBAC即角色访问控制(Role Based Access Control) RBAC认为权限授权实际上是Who、What、How的问题。在RBAC模型中,who、what、how构成了访问权限三元组,也就是“Who对What(Which)进行How的操作”。Who:权限的拥用者或
阅读全文
摘要:实现不同权限的用户登录后看到不同的菜单(菜单分两级),二级菜单显示内容根据一级菜单提供 一. menu 菜单表 id(主键), menu_name(菜单名), parent_menu_id(父菜单id), level(菜单级别:0,一级菜单,1,二级菜单……可以无限级) 二. role 角色表 id
阅读全文
摘要:JDK1.5之后java中的计时给出了更精确的方法:System.nanoTime(),输出的精度是纳秒级别,这个给一些性能测试提供了更准确的参考。 但是这个方法有个需要注意的地方,不能用来计算今天是哪一天(应该也没人这么傻,只是早上我突然想起) 看到这个方法不由得会想起System.current
阅读全文
摘要:环境 VM VirtualBox安装虚拟机CentOS 7 1、Redis.conf配置文件中 注释掉 bind 127.0.0.1 2、防火墙关闭(或添加可访问的端口,具体不在此描述) 最后一个坑 虚拟机网络配置 使用网络地址转换的方式时,需要配置端口转发规则,添加redis服务6379端口 在w
阅读全文
摘要:1、@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。 2、@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@
阅读全文
摘要:管道流PipeStream是一种特殊的流,用于在不同线程间直接传送数据,而不需要借助临时文件之类的东西。 jdk中提供了四个类来使线程间可以通信: 1)PipedInputStream和PipedOutputStream 2)PipedReader和PipedWriter 先看看字节流的示例: 再看
阅读全文
摘要:spring中 context:property-placeholder 导入多个独立的 .properties配置文件? Spring容器采用反射扫描的发现机制,在探测到Spring容器中有一个 org.springframework.beans.factory.config.PropertyPl
阅读全文
摘要:RandomAccess接口是一个空接口,空接口的作用一般起到一个标识作用,比如:Serializable 接口。RandomAccess接口里面的文档说明大致意思:给可以提供随机访问的List实现去标识一下,这样使用这个List的程序在遍历这种类型的List的时候可以有更高效率。仅此而已。这句话隐
阅读全文
摘要:LinkedList是AbstractSequentialList的子类,而ArrayList是AbstractList的子类,AbstractSequentialList也是AbstractList的子类。 AbstractSequentialList的API文档 这个类提供了一个基本的List接
阅读全文
摘要:想一下,在没有等待/通知之前,如何实现线程间通信? 一般都是多个线程共享同一个变量,然后根据变量的变化决定相应操作。但是多线程获取共享变量值这个过程既耗时,又不能保证完全正确。 所以需要引入等待/通知机制。 方法wait()可以使当前执行代码的线程进入等待状态,wait()是object类的方法,在
阅读全文
摘要:造成线程进入阻塞状态的情况大致可分为: 1.调用sleep()方法 2.调用阻塞式IO方法 3. 4.等待通知 5.调用suspend(),程序挂起。
阅读全文
摘要:volatile关键字的作用是强制从公共堆栈中取得变量的值,而不是从线程私有数据栈中取得变量的值。 使用volition关键字增加了实例变量在多个线程间的可见性。但volition有个致命的缺点就是不支持原子性。 下面将volition和synchronized关键字进行一下比较: 1.voliti
阅读全文
摘要:就是业务上需要完成一个功能,这个功能需要依次调用四个接口,后面接口的参数都依赖于前一个接口的返回值。 类似这样: 但是事实不与愿为,因为什么呢?这个js里的循环,每次都是自顾自的走,它不等ajax执行好走完到success代码,就继续循环下一条数据了,这样数据就全乱了。 后来,想到试试ajax里as
阅读全文