关于后端:java面试准备

2次阅读

共计 2529 个字符,预计需要花费 7 分钟才能阅读完成。

Java 语言有哪些特点?

  1. 简略易学;
  2. 面向对象(封装,继承,多态);
  3. 平台无关性(Java 虚拟机实现平台无关性);
  4. 可靠性;
  5. 安全性;
  6. 反对多线程(C++ 语言没有内置的多线程机制,因而必须调用操作系统的多线程性能来进行多线程程序设计,而 Java 语言却提供了多线程反对);
  7. 反对网络编程并且很不便(Java 语言诞生自身就是为简化网络编程设计的,因而 Java 语言不仅反对网络编程而且很不便);
  8. 编译与解释并存;

什么是字节码? 采纳字节码的益处是什么?

在 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. 字符型常量和字符串常量的区别?

  1. 模式上: 字符常量是单引号引起的一个字符; 字符串常量是双引号引起的 0 个或若干个字符
  2. 含意上: 字符常量相当于一个整型值(ASCII 值), 能够加入表达式运算; 字符串常量代表一个地址值(该字符串在内存中寄存地位)
  3. 占内存大小 字符常量只占 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、舒展树等)

红黑树

红黑树特点:

  1. 每个节点非红即黑;
  2. 根节点总是彩色的;
  3. 每个叶子节点都是彩色的空节点(NIL 节点);
  4. 如果节点是红色的,则它的子节点必须是彩色的(反之不肯定);
  5. 从根节点到叶节点或空子节点的每条门路,必须蕴含雷同数目的彩色节点(即雷同的彩色高度)。

当插入或者删除结点的时候,红黑树的规定可能被突破,须要调整以维持规定。
调整办法:变色和旋转。旋转又分为左旋转和右旋转。很简单,菜鸡先攒着。

红黑树的利用:

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)。

  1. B+ 树的叶子节点链表构造相比于 B- 树便于扫库,和范畴检索。
  2. 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 的查问效率更加稳固

因为非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查问的门路长度雷同,导致每一个数据的查问效率相当

  1. B树 是 B + 树的变体,B树调配新结点的概率比 B + 树要低,空间使用率更高;

LSM 树

B+ 树最大的性能问题是会产生大量的随机 IO,随着新数据的插入,叶子节点会缓缓决裂,逻辑上间断的叶子节点在物理上往往不间断,甚至拆散的很远,但做范畴查问时,会产生大量读随机 IO。

对于大量的随机写也一样,举一个插入 key 跨度很大的例子,如 7 ->1000->3->2000 … 新插入的数据存储在磁盘上相隔很远,会产生大量的随机写 IO.

正文完
 0