JAVA必背面试题和项目面试通关要点Word文档下载推荐.docx

上传人:b****5 文档编号:8556801 上传时间:2023-05-11 格式:DOCX 页数:27 大小:45.56KB
下载 相关 举报
JAVA必背面试题和项目面试通关要点Word文档下载推荐.docx_第1页
第1页 / 共27页
JAVA必背面试题和项目面试通关要点Word文档下载推荐.docx_第2页
第2页 / 共27页
JAVA必背面试题和项目面试通关要点Word文档下载推荐.docx_第3页
第3页 / 共27页
JAVA必背面试题和项目面试通关要点Word文档下载推荐.docx_第4页
第4页 / 共27页
JAVA必背面试题和项目面试通关要点Word文档下载推荐.docx_第5页
第5页 / 共27页
JAVA必背面试题和项目面试通关要点Word文档下载推荐.docx_第6页
第6页 / 共27页
JAVA必背面试题和项目面试通关要点Word文档下载推荐.docx_第7页
第7页 / 共27页
JAVA必背面试题和项目面试通关要点Word文档下载推荐.docx_第8页
第8页 / 共27页
JAVA必背面试题和项目面试通关要点Word文档下载推荐.docx_第9页
第9页 / 共27页
JAVA必背面试题和项目面试通关要点Word文档下载推荐.docx_第10页
第10页 / 共27页
JAVA必背面试题和项目面试通关要点Word文档下载推荐.docx_第11页
第11页 / 共27页
JAVA必背面试题和项目面试通关要点Word文档下载推荐.docx_第12页
第12页 / 共27页
JAVA必背面试题和项目面试通关要点Word文档下载推荐.docx_第13页
第13页 / 共27页
JAVA必背面试题和项目面试通关要点Word文档下载推荐.docx_第14页
第14页 / 共27页
JAVA必背面试题和项目面试通关要点Word文档下载推荐.docx_第15页
第15页 / 共27页
JAVA必背面试题和项目面试通关要点Word文档下载推荐.docx_第16页
第16页 / 共27页
JAVA必背面试题和项目面试通关要点Word文档下载推荐.docx_第17页
第17页 / 共27页
JAVA必背面试题和项目面试通关要点Word文档下载推荐.docx_第18页
第18页 / 共27页
JAVA必背面试题和项目面试通关要点Word文档下载推荐.docx_第19页
第19页 / 共27页
JAVA必背面试题和项目面试通关要点Word文档下载推荐.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

JAVA必背面试题和项目面试通关要点Word文档下载推荐.docx

《JAVA必背面试题和项目面试通关要点Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《JAVA必背面试题和项目面试通关要点Word文档下载推荐.docx(27页珍藏版)》请在冰点文库上搜索。

JAVA必背面试题和项目面试通关要点Word文档下载推荐.docx

去除重复语句:

selectidfromusergroupbyidhavingcount(*)>

1;

(8)数据库优化:

prepareStatement比Statement性能高,一个sql发给服务器去执行.涉及步骤:

语法检查,语义定义,编译和缓存.有外检约束会影响插入和删除功能,如果程序能保证数据的完整性,那么设计数据库的时候就去掉外键.sql语句全部大写,特别是列名和表名.

2.如何实现数据库分页功能?

SQL语句复杂的关联表查询,累计求和。

在不使用框架情况下,如何连接数据库?

数据库连接完之后,需要关闭的两个接口是什么?

关闭数据库过程中最容易抛出的异常是什么?

(1)分页:

”select*fromuserlimit“+(pageNo-1)*pageSize+”,”+pageSize;

(2)求和:

select*fromuser1unionselect*fromuser2;

(3)手动连接数据库:

Connectioncn=null;

PreparedStatementpst=null;

Resultrs=null;

try{Class.forname(driverClassName);

cn=DriverManager.getConnection(url,username,password);

pst=cn.prepareStatement(“sql”);

pst.setString(1,studentName);

Resultrs=pst.executeQuery();

while(rs.next()){system.out.println();

}catch(Exceptione){e.printStackTrace();

}finally{if(rs!

=null){rs.close();

}if(pst!

=null){pst.close()}if(cn!

=null){cn.close();

}}}

(4)ResultprepareStatement结果集和sql传输

(5)Exception

3.Oracle索引的优缺点、视图和存储过程、连接符是什么?

默认端口是什么?

MySQL什么是左链接、右链接和内链接?

数据库中查询左链接、右链接和内链接结果是什么?

数据库的存储原理,讲一讲?

(1)端口:

1521;

(2)内连接就是左表和右表相同的数据.

外连接分为:

左外连接、右外连接、全外连接

左外连接就是以左表为准,去匹配右表,左表有多少条数据,结果就是多少条数据

右外连接就是与左外连接反之,以右表为准,去匹配左表,右表有多少条数据,结果就是多少条数据。

全外连接数据条数不一定,相当与是左外连接和右外连接的综合。

(3)oracle索引分为:

聚集索引,非聚集索引,唯一索引;

优点:

方便查询,在数据量大时排序更宜查询;

缺点:

查询时需要进行重新排序,减少了效率。

物理索引缺点建立索引效率低,只能建一个更有说服力的;

(4)连接符为”||”或CONCAT();

(5)视图:

其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据。

视图将一个查询的结果作为一个表来使用,因此视图可以被看作是存储的查询或一个虚拟表。

视图来源于表,所有对视图数据的修改最终都会被反映到视图的基表中,这些修改必须服从基表的完整性约束,并同样会触发定义在基表上的触发器

(6)存储过程:

oracle有系统存储过程和自定义存储过程,为了完成特定功能的sql语句集,经编译后存储在数据库中,用户通过特定的存储过程名来执行

(7)存储原理:

当用户创建索引时,oracle会自动的在表空间里创建索引段来存储索引的数据;

4.Char里面可以存放汉字吗?

(1)char型变量就是用来存储Unicode编码字符的,Unicode编码字符集中包含了汉字,所以可以存储汉字,如果某个特殊的汉字没有包含在Unicode编码字符集中,那么char型变量就不能存储,Unicode占用两个字节,所以char型的变量也是占用两个字节.

二Java基础

1.说一下多态的表现形式?

(1)重载,重写,重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同

(2)重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,子类方法的访问权限只能比父类的更大,不能更小。

如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法

2.数据的加密模式?

加密模式的顺序?

(1)对称式和非对称式,顺序:

传输加密,数据存储加密,数据完整型的鉴别,密钥管理;

3.问到hasshmap底层数据结构,arraylist-linklist区别和为什么有这样的区别;

数组的比较方法;

基本类型和引用数据类型的区别;

问接口和抽象类的区别;

(1)HashMap是线程序不安全的,不是同步的

HashMap可以让你将空值作为一个表的条目的key或value

Hashmap实际上是一个数组和链表的结合体,在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,hashmap也不例外。

Hashmap实际上是一个数组和链表的结合体.

(2)区别:

ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构,对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针,.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据,若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。

但若是批量随机的插入删除数据,LinkedList的速度大大优于ArrayList.因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。

这一点我做了实验。

在分别有200000条“记录”的ArrayList和LinkedList的首位插入20000条数据,LinkedList耗时约是ArrayList的20分之1。

4.如何配置安装jdk?

如何判断其配置成功?

(1)首先安装JDK要看你电脑的位数,选择32位或64位的jdk版本,建议使用1.6版本以上,1.7版本一下;

(2)从Oracle官网下载JDK安装包。

(3)安装包下载完成后,双击安装包进行安装,安装路径可以使用默认路径。

(4)安装完成后,还需要进行环境变量的配置,在系统环境变量的用户变量里面添加一个变量名为JAVA_HOME环境变量,然后在变量值处填写上JDK安装目录的bin文件夹的路径,如:

C:

\ProgramFiles\Java\jdk1.7.0_79,然后再添加一个变量名为Path的变量,变量值填写为%JAVA_HOME%\bin;

即可。

(5)可以写一个简单的java程序来测试JDK是否已安装成功:

publicclassTest{publicstaticvoidmain(Stringargs[]){System.out.println("

Thisisatestprogram."

);

}}将上面的这段程序保存为文件名为Test.java的文件。

(注意Test是程序的公共类,必须和文件名一致,包括大小写)然后打开命令提示符窗口,cd到你的Test.java所在目录,然后键入下面的命令:

javacTest.java(回车)javaTest此时如果看到打印出来Thisisatestprogram.的话说明安装成功了,如果没有打印出这句话,你需要仔细检查一下你的配置情况。

5.手写单例模式(饿汉和饱汉模式)和工厂模式?

(1)单例饿汉模式:

//饿汉式单例类.在类初始化时,已经自行实例化

2publicclassSingleton1{

3//私有的默认构造子

4privateSingleton1(){}

5//已经自行实例化

6privatestaticfinalSingleton1single=newSingleton1();

7//静态工厂方法

8publicstaticSingleton1getInstance(){

9returnsingle;

10}

11}

(2)懒汉模式:

//懒汉式单例类.在第一次调用的时候实例化

2publicclassSingleton2{

4privateSingleton2(){}

5//注意,这里没有final

6privatestaticSingleton2single=null;

8publicsynchronizedstaticSingleton2getInstance(){

9if(single==null){

10single=newSingleton2();

12returnsingle;

13}

14}

(3)工厂模式:

interfaceIFactory{

publicIProductcreateProduct();

}

ClassFactoryimplementsIFactory{

publicIProductcreateProduct(){returnnewProduct();

}}

Publicclassclient{

PublicStaticvoidmain(String[]args){IFactoryfactory=newFactory();

IProductproduct=factory.createProduct();

product.ProductMethod();

6.手写创建list,定义list,泛型?

(1)Listlist=newArrayList();

(2)Listlist=newArrayList();

(3)Students=newStudent();

(4)List.add(s);

7.安全:

hassmap和hasstable的区别?

那个不安全?

为什么?

怎么便利hashmap?

线程方面:

线程有几种状态?

谈谈多线程的安全问题;

问到线程和同步?

写一个生产者和消费者模式;

考虑高并发的问题。

(1):

区别:

一.历史原因:

Hashtable是基于陈旧的Dictionary类的,HashMap是Java1.2引进的Map接口的一个实现;

(2)二.同步性:

Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的

(3)三.值:

只有HashMap可以让你将空值作为一个表的条目的key或value

(4)为什么?

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步。

Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异

(5)遍历hashmap:

两种方式,Mapmap=newHashMap();

Iteratoriter=map.entrySet().iterator();

s

Iteratoriter=map.keySet().iterator();

(6)线程通常有五种状态,创建,就绪,运行,阻塞,和死亡;

第一是创建状态。

在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态手写字符串反转和冒泡排序;

第二是就绪状态。

当调用了线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。

在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。

第三是运行状态。

线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数当中的代码。

第四是阻塞状态。

线程正在运行的时候,被暂停,通常是为了等待某个时间的发生(比如说某项资源就绪)之后再继续运行。

sleep,suspend,wait等方法都可以导致线程阻塞。

第五是死亡状态。

如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。

对于已经死亡的线程,无法再使用start方法令其进入就绪

(7)多线程的安全问题:

总结来说,多个线程在执行同一段代码的时候,每次的执行结果和单线程执行的结果都是一样的,不存在执行结果的二义性,就可以称作是线程安全的。

线程安全问题多是由全局变量和静态变量引起的,当多个线程对共享数据只执行读操作,不执行写操作时,一般是线程安全的;

当多个线程都执行写操作时,需要考虑线程同步来解决线程安全问题。

(8)线程和同步:

说明Java线程的两个特性,可见性和有序性。

多个线程之间是不能直接传递数据交互的,它们之间的交互只能通过共享变量来实现.

java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),

将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,

从而保证了该变量的唯一性和准确性

(9)生产者和消费者模式:

存储空间已满,而生产者占用着它,消费者等着生产者让出空间从而去除产品,生产者等着消费者消费产品,从而向空间中添加产品。

互相等待,从而发生死锁。

(10)模式:

1.wait()和notify();

2.await()和signal(),即线程锁的方式;

3.阻塞队列的方式;

(11)高并发:

手段无非是切割(纵向,横向)和负载均衡。

纵向分隔主要是按业务(功能)来分,也就是所谓面向服务架构,横向分隔方式比较多,主要依赖于所处理的对象属性负载均衡则可以是镜像(部署)分布(同样的功能部署几份)和计算分布(一个问题分几个子问题在不同的机器上运行,然后合并结果)。

当然,这些手段是可以综合利用的,最终可以做成多流水线分布式计算模式;

8.list、map和set什时候用?

彼此间的区别和联系?

(1)list列表是顺序存放对象的,可以有相同的对象,通过索引存取;

一般在能直接使用数组的时候,就有使用列表

(2)set集合:

集合是无序存放对象的,其中不能有重复的对象(唯一的,回忆高中时候数学中学习的集合特性),集合没有索引,只能遍历次存取;

一般用于存放无序的(指顺序不重要)不能重复的对象

(3)Map映射:

映射,存放的是键与值的映射,其中键是唯一的(不能有重复对象),而值可以有重复的对象,存的时候,需要指定键和对应的值,取的时候可以根据键名取到值,也可以遍历;

一般在用于存放具有对应关系的键值对的时候用;

(4)三者的区别和联系:

三者都是接口,List与Set具有相似性,它们都是单列元素的集合,list,set是继承自collection,而map不是,list里可以有重复元素,有先后顺手,Set里面不允许有重复的元素,而且无序,Map保存key-value值,value可多值。

9.java常见的数据类型是什么和对应的包装类是什么?

java的隐式类型?

assert什么时候使用?

(1)int,double,float,long,short,boolean,byte,char

(2)Integer.Double,Float,Long,Short,Boolean,Byte,Characher.

(3)java的隐式类型是int,byte,short,char都可以隐含转换为int,

(4)一般来说,assertion用于保证程序最基本、关键的正确性。

assertion检查通常在开发和测试时开启。

为了提高性能,在软件发布后,assertion检查通常是关闭的;

10.object类型中有哪些方法?

(1)equals()、hashCode()、wait()、toString(),finalize(),notify(),notifyAll(),wait(),

11.final、finallly和finalize的区别?

(1)final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

内部类要访问局部变量,局部变量必须定义成final类型,例如,一段代码……

finally是异常处理语句结构的一部分,表示总是执行。

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法

12.LinkedList和ArrayList的区别?

继承的接口?

(1)ArrayList是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢

LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

LinkedList也是线程不安全的,LinkedList提供了一些方法,使得LinkedList可以被当作堆栈和队列来使用

(2)list接口;

ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问;

Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。

LinkedList是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。

另外,接口中没有定义的方法get,remove,insertList,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。

LinkedList没有同步方法。

如果多个线程同时访问一个List,则必须自己实现访问同步。

一种解决方法是在创建List时构造一个同步的List:

13.int和string是如何转化的?

(1)inti=Integer.parseInt([String]);

i=Integer.parseInt([String],[intradix]);

或者inti=Integer.valueOf(my_str).intValue();

int转StringStrings=String.valueOf(i);

Strings=Integer.toString(i);

Strings="

"

+i;

15.谈谈你对面向对象编程的理解?

(1)Java语言是纯粹的面向对象的程序设计语言,这主要表现为Java完全支持面向对象的三种基本特征:

继承、封装和多态。

Java语言完全以对象为中心,Java程序的最小程序单位是类,整个Java程序由一个一个的类组成;

Java完全支持使用对象、类、继承、封装、消息等基本概念来进行程序设计,允许从现实世界中客观存在的事物(即对象)出发来构造软件系统,在系统构造中尽可能运用人类的自然思维方式。

实际上,这些优势是所有面向对象编程语言的共同特征。

而面向对象的方式实际上由OOA(面向对象分析)、OOD(面向对象设计)和OOP(面向对象编程)三个部分有机组成,其中,OOA和OOD的结构需要使用一种方式来描述并记录,目前业界统一采用UML(统一建模语言)来描述并记录OOA和OOD的结果。

目前UML的最新版是2.0它一共包括13种类型的图形,使用这13种图形中的某些就可以很好地描述并记录软件分析、设计的结果

16.重写和重载的区别?

(1)重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同);

(2)重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现;

只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常;

子类方法的访问权限只能比父类的更大,不能更小。

如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法;

17.sleep&

wait区别和联系?

(1)这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类;

sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用了b的sleep方法,实际上还是a去睡觉,要让b线程睡觉要在b的代码中调用sleep。

(2)最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2