- 博客(38)
- 资源 (2)
- 收藏
- 关注
转载 Java排序算法
Java排序算法排序算法(二)排序算法(三)排序算法(四)排序算法(五)-双调排序排序算法(六)-TimSort排序算法(七)-双轴快速排序排序算法(八)-三路快速排序排序算法(九)-Java源码中的DualPivotQuicksortJava-sort和parallelSort接口及其实现...
2019-11-06 22:22:43
269
转载 Zookeeper详解
Zookeeper初探Zookeeper Java客户端CuratorZookeeper应用之配置中心Zookeeper应用之分布式锁Zookeeper应用之注册中心
2019-08-24 23:02:46
185
原创 Java8 接口
前言Java 8已经推出相当长一段时间了,其中,接口部分有一些变化。我们来研究下它。问题我们知道,对于一个接口,如果我们声明好后,如果再想对其增加新的方法是困难的,因为我们要改变所有其实现类,也就是每个实现类都要对其新方法进行实现。如下图:这显然是不现实的,如果我们直接把方法写在实现类里,接口中没有此方法,就破坏了我们的多态性。对于某些已经发布的应用,无论哪种做法都是比较繁重且不被推荐...
2018-10-14 12:18:12
383
原创 Callable原理分析
前言今天我们来分析实现多线程的一种方式,实现Callable接口。这种方式有种特殊的地方,就是可以拿到线程返回值。具体怎么实现的呢?我们来研究下。栗子我们先举个简单的栗子来看下Callable接口吧。要首先明白,线程池提交实现Callable接口的线程后会返回一个Future对象,这个对象里包含程序的运行结果。public class CallableTest { public ...
2018-10-14 12:15:59
2438
原创 一道Java试题引发的思考
前言无意中看到了自己入门Java时的一本Java基础书,看到了其中一个小结的习题,颇为简单。求一个数组所有数据的和。分析那时入门Java,看到以前自己在书上写下的for循环。大致如下: public static Long sum(int [] numbers){ long result=0L; for(int i=0;i<numbers.le...
2018-10-14 12:13:27
361
原创 Spring Transactional注解
前言使用@Transactional 注解有一段时间了,今天来对它进行下总结。再说这个之前先说下事务。事务的基本要素(ACID)**原子性(Atomicity):**事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。...
2018-10-14 12:10:31
676
原创 一道面试题引发的思考(递归)
前言某日,去某互联网公司面试,被问到了如下一道面试题:题目很简单,有一队人,已知第一个人8岁,后一个人比前一个人大两岁,以此类推,问第8个人多少岁?第N个人多少岁。我拿过笔和纸,不假思索的写下了如下答案: static int getAge(int n){ if(n==1){ return 8; }else{ ...
2018-10-03 15:57:56
679
原创 基于注解的通用数据验证
前言在项目开发交互过程中,难免会遇到一些数据校验。以校验客户端发送数据的合法性,对于一些非空校验,我们也许可以使用@NonNull,@NotNull 等注解,可是对于一些常规的,如手机号,身份证等等的校验,我们就还要判断处理每个请求的参数的合法性。但是合法性的判断是难以避免的,我们是否可以精简工作量、提高工作效率呢。思考我们或许应该从@NonNull @NotNull等其他注解那里受到些启...
2018-09-24 13:01:27
821
1
原创 JDK里那些有趣的代码(1)
前言今天我们来看一下JDK里一些好玩的代码。我们来分析下。在Integer源码里,我们可以看到这样一段代码:final static int [] sizeTable = { 9, 99, 999, 9999, 99999, 999999, 9999999,99999999, 999999999, Integer.MAX_VALUE };// Requires positive...
2018-09-17 00:25:39
1151
转载 (转)线上某应用的FULLGC分析
原文链接:http://jm.taobao.org/2016/03/23/3782/这2天,排除线上某应用启动内存变化频繁的问题时,额外发现了一个fullgc的问题,分享给大家。过程如下:抽了台线上机器,想看下这段时间机器的gc情况,发现里面有好几个FullGc的日志:T23:23:02.009+0800: 21860.015: [Full GC 21860.015: [CMS...
2018-08-31 21:42:59
576
转载 为什么 String hashCode 方法选择数字31作为乘子
原文地址:https://segmentfault.com/a/1190000010799123背景某天,我在写代码的时候,无意中点开了 String hashCode 方法。然后大致看了一下 hashCode 的实现,发现并不是很复杂。但是我从源码中发现了一个奇怪的数字,也就是本文的主角31。这个数字居然不是用常量声明的,所以没法从字面意思上推断这个数字的用途。后来带着疑问和...
2018-08-29 21:31:41
233
原创 ReentrantLock那些事
前言在说ReentrantLock之前,我们先说说并发吧。在JDK1.5之前,并发处理常用的关键字synchronized。使用synchronized关键字,锁的获取和释放是隐式的,synchronized主要通过系统的monitorenter指令实现的。那时候synchronized可以称为重量级锁,执行效率不是很高。而Doug Lea编写的util.concurrent 包被...
2018-08-26 19:26:53
299
原创 ArrayList、LinkedList和Vector分析
前言List家族常用的类有3个,ArrayList、LinkedList、Vector。ArrayList和Vector的底层是基于数组实现的,LinkedList的底层是基于链表实现的。三者的比较如下:ArrayList和LinkedList不是线程安全的,Vector是线程安全的。对于随机访问(get和set),ArrayList的性能要优于LinkedList。对于ad...
2018-08-16 23:34:24
274
原创 StringBuffer和StringBuilder
前言我们知道,对于一般大量频繁的String操作,我们不建议也不应该直接用String进行相加操作,而我们应借助StringBuffer或者StringBuilder来实现。StringBuffer是线程安全的,而StringBuilder是线程不安全的。由此看来,StringBuilder对String的操作快,不安全,适合单线程;StringBuilder对String的操作较St...
2018-08-13 23:25:04
233
原创 Integer源码解析
前言今天我们来分析一下Integer源码。Integer是八种包装类里面的比较常用的一种。那在使用时有什么注意及学习的地方呢?让我们一起来看一下分析Integer是包java.lang下的一个类。public final class Integer extends Number implements Comparable<Integer> {//cod...
2018-08-11 15:41:05
1424
原创 Java 数据结构之链表
前言链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 由于链表不必按照顺序存储,故在插入数据时可以达到O(1)的复杂度,但是查找的时候就需要遍历,时间复杂度为O(n)。...
2018-08-06 20:49:33
1100
原创 一款基于JQuery和bootstrap的单页面WebApp框架
前言现在React.js,Vue.js等MVVM框架逐渐火了起来,今天,先暂时不说这些。我在之前呆过一家公司,他们前端封装了一套基于JQuery和bootstrap的单页面WebApp框架,虽然技术栈方面可能比较落后了,且是基于CSS,Html,JavaScript分层的。与现在的模块化开发有些不同。但是它的一些封装思想是值得我们学习的。而且这个框架,让我这个前端小白(我是后端开发)对...
2018-07-30 19:21:34
7157
原创 Java Stack类简介
前言栈(Stack)是限定只能在一段进行插入和删除操作的线性表。进行插入和删除操作的一端称为“栈顶”(top),另一端称为“栈底”(bottom)。栈的插入操作称为“入栈”(push),栈的删除 操作称为“出栈”(pop)。栈具有后进先出(LIFO),先进后出(FILO)的特性。Stack类Java工具包下的Stack类继承于Vector,由此可见Stack底层是由数组...
2018-07-29 00:25:23
580
原创 Java正则表达式使用
前言什么是正则表达式?正则表达式是一种可以用于模式匹配和替换的强有力的工具。为什么要使用正则表达式?有什么优点缺点?正则表达式在参数校验、参数匹配方面可以发挥重大作用。优点:更少的代码,更高的效率。缺点:需要一定时间的学习及记忆,不然理解晦涩。正则表达式符号及其含义下表是正则表达式的所有符号及含义。常用的符号.表示任意字符\s空格字符(空格键, tab...
2018-07-21 20:24:16
363
原创 Java通过反射获取class信息
前言在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为反射机制。我们知道,Java语言不是动态语言,但是他却有非常突出的动态相关机制,反射机制。代码我们可以通过反射机制获取一个class的相关信息。1. 利用Javassist获取class信息Javassist是一个...
2018-07-15 14:26:48
1574
原创 数据传输安全性保证
前言数据传输过程中,安全性十分重要,尤其是对于一些敏感的用户信息,其安全性保证更应当被重视。现代软件开发中,无论是基于敏捷式的软件开发,或者基于前后端分离的软件开发,都离不开提供对外接口,而请求这些接口数据的安全性应当得到保证。方法保证传输数据的安全性,主要有以下方法:数据加密数据加密一直是保密数据的重要部分,常见的加密算法有可逆加密算法和不可逆加密算法,可逆加密算法...
2018-07-07 17:43:42
10802
原创 UTF-8和GBK等编码格式转换问题
前言在开发过程中,我们可能会遇到Java各种编码格式之间的转换问题。下面我们来研究下UTF-8和GBK等编码格式之间的相互转化。实践在进行编码转换时,我们用ISO-8859-1编码来接受和保存数据,并转换为相应编码。为什么采用ISO-8859-1编码作为中间转存方案呢?下面我们通过程序验证:通过ISO-8859-1转存:public static void tes...
2018-06-24 20:05:28
4108
原创 HashMap实现原理
前言今天我们来聊聊HashMap。Java集合类里的HashMap,实现Map接口,是个非线程安全的类。HashMap允许key和value有null值,且循环遍历为无序的,HashMap底层主要是通过数组+链表实现的,同时JDK8引入红黑树优化,提高HashMap的性能。要了解HashMap,我们可以从几方面下手。分析我们先来看下HashMap的两个参数:initialC...
2018-06-16 16:29:34
384
原创 Java线程池
前言Java中,创建线程的方式一般有三种方法:继承Thread类创建线程实现Runnable接口创建线程使用Callable和Future创建线程关于三种创建方法本文不再赘述。可以看出,以上创建线程的方式,都缺乏对线程的管理,我们设想,如果线程在调用过程中使用了某一资源,当该资源处理缓慢或异常时,可能产生大量线程等待的情况,严重时可能造成OOM异常。针对以上情况,应该对...
2018-06-10 17:34:25
204
原创 MarkDown语法
前言最近自己搭建了一个博客网站,写文章时用到了markdown语法,之前虽未接触过markdown语法,但在两三天的使用过程中感觉markdown语法很棒,写法简洁,而且支持Html语言。特总结一些常用的语法如下:语法汇总标题markdown有6种标题,写法如下: 级别 写法 1级 大标题 2级 前言 3级 语法汇总...
2018-06-05 23:32:30
404
原创 阿里云主机环境搭建
一、前言现在很多服务都部署在云服务上,最近项目也要发布到云上,特写此文章。有需要部署云服务的小伙伴可以参考下。二、云主机参数在部署云服务时,一般需要知道如下参数:1、云ECS主机服务器远程连接:url XXXXXXXX用户名:XXXXXXX 密码:XXXXXXX超级管理员:用户名:XXXX 密码 :XXXX2、硬件配置:实例规格:2 核 4GB网络:带宽 5Mbps操作系统:...
2018-05-30 23:47:09
5074
1
转载 JAVA排序算法
转载自:十大经典排序算法一、排序算法分类十种常见排序算法可以分为两大类:非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。 如下图:二、排序算法复杂度及稳定性如下图:相关概念:稳定:如果a...
2018-05-28 23:34:42
241
原创 Java设计模式之代理模式
一、前言代理模式:即通过代理对象访问目标对象,实现目标对象的方法。这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,实现对目标功能的扩展。这涉及到一个编程思想:不要随意去修改别人已经写好的代码或者方法(有坑)。如果需要修改,可以通过代理模式实现。二、写法实现代理模式通常有三种实现写法:静态代理、动态代理、Cglib代理。我们依次说下这三种代理模式:我们现有 AnimalsDao接口和...
2018-05-19 15:57:45
822
原创 Java设计模式之工厂模式
一、前言工厂模式,顾名思义,即用来实例化一个个对象的模式。把相同类别的对象用工厂模式代替new生成,提高代码质量和系统扩展性。二、写法分类工厂模式的写法通常分为三类,简单工厂、多方法工厂、抽象工厂。在分别说明他们之前,我们先创建几个对象。抽象的Animals类public abstract class Animals { //动物的描述 public abstract Strin...
2018-05-12 00:51:52
313
原创 Java设计模式之单例模式
一、前言单例模式,顾名思义,即只产生唯一实例的设计模式。一个类只有一个实例,即一个类只有一个对象实例。二、优点1.减少系统开销及资源消耗。2.设置全局访问点,优化共享资源的使用。注:对于以上优点,我们可以拿Java配置读取举例,对于固定的配置文件,我们完全可以设计一个单例类,读取配置文件,而避免每次都读取文件造成的系统开销,同时也优化了配置文件的使用。三、应用场景1.Servlet2.开源框架Sp...
2018-05-08 00:01:47
261
原创 Html5+JQuery页面标签的禁用问题
在做移动应用项目时遇到的问题,完成某些操作后返回到前面页面要保证前面页面的标签内容不可被编辑,修改。①对于input,select框,设置disabled=’disabled’。如:$('#testid1 input').attr('disabled','disabled');$('#testid2 select').attr('disabled','disabled');②对于一
2016-11-12 15:55:45
2010
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人