欢迎光临散文网 会员登陆 & 注册

java程序员找工作&跳槽必备面试宝典

2022-08-20 10:35 作者:嘘-臣妾做不到啊  | 我要投稿

  台下十年功,台上一分钟。不管学习多久,终究是要面临面试的关卡,士兵不打没有准备的战,今天就给大家整理一些面试方面的题,快快刷起来。


第一部分:java基础、语法

1.Java跨平台原理(字节码文件、虚拟机)




C/C++语言都直接编译成针对特定平台机器码。如果要跨平台,需要使用相应的编译器重新编译。


Java源程序(.java)要先编译成与平台无关的字节码文件(.class),然后字节码文件再解释成机器码运行。解释是通过Java虚拟机来执行的。


字节码文件不面向任何具体平台,只面向虚拟机。


Java虚拟机是可运行Java字节码文件的虚拟计算机。不同平台的虚拟机是不同的,但它们都提供了相同的接口。


Java语言具有一次编译,到处运行的特点。就是说编译后的.class可以跨平台运行,前提是该平台具有相应的Java虚拟机。但是性能比C/C++要低。


Java的跨平台原理决定了其性能没有C/C++高




2.Java的安全性


语言层次的安全性主要体现在:


Java取消了强大但又危险的指针,而代之以引用。由于指针可进行移动运算,指针可随便指向一个内存区域,而不管这个区域是否可用,这样做是危险的,因为原来这个内存地址可能存储着重要数据或者是其他程序运行所占用的,并且使用指针也容易数组越界。


垃圾回收机制:不需要程序员直接控制内存回收,由垃圾回收器在后台自动回收不再使用的内存。避免程序忘记及时回收,导致内存泄露。避免程序错误回收程序核心类库的内存,导致系统崩溃。


异常处理机制:Java异常机制主要依赖于try、catch、finally、throw、throws五个关键字。


强制类型转换:只有在满足强制转换规则的情况下才能强转成功。


底层的安全性可以从以下方面来说明


Java在字节码的传输过程中使用了公开密钥加密机制(PKC)。


在运行环境提供了四级安全性保障机制:


字节码校验器 -类装载器 -运行时内存布局 -文件访问限制


3.Java三大版本


Java2平台包括标准版(J2SE)、企业版(J2EE)和微缩版(J2ME)三个版本:


Standard Edition(标准版) J2SE 包含那些构成Java语言核心的类。


比如:数据库连接、接口定义、输入/输出、网络编程


Enterprise Edition(企业版) J2EE 包含J2SE 中的类,并且还包含用于开发企业级应用的类。


比如servlet、JSP、XML、事务控制


Micro Edition(微缩版) J2ME 包含J2SE中一部分类,用于消费类电子产品的软件开发。


比如:呼机、智能卡、手机、PDA、机顶盒


他们的范围是:J2SE包含于J2EE中,J2ME包含了J2SE的核心类,但新添加了一些专有类


应用场合,API的覆盖范围各不相同。


4.什么是JVM?什么是JDK? 什么是JRE?


JVM :JVM是Java Virtual Machine(Java虚拟机)的缩写,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。JVM是Java平台的基础,和实际的机器一样,它也有自己的指令集,并且在运行时操作不同的内存区域。 JVM通过抽象操作系统和CPU结构,提供了一种与平台无关的代码执行方法,即与特殊的实现方法、主机硬件、主机操作系统无关。JVM的主要工作是解释自己的指令集(即字节码)到CPU的指令集或对应的系统调用,保护用户免被恶意程序骚扰。 JVM对上层的Java源文件是不关心的,它关注的只是由源文件生成的类文件(.class文件)。


JRE:JRE是java runtime environment(java运行环境)的缩写。光有JVM还不能让class文件执行,因为在解释class的时候JVM需要调用解释所需要的类库lib。在JDK的安装目录里你可以找到jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和lib和起来就称为jre。所以,在你写完java程序编译成.class之后,你可以把这个.class文件和jre一起打包发给朋友,这样你的朋友就可以运行你写程序了(jre里有运行.class的java.exe)。JRE是Sun公司发布的一个更大的系统,它里面就有一个JVM。JRE就与具体的CPU结构和操作系统有关,是运行Java程序必不可少的(除非用其他一些编译环境编译成.exe可执行文件……),JRE的地位就象一台PC机一样,我们写好的Win32应用程序需要操作系统帮我们运行,同样的,我们编写的Java程序也必须要JRE才能运行。 


JDK:JDK是java development kit(java开发工具包)的缩写。每个学java的人都会先在机器上装一个JDK,那 让我们看一下JDK的安装目录。在目录下面有六个文件夹、一个src类库源码压缩包、和其他几个声明文件。其中,真正在运行java时起作用的是以下四个文件夹:bin、include、lib、jre。现在我们可以看出这样一个关系,JDK包含JRE,而JRE包含JVM。


bin:最主要的是编译器(javac.exe)


include:java和JVM交互用的头文件


lib:类库      


jre:java运行环境 


(注意:这里的bin、lib文件夹和jre里的bin、lib是不同的)总的来说JDK是用于java程序的开发,而jre则是只能运行class而没有编译的功能。eclipse、idea等其他IDE有自己的编译器而不是用JDK bin目录中自带的,所以在安装时你会发现他们只要求你选jre路径就ok了。


JDK,JRE,JVM三者关系概括如下:


jdk是JAVA程序开发时用的开发工具包,其内部也有JRE运行环境JRE。JRE是JAVA程序运行时需要的运行环境,就是说如果你光是运行JAVA程序而不是去搞开发的话,只安装JRE就能运行已经存在的JAVA程序了。JDk、JRE内部都包含JAVA虚拟机JVM,JAVA虚拟机内部包含许多应用程序的类的解释器和类加载器等等。


5.Java三种注释类型


共有单行注释、多行注释、文档注释3种注释类型。使用如下:


单行注释,采用“//”方式.只能注释一行代码。如://类成员变量


多行注释,采用“/*...*/”方式,可注释多行代码,其中不允许出现嵌套。如:


/*System.out.println("a");


System.out.println("b");


System.out.println("c");*/


文档注释,采用“/**...*/”方式。如:


/**


* 子类 Dog


* @author Administrator


**/


public class Dog extends Animal{}



第二部分:String相关

1.下面程序的运行结果是()(选择一项)


String str1="hello";


 


String str2=new String("hello");


 


System.out.println(str1==str2);


A. true

B. false

C. hello

D. he

答案:B


分析:str1没有使用new关键字,在堆中没有开辟空间,其值”hello”在常量池中,str2使用new关键字创建了一个对象,在堆中开辟了空间,”==”比较的是对象的引用,即内存地址,所以str1与str2两个对象的内存地址是不相同的


2.Java语言中,String类中的indexOf()方法返回值的类型是()


A. int16

B. int32

C. int

D. long

答案:C


3.给定以下代码,程序的运行结果是 ()(选择一项)


public class Example {


String str=new String("good");


char [] ch={'a','b','c'};


 


public static void main(String[] args) {


Example ex=new Example();


ex.change(ex.str, ex.ch);


System.out.print(ex.str+"and");


System.out.print(ex.ch);


}


 


public void change(String  str,char ch[]){


str="test ok";


ch[0]='g';


}


}


A. goodandabc

B. goodandgbc

C. test okandabc

D. test okandgbc

答案:B


分析:在方法调用时,在change方法中对str的值进行修改,是将str指向了常量江池中的”test ok”,而主方法中的ex.str仍然指向的是常量池中的”good”。字符型数组在方法调用时,将主方法中ex.ch的引用传递给change方法中的ch,指向是堆中的同一堆空间,所以修改ch[0]的时候,ex.ch可以看到相同的修改后的结果。


4.执行下列代码后,哪个结论是正确的()(选择两项)


String[] s=new String[10];


A. s[10]为””

B. s[9]为null

C. s[0]为未定义

D. s.length为10

答案:BD


分析: 引用数据类型的默认值均为null

s.length数组的长度


5.实现String类的replaceAll方法


思路说明:replaceAll方法的本质是使用正则表达式进行匹配,最终调用的其实是Matcher对象的replaceAll方法。


import java.util.regex.Matcher;


import java.util.regex.Pattern;


 


public class TestStringReplaceAll {


public static void main(String[] args) {


String str = "a1s2d3f4h5j6k7";


// 将字符串中的数字全部替换为0


System.out.println(replaceAll(str, "\\d", "0"));


}


 


/**


 * @param str:源字符串


 * @param regex:正则表达式


 * @param newStr:替换后的子字符串


 * @return 返回替换成功后的字符串


 */


public static String replaceAll(String str, String regex, String newStr) {


Pattern pattern = Pattern.compile(regex);


Matcher mathcer = pattern.matcher(str);


String reslut = mathcer.replaceAll(newStr);


return reslut;


}


}


6.在“=”后填写适当的内容:


String []a=new String[10];


则:a[0]~a[9]=null;


a.length=10;


如果是int[]a=new int[10];


则:a[0]~a[9]= (0)


a.length= (10)


7.是否可以继承String类?


答:不可以,因为String类有final修饰符,而final修饰的类是不能被继承的,实现细节不允许改变。


public final class String implements java.io.Serializable,


Comparable< String>, CharSequence




第三部分:集合

第四部分:多线程

IO流

网络编程

异常处理

Web方面相关

设计模式

高级框架

微服务框架

数据库

JVM

Linux操作

算法分析及手写代码

篇幅有限,后续还有内容,我已经整理成电子版保存到网盘,另外还有很多学习编程可以用到的资料可以分享,有需要记得关注私信我,或者你需要什么学习资料,评论区告诉我,我会不定期上传,感谢支持~





java程序员找工作&跳槽必备面试宝典的评论 (共 条)

分享到微博请遵守国家法律