corejava简答题D.doc_第1页
corejava简答题D.doc_第2页
corejava简答题D.doc_第3页
corejava简答题D.doc_第4页
corejava简答题D.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、什么叫java元数据?Annotation的特点?元数据是关于数据的数据。在编程语言上下文中,元数据是添加到程序元素如方法、字段、类和包上的额外信息。Annotation具有以下的一些特点: 元数据以标签的形式存在于Java代码中。 元数据描述的信息是类型安全的,即元数据内部的字段都是有明确类型的。 元数据需要编译器之外的工具额外的处理用来生成其它的程序部件。 元数据可以只存在于Java源代码级别,也可以存在于编译之后的Class文件内部。 事实上,早在JDK5.0推出语言级的元数据机制Annotation以前,就一直存在对元数据的需求。但是由于没有提供表达元数据的标准机制,出现了各种解决方案。下面罗列了一些例子 transient 关键字 Serializable 标记接口 xml 部署描述文件 manifest.mf 文件 Javadoc 标记(将文档直接写在源程序里,极大的方便了文档的编写) XDoclet(使用类似于JavaDoc的语法撰写描述信息,并使用工具生成描述文件) 这些方法都存在一定的局限性,比如使用关键字不具有扩展性,用户自定义新的关键字;标记接口没有提供额外的信息,它们不能带有参数,并且只能处理类,而不能处理字段或方法或包。Javadoc和XDoclet标记不会被编译器检查。 最后,我们再详细的对比一下Annotation和XML部署描述文件的优劣XML配置文件与代码文件分离,不利于一致性维护,缺乏在运行时的反射机制。而Annotation与代码一起被编译器处理,并能够在运行时访问。 通常XML配置文件都很复杂而且冗长,为了配置代码,XML文件必须复制许多信息:比如代码中类名字和方法名字。Java注释则不同,它是代码的一部分,不需要额外的引用就可以指明配置信息。 XML配置文件是文本文件,没有显式的类型支持,需要到运行时刻才能发现隐藏的错误。而Annotation是类型安全的,它会被编译器检查。 XML文件可以表达复杂的关系,但是在注释中我们却很难表达复杂的或层次的结构。 XML配置文件是在代码之外被单独处理的,也就是说基于XML的配置信息不是硬编码的,可以部署的时候进行修改。而修改Annotation则需要进行重新编译,不过我们可以利用AOP提供的机制为已有的代码添加Annotation。通过部署不同的AOP模块,就能使代码具有不同的Annotation,但比起直接修改XML显得复杂。 总而言之,注释是简单易用的,并且对大多数应用来说已经足够了。而XML文件更复杂,但具有部署的灵活性,因而被用来处理与部署相关的决策。注释与XML配置文件可以一起使用。由于注释只能保存相当少的配置信息,只有预先集成的框架组件(类似在框架组件中已经完成了大多数预备工作)可以广泛地把注释作为配置选项。而XML配置文件作为一个可选的重载机制,可以用于改变注释的默认行为。2、书写一个只能放置String 的集合。ArrayList list = new ArrayList();3、什么是代理模式,书写符合一个代理模式的例子代理模式,个人认为就是把你要使用的一个对象尽享封装,包装。编程原对象的一个副本,在使用的时候直接使用他这个副本就可以了!他的作用用专业点的语言描述就是为其他的对象提供一个代理方便控制这个对象。当我们不能直接调用另外一个对象,但是又不得不用这个对象的某些功能,此时代理对象就能起到链接客户和目标对象的一个代理. 代理模式一般涉及到三个角色,分别为: 1. 抽象角色:他提供真实对象和代理对象的共同接口。 2. 代理角色:通俗地说,代理角色是对原对象(目标对象)进行包装,他有着和原对象相同的接口,并且可以执行真实对象的操作。 3. 真实角色:即目标对象,最终我们需要对他的操作。 代理模式分为两种,一 静态代理,二 动态代理。public class HelloClient public static void main(String args) try HelloIF_Stub proxy = (HelloIF_Stub)(new HelloWorldImpl().getHelloIF(); proxy._setTargetEndpoint(args0); System.out.println(proxy.sayHello(Hello World!); catch (Exception ex) ex.printStackTrace();客户端首先获得对代理的引用,然后利用命令行参数设定代理的端点(即Web服务的URL地址),接下来调用代理的sayHello()方法,代理再将方法调用传递给相应的Web服务。4、请写出“不用中间变量交换两个数”的实现过程。a=a+b;b=a-b;a=a-b;5、什么是内存泄露?在编码过程中要注意哪些因素以防止内内存泄露?内存泄露是指程序中间动态分配了内存,但是在程序结束时没有释放这部分内存,从而造成那一部分内存不可用的情况,重起计算机可以解决,但是也有可能再次发生内存泄露,内存泄露和硬件没有关系,它是由软件引起的。导致内存泄漏主要的原因是,先前申请了内存空间而忘记了释放。如果程序中存在对无用对象的引用,那么这些对象就会驻留内存,消耗内存,因为无法让垃圾回收器验证这些对象是否不再需要。正如我们前面看到的,如果存在对象的引用,这个对象就被定义为活着的,同时不会被释放。要确定对象所占内存将被回收,程序员就要务必确认该对象不再会被使用。典型的做法就是把对象数据成员设为null或者从集合中移除该对象。注意,当局部变量不需要时,不需明显的设为null,因为一个方法执行完毕时,这些引用会自动被清理。6、error和exception有什么区别Error类和Exception类都继承自Throwable类。Error的继承关系: java.lang.Objectjava.lang.Throwable java.lang.ErrorException的继承关系: java.lang.Objectjava.lang.Throwable java.lang.Exception二者的不同之处:Exception:1可以是可被控制(checked) 或不可控制的(unchecked) 2表示一个由程序员导致的错误 3应该在应用程序级被处理 Error:1总是不可控制的(unchecked) 2经常用来用于表示系统错误或低层资源的错误 3如何可能的话,应该在系统级被捕捉 Java 中定义了两类异常:1) Checked exception: 这类异常都是Exception的子类 。异常的向上抛出机制进行处理,假如子类可能产生A异常,那么在父类中也必须throws A异常。可能导致的问题:代码效率低,耦合度过高。2) Unchecked exception: 这类异常都是RuntimeException的子类,虽然RuntimeException同样也是Exception的子类,但是它们是非凡的,它们不能通过client code来试图解决,所以称为Unchecked exception。Java 中异常类的继承关系图:error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。 7、Class.forName的作用?为什么要用?答:调用该访问返回一个以字符串指定类名的类的对象。 8写出String类中你常用的方法?public char charAt(int index) 返回字符串中第index个字符;public int length() 返回字符串的长度;public int indexOf(String str) 返回字符串中第一次出现str的位置;public int indexOf(String str,int fromIndex) 返回字符串从fromIndex开始第一次出现str的位置;public boolean equalsIgnoreCase(String another) 比较字符串与another是否一样(忽略大小写);public String replace(char oldchar,char newChar) 在字符串中用newChar字符替换oldChar字符public boolean startsWith(String prefix) 判断字符串是否以prefix字符串开头;public boolean endsWith(String suffix) 判断一个字符串是否以suffix字符串结尾;public String toUpperCase() 返回一个字符串为该字符串的大写形式;public String toLowerCase() 返回一个字符串为该字符串的小写形式public String substring(int beginIndex) 返回该字符串从beginIndex开始到结尾的子字符串;public String substring(int beginIndex,int endIndex) 返回该字符串从beginIndex开始到endsIndex结尾的子字符串public String trim() 返回该字符串去掉开头和结尾空格后的字符串public String split(String regex) 将一个字符串按照指定的分隔符分隔,返回分隔后的字符串数组9实现线程有哪些方法?线程总是由操作系统占有和管理,一个新线程的创建和启动只能由操作系统来负责管理。故不能直接调用该线程的run方法,若如此,则不会创建新的线程和启动该线程,而是和其它类对象一样,那么应该怎样正确启动线程呢?调用线程对象的start方法。当调用Thread对象的start方法时,就会调用一个本地的代码,该代码负责是操作系统初始化一个新的线程,并由这个线程类执行Thread对象的run方法。创建一个线程有两种方式:其一是继承Thread类并重载run方法;其二是实现Runnable接口。10、数据库连接池有什么用,它是怎么实现的连接池技术的核心思想是:连接复用,通过建立一个数据库连接池以及一套连接使用、分配、治理策略,使得该连接池中的连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开销。另外,由于对JDBC中的原始连接进行了封装,从而方便了数据库应用对于连接的使用(非凡是对于事务处理),提高了开发效率,也正是因为这个封装层的存在,隔离了应用的本身的处理逻辑和具体数据库访问逻辑,使应用本身的复用成为可能。连接池主要由三部分组成:连接池的建立、连接池中连接的使用治理、连接池的关闭。数据库连接是一种有限的昂贵的资源,数据库连接影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。连接池的配置数据库连接池中到底要放置多少个连接,才能使系统的性能更佳,用minConn和maxConn来限制。minConn是当应用启动的时候连接池所创建的连接数,假如过大启动将变慢,但是启动后响应更快;假如过小启动加快,但是最初使用的用户将因为连接池中没有足够的连接不可避免的延缓了执行速度。因此应该在开发的过程中设定较小minConn,而在实际应用的中设定较大minConn。maxConn是连接池中的最大连接数,可以通过反复试验来确定此饱和点。为此在连接池类ConnectionPool中加入两个方法getActiveSize()和getOpenSize(),ActiveSize 表示某一时间有多少连接正被使用,OpenSize表示连接池中有多少连接被打开,反映了连接池使用的峰值。将这两个值在日志信息中反应出来, minConn的值应该小于平均ActiveSize,而maxConn的值应该在activeSize和OpenSize之间11、Eclipse 有什么特点Eclipse是一种可扩展的开放源代码IDE。2001年11月,IBM公司捐出价值4,000万美元的源代码组建了Eclipse联盟,并由该联盟负责这种工具的后续开发。集成开发环境(IDE)经常将其应用范围限定在“开发、构建和调试”的周期之中。为了帮助集成开发环境(IDE)克服目前的局限性,业界厂商合作创建了Eclipse平台。Eclipse允许在同一IDE中集成来自不同供应商的工具,并实现了工具之间的互操作性,从而显著改变了项目工作流程,使开发者可以专注在实际的嵌入式目标上。Eclipse框架的这种灵活性来源于其扩展点。它们是在XML中定义的已知接口,并充当插件的耦合点。扩展点的范围包括从用在常规表述过滤器中的简单字符串,到一个Java类的描述。任何Eclipse插件定义的扩展点都能够被其它插件使用,反之,任何Eclipse插件也可以遵从其它插件定义的扩展点。除了解由扩展点定义的接口外,插件不知道它们通过扩展点提供的服务将如何被使用。利用Eclipse,我们可以将高级设计(也许是采用UML)与低级开发工具(如应用调试器等)结合在一起。如果这些互相补充的独立工具采用Eclipse扩展点彼此连接,那么当我们用调试器逐一检查应用时,UML对话框可以突出显示我们正在关注的器件。事实上,由于Eclipse并不了解开发语言,所以无论Java语言调试器、C/C+调试器还是汇编调试器都是有效的,并可以在相同的框架内同时瞄准不同的进程或节点。Eclipse的最大特点是它能接受由Java开发者自己编写的开放源代码插件,这类似于微软公司的Visual Studio和Sun微系统公司的NetBeans平台。Eclipse为工具开发商提供了更好的灵活性,使他们能更好地控制自己的软件技术。Eclipse联盟已经宣布将在2004年中期发布其3.0版软件。这是一款非常受欢迎的java开发工具,这国内的用户越来越多,实际上实用它java开发人员是最多的。缺点就是较复杂,对初学者来说,理解起来比较困难。12、列举一个你最常见到的runtime exceptionArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException13写出J2EE有哪些服务、应用程序接口和协议组成?J2ee是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型(enterpriese application model).在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。所属层次包括客户层(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)层。 14,说一下java callbackCALLBACK: CALLBACK首先是基于多线程的,没有线程的调用就不要谈回调.子类调用父类的构造方法叫回调用, 任何对象至少继承了Object,构造时至少要调用Object的构造方法.CALLBACK机制: 一个主线程管理其它线程时,不用轮询方法检查各个线程的状态,而是在子线程中出现某种状态时通知主线程,15,谈一下java的内存溢出一、内存溢出类型1、java.lang.OutOfMemoryError: PermGen space JVM管理两种类型的内存,堆和非堆。堆是给开发人员用的上面说的就是,是在JVM启动时创建;非堆是留给JVM自己用的,用来存放类的信息的。它和堆不同,运行期内GC不会释放空间。如果web app用了大量的第三方jar或者应用有太多的class文件而恰好MaxPermSize设置较小,超出了也会导致这块内存的占用过多造成溢出,或者tomcat热部署时侯不会清理前面加载的环境,只会将context更改为新部署的,非堆存的内容就会越来越多。2、java.lang.OutOfMemoryError: Java heap space第一种情况是个补充,主要存在问题就是出现在这个情况中。其默认空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。如果内存剩余不到40,JVM就会增大堆到Xmx设置的值,内存剩余超过70,JVM就会减小堆到Xms设置的值。所以服务器的Xmx和Xms设置一般应该设置相同避免每次GC后都要调整虚拟机堆的大小。假设物理内存无限大,那么JVM内存的最大值跟操作系统有关,一般32位机是1.5g到3g之间,而64位的就不会有限制了。注意:如果Xms超过了Xmx值,或者堆最大值和非堆最大值的总和超过了物理内存或者操作系统的最大限制都会引起服务器启动不起来。垃圾回收GC的角色JVM调用GC的频度还是很高的,主要两种情况下进行垃圾回收:当应用程序线程空闲;另一个是java内存堆不足时,会不断调用GC,若连续回收都解决不了内存堆不足的问题时,就会报out of memory错误。因为这个异常根据系统运行环境决定,所以无法预期它何时出现。根据GC的机制,程序的运行会引起系统运行环境的变化,增加GC的触发机会。为了避免这些问题,程序的设计和编写就应避免垃圾对象的内存占用和GC的开销。显示调用System.GC()只能建议JVM需要在内存中对垃圾对象进行回收,但不是必须马上回收,一个是并不能解决内存资源耗空的局面,另外也会增加GC的消耗。16.简述单例模式。Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。一般Singleton模式通常有几种种形式:第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。public class Singleton private Singleton()/在自己内部定义自己一个实例,是不是很奇怪?/注意这是private 只供内部调用private static Singleton instance = new Singleton();/这里提供了一个供外部访问本class的静态方法,可以直接访问public static Singleton getInstance() return instance; 17.写出使用数据集连接数据库的代码?public dataset Sqlconnection()Connection conn = null; try Class.forName(DRIVER); /注册驱动 conn = DriverManager.getConnection(URL,NAME,PASS);/获取连接字符串 catch (ClassNotFoundException e) System.out.println(e.getMessage() +注册驱动失败); e.printStackTrace(); catch(SQLException e) System.out.println(e.getMessage() + 获取连接字符串错误); e.printStackTrace(); catch(Exception e) System.out.println(e.getMessage() + 数据库连接错误); return conn; 18写出你知道的页面传值的方法一.通过Form表单提交传值 客户端通过Form表单提交到服务器端,服务器端通过Java代码 request.getParameter(String xx); request.getParameter(String xx);来取得参数(xx)为参数名称。 二.通过隐藏域传值 通过在表单中加入一个隐藏域来提交到服务器端,这种方式的好处是可以在客户端加入一些自己想要加入的参数,以便到得相应的值。 客户端代码: Java代码 input type=hidden name=id value=/ input type=hidden name=id value=/服务器端取值: Java代码 String id=request.getParameter(id); String id=request.getParameter(id);三.通过URL传值 这种传值方式是通在Java代码 来进行传值。xx.jsp表示提交到处理的页面,后面的?号后的是要传的参数和其值,参数与参数之间用&进行分离。 四.通过JavaBean进行传值 即通过Java中的自省机制,将所有表单的值传入到一个JavaBean中19.string = null 和string = “”有什么区别?尽量用文字和图像解释null是没指向任何String object,而是一个String object,只不过内容长度为零,但内存空间已经建立 这里“”和NULL绝对是两个概念 “”代表一个字符串存在,它的值就是“” NULL代表字符串根本没有实际的值,你并不知道它是什么。20、说出在XML中JAVA中如何应用XML是一种可扩展标记语言(EXtensible Markup Language),于1998年2月10日被确立为 W3C 标准。由于是一种标记语言,这使得成为XML跨平台的、用于传输信息且独立于软件和硬件的工具。XML设计的目的是为了描述数据,它使用使用文件类型声明(DTD)或者 XML Schema 来描述数据规范。带有 DTD 或者 XML Schema 的 XML 被设计为具有自我描述性。XML标签没有被预定义,您必须自行定义标签。XML与HTML的最大的区别是两者目的不同,XML作为数据载体来描述数据,而HTML是为了格式化和展示数据。在Java EE应用中,XML主要用来描述配置和数据的交换。配置信息描述是最常见不过的了,比如Java Web应用的描述符web.xml包括很多开源框架的配置信息。数据交换主要是XML的数据与其他格式的数据的转换,XML与Java、XML与数据库表记录、XML与HTML等转换。21 什么是code-behind技术?简单的说就是代码分离技术,也就是.net中的HTML代码和程序代码分别位于不同的文件, 将ASP.NET程序需要呈现的一个网页分为*.aspx和*.cs这两个文件,即代码分离技术,实现了HTML代码和服务器逻辑代码的分离,这样更方便于代码编写、整理及调试。22 B/S结构中需要传递变量值,又不能使用sessioncookieappliation,您有几种方法进行处理?有两种方法分别是get和postget:Response.Redirect(aaa.aspx?id=+newid);string aa = Request.QueryStringid;post:submit后String aa = Response.Form任意一个控件名;23什么是拆箱装箱? 答:将值类型转为引用类型叫做装箱,例如:int i=123;object o=(object)I;将引用类型转换为值类型较拆箱,例如: int i=123; object o=I;int j=(int)o;24数据库有关的类有哪些?作用是什么?答:DbConnection 连接数据库,DbCommand 执行对数据库的操作(包装了Sql语句或存储过程), 表示 DbCommand 的参数.25请说明Javascript和Java的区别虽然JavaScript与Java有紧密的联系,但却是两个公司开发的不同的产品。Java是SUN公司推出的新一代面向对象的程序设计语言,特别适合于Internet应用程序开发;而JavaScript是Netscape公司的产品,其目的是为了扩展Netscape Navigator功能,而开发的一种可以嵌入Web页面中的基于对象和事件驱动的解释性语言, 它的前身是Live Script;而Java的前身是Oak语言。 下面对两种语言间的异同作如下比较:1.基于对象和面向对象Java是一种真正的面向对象的语言,即使是开发简单的程序,必须设计对象。JavaScript是种脚本语言,它可以用来制作与网络无关的,与用户交互作用的复杂软件。它是一种基于对象(Object Based)和事件驱动(Event Driver)的编程语言。因而它本身提供了非常丰富的内部对象供设计人员使用。2.解释和编译两种语言在其浏览器中所执行的方式不一样。Java的源代码在传递到客户端执行之前,必须经过编译,因而客户端上必须具有相应平台上的仿真器或解释器,它可以通过编译器或解释器实现独立于某个特定的平台编译代码的束缚。JavaScript是一种解释性编程语言,其源代码在发往客户端执行之前不需经过编译,而是将文本格式的字符代码发送给客户编由浏览器解释执行。3.强变量和弱变量两种语言所采取的变量是不一样的。Java采用强类型变量检查,即所有变量在编译之前必须作声明。如:Integer x;String y;x=1234;x=4321;其中X=1234说明是一个整数,Y=4321说明是一个字符串。JavaScript中变量声明,采用其弱类型。即变量在使用前不需作声明,而是解释器在运行时检查其数据类型,如:x=1234;y=4321;前者说明x为其数值型变量,而后者说明y为字符型变量。4.代码格式不一样Java是一种与HTML无关的格式,必须通过像HTML中引用外媒体那么进行装载,其代码以字节代码的形式保存在独立的文档中。JavaScript的代码是一种文本字符格式,可以直接嵌入HTML文档中,并且可动态装载。编写HTML文档就像编辑文本文件一样方便。5.嵌入方式不一样在HTML文档中,两种编程语言的标识不同,JavaScript使用 来标识,而Java使用.来标识。6.静态联编和动态联编Java采用静态联编,即Java的对象引用必须在编译时的进行,以使编译器能够实现强类型检查。JavaScript采用动态联编,即JavaScript的对象引用在运行时进行检查,如不经编译则就无法实现对象引用的检查。26画出MVC的简单示意图27简要叙述Session在BS编程中的作用session作用域比较容易理解,同一浏览器访问多次,在这多次访问之间传递信息,就是session作用域。session的开始容易判断(浏览器发出第一个HTTP请求即可认为会话开始),但结束就不好判断了(因为浏览器关闭时不会通知服务器“我关了,会话可以结束了”),所以只能通过这种方法判断:如果一定的时间内客户端没有反应,则认为会话结束。 Tomcat的默认值为120分钟,但这个值也可以通过 HttpSession 的 setMaxInactiveInterval 方法来设置。28简述“面向对象”的概念,并设计一个学校选课系统的对象模型。简述“软件系统的两层和多层体系结构”的概念(如有必要,可用图表进行描述),并指出两者的主要区别。答: 面向对象是指在程序设计中采用封装、继承、抽象等设计方法。 面向对象:按这种模型编写的程序围绕着程序的数据(对象)和针对该对象而严格定义的接口来组织程序,它的特点是数据控制代码的访问.通过把控制权转移到数据上,面向对象的模型在组织方式上有:抽象,封装,继承和多态的好处. 三层在安全性、稳定性及大量并发控制上要强于两层的,它不会让客户端直接面对数据库,所有减少了由于客户端被破解而给数据库带来损失的风险,并且可以比较妥善的解决多用户并发带来的服务器拥挤,但是在客户端比较少的情况下,它访问数据的速度要慢于两层结构的,开发、维护难度要比两层的大不少,所以对于20客户端以下的应用,应该谨慎使用三层结构开发。29简述一个软件工程的主要步骤,并指出每个步骤的明确目标及实施办法。最后分析哪些是关键步骤。一般包括以下几项:客户需求调查或市场调查、软件的框架设计、各框架的进一步细分,编写程序,黑白盒测试,发布测试版,软件的交付以及售后服务,还有各阶段的文档总结,是一个软件从调研到最后发布的各中间过程,软件工程就是对这各种阶段的说明以及如何去实施各阶段。30.综合你认为在团队开发中,你能发挥自己的能力吗?为什么?当个人意见与主管出现矛盾时,你用什么方法解决?能。在团队开发中和同事的交流过程中不但把自己好的观点和大家共享,同时也能吸取别人好观点,以更好地发挥和提高自己的能力。当和主管出现意见分歧,首先要不能在公共场合下和他进行辩解,事后去他的办公室和他详谈,拿出有利的数据和观点来证明自己提出的意见在整个开发中起到的重要作用!最后还是说服不了他的话还是要尊重主管的意见。31.堆和栈的区别?1。在函数中定义的基本类型变量和对象的引用变量都在函数的栈内存中分配;2。堆内存用来存放由new创建的对象和数组在函数(代码块)中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量所分配的内存空间;在堆中分配的内存由java虚拟机的自动垃圾回收器来管理堆的优势是可以动态分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的。缺点就是要在运行时动态分配内存,存取速度较慢;栈的优势是存取速度比堆要快,缺点是存在栈中的数据大小与生存期必须是确定的无灵活性。java堆分为三个区:New、Old和PermanentGC有两个线程:新创建的对象被分配到New区,当该区被填满时会被GC辅助线程移到Old区,当Old区也填满了会触发GC主线程遍历堆内存里的所有对象。Old区的大小等于Xmx减去-Xmnjava栈存放栈调整:参数有+UseDefaultStackSize -Xss256K,表示每个线程可申请256k的栈空间每个线程都有他自己的Stack32.进程和线程的区别。线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源(3)线程是处理器调度的基本单位,但进程不是4)二者均可并发执行. 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于: 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.33,什么是线程安全的?线程安全就是说多线程访问同一代码,不会产生不确定的结果。编写线程安全的代码是依靠线程同步。34 面向对象的特征继承,封装,多态;35抽象类和接口的区别接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的, 另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。 还有,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.36 编写程序实现数组排序int num = 1, 2, 3, 4, 5, 6, 9, 8, 7, 0;package mianshi;public class XunHuan public XunHuan() public static void main(String args) XunHuan xh = new XunHuan(); int temp=0; int num = 1, 2, 3, 4, 5, 6, 9, 8, 7, 0; for (int i = 0; i num.length; i+) for (int j = 0; j numj) temp=numi; numi=numj; numj=temp; for(int en=0;ennum.length;en+) System.out.println(numen); 37写一个单例模式的例子package mianshi;public class DanLi private DanLi() private static DanLi danli=new DanLi(); public static DanLi getdanli() return danli; 38写一个抽象类及具体实现package mianshi;public abstract class Abex public abstract void eat();package mianshi;public class Child extends Abex public Child() public void eat() System.out.print(抽象类的具体实现); public static void main(String args) Child child = new Child(); child.eat();39 Vector 与 ArrayList 有什么区别,在 java.util 包中有哪两个类有类似区别?ArrayList类ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。和LinkedList一样,ArrayList也是非同步的(unsynchronized)。Vector类Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。Hashtable HashMap 类似40 java中有几种方法可以实现一个线程?第一:创建Thread类的子类覆盖run()方法提供线程的执行代码,定义Thread类的成员变量来提供线程的数据。第二:实现Runnable接口 这是一个单方法接口。41abstract class和interface有什么区别?声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论