java程序员面试宝典总结笔记

本文深入探讨了Java编程语言的关键概念,包括编译与运行机制、跨平台性、JVM原理、类与对象、数据存储区域、Java Web部署、静态变量与成员变量、栈与堆的区别、基本与引用数据类型比较、条件判断、字符串处理、数组操作、集合框架、多线程与进程、内存管理等核心知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、java在编译或者运行的时候,通过classpath的路径进行搜索,找到编译或者运行的时候所需要得类。当然首先进行搜索的是JRE下面的rt.jar文件。

2、javac -classpath 可以动态的指定类搜索的路径。

3、c++源码编译之后,生成的是特定机器可以直接执行的文件。而java源码生成的是中间的字节码文件。这些字节码文件是需要放在jvm中运行的,jvm有多个平台版本,所以java具有跨平台性,而c++则没有。

4、jvm一种用软件虚拟出来的计算机,同时具有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有自己的指令集。这也是它的夸平台特性。

5、运行时的数据存储区有堆(heap)和堆栈(stack)。一般情况下,栈中存放的是临时数据,堆中存放的是程序分配的显式数据。

6、jar cf hello.jar HelloWorld.class  java中给文件打成jar包(把class文件及其配制文件打包)  jar xvf hello.jar--解压jar包至当前目录。

7、java web:在目录上面必须有文件夹 WEB-INF,在该文件夹下面存放类文件和类库文件,和配制文件web.xml。Servlet存活在web容器之中的。web文件的打包生成的是War包,因为java是跨平台的所以java web文件可以不经过任何的修改直接部署到java EE的容器之中。

8、静态变量值得是在类中用static来修饰的变量,在这种变量的访问中用 类名.变量名来访问。 成员变量指的是没有加static修饰的变量,他的生命周期由对象来决定。局部变量是定义在方法中的变量,他的生命周期由{}来决定。

9、在java中栈的优势是存取速度比较快,能够实现数据共享,在栈中数据的大小和生命周期必须是确定的。栈中主要存放基本数据类型(java中8种基本数据类型)。java中的堆是一个运行时数据区,他的生命周期不必实现告诉编译器。用于对象的存储。

10、引用数据类型存放的是数据所在的地址,基本数据类型存放的是数据的值。

11、== 在进行基本数据类型比较的时候比较的是实际的值是否相等,而用于比较引用类型的时候比较的是引用的地址是否相等。当用equal的时候,比较的是字符串序列是否相等,equal方法是可以覆盖和重写的。

12、类是一种抽象,对象是对类的实现。类是一个事物所有属性的集合。

13、java的继承只有单继承,就是说子类只能去继承一个父类,而不能继承多个父类。方法的覆盖只需要定义一个名字、参数、返回值都一样的方法即可达到父类方法被覆盖的目的。

14、方法的覆盖(重写)和重载是不同的概念。重载是创建一个方法名相同但参数不同的方法。覆盖是子类方法对父类方法的覆盖。(java用覆盖的方法实现多态,让子类拥有自己的方法实现)

15、静态变量对于一个类来讲只有一份。


16、在java中,使用super关键字加()的形式来为父类的构造方法提供参数,通过参数的数据和类型来决定调用哪一个构造方法。如果调用的父类是默认的无参数构造方法,组可以不必显式的使用super()。

17、抽象类是对一种东西提取出来的抽象概念,通过abstract class来实现,他不能进行实例化。除此之外跟普通的类是没有什么差别的。对于接口,他的所有的方法都是抽象的,可以包含静态变量,但是静态变量的值是不可修改的。定义接口用interface,通过implements来实现接口。

18、包是java程序中关于命名空间的一种手段,package用来把一个类定义在某个包下,import用来进行包导入。

19、8种基本数据类型 byte short int long float double Boolean char

20、int/integer  int是基本数据类型,一般保存在栈内存中,可以用算数运算符进行加减乘除操作,在参数传递过程中直接传递它的值。Integer是int的包装类,其本质是一个类,一般存储在堆内存中,它的参数传递是它代表的对象的引用。

21、int的大小为4byte,为32bit。第一位是符号位。

22、以0开头的数字代表是八进制的,以0x开头的数字代表是十六进制的。

23、float类型的使用的时候,数字后面要加上F(了解数据类型的隐式转换)

24、BigDecimal类可以进行数据的精确计算(这个自己了解吧)

25、在java中不能用非0代表true,也不能用0代表false,只能用布尔型的true和false来进行条件判断。

26、char类型是可以存储汉字的,每个中文字符都有对应的Unicode编码。

27、String str1= “abc” ;String str2 = new String(“abc”);当用第一种方法创建字符串变量的时候,jvm会自动创建一个String对象,在创建该对象之前jvm会在String对象池中搜索该字符串是否已被创建,如果已被创建则直接返回一个引用,否则先创建再返回引用。对于第二种创建方法,会直接创建一个新的String对象并且返回一个引用给str2。

28、在java中,如果有大量的拼接字符串的需要的话,应该使用StringBuffer和StringBuilder类,他们可以避免不必要的String对象的产生,这样可以提高程序性能。其中StringBuilder线程是安全的线程。

29、String a = "中文"; String b = new String (a.getBytes(),"GBK") ; String c = new String (a.getBytes() , "UTF-8") ; 

30、int[ ] arr = new int[ ] {1,2,3,4,5} ; String[ ] arr2 = new String[ 3];  其实在java中数组本身就是一个类。

31、System.arraycopy()来拷贝数组,用=只是在拷贝了数据这个类的引用罢了。

32、二维数组的长度是不固定的,在实例化二维数组时,没有必要指定第二维的长度。每一个维度的元素个数都可以不尽相同啊!

33、Hashtable的方法是同步的,HashMap不能同步。HashTable不允许null值,HashMap允许null值。Hashtable使用Enumeration,HashMap使用Iterator。

34、进程是占用的CPU、内存等系统的基本单位,而线程是进程的执行单元。多进程的并发对于数据共享是很困难的,多线程非常容易。一个进程中的线程是可以互相通信的,不同进程之间的线程是不能互相通信的。线程只涉及到CPU的资源分配。

35、让一个类成为线程类的方式有两种,一个是实现javalang.Runnable接口,另一个是继承来自java.lang.Thread类。

36、


1.面向对象的特征有哪些方面 (1).抽象:抽象就是忽略一个主题中与当前目标 无关的那些方面, 以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题而 只是选择其中的一部分, 暂时不用部分细节。抽象包括两个方面,1)一是过程抽象,2) 二是数据抽象。 (2).继承:继承是一种联结类的层次模型, 并且允许和鼓励类的重用, 它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生, 这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而 原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量, 并且类可以修改或增加新的方法使之更适合特殊的需要。 (3).封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的方法。面向对象计算始于这个基本概念, 即现实世界可以被描绘成一系列完全自治、封装的对象, 这些对象通过一个受保护的接口访问其他对象。 (4).多态性:多态性是指: 允许不同 类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性;多态性语言具有灵活、抽象、行为共享、代码共享的优势, 很好的解决了应用程序函数同名问题。 2、String是最基本的数据类型吗? 基本数据类型包括byte、int、char、long、float、double、boolean和short。 java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 3、int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 booleanBoolean charCharacter byteByte shortShort intInteger longLong floatFloat doubleDouble 引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。 4、String 和StringBuffer的区别 JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。 5、运行时异常与一般异常有何异同? 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 ……
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值