本文章为个人对面试题的感想和总结
前言
本人因为想要积累一些经验,所以向部分公司投递了简历,在华清远见学习期间,部分公司的面试已经开始了,面试题几乎都是老师平时画的重点 ,在这里的学习帮助我在面试中能够从容不迫地面对并回答面试官的问题。
正文
在我所有的面试中,虽不能说是百分之一百,但是可以说是百分之八十以上的面试中,第一道题目都是面向对象的三大特征,部分公司还会要求列举出例子或者具体表现,比如:
继承:作用是子类可以竭诚父类的属性和方法,举例则是列举出一个Student类继承于Person类,Student类可以有自己的属性(学号等),也可以有父类的属性(姓名,性别)。
封装:封装的概念是类是方法和属性的封装,方法则是语句的封装,还有将类中所有的属性用private进行修饰,并用set()与get()方法对其进行访问和修改,举例则是装箱(将基本数据类型赋值给封装类对象)和拆箱(把封装类对象赋值给基本数据类型变量)。
多态:多态的概念是一种状态,多种表现形式,举例则是父类引用指向子类对象。
三大特征之后还有概率比较高的题目就是排序与查找的代码了,分别是顺序查找,二分查找以及冒泡排序。
首先是顺序查找:
package com.hqyj.test;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
int[] array = { 1, 20, 2, 17, 28, 36, 54, 14, 9, 27 };
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
int i = 0;
for (; i < array.length; i++) {
if (array[i] == num) {
System.out.println(i);
break;
}
}
if (i == array.length) {
System.out.println(-1);
}
}
}
第二个是二分查找:
package com.hqyj.test;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
int array[] = {10,25,36,47,58,69,78,95,186,196};
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
int start = 0;
int end = array.length-1;
while(start <= end) {
int middle = (start+end) /2;
if(num== array[middle] ) {
System.out.println(middle);
break;
}else if(num > array[middle]) {
start = middle+1;
}else {
end = middle-1;
}
}
if(start> end) {
System.out.println("找不到");
}
}
}
最后是冒泡排序:
package com.hqyj.test;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = { 80, 13, 95, 48, 46, 28, 1, 9, 10, 11 };
// 正序
// 一共要执行多少轮
for (int j = 0; j < arr.length - 1; j++) {
// 将该轮要找的最大数挪到该有的位置上,一共比较交换多少次
for (int i = 0; i < arr.length - 1 - j; i++) {
// 前一个数和后一个数进行比较,如果前一个数大,交换位置
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
//打印排序后的数组
for (int i : arr) {
System.out.println(i);
}
}
}
在这些之后便是一些“区别”题,这里列出我遇见过的几道:
第一个是final,finally和finalize的区别:
final是修饰词,可以修饰类,方法和变量。
当final修饰类的时候,该类不可以被继承。
当final修饰方法的时候,该方法不可以被重写。
当final修饰变量的时候,如果修饰的是全局变量,定义的时候必须赋初值,如果是基本数据类型,改变量的值不可以被改变,如果是引用数据类型,则该变量的地址不可以被改变。
finally结合try{...}catch{...}使用,作用是无论是否抛出异常都会执行的一段语句块,经常用来做关流操作。
finalize是对象的一种方法,在垃圾回收机制回收该对象时调用,改方法可能会使该对象复活,使垃圾回收机制不再对该对象进行回收。
第二个则是StringBuffer,StringBuilider以及String的区别:
它们三个都用于字符串的频繁拼接,因为String频繁拼接,消费String池空间,需要频繁运行垃圾回收机制,影响系统性能,所以字符串的频繁拼接建议使用StringBuffer和StringBuilider。StringBuffer是线程安全的,但是速度相对于StringBuilider比较慢,而StringBuilider是线程不安全的,但是速度比StringBuffer要更快一些。
还有则是一些定义作用题,比如垃圾回收机制(GC)的相关知识:
作用:回收系统所不用的内存。
启动时间:在Java虚拟机(JVM)空闲时或者系统内存即将满溢时调用。
调用权限:垃圾回收机制是系统级守护线程,程序员不必手动调用,也不能精确控制和干预。
工作流程:当一个对象从可达时变成不可达时的时候,系统会通知垃圾回收机制前来回收该对象,此时会调用该对象的finalize方法,该对象可能会复活该对象,使其变成可达时,若成功复活,则垃圾回收机制不再对其进行回收,若没有成功复活,则垃圾回收机制回收该对象。
另外还有部分公司会问一些代码题,比如将一个文本文件的内容复制到另一个空白文本文件中:
package com.hqyj.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test2 {
public static void main(String[] args) throws IOException {
File file = new File("C:\\Users\\25244\\Desktop\\test.txt");
File file1 = new File("C:\\Users\\25244\\Desktop\\test2.txt");
FileInputStream fis = null;
FileOutputStream fos = null;
fis = new FileInputStream(file);
fos = new FileOutputStream(file1);
byte b[] = new byte[1024];
int length = 0;
while ((length = fis.read(b)) != -1) {
fos.write(b);
}
fis.close();
fos.close();
}
}
总结
总的来说,在华清远见的学习,帮助我通过了原本我不能通过的面试,在这里学到的不只是知识,还有面试技巧,在这里把我的学习以及面试感想公布出来,希望对浏览这篇文章的人有所帮助~