自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 资源 (3)
  • 收藏
  • 关注

原创 JVM性能调优以及参数详解

一、根据Java虚拟机规范,JVM将内存划分为:1>New(年轻代):年轻代用来存放JVM刚分配的Java对象2>Tenured(年老代):年轻代中经过垃圾回收没有回收掉的对象将被Copy到年老代3>永久代(Perm):永久代存放Class、Method元信息,其大小跟项目的规模、类、方法的量有关,一般设置为128M就足够,设置原则是预留30%的空间。

2017-09-14 09:27:51 657

原创 代码性能优化

代码优化细节1、尽量指定类、方法的final修饰符带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,则该类所有的方法都是final的

2017-09-06 09:32:11 295

翻译 Dubbo+Zookeeper+Spring的demo--远程调用初探

一、下载并安装Zookeeper:    下载地址:http://www.apache.org/dist/zookeeper/    我这里下载的是3.4.6:http://www.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz    下载后解压缩到本地,如下图:

2017-08-21 15:38:04 304

原创 一致性哈希算法

场景:现在我们假设有100台redis data服务器,一份数据101进来的时候,以散列公式hash(i)&100,计算所存放的服务器,假设hash(i) = i,那么数据被散列到标号为1的服务器,然后这个时候服务器新增了一台,然后散列公式为hash(i)%101,这个时候请求访问数据101的时候,被分配至0号服务器,但是其实这个时候数据是在1号服务器的。所以这个时候大量的数据失效

2017-08-19 16:57:34 377

原创 单例模式——静态内部类实现(推荐使用)

package com.test;public class Singleton_InnerClass { //静态内部类 private static class SingletonHolder { private static Singleton_InnerClass instance = new Singleton_InnerClass(); } //私有构造方法 pri

2017-08-18 13:52:34 1856

原创 使用java 实现网络爬虫 demo

网络爬虫的实现原理:          网络爬虫又叫蜘蛛,流程为:网络蜘蛛是通过网页的链接地址来寻找网页,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。在抓取的网页中根据特定的网页规则来提取你想要的信息。如果把整个互联网当成一个网站,那么网络蜘蛛就可以用这个原理把互

2017-08-18 13:09:57 3599

原创 输入一个字符串,按字典序打印出该字符串中字符的所有排列。

2017-10-06 15:53:20 1584

原创 Mybatis一级缓存和二级缓存介绍

一级缓存:Mybatis的一级缓存是指SqlSession。一级缓存的作用域是一个SqlSession。Mybatis默认开启一级缓存。在同一个SqlSession中,执行相同的查询SQL,第一次会去查询数据库,并写到缓存中;第二次直接从缓存中取。当执行SQL时两次查询中间发生了增删改操作,则SqlSession的缓存清空。 二级缓存:Mybatis的二级缓存是指mappe

2017-09-17 21:43:02 453

原创 找出单链表中的倒数第k个元素

解题思路:1.为了求出链表中的倒数第k个元素,最容易想到的方法是首先遍历一遍单链表,求出整个单链表的长度n,然后将倒数第k个,转换为正数第n-k个,接下去遍历一次就可以得到结果。不过这种方法需要对链表进行两次遍历,第一次遍历用于求解单链表的长度,第二次遍历用于查找正数第n-k个元素。 如果沿从头至尾的方向从链表中的某个元素开始,遍历k个元素刚好到达链表尾,那么元素就是要找的倒数第k

2017-09-17 21:32:50 729

原创 b树和hash的应用场景

关系型数据库中,索引大多采用B/B+树来作为存储结构,而全文搜索引擎的索引则主要采用hash的存储结构,这两种数据结构有什么区别?如果是等值查询,那么哈希索引明显有绝对优势,因为只需要经过一次算法即可找到相应的键值;当然了,这个前提是,键值都是唯一的。如果键值不是唯一的,就需要先找到该键所在位置,然后再根据链表往后扫描,直到找到相应的数据;从示意图中也能看到,如果是范围查询检索

2017-09-17 21:18:50 3637

原创 MySql索引的底层实现

索引的本质MySQL官方对于索引的定义为:索引是帮助MySQL高效获取数据的数据结构。即可以理解为:索引是数据结构。 我们知道,数据库查询是数据库最主要的功能之一,我们都希望查询数据的速度尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。最基本的查询算法当然是顺序查找,当然这种时间复杂度为O(n)的算法在数据量很大时显然是糟糕的,于是有了二分查找、二叉树查找等。

2017-09-17 20:58:25 443

原创 TCP和UDP的区别

UDP:无连接的,即发送数据之前不需要建立链接。使用最大努力交付,即不保证可靠,也不保证拥塞控制。面向报文。没有拥塞控制,很适合媒体通信的要求。支持一对一,一对多,多对一的交互通信。首部开销小,只有8字节TCP:面向连接。每条只能有两个端点,只能一对一。提供可靠性交付服务。全双工的通信方式。面向字节流。首部最低20个字节。

2017-09-17 09:10:20 274

原创 进程间的通信方式

1.管道/匿名管道PIPE管道可用于具有亲缘关系进程间的通讯信,允许一个进程和另一个与他有共同祖先的进程之间进行通信。管道是单向的,如果一个进程既要读又要写,需要建立两根管道。2.命名管道FIFO命名管道克服了管道没有名字的限制,因此,除了具有管道所有的功能外,它还允许无亲缘关系进程间的通信。命名管道在文件系统中有对应的文件名。命名管道通过命令mkfifo或系统调用mkfifo来创建。

2017-09-17 08:47:31 345

原创 synchronized与static synchronized的区别

1、synchronized与static synchronized 的区别      synchronized是对类的当前实例进行加锁,防止其他线程同时访问该类的该实例的所有synchronized块,注意这里是“类的当前实例”,类的两个不同实例就没有这种约束了。那么static synchronized恰好就是要控制类的所有实例的访问了,static synchronized是限制线程

2017-09-16 10:11:24 1031

原创 http和https的区别

1.http运行在tcp之上,所有的传输都是明文,客户端和服务端都无法验证对方的身份。2.https运行在SSL/TSL上(SSL/TSL运行在tcp上),所有的传输协议内容都经过加密,加密采用对称加密,但是对称加密的密钥用服务器的证书进行了非对称加密。此外客户端可验证服务器端的身份,如配置了客户端验证,服务器也可以验证客户端的身份。3.https协议需要ca申请证书,一般免费的证书很

2017-09-15 15:09:29 301

原创 快速找出数组中元素数目超出一半的元素

思路:在遍历数组的过程中,保存两个值,一个是数组中数字,一个是出现次数。当遍历到下一个数字时,如果这个数字跟之前保存的数字相同,则次数加1,如果不同,则次数减1。如果次数为0,则保存下一个数字并把次数设置为1,由于我们要找的数字出现的次数比其他所有数字出现的次数之和还要多,那么要找的数字肯定是最后一次把次数设为1时对应的数字。 public int MoreHalf(int[] nums)

2017-09-14 09:44:33 1635

原创 Java 类加载Classloader

JVM预定义的三种类型类加载器,当一个 JVM启动的时候,Java缺省开始使用如下三种类型类装入器:启动(Bootstrap)类加载器:引导类装入器是用本地代码实现的类装入器,它负责将 /lib下面的核心类库或-Xbootclasspath选项指定的jar包加载到内存中。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。

2017-09-04 17:29:04 207

原创 设计模式之facade-外观模式

Facade模式  Facade模式要求一个子系统的外部与其内部的通信必须通过一个统一的Facade对象进行。Facade模式提供一个高层次的接口,使得子系统更易于使用。    就如同医院的接待员一样,Facade模式的Facade类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与Facade对象打交道,而不需要与子系统内部的很多对象打交道。   观察者模式的

2017-08-09 22:58:58 298

原创 HTTP中GET和POST请求的区别

一、原理区别一般我们在浏览器输入一个网址访问网站都是GET请求;再FORM表单中,可以通过设置Method指定提交方式为GET或者POST提交方式,默认为GET提交方式。HTTP定义了与服务器交互的不同方法,其中最基本的四种:GET,POST,PUT,DELETE,HEAD,其中GET和HEAD被称为安全方法,因为使用GET和HEAD的HTTP请求不会产生什么动作。不会产生动作意味着GET

2017-06-24 13:05:19 1144

原创 堆排序算法java实现

堆排序基本思想:       堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。1.堆  堆实际上是一棵完全二叉树,其任何一非叶节点满足性质:  Key[i]=Key[2i+1]&&key>=key[2i+2]  即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。  堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&

2017-05-02 16:01:30 258

原创 基数排序法

实现思路:基数排序已经不再是一种常规的排序方式,它更多地像一种排序方法的应用,基数排序必须依赖于另外的排序方法。基数排序的总体思路就是将待排序数据拆分成多个关键字进行排序,也就是说,基数排序的实质是多关键字排序。多关键字排序的思路是将待排数据里德排序关键字拆分成多个排序关键字;第1个排序关键字,第2个排序关键字,第3个排序关键字......然后,根据子关键字对待排序数据进行排序。

2017-05-02 15:57:07 450

原创 选择排序法

基本思想:每一趟排序从序列中未排好序的那些元素中选择一个值最小(大)的元素,然后将其与这些未排好序的元素的第一个元素交换位置。特点:1. 算法完成需要 n - 1 趟排序,按照算法的描述,n - 1 趟排序之后数组中的前 n - 1 个元素已经处于相应的位置,第 n 个元素也处于相应的位置上。2. 第 i 趟排序,实际上就是需要将数组中第 i 个元素放置到数组的合适

2017-05-02 15:50:06 223

原创 冒泡排序法

冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。基本步骤:1 比较相邻的元素。如果第一个比第二个大,就交换他们两个。2 对每一对相邻元素作同样的

2017-05-02 15:46:36 198

原创 希尔排序算法

1.基本思想:希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好

2017-04-27 14:58:40 245

原创 插入排序法

1.基本思想:插入排序法的排序思想就是从数组的第二个元素开始,将数组中的每一个元素按照规则插入到已排好序的数组中以达到排序的目的.一般情况下将数组的第一个元素作为启始元素,从第二个元素开始依次插入.由于要插入到的数组是已经排好序的,所以只是要从右向左找到比插入点(下面程序中的insertNote)小(对升序而言)的第一个数组元素就插入到其后面.直到将最后一个数组元素插入到数组中,整个排序过程就算完

2017-04-27 13:36:26 314

原创 二分法查找

1.基本思想:二分法检索(binary search)又称折半检索,二分法检索的基本思想是设字典中的元素从小到大有序地存放在数组中,首先将给定值key与字典中间位置上元素的关键码(key)比较,如果相等,则检索成功;否则,若key小,则在字典前半部分中继续进行二分法检索;若key大,则在字典后半部分中继续进行二分法检索。这样,经过一次比较就缩小一半的检索区间,如此进行下去,直到检索成功或检索失败。

2017-04-27 10:41:09 381

原创 ConcurrentHashMap解析

分段锁技术:例如HashTable中相当于酒店只有一楼一个客服去结账,而ConcurrentHashMap相当于酒店的每层都有一个可以结账的地方。这样多个并发的问题发生时速度就会加快。1.ConcurrentHashMap将整个hash桶进行分段segment,也就是将这个大的数组分成了几个小的片段segment,而且小的片段segment上面都加锁,那么咋icharu元素的时候先找到应该插入

2017-04-19 16:11:44 313

原创 HashMap和HashTable的区别

1.HashMap不同步,HashTable同步。2.HashTabel不允许有null值(key和value)都不允许。HashMap允许null值(key和value都可以)。3.两者的遍历方式大同小异,HashTable积极比HashMap多一个elements方法。4.HashTable使用Enumeration,hashmap使用Iterator。5.哈希值不同,Hash

2017-04-19 15:54:14 223

原创 static和final的区别

static:修饰变量:静态变量随着类加载时被完成初始化,内存只有一个,且jvm也只会为他分配一次内存,所有类共享静态变量。修饰方法:在类加载的时候就存在,不依赖任何实例。static方法必须实现,不能用abstract修饰。即abstract修饰的方法不可谓static。修饰代码块:在类加载完成之后就会执行静态代码块中的内容。类初始化顺序:父类静态代码块-->子类静态代码块-->

2017-04-19 15:39:44 316

原创 java中sleep()和wait()的区别

1.sleep是Thread方法,wait是Object方法。2.sleep()方法是线程类Thread的静态方法,调用此方法会让当前线程暂停执行指定的时间,将机会(cpu)让给其他的线程,但是对象的锁依然保持,因此休眠时间结束后会自动恢复到就绪状态。wait()方法是Object类的方法,调用对象的wait方法导致当前的线程放弃对象的锁(线程暂停执行),进入对象的等待池(wait poo

2017-04-19 15:13:43 316

原创 java中的值传递和引用传递

Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的。    参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的。如果在函数中改变了副本的 值不会改变原始的值.

2017-04-15 10:45:48 302

转载 详解Pattern类和Matcher类

详解Pattern类和Matcher类java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现(建议在阅读本文时,打开java API文档,当介绍到哪个方法时,查看java API中的方法说明,效果会更佳). Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建,但可以通过Pattern.comp

2017-04-10 18:01:36 557

原创 判断字符串中是否包含指定字符或特殊字符

Pattern p = Pattern.compile("[@#$%^&*]"); Matcher m = p.matcher(s); boolean match = m.find();如果有特殊字符(指定字符),返回true;如果没有 ,返回false;  判断字符串是否由0或1组成String a = "11111000";Boolean b = a..matches

2017-04-10 17:48:40 17907

原创 BigDecimal.setScale 处理java小数点

BigDecimal处理小数点问题BigDecimal.setScale()方法用于格式化小数点setScale(1)表示保留一位小数,默认用四舍五入方式 setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3 setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4 setScale

2017-04-10 16:53:42 371

原创 求最大公约数和最小公倍数(java语言)

package com.sun.maxCommonDivisorAndminCommonMultiple;/** * * @author:孙创 * @date:2017年4月10日 * @Discription://求最大公约数和最小公倍数 */public class MaxCommonDivisorAndMinCommonMultiple2 { public static

2017-04-10 15:44:55 2830 1

原创 采用散列函数H(k)=3×k MOD 13并用线性探测开放地址法处理冲突,在数列地址空间[0..12]中对关键字序列22,41,53,46,30,13,1,67,51

题目:采用散列函数H(k)=3×k MOD 13并用线性探测开放地址法处理冲突,在数列地址空间[0..12]中对关键字序列22,41,53,46,30,13,1,67,51,做如下操作:(1)构造散列表(画示意图);(2)装填因子;(3)等概率情况下查找成功的平均查找长度;(4)等概率情况下查找失败的平均查找长度。

2017-04-09 18:09:36 7358

转载 Java利用socket连接到一台主机并向主机发送文件

分为服务器端和客户端。这里服务器端是等待连接并接受文件的机器,客户端是连接服务器端并且发送文件的机器。1.服务器端/** * server接受连接,接收文件 * */public class ServerTest { private int port = 8821; // 启动服务 private void start() { Socket s = null; try {

2017-04-05 17:19:04 1126

原创 java中定时器Timer类的用法

import java.util.Timer;import java.util.TimerTask;public class M { public static void main(String[] args) { // TODO todo.generated by zoer Timer timer = new Timer(); timer.schedule(new MyTas

2017-04-05 16:54:52 442

原创 ConcurrentHashMap解析

ConcurrentHashMap融合了hashtable和hashmap二者的优势。hashtable是做了同步的,hashmap未考虑同步。所以hashmap在单线程情况下效率较高。hashtable在的多线程情况下,同步操作能保证程序执行的正确性。但是hashtable每次同步执行的时候都要锁住整个结构。看下图:图左侧清晰的标注出来,lock每次都

2017-04-05 16:40:18 216

原创 Java中创建对象的5种方式

java创建对象的五种方式:1.使用new关键字这是最常见也是最简单的创建对象的方式了。通过这种方式,我们可以调用任意的构造函数(无参的和带参数的)。Employee emp1 = new Employee();2.使用Class类的newInstance方法我们也可以使用Class类的newInstance方法创建对象。这个newInstance方法调用无参的

2017-04-05 16:18:59 595

dubbo监控中心控制台

dubbo监控中心控制台

2017-08-22

zookeeper 下载

zookeeper

2017-08-22

dubbo zookeeper demo

dubbo zookeeper demo

2017-08-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除