1,俗话说:“一天不练,手生脚慢;两天不练,功夫减半;三天不练,成了门外汉。”作为一名程序员,熟练的敲写代码是必不可少的能力,请你用记事本独立写出打印Hello World的Java程序。
2,我们如果要成为一名Java后端工程师,必不可少的需要了解Java的开发环境和执行过程,而Java程序的开发离开不了JVM(Java虚拟机:Java Virtual Machine),学习Java虚拟机可以帮助开发者更深入地理解Java语言本身的特性,并能更好地理解Java语言相关的编程范例和最佳实践。
- 请你介绍一下JVM的基本组成。
- 请你讲述Java跨平台、工作原理。
- 在安装新版的JDK中,会自动帮你配置Path环境变量,但企业中使用的JDK8可能需要手动配置,所以请你在自己电脑上操作配置JDK环境。
3,选择适合的开发工具(IDE),可以帮助程序员提高开发效率,请你使用自己的开发工具创建一个Java项目的操作过程,要求如下:
4,变量就是内存中的一块区域,用来存储一个数据的,且存储的数据可以被替换。
请你介绍一下Java中命名变量的数据类型。
5,标志符就是名字。我们写程序时会起一些名字,如类名、方法名、变量名,取名时要遵守一定的规则。作为一名优秀的程序员要规范的命名,显示自己的专业性。
(1)标识符的要求
基本要求:由___、___、___和___等组成强制要求:不能以___开头、不能是___、区分大小写。
(2) 命名知道规范
变量名称:满足标识符规则,建议全英文、有意义、首字母__写,满足“驼峰模式”。类名称: 满足标识符规则,建议全英文、有意义、首字母__写,满足“驼峰模式”。
6,计算机对数据的识别、运算和存储都建立在二进制上,数据信息想要在计算机上参与计算都需要被编码。为了方便信息交换,美国国家标准学会ANSI(American National Standard Institute)制定了ASCII编码。
请你写出大写 A 和小写 a 分别对应的ASC||对应的值。
7,开发中会存在不同类型的变量或者数据赋值给其他类型的变量,也存在不同类型的数据一起运算,其结果类型要确定下来,所以请你从小到大写出自动类型转换的形式规则,并说出int类型变量在内存中存储几个字节。
8.说出图片中逻辑运算符 || 和 && 的特点 和 程序运算结果。
9,请说出以下三元运算符的实现思路:
public class test {
public static void main(String args[]){
int i = 10;
int j = 30;
int k = 50;
int max = i > j ? i > k ? i : k : j > k ? j : k;
System.out.println(max);
}
}
10,Java中分支结构有两种分别是什么。
11,请说明一下if和switch的区别。
12,请简要说明一下switch的注意事项。
13,switch的穿透现象是什么,有什么好处,请简要叙述一下?
14,介绍一下循环控制中三种形式的跳转语句,并说明一下各自的作用。
15,请利用for循环控制的知识,写出打印下图三角形的代码。
16,定义一个二维数组,并循环打印出数组内的元素。
17,请说明一下代码中那些是实参与形参,以及方法的值传递和引用传递对应的运行结果。
public class test {
public static void main(String[] args) {
int n = 0;
add(n);
System.out.println(n);
Cat c = new Cat();
System.out.println(c.name);
updateName(c);
}
public static void add(int n) {
n++;
}
public static void updateName(Cat c) {
c.name = "机甲暴龙战士";
}
}
class Cat {
String name = "小花";
}
18,请你定义一个集合用foreach循环遍历打印集合内容。
19,请你简述一下collection集合体系。
20,简单讲讲StringBuffer和StringBuilder的区别。
21,说说成员变量和局部变量之间的区别。
22,请你说一下Java中面向对象的三大特证。
23,关键字this的作用是什么?
public void goWith(String name) {
//注意:this在方法中,谁调用这个方法this就代表谁!
System.out.println(this.name + "正在和" + name + "比赛~");
}
public Car(String name, double price) {
//注意:this在构造器中,代表构造器正在初始化的那个对象
System.out.println(this);
this.name = name;
this.price = price;
}
24,请同学根据以下代码谈谈面向对象的向上转型和向下转型。
(1)向上转型
public class test2 {
public static void main(String[] args) {
Fruit fruit = new Apple();
fruit.show();
}
}
class Fruit {
public void show() {
System.out.println("this is a fruit");
}
}
class Apple extends Fruit {
@Override
public void show() {
System.out.println("this is a apple");
}
public void test() {
System.out.println("I am a apple");
}
}
(2)向下转型
Fruit fruit = new Apple();
Apple apple = (Apple) fruit;
class Orange extends Fruit {
@Override
public void show() {
System.out.println("this is a Orange");
}
public void test() {
System.out.println("I am a Orange");
}
}
Fruit fruit = new Apple();
Orange orange = (Orange) fruit;
25,在Java中对象只能单继承,而在C++中对象可以多继承,请你谈谈自己对Java中接口的理解,接口对Java面向对象的作用。
26,Java中有四种访问控制修饰符,用来保护对于类、变量、方法以及构造方法的访问。还有非访问控制修饰符,请你各自列举一下。
27,通过下面代码块说出Java父类与子类的静态代码块,构造方法的执行顺序。
public class test2 {
public static void main(String[] args) {
Animal animal2 = new Dog();
}
static {
System.out.println("这是类的静态代码块");
}
}
class Dog extends Animal {
public Dog() {
System.out.println("子类的构造方法");
}
static {
System.out.println("这是子类静态代码块");
}
}
class Animal {
public Animal() {
System.out.println("父类的构造方法");
}
static {
System.out.println("这是父类静态代码块");
}
}
28,同学们在编写程序过程中避免不了需要异常处理,异常的处理方式通常有三种形式
其中:异常处理方式1 —— throws
异常处理方式2 —— try…catch…
两种方式运用的较多,你能简要说明一下这两种方式处理的特点吗?
29,小明在学习Java过程中对IO流不太理解,你能帮助他讲解下列的程序是怎么操作的吗?
public class ByteBufferDemo {
public static void main(String[] args) {
try (
InputStream is = new FileInputStream("D:\\大学相关文件\\照片\\壁纸\\iTab-0.jpg");
InputStream bis = new BufferedInputStream(is);
OutputStream os = new FileOutputStream("D:\\大学相关文件\\照片/123.jpg");
OutputStream bos = new BufferedOutputStream(os);
) {
byte[] buffer = new byte[1024];
int len;
while ((len = bis.read(buffer)) != -1) {
bos.write(buffer, 0, len);
System.out.println("复制完成了!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
30,请你介绍一下递归算法和下图程序的执行流程。
public class test2 {
public static void main(String[] args) {
System.out.println(f(5));
}
public static int f(int n) {
if (n == 1) {
return 1;
} else {
return f(n - 1) * n;
}
}
}
31,Java中的IO流,需要经常添加输入和输出文件的路径,请你说明一下绝对路径和相对路径是什么样的。
32, 请你描述一下线程的几种状态分别是什么,以及他们之间的互相转换。
33,请你说说线程和进程之间的关系。
答案:
1,
2,(1)
(2)
(3)
3,略
4,
数组,类,接口被称为引用数据类型,共同特点是,他们的字面值并不是一个“值”而是一段地址。
5, (1) 数字、字母、下划线(_)和美元符($) 数字、关键字 (2) 小 大
6,
A -> 65 a -> 97
7,
8,(1)
9,
10,略
11. 都是做分支操作的,if 的功能更加强大,适合做区间匹配,如果是值匹配的操作建议用 switch,格式清晰,性能较好。
12,表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String、不支持double、float、long。
case给出的值不允许重复,且只能是字面量,不能是变量。
13,(1)switch中没有写break,遇到了这个case会一直往下走,直到遇到break才会跳出适合做。
(2)多个值对应的case块的操作是相同的!可以穿透到一个位置集中处理,这样可以提高开发效率,降低代码重复。
14,(1)break只能在循环体内和switch语句体内时使用:
当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体
当break出现在循环体内,但并不在switch语句体内时,则在执行break后,跳出本层循环体
(2)continue语句是针对break语句 的补充。continue不是立即跳出循环体,而是跳过本次循环结束前的语句,回到循环的条件测试部分,重新开始执行循环。
(3)从当前的方法中退出,返回到该调用的方法的语句处,继续执行;返回一个值给调用该方法的语句,返回值数据类型必须与方法的声明中返回值的类型一致,可以使用强制类型转换来使数据类型一致;return当方法说明中用viod声明返回值为空时,应使用这种格式,不返回任何值。
15,
public static void main(String[] args) {
//控制层数
for (int i = 1; i <= 5; i++) {
//控制每层的空格数
for (int j = 1; j <= 5 - i; j++) {
System.out.print(" ");
}
//控制每层打印的*
for (int k = 1; k <= i * 2 - 1; k++) {
System.out.print("*");
}
System.out.print("\n");
}
}
16,略
17,
因为调用方法进行传参时分为值传递与引用传递。如果参数的类型是基本数据类型,那么就是值传递,是单向传递,只能从实参传给形参,不能形参传给实参,变量的作用域只在方法内,方法结束,变量内存释放。如果是引用数据类型,那么就是引用传递,值传递是实参把自己变量本身存的数值赋值给形参,引用传递是实参把自己变量本身存的对象内存地址值赋值给形参,形参的改变,已经在堆内存中对实参的改变。
18,
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");
for (String item : list) {
System.out.println(item);
}
}
19,
20,深入理解String、StringBuffer和StringBuilder
21,
22,略
23,this作用:代表了当前对象的地址,可以访问当前对象的成员变量和成员方法。
26,
27,
28,
29,
public class ByteBufferDemo {
public static void main(String[] args) {
try (
// 这里面只能放置资源对象,用完会自动关闭:自动调用资源对象的close方法关闭资源(即使出现异常也会做关闭操作)
// 1,创建一个字节输入流管道与原文件接通
InputStream is = new FileInputStream("D:\\大学相关文件\\照片\\壁纸\\iTab-0.jpg");
// a.把原始的字节输入流包装成高级的缓冲字节输入流
InputStream bis = new BufferedInputStream(is);
// 2,创建一个字节输出流管道与目标文件接通
OutputStream os = new FileOutputStream("D:\\大学相关文件\\照片/123.jpg");
// b.把字节输出流管道包装成高级的缓冲字节输出流管道
OutputStream bos = new BufferedOutputStream(os);
) {
// 3,定义一个字节数组转移数据
byte[] buffer = new byte[1024];
int len; // 记录每次读取的字节数
while ((len = bis.read(buffer)) != -1) {
bos.write(buffer, 0, len);
System.out.println("复制完成了!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
30,方法调用自己的形式称为方法递归( recursion)。
递归算法三要素大体可以总结为:
- 递归的公式
- 递归的终结点
- 递归的方向必须走向终结点
31,绝对路径是带盘符的。相对路径是不带盘符的,默认到当前工程下寻找文件。
32,