- 博客(47)
- 收藏
- 关注
转载 Redis排行实现
有序集初体验: 先来看几个后续会使用的redis命令语法: 1 2 3 4 5 6 7 8 9 10 11 ZADD key score1 member1 [score2 member2] 添加一个或多个成员到有序集合,或者如果它已经存在更新其分数 ...
2018-08-01 16:53:53 898
转载 使用Redis实现排行功能
游戏中存在各种各样的排行榜,比如玩家的等级排名、分数排名等。玩家在排行榜中的名次是其实力的象征,位于榜单前列的玩家在虚拟世界中拥有无尚荣耀,所以名次也就成了核心玩家的追求目标。一个典型的游戏排行榜包括以下常见功能:1. 能够记录每个玩家的分数;2. 能够对玩家的分数进行更新;3. 能够查询每个玩家的分数和名次;4. 能够按名次查询排名前N名的玩家;5. 能够查询排在指定玩家前...
2018-08-01 16:31:37 1046
转载 ConcurrentHashMap原理详细解析
ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashMap实现(若对HashMap的实现原理还不甚了解,可参考我的另一篇文章HashMap实现原理及源码分析),ConcurrentHashMap在并发编程的场景中使用频率非常之高,本文就来分析下ConcurrentHashMap的实现原理,并对其实现原理进行分析(JDK1.7).ConcurrentHashM...
2018-07-31 11:40:57 328
转载 ConcurrentHashMap原理分析
先来看看ConcurrentHashMap是个啥结构。 在JDK1.7中,ConcurrentHashMap的数据结构是由一个Segment数组和多个HashEntry组成,结构如下图所示: Segment数组的意义就是将一个大的table分割成多个小的table来进行加锁,Segment数组中每一个元素就是一把锁,每一个Segment元素存储的是HashEntry数组+链表,这个和Hash...
2018-07-31 10:53:56 209
转载 (转)HashMap实现原理
1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 2. HashMap的数据结构: 在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,H...
2018-07-28 23:08:28 132
原创 ArrayList、Vector、HashMap、HashSet的默认初始容量、加载因子、扩容增量
当底层实现涉及到扩容时,容器或重新分配一段更大的连续内存(如果是离散分配则不需要重新分配,离散分配都是插入新元素时动态分配内存),要将容器原来的数据全部复制到新的内存上,这无疑使效率大大降低。加载因子的系数小于等于1,意指 即当 元素个数 超过 容量长度*加载因子的系数 时,进行扩容。另外,扩容也是有默认的倍数的,不同的容器扩容情况不同。 List 元素是有序的、可重复Arr...
2018-07-28 22:45:36 208
转载 集合底层
ArrayList实现原理要点概括参考文献: http://zhangshixi.iteye.com/blog/674856l https://www.cnblogs.com/leesf456/p/5308358.htmlArrayList是List接口的可变数组非同步实现,并允许包括null在内的所有元素。 底层使用数组实现 该集合是可变长度数组,数组扩容时,会将老数组中的元素重新拷...
2018-07-28 21:19:04 198 1
转载 String底层
一、String类想要了解一个类,最好的办法就是看这个类的实现源代码,来看一下String类的源码:public final class String implements java.io.Serializable, Comparable<String>, CharSequence{ /** The value is used for character...
2018-07-28 16:08:26 711
原创 sso 单点登录 cas
什么是SSO所谓SSO(Single Sign On)单点登录是指基于用户/会话认证的一个过程,用户只需一次性提供凭证(仅一次登录),就可以访问多个应用。目前单点登录主要基于Web的多种应用程序,即通过浏览器实现对多个B/S架构应用的统一账户认证。CAS介绍CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004年 12...
2018-07-28 14:28:56 253
转载 线程安全的单例模式
转自:http://blog.sina.com.cn/s/blog_75247c770100yxpb.html 面试的时候,常常会被问到这样一个问题:请您写出一个单例模式(Singleton Pattern)吧。好吧,写就写,这还不容易。顺手写一个: 1 //饥饿模式 2 public final class EagerSingleton 3 { 4 pri...
2018-07-27 22:16:01 116
转载 MySQL优化
MySQL优化三大方向① 优化MySQL所在服务器内核(此优化一般由运维人员完成)。② 对MySQL配置参数进行优化(my.cnf)此优化需要进行压力测试来进行参数调整。③ 对SQL语句以及表优化。MySQL参数优化1:MySQL 默认的最大连接数为 100,可以在 mysql 客户端使用以下命令查看mysql> show variables like 'max_con...
2018-07-24 09:22:54 192
转载 CountDownLatch、CyclicBarrier和 Semaphore
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。以下是本文目录大纲:一.CountDownLatch用法二.CyclicBarrier用法三.Semaphore用法一.CountDownLatch用法CountDownLatch类...
2018-07-19 09:04:18 122
转载 解决Spring中id重复的问题
问题提问: 当我们的web应用庞大之后,里面有很多的bean配置并且是分文件的,如果两个bean的配置id是一样的而且实现类也是一样的,例如有下面两份xml的配置文档。 问题分析:beancontext1.xml<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRI...
2018-07-16 21:45:59 1701
转载 git中pull和fetch的区别
总而言之,几句话概括 1.git pull = git fetch + git mergegit pull会将本地库更新至远程库的最新状态 由于本地库进行了更新,HEAD也会相应的指向最新的commit id2.git fetch的时候只是将remote的origin进行update 但是并没有在local的branch进行merge一张图概括:...
2018-07-02 16:40:19 886
转载 GIt 几个命令的区别
Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能。Git有很多优势,其中之一就是远程操作非常简便。本文详细介绍5个Git命令,它们的概念和用法,理解了这些内容,你就会完全掌握Git远程操作。git clonegit remotegit fetchgit pullgit push本文针对初级用户,从最简单的讲起,但是需要读者对Git的基本用法有所了解。同时,本文覆盖了上面5个命令...
2018-07-02 13:36:16 1599
转载 volatile和synchronized
转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52370068面试时很可能遇到这样一个问题:使用volatile修饰int型变量i,多个线程同时进行i++操作,这样可以实现线程安全吗?提到线程安全、线程同步,我们经常会想到两个关键字:volatile和synchronized,那么这两者有什么区别呢? 1. volatile修饰的变...
2018-06-26 20:39:30 134
转载 JAVA多线程之volatile 与 synchronized 的比较
一,volatile关键字的可见性要想理解volatile关键字,得先了解下JAVA的内存模型,Java内存模型的抽象示意图如下:从图中可以看出:①每个线程都有一个自己的本地内存空间--线程栈空间???线程执行时,先把变量从主内存读取到线程自己的本地内存空间,然后再对该变量进行操作②对该变量操作完后,在某个时间再把变量刷新回主内存关于JAVA内存模型,更详细的可参考: 深入理解Java内存模型(一...
2018-06-26 20:39:16 125
转载 各种锁名词详解
重入锁在并发中,无论是synchronized还是lock也好,内部都有重入的特性,而且特性的含义是一样的。重入(re-entrant),同一个线程可以获取已持有的锁;已知的有两种出现场景: 1、加锁方法调用另外一个加锁方法; 2、递归调用加锁方法;归根结底,就是一个加锁方法调用了另外一个加锁方法;如果没有重入的特性:public class ReentrantTest { publi...
2018-06-24 11:09:40 892
转载 ConcurrentHashMap原理
一、背景:线程不安全的HashMap 因为多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。 效率低下的HashTable容器 HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下。因为当一个线程访问HashTable的同步方法时,其他...
2018-06-24 10:54:46 138
转载 HashMap和Hashtable的区别
HashMap和HashTable有什么不同?在面试和被面试的过程中,我问过也被问过这个问题,也见过了不少回答,今天决定写一写自己心目中的理想答案。代码版本JDK每一版本都在改进。本文讨论的HashMap和HashTable基于JDK 1.7.0_67。源码见这里1. 时间HashTable产生于JDK 1.1,而HashMap产生于JDK 1.2。从时间的维度上来看,HashMap要比HashT...
2018-06-24 10:21:21 219
转载 BlockingQueue
前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。认识BlockingQueue阻塞队列,顾名思义,首先它是一个队列,而一个队列在数据结构中所起...
2018-06-24 10:12:41 246
转载 ConcurrentLinkedQueue原理
前言我们要实现一个线程安全的队列有两种实现方式一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循环CAS的方式来实现,本节我们就来研究下ConcurrentLinkedQueue是如何保证线程安全的同时又能高效的操作的。1.ConcurrentLinkedQueue的结构Co...
2018-06-24 09:54:18 551 1
转载 CopyOnWriteArrayList原理
Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。...
2018-06-24 09:29:35 174
转载 数组和集合的区别
数组和集合的定义一、数组数组是java语言内置的数据类型,他是一个线性的序列,所有可以快速访问其他的元素,数组和其他语言不同,当你创建了一个数组时,他的容量是不变的,而且在生命周期也是不能改变的,还有JAVA数组会做边界检查,如果发现有越界现象,会报RuntimeException异常错误,当然检查边界会以效率为代价。二、集合JAVA还提供其他集合,list,map,set,他们处理对象的时候就好...
2018-06-24 09:19:39 75147 19
转载 2018版本IDEA中导出war包
注:IDEA版本14.1.71.进入项目的Project Structure界面,进行如下4步操作2.通过上述4步操作后,进入如下界面注:1.修改war包的名称(根据实际情况);2.如果出现WEB-INF文件夹则删除,否则不做操作;3.创建META-INF文件(必须)。3.选择如下的路径创建META-INF文件,IDEA会自动创建该文件4.在操作完上面3大步骤后,进入如下界面,进行如图所示的操作注...
2018-06-22 21:23:34 20549 4
转载 HashMap的实现原理和底层数据结构
看了下JAVA里面有HashMap、Hashtable、HashSet三种hash集合的实现源码,这里总结下,理解错误的地方还望指正HashMap和Hashtable的区别HashSet和HashMap、Hashtable的区别HashMap和Hashtable的实现原理HashMap的简化实现MyHashMap HashMap和Hashtable的区别两者最主要的区别在于Hashtable是线程...
2018-06-21 21:24:33 207
转载 Git vs SVN
Git是目前世界上最先进的分布式版本控制系统,其实 Git 跟 SVN一样有自己的集中式版本库或服务器,但是Git 更倾向于被使用于分布式模式,也就是每个开发人员从中心版本库/服务器上chect out代码后会在自己的机器上克隆一个跟中心版本库一模一样的本地版本库。可以这样说,如果你被困在一个不能连接网络的地方时,你仍然能够提交文件,查看log(历史版本记录),创建项目分支等。Git 和 SVN的...
2018-06-18 13:47:37 196
转载 java.lang.UnsupportedClassVersionError: javax/servlet/ServletContext : Unsupported major.minor versi
在运行junit测试的时候,发生一下异常:[java] view plain copyjava.lang.UnsupportedClassVersionError: javax/servlet/ServletContext : Unsupported major.minor version 51.0 at java.lang.ClassLoader.defineClass1(Native...
2018-06-09 19:08:33 1590 3
转载 nexus应用
1. 环境搭建 1.1 下载 http://www.sonatype.org/nexus/ NEXUS OSS [OSS = Open Source Software,开源软件——免费] NEXUS PROFESSIONAL -FREE TRIAL [专业版本——收费]。 所以选择NEXUS OSS 找到Download andInstall Nex...
2018-06-09 17:07:08 1951
转载 MAVEN搭建SSM项目
简单谈一下maven搭建 ssm 项目 (使用数据库oracle,比 mysql 难,所以这里谈一下)在创建maven 的web项目时,常常会缺了main/java , main/test 两个文件夹。解决方法:① : 在项目上右键选择properties,然后点击java build path,在Librarys下,编辑JRE System Library,选择workspace default...
2018-06-09 14:30:09 227
转载 Myeclipse XSD配置XML自动提示
公司是使用XMl来开发项目的,但是一直没有格式化的验证和提示,所以就自己写了个XSD,使用的时候需要进行配置,上网找了一下都只有如何配置到XMl Catalog中,但是只是配置到XMl Catalog 又无法正常提示,终于在 http://wenku.baidu.com/view/f2559c0ea300a6c30c229f55.html?from=search 找到方法,自己也整理了一份。1、注...
2018-05-29 19:30:35 206
转载 String类的intern()方法
0.引言什么都先不说,先看下面这个引入的例子:[java] view plain copyString str1 = new String("SEU")+ new String("Calvin"); System.out.println(str1.intern() == str1); System.out.println(str1 == "SEUCalvin"); 本人JDK版本1...
2018-05-13 21:56:35 155
转载 拦截器与过滤器的区别
拦截器与过滤器的区别总结:过滤器在web.xml中配置:(1)因为一开始在过滤器中映射的url-pattern填写路径是*.action。所有的action要经过它的过滤。<url-pattern>*.action</url-pattern>(2)因为在web.xml中配置了过滤器,所以,执行过程所有程序都经过struts2过滤器(路径是:/*),首先过滤自己相关的程序,如...
2018-05-13 09:43:21 282
转载 MyEclipse2014 svn安装
打开myeclipse的help---install from site 点击add弹出对话框在输入框中输入对应内容http://subclipse.tigris.org/update_1.10.x点击OK之后,会节目会刷新出两个选项,需要选中的点击next,出现许可的时候选中同意,一直结束等待安装完成就可以啦,过程有些慢,需要联网,耐心等待就可以了。重新启动myeclipse中间出现了一个警告...
2018-05-08 14:12:13 1005
转载 @responseBody注解的使用
1、 @responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML 数据,需要注意的呢,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。2、 @RequestMapping("/log...
2018-04-30 20:13:25 121
转载 io编码问题
编码 什么是编码? 计算机中存储的都是二进制,但是要显示的时候,就是我们看到的却可以有中国 ,a 1 等字符 计算机中是没有存储字符的,但是我们却看到了。计算机在存储这些信息的时候,根据一个有规则的编号,当用户输入a 有a对映的编号,就将这个编号存进计算机中这就是编码。 计算机只能识别二进制数据。 为了方便应用计算机,让它可以识别各个国家的文字。就将各个国家的文字用数字来表示,并...
2018-03-23 20:24:47 262
转载 IO/InputStreamReader、OutputStreamWriter编码问题分析
一、理论:1、字符流和字节流区别是什么?字符流=字节流+编码集,在实际读取的时候其实字符流还是按照字节来读取,但是会更具编码集进行查找编码集字典解析相应的字节,使得一次读取出一个字符;2、什么是转换流?转换流就是原本是字节流,但是读取到的数据是字符,所以我们希望使用字符流来进行操作,那么就可以使用转换流进行转换;转换流=字节流+编码集。转换流的特点是可以指定编码集。3、转换流的作用:(1)、从控制...
2018-03-23 20:12:56 664
转载 InputStreamReader/OutputStreamWriter乱码问题解决
/**InputStreamReader参数charset要跟文件编码格式一致。 InputStreamReader读的时候才不会乱码。*OutputStreamWriter参数charset设置编码例如UTF-8。在操作系统打开文件时候也要用相应编码打开才不会乱码。*InputStreamReader:读操作时编码要与文件编码一致。OutputStreamWriter写操作时设置编码打开文件时也...
2018-03-23 20:07:49 1308
转载 Java编码格式分析
几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言。由于人类的语言有太多,因而表示这些语言的符号太多,无法用计算机中一个基本的存储单元—— byte 来表示,因而必须要经过拆分或一些翻译工作,才能让计算机能理解。我们可以把计算机能够理解的语言假定为英...
2018-03-23 20:07:01 165
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人