java
cao447214075
这个作者很懒,什么都没留下…
展开
-
B树、B+树分析及应用
我们都是知道MySQL的索引存储使用的是B+树的结构,想要搞懂MySQL的索引,我们需要先搞清楚B+树,而B+树是B树演变而来的,所以我们又必须先搞懂B树。我们通常见到的二叉树、红黑树这些是二叉的,就是一个节点可以有两个子节点,而B树是多叉的,就是一个节点能有多个子节点。B树的定义:(源自百度百科)B树是一种平衡的多叉树,一棵m阶B树(balanced tree of order m)...原创 2020-03-21 23:26:27 · 2161 阅读 · 0 评论 -
JDK1.8 HashMap源码分析
HashMap是日常工作中经常用到的工具类,我们经常用到的是put方法和get方法,而HashMap自身又涉及初始化和扩容,分析源码,我们就从构造方法、put、get、resize方法入手。构造方法HashMap总共有四个构造函数/** * The load factor used when none specified in constructor. */...原创 2020-02-29 16:06:39 · 168 阅读 · 0 评论 -
Java专业知识
1、JAVA基础1.1 源码分析 1.1.1 HashMap源码分析 1.1.2 ConcurrentHashMap源码分析1.2 多线程 1.2.1 多线程相关函数的概念及作用 1.2.2 线程池1.3 IO 1.3.1 BIO、NIO、AIO1.4 内存模型1.5...原创 2020-02-29 14:31:52 · 233 阅读 · 0 评论 -
java使用多态时对于属性和方法访问的理解
A a = new B();对象a调用属性时只能调用A类的属性,即使B中有与A相同的属性也是调用A的属性;在调用方法时只能带用A中方法,但是如果B对A中方法进行了重写,则运行时会调用B中方法。在new B时,在new出来的对象中有父类A的属性,只是被隐藏了(通过getFields()方法可以看到),这时通过a对象调用属性时就会调到隐藏的真正的A类的属性。jvm将A和B的类信息及...原创 2013-10-12 16:57:35 · 579 阅读 · 0 评论 -
abstract 类的误解
今天在写代码时,很多类中都要使用log4j,每个类中都要写一句private Logger log = Logger.getLogger(MyClass.class);特别麻烦,所以就想在父类中定义一个protected log对象,供子类使用,网上搜了一下例子,从这些例子中看到了自己很多地方的误解,特此记录一下。1.abstract类中不必有abstract方法,原basedao不是抽象类,...原创 2013-10-07 11:03:48 · 184 阅读 · 0 评论 -
java 面试题
JAVA相关基础知识1、面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的...原创 2014-03-08 00:08:22 · 96 阅读 · 0 评论 -
jvm内存管理
永久存储区(permanent space)jvm驻留内存,存放jdk自身的Class和interface数据,以及java应用程序的Class和interface数据,gc不会回收这个区域的数据,jvm关闭时,释放该区域内存。堆空间:分为年老区(old)和新生区(young),新生区分为伊甸区(eden)和幸存区(survivor),其中一个eden区两个survivor区,比例为8:1;...原创 2013-08-21 18:15:50 · 104 阅读 · 0 评论 -
Java中sleep()与wait()的区别
【转】http://blog.163.com/jeff-tang/blog/static/141686909201022010522906/第一种解释:功能差不多,都用来进行线程控制,他们最大本质的区别是:sleep()不释放同步锁,wait()释放同步缩. 还有用法的上的不同是:sleep(milliseconds)可以用时间指定来使他自动醒过来,如果时间不到你只能调用...原创 2012-06-01 10:55:24 · 133 阅读 · 0 评论 -
java 日期格式化
yyyy年MM月dd日格式化后为2012年01月01日yyyy年M月dd日格式化后为2012年1月01日 ;2012年11月01日。原创 2012-05-21 14:16:55 · 88 阅读 · 0 评论 -
PermGen space
Tomcat 官网对PermGen space内存溢出的解释:Why does the memory usage increase when I redeploy a web application? Because the Classloader (and the Class objects it loaded) cannot be recycled. They are stor...原创 2011-09-15 10:16:44 · 79 阅读 · 0 评论 -
java 内存溢出
这里以tomcat环境为例,其它WEB服务器如jboss,weblogic等是同一个道理。 一、java.lang.OutOfMemoryError: PermGen space PermGen space的全称是Permanent Generation space,是指内存的永久保存区域, 这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被...原创 2011-08-31 09:12:32 · 142 阅读 · 0 评论 -
tomcat集成与eclipse,发布项目
tomcat集成与eclipse中后,在workspace中有一个.metadata文件(如果不存在在eclipse启动时会创建出来,并将所用文件拷贝其中),workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps这就是tomcat的发布目录。如果一个workspace是从别处拷贝过来的,直接用eclips...原创 2011-08-29 18:14:18 · 72 阅读 · 0 评论 -
提高java代码运行效率(3)
11.单线程应尽量使用HashMap, ArrayListHashTable,Vector等使用了同步机制,降低了性能。-12.尽量合理的创建HashMap当你要创建一个比较大的hashMap时,充分利用另一个构造函数public HashMap(int initialCapacity, float loadFactor)避免HashMap多次进行了hash重构,扩容是...原创 2011-08-29 11:47:50 · 96 阅读 · 0 评论 -
提高java代码运行效率(5)
21.尽量避免使用split除非是必须的,否则应该避免使用split,split由于支持正则表达式,所以效率比较低,如果是频繁的几十,几百万的调用将会耗费大量资源,如果确实需要频繁的调用split,可以考虑使用apache的StringUtils.split(string,char),频繁split的可以缓存结果。-22.ArrayList & LinkedList一个是线性表,一...原创 2011-08-29 11:43:18 · 114 阅读 · 0 评论 -
提高java代码运行效率(4)
15.尽量在finally块中释放资源程序中使用到的资源应当被释放,以避免资源泄漏。这最好在finally块中去做。不管程序执行的结果如何,finally块总是会执行的,以确保资源的正确关闭。 -16.尽量使用移位来代替'a/b'的操作"/"是一个代价很高的操作,使用移位的操作将会更快和更有效如int num = a / 4;int num = a / 8;应该...原创 2011-08-29 11:42:36 · 142 阅读 · 0 评论 -
提高java代码运行效率(2)
6.尽量处理好包装类型和基本类型两者的使用场所虽然包装类型和基本类型在使用过程中是可以相互转换,但它们两者所产生的内存区域是完全不同的,基本类型数据产生和处理都在栈中处理,包装类型是对象,是在堆中产生实例。在集合类对象,有对象方面需要的处理适用包装类型,其他的处理提倡使用基本类型。-7.慎用synchronized,尽量减小synchronize的方法都知道,实现同步是要很大的...原创 2011-08-29 11:36:31 · 147 阅读 · 0 评论 -
提高java代码运行效率(1)
1.尽量在合适的场合使用单例使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面第一,控制资源的使用,通过线程同步来控制资源的并发访问第二,控制实例的产生,以达到节约资源的目的第三,控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信-2.尽量避免随意使用静态变量要知道,当...原创 2011-08-29 11:24:11 · 116 阅读 · 0 评论 -
java 接口回调
首先看一下什么叫做回调:有一个类A,其中有一个方法MethodA(),在类B中有一方MethodB()方法,在MethodB方法中想调用MethodA(),我们将A的对象a作为参数传入MethodB(A a) 中,在MethodB中决定什么时候调用A方法。这就叫做回调。接口回调:类A是一个接口,类B实现了接口A,声明一个A的对象,用B的对象赋值给A的变量a,用a调用接口中的方法时实际调用的是B...原创 2011-08-26 12:31:27 · 95 阅读 · 0 评论