- 博客(156)
- 资源 (2)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 JDK 8 ArrayList 源码解析
【本文是为了梳理知识的总结性文章,总结了一些自认为相关的重要知识点,只为巩固记忆以及技术交流,忘批评指正。其中参考了很多前辈的文章,包括图片也是引用,如有冒犯,侵删。】0存储结构从底层实现来看,Array是数组实现的,与数组不同的是,其容量是可以改变的。集合扩容的时候会创建更大的数组空间,把原有数据复制到新数组中。ArrayList支持对元素的快速随机访问,但是插入和删除时速度通常很慢...
2019-04-12 21:59:28
1412
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 JDK 8 HashMap 源码解析
【本文是为了梳理知识的总结性文章,总结了一些自认为相关的重要知识点,只为巩固记忆以及技术交流,忘批评指正。其中参考了很多前辈的文章,包括图片也是引用,如有冒犯,侵删。】目录0存储结构1 类定义2静态常量3 属性4构造函数5 链表节点6 功能方法确定哈希桶数组索引位置hash扰动函数计算方法取模运算优化7 常用方法get方法put方法...
2019-04-08 22:34:24
400
原创 Java 常量池总结
【本文是为了梳理知识的总结性文章,总结了一些自认为相关的重要知识点,只为巩固记忆以及技术交流,忘批评指正。其中参考了很多前辈的文章,包括图片也是引用,如有冒犯,侵删。】对于Java中的常量池,一直有点困惑,看完网上的一些相关博客后,也似懂非懂,于是自己总结一下。关于常量池带着以下几个问题来逐步解答。1什么是常量池?常量池毫无疑问是用来存放常量的,那么那些是常量呢?常量池主要用于存...
2019-07-18 17:11:25
299
原创 阻塞非阻塞与同步异步的区别?
之前一直对阻塞非阻塞与同步异步这两对概念理解不深,总是把它们搞混。看了网上一些相关的解释之后,发现大家站在不同的角度得出了不同的理解,这个问题没有确切的答案,只能根据场景不同做出解释。进程间的通信进程间的通信时通过 send() 和 receive() 两种基本操作完成的。具体如何实现这两种基础操作,存在着不同的设计。消息的传递有可能是阻塞的或非阻塞的,也被称为同步或异步的:阻塞式发...
2019-07-02 11:17:29
3117
转载 不可不说的Java“锁”事
转自美团技术团队:https://tech.meituan.com/2018/11/15/java-lock.html前言Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8和Netty 3.10.6)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。Java中往往是按照是否含有某一...
2019-06-12 22:41:28
344
原创 【微服务】Dubbo 和 Spring Cloud 比较
【本文是为了梳理知识的总结性文章,总结了一些自认为相关的重要知识点,只为巩固记忆以及技术交流,忘批评指正。其中参考了很多前辈的文章,包括图片也是引用,如有冒犯,侵删。】当前开源上可选用的微服务框架主要有Dubbo、Spring Cloud等,下面对这两个框架做一个简单对比介绍。1概念Dubbo:Apache Dubbo是一款高性能Java RPC框架,之前由阿里巴巴开源,现已成为 Ap...
2019-06-11 22:16:22
1192
原创 Spring MVC 中web容器和IOC容器启动过程
【本文是为了梳理知识的总结性文章,总结了一些自认为相关的重要知识点,只为巩固记忆以及技术交流,忘批评指正。其中参考了很多前辈的文章,包括图片也是引用,如有冒犯,侵删。】1 概念web容器:可以部署多个WEB应用程序的环境,例如Tomcat、weblogic、JBoss等。IOC容器:Inversion of Control容器,是Spring的两大基本功能之一(还有AOP),用来管理...
2019-06-06 22:45:09
991
原创 J2EE 简介
简介Java Platform, Enterprise Edition (Java EE) 是社区驱动的企业软件标准。Java EE 是利用Java Community Process开发的,业界专家、商业组织和开源组织、Java 用户组以及数不清的个人为此做出了巨大贡献。每个版本都集成了符合业界需求的新特性,提高了应用可移植性,提高了开发人员的工作效率。JavaEE是一组建立在Jav...
2019-06-04 21:11:42
21531
1
原创 Java 集合常见面试题
1、ArrayList和LinkedList区别?ArrayList是容量可以改变的非线程安全集合。内部实现使用数组进行存储,集合扩容时会创建更大的数组空间,把原有数据复制到新数组中。ArrayList支持对元素的快速随机访问,但是插入与删除时速度通常很慢,因为这个过程很有可能需要移动其他元素。LinkedList的本质是双向链表。与ArrayList相比,LinkedList的插入和删除...
2019-05-19 16:47:21
801
原创 JDK 8 ConcrrentHashMap 源码解析
【本文是为了梳理知识的总结性文章,总结了一些自认为相关的重要知识点,只为巩固记忆以及技术交流,忘批评指正。其中参考了很多前辈的文章,包括图片也是引用,如有冒犯,侵删。】0存储结构从底层实现来看,ConcurrentHashMap和HashMap一样都是数组+链表+红黑树(JDK1.8为了优化链表查询性能新增红黑树)实现的。1 类定义public class Concu...
2019-05-05 21:51:35
1533
1
原创 JDK 8 TreeMap 源码解析
【本文是为了梳理知识的总结性文章,总结了一些自认为相关的重要知识点,只为巩固记忆以及技术交流,忘批评指正。其中参考了很多前辈的文章,包括图片也是引用,如有冒犯,侵删。】0存储结构TreeMap是一个有序的Map,内部按照Key的排序结果来组织。一般如果没有需要排序的情况下,我们都使用HashMap或者多线程下使用ConcurrentHashMap,因为TreeMap的插入和删除的效率没...
2019-04-22 22:43:16
413
翻译 计算无线信号的传输距离
【译自https://www.electronicdesign.com/communications/understanding-wireless-range-calculations,水平有限,望指正】目录为什么实际通信距离可能不等于声称的距离功率和dBm计算路径损耗解释经验结果天线高度和菲涅耳区总结无线通信设计中的关键计算之一是通信距离,即使得无线通信能够...
2019-04-18 16:51:31
14236
1
原创 数据结构之红黑树Java实现
【本文是为了梳理知识的总结性文章,总结了一些自认为相关的重要知识点,只为巩固记忆以及技术交流,忘批评指正。其中参考了很多前辈的文章,包括图片也是引用,如有冒犯,侵删。】1 红黑树的进化历程1.1 第一阶段:树树是一种常用的数据结构,它是一个由有限节点组成的一个具有层次关系的集合,数据就存在树的这些节点中。最顶层只有一个节点,称为根节点。在分支处有一个节点,指向多个方向,如果某节点下方没...
2019-04-16 22:01:23
852
原创 JDK 8 HashSet 源码解析
【本文是为了梳理知识的总结性文章,总结了一些自认为相关的重要知识点,只为巩固记忆以及技术交流,忘批评指正。其中参考了很多前辈的文章,包括图片也是引用,如有冒犯,侵删。】0存储结构从底层实现来看,HashSet调用了HashMap来存储元素,不过之用到了Key,Value则用一个固定对象替代。由于Map中的key是不可重复的,这和Set不存在重复元素的特点刚好契合。使用HashMap也意...
2019-04-16 21:00:54
301
原创 JDK 8 LinkedList 源码解析
【本文是为了梳理知识的总结性文章,总结了一些自认为相关的重要知识点,只为巩固记忆以及技术交流,忘批评指正。其中参考了很多前辈的文章,包括图片也是引用,如有冒犯,侵删。】0存储结构从底层实现来看,LinkedList是链表实现的,其本质是双向链表。与ArrayList相比,LinkedList的插入和删除速度更快,但是随机访问速度则很慢。LinkedList的优点在于可以将零散的内存单元通...
2019-04-15 22:05:48
473
转载 Leetcode-494-Target-Sum
Leetcode-494-Target-Sum题目如下:You are given a list of non-negative integers, a1, a2, …, an, and a target, S. Now you have 2 symbols + and -. For each integer, you should choose one from + and - as ...
2019-02-28 11:05:57
260
原创 LeetCode 39. Combination Sum 题解
这题有几个主要的点,首先,题目要求输出所有的组合数,而不是数据所有组合总的个数,如果是求个数用动态规划更好解决。但是要输出所有的组合数的话使用回溯法更容易处理。其次,题目要求不能包含有重复的组合,这是解决这个题目的一个难点。最后,保存解决方案的时候要注意Java里List的浅拷贝和深拷贝,不然浅拷贝最后得到空值。解法:其实回溯的方法还是比较简单的,为了后面处理的适合容易去重...
2019-01-03 11:24:13
231
原创 Java new 背着我们干了什么
new是 Java 最常用的关键字之一,我们使用new创建对象。我们经常像下面代码一样创建一个对象:Dogdog=newDog();只需一行代码,我们就能创建出一只狗,是不是很简单!为什么这么简单?答:不简单就没人用。Java 作为面向对象语言,提倡封装,如果自己的语法设计都做不到,那还怎么要求程序员们做到。创建对象这么常用而且模板化的操作,如...
2017-04-27 12:14:09
996
1
原创 【单例深思】枚举实现单例原理
单例的枚举实现在《Effective Java》中有提到,因为其功能完整、使用简洁、无偿地提供了序列化机制、在面对复杂的序列化或者反射攻击时仍然可以绝对防止多次实例化等优点,单元素的枚举类型被作者认为是实现Singleton的最佳方法。其实现非常简单,如下:public enum Singleton { INSTANCE; private Singl
2017-04-26 20:49:58
18301
9
原创 【单例深思】单例与序列化
在前面的文章中提到,序列化会破坏单例模式,下面用静态内部类的实现方式,说明序列化对单例的影响:public class Singleton implements Serializable{ private static class SingletonHolder { private static final Singleton INSTANCE = ne
2017-04-25 17:21:09
1196
原创 【单例深思】静态内部类实现详解
静态内部类实现是我个人比较推荐的,其实现如下:public class Singleton { private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } private Singleton()
2017-04-12 17:28:26
1756
2
原创 【单例深思】双重检测锁与Java内存模型
双重检测锁 使用粒度较小的锁(缩小锁的范围)解决了 懒汉式改进版 中存在的性能问题,以提高并发量。双重检测锁实现如下:public class Singleton { // 1 private static Singleton singleton; // 2 private S
2017-04-12 16:11:06
869
原创 【单例深思】懒汉式改进版与内置锁
我们知道懒汉式的实现是延迟加载(Lazy Loading),但是不是线程安全的,下面我们深入研究下为什么。懒汉式的实现如下:public class Singleton { private static Singleton singleton; private Singleton(){} public s
2017-04-08 16:46:29
1291
1
原创 【单例深思】饿汉式与类加载
我们知道饿汉式的实现是线程安全的,没有延迟加载(Lazy Loading),下面我们深入研究下为什么。饿汉式的实现如下:public class Singleton { private static Singleton singleton = new Singleton(); private Singleton() {} public st
2017-04-08 15:10:55
4237
原创 【单例深思】Java 单例模式全解
什么是单例模式?单例模式 是一种对象创建模式,它用于产生一个对象的具体实例,它可以确保系统中一个类只产生一个实例,并提供一个访问它的全局访问点。单例模式的用途?用于创建只需要一个实例的场景。怎么实现单例模式?单例模式的实现中有几个共同特点:使用 private 声明类构造函数,这样就不能通过new 声明这个
2017-04-07 17:05:19
684
翻译 如何使用Spring FactoryBean?
1.概述 Spring bean容器中有两种bean:普通bean和工厂bean。Spring直接使用前者,而后者自身可以生成由框架管理的对象。简单地说,我们可以通过实现org.springframework.beans.factory.FactoryBean接口来构建一个工厂bean 。 2.工厂Bean基础 2.1实现一个FactoryBean首先看
2017-04-06 16:10:39
2895
翻译 FactoryBean 是什么
本文翻译自:https://spring.io/blog/2011/08/09/what-s-a-factorybean在这篇文章中,我将介绍Spring的 org.springframework.beans.factory.FactoryBean 接口。该接口的定义是:public interface FactoryBeanT> { T getObject() throws
2017-04-06 15:22:16
1528
原创 Spring AOP 演化过程(二):基于代理的经典Spring AOP
Spring的经典AOP编程模型在现在看来已经过时,如果有人在写代码的时候还使用这种方式实现AOP,那真是跟自己过不去。但是如果我们想要读Spring AOP 部分的源码时,如果仅仅了解声明式AOP和基于注解的AOP,那经典的AOP模型所使用的类会给我们带来疑惑,所以,还是简单了解一下Spring AOP的历史,重温一下经典。Spring经典的AOP因为直接使用 Proxy
2017-04-05 21:55:47
818
转载 Java事务之八——分布式事务(Spring+JTA+Atomikos+Hibernate+JMS)
Java事务之八——分布式事务(Spring+JTA+Atomikos+Hibernate+JMS)本文转载自:http://www.cnblogs.com/davenkin/archive/2013/03/19/java-tranaction-8.html,侵删。 在本系列先前的文章中,我们主要讲解了JDBC对本地事务的处理,本篇文章将讲到一个分布式事务的例
2017-04-02 21:03:00
374
转载 Java事务之七——使用Transactional注解
Java事务之七——使用Transactional注解本文转载自:http://www.cnblogs.com/davenkin/archive/2013/02/24/java-tranaction-7.html,侵删。 在本系列的上一篇文章中,我们讲到了使用动态代理的方式完成事务处理,这种方式将service层的所有public方法都加入到事务中,这显然不是我们
2017-04-02 21:01:32
1280
转载 Java事务之六——使用动态代理(Dynamic Proxy)
Java事务之六——使用动态代理(Dynamic Proxy)本文转载自:http://www.cnblogs.com/davenkin/archive/2013/02/24/java-tranaction-6.html,侵删。 在本系列的上一篇文章中,我们讲到了使用Template模式进行事务管理,这固然是一种很好的方法,但是不那么完美的地方在于我们依然需要在s
2017-04-02 21:00:34
476
转载 Java事务之五——Template模式
Java事务之五——Template模式 本文转载自:http://www.cnblogs.com/davenkin/archive/2013/02/23/java-transaction-5.html,侵删。 在本系列的上一篇文章中,我们讲到了使用TransactionManger和ConnectionHolder完成线程安全的事
2017-04-02 20:59:36
496
转载 Java事务之四——成功的案例
Java事务之四——成功的案例本文转载自:http://www.cnblogs.com/davenkin/archive/2013/02/23/java-tranaction-4.html,侵删。 在本系列的上一篇文章中我们讲到,要实现在同一个事务中使用相同的Connection对象,我们可以通过传递Connection对象的方式达到共享的目的,但是这种做法是丑陋
2017-04-02 20:58:27
555
转载 Java事务之三——丑陋的案例
Java事务之三——丑陋的案例 本文转载自:http://www.cnblogs.com/davenkin/archive/2013/02/16/java-tranaction-1.html,侵删。 在本系列的上一篇文章中,我们看到了一个典型的事务处理失败的案例,其主要原因在于,service层和各个DAO所使用的Connection是不
2017-04-02 20:57:23
377
转载 Java事务之二——失败的案例
Java事务之二——失败的案例本文转载自:http://www.cnblogs.com/davenkin/archive/2013/02/17/java-transaction-2.html,侵删。 在本系列的上一篇文章中,我们讲到了Java事务处理的基本问题,并且讲到了Service层和DAO层,在本篇文章中,我们将以BankService为例学习一个事务处理失败的
2017-04-02 20:55:55
483
转载 Java事务之一——Java事务的基本问题
Java事务之一——Java事务的基本问题 本文转载自:http://www.cnblogs.com/davenkin/archive/2013/02/16/java-tranaction-1.html,侵删。 Java中的事务处理有多简单?在使用EJB时,事务在我们几乎察觉不到的情况下发挥着作用;而在使用Spring时,也只需要配置一个TransactionMana
2017-04-02 20:50:15
507
原创 在C#客户端用HTTP上传文件到Java服务器
最近在做C / S 开发,需要在C#客户端上传文件到Java后台进行处理。对于较大的文件我们可以直接用FTP协议传文件,较小的文件则可以向B / S 一样用HTTP上传。首先,由于要传文件,我们需要用 POST 来发送数据。GET 有长度限制,而且数据跟在URL后面。既然要发送POST请求,我们先来看看POST 请求的报文格式。HTTP 报文介绍先写一个简单的Html 页面发送...
2016-01-16 12:30:41
6649
1
原创 2016预读书单
2016年的书单还是以技术为主,希望技术能上一个层次。《Servlet 规范 3.1》 《深入剖析Tomcat》 《高性能MySql》 《Spring 技术内幕》
2016-01-10 12:33:20
648
原创 WebBrowser(IE) 与 JS 相互调用
在开发中我们经常将WebBrowser控件嵌入Winform 程序来浏览网页,既然是网页那么少不了JS。下面就让我们来说说他们两之间的相互调用。在C#封装的浏览器内核中,Chromium 内核封装有Xilium.Cefglue、Cefsharp,Webkit 内核封装 Webkit.Net 、OpenWebKitSharp等。但是说到和JS的调用,不得不说还是IE 的WebBrowser ...
2016-01-09 13:39:42
8438
原创 使用Inno SetUp脚本打包Winform程序
在开发桌面程序时,往往需要用到打包工具将程序打包为exe可执行文件。之前在项目中用了下 InstallShield Limited Edition for Visual Studio 2015,它的功能很强大,但是需要付费使用,而且有些细粒度的操作比较复杂。后来,我发现了一款简单方便的打包工具,即我们今天的主角Inno SetupInno Setup 支持pascal脚本,这
2016-01-09 11:35:15
3223
3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人