Java 语言有哪些特点?
- 简略易学;
- 面向对象(封装,继承,多态);
- 平台无关性( Java 虚拟机实现平台无关性);
- 可靠性;
- 安全性;
- 反对多线程( C++ 语言没有内置的多线程机制,因而必须调用操作系统的多线程性能来进行多线程程序设计,而 Java 语言却提供了多线程反对);
- 反对网络编程并且很不便( Java 语言诞生自身就是为简化网络编程设计的,因而 Java 语言不仅反对网络编程而且很不便);
- 编译与解释并存;
什么是字节码?采纳字节码的益处是什么?
在 Java 中,JVM 能够了解的代码就叫做字节码
(即扩大名为.class
的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的形式,在肯定水平上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比拟高效,而且,因为字节码并不针对一种特定的机器,因而,Java 程序毋庸从新编译便可在多种不同操作系统的计算机上运行。
1.1.4. Java 和 C++的区别?
- 都是面向对象的语言,都反对封装、继承和多态
- Java 不提供指针来间接拜访内存,程序内存更加平安
- Java 的类是单继承的,C++ 反对多重继承;尽管 Java 的类不能够多继承,然而接口能够多继承。
- Java 有主动内存治理垃圾回收机制(GC),不须要程序员手动开释无用内存
- 在 C 语言中,字符串或字符数组最初都会有一个额定的字符
'0'
来示意完结。然而,Java 语言中没有结束符这一概念。 这是一个值得深度思考的问题,具体起因举荐看这篇文章: https://blog.csdn.net/sszgg2006/article/details/49148189
1.2.1. 字符型常量和字符串常量的区别?
- 模式上: 字符常量是单引号引起的一个字符; 字符串常量是双引号引起的0个或若干个字符
- 含意上: 字符常量相当于一个整型值( ASCII 值),能够加入表达式运算; 字符串常量代表一个地址值(该字符串在内存中寄存地位)
- 占内存大小 字符常量只占 2 个字节; 字符串常量占若干个字节 (留神: char 在 Java 中占两个字节)
List的常见实现类
ArrayList 是一个数组队列,相当于动静数组。它由数组实现,随机拜访效率高,随机插入、随机删除效率低。
LinkedList 是一个双向链表。它也能够被当作堆栈、队列或双端队列进行操作。LinkedList随机拜访效率低,但随机插入、随机删除效率高。
Vector 是矢量队列,和ArrayList一样,它也是一个动静数组,由数组实现。然而ArrayList是非线程平安的,而Vector是线程平安的。
Stack 是栈,它继承于Vector。它的个性是:先进后出(FILO, First In Last Out)。相干浏览:java数据结构与算法之栈(Stack)设计与实现
均衡二叉树(Self-balancing binary search tree)
均衡二叉树(百度百科,均衡二叉树的罕用实现办法有红黑树、AVL、替罪羊树、Treap、舒展树等)
红黑树
红黑树特点:
- 每个节点非红即黑;
- 根节点总是彩色的;
- 每个叶子节点都是彩色的空节点(NIL节点);
- 如果节点是红色的,则它的子节点必须是彩色的(反之不肯定);
- 从根节点到叶节点或空子节点的每条门路,必须蕴含雷同数目的彩色节点(即雷同的彩色高度)。
当插入或者删除结点的时候,红黑树的规定可能被突破,须要调整以维持规定。
调整办法:变色和旋转。旋转又分为左旋转和右旋转。很简单,菜鸡先攒着。
红黑树的利用:
TreeMap、TreeSet以及JDK1.8的HashMap底层都用到了红黑树。
为什么要用红黑树?
简略来说红黑树就是为了解决二叉查找树的缺点,因为二叉查找树在某些状况下会进化成一个线性构造。具体理解能够查看 漫画:什么是红黑树?(也介绍到了二叉查找树,十分举荐)
举荐文章:
- 漫画:什么是红黑树?(也介绍到了二叉查找树,十分举荐)
- 寻找红黑树的操作手册(文章排版以及思路真的不错)
- 红黑树深刻分析及Java实现(美团点评技术团队
B-,B+,B*树(B示意均衡树)
B树,非叶节点含有关键字信息,是数据结构寡人印象最深的那个。
B-tree是B+-tree的变体,在B+树的根底上(所有的叶子结点中蕴含了全副关键字的信息,及指向含有这些关键字记录的指针),B树中非根和非叶子结点再减少指向兄弟的指针;B树定义了非叶子结点关键字个数至多为(2/3)M,即块的最低使用率为2/3(代替B+树的1/2)。
- B+ 树的叶子节点链表构造相比于 B- 树便于扫库,和范畴检索。
- B+树反对range-query(区间查问)十分不便,而B树不反对。这是数据库选用B+树的最次要起因。B+树也更适宜操作系统中的文件索引。
起因如下:
- B+-tree的磁盘读写代价更低
B+-tree的外部结点并没有指向关键字具体信息的指针。因而其外部结点绝对B 树更小。
如果把所有同一外部结点的关键字寄存在同一盘块中,那么盘块所能包容的关键字数量也越多。
一次性读入内存中的须要查找的关键字也就越多。相对来说IO读写次数也就升高了。
举个例子,假如磁盘中的一个盘块包容16bytes,而一个关键字2bytes,一个关键字具体信息指针2bytes。
一棵9阶B-tree(一个结点最多8个关键字)的外部结点须要2个盘快。而B+ 树外部结点只须要1个盘快。当须要把外部结点读入内存中的时候,B 树就比B+ 树多一次盘块查找时间(在磁盘中就是盘片旋转的工夫)。
- B+-tree的查问效率更加稳固
因为非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查问的门路长度雷同,导致每一个数据的查问效率相当
- B树 是B+树的变体,B树调配新结点的概率比B+树要低,空间使用率更高;
LSM 树
B+树最大的性能问题是会产生大量的随机IO,随着新数据的插入,叶子节点会缓缓决裂,逻辑上间断的叶子节点在物理上往往不间断,甚至拆散的很远,但做范畴查问时,会产生大量读随机IO。
对于大量的随机写也一样,举一个插入key跨度很大的例子,如7->1000->3->2000 ... 新插入的数据存储在磁盘上相隔很远,会产生大量的随机写IO.