杨老师课堂之JavaSe 部分面试题

1.简述 path 和 classpath 的区别

  • path:path 环境变量是系统环境变量中的一种,它用于保存一系列可执行文件的路径, 每个路径之间以分号分隔。当在命令行窗口运行一个可执行文件时,操作系统首先会在当前 目录下查找是否存在该文件,如果不存在会继续在 path 环境变量中定义的路径下去寻找这 个文件,如果仍未找到,系统会报错。
  • classpath:classpath 环境变量也是系统环境变量中的一种,它用于保存一系列类(.class) 文件的路径。当 Java 虚拟机需要运行一个类时,会先在 classpath 环境变量中所定义的路径 下去寻找所需的 class 文件。如果 classpath 的路径最后有分号,则在 classpath 中找不到时, 再到当前路径查找;如果最后无分号,则只在 classpath 设置的路径中查找。

2.请说说你对 JVM 的理解

​ JVM 是 JavaVirtual Machine 的缩写,全称是 Java 虚拟机。Java 语言的一个非常重要的 特性就是跨平台性,而 Java 虚拟机是实现这一特性的关键。不同的操作系统需要使用不同 版本的虚拟机,这种方式使得 Java 语言能够“一次编写,到处运行”。Java 语言编译程序只 需生成在 Java 虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。 Java 虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。

3.char 型变量中能不能存贮一个中文汉字?请说出理由

​ char 型变量中能不能存贮一个中文汉字?请说出理由。 char 型变量是用来存储 Unicode 编码的字符的, Unicode 编码字符集中包含了汉字,所以,char 型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在 Unicode 编码 字符集中,那么,这个 char 型变量中就不能存储这个特殊汉字。补充说明:Unicode 编码占 用两个字节,所以 char 类型的变量也是占用两个字节。

4.简述 break、continue 和 return 语句的区别。

  • break 语句:在 switch 条件语句和循环语句中都可以使用 break 语句。当它出现在 switch 条件语句中时,作用是终止某个 case 并跳出 switch 结构。当它出现在循环语句中,作用是 跳出循环语句,执行后面的代码
  • continue 语句:continue 语句用在循环语句中,它的作用是终止本次循环,执行下一次循 环。
  • return 语句:return 语句可以用于从当前的方法中退出,返回到该调用的方法的语句处, 继续执行。return 返回一个值给调用该方法的语句,返回值的数据类型必须与方法的声明中 的返回值的类型一致。

5.请简述方法重写和方法重载的区别?

  • 方法重写(Overriding)和方法重载(Overloading)是 Java 多态性的不同表现。
  • 重写 Overriding 是父类与子类之间多态性的一种表现,重载 Overloading 是一个类中多态性的一 种表现。 如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。
  • 子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义 如同被“屏蔽”了。 如果在同一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类 型,则称为方法的重载(Overloading)

6.请简述 Error 和 Exception 有什么区别?

  • Error 表示恢复不是不可能但很困难的情况下的一种严重问题,比如说内存溢出,仅靠修 改程序本身是不能处理这样的情况的。
  • Exception 表示程序本身可以处理的错误,在开发 Java 程序中进行的异常处理,都是针 对 Excption 类及其子类。在 Exception 类的众多子类中有一个特殊的 RuntimeException 类, 该类及其子类用于表示运行时异常,除了此类,Exception 类下所有其它的子类都用于表示 编译时异常。

7.请简述 synchronized 和 java.util.concurrent.locks.Lock 的异同点

  • 相同点:Lock 能完成 synchronized 所实现的所有功能。
  • 不同点:总的来说,Lock 更加灵活。Lock 有比 synchronized 更精确的线程予以和更好的 性能。synchronized 会自动释放锁,但是 Lock 一定要求程序员手工释放,并且必须在 finally 从句中释放。synchronized 修饰方法时表示同一个对象在不同的线程中表现为同步队列。如 果实例化不同的对象 那么 synchronized 就不会出现同步效果了。

8.进程和线程之间有什么不同

  • 在一个操作系统中,每个独立执行的程序都可以称为一个进程,也就是“正在运行的程 序”。而在进程中还可以有多个执行单元同时执行,这些执行单元可以看作程序执行的一条 条线索,被称为线程。
  • Java 运行环境是一个包含了不同的类和程序的单一进程。线程可以被 称为轻量级进程。线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源。

9.请简述装箱和拆箱的概念。

​ 包装类和基本数据类型在进行转换时,引入了装箱和拆箱的概念,其中装箱是指将基本 数据类型的值转为引用数据类型,反之,拆箱是指将引用数据类型的对象转为基本数据类型。

10.请简述 Hashtable 和 HashMap 的区别。

​ Hashtable 继承自 Dictionary 类,而 HashMap 是 Java1.2 引进的 Map 接口的一个实现 HashMap允许将null作为一个entry的key或者value,而Hashtable不允许还有就是, HashMap 把 Hashtable 的 contains 方法去掉了,改成 containsvalue 和 containsKey。

​ 最大的不同是, Hashtable 的方法是线程安全的,而 HashMap 不是,在多个线程访问 Hashtable 时,不需要 自己为它的方法实现同步,而 HashMap 就必须为之提供外同步。

11.请简述使用泛型的优点。

(1)提高了 Java 程序的类型安全,在编译时期解决错误,避免程序在运行时期发生错 误。

(2)消除强制类型转换。

(3)泛型可以替代 Object 类型的参数和变量的使用,带来性 能的大幅提高并增加代码的可读性。

12.简述 TCP/IP 协议的层次结构

​ TCP/IP 协议的层次结构比较简单,共分为四层,分别是应用层、传输层、网络层和链 路层。其中链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如 针对光纤、双绞线提供的驱动。

​ 网络层是整个 TCP/IP 协议的核心,它主要用于将传输的数 据进行分组,将分组数据发送到目标计算机或者网络。运输层主要使网络程序进行通信,在 进行网络通信时,可以采用 TCP 协议,也可以采用 UDP 协议。应用层主要负责应用程序的 协议,例如 HTTP 协议、FTP 协议等。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JavaEdge

JVM内存模型1 程序计数器2. Java虚拟机栈(JVM Stack)3. 本地方法栈(Native Method Stack)4 Java堆(Java Heap)5 方法区6 直接内存(Direc

49790
来自专栏技术记录

Protobuf3语法详解

1.3K50
来自专栏python3

python3--模块collections,time,random,sys

有如下值集合[11,22,33,44,55,66,77,88,99,90......],将所有大于66的值保存至字典的第一个key中,小于66的值保存至第二个k...

10720
来自专栏皮皮之路

【JVM】浅谈双亲委派和破坏双亲委派

笔者曾经阅读过周志明的《深入理解Java虚拟机》这本书,阅读完后自以为对jvm有了一定的了解,然而当真正碰到问题的时候,才发现自己读的有多粗糙,也体会到只有实践...

31120
来自专栏无题

堆外内存概要

DirectByteBuffer JDK中使用 DirectByteBuffer对象来表示堆外内存,每个 DirectByteBuffer对象在初始化时,都会创...

25540
来自专栏用户2442861的专栏

《Java虚拟机原理图解》 1.1、class文件基本组织结构

http://blog.csdn.net/luanlouis/article/details/39892027

12120
来自专栏IMWeb前端团队

Promise接口实现之jQuery 的deferred对象

本文作者:IMWeb json 原文出处:IMWeb社区 未经同意,禁止转载 Promise是什么? 我们知道JavaScript是单线程,如果遇到某...

205100
来自专栏小灰灰

Java 线程学习

Java 线程相关 如何创建线程(两种方式,区别,使用场景) 线程状态调度 多线程数据共享(会有什么问题,如何实现共享,多线程操作同一个变量会有什么问题,如果不...

27190
来自专栏纯洁的微笑

jvm系列(一):java类的加载机制

1、什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Cl...

41260
来自专栏二进制文集

JDK源码分析 多线程

对于JDK源码分析的文章,仅仅记录我认为重要的地方。源码的细节实在太多,不可能面面俱到地写清每个逻辑。所以我的JDK源码分析,着重在JDK的体系架构层面,具体源...

11720

扫码关注云+社区

领取腾讯云代金券