第一部分
1.Java部分
1.1.你认为 Java 和其他语言相对,有什么优缺点?
首先,Java 与 C++ / C 语言相比。Java 是面向对象的语言,底层是用 C 语言开发的,但是并不依赖于 C 语言。Java 的运行是在运行时库的支持下进行的,(运行时库是一种被编译器用来实现编程语言内置函数,以提供该语言程序运行时支持的一种特殊的计算机程序库),所以运行效率比起更接近底层的 C / C++ 来说效率会有影响,不过 Java 的类库采用很好的设计理念,非常好用,也非常实用,已经成为业界的一种标准开发语言。它的跨平台的特性收到开发者的青睐,只需要开发一次就能在所有安装了 Java 运行时库的环境上运行。
其次,Java 与 C# 相比。C# 是微软开发的一种编程语言,语法类似于 Java,几乎就是Java 的翻版。运行原理也和 Java类似,也是通过运行时库的支持运行。不过支持的平台还很有限。Java 几乎被所有的平台支持,而 C# 目前被 Windows 和 Linux 支持,Windows 支持由微软自己开发的软件,而 Linux 下的支持则有 mono 支持。实际上,mono 也是把 C# 应用转化为 Java应用而已,所以本质上 C# 只被微软自己的操作系统支持。应用平台受限,是它最大的缺点。
1.2.解释 JVM、JDK、JRE、JavaSE、JavaEE、JavaME、GC
JVM:Java 虚拟机,Java Virtual Machine 的缩写。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成能在 Java 虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地执行。
JDK:Java 开发工具包,Java Development Kit 的缩写。JDK 是正哥 Java 的核心,包括了 Java 运行环境、Java 工具和 Java 基础类库。
JRE:Java 运行环境,Java Runtime Environment 的缩写。运行Java 程序所必需的环境的集合,包含 JVM 标准实现及 Java 核心类库。
JavaSE:Java Standard Edition,标准版。
JavaEE:Java Enterprise Edition,企业版,又称J2EE。,用于分布式网络程序的开发。
JavaME:Java Micro Edition,是为机顶盒、移动电话和 PDA 之类的嵌入式消费电子设备提供 Java 语言平台,包括虚拟机和一系列标准化的 Java API。
GC:垃圾回收,Grabage Collection 的缩写。当 Java 虚拟机发觉内存资源紧张时,则会自动的清理无用对象(没有被引用到的对象)所占用的内存空间。
1.3.JVM 能有几个实例?
每个Java 程序对应一个 JVM 实例,当一个 Java程序运行时,就创建一个 JVM 实例,因此 JVM 实例的个数取决于同时执行的程序个数。
1.4.Java 是如何实现跨平台的?
Java 是利用 JVM(Java虚拟机)实现跨平台的。
Java源代码(.java)经过 Java编译器变异成 Java字节码(.class),执行 Java字节码,Java 字节码经过 JVM 解释为具体平台的具体指令,并执行。不同平台有不同的 JVM ,所以说 Java 字节码可以在主流平台上能够执行,在这个意义上 Java 是跨平台的,也就是说:Java的字节码是跨平台的。
1.5.简述 TCP / UDP 协议区别?
TCP 是面向连接的可靠的传输大量数据,速度相对较慢的协议;而 UDP 是面向非连接的不可靠的传输少量数据,速度较快的协议。
1.6.简述一下类、包、方法、变量、常量的命名规则?
类命名使用大驼峰法,如 public class StudentPojo
包命名使用全小写单词,如 com.student.entity
变量、方法命名使用小驼峰法,如 getAge()、String userName = ""
常量命名使用全大写,尽量表露清晰,如 int STUDENT_COUNT = 50
1.7.Java 有几种注释方法?
共三种,分别是单行注释,如 // ;多行注释,如 /* */;javadoc注释,如/** */
1.8.如何增加代码的可观性和清晰度?
增加注释;代码格式整齐;命名规范;捕捉异常;添加单元测试
1.9.Java 中的结构化程序设计有哪三种基本流程,分别对应哪些语句?
分别是顺序、选择、循环;选择对应 if / switch;循环对应 for / while / do ... while
1.10.Java 中的原始类型及其长度
类型名称 | 字节长度 |
---|---|
byte | 1字节,8位 |
boolean | 1字节,8位 |
short | 2字节,16位 |
int | 4字节,32位 |
long | 8字节,64位 |
float | 4字节,32位 |
double | 8字节,64位 |
char | 2字节,16位 |
1.11.描述 JVM 加载 class 文件的原理机制?
JVM 中类的装载是由 ClassLoader 和它的子类来实现的,Java ClassLoader 是一个重要的 Java 运行时的系统组件,它负责在运行时查找和装入类文件中的类。
1.12.Java 中会存在内存泄漏吗?
会存在。一般内存泄漏有两种方式。一种是在堆中分配的内存,在没有将其释放掉时,就将所有能访问到这块内存的方式都删掉;另一种是在内存对象已经不需要的时候,还仍然保留他的内存和他的访问方式(引用)。
第一种情况,Java 的垃圾回收机制可以很好的解决。所以 Java 的内存泄漏主要指第二种情况。
1.13.Java 源文件是否可以包含多个类?
可以包含多个类,但是只能有一个 public 类,且文件名必须与 public 类相同;若没有 public 类,则文件名可以任取;建议一个文件只写一个 Java 类。
1.14.列出常用的 JDK 包
java.lang 包:包含了 JDK 提供的基础类,比如 String,这个包是唯一一个不用导入就可以使用的
java.util 包:包含了系统辅助类,特别是集合类 Collection、List、Map等
java.io 包:包含了与输入输出相关的类
java.net 包:包含了与网络相关的包,比如 URL
java.sql 包:包含了与数据库操作相关的包,如Connection、Statement、ResultSet等
1.15.什么是递归?什么情况下会用到?
指函数/程序/子程序在运行过程中直接或间接调用自身而产生的重入现象。一般用于解决三类问题:1)数据的定义是按照递归定义的,如:斐波那契函数;2)问题解法按照递归算法实现,如:回溯;3)数据的结构形式是按照递归定义的,如:树的遍历,图的搜索
1.16.排序有哪几种方法?
插入排序(直接插入、希尔排序)、交换排序(冒泡排序、快速排序)、选择排序(直接选择排序、堆排序)、归并排序、分配排序(箱排序、基数排序)