华为的java电话面试10题
华为高级java面试题
华为高级java面试题一. 概述Java作为一门广泛应用的编程语言,具有很高的灵活性和可扩展性,因此在软件开发领域中扮演着重要的角色。
华为作为全球知名的通信技术解决方案提供商,对Java开发人员的技术水平要求也较高。
本文将针对华为高级Java面试题进行详细解析。
二. 题目1:Java多线程基础1. 请简要介绍Java中的线程和进程的概念,并说明它们的区别和联系。
答:Java中的线程是指程序中独立执行的一组代码,可以并发地执行。
而进程是系统中正在运行的一个程序实例。
线程是进程的一部分,一个进程可以包含多个线程,各个线程共享该进程的堆和方法区资源。
线程之间可以通过共享内存进行通信,而进程之间需要通过进程间通信(IPC)来实现。
2. 请简述Java中如何创建线程的两种方式,并比较它们的优缺点。
答:Java中创建线程的两种方式包括继承Thread类和实现Runnable接口。
继承Thread类的方式简单,但由于Java不支持多重继承,所以无法继承其他类。
而实现Runnable接口的方式避免了单继承的限制,并且可以更好地实现代码的解耦和重用。
3. 请解释Java中的同步和异步的概念,并举例说明它们的使用场景。
答:同步指的是多个线程按照一定的顺序来访问共享资源,可以有效避免数据的冲突和不一致。
Java中可以通过synchronized关键字来实现同步。
异步指的是多个线程独立执行,彼此之间不受制约,执行结果由操作系统时间片分配决定。
Java中可以通过多线程的方式实现异步操作,例如使用Future和CompletableFuture来获取异步任务的执行结果。
三. 题目2:Java集合框架1. 请简述Java集合框架的体系结构,并说明List和Set的特点和使用场景。
答:Java集合框架主要包含了Collection接口和Map接口,其中Collection接口又分为List和Set两个子接口。
List是有序的集合,允许存储重复元素,可以通过索引位置来访问和修改集合中的元素。
华为电话面试问题汇总
华为电话面试问题汇总1、LAC寻呼成功率低的解决办法有哪些?a,寻呼策略:(1)GLOBAL寻呼、LAI寻呼(2)采用IMSI寻呼、TMSI寻呼.使用TMSI寻呼,增大寻呼信道容量.(一个寻呼信令可以寻呼4个TMSI,而只能寻呼2个IMSI).b,MSC侧T3113参数作用c,CRH和T3212设置不当d,PCH和SD信道拥塞e,针对性解决寻呼无响应的小区f,LAC区划分不当,寻呼消息过多,LAC插花严重g,交换数据错误(多见于新建站)2、干扰的原因及解决办法有哪些?a,直放站b,设备模块硬件故障c,外部干扰源d,同邻频干扰e,天馈线破损f,网外干扰(CDMA)g,天线安装不合理。
3、T200的含义是什么?T200定时器(Timer200)是Um接口数据链路层LAPDm中的一个重要的定时器。
T200定时器是防止数据链路层数据发送过程死锁的定时器,数据链路层的作用就是将容易出差错的物理链路改造成顺序的无差错的数据链路。
在这个数据链路两端通讯的实体采用确认重发的机制。
也就是说,每发送一个消息都要对端确认收到。
在不可知的情况下,如果这条消息丢失,会出现双方都等待的情况,此时系统死锁。
因此,在发送一方要设立定时器,当定时器溢出,发方认为收方没有收到消息,就会重新发送,在重发次数结束后仍未收到响应消息,向层三发送“ERROR INDICATION(T200超时). 4、基站功率40W,衰减6Db还剩下多少W?10lgA/B=6,A=40W,B=10W或者每衰减3dB功率减半,也可以得出10W。
5、小区切换失败的原因有哪些?a, 邻区关系丢失b,基站时钟不同步c,干扰严重,无线环境差h,切换参数不合理i,目标小区没有可用信道j,硬件故障k,交换和无线数据不匹配,不同厂家设备之间协议问题。
6、路测过程中电平突变的原因有哪些?分空闲状态和通话状态两种状态回答,a,b,c,d为空闲状态A,无主覆盖小区,信号不稳定B,BCCH载频故障,或者传输故障C,CRO设置过大,导致C2值偏高,手机重选过去,实际电平比较低切换至问题载频上D,邻区关系丢失,导致小区重选E,切换至问题载频上F,位置更新导致重选至电平低小区G,干扰,导致切换至其他小区,电平较低7、电话未接通的原因有哪些?A,SD和TCH拥塞B,PCH设置偏小,导致寻呼成功率低C,T3212和交换侧设置不一致,导致出现手机空白D,覆盖盲区E,被叫用户在做位置更新8、如何从层2层3消息中判断掉话?层3:无RELEASE和DISCONECT信令层2:BSC向交换上发一个CLEARE REQUEST消息9、路测中需要注意哪些问题?A,电平覆盖B,语音质量C,接通率D,掉话率10、基站功率降低的原因有哪些?A,基站模块故障B,扩容,从2扩容到4块及以上C,系统调整参数D,天线老化11、C/A含义是什么?同频干扰保护比C/I,要求不小于9Db,邻频干扰保护比为C/A,要求不小于-9dB,工程要求加3dB12、PDCH和PCH的复帧是多少?PDCH为业务信道用52复帧PCH为信令信道用51复帧13、DBD和DBI的关系是?dBi= dBd +2.15dBi和dBd是功率增益的单位,两者都是相对值,dBi的参考基准为全方向性天线;dBd 的参考基准为偶极子,dBm是一个表示功率绝对值的单位,计算公式为:10lg功率值/1mW,dB也是功率增益的单位,按公式10 lg A/B,例如:A功率比B功率大一倍,那么10 lg A/B = 10 lg 2 = 3dB14、下行覆盖差是怎么解决?A,增加功率B,换高增益天线,调整俯仰角、方位角C,直放站,新建站E,减少合路器或者电桥F,更换高功率载频G,增加塔放,增加“村通宝”15、某小区切出差有什么原因?参考5题,切换失败的原因16、在测数据时不能接入是什么原因?A,手机有无开通数据业务B,基站GPRS是否开通C,mfs是否故障,D,覆盖差E,PDCH无资源F,干扰情况G,网关故障H,SGSN故障I,频繁小区重选17、MOS值差怎么解决?MOS——Mean Opinion Score 平均意见值MOS值常以衡量通信系统语音质量的重要指标。
java华为面试题(中博)
JAVA方面1.面向对象的特征有哪些方面封装、继承、多态、抽象。
2.String是最基本的数据类型吗?String类是final类型的,因此不可以继承这个类、不能修改这个类。
为了提高效率节省空间,我们应该用StringBuffer类3.int 和 Integer 有什么区别int是基本数据类型中的整型;Integer是年int的包装类,是整型对象。
4.String 和StringBuffer的区别String的长度是不可变的,StringBuffer的长度是可变的。
如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法5.运行时异常与一般异常有何异同?异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。
java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
6.说出一些常用的类,包,接口,请各举5个常用类:BufferedReader BufferedWriter FileReader FileWirter String Integer 常用的包:ng java.awt java.io java.util java.sql常用的接口:Remote List Map Document NodeList7.说出ArrayList,Vector, LinkedList的存储性能和特性ArrayList和Vector都是以数组的形式的存储,ArrayList在动态增加时是增加原来长度的一半,面Vector是增加原来的一倍,ArrayList是java2后的版本,且不同步,而V octor是java1时是版本,是同步的,ArrayList比V octor效率高,ArrayList和Vector的读效率高,但插入和删除的效率很低,而LinkedList使用双向链表实现存储,读的效率要比ArrayList低,但插入和删除的效率比Arraylist要高。
(完整版)华为java笔试面试题
华为Java笔试题+数据库题一、单项选择题 1.Java是从( B)语言改进重新设计。
A.Ada B.C++ C.Pasacal D.BASIC 2.下列语句哪一个正确(B ) A. Java程序经编译后会产生machine code B. Java程序经编译后会产生byte code C. Java程序经编译后会产生DLL D.以上都不正确 3.下列说法正确的有(C ) A. class中的constructor不可省略 B. constructor必须与class同名,但方法不能与class同名 C. constructor在一个对象被new时执行 D.一个class只能定义一个constructor 4.提供Java存取数据库能力的包是( A) A.java.sql B.java.awt C.ng D.java.swing 5.下列运算符合法的是( A) A.&& B.<> C.if D.:= 6.执行如下程序代码 a=0;c=0; do{ --c; a=a-1; }while(a>0); 后,C的值是(C ) A.0 B.1 C.-1 D.死循环 7.下列哪一种叙述是正确的( D) A. abstract修饰符可修饰字段、方法和类 B.抽象方法的body部分必须用一对大括号{ }包住 C.声明抽象方法,大括号可有可无 D.声明抽象方法不可写出大括号 8.下列语句正确的是( C) A.形式参数可被视为local variable B.形式参数可被字段修饰符修饰 C.形式参数为方法被调用时,真正被传递的参数 D.形式参数不可以是对象 9.下列哪种说法是正确的(A ) A.实例方法可直接调用超类的实例方法 B.实例方法可直接调用超类的类方法 C.实例方法可直接调用其他类的实例方法 D.实例方法可直接调用本类的类方法 二、多项选择题 1.Java程序的种类有(BCD ) A.类(Class) B.Applet C.Application D.Servlet 2.下列说法正确的有( BCD) A.环境变量可在编译source code时指定 D. javac.exe能指定编译结果要置于哪个目录(directory) 3.下列标识符不合法的有( ACD) A.new B.$Usdollars C.1234 D.car.taxi 4.下列说法错误的有(BCD) A.数组是一种对象 B.数组属于一种原生类 C. int number=[]={31,23,33,43,35,63} D.数组的大小可以任意改变 5.不能用来修饰interface的有(ACD ) A.private B.public C.protected D.static 6.下列正确的有(ACD ) A. call by value不会改变实际参数的数值 B. call by reference能改变实际参数的参考地址 C. call by reference不能改变实际参数的参考地址 D. call by reference能改变实际参数的内容 7.下列说法错误的有( ACD) A.在类方法中可用this来调用本类的类方法 B.在类方法中调用本类的类方法时可直接调用 C.在类方法中只能调用本类中的类方法 D.在类方法中绝对不能调用实例方法 8.下列说法错误的有(ABC ) A. Java面向对象语言容许单独的过程与函数存在 B. Java面向对象语言容许单独的方法存在 C. Java语言中的方法属于类中的成员(member) D. Java语言中的方法必定隶属于某一类(对象),调用方法与过程或函数相同 9.下列说法错误的有(BCD ) A.能被java.exe成功运行的java class文件必须有main()方法 B. J2SDK就是Java API C. Appletviewer.exe可利用jar选项运行.jar文件 D.能被Appletviewer成功运行的java class文件必须有main()方法 三、判断题 1.Java程序中的起始类名称必须与存放该类的文件名相同。
java华为可信考试题库及答案
java华为可信考试题库及答案1. Java中,哪个关键字用于声明一个类?A. classB. publicC. privateD. void答案:A2. 在Java中,下列哪个选项不是合法的变量名?A. _variableNameB. variableNameC. 2variableNameD. $variableName答案:C3. Java中,如何声明一个整型变量并初始化为10?A. int number = 10;B. int number = "10";C. int number = 10.0;D. int number = '10';答案:A4. Java中,下列哪个选项是正确的数组声明方式?A. int[] myArray;B. int myArray[];C. int[] myArray = {1, 2, 3};D. All of the above答案:D5. 在Java中,哪个关键字用于捕获异常?A. tryB. catchC. finallyD. throw答案:B6. Java中,下列哪个选项是正确的继承方式?A. public class Derived extends Base {}B. public class Derived implements Base {}C. Both A and BD. None of the above答案:A7. Java中,下列哪个选项是正确的接口实现方式?A. public interface MyInterface {}B. public class MyClass implements MyInterface {}C. Both A and BD. None of the above答案:C8. 在Java中,下列哪个选项是正确的方法重载声明?A. public void display(int number);B. public int display(int number);C. Both A and BD. None of the above答案:C9. Java中,下列哪个选项是正确的方法覆盖声明?A. public void display() {}B. public void display() throws Exception {}C. Both A and BD. None of the above答案:A10. 在Java中,下列哪个选项是正确的泛型类声明?A. public class Box<T> {}B. public class Box {}C. Both A and BD. None of the above答案:A11. Java中,下列哪个选项是正确的泛型方法声明?A. public <T> void show(T t) {}B. public void show(T t) {}C. Both A and BD. None of the above答案:A12. 在Java中,下列哪个选项是正确的匿名内部类声明?A. new Thread() {public void run() {System.out.println("Thread is running"); }};B. new Thread() {public void run() {System.out.print("Thread is running");}};C. Both A and BD. None of the above答案:C13. Java中,下列哪个选项是正确的线程启动方式?A. Thread t = new Thread();B. Thread t = new Thread();t.start();C. Both A and BD. None of the above答案:B14. 在Java中,下列哪个选项是正确的线程同步方式?A. synchronized methodB. synchronized blockC. Both A and BD. None of the above答案:C15. Java中,下列哪个选项是正确的集合框架类?A. ListB. SetC. MapD. All of the above答案:D。
2023年职场_华为java面试题
2023年华为java面试题2023年华为java面试题11.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。
Java语言提供了八种基本类型:六种数字类型(四个整数型,两个浮点型)字节型byte 8位短整型short 16位整型int 32位长整型long 64位单精度float 32位双精度double 64位一种字符类型字符型char 8位还有一种布尔型布尔型:boolean 8位可存储"True"和"false"。
String本身就是一个对象而不是基本数据类型,String的变量名是对String类的引用。
2.字符串的操作:写一个方法,实现字符串的反转,如:输入abc,输出cbapublic static String reverse(String s){int length=s.length();StringBuffer result=new StringBuffer(length);for(int i=length-1;i=0;i--)result.append(s.charAt(i));return result.toString();}写一个方法,实现字符串的替换,如:输入bbbwlirbbb,输出bbbhhtccc。
String s = "bbbwlirbbb";s.replaceAll("wlirbbb","hhtccc");2023年华为java面试题21.short s1 =1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型) short s1 = 1; s1 += 1;(可以正确编译)2.float型float f=3.4是否正确?不正确。
华为面试试题 Java技术问答
JA V A中的String与StringBuffer的区别,String是只读的,如果要处理在内存中就中new出一个新的String出来,因此如果循环处理次数很多的情况下,用String极慢;StringBuffer 却与之相反,可以直接改源字符串与C中的char*相似,所以对字符串做大量操作的情况下一般用StringBuffer;Java基础方面:1、作用域public,private,protected,以及不写时的区别答:区别如下:作用域当前类同一package 子孙类其他packagepublic √ √ √ √protected √ √ √ ×friendly √ √ × ×private √ × × ×不写时默认为friendly2、ArrayList和Vector的区别,HashMap和Hashtable的区别答:就ArrayList与Vector主要从二方面来说.一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半就HashMap与HashTable主要从三方面来说。
一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的三.值:只有HashMap可以让你将空值作为一个表的条目的key或value3、char型变量中能不能存贮一个中文汉字?为什么?答:是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的4、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?答:多线程有两种实现方法,分别是继承Thread类与实现Runnable接口同步的实现方面有两种,分别是synchronized,wait与notify5、继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?答:父类:package test;public class FatherClass{public FatherClass(){System.out.println("FatherClass Create");}}子类:package test;import test.FatherClass;public class ChildClass extends FatherClass {public ChildClass(){System.out.println("ChildClass Create");}public static void main(String[] args) {FatherClass fc = new FatherClass(); ChildClass cc = new ChildClass();}}输出结果:C:\>java test.ChildClassFatherClass CreateFatherClass CreateChildClass Create6、内部类的实现方式?答:示例代码如下:package test;public class OuterClass{private class InterClass{public InterClass(){System.out.println("InterClass Create");}}public OuterClass(){InterClass ic = new InterClass();System.out.println("OuterClass Create");}public static void main(String[] args) {OuterClass oc = new OuterClass();}}输出结果:C:\>java test/OuterClassInterClass CreateOuterClass Create再一个例题:public class OuterClass {private double d1 = 1.0;//insert code here}You need to insert an inner class declaration at line 3. Which two inner class declarations arevalid?(Choose two.)A. class InnerOne{public static double methoda() {return d1;}}B. public class InnerOne{static double methoda() {return d1;}}C. private class InnerOne{double methoda() {return d1;}}D. static class InnerOne{protected double methoda() {return d1;}}E. abstract class InnerOne{public abstract double methoda();}说明如下:一.静态内部类可以有静态成员,而非静态内部类则不能有静态成员。
华为的Java面试题及答案
华为的Java面试题及答案【网络综合 - 】1.IP地址的编码分为哪俩部分?IP地址由两部分组成,网络号和主机号。
不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。
2.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。
写出C程序。
循环链表,用取余操作做3.不能做switch()的参数类型是:switch的参数不能为实型。
4. static有什么用途?(请至少说明两种)a.限制变量的作用域b.设置变量的存储域7. 引用与指针有什么区别?a 引用必须被初始化,指针不必。
b 引用初始化以后不能被改变,指针可以改变所指的对象。
c 不存在指向空值的引用,但是存在指向空值的指针。
8. 描述实时系统的根本特性在特定时间内完成特定的任务,实时性与可靠性9. 全局变量和部分变量在内存中是否有区别?如果有,是什么区别?全局变量储存在静态数据库,部分变量在堆栈10. 什么是平衡二叉树?左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于111. 堆栈溢出一般是由什么原因导致的?没有回收垃圾资源12. 什么函数不能声明为虚函数?13. 冒泡排序算法的时间复杂度是什么?O(n^2)14. 写出float x 与“零值”比拟的if语句。
if(x>0.000001&&x<-0.000001)16. Inter采用哪种网络协议?该协议的主要层次构造?tcp/ip 应用层/传输层/网络层/数据链路层/物理层17. Inter物理地址和IP地址转换采用什么协议?ARP (Address Resolution Protocol)。
华为常用面试题目及详解
华为常用面试题目及详解华为常用面试题目及详解面试时,有几个问题是公司面试人员常常会提出的,针对这些问题好好准备,在面试时也就不会哑口无言,无言以对了,下面就面试十大必考题做出分析:(1)为什么想进本公司?这通常是面试官最先问到的问题。
此时面试官就开始评断录用与否了,建议大家先判断自己去应征的工作性质,是专业能力导向呢,或是需要沟通能力,其实现在市场多以服务为方向,所以口才被视为基本能力之一,所以在此时就要好好表现自己的口才,而口才较差者就务必表现出自己的专业能力即诚意,弥补口才不足的部分。
回答这个问题时,一定要积极正面,如想要使自己能有更好的发展空间,希望能在相关领域中有所发展,希望能在公司多多学习等等﹔此时可以稍稍夸一下面试公司,但切记一定要诚恳,不然可是会画蛇添足,得不偿失哦!对于社会新鲜人的建议则是,由于之前没有工作经验,所以建议你可以坦承的说出自己的动机,不过用语还是要思考一下。
(2)喜欢这份工作的哪一点?相信其实大家心中一定都有答案了吧!每个人的价值观不同,自然评断的标准也会不同,但是,在回答面试官这个问题时可不能太直接就把自己心理的话说出来,尤其是薪资方面的问题,不过一些无伤大雅的回答是不错的考虑,如交通方便,工作性质及内容颇能符合自己的兴趣等等都是不错的答案,不过如果这时自己能仔细思考出这份工作的与众不同之处,相信在面试上会大大加分。
(3)自己的优缺点为何?有许多面试官都喜欢问这个问题,目的是在于检视人才是否适当,求职者的诚恳度等等,在这之前应该好好分析自己,将自己的优点与缺点列张单子,在其中挑选亦是缺点亦是优点的部分,在回答问题时,以优点作为主要诉求,强调可以为公司带来利益的优点,如积极,肯学习是最普遍的回答,而缺点部分则建议选择一些无伤大雅的小缺点,或是上述那些模嶙两可的优缺点作为回答,这样才不会使面试官太过针对缺点做发挥,造成面试上的困难。
(4)对公司的了解有多少?这时准备的功夫就派上用场,将你之前所吸收的信息发挥出来吧!至少也要知道公司的产品是哪些,提供哪些服务等等,不然面试官一问当场傻在那儿就糗大了,所以一定要事前准备!(5)对工作的期望与目标何在?这是面试者用来评断求职者是否对自己有一定程度的期望、对这份工作是否了解的问题。
JAVA面试题( 华为)(谜底)
软件开发应试人员考试试题(Java)姓名:___________ 电话:___________以下信息有工作经验人员如实填写,应届毕业不填(时间从毕业参加工作算起)从事Java开发时间____月熟悉JavaScrip时间____月熟悉EXT开发时间____月熟悉PDM开发时间____月熟悉的数据库及时间(如SQLServer 3个月,可多填)___________________一、JAVA基础1、简述你所知道的JAVA修饰符及各自的使用机制?(public、abstract、final、synchronized、super…)public :允许所有客户访问protected:只能在本包内被该类的子类所使用private:只允许在本类内使用abstract:没有提供实现,需要子类提供static:与整个类相关,与单个对象无关final:你只能定义一个实体一次,以后不能改变它或继承它。
一个final修饰的类不能被子类化,一个final修饰的方法不能被重写,一个final修饰的变量不能改变其初始值synchronized:方法获得对对象监控的访问权;如果该方法是static类型的,获得是对类本身的访问权。
super:构造器和方法,都用关键字super指向超类,但是用的方法不一样。
方法用这个关键字去执行被重载的超类中的方法。
2. String、StringBuffer与StringBuilder之间区别?别简述各自的执行效率?区别:String 类型和StringBuffer 类型的主要性能区别其实在于String 是不可变的对象, 因此在每次对String 类型进行改变的时候其实都等同于生成了一个新的String 对象,然后将指针指向新的String 对象,所以经常改变内容的字符串最好不要用String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后,JVM 的GC 就会开始工作,那速度是一定会相当慢的,执行速度:三者在执行速度方面的比较:StringBuilder > StringBuffer > String使用场景:1.如果要操作少量的数据用= String2.单线程操作字符串缓冲区下操作大量数据= StringBuilder3.多线程操作字符串缓冲区下操作大量数据= StringBuffer2、静态变量和实例变量的区别?能在静态方法中调用非静态变量吗?静态变量属于类,该类不生产对象,通过类名就可以调用静态变量。
java华为面试题
java华为面试题IntroductionDuring a Java interview with Huawei, candidates may encounter a variety of interview questions to assess their knowledge and skills in Java programming. In this article, we will discuss some common Java interview questions that you may come across during a Huawei interview.1. What is Object-Oriented Programming?Object-Oriented Programming (OOP) is a programming paradigm that organizes software design around objects, rather than actions and logic. In OOP, objects are instances of classes that represent real-world entities. They encapsulate data and behaviors, and interact with one another through defined interfaces.2. Explain the difference between a class and an object in Java.In Java, a class is a template or blueprint that defines the structure and behavior of an object. It specifies the data and methods that an object of that class will possess. On the other hand, an object is an instance of a class. It represents a specific entity created from the class definition.3. What are the main features of Java?Java is a robust and versatile programming language known for its platform independence, which means that the code written in Java can run on any platform that has a Java Virtual Machine (JVM). Some other features of Java include:- Object-Oriented: Java follows an object-oriented programming approach.- Simple: Java is designed to be easy to learn and use.- Secure: Java provides built-in security features to protect against vulnerabilities.- Portable: Java's platform independence allows it to run on various operating systems.- Multithreaded: Java supports multi-threading, enabling concurrent execution of multiple tasks.- Dynamic: Java supports dynamic memory allocation/deallocation.- High Performance: The Java Virtual Machine (JVM) optimizes Java code for efficient execution.4. What is the difference between the "==" operator and the "equals()" method?In Java, the "==" operator compares the memory addresses of two objects to determine if they are the same. It checks for reference equality.On the other hand, the "equals()" method is a method defined in the Object class, which is the superclass for all classes in Java. It is used to compare the contents or values of two objects. By default, the "equals()" method performs the same comparison as the "==" operator. However, it can be overridden in a class to provide a custom comparison based on the object's attributes.5. What is the difference between static and non-static methods?Static methods, also known as class methods, belong to the class rather than to any particular object instance. They can be accessed directly using the class name, without the need for an object instance. Non-static methods, also known as instance methods, belong to a specific object instance and can be accessed only through an instance of the class.Additionally, static methods cannot directly access non-static (instance) variables or methods of a class, as they do not have access to the object's state. Non-static methods, however, can access both static and non-static members of a class.6. Explain the concept of exception handling in Java.Exception handling in Java is a mechanism to handle runtime errors, known as exceptions. Exceptions can occur during the execution of a program and can disrupt the normal flow of code.Java provides try-catch blocks to handle exceptions. The "try" block contains the code that might throw an exception, while the "catch" block catches and handles the exception. It allows the program to gracefully recover from exceptions and continue execution without terminating abruptly.ConclusionIn this article, we discussed some common Java interview questions that you may encounter during a Huawei interview. These questions focus on the fundamentals of Java programming, including object-oriented concepts, features of Java, operator and method differences, static vs. non-static methods, and exception handling.By familiarizing yourself with these topics and practicing their application, you can enhance your chances of success in a Java interview with Huawei or any other organization. Remember to keep learning and exploring Java concepts to further strengthen your programming skills. Good luck with your Java interview!。
JAVA面试题( 华为)(答案)
软件开发应试人员考试试题(Java)姓名:___________ 电话:___________以下信息有工作经验人员如实填写,应届毕业不填(时间从毕业参加工作算起)从事Java开发时间____月熟悉JavaScrip时间____月熟悉EXT开发时间____月熟悉PDM开发时间____月熟悉的数据库及时间(如SQLServer 3个月,可多填)___________________一、JAVA基础1、简述你所知道的JA V A修饰符及各自的使用机制?(public、abstract、final、synchronized、super…)public :允许所有客户访问protected:只能在本包内被该类的子类所使用private:只允许在本类内使用abstract:没有提供实现,需要子类提供static:与整个类相关,与单个对象无关final:你只能定义一个实体一次,以后不能改变它或继承它。
一个final修饰的类不能被子类化,一个final 修饰的方法不能被重写,一个final修饰的变量不能改变其初始值synchronized:方法获得对对象监控的访问权;如果该方法是static类型的,获得是对类本身的访问权。
super:构造器和方法,都用关键字super指向超类,但是用的方法不一样。
方法用这个关键字去执行被重载的超类中的方法。
2. String、StringBuffer与StringBuilder之间区别?别简述各自的执行效率?区别:String 类型和StringBuffer 类型的主要性能区别其实在于String 是不可变的对象, 因此在每次对String 类型进行改变的时候其实都等同于生成了一个新的String 对象,然后将指针指向新的String 对象,所以经常改变内容的字符串最好不要用String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后,JVM 的GC 就会开始工作,那速度是一定会相当慢的,执行速度:三者在执行速度方面的比较:StringBuilder > StringBuffer > String使用场景:1.如果要操作少量的数据用= String2.单线程操作字符串缓冲区下操作大量数据= StringBuilder3.多线程操作字符串缓冲区下操作大量数据= StringBuffer2、静态变量和实例变量的区别?能在静态方法中调用非静态变量吗?静态变量属于类,该类不生产对象,通过类名就可以调用静态变量。
java华为面试题
JA V A方面1 面向对象的特征有哪些方面2 String是最基本的数据类型吗?3 int 和Integer 有什么区别4 String 和StringBuffer的区别5运行时异常与一般异常有何异同?6 说出一些常用的类,包,接口,请各举5个7 说出ArrayList,Vector, LinkedList的存储性能和特性8设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。
写出程序。
9.JSP的内置对象及方法。
10.用socket通讯写出客户端和服务器端的通讯,要求客户发送数据后能够回显相同的数据。
11说出Servlet的生命周期,并说出Servlet和CGI的区别。
12.EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。
13.EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?14.说出数据连接池的工作机制是什么?15同步和异步有和异同,在什么情况下分别使用他们?举例说明。
16应用服务器有那些?17你所知道的集合类都有哪些?主要方法?18给你一个:驱动程序A,数据源名称为B,用户名称为C,密码为D,数据库表为T,请用JDBC检索出表T的所有数据。
19.说出在JSP页面里是怎么分页的?数据库方面:1.存储过程和函数的区别2.事务是什么?3.游标的作用?如何知道游标已经到了最后?4.触发器分为事前触发和事后触发,这两种触发有和区别。
语句级触发和行级触发有何区别。
华为od机试题库java
华为od机试题库java华为OD机试题库Java一、Java基础1. Java语言概述Java被誉为“计算机世界的第一语言”,它是一种广泛应用于企业级应用开发的高级编程语言。
Java具有平台无关性、面向对象、自动内存管理等特点,因此广泛应用于网页开发、桌面应用、游戏开发、移动应用和大数据处理等方面。
2. Java的基本语法Java的基本语法包括数据类型、变量、运算符、流程控制语句、类、对象、方法等。
掌握Java的基本语法是学习Java编程的第一步。
3. Java中的类和对象Java是一种面向对象的编程语言,类和对象是Java编程的基础。
通过定义类和创建对象,可以实现对数据和行为的封装,从而简化程序的设计和维护。
4. Java中的继承和多态继承是一种面向对象的重要机制,它可以使子类获得父类的属性和方法。
Java中的多态性是继承的一种体现,它可以通过父类引用指向子类对象,实现动态绑定和方法的重写。
5. Java中的异常处理异常是Java中的一种错误机制,它通过抛出和捕获异常来实现程序的控制和错误处理。
Java中的异常处理机制可以帮助程序员更好地理解程序的运行逻辑和调试程序。
二、Java高级1. 集合框架Java的集合框架是一组接口、类和算法,用于实现和操作集合、列表、队列、栈等数据结构。
掌握Java的集合框架可以使程序设计更加简洁高效。
2. IO流Java中的IO流是一种输入输出机制,用于在程序和外部世界之间进行数据交换。
IO流分为字符流和字节流,它们可以用于文件读写、网络传输、序列化等方面。
3. 线程线程是Java中的一种并发机制,它可以让程序在多个任务之间切换执行。
Java的线程机制包括线程的创建、启动、挂起、恢复和停止等操作,掌握Java的线程机制可以实现并发编程和提高程序性能。
4. 反射Java中的反射机制是一种能够在运行时检查和操作类、方法、属性等对象的能力。
通过Java的反射机制,在程序运行时可以动态地创建对象、调用方法和获取属性,使程序的开发和配置更加灵活。
华为Java程序员面试题
华为Java程序员面试题华为Java程序员面试题1.Java程序的种类有(BCD)A.类(Class)B.AppletC.ApplicationD.Servlet2.下列说法正确的有(BCD)A.环境变量可在编译sourcecode时指定B.在编译程序时,所能指定的`环境变量不包括classpath D.javac.exe能指定编译结果要置于哪个目录(directory)3.下列标识符不合法的有(ACD)A.newB.$UsdollarsC.1234D.car.taxi4.下列说法错误的有(BCD)A.数组是一种对象B.数组属于一种原生类C.intnumber=={31,23,33,43,35,63}D.数组的大小可以任意改变5.不能用来修饰interface的有(ACD)A.privateB.publicC.protectedD.static6.下列正确的有(ACD)A.callbyvalue不会改变实际参数的数值B.callbyreference能改变实际参数的参考地址C.callbyreference不能改变实际参数的参考地址D.callbyreference能改变实际参数的内容7.下列说法错误的有(ACD)A.在类方法中可用this来调用本类的类方法B.在类方法中调用本类的类方法时可直接调用C.在类方法中只能调用本类中的类方法D.在类方法中绝对不能调用实例方法8.下列说法错误的有(ABC)A.Java面向对象语言容许单独的过程与函数存在B.Java面向对象语言容许单独的方法存在C.Java语言中的方法属于类中的成员(member)D.Java语言中的方法必定隶属于某一类(对象),调用方法与过程或函数相同9.下列说法错误的有(BCD)A.能被java.exe成功运行的javaclass文件必须有main方法B.J2SDK就是JavaAPIC.Appletviewer.exe可利用jar选项运行.jar文件D.能被Appletviewer成功运行的javaclass文件必须有main 方法。
华为java面试题
一、不定项选择1 select decode(sign(nvl(null,-1)),1,'a',0,'b','c')from dual 的结果为(D)A ‘a’B 0C ‘b’D ‘c’2 select round(3.125,2),trunc(3.125,2)from dual 的结果为(C)A 3.12B 3.12,3.13C 3.13,3.12D 3.12,33 select * from role where name LIKE’Heming%’表示的含义是(C)A 从role 表中查找name 为’Heming%’的记录.B从role 表中查找name 前六个字符为Heming 后面跟任何一个字符的记录C从role 表中查找name 前六个字符为Heming 的记录D从role 表中查找name 为like ‘Heming’的记录4 把表work-on 中字段engineer 的值有0 变为1 应该执行的sql 语句为(C)A insert into works_on(engineer)values(1);B insert into works_on(engineer)into values(1);C update work_on set engineer=1 where engineer=0;D update work_on set engineer=15 SQL 中使用like 操作时字符串的单个字符的通配符使用的符号是(C)A ?B %C _D *6 sql 语句中包括数据库定义语句DDL ,数据库操作语句DML,和数据库控制语句DCL 写出以下选项个属于哪个A create DDLB alter table DDLC revoke DCLD update DMLE drop DDLF grant DCL7 我们需要在employee 数据表中查找工号emp-no 为29346, 24323, 21600 的记录,可以使用sql 语句为(A、B)A select * from employee where emp-no=29346 or emp-no=24323 or emp-no=21600B select * from employee where employee where emp-no in(29346,24323,21600)C select * from employee where emp-no=29346 and emp-no=24323 and emp-no=21600D select * from employee where emp-no not in (29346,24323,21600)8 下面对oracle 的索引描述正确的是(C)A 索引是一种数据对象,改变表的逻辑结构B 当表中记录增加或删除时索引结构均要发生变化C 只有当按指定的索引值查找或按索引列的顺序存取表的时候、可以利用索引提高性能D 索引不占用存储空间9 下列描述正确的是(ABCD)A 一个oracle 实例只能对应一个数据库B 表空间由段组成C 区是数据库存储空间分配的逻辑单位D 数据块是数据库进行I/O 的最小单位10 1 insert 2 delete 3 update 处理1000条数据对数据库回滚段资源使用率由高到低的顺序是(C)A 1 2 3B 1 3 2C 2 3 1D 3 1 2二、判断题1 oracle 与数据实例是一一对应的关系错2 oracle 数据中数据文件存放目录是不可改变的。
华为和新元素java面试题
华为笔试题和面试题如下:一、判断题(主要是java基础题)1.所有的类都会生成class文件;对由于每个类都会生成一个.class文件,用于容纳与如何创建这个类型的对象有关的所有信息(这种信息产生了一个名为Class对象的元类),所以大家或许会猜到内部类也必须生成相应的.class文件,用来容纳与它们的Class对象有关的信息。
这些文件或类的名字遵守一种严格的形式:先是封装类的名字,再跟随一个$,再跟随内部类的名字二、选择题(主要是java基础题)1.定义字符串数组,初始化问题:String str[][],是否正确?是否以初始化?正确,没有初始化;double[][] s=new double[2][3];//定义一个二维数组并分配空间,有默认的初始值0.0三、填空题(主要是java基础题,另外一些简单应用)1.xml的api接口有哪些?有哪几种解析方式?DOM是接口,是基于树型结构解析和创建xml文档的处理方式.JDOM是DOM接口的一套实现,好像是sun自己做的吧.SAX也是接口,sun提出的基于事件的xml解析模型.Xerces是apache的SAX实现.JAXP是sun推出的新的xml解析包,包含了sax和dom的优点且允许用户灵活在不同实现间切换.目前比较流行的XML编程接口API主要有四种:文档对象模型DOM、SAX(用于XML的简单API)、JDOM和JAXP(用于XML解析的Java API)。
本人在实验的项目当中,主要使用到了DOM和JDOM,顺便也熟悉了一下其它两个API。
先来看一个DOM吧,DOM以分层次对象模型来访问存储在XML中的信息,DOM在处理XML文档的时候,生成一棵节点树。
使用者不必考虑XML文档中的信息的类型(不管是表格数据或是一列items),DOM都会在创建一个XML文档的文档对象时创建一棵节点树,并且把文档中的文本信息转变成一组树的节点。
DOM使用树状模型来访问XML文档中的信息,由于XML文档是分层次的,所以DOM这种模式处理XML文档十分清晰明确。
华为的java电话面试题目.doc
华为的java电话面试题目华为的java电话面试题目篇11、有哪些数据类型Java定义了8种简单类型:byte、short、int、long、char、float、double和boolean。
2、有几种访问机制?同一个类同一个包不同包的子类不同包的非子类private yesdefault yes yesprotected yes yes yespublic yes yes yes yes3、JDBC的过程1. 加载JDBC驱动程序Class.forName( com.mysql.jdbc.Driver //MySQL的加载JDBC驱动程序的方法Class.forName( org.postgresql.Driver //PostgreSQL的加载JDBC驱动程序的方法Class.forName( oracle.jdbc.driver.OracleDriver //Oracle的加载JDBC驱动程序的方法Class.forName( .DB2Driver //DB2的加载JDBC驱动程序的方法Class.forName( com.sybase.jdbc2.jdbc.SybDriver //Sybase的加载JDBC驱动程序的方法Class.forName( com.microsoft.jdbc.sqlserver.SQLServerDriver //SQLServer的加载JDBC驱动程序的方法2. 建立数据库连接与MySQL数据库建立连接的方法:Connection con=DriverManager.getConnection( jdbc:mysql://MyDbComputerN ameOrIP:3306/myDBName ,ID,Pwd);与PostgreSQL数据库建立连接的方法:Connection con=DriverManager.getConnection( jdbc:postgresql://MyDbComput erNameOrIP:3306/myDBName ,ID,Pwd);与Oracle数据库建立连接的方法:Connection con=DriverManager.getConnection( jdbc:oracle:thin:@MyDbComp uterNameOrIP:1521:ORCL ,ID,Pwd);与Sybase数据库建立连接的方法:Connection con=DriverManager.getConnection( jdbc:sybase:Tds:MyDbComput erNameOrIP:2638 ,ID,Pwd);与SQL Server数据库建立连接的方法:Connection con=DriverManager.getConnection( jdbc:microsoft:sqlserver://MyD bComputerNameOrIP:1433;databaseName=master ,ID,Pwd);与DB1数据库建立连接的方法:Connection con=DriverManager.getConnection( jdbc:db2://MyDbComputerNam eOrIP/myDBName ,ID,Pwd);3. 创建并执行SQL语句用Connection.createStatement()方法来创建一个Statement 对象。
华为公司 java 面试题
华为公司 java 面试题第一部分:选择题QUESTION NO: 11、public class Test {public static void changeStr(String str){str='welcome';}public static void main(String[] args) {String str='1234';changeStr(str);}}Please write the output result :welcome QUESTION NO:21. public class Test {2. static boolean foo(char c) {3.4. return true;5. }6. public static void main( String[] argv ) {7. int i =0;8. for ( foo('A'); foo('B')&&(i<2); foo('C')){9. i++ ;10. foo('D');12. }13. }14. }What is the result AA. ABDCBDCBB. ABCDABCDC. Compilation fails.D. An exception is thrown at runtime. QUESTION NO: 31. class A {2. protected int method1(int a, int b) { return 0; }3. }Which two are valid in a class that extends class A (Choose two) bA. public int method1(int a, int b) { return 0; }B. private int method1(int a, int b) { return 0; }C. private int method1(int a, long b) { return 0; }D. public short method1(int a, int b) { return 0; }E. static protected int method1(int a, int b) { return 0; } QUESTION NO: 4 d1. public class Outer{2. public void someOuterMethod() {3. }5. public class Inner{}6. public static void main( String[]argv ) {7. Outer o = new Outer();8. }10. }Which instantiates an instance of Inner?A. new Inner(); new Inner(); 8new (); new (); ew Inner()QUESTION NO: 5Which method is used by a servlet to place its session ID in a URL th at is written to the servlet’s response output stream dA. The encodeURL method of the HttpServletRequest interface.B. The encodeURL method of the HttpServletResponse interface.C. The rewriteURL method of the HttpServletRequest interface.D. The rewriteURL method of the HttpServletResponse interface.QUESTION NO: 6Which two are equivalent (Choose two)A. <%= %>B. <%= ()%>C. <%= ('size')%>D. <jsp:getProperty id='YoshiBean' param='size'/>E. <jsp:getProperty name='YoshiBean' param='size'/>F. <jsp:getProperty id='YoshiBean' property='size'/>G. <jsp:getProperty name='YoshiBean' property='size'/>QUESTION NO: 7Which of the following statements regarding the lifecycle of a sessio n bean are correct1. is thrown if () is invoked when a stateful session bean instance is passivated.2. () does not throw an exception when a session bean with bean-man aged transaction demarcation is activated.3. An exception is not thrown when () is called in the afterBegin m ethod of a bean with container-managed transactions.4. JNDI access to java:comp/env is permitted in all the SessionSync hronization methods of a stateful session bean with container-managed transaction demarcation.5. Accessing resource managers in the method of a stateful session bean with bean-managed transaction does not throw an exception.第二部分:概念题1.描述Struts体系结构对应各个部分的开发工作主要包括哪些2. XML包括哪些解释技术,区别是什么3. JSP有哪些内置对象和动作它们的作用分别是什么4、SQL问答题SELECT * FROM TABLE和SELECT * FROM TABLEWHERE NAME LIKE '%%' AND ADDR LIKE '%%'AND (1_ADDR LIKE '%%' OR 2_ADDR LIKE '%%'OR 3_ADDR LIKE '%%' OR 4_ADDR LIKE '%%' )的检索结果为何不同5、SQL问答题表结构:1、表名:g_cardapply字段(字段名/类型/长度):g_applyno varchar 8;//申请单号(关键字)g_applydate bigint 8;//申请日期g_state varchar 2;//申请状态2、表名:g_cardapplydetail字段(字段名/类型/长度):g_applyno varchar 8;//申请单号(关键字)g_name varchar 30;//申请人姓名g_idcard varchar 18;//申请人身份证号g_state varchar 2;//申请状态其中,两个表的关联字段为申请单号。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、有哪些数据类型Java定义了8种简单类型:byte、short、int、long、char、float、double和boolean2、有几种访问机制?同一个类同一个包不同包的子类不同包的非子类private yesdefault yes yesprotected yes yes yespublic yes yes yes yes3、JDBC的过程1. 加载JDBC驱动程序Class.forName("com.mysql.jdbc.Driver");//MySQL的加载JDBC驱动程序的方法Class.forName("org.postgresql.Driver");//PostgreSQL的加载JDBC驱动程序的方法Class.forName("oracle.jdbc.driver.OracleDriver");//Oracle的加载JDBC驱动程序的方法Class.forName(".DB2Driver");//DB2的加载JDBC驱动程序的方法Class.forName("com.sybase.jdbc2.jdbc.SybDriver");//Sybase的加载JDBC驱动程序的方法Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");//SQLServer的加载JDBC驱动程序的方法2. 建立数据库连接与MySQL数据库建立连接的方法:Connection con=DriverManager.getConnection("jdbc:mysql://MyDbComputerNameOrIP:3306/myDBName",ID,Pwd);与PostgreSQL数据库建立连接的方法:Connection con=DriverManager.getConnection ("jdbc:postgresql://MyDbComputerNameOrIP:3306/myDBName",ID,Pwd);与Oracle数据库建立连接的方法:Connection con=DriverManager.getConnection("jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL",ID,Pwd);与Sybase数据库建立连接的方法:Connection con=DriverManager.getConnection("jdbc:sybase:Tds:MyDbComputerNameOrIP:2638",ID,Pwd);与SQL Server数据库建立连接的方法:Connection con=DriverManager.getConnection("jdbc:microsoft:sqlserver://MyDbComputerNameOrIP:1433;databaseName=master",ID,Pwd);与DB1数据库建立连接的方法:Connection con=DriverManager.getConnection("jdbc:db2://MyDbComputerNameOrIP/myDBName",ID,Pwd);3. 创建并执行SQL语句用Connection.createStatement()方法来创建一个Statement对象。
Statement对象执行一个查询并从DBMS返回一个包含响应结果的ResultSet对象。
4. 处理从DBMS返回的数据查询处理后从DBMS收到的查询结果赋给java.sql.ResultSet对象,该对象包含一些用来从结果集中获取数据存到Java变量中的方法,以便进行进一步处理。
5. 关闭数据库连接使用与数据库有关的对象所消耗的内存是很大的,因此在完成数据库访问后要及时关闭数据库连接,同时还应关闭Connection中返回的内容,包括Statement对象和ResultSet对象。
4、preparStatement和普通statement的区?5、servlet的生命周期1. 加载/ 实例化:Servlet容器查找并加载所有的servlet类.当Servlet引擎启动时或者说在客户http请求委托时实例一个Servle或多个Servlet类2. 初始化这里在客户请求委托代理之前,使用init()方法进行初始化.3. 请求处理当初始化完成之后这时就可以处理客户http请求了.这里使用service()这个方法来完成并把其作参数进行传递,这里的参数包含了httpServletRequest()和httpServletResponse()两个方法分别对应于请求和回应它们也会抛出servletException和IOException然后针对不同的http请求(四个上面说过,get,post,put,head)由doGet(),doPost(),doPut(),doHead(),这四个不同的方法块里的处理单元来处理……4. 删除Sevlet有时出于一些原因需要对Sevlet容器中的servlet实例进行删除,这时就可以调用destroy()方法进行, 执行了这个方法之后,这时Sevlet就不能再执行其它客户机的请求了……而这时它也就成了JAVA垃圾回收机的回收对象了!以上的4个步骤就是一个servlet的生命周期6、Servlet里的set方法(setAttribute)7、JSP有哪些缺省对象8、怎么样创建,销毁session9、用到什么结果集?细述一下ArrayListArrayList是List接口的一个可变长数组实现。
实现了所有List接口的操作,并允许存储null值。
除了没有进行同步,ArrayList基本等同于Vector。
在Vector中几乎对所有的方法都进行了同步,但ArrayList仅对writeObject和readObject 进行了同步,其它比如add(Object)、remove(int)等都没有同步。
1.存储ArrayList使用一个Object的数组存储元素。
private transient Object elementData[];ArrayList实现了java.io.Serializable接口,这儿的transient标示这个属性不需要自动序列化。
下面会在writeObject()方法中详细讲解为什么要这样作。
2.add和removepublic boolean add(Object o) {ensureCapacity(size + 1); // Increments modCount!!elementData[size++] = o;return true;}注意这儿的ensureCapacity()方法,它的作用是保证elementData数组的长度可以容纳一个新元素。
在“自动变长机制”中将详细讲解。
public Object remove(int index) {RangeCheck(index);modCount++;Object oldValue = elementData[index];int numMoved = size - index - 1;if (numMoved > 0)System.arraycopy(elementData, index+1, elementData, index,numMoved);elementData[--size] = null; // Let gc do its workreturn oldValue;}RangeCheck()的作用是进行边界检查。
由于ArrayList采用一个对象数组存储元素,所以在删除一个元素时需要把后面的元素前移。
删除一个元素时只是把该元素在elementData数组中的引用置为null,具体的对象的销毁由垃圾收集器负责。
modCount的作用将在下面的“iterator()中的同步”中说明。
注:在前移时使用了System提供的一个实用方法:arraycopy(),在本例中可以看出System.arraycopy()方法可以对同一个数组进行操作,这个方法是一个native 方法,如果对同一个数组进行操作时,会首先把从源部分拷贝到一个临时数组,在把临时数组的元素拷贝到目标位置。
3.自动变长机制在实例化一个ArrayList时,你可以指定一个初始容量。
这个容量就是elementData数组的初始长度。
如果你使用:ArrayList list = new ArrayList();则使用缺省的容量:10。
public ArrayList() {this(10);}ArrayList提供了四种add()方法,public boolean add(Object o)public void add(int index, Object element)public boolean addAll(Collection c)public boolean addAll(int index, Collection c)在每一种add()方法中,都首先调用了一个ensureCapacity(int miniCapacity)方法,这个方法保证elementData数组的长度不小于miniCapacity。
ArrayList的自动变长机制就是在这个方法中实现的。
public void ensureCapacity(int minCapacity) {modCount++;int oldCapacity = elementData.length;if (minCapacity > oldCapacity) {Object oldData[] = elementData;int newCapacity = (oldCapacity * 3)/2 + 1;if (newCapacity < minCapacity)newCapacity = minCapacity;elementData = new Object[newCapacity];System.arraycopy(oldData, 0, elementData, 0, size);}}从这个方法实现中可以看出ArrayList每次扩容,都扩大到原来大小的1.5倍。
每种add()方法的实现都大同小异,下面给出add(Object)方法的实现:public boolean add(Object o) {ensureCapacity(size + 1); // Increments modCount!!elementData[size++] = o;return true;}4.iterator()中的同步在父类AbstractList中定义了一个int型的属性:modCount,记录了ArrayList结构性变化的次数。