java
chang_ge
这个作者很懒,什么都没留下…
展开
-
String中intern的方法
首先查看官方API那个的解释:———————————————————————————————————————internpublic String intern()返回字符串对象的规范化表示形式。一个初始时为空的字符串池,它由类 String 私有地维护。当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由 e转载 2017-07-25 11:05:07 · 221 阅读 · 0 评论 -
Java虚拟机垃圾回收(一) 基础:回收哪些内存/对象 引用计数算法 可达性分析算法 finalize()方法 HotSpot实现分析
Java虚拟机垃圾回收(一) 基础 回收哪些内存/对象 引用计数算法 可达性分析算法 finalize()方法 HotSpot实现分析 在《Java内存区域 JVM运行时数据区》中了解到各数据区有些什么特点、以及相关参数的调整,知道了:程序计数器、虚拟机栈、本地方法栈这3个区域是随线程而生而灭的,内存分配和回收都具备确定性,而Java堆和方法区则不一样,各线程共享,在运行时内...转载 2018-03-15 14:00:53 · 114 阅读 · 0 评论 -
Java虚拟机垃圾回收(二) 垃圾回收算法:标记-清除算法 复制算法 标记-整理算法 分代收集算法 火车算法
Java虚拟机垃圾回收(二) 垃圾回收算法 标记-清除算法 复制算法 标记-整理算法 分代收集算法 火车算法 在《Java虚拟机垃圾回收(一) 基础》中了解到如何判断对象是存活还是已经死亡? 介绍了垃圾回收基础算法:引用计数算法、可达性分析算法,以及HotSpot虚拟机中实现对象可达性分析的一些问题。 下面先来了解Java虚拟机垃圾回收的几种常见算法:标记-清除算法、复制算...转载 2018-03-15 14:01:51 · 181 阅读 · 0 评论 -
Java虚拟机垃圾回收(三) 7种垃圾收集器:主要特点 应用场景 设置参数 基本运行原理
Java虚拟机垃圾回收(三) 7种垃圾收集器 主要特点 应用场景 设置参数 基本运行原理 在《Java虚拟机垃圾回收(一) 基础》中了解到如何判断对象是存活还是已经死亡?在《Java虚拟机垃圾回收(二) 垃圾回收算法》了解到Java虚拟机垃圾回收的几种常见算法。 下面先来了解HotSpot虚拟机中的7种垃圾收集器:Serial、ParNew、Parallel Scaveng...转载 2018-03-16 10:08:55 · 478 阅读 · 0 评论 -
foreach循环中为什么不要进行remove/add操作
先来看一段代码,摘自阿里巴巴的java开发手册1 List<String> a = new ArrayList<String>();2 a.add("1");3 a.add("2");4 for (String temp : a) {5 if("1".equals(temp)){6 a.remove(temp);7 } 8 }...转载 2018-03-25 00:14:43 · 1528 阅读 · 0 评论 -
java为什么 foreach比for效率高
(1)for是使用下标(偏移量)定位的.(2)foreach应该是使用类似循环子的机构(3)对随机访问效率高的ArrayList. 使用下标访问效率本身很高.foreach内部的循环子直接封装下标,自己实现的for比foreach更直接,效率稍高些,但差别不会太大,仍然在一个数量级上。 (4)如果使用插入和删除效率高的LinkedList,for基于下标访问会每次从头查询,效率会很低.foreac...转载 2018-04-07 23:03:06 · 3213 阅读 · 0 评论 -
Iterator遍历的添加删除
list是一个ArrayList的对象,哪个选项的代码填到//todo delete处,可以在Iterator遍历的过程中正确并安全的删除一个list中保存的对象?()Iterator it = list.iterator();int index = 0;while (it.hasNext()){ Object obj = it.next(); if (needDelete(...转载 2018-04-08 10:04:15 · 5039 阅读 · 0 评论 -
对数据遍历的三种方式之foreach 、for与Iterator
对数据的遍历方式有三种:for循环遍历、增强for循环遍历、Iterator迭代器遍历。这三种遍历方式有他们自身使用的范围。增强for循环增强for循环是JDK1.5版本后出来的一个高级for循环,是用来专门遍历数组和集合的。内部原理其实是一个迭代器遍历也就是我们常说的foreach遍历。 格式: for(元素的数据类型 变量 :集合or数组) 应用一: ...转载 2018-04-08 10:06:55 · 659 阅读 · 0 评论 -
JAVA中Iterator遍历,添加出现的ConcurrentModificationException异常
在学习java集合的迭代器遍历集合内容,并添加内容的时候,遇到了一个ConcurrentModificationException异常,[java] view plain copyfor(Iterator<String> it=arrList.iterator();it.hasNext();){ //System.out.println(it.next());...转载 2018-04-08 10:19:46 · 427 阅读 · 0 评论 -
MySQL创建表的时候创建索引
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nangeali/article/details/73384780目录(?)[-]创建表的时候创建索引创建普通索引创建唯一性索引创建全文索引创建单列索引创建多列索引创建空间索引要想使用索引提高数据表的访问速度,首先,需要创建一个索引,创建索引的方式,有三种。创建表的时候,创建索引这种方式最简单、方便,...转载 2018-04-08 11:31:29 · 11227 阅读 · 0 评论 -
正确合理的建立MySQL数据库索引
索引是快速搜索的关键。MySQL索引的建立对于MySQL的高效运行是很重要的。下面介绍几种常见的MySQL索引类型。在数据库表中,对字段建立索引可以大大提高查询速度。假如我们创建了一个 mytable表:CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL ); 我们随机向里面插入了10000条记录...转载 2018-04-08 11:52:57 · 377 阅读 · 0 评论 -
System.gc(); 与Runtime.gc()的区别
(1) GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。(2) 对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向...转载 2018-03-25 20:37:57 · 4579 阅读 · 0 评论 -
史上最简单的 SpringCloud 教程 | 终章
版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接 ,博主地址:http://blog.csdn.net/forezp。 https://blog.csdn.net/forezp/article/details/70148833目录(?)[+]转载请标明出处: http://blog.csdn.net/forezp/article/details/70148833 本文出自方志朋的...转载 2018-04-08 14:03:44 · 132 阅读 · 0 评论 -
Java并发问题--乐观锁与悲观锁以及乐观锁的一种实现方式-CAS
首先介绍一些乐观锁与悲观锁: 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。再比如Java里面的同步原语synchronized关键字的实现也是悲观锁。 乐观锁:顾名思义,就是很乐观,每次去拿数据的时候...转载 2018-03-26 09:53:52 · 118 阅读 · 0 评论 -
ReentrantLock和synchronized两种锁定机制
ReentrantLock和synchronized两种锁定机制应用synchronized同步锁把代码块声明为 synchronized,使得该代码具有 原子性(atomicity)和 可见性(visibility)。原子性意味着一个线程一次只能执行由一个指定监控对象(lock)保护的代码,从而防止多个线程在更新共享状态时相互冲突。可见性类似volatile关键字。应用ReentrantLock...转载 2018-03-26 10:11:25 · 390 阅读 · 2 评论 -
Java基础6(String str;与String str=null的区别)
1) String str;栈内存开辟一块空间,存储str引用2) String str = null;栈内存开辟一块空间,储存str引用,堆内存中开辟一块空间,str指向那块空的内存的地址3)String str = new String("String");栈内存开辟一块空间,储存str引用,先在内存的常量池中查询是否存在“String”,如存在,则将该块空间复制一份到内存的堆区间上,并将st...转载 2018-04-08 17:40:47 · 1076 阅读 · 0 评论 -
新生代Eden与两个Survivor区的解释
文章出处:http://ifeve.com/jvm-yong-generation/聊聊JVM的年轻代1.为什么会有年轻代我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如果分代的话,...转载 2018-03-26 10:51:14 · 288 阅读 · 0 评论 -
java的多线程安全,ReentrantLock与synchronized锁
前言多线程总的来说是一个很大的模块,所以虽然之前就想写但一直感觉有地方没有理解透,在经过了一段时间学习后,终于有点感觉了,在此写下随笔。多线程安全问题##: 首先和大家讨论一下多线程为什么会不安全,大家先看下面的程序。/** - @author lw */public class Test extends Thread{ public void run() { ...转载 2018-03-26 11:03:58 · 130 阅读 · 0 评论 -
悲观锁和相比synchronized,ReentrantLock增加了一些高级功能,主要有以下3项:等待可 中断、可实现公平锁,以及锁可以绑定多个条件
悲观锁与乐观锁 1.概念解析乐观锁与悲观锁不是指具体的什么类型的锁,而是指看待并发同步的角度。悲观锁认为对于同一个数据的并发操作,一定是会发生修改的,哪怕没有修改,也会认为修改。因此对于同一个数据的并发操作,悲观锁采取加锁的形式。悲观的认为,不加锁的并发操作一定会出问题。乐观锁则认为对于同一个数据的并发操作,是不会发生修改的。在更新数据的时候,会采用尝试更新,不断重新的方式更新数据。乐观的认为,...转载 2018-03-26 11:21:53 · 452 阅读 · 0 评论 -
JAVA并发编程之乐观锁、悲观锁实现讲解
悲观锁认为随时有可能发生冲突,用锁保护所有临界区。日常使用的锁绝大多数都是悲观锁。优点:1. 确保安全性,悲观锁临界区内不会发生并发问题。2. 简单方便。3. 使用悲观锁,在临界区内操作数据成功率高。缺点:1. 如果临界区内耗时长,会影响程序整体工作效率。2. 可能产生死锁。乐观锁乐观的认为不会发生并发冲突,不为临界区代码加锁,但会持有在运行临界区前的版本号。在完成临界区后对比版本号,如果版本号没...转载 2018-03-26 11:31:40 · 1544 阅读 · 0 评论 -
null和""以及==与equals的区别
[java] view plain copyString str1 = null; str引用为空 String str2 = ""; str引用为空串 直接点就是null没有分配内存空间,而""分配了内存空间,因此str1还不是一个实例化的对象,而str2已经实例化。 注意因为null不是对象,""是对象。所以比较的时候必须是 if(str1==null)...转载 2018-04-08 17:41:14 · 171 阅读 · 0 评论 -
str != null 和 null != str的区别
str != null 会出现空指针异常,而null !=str是永远不会出现空指针异常,而且也是极限编程建议的做法。目的的是防止出错。例如:str.equals("123"). 如果养成了好的习惯,应该写成 "123".equals.(str). 因为就算str为空,还是会返回false,但如果用前者就是空指针异常。具体汇编怎么实现,还有哪些细微差别,求各位再指导!...转载 2018-04-08 17:43:52 · 3019 阅读 · 3 评论 -
CPU-bound(计算密集型) 和I/O bound(I/O密集型)
I/O密集型 (I/O-bound) I/O bound 指的是系统的CPU效能相对硬盘/内存的效能要好很多,此时,系统运作,大部分的状况是 CPU 在等 I/O (硬盘/内存) 的读/写,此时 CPU Loading 不高。CPU bound 指的是系统的 硬盘/内存 效能 相对 CPU 的效能 要好很多,此时,系统运作,大部分的状况是 CPU Loading 100%,CPU 要读/写 I/O...转载 2018-03-26 14:18:41 · 221 阅读 · 0 评论 -
浅谈Java两种并发类型——计算密集型与IO密集型
在Java并发编程方面,计算密集型与IO密集型是两个非常典型的例子,这次大象就来讲讲自己在这方面的内容,本篇比较基础,只适合刚入门的童鞋,请各种牛人不喜勿喷。 计算密集型 计算密集型,顾名思义就是应用需要非常多的CPU计算资源,在多核CPU时代,我们要让每一个CPU核心都参与计算,将CPU的性能充分利用起来,这样才算是没有浪费服务器配置,如果在非常好的服务器配置上还运行着单线程程序那将...转载 2018-03-26 15:02:52 · 854 阅读 · 0 评论 -
Java单例模式——并非看起来那么简单
Java中单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在。一些管理器和控制器常被设计成单例模式。 单例模式有很多好处,它能够避免实例对象的重复创建,不仅可以减少每次创建对象的时间开销,还可以节约内存空间;能够避免由于操作多个实例导致的逻辑错误。如果一个对象有可能贯穿整个应用程序,而且起到了全局统一管理控制的作用,...转载 2018-04-09 07:12:22 · 167 阅读 · 0 评论 -
java.util.concurrent包API学习笔记
newFixedThreadPool创建一个固定大小的线程池。shutdown():用于关闭启动线程,如果不调用该语句,jvm不会关闭。awaitTermination():用于等待子线程结束,再继续执行下面的代码。该例中我设置一直等着子线程结束。 Java代码 public class Test { public static void main(String[] args) ...转载 2018-04-09 11:40:24 · 126 阅读 · 0 评论 -
schedule、scheduleAtFixedRate和scheduleWithFixedDelay的区别
最近使用java中的定时任务时,对于标题中的几个方法有点懵,故而记录一下。schedule(commod,delay,unit) ,这个方法是说系统启动后,需要等待多久执行,delay是等待时间。只执行一次,没有周期性。举个栗子:火箭发射,delay=10秒,发射准备好了之后,开始读秒:10,9,8,,,1,发射。piu~,任务完成,回家吃饭。scheduleAtFixedRate(commod,...转载 2018-04-09 14:53:59 · 1112 阅读 · 0 评论 -
判断两个float或double是否相等
double a, b; ... if(a==b) ...1234不用考虑初始化的问题哈,此处不是说明那个问题。不能直接 if(a==b)而是要equal(a,b)equal 函数自己写public boolean equal(double a, double b) { if ((a- b> -0.000001) && (a- ...转载 2018-03-27 16:09:21 · 3150 阅读 · 0 评论 -
关于java中Arrays.sort()的几种用法
今天看到了Arrays了(觉得自己学东西真是龟速啊),Arrays里面有一个sort是针对数组排序的。。。然后就看了看它的简单用法同样转载(我不生产代码,我只是代码的搬运工.....):http://www.tuicool.com/articles/iii6N3 感谢Java的Arrays类中有一个sort()方法,该方法是Arrays类的静态方法,在需要对数组进行排序时,非常的好用。但...转载 2018-03-27 16:37:34 · 3530 阅读 · 0 评论 -
几种简单的负载均衡算法及其Java代码实现
什么是负载均衡负载均衡,英文 名称为Load Balance,指由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种 负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。负载均衡能够平均分配客户请求到服 务器阵列,借此提供快速获取重要数据,解决大量并发访问服务问题,...转载 2018-04-02 17:37:22 · 107 阅读 · 0 评论 -
架构设计:负载均衡层设计方案(1)——负载场景和解决方式
版权声明:欢迎转载,但是看在我辛勤劳动的份上,请注明来源:http://blog.csdn.net/yinwenjie(未经允许严禁用于商业用途!) https://blog.csdn.net/yinwenjie/article/details/46605451目录(?)[+]在上一篇《标准Web系统的架构分层》文章中,我们概述了WEB系统架构中的分层架设体系,介绍了包括负载均衡层、业务层、业务通...转载 2018-04-02 17:47:23 · 181 阅读 · 0 评论 -
Vue+SpringMVC---前后端分离极简尝试
【前后端分离】的开发方式是目前WEB开发中的一个大的趋势,随着各种前后端框架的出现,加上REST编程规范慢慢深入人心,前端后端之间通过更加轻量级、简洁高效的JSON作为数据传输格式,使得一切变得开朗起来,前后端分工更加明晰,前端被赋予了更多的功能,从而能分担原来由后端完成的工作,开发人员的学习成本明显下降。 通过VUE+SPringMVC的组合来尝试实现前后端分离的开发模式,下面给出具体的过程。1...转载 2018-04-02 20:22:18 · 525 阅读 · 0 评论 -
为何HBase速度很快
为何HBase速度很快?HBase能提供实时计算服务主要原因是由其架构和底层的数据结构决定的,即由LSM-Tree(Log-Structured Merge-Tree) + HTable(region分区) + Cache决定——客户端可以直接定位到要查数据所在的HRegion server服务器,然后直接在服务器的一个region上查找要匹配的数据,并且这些数据部分是经过cache缓存的。前面说...转载 2018-04-10 10:05:46 · 946 阅读 · 0 评论 -
B+树和LSM比较
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013928917/article/details/75912045目录(?)[+]B+树和LSM比较 在关系型数据库mysql中普遍使用B+树作为索引,在实际中索引也分为聚集索引和非聚集索引,而在hbase中则采用的是LMS树组织数据的。两者各有自己的优劣。B+树B+树由B-树演变而来,B-树...转载 2018-04-10 10:54:35 · 704 阅读 · 0 评论 -
Java不可变对象
一、不可变类简介不可变类:所谓的不可变类是指这个类的实例一旦创建完成后,就不能改变其成员变量值。如JDK内部自带的很多不可变类:Interger、Long和String等。可变类:相对于不可变类,可变类创建实例后可以改变其成员变量值,开发中创建的大部分类都属于可变类。下面的理解可能会易懂一些:{概念:不可变类的意思是创建该类的实例后,该实例的属性是不可改变的。Java中的8个包装类和String类...转载 2018-03-27 23:19:01 · 693 阅读 · 3 评论 -
一文读懂非关系型数据库(NoSQL)
为了更好的理解非关系型数据库,我又深入的度娘了下原文地址:https://baijiahao.baidu.com/po/feed/share?wfr=spider&for=pc&context=%7B"sourceFrom"%3A"bjh"%2C"nid"%3A"news_3690540158463624329"%7D本文共11000字,阅读全文约需30分钟。 本文为大家解析非关系...转载 2018-04-10 16:01:20 · 1014 阅读 · 0 评论 -
JSP与HTML的区别
HTML(Hypertext Markup Language)文本标记语言,它是静态页面,和JavaScript一样解释性语言,为什么说是解释性 语言呢?因为,只要你有一个浏览器那么它就可以正常显示出来,而不需要指定的编译工具,只需在TXT文档中写上HTML标记就OK。JSP(Java Server Page)看这个意思就知道是Java服务端的页面,所以它是动态的,它是需要经过JDK编译后把内容发...转载 2018-04-03 10:22:20 · 136 阅读 · 0 评论 -
Hibernate与Mybatis的区别与联系
1 简单简介 1.1 Hibernate 框架 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,建立对象与数据库表的映射。是一个全自动的、完全面向对象的持久层框架。 1.2 Mybatis框架 Mybatis是一个开源对象关系映射框架,原名:ibatis,2010年由谷歌接管以后更名。是一个半自动化...转载 2018-04-11 10:01:48 · 182 阅读 · 0 评论 -
mybatis与hibernate的区别及各自应用场景
mybatis与hibernate的区别及各自应用场景Mybatis技术特点:1、 通过直接编写SQL语句,可以直接对SQL进行性能的优化;2、 学习门槛低,学习成本低。只要有SQL基础,就可以学习mybatis,而且很容易上手;3、 由于直接编写SQL语句,所以灵活多变,代码维护性更好。4、 不能支持数据库无关性,即数据库发生变更,要写多套代码进行支持,移植性不好。5、 需要编写结果映...转载 2018-04-11 10:04:09 · 545 阅读 · 0 评论 -
JAVA线程池ThreadPoolExecutor与阻塞队列BlockingQueue
从Java5开始,Java提供了自己的线程池。每次只执行指定数量的线程,java.util.concurrent.ThreadPoolExecutor 就是这样的线程池。以下是我的学习过程。首先是构造函数签名如下:[java] view plain copypublic ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long kee...转载 2018-04-17 10:20:30 · 318 阅读 · 0 评论