
java基础
文章平均质量分 95
不能说的秘密go
求知若饥,虚心若愚
展开
-
Java为什么要将String设置为不可变对象?
在探讨为什么要将String设置为不可变对象前,先考虑不可变对象有什么好处,在什么情况下应该用。相对于可变对象,不可变对象有很多优势:不可变对象可以提高对象的效率和安全性。如果你知道一个对象是不可变的,那么需要拷贝这个对象的内容时,就不用复制它的本身而只是复制它的地址,复制地址(通常一个指针的大小)需要很小的内存效率也很高。对于同时引用这个对象的其他变量也不会造成影响。不可变对象对于...原创 2019-12-29 16:03:58 · 1236 阅读 · 0 评论 -
Spring容器整合WebSocket
WebSocker是一个保持web客户端与服务器长链接的技术。这样在两者通信过程中如果服务器有消息发送给客户端,就无需等待web客户端发送一个请求了(HTTP协议是请求相应式,如果没有Web客户端的请求,服务器是无法对客户端做相应的)。单独的部署一个WebSocket服务器很简单,只需要几个注解即可。那么当在Spring项目中如何使用WebSocket呢?也行你会想,没什么不同啊。一样通过WebSo原创 2016-09-18 15:42:51 · 14843 阅读 · 6 评论 -
Java中高效的并发容器----ConcurrentHashMap
并发编程大师Doug Lea为JDK提供了一些非常优秀的并发容器和框架,让我们通过一个较简单的类ConcurrentHashMap来见识大师操刀编写的并发容器和框架的精妙。HashMap的不足HashMap的最大的问题就是线程不安全,虽然Map接口提供了一个线程安全的类HashTable,但HashTable类效率非常低下。于是,ConcurrentHashMap便闪亮登场。原创 2016-08-24 23:30:18 · 2843 阅读 · 0 评论 -
如何使用Lock接口来实现等待/通知机制
关于java中的等待/通知机制(http://blog.youkuaiyun.com/canot/article/details/50879963)在之前的解决方案中都是基于synchronized以及Object类的方法wait(),wait(long timeout),notify()以及notifyAll()方法来实现。现在我们了解了java中的另一种锁Lock之后我们尝试能不能用Lock代替synchr原创 2016-08-09 00:15:29 · 2319 阅读 · 0 评论 -
Java中的阻塞队列
阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。原创 2016-08-27 21:35:49 · 1811 阅读 · 0 评论 -
深入分析HaspMap源码
1.分析HaspMap的构造器前面分析HashMap的put(K key,V value)源码的时候发现,其中有两个特殊的变量: size:该变量保存了该HashMap中所包含的key-value对的数量。 threshold:该变量包含了HashMap能容纳的key-value对的极限,它的值等于HashMap的容量乘以负载因子(load factor)。 在HashMap的a原创 2016-04-24 21:43:14 · 1934 阅读 · 0 评论 -
Linux启动Eclipse时指定jdk的三种方法
更换JDK版本之后的启动eclipse报错JVM terminated. Exit code=13原创 2016-04-06 00:27:24 · 8743 阅读 · 0 评论 -
Java中的锁-Lock接口解析
提到java中的锁,相信大家都知道它是用来控制多个线程访问共享资源的方式(即锁能防止多个线程同时访问空享资源而出现线程安全问题)。在实践过程中使用最多的也最常见的锁就是 synchronized 在jdk1.5之前也仅仅有这一种锁而已。在jdk1.5之后,并发包中新增了Lock接口原创 2016-07-27 23:51:13 · 20976 阅读 · 2 评论 -
Java中 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念
PO(persistant object) 持久对象在 o/r 映射的时候出现的概念,如果没有 o/r 映射,没有这个概念存在了。通常对应数据模型 ( 数据库 ), 本身还有部分业务逻辑的处理。可以看成是与数据库中的表相映射的 java 对象。最简单的 PO 就是对应数据库中某个表中的一条记录,多个记录可以用 PO 的集合。 PO 中应该不包含任何对数据库的操作。转载 2016-06-17 10:27:14 · 12738 阅读 · 1 评论 -
Spring提供的单元测试
在使用传统Junit做单元测试时,一个明显的不足就是在Junit中不能对使用注解的类进行注入,而一旦我们项目使用Spring的话,必然会有大量的使用注解进行注入的情况,此时传统的Junit几乎是废的原创 2016-06-11 15:38:11 · 3998 阅读 · 0 评论 -
HashMap和HashSet(深入HashMap源码分析HashMap元素的存储)
深入HashMap源码分析HashMap元素的存储原创 2016-04-24 16:55:09 · 969 阅读 · 0 评论 -
JDK集合分析Set和Map的关系(自己实现Set到Map的扩展)
Set代表的是一种集合元素无序,集合元素不可重复的集合,Map则代表一种由多个Key-Value对组成的集合,Map集合类似于传统的关联数组。表面上看,Map和Set毫无关联,但其实Map和Set之间有莫大的关联,可以说,Map是Set的扩展。Set集合的继承体系Map集合的继承体系仔细观察上述两个集合的继承体系,发现Map和Set接口,实现类的类名几乎完全相试,把Map后缀改为Set后缀即可:原创 2016-04-24 14:24:30 · 1562 阅读 · 0 评论 -
生产者/消费者模式(阻塞队列) 一个经典的并发模型
生产消费者模式也是关于线程阻塞的问题,生产消费者模式是通过观察者模式来实现的。之前在编写一个通讯软件的时候用到了这种模式,通过维护一个BlockingQueue来完成Socket的消息发送原创 2016-05-30 22:57:01 · 14425 阅读 · 1 评论 -
使用责任链模式实现一个符合开闭原则的判断流程
最近项目中的一个需求就是对于一串数据,通过一系列的判断条件来判断其是不是符合要求的。这个判断条件是不断变化的。也就是说随时要增加新的判断条件或者移除旧的判断条件,也行我们会觉得写一大串if…else if ….不就解决了吗?当然,if….else if可以解决问题,但软件有一个重要的原则:开闭原则。原创 2016-10-12 17:29:33 · 1435 阅读 · 1 评论 -
JDK8新特性Optional 类
Optional不是对null关键字的一种替代,而是对于null判定提供了一种更加优雅的实现。NullPointException可以说是所有java程序员都遇到过的一个异常,虽然java从设计之初就力图让程序员脱离指针的苦海,但是指针确实是实际存在的,而java设计者也只能是让指针在java语言中变得更加简单、易用,而不能完全的将其剔除,所以才有了我们日常所见到的关键字null。原创 2016-10-28 14:44:28 · 12238 阅读 · 1 评论 -
从Spring AOP的原理理解@Transactional失效问题
在正确配置了Spring事务管理后,或许在某些场景下,你可以写出如下代码:class T { public int createFirst(){ //dosometing.... try { this.createSecond(); }catch (Exception e){ throw e; ...原创 2018-06-29 13:25:17 · 6578 阅读 · 0 评论 -
主流的hash算法概述及在JDK Map中的应用
hash算法的应用场景Java中的Map实际是一个“散列表”的数据结构,散列表是逻辑上由一系列可存放词条(或其引用)的单元组成,故这些单元也称作桶(bucket) —— 一般都使用线性表来实现。一组词条在散列表内部的具体分布,取决于所谓的散列(hashing)方案:事先在词条与桶地址之间约定的某种映射关系,可描述为从关键码空间到桶数组地址空间的函数: hash() 。这里的hash()...原创 2018-05-21 15:59:57 · 1200 阅读 · 0 评论 -
详解 Java ClassLoader
1.类加载器基本概念 顾名思义,类加载器(class loader)用来加载 Java 类到 Java 虚拟机中。一般来说,Java 虚拟机使用 Java 类的方式如下:Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,并转换成 java.lang.Class 类的一个实例。每个这样的实例原创 2016-03-31 23:21:18 · 1289 阅读 · 0 评论 -
Java序列化技术性能分析(JDK原生与Protostuff)
熟悉Java的朋友应该知道Java有一个叫序列化的技术,即把一个Object转换为可保存,可传输的流数据。相应的,同时存在反序列化,即将流数据转换为Object类,而在转换的过程中,该Object保持者其自身的状态。不会应该序列化或者反序列化而丢失。通常在缓存中,RPC(远程调用),或者长久保存会话信息时,大有用处。原创 2016-12-19 23:33:39 · 8441 阅读 · 0 评论 -
数据库连接池HikariCP创建数据源demo
HiKariCP是数据库连接池的一个后起之秀,号称性能最好,可以完美地PK掉其他连接池。官网:https://github.com/brettwooldridge/HikariCPMaven原创 2016-05-21 15:46:57 · 12672 阅读 · 0 评论 -
JDK8新特性之Lambda表达式
第一次是接触Lambda表达式是在TypeScript中(javaScript的超集中),当时是为了让TypeScript的this方法外而不是本方法内所使用的。使用过后突然想到Lambda不是JDK8的重量级新特性么?于是感觉查阅相关资料并记录下来原创 2016-10-28 00:50:07 · 2759 阅读 · 0 评论 -
一篇文章学会日志logback的使用
LogBack使用教程(精简版)原创 2016-11-25 20:55:38 · 6870 阅读 · 2 评论 -
使用Redis的Pub/Sub来实现类似于JMS的消息持久化
这篇文章主要是关于其思路(Redis的Pub/Sub的消息持久化)的代码实现原创 2016-07-26 22:48:49 · 5408 阅读 · 0 评论 -
Spring客户端对Redis 缓存的使用(Java客户端等Redis3.X RedisCluster模式的支持)
最近项目中使用Spring并使用Redis作为缓存,参考网上的一些做法。发现Spring根本启动不了,根据抛出错误信息感觉是需要配置Redis Cluster模式原创 2016-09-29 15:06:05 · 7662 阅读 · 0 评论 -
秒杀系统中如何动态生成下单随机URL
秒杀系统中通常会避免用户之间访问下单页面的URL(避免使用爬虫来造成不公平,参考阿里月饼事件)。所有需要将URL动态化,即使秒杀系统的开发人员也无法在知晓在秒杀开始时的URL。解决办法是在获取秒杀URL的接口中,返回一个服务器端生成的随机数,并在下单URL中传递该参数完成下单。原创 2017-01-01 17:02:35 · 11673 阅读 · 12 评论 -
线性表学习笔记
Java集合中的List代表一种集合元素允许重复,允许有序的集合。因此,可以通过下标索引来访问List集合中的元素。那么在什么情况下需要使用List集合?如果有一组数据节点,其中多个数据节点之间有松散的一对一关系,类似于A数据节点之后是B数据节点的这种关系,我们应该使用List的集合来保存。换一个角度来看,存在这种松散的,一对一关系的多个数据节点就是典型的线性结构,应该使用线性表来保存它们。Java原创 2017-01-04 00:04:44 · 2349 阅读 · 0 评论 -
JDK8 新特性流式数据处理
在学习JDK8新特性Optional类的时候,提到对于Optional的两个操作映射和过滤设计到JDK提供的流式出来。这篇文章便详细的介绍流式处理原创 2016-10-28 16:14:26 · 24257 阅读 · 3 评论 -
volatile关键字解析(jdk1.5之后)
学习过并发编程的同学应该对volatile关键字并不陌生。它也是用来保证多线程读写数据时保证数据的一致性,但它不如synchronized强大。synchronized是在执行代码块或是方法体时中隐式的加锁而禁止其他线程来访问。而volatile仅仅是对某个变量的修改及时的可见于其他的线程原创 2016-05-02 09:44:19 · 5763 阅读 · 3 评论 -
Java NIO学习笔记(二) Channel与Buffer
Java NIO中数据的读写操作始终是与缓冲区相关联的.数据是从通道读入缓冲区,从缓冲区写入到通道中的。缓冲区是定长的,基本上它只是一个列表,它的所有元素都是基本数据类型.缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存。原创 2016-04-30 13:01:57 · 1831 阅读 · 0 评论 -
java线程池---编写自己的线程池
java线程池---编写自己的线程池原创 2016-03-16 12:25:57 · 13492 阅读 · 13 评论 -
ThreadLocal类的使用详解
ThreadLocal的使用原创 2016-02-12 13:54:57 · 1556 阅读 · 0 评论 -
java网络编程(二)复用Socket连接以及使用多线程完成多个客户端的连接
java网络编程(二)复用Socket连接以及使用多线程完成多个客户端的连接原创 2016-01-26 16:20:47 · 6489 阅读 · 0 评论 -
java网络编程(一)使用TCP协议完成客户端与服务端的数据传递
java网络编程(一)使用TCP协议完成客户端与服务端的数据传递原创 2016-01-26 14:59:07 · 21926 阅读 · 2 评论 -
java核心技术之内部类
java内部类原创 2015-12-24 20:27:38 · 793 阅读 · 0 评论 -
java核心技术之反射
java核心技术之反射原创 2015-12-24 19:33:43 · 1400 阅读 · 0 评论 -
java核心API之String,StringBuffer和StringBuilder以及equals与==的区别和联系
java核心API之String,StringBuffer和StringBuilder以及equals与==的区别和联系原创 2015-12-24 15:35:35 · 2675 阅读 · 0 评论 -
java解析json字符串的两种方法详解(Android通用)
java解析json字符串的两种方法详解(Android通用)原创 2016-01-23 20:20:20 · 16192 阅读 · 2 评论 -
java集合基础总结
java集合的简单总结原创 2015-12-22 15:17:02 · 815 阅读 · 0 评论 -
设计模式之观察者设计模式
设计模式之观察者模式原创 2016-01-01 16:11:33 · 585 阅读 · 0 评论 -
java 多线程机制简单总结
java多线程简单总结原创 2015-12-30 23:33:33 · 1328 阅读 · 0 评论