java面试基础总结_第1页
java面试基础总结_第2页
java面试基础总结_第3页
java面试基础总结_第4页
java面试基础总结_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1. Java的特点语法简单,面向对象,分布式,安全性,健壮性,解释运行,高效率,与平台无关,多线程,动态性。2. 面向对象的特征继承,封装,多态,抽象(1)继承:子类继承父类的方法和属性 构造器不能继承 子类的构造器一定会调用父类的构造器 实例化子类,会分配所有父类的空间(2)多态:重载方法,方法名一样,方法参数不同的方法(3)抽象:在面向对象分析设计时,可将一些实体作高度抽象定义成抽象类,抽象类没有任何对象,只可作为一个模板用于创建子类,以及为面向对象提供更灵活的多态机制。(4)封装:类封装了数据及对数据的操作,是程序中最小的模块,禁止了外界直接操作类中的数据,模块与模块之间只能通过严格控制的接口进行交互,使得模块之间的耦合度大大降低;保证了模块具有较好的独立性,程序维护和修改较容易。3.java中的8种基本数据类型及数据类型的转换4大类型:逻辑类型:boolean字符类型:char整数类型:byte,short,int,long浮点类型:float,double转换:规则1,当把精度低的变量的值赋给精度高的变量时,系统自动完成数据类型的转换(数据精度从“低”到“高”排序)规则2,当把精度高的变量的值赋给精度低的变量时,必须使用显示类型转换运算。规则3,char与byte或short之间的赋值必须实行强制转换。4.局部变量与全局变量的区别局部变量:不是声明在类括号里面的变量。方法的参数和方法内部的变量都是局部变量。必须要先赋值,后使用,局部变量没有默认初始化值。同一范围内,不允许2个局部变量命名冲突。5.什么是形参,什么是实参?实参:方法调用时候实际传递的参数变量(实际的值,相当于赋值)。形参:方法的参数定义,是临时变量(是个空壳子,相当于声明变量而没有赋值)。6.怎么理解i+与+ii+:先把i的值赋给i+,i的值自增1,再把i+的值赋给i;+i:先把i的值自增1 ,自增后的i的值赋给i+,再把+i的值赋给i;7.&与&的区别&和&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null & !str.equals(“”)表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&改为&,则会抛出NullPointerException异常。If(x=33 & +y0) y会增长,If(x=33 & +y0)不会增长&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。 8.switch()括号中可以是哪些数据类型。char/short/int/byte9. 常用的零值有哪些?整型的默认值:0,0,0boolean类型:false,false,false浮点类型:0.0,0.0,0.0String类型:null,null,nullchar类型:u000010.数组中的动态初始化与静态初始化静态初始化是指由程序员自己为数组对象每个元素赋值,由系统自动计算出数组长度:如String a=new String“Hellow”,”World”,”Yes”;动态初始化是指程序员自己指定数组对象的长度,由系统先自动为其赋值,程序中程序员可以为元素重新赋值;如:String b=new String4;for(int i=0;ib.length;i+) bi=i+”hello”; 11.列举出常用的排序方式及代码/* 冒泡排序 * i表示轮次 * j表示每一轮比较的次数 */public static void main(String args) int arr=12,2,34,55,6,1;System.out.println(Arrays.toString(bubbleSort(arr);public static int bubbleSort(int arr) for(int i=0;iarr.length-1;i+) for(int j=0;jarrj+1) /这一行的j相当于下标int temp=arrj;arrj=arrj+1;arrj+1=temp;return arr; /* * 插入排序 */public static void main(String args) int arr = 4, 33, 2, 1, 46, 34 ;System.out.println(Arrays.toString(insertSort(arr);public static int insertSort(int arr) int i, j, temp;for (i = 1; i = 0 & temp =0;是第一个元素的位置if (temp arrj)Arrj = arrj+1;arrj + 1 = temp;return arr;/* * 选择排序 */public static void main(String args) int arr= 12,23,45,66,3,5;System.out.println(Arrays.toString(number(arr);public static int number(int arr) /i的取值范围:0arr.length-1/j的取值范围:i+1arr.lengthfor(int i=0;iarr.length-1;i+) /i是每次所取数据的下标 j=i+1for(int j=i+1;jarrj) int temp=arri;arri=arrj;arrj=temp;return arr;12.谈谈你对面向对象的理解见白色的java基础教程第46页13.构造器的作用是什么?用来描述对象的创建过程的。构造器的要点:(1)java中的构造器声明在类内部(2)方法名与类名一致的方法叫构造方法(3)构造方法不能声明返回值类型(4)构造方法可以包含参数,参数一般是创建对象实例必须依赖的条件14.重写与重载的区别Overload是重载的意思,Override是覆盖的意思,也就是重写。重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题。子类方法的访问权限只能比父类的更大,不能更小。如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。至于Overloaded的方法是否可以改变返回值的类型这个问题,要看你倒底想问什么呢?这个题目很模糊。如果几个Overloaded的方法的参数列表不一样,它们的返回者类型当然也可以不一样。但我估计你想问的问题是:如果两个方法的参数列表完全一样,是否可以让它们的返回值不同来实现重载Overload。这是不行的,我们可以用反证法来说明这个问题,因为我们有时候调用一个方法时也可以不定义返回结果变量,即不要关心其返回结果,例如,我们调用map.remove(key)方法时,虽然remove方法有返回值,但是我们通常都不会定义接收返回结果的变量,这时候假设该类中有两个名称和参数列表完全相同的方法,仅仅是返回类型不同,java就无法确定编程者倒底是想调用哪个方法了,因为它无法通过返回结果类型来判断。 override可以翻译为覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。在覆盖要注意以下的几点:1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。overload对我们来说可能比较熟悉,可以翻译为重载,它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,VM就会根据不同的参数样式,来选择合适的方法执行。在使用重载要注意以下的几点:1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int,float),但是不能为fun(int,int));2、不能通过访问权限、返回类型、抛出的异常进行重载;3、方法的异常类型和数目不会对重载造成影响;15.访问控制修饰符有哪些,他们的可见范围分别是什么?public:公共的,可以修饰类,方法,成员变量,在任何包中都可以访问。protected:受保护地,可以修饰方法,成员变量,在子类中可以访问(父类和子类)default:默认的,可以修饰类,方法,成员变量,只能在同一包中访问。private:私有的,可以修饰方法,成员变量,只能在类中访问。16.什么是多态?多态性是指在一般类中定义的属性或方法,被特殊类继承之后,可以具有不同的数据类型或变现出不同的行为。这样,一个程序可以存在同名的不同方法,不同类的对象可以响应同名的方法,具体的实现方法却不同。17.JavaBean规范有哪些?(1)必须有包(2)java类,具有无参构造器(3)有用getXXX()和setXxx()声明的Bean属性(4)必须实现序列化接口18.Static修饰符的使用static修饰的属性,是在类加载时被创建并进行初始化,类加载的过程只进行一次,也就是类变量只会被创建一次。不加static修饰的成员是对象成员,也就是归每个对象所有的。加static修饰的成员是类成员,就是可以由一个类直接调用,为所有对象共有的。19.Final修饰符的使用final不能用来修饰构造方法。final修饰的类,不能被继承。final修饰的方法不能被覆盖(重写)。final修饰的变量,初始化以后就不能被修改。finalstatic来定义常量,常量名全部大写。20.抽象类与接口抽象类:abstract(1)抽象类,包含抽象方法的类,一定是抽象类,抽象类不能创建对象(2)抽象类不能创建实例,可以定义引用类型的变量(3)抽象方法,没有具体的实现。没有方法体(4)抽象类只能被继承,一个类继承抽象类,必须实现抽象方法(5)抽象类必须被继承,抽象方法必须被重写(6)抽象方法只需声明,不需要时间。接口:interface(特殊的抽象类)(1)全部的方法都是抽象方法,全部的属性都是常量(2)接口用来表示纯抽象概念,没有任何具体的方法和属性(3)接口不能实例化,可以定义常量(4)接口变量可以引用具体实现类的实例(5)接口只能被继承,一个具体类实现接口,必须使用全部的抽象方法(6)接口之间可以继承(7)一个具体类可以实现多个接口,实现多继承现象(8)接口中的属性,默认常量是public static final(9)接口中的方法一定是public abstract(10)实现一个接口,使用关键字implements,实现实际上是一种继承方法。21.Object类中常用的方法?toString方法,equals方法,hashCode()方法当需要描述对象的时,重写toString方法。有比较两个对象需求,重写 equals方法.当重写 equals,同时也会重写hashCode()方法,重写hashCode()方法通常会以对象的ID作为返回值。22.final,finally,finalize的区别final:用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。内部类要访问局部变量,局部变量必须定义成final类型。finally:是异常处理语句结构的一部分,是异常的统一出口,表示总是执行。finaliaze:是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用。23.StringBuffer与StringBuilder的区别StringBuffer与StringBuilder具有相同的API,StringBuffer性能稍慢。StringBuilder是非线程安全的,StringBuffer是线程安全的。24.String与StringBuilder的区别String内部采用的char数组存储,还带有算法,不会改变char数组内容,会使用复制操作生成新对象。StringBuilder内容数据采用char数组存储,还带有算法,这些方法通过改变char内容来实现,如果容量超出会自动扩容。String表示静态字符串,StringBuilder表示动态字符串。如果需要大量的字符串修改的处理,使用StringBuilder。25.list与set的区别list与set具有相似性,它们都是单列元素的集合。Set里面不允许有重复的元素。List可有重复元素。List表示有先后顺序的集合。26.ArrayList、LinkedList、Vector的区别ArrayList是使用变长数组实现的线性表,ArrayList和Vector都是使用数组方式存储数据。ArrayList是非线程安全的,Vector是线程安全的。LinkedList 是使用双向链表实现存储。27.HashMap VS HashtableHashMap采用异步处理方式,性能较高,属于非线程安全。HashTable 采用同步处理方式,性能较低,属于线程安全。HashTable允许空键值,允许将null作为一个entry的key或者value ,HashTable不允许。28.Collection与Collections的区别Collection是集合的抽象概念。Collections :集合的工具类,如排序,打乱,填充,二分查找。29.Comparable与Comparator的区别comparable:(1)表示可以比较的(用于类实现)(2)实现这个接口表示:这个类的实例可以比较大小,可以进行自然排序(3)compareTo()返回正数表示大,返回负数表示小,返回0表示相等。(4)Comparable的实现必须与equals()的结果一致,就是相等的对象时,比较结果一定是0。Comparator:比较工具,用于临时定义比较规则,不是默认比较规则。30.集合框架图自己看书31.内部类分为哪几种,分别有什么特点?内部类分为四种: (最大作用:封装)静态内部类:使用static修饰,声明在类体中。 静态内部类中可以访问外部类的静态成员成员内部类:声明在类体中,不使用static,具有类的成员特征,也就是具有类的实例才能创建内部类。 内部类实例可以访问共享外部类的成员变量 如:链表的节点就可以定义为内部类局部内部类:把类声明在方法中,就是局部内部类,作用域 类似局部变量匿名内部类:匿名类,非常常见,可以写在任何地方,就像一般语句 语法更像是创建对象:Date dnew Date().; 匿名类是对原类的一个继承,同时创建了实例,就是继承以后的类体,类体中可使用 所有类的语法。 匿名类不能写构造器 。 匿名类可以从抽象类或者接口继承,必须提供抽象方法的实现。 匿名内部类应用在接口回调,事件监听。 31.异常的分类Throwable 类是java语言中所有异常的超类。它有两个子类:Error和Exception。Exception又分为两类:一种是CheckedException,一种是UncheckedException。这两种类的区别主要是CheckedException需要用try.catch显示捕获,而UncheckedException不需要捕获。通常UncheckedException又叫RuntimeException。常见的RuntimeException有IllegalArgumentException,NullPointerException,IndexOutOfBoundsException等等。我们在编写程序过程中,try.catch捕获的异常都是CheckedException。io包中的IOException及其子类,都是CheckedException。32.常见的运行时异常有哪些?有NullPointerException:空指针异常ClassNotFounfException:指定的类不存在IndexOutOfBoundsException:下标越界异常ClassCastException:类型转换异常NumberFormatException:数据格式异常33.字节流与字符流流的分类:按数据方向分:输入流:InputStream/Reader输出流:OutPutStream/Writer按数据类型分:字节流: InputStream/ OutPutStream字符流:Reader/Writer字符流和字节流的区别:1,字节流读取的时候,读到一个字节就返回一个字节。字符流使用了字节流读到一个或多个字节(中文对应的字节是两个,UTF8码表中是三个)时,先去查指定的编码表,将查到的字符返回。2,字节流可以处理所有类型数据,如图片,mp3等。字符流只能处理字符数据。3,字节流输入流都是以InputStream结尾,字节流输出流都是以OutPutStream结尾。在InputStream或者OutPutStream前面代表这个流的作用。字符流输入流都是以Writer,字符流输出流都是以Reader结尾。只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都使用字节流。34.线程的状态五种状态:1,NewBorn(新建)状态2,Runable(就绪)状态3,Running(运行)状态4,Blocked(堵塞)状态5,Dead(死亡)状态35.创建线程的两种方式1,继承Thread类2,实现Runable接口36.oracle数据库中char、varchar、varchar2的区别 char表示定长字符串(方便查询)最长放入n个字符,放入的数据如果不够n个字符则补空格,无论如何都占n个字符长度。varchar表示变长字符串(节省空间)最长放入n个字符,放入的数据是几个长度就占多大空间varchar2 Oracle自己定义的变长字符串。37.oracle数据库中常用的函数数字函数:round(数字,小数点后的位数)用于数字的四舍五入 trunc(数字,小数点后的位数)用于截取 , 如果没有第二个参数,默认是0。 mod()求余日期函数:sysdate 系统当前时间 next_day();下一个星期数对应的日期 last_day();某月的最后一天的日期 trunc();截取日期 months_between();两个日期之间的月数 add_months();加月数操作转换函数:number-char: to_char(); char-data: to_date(); date-char: tochar(sysdate,yyyy-MM-dd); to_date()和to_char()是时间处理函数, to_char() 将日期数据 按指定格式转换为 字符串数据 to_date() 将字符串数据 按指定格式转换为 日期数据其他函数:coalesce(参数列表)函数的作用: 返回参数列表中第一个非空参数,参数列表中最后一个值通常为常量 nvl();处理空值的函数 decode()函数是Oracle中等价于case when语句的函数38.Union与Union all的区别Union,对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;Union All,对两个结果集进行并集操作,包括重复行,不进行排序;Intersect,对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;Minus,对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。39.Truncate与Delete的区别truncate表示截断表,执行后无法恢复delete表示删除表中所有数据,执行后可恢复40.oracle数据库有哪几种约束条件?有五种约束条件:not nullunique 唯一约束建立在表级,unique 约束要求不能重复,可以为nullprimary key 主键约束建立在表级foreign key 外键列可以插入空值check 检查41.有哪几种SQL语言,分别包括哪些操作?创建表:create table .修改表:alter table 待修改的表名 add 字段名字段类型删除表:drop table .更新表:update 表名 set.插入表:insert into 表名 values(.)删除表中数据:delete from 表名.42.内连接与外连接的区别内部连接要求组成连接的两个表必须具有匹配的记录。外部连接主要是用来解决空值匹配的问题。内部连接解决的问题:结果集中只包含匹配的记录外部连接解决的问题:结果集中包含匹配和不匹配的数据 结果集中只包含不匹配的数据外连接分为三种类型:(1)右外连接(右表中所有数据,左表中满足条件的数据)(2)左外连接(左表中所有数据,右表中满足条件的数据)(3)全外连接(左外连接和右外连接的合集)43.事务提交的方式:mysql:自动提交(setAutoCommit)oracle:commit44.连接JDBC的步骤加载驱动:Class.forName(“驱动”);创建连接:Connection conn=DriverManager.getConnection( url,username,password);预执行(小推车)Statement stmt=;conn.createStatement();执行的语句:ResultSet rs=null; stmt.executeQuery(); stmt.executeUpdate(); 释放资源:rs.close(); stmt.close(); conn.close();(1)加载驱动Class.forName(“驱动”);(2)建立连接Connection conn=DriverManager.getConnection( url,username,password);mysql url1=”jdbc:mysql:/ip:3306/test”;oracle url2=”jdbc:oracle:thin:6:1521:tarena”;(3)创建语句Statement stmt=;conn.createStatement();(4)执行sql语句,如果有结果集的话,获得结果集a,DML(insert,update,delete)stmt.executeUpdate(sql);b,DQL(select)ResultSet rs=stmt.executeQuery();while(rs.next() Int id=rs.getInt(“id”);String username=rs.getString(“username”);.(5)关闭资源45.JDBC中有哪几种分页策略,分别有什么优缺点?查询分页:每次查询都去数据库中查,多次与数据库进行交互,查询速度较慢缓存分页:一次性查询出所有数据,存储到ResultSet对象上,每次查询都去缓存中获取数据,查询速度较快,缺点占用内存46.servlet是如何运行的?当用户向浏览器地址栏输入http:/localhost:8080/servlet/login.doa,浏览器根据ip,port建立与服务器的连接。b,浏览器将请求数据(路径,参数)按照http协议打包,发送给服务器。c,服务器解析请求数据包,将请求数据封装到request对象中,同时服务器还创建了一个响应对象。d,服务器根据请求路径,查找对应的servlet,实例化该servlet。e,服务器调用servlet中的service()方法,调用该方法,服务器会传递request,response对象。f,程序员可以在servlet方法中,通过request对象获取请求数据并通过response对象给服务器返回处理结果。g,服务器通过response对象获取到servlet中的处理结果,生成响应的数据包,发送给浏览器。h,浏览器接收到相应数据包,解析响应数据包,取出处理结果,生成响应界面47.get与post请求的区别1)get请求的数据在资源路径中,post请求数据在主体内容中,比较安全。get请求数据不能大于2K,post无限制。(2)get:超连接,直接在地址栏输入,默认提交方式。Post:method=”post”;48.servlet的生命周期当有请求servlet的时候,实例化该servlet的实例(只加载一次),实现初始化工作,调用init()方法(只初始化一次),调用service()方法,实现对请求的处理。当卸载servlet时候,会调用destory()方法。49.转发与重定向的区别(1)重定向目标地址可以是任意地址,转发的地址只能是应用内部的web组件。(2)重定向地址栏改变,转发不改变。(3)重定向web组件之间不共享request对象的数据,转发共享。(4)转发是一件事情未完成,重定向是一件事情已经完成。某一个组件里的数据要带到下一个页面的时候用转发。重定向:/服务器的根请求转发:/项目的根只有转发使用绝对路径时,路径中只以“/”开头,其他都以“/项目名/”开头。50.cookie的工作原理浏览器在访问服务器时,服务器将一些数据以set-cookie消息头的形式发送给浏览器。浏览器会将这些数据保存起来。当浏览器再次访问服务器时,会将这些数据以cookie消息头的形式发送给服务器。通过这种方式,可以管理用户的状态。51.session的工作原理 浏览器访问服务器时,服务器会创建一个session对象(该对象有一个唯一的id,一般称为sessionId),服务器在缺省情况下,会将sessionId以cookie机制发送给浏览器。当浏览器再次访问服务器时,会将sessionId发送给服务器。服务器依据sessionId就可以找到对应的session对象。52.jsp常用的指令有哪些?页面指令: pageEncoding=”编码contentType=” MIME类型和编码import=” 导入其他的包,该属性可以多次使用session=” jsp是否创建sessionisELIgnored=” 是否支持ELerrorPage: 指定当前jsp错误处理页面isErrorPage: 表示是否是错误处理页面标签库指令:53.jsp的隐含对象jsp中的隐含9对象request-HttpServletRequestresponse-HttpServletResponsesession-HttpSessionapplication-ServletContext|-web.xml|-setAttribute,getArrtibute|-全局唯一后四个用的很少:out-response.getWriter();config-ServletConfigexception-Exceptionpagecontext-Object54.Jsp常用的标签有哪些?转发,page属性指定转发的地址。一个jsp在运行过程中,调用另外一个jsp。设置参数name指定参数名 value指定参数值。在指定的范围绑定一个对象。范围指的是四个对象:pageContext,request,session,servletCOntext.也就是说scope的值可以是“page”,”request”,”session”,”application”.依据请求参数给属性赋值使用“自醒机制”给属性赋值55.什么是mvc?是一种软件架构的思想,可以将软件的组成部分化为三部分。M:model(业务逻辑与业务数据)javabeanV:view(显示逻辑)将数据按照用户的要求显示出来。对同一份数据而言,可以以多种形式体现(类表,屏图,柱图)C:cont

温馨提示

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

评论

0/150

提交评论