- 博客(138)
- 资源 (10)
- 收藏
- 关注
转载 两个栈实现一个队列以及两个队列实现一个栈(Java)
两个栈实现一个队列import java.util.Stack;public class Demo07 { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void pus...
2018-04-19 10:53:51
1780
转载 Java8新特性5--流式API
流式处理流是一系列数据项,一次只生成一项。程序可以从输 入流中一个一个读取数据项,然后以同样的方式将数据项写入输出流。一个程序的输出流很可能是另一个程序的输入流。流的特点元素序列——就像集合一样,流也提供了一个接口,可以访问特定元素类型的一组有序值。集合讲的是数据,流讲的是计算。源——流会使用一个提供数据的源,如集合、数组或输入/输出资源。 请注意,从有序集 合生成流时会保留原有的顺序。
2018-01-04 11:07:36
3769
转载 java8新特性3--lambda表达式
开发中,经常需要给一个方法传递一个接口类型的参数,为了传递不同的行为,我们需要创建不同的实现类,而通常这些类没什么重用价值,只使用一次就没用了。考虑一个从一堆苹果中筛选符合条件的苹果的场景。为了更好的应对需求变更,一个比较好的解决办法是将过滤的标准抽象出来,我们先定义一个接口作为抽象的选择标准.public interface ApplePredicate{ boolean tes
2018-01-04 11:04:06
589
转载 java8新特性2--注解变化
Java 8在两个方面对注解机制进行了改进,分别为:你现在可以定义重复注解你可以为任何目标添加注解Java中的注解是一种对程序元素进行配置,提供附加信息的机制。重复注解之前版本的Java禁止对同样的注解类型声明多次。由于这个原因,下面的第二句代码是无效的。@interface Author { String name();}@Author(name="Raoul") @Aut
2018-01-04 11:03:33
477
转载 java8新特性1--接口的变化
接口的变化在Java8之前,Java中,实现接口的类必须为接口中定义的每个方法提供一个实现,或者从父类中继承它的实现。但是,一旦类库的设计者需要更新接口,向其中加入新的方法,这种方式就会出现问题。现实情况是,现存的实体类往往不在接口设计者的控制范围之内,这些实体类为了适配新的接口约定也需要进行修改。由于Java 8的API在现存的接口上引入了非常多的新方法,这种变化带来的问题也愈加严重。
2018-01-04 11:02:56
521
转载 Java8新特性10--其他类库的变化
Map public static void main(String[] arg) { Map map=new HashMap(); //如果key不存在返回默认值 System.out.println(map.getOrDefault("a",123)); map.put("a",123); //将lambd
2018-01-04 11:02:12
369
转载 Java8新特性4--方法引用
方法引用lambda方法引用让你可以重复使用现有的方法定义,并像Lambda一样传递它们。在一些情况下, 比起使用Lambda表达式,它们更易读,感觉也更自然。方法引用可以被看作仅仅调用特定方法的Lambda的一种快捷写法。它的基本思想是,如果一个Lambda代表的只是“直接调用这个方法”,那最好还是用名称来调用它,而不是去描述如何调用它。事实上,方法引用就是让你根据已有的方
2018-01-04 11:00:43
285
转载 Java8新特性6--使用集合流API
使用集合的流式API直接上代码了,常用api都有了,要点都在注释中苹果类:package java8.stream;/** * @author qiang.xie * @date 2017/5/4 */public class Apple { private int weight; private String color; private Stri
2018-01-04 10:58:38
274
转载 Java8新特性8--使用CompletableFuture构建异步应用
使用CompletableFuture构建异步应用Future 接口的局限性future接口可以构建异步应用,但依然有其局限性。它很难直接表述多个Future 结果之间的依赖性。实际开发中,我们经常需要达成以下目的:将两个异步计算合并为一个——这两个异步计算之间相互独立,同时第二个又依赖于第一个的结果。等待 Future 集合中的所有任务都完成。仅等待 Future 集合中最快结束
2018-01-04 10:57:14
497
转载 Java8新特性9--新的日期和时间API
新的日期时间处理API从Java8开始,原生的Java API中已经能提供高质量的日期和时间支持,java.time包中整合了很多Joda-Time的特性。LocalDate和LocalTime开始使用新的日期和时间API时,你最先碰到的可能是LocalDate类。该类的实例是一个不可变对象,它只提供了简单的日期,并不含当天的时间信息。另外,它也不附带任何与时区相关的信息。你可以通过静态工
2018-01-04 10:55:55
1334
转载 java RMI原理详解
RMI(Remote Method Invocation)为远程方法调用,是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。 这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同计算机中。Java RMI:Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一
2017-12-28 10:11:18
268
转载 LongAdder
前言 最近在看到不少框架里面使用到了LongAdder这个类,而并非AtomicLong,很是困惑,于是专门看了LongAdder的源码,总结一下这两个的区别。AtomicLong原理 就像我们所知道的那样,AtomicLong的原理是依靠底层的cas来保障原子性的更新数据,在要添加或者减少的时候,会使用死循环不断地cas到特定的值,从而达到更新数据的目的。那么Long
2017-12-27 16:52:54
5220
1
转载 非阻塞同步算法与CAS(Compare and Swap)无锁算法
锁(lock)的代价锁是用来做并发最简单的方式,当然其代价也是最高的。内核态的锁的时候需要操作系统进行一次上下文切换,加锁、释放锁会导致比较多的上下文切换和调度延时,等待锁的线程会被挂起直至锁释放。在上下文切换的时候,cpu之前缓存的指令和数据都将失效,对性能有很大的损失。操作系统对多线程的锁进行判断就像两姐妹在为一个玩具在争吵,然后操作系统就是能决定他们谁能拿到玩具的父母,这是很慢的。用
2017-12-27 16:43:19
324
转载 ThreadLocalRandom类原理
2.2、 并发包中ThreadLocalRandom类原理剖析ThreadLocalRandom类是JDK7在JUC包下新增的随机数生成器,它解决了Random类在多线程下多个线程竞争内部唯一的原子性种子变量而导致大量线程自旋重试的不足。本节首先讲解下Random类的实现原理已经它在多线程下使用的局限性,然后引入ThreadLocalRandom类,通过讲解ThreadLocalRandom的实
2017-12-26 16:17:16
10932
4
转载 Java8新特性7--使用Optional解决空指针问题
身为一名Java程序员,大家可能都有这样的经历:调用一个方法得到了返回值却不能直接将返回值作为参数去调用别的方法。我们首先要判断这个返回值是否为null,只有在非空的前提下才能将其作为其他方法的参数。这正是一些类似Guava的外部API试图解决的问题。一些JVM编程语言比如Scala、Ceylon等已经将对在核心API中解决了这个问题。在我的前一篇文章中,介绍了Scala是如何解决了这个问题。
2017-12-14 11:13:32
1020
转载 Java 字符串拼接效率分析及最佳实践
java连接字符串有多种方式,比如+操作符,StringBuilder.append方法,这些方法各有什么优劣(可以适当说明各种方式的实现细节)?按照高效的原则,那么java中字符串连接的最佳实践是什么?有关字符串处理,都有哪些其他的最佳实践?废话不多说,直接开始, 环境如下:JDK版本: 1.8.0_65CPU: i7 4790内存: 16G
2017-12-14 10:35:20
363
转载 lombok @EqualsAndHashCode 注解的影响
官方文档:@EqualsAndHashCode原文中提到的大致有以下几点: 1. 此注解会生成equals(Object other) 和 hashCode()方法。 2. 它默认使用非静态,非瞬态的属性 3. 可通过参数exclude排除一些属性 4. 可通过参数of指定仅使用哪些属性 5. 它默认仅使用该类中定义的属性且不调用父类的方法 6. 可通过callSu
2017-12-12 15:33:55
952
转载 RPC服务和HTTP服务对比
很长时间以来都没有怎么好好搞清楚RPC(即Remote Procedure Call,远程过程调用)和HTTP调用的区别,不都是写一个服务然后在客户端调用么?这里请允许我迷之一笑~Naive!本文简单地介绍一下两种形式的C/S架构,先说一下他们最本质的区别,就是RPC主要是基于TCP/IP协议的,而HTTP服务主要是基于HTTP协议的,我们都知道HTTP协议是在传输层协议TCP之上的,所以效率来看
2017-11-28 10:03:55
244949
67
转载 cookie setSecure详解
在cas中或其他web开发中,会碰到安全cookie的概念,因为CAS中TGT是存放在安全cookie中的。下面是安全cookie 的理解: Set-Cookie 的 secure 属性就是处理这方面的情况用的,它表示创建的 cookie 只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,如果是 HTTP 连接则不会传递该信息,所以绝对不会被窃听到。 在s
2017-11-06 16:35:24
5695
1
转载 Elasticsearch segments merge
这两周主要看了下 Elasticsearch(其实是Lucene)的 segments 的 merge 流程。事情起因是,线上的ES有些大索引,其中的segments 个数几十个,每个大小100M+,小 segments 若干,而遇到问题就是这些大的 segments 不再做 merge 了,除非强制进行forceMerge 操作,由于我们第一次ES上线,其实也不清楚这究竟是个问题还是本来 Luc
2017-11-06 11:01:07
2713
转载 深入理解spring中的各种注解
Spring中的注解大概可以分为两大类:1)spring的bean容器相关的注解,或者说bean工厂相关的注解;2)springmvc相关的注解。spring的bean容器相关的注解,先后有:@Required, @Autowired, @PostConstruct, @PreDestory,还有Spring3.0开始支持的JSR-330标准javax.inject.*中的
2017-11-06 10:04:32
250
转载 RPC与RMI的区别
1. RPC 不支持对象, 采用http协议2. RMI支持传输对象。采用tcp/ip 协议3. RMI只限于JAVA语言,RPC跨语言RPC和RMI的简单比较 在RMI和RPC之间最主要的区别在于方法是如何别调用的。在RMI中,远程接口使每个远程方法都具有方法签名。如果一个方法在服务器上执行, 但是没有相匹配的签名被添加到这个远程接口上,那么这个新方法就
2017-11-03 15:29:02
624
1
转载 Lombok使用
Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法lombok 注解: lombok 提供的注解不多,可以参考官方视频的讲解和官方文档。 Lombok 注解在线帮助文档:http://projectlombok.org/features/index. 下面介绍
2017-11-03 10:47:34
204
转载 Dubbo服务启动依赖检查
项目中存在服务之间存在循环依赖,启动时总是报错,通过修改启动检查check=false解决,下面是dubbo官网提供的启动检查文档。启动时检查Dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,以便上线时,能及早发现问题,默认check=true。如果你的Spring容器是懒加载的,或者通过API编程延迟引用服务,请关闭chec
2017-10-24 17:28:29
536
转载 dubbo线程池优化
dubbo默认提供了三种线程池,分别是 fixed 固定大小线程池,启动时建立线程,不关闭,一直持有。 cached 缓存线程池,空闲一分钟自动删除,需要时重建。 limited 可伸缩线程池,但池中的线程数只会增长不会收缩。(为避免收缩时突然来了大流量引起的性能问题)。
2017-10-23 14:38:11
5583
1
转载 分布式事务之说说TCC事务
在当前如火如荼的互联网浪潮下,如何应对海量数据、高并发成为大家面临的普遍难题。广大IT公司从以往的集中式网站架构,纷纷转向分布式的网站架构,随之而来的就是进行数据库拆分和应用拆分,如何在跨数据库、跨应用保证数据操作和业务操作的一致性、原子性,又成为需要解决的新的问题。从分布式事务的需求来源来看:1、跨数据库数据库拆分(水平、垂直)带来的分布式事务->保证跨库操作的原子性基于单个JVM
2017-10-22 22:38:25
222
转载 mysql的引擎myisam和innodb的区别
a)构造上的区别 MyISAM在磁盘上存储成三个文件,其中.frm文件存储表定义;.MYD (MYData)为数据文件;.MYI (MYIndex)为索引文件。 而innodb是由.frm文件、表空间(分为独立表空间或者共享表空间)和日志文件(redo log)组成。 b)事务上的区别 myisam不支持事务;而innodb支持事务。 c)
2017-10-22 18:03:20
239
转载 redis分布式锁
业务场景所谓秒杀,从业务角度看,是短时间内多个用户“争抢”资源,这里的资源在大部分秒杀场景里是商品;将业务抽象,技术角度看,秒杀就是多个线程对资源进行操作,所以实现秒杀,就必须控制线程对资源的争抢,既要保证高效并发,也要保证操作的正确。一些可能的实现刚才提到过,实现秒杀的关键点是控制线程对资源的争抢,根据基本的线程知识,可以不加思索的想到下面的一些方法: 1、秒杀在技术
2017-10-21 22:32:04
242
转载 TCP协议如何保证可靠传输
1、应用数据被分割成TCP认为最适合发送的数据块。 2、超时重传:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。 3、TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。 4、校验和:TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的
2017-10-21 21:59:25
604
1
转载 nginx容灾
nginx的upstream目前支持5种方式的分配 1、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 2、weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 例如: upstream bakend { server 192.168.0.14 weight=10;
2017-10-21 14:10:16
2246
转载 服务器常见错误代码
一:500错误1、500 Internal Server Error 内部服务错误:顾名思义500错误一般是服务器遇到意外情况,而无法完成请求。2、500出错的可能性: a、编程语言语法错误,web脚本错误 b、并发高时,因为系统资源限制,而不能打开过多的文件3、一般解决思路: a、查看nginx、php的错误日志文件,从而看出端倪
2017-10-21 13:39:25
12115
1
转载 TreeSet实现原理
前言 首先明白TreeSet属于集的范围,所以它只能存放引用类型,不能用于基本数据类型,实现了set接口,所以它本身不能有重复的元素,当存入自定义的引用类型的时候就必须考虑到元素不可重复的这个特性,换句话说就必须实现Comparable接口(Comparable与Compared接口的区别),在TreeSet内部会自动调用存储的引用类型对象的实现的Comparable接口中的c
2017-10-20 17:06:10
2134
转载 dubbo工作原理,集群容错,负载均衡
dubbo主要核心部件Remoting:网络通信框架,实现了sync-over-async和request-response消息机制。RPC:一个远程过程调用的抽象,支持负载均衡、容灾和集群功能。Registry:服务目录框架用于服务的注册和服务事件发布和订阅。(类似第一篇文章中的点菜宝)dubbo架构Provider: 暴露服务的提供方。Consumer:调用
2017-10-20 15:36:05
487
转载 Lock 框架详解
我们已经知道,synchronized 是Java的关键字,是Java的内置特性,在JVM层面实现了对临界资源的同步互斥访问,但 synchronized 粒度有些大,在处理实际问题时存在诸多局限性,比如响应中断等。Lock 提供了比 synchronized更广泛的锁操作,它能以更优雅的方式处理线程同步问题。本文以synchronized与Lock的对比为切入点,对Java中的Lock框架的枝干
2017-10-20 15:11:01
260
转载 线程本地变量ThreadLocal
首先说明ThreadLocal存放的值是线程内共享的,线程间互斥的,主要用于线程内共享一些数据,避免通过参数来传递,这样处理后,能够优雅的解决一些实际问题,比如Hibernate中的OpenSessionInView,就是使用ThreadLocal保存Session对象,还有我们经常用ThreadLocal存放Connection,代码如:[java] view pla
2017-10-20 14:55:27
179
转载 JAVA多线程实现的四种方式
多线程实现方式主要有四种:继承Thread类、实现Runnable接口、实现Callable接口通过FutureTask包装器来创建Thread线程、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,后两种是带返回值的。 1、继承Thread类创建线程Thread类本质上是实现了Runnab
2017-10-20 13:59:04
212
转载 Java 并发工具包 java.util.concurrent 用户指南
1. java.util.concurrent - Java 并发工具包Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包。这个包包含有一系列能够让 Java 的并发编程变得更加简单轻松的类。在这个包被添加以前,你需要自己去动手实现自己的相关工具类。本文我将带你一一认识 java.util.concurrent 包里的这些类,然后你可以尝试着如何
2017-10-17 22:53:21
184
转载 ElasticSearch 倒排索引、分词
es使用称为倒排索引的结构达到快速全文搜索的目的。 一个倒排索引包含一系列不同的单词,这些单词出现在任何一个文档,对于每个单词,对应着所有它出现的文档。 比如说,我们有2个文档,每个文档有一个conteng字段。内容如下:“ The quick brown fox jumped over the lazy dog”“ Quic
2017-10-15 22:43:42
1460
转载 倒排索引
常规的索引是文档到关键词的映射:文档——>关键词但是这样检索关键词的时候很费力,要一个文档一个文档的遍历一遍。(这事不能忍~)于是人们发明了倒排索引~倒排索引是关键词到文档的映射关键词——>文档这样,只要有关键词,立马就能找到她在那个文档里出现过,剩下的事就是把她揪出来了~~~可能是因为将正常的索引倒过来了吧,所以大家叫他倒排索引,可我依然喜欢叫他反向索引~
2017-10-15 18:07:49
229
ivr开发资料
2012-12-25
Java设计模式及案例
2012-12-06
visualvm_135最新版本
2012-12-06
全文检索所用jar包3.6版本
2012-12-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人