java可以做什么样的事情?

程序员面试的葵花宝典

1.面向对象的特点是什么?

1.抽象:抽象就是忽略一个题目中那些与当前目标无关的方面,从而更加关注与当前目标相关的方面。抽象并不打算理解所有的问题,只是选取其中的一部分,暂时抛开一些细节。抽象包括两个方面,一是流程抽象,二是数据抽象。

2.继承:继承是一个连接类的层次模型,它允许并鼓励类的重用,它提供了一种清晰表达* * *的方式。对象的新类可以从现有类派生。这个过程叫做类继承。新类继承了原始类的特征。新类称为原类的派生类(子类),原类称为新类的基类(父类)。派生类可以从其基类继承方法和实例变量,类可以修改或添加新方法,使其更适合特殊需要。

3.封装:封装是将流程和数据封装起来,对数据的访问只能通过定义好的接口来实现。面向对象计算始于这样一个基本概念,即现实世界可以被描述为一系列完全自治和封装的对象,这些对象通过受保护的接口访问其他对象。

4.多态性:多态性指的是允许不同种类的对象响应相同的消息。多态性包括参数多态性和包含多态性。多态语言具有灵活性、抽象性、行为享受性和代码享受性等优点,很好地解决了应用功能同名的问题。

2.字符串是最基本的数据类型吗?

基本数据类型包括字节、整数、字符、长整型、浮点型、双精度型、布尔型和短整型。

java.lang.String类属于final类型,因此不能被继承或修改。为了提高效率和节省空间,我们应该使用StringBuffer类。

3.int和Integer有什么区别?

Java提供了两种不同的类型:引用类型和原语类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了一个封装的类。

原始类型封装类布尔布尔字符字节短整型整数浮点双精度

引用类型和原始类型的行为完全不同,它们有不同的语义。引用类型和原始类型有不同的特征和用途,包括:大小和速度,这个类型存储在什么样的数据结构中,引用类型和原始类型作为类的实例数据时指定的默认值。对象引用实例变量的默认值为null,而原始类型实例变量的默认值与其类型相关。

4.String和StringBuffer的区别

JAVA平台提供了两个类:String和StringBuffer,可以存储和操作字符串,也就是包含多个字符的字符数据。此String类提供了一个值不能更改的字符串。并且修改由这个StringBuffer类提供的字符串。当您知道字符数据将要改变时,可以使用StringBuffer。通常,可以使用StringBuffers动态构造字符数据。

5.运行时异常和一般异常有什么异同?

异常表示程序运行过程中可能出现的异常状态,运行时异常表示虚拟机正常运行时可能遇到的异常,是一种常见的运行错误。java编译器要求方法必须声明它抛出了一个可能的非运行时异常,但不要求它必须声明它抛出了一个未被捕获的运行时异常。

6.说出Servlet的生命周期,说出Servlet和CGI的区别。

Servlet被服务器实例化后,容器运行它的init方法,当请求到达时,它运行它的service方法。服务方法自动调度运行请求对应的doXXX方法(doGet,doPost),在服务器决定销毁实例时调用其destroy方法。

与cgi的区别在于servlet在服务器进程中,它通过多线程运行它的服务方法。一个实例可以服务多个请求,并且它的实例通常不会被销毁。CGI为每个请求生成一个新的进程,并在服务完成后销毁它,所以效率不如servlet。

7.描述ArrayList,Vector,LinkedList的存储性能和特点。

ArrayList和Vector都使用数组来存储数据。该数组中元素的数量大于实际存储的用于添加和插入元素的数据。两者都允许通过序列号直接索引元素,但是插入元素涉及数组元素移动等内存操作,所以索引数据快,插入数据慢。Vector使用同步方法(线程安全)。一般性能比ArrayList差,而LinkedList使用双向链表存储数据。它需要向前或向后遍历才能按序号索引数据,而插入数据时只需要记录该项的前后两项,所以插入速度更快。

8.EJB基于什么技术?并说出SessionBean和EntityBean,StatefulBean和StatelessBean的区别。

EJB包括会话Bean、实体Bean和消息驱动Bean,基于JNDI、RMI、JAT等技术实现。

SessionBean用于在J2EE应用中完成一些服务器端的业务操作,比如访问数据库和调用其他EJB组件。EntityBean用于表示应用系统中使用的数据。

对于客户端,SessionBean是一个非持久性对象,它实现了服务器上运行的一些业务逻辑。

对于客户端,EntityBean是一个持久对象,它表示存储在持久内存中的实体或由现有企业应用程序实现的实体的对象视图。

会话Bean可以细分为有状态会话Bean和无状态会话Bean,两者都可以在方法中执行系统逻辑。区别在于有状态会话Bean可以记录调用者的状态,所以一般来说,一个用户会有一个相应的有状态会话Bean的实体。虽然无状态会话Bean也是一个逻辑组件,但它并不负责记录用户的状态,也就是说,当用户调用无状态会话Bean时,EJB容器不会找到无状态会话Bean的特定实体来执行这个方法。换句话说,当几个用户执行一个无状态会话Bean的方法时,可能会执行同一个Bean的实例。从内存方面来说,与无状态会话Bean相比,有状态会话Bean消耗J2EE服务器的内存更多,但是有状态会话Bean的优点是可以维护用户的状态。

9.集合和集合的区别。集合是集合类的上级接口,从它继承的接口主要有集合和列表。

Collections是集合类的一个帮助类,它提供了一系列静态方法来对各种集合进行搜索、排序、线程安全等操作。

10。和& & amp不同之处。& amp是按位运算符,这意味着按位AND运算。& amp是一个逻辑运算符,意味着逻辑and。

11,HashMap和Hashtable的区别。HashMap是Hashtable的轻量级实现(非线程安全实现),它们都完成了Map接口。主要区别在于HashMap允许空键,由于非线程安全性,这可能比Hashtable更有效。

HashMap允许null作为条目的键或值,而Hashtable不允许。

HashMap移除了Hashtable的contains方法,将其更改为containsvalue和containsKey。因为contains方法具有误导性。Hashtable继承自Dictionary类,HashMap是Java1.2引入的Map接口的实现。

最大的区别是Hashtable的方法是同步的,而HashMap不是。多线程访问Hashtable时,不需要同步自己的方法,但是HashMap必须为它们提供外部同步。

Hashtable和HashMap使用大致相同的hash/rehash算法,所以性能不会有很大差别。

12,final,finalize的区别。Final用于声明属性、方法和类,分别表示属性不可变、方法不可重写和类不可继承。Finally是异常处理语句结构的一部分,这意味着总是执行。Finalize是Object类的一个方法。当垃圾回收器执行时,将调用回收对象的此方法,这可以在此方法提供垃圾回收时重写其他资源回收,如关闭文件。

13,sleep()和wait()有什么区别?Sleep是一种类似线程的方法,它使这个线程暂停执行一段指定的时间,把执行机会让给其他线程,但监控状态保持不变,之后会自动恢复。调用sleep不会释放对象锁。Wait是Object类的一个方法。在这个对象上调用wait方法会导致这个线程放弃对象锁,进入等待锁池等待这个对象。只有在为这个对象发出notify方法(或notifyAll)后,这个线程才进入对象锁池获取对象锁,进入运行状态。

14,超载和超驰的区别。重载的方法可以改变返回值的类型吗?

方法的覆盖和重载是Java多态性的不同表现。重写是父类和子类之间多态性的表现,重载是一个类中多态性的表现。如果在子类中定义的方法与其父类具有相同的名称和参数,我们说该方法是重写的。当子类中的对象使用这个方法时,它将调用子类中的定义。对于它来说,父类中的定义似乎是“屏蔽”的。如果在一个类中定义了多个同名的方法,它们要么有不同的参数号,要么有不同的参数类型,这就是所谓的方法重载。重载的方法是改变返回值的类型。

15,错误和异常有什么区别?

错误表示当恢复不是不可能而是困难时,恢复是一个严重的问题。例如,内存溢出。期望程序处理这样的情况是不可能的。

异常表示设计或实现问题。换句话说,就是程序正常运行的话,永远不会发生。

16.同步和异步有什么异同?在什么情况下分别使用?举例说明。

如果数据将在线程之间共享。例如,正在写入的数据可能稍后被另一个线程读取,或者正在读取的数据可能已经被另一个线程写入,所以这些数据是* * *独占数据,必须同步访问。当应用程序调用需要很长时间在对象上执行的方法,并且不想让程序等待方法的返回时,应该使用异步编程。在许多情况下,异步方法通常更有效。

17,抽象类和接口有什么区别?声明方法存在而不实现它的类称为抽象类。当你想创建一个体现一些基本行为的类,并为这个类声明一个方法,但不能在这个类中实现这个类的时候,就要用到它。您不能创建抽象类的实例。但是,您可以创建一个类型为抽象类的变量,并将其指向一个具体子类的实例。不能有抽象构造函数或抽象静态方法。抽象类的子类为其父类中的所有抽象方法提供实现,否则它们也是抽象类。相反,在子类中实现这个方法。其他知道其行为的类可以在类中实现这些方法。接口是抽象类的变体。在接口中,所有的方法都是抽象的。通过实现这样的接口可以获得多重继承。接口中的所有方法都是抽象的,它们都没有程序体。接口只能定义静态最终成员变量。接口的实现类似于子类的实现,只是实现类不能从接口定义继承行为。当一个类实现一个特殊的接口时,它定义(也就是给程序体)所有这样的接口的方法。然后,它可以在实现接口的类的任何对象上调用接口的方法。由于抽象类,它允许使用接口名称作为引用变量的类型。通常的动态绑定将生效。引用可以与接口类型相互转换,instanceof运算符可用于确定对象的类是否实现接口。

18,堆和栈有什么区别?Stack是一个线性集合,添加和删除元素的操作要在同一个段落中完成。堆栈以后进先出的方式处理。堆是栈的一个组成部分。

19,转发和重定向的区别在于服务器请求资源。服务器直接访问目标地址的URL,读取那个URL的响应内容,然后发送给浏览器。浏览器根本不知道服务器发来的内容来自哪里,所以它的地址栏还是原来的地址。重定向意味着服务器根据逻辑发送一个状态码,并告诉浏览器重新请求那个地址。一般来说,浏览器会用刚刚请求的所有参数重新请求,所以可以获得会话、请求参数。

20.EJB和爪哇豆有什么区别?Java Bean是一个可重用的组件,Java Bean没有严格的规范。理论上,任何Java类都可以是Bean。但是通常情况下,因为Java bean是由容器(比如Tomcat)创建的,所以Java bean应该有一个无参数的构造函数。此外,Java beans通常必须实现可序列化的接口来实现bean持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,不能跨进程访问。企业Java Bean相当于DCOM,是一个分布式组件。它基于Java远程方法调用(RMI)技术,因此可以远程访问EJB(跨进程和计算机)。但是,EJB必须部署在Webspere和WebLogic等容器中。EJB客户从不直接访问真正的EJB组件,而是通过他们的容器访问它们。EJB容器是由容器创建和管理的EJB组件的代理。客户通过集装箱获得真正的EJB组件。

21,静态嵌套类和内部类的区别。静态嵌套类是声明为静态的内部类,可以独立于外部类实例进行实例化。然而,通常的内部类需要在外部类被实例化之后被实例化。

22.JSP中动态包含和静态包含的区别?动态包含是通过jsp:include动作实现的

23.何时使用assert。断言是软件开发中常用的调试方法,很多开发语言都支持断言。在实现中,断言是程序中的一个语句,它检查布尔表达式。一个正确的程序必须确保这个布尔表达式的值为真;。如果值为false,则程序处于不正确的状态,系统会给出警告或退出。一般来说,断言是用来保证程序最基本、最关键的正确性。断言检查通常在开发和测试期间打开。为了提高性能,断言检查通常在软件发布后关闭。

24.什么是GC?为什么会有GC?GC代表Gabage Collection,内存处理是程序员容易出问题的地方。遗忘或不正确的内存恢复会导致程序或系统的不稳定甚至崩溃。Java提供的GC函数可以自动监控对象是否超出范围,从而达到自动回收内存的目的。Java语言没有提供释放分配内存的显示操作方法。

25、短s 1 = 1;s 1 = s 1+1;怎么了?短s 1 = 1;s 1+= 1;怎么了?短s 1 = 1;s 1 = s 1+1;(s1+1运算结果为int类型,类型需要强制转换)short s 1 = 1;s 1+= 1;(可以正确编译)

26.什么是Math.round(11.5)?Math.round多少钱(-11.5)?math . Round(11.5)= = 12 math . Round(-11.5)= =-11 Round方法返回最接近参数的地板整数,参数加上65438。

27、字符串s =新字符串(" XYZ ");创建了多少个stringobjects?二

28.设计四个线程,其中两个线程每次增加J 1,另外两个线程每次减少J 1。写程序。

以下程序使用内部类实现线程,增减j时不考虑顺序问题。

公共类threadtest 1 { private int j;public static void main(String args[]){ threadtest 1 TT = new threadtest 1();Inc Inc = TT . new Inc();Dec Dec = TT . new Dec();for(int I = 0;我& lt2;i++){ Thread t = new Thread(Inc);t . start();t =新线程(dec);t . start();} }私有同步void Inc(){ j++;system . out . println(thread . current thread()。getName()+"-Inc:"+j);}

私有同步void dec(){ j-;system . out . println(thread . current thread()。getName()+"-dec:"+j);}

类Inc实现Runnable { public void run(){ for(int I = 0;我& lt100;i++){ Inc();} } }类Dec实现Runnable { public void run(){ for(int I = 0;我& lt100;i++){ dec();} } } }

29.Java里有goto吗?java里的保留字现在java里不用了。

30.启动一个线程是run()还是start()。启动一个线程就是调用start()方法,使线程所代表的虚拟处理器处于可运行状态,也就是说可以被JVM调度执行。这并不意味着线程会立即运行。run()方法可以通过生成一个必须退出的标志来停止线程。

31,EJB includes (SessionBean,EntityBean)告诉他们的生命周期,以及如何管理事务?

SessionBean:无状态会话Bean的生命周期由容器决定。当客户端请求建立bean的实例时,EJB容器不一定需要创建新的bean实例供客户端调用,而是随机找到一个现有实例提供给客户端。当客户机第一次调用有状态会话Bean时,容器必须立即在服务器中创建一个新的Bean实例,并将其与客户机相关联。稍后,当客户端调用有状态会话Bean的方法时,容器会将调用分派给与客户端关联的Bean实例。EntityBean:实体Bean可以存活相对长的时间,状态是持久的。只要数据库中的数据存在,实体beans就会存在。不是根据应用程序或服务流程。即使EJB容器崩溃了,实体beans仍然存在。实体bean生命周期可以由容器或bean本身来管理。EJB通过以下技术管理实践:对象管理组(OMG)的对象实践服务(OTS)、太阳微系统公司的事务服务(JTS)、Java事务API(JTA)和开发组的XA接口(X/Open)。

32.什么是应用服务器?

BEA WebLogic服务器,IBM WebSphere应用服务器,Oracle9i应用服务器,jBoss,Tomcat

33.给我一个你最常看到的运行时异常。

ArithmeticException、ArrayStoreException、BufferOverflowException、BufferUnderflowException、CannotUndoException、ClassCastException、CMMException、ConcurrentModificationException、DOMException、EmptyStackException、IllegalMonitorStateException、IllegalPathStateException、IllegalStateException、ImagingOpException、IndexOutOfBoundsException、MissingResourceException、NegativeArraySizeException、NoSuchElementException、NullPointerException、ProfileDataException

34.接口可以继承接口吗?抽象类可以实现接口吗?抽象类可以继承具体类吗?

接口可以从接口继承。抽象类可以实现接口,不管抽象类是否可以继承实体类,但前提是实体类有显式的构造函数。

35.列表、集合和映射是否继承自集合接口?列表,集合是,映射不是。

36.数据连接池的工作机制是什么?

当J2EE服务器启动时,将建立一定数量的池连接,并且将一直保持不少于该数量的池连接。当客户端程序需要一个连接时,池驱动程序将返回一个未使用的池连接,并将其表记录为忙碌。如果当前没有空闲连接,池驱动程序将创建一定数量的新连接,新连接的数量由配置参数决定。当使用的池连接调用完成时,池驱动程序将这个连接表记录为空闲,其他调用可以使用这个连接。

37.抽象方法可以同时是静态的、原生的和同步的吗?都不是。

38.数组有length()方法吗?String有length()方法吗?数组没有length()的方法,但具有length的属性。字符串的方法长度为()。

39.集合中的元素不能重复,那么用什么方法来区分是否重复呢?是= =还是等于()?两者有什么区别?

集合中的元素不能重复,所以用iterator()方法来区分是否重复。Equals()是判断两个集合是否相等。equals()和= =方法确定引用值是否指向同一个对象。equals()在类中被覆盖,以便在两个独立对象的内容和类型匹配时返回一个true值。

40.构造函数可以被重写吗?构造函数不能被继承,因此它不能重写重载,但可以重载。

41.可以继承String类吗?String类是final类,因此不能被继承。

42.swtich可以作用于byte,long,String吗?在switch(expr1)中,expr1是一个整数表达式。所以传递给switch和case语句的参数应该是int,short,char或者byte。绳子既不能长,也不能短。

43.try {}中有一个return语句,那么在try之后的finally {}中的代码会立即执行,是在return的时候、之前还是之后?将在返回之前执行。

44.编程问题:用最高效的方法计算2乘8等于多少?2 & lt& lt三

45.两个对象具有相同的值(x.equals(y) == true),但是它们可以具有不同的哈希代码。这是正确的吗?不,它有相同的散列码。

46.当对象作为参数传递给方法时,该方法可以更改对象的属性并返回更改后的结果。那么,这个是值传递还是引用传递呢?是价值转移。Java编程语言只有值传递参数。当对象实例作为参数传递给方法时,参数的值是对该对象的引用。对象的内容可以在被调用的方法中改变,但是对象的引用永远不会改变。

47.当一个线程进入一个对象的同步方法时,其他线程可以进入该对象的其他方法吗?

不,一个对象的同步方法只能被一个线程访问。

48.编程问题:写一个Singleton。

Singleton模式的主要功能是确保Java应用程序中只存在一个类的实例。一般来说,Singleton模式有几种形式:第一种形式:定义一个类,它的构造函数是私有的,并且它有这种静态私有变量。实例化该类时,通过公共getInstance方法获取对它的引用,然后调用它的方法。public class Singleton { private Singleton(){ } private static Singleton instance = new Singleton();公共静态Singleton getInstance(){ return instance;}}第二种形式:公共类singleton {私有静态singleton instance = nullpublic static synchronized Singleton getInstance(){ if(instance = = null)instance = new Singleton();

返回实例;其他形式:定义一个类,它的构造函数是私有的,所有方法都是静态的。一般认为第一种形式更安全。

49.Java接口与C++虚类的异同。

由于Java不支持多重继承,而且有可能一个类或对象会在几个类或对象中使用方法或属性,现有的单一继承机制无法满足要求。与继承相比,接口更加灵活,因为接口中没有实现代码。当一个类实现一个接口时,它应该实现接口中的所有方法和属性,并且接口中的属性默认都是public static,所有方法默认都是public。一个类可以实现多个接口。

50.Java中异常处理机制的简单原理及应用。

当一个JAVA程序违反了JAVA的语义规则时,JAVA虚拟机会将错误表示为异常。违反语义规则包括两种情况。一个是JAVA类库内置的语义检查。例如,如果数组的下标越界,就会抛出IndexOutOfBoundsException访问空对象时引发NullPointerException。另一种情况是JAVA允许程序员扩展这种语义检查。程序员可以创建自己的异常,并自由选择何时用throw关键字抛出异常。所有例外都是java.lang.Thowable的子类

51.垃圾回收的优势和原则。并考虑两种回收机制。

Java语言的一个显著特点就是引入了垃圾收集机制,解决了c++程序员最头疼的内存管理问题,让Java程序员在编写程序时不再需要考虑内存管理。因为有了垃圾收集机制,Java中的对象不再有“作用域”的概念,只有对对象的引用才有“作用域”。垃圾回收可以有效防止内存泄漏,有效利用可用内存。垃圾收集器通常作为单个低级线程运行,它在不可预知的情况下清理并回收内存堆中已经死亡或长时间未使用的对象。程序员不能实时调用垃圾收集器来从一个对象或所有对象中收集垃圾。回收机制包括分代副本垃圾回收、标记垃圾回收和增量垃圾回收。

52.请告诉我你对线程同步的了解。

Wait():让一个线程等待并释放被持有对象的锁。Sleep():这是一个静态方法,用于将正在运行的线程置于睡眠状态。调用此方法捕获InterruptedException。Notify():唤醒一个等待的线程。注意,在调用这个方法时,不能准确地唤醒一个正在等待的线程,而是由JVM决定唤醒哪个线程,而不是根据优先级。Allnotity():唤醒所有处于等待状态的线程。注意,并不是给所有被唤醒的线程一个对象的锁,而是让它们竞争。

53.你知道的收藏类有哪些?主要方法?最常用的集合类是List和Map。List的具体实现包括ArrayList和Vector,它们是可变大小的列表,适用于构建、存储和操作任何类型对象的元素列表。List适合通过数字索引访问元素。Map提供了一种更通用的元素存储方法。Map collection类用于存储元素对(称为键和值),其中每个键映射到一个值。

54.描述一下JVM加载类文件的原理和机制?JVM中类的加载是通过类加载器及其子类来实现的,Java类加载器是Java运行时系统的重要组成部分。它负责在运行时查找和加载类文件的类。

55.一个汉字可以存储在char变量中吗?为什么?

可以定义为中文,因为java是unicode编码的,一个char占16字节,所以放一个中文没问题。

56.实现多线程有几种方法。它们是什么?有几种方法可以实现同步。它们是什么?

多线程的实现方式有两种,即继承线程类和实现Runnable接口,同步的实现方式有两种,即synchronized、wait和notify。

57.JSP的内置对象和方法。

请求表示一个HttpServletRequest对象。它包含有关浏览器请求的信息,并提供了几种获取cookie、标头和会话数据的有用方法。response代表HttpServletResponse对象,提供了几种设置发送回浏览器的响应的方法(如cookies、头信息等。).

out对象是javax.jsp.Js