java工程师找工作中面试遇到的专业知识问题总结.docx

上传人:b****6 文档编号:13658920 上传时间:2023-06-16 格式:DOCX 页数:17 大小:28.36KB
下载 相关 举报
java工程师找工作中面试遇到的专业知识问题总结.docx_第1页
第1页 / 共17页
java工程师找工作中面试遇到的专业知识问题总结.docx_第2页
第2页 / 共17页
java工程师找工作中面试遇到的专业知识问题总结.docx_第3页
第3页 / 共17页
java工程师找工作中面试遇到的专业知识问题总结.docx_第4页
第4页 / 共17页
java工程师找工作中面试遇到的专业知识问题总结.docx_第5页
第5页 / 共17页
java工程师找工作中面试遇到的专业知识问题总结.docx_第6页
第6页 / 共17页
java工程师找工作中面试遇到的专业知识问题总结.docx_第7页
第7页 / 共17页
java工程师找工作中面试遇到的专业知识问题总结.docx_第8页
第8页 / 共17页
java工程师找工作中面试遇到的专业知识问题总结.docx_第9页
第9页 / 共17页
java工程师找工作中面试遇到的专业知识问题总结.docx_第10页
第10页 / 共17页
java工程师找工作中面试遇到的专业知识问题总结.docx_第11页
第11页 / 共17页
java工程师找工作中面试遇到的专业知识问题总结.docx_第12页
第12页 / 共17页
java工程师找工作中面试遇到的专业知识问题总结.docx_第13页
第13页 / 共17页
java工程师找工作中面试遇到的专业知识问题总结.docx_第14页
第14页 / 共17页
java工程师找工作中面试遇到的专业知识问题总结.docx_第15页
第15页 / 共17页
java工程师找工作中面试遇到的专业知识问题总结.docx_第16页
第16页 / 共17页
java工程师找工作中面试遇到的专业知识问题总结.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

java工程师找工作中面试遇到的专业知识问题总结.docx

《java工程师找工作中面试遇到的专业知识问题总结.docx》由会员分享,可在线阅读,更多相关《java工程师找工作中面试遇到的专业知识问题总结.docx(17页珍藏版)》请在冰点文库上搜索。

java工程师找工作中面试遇到的专业知识问题总结.docx

java工程师找工作中面试遇到的专业知识问题总结

java工程师找工作中面试遇到的专业知识问题总结

  篇一:

java工程师面试总结

  一.@autowired和@resource的区别

  @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按byName自动注入罢了。

@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。

所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。

如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。

  @Resource装配顺序

  1.如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常

  2.如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常

  3.如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常

  4.如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;

  final可用来修饰类,变量,方法。

  修饰变量:

final修饰变量时,表示该变量一旦获得了初始值之后就不可改变。

  1.修饰成员变量:

与普通成员变量不同的是,final成员变量(实例属性和类属性)必须由程序员显示初始化,系统不会对final成员变量进行隐式初始化。

  非final修饰的成员变量初始化过程:

当进行静态初始化时,可对类属性初始化,当执行普通初始化块,构造器时可对实例属性初始化,因此:

非final成员变量的初始值,可以在定义该变量时指定初始值,可以在初始化块,构造器中执行初始化值,否则成员变量的初始值是由系统自动分配的初始值。

  final修饰的类属性,实例属性指定初始值的地方:

  类属性:

静态初始化块,声明该属性时指定初始值。

  实例属性:

非静态初始化块,构造器,声明该属性时指定初始化值。

  二.final修饰局部变量:

  1.系统不会对局部变量进行初始化,必须由程序员显示初始化。

  如果在定义final变量时没有指定初始值,则可以在后面代码中进行对final变量赋初始值,但只能一次,不能重复赋值,,如果final修饰的局部变量在定义时已经指定默认值,则后面的代码中不能再对该变量赋值。

  修饰形参不能被赋值,因为形参在调用该方法时,有系统传入的参数来完成初始化。

  修饰基本类型变量与引用类型变量的区别:

  修饰基本类型变量时,不能对基本变量重新赋值,因为基本类型变量不能被改变。

  修饰引用类型变量时,仅仅保持的是这个引用所引用的地址不会改变,既一直引用同一个对象。

但这个对象完全可以改变(对象的属性)

  例如:

finalpersonp=newperson();

  //改变person对象的age属性,合法。

  (23);

  //对p引用重新赋值,不合法。

  p=null;

  注意:

如果final修饰变量是基本数据类型,且在编译时就可以确定该变量的值,于是把该变量当做常量来处理:

常量命名规则:

多个有意义的单词连接,所有字符大写,单词之间用下划线分割。

  如果final修饰变量是引用类型,final变量无法在编译时就获得值,而必须在运行时才能得到值如:

finalTestClasst=newTestClass();编译时系统不会创建一个TestClass对象赋给t变量,所以t不需要当做常量来处理,无需使用常量命名规则。

  方法:

  修饰的方法不可被重写。

  提供的Object类有一个final方法:

getClass(),因为java不希望任何一个类重写这个方法。

  3.对于private方法,仅在当前类中可见,子类无法访问,所以也就无法重写该方法,如果子类中定义了一个与父类private方法有相同方法名,相同形参列表,相同返回值类项的方法,也不是方法重写,只是重新定义了一个方法,因此使用final修饰的一个private访问权限的方法,依然可以在其子类中定义与该方法有相同方法名,相同形参列表,相同返回值类型的方法。

  修饰的方法不能被重写但完全可以被重载。

  类:

  修饰的类不可有子类,类就是一个final类,它不可以有子类。

  三JQuery绑定事件的方法

  .bind()

  $('a').bind('click',function(){alert("Thattickles!

")});

  这是最直接的绑定方法。

jQuery扫描文档找到所有$(‘a’)元素,然后给每一个找到的元素的click事件绑定处理函数。

  .live()

  $('a').live('click',function(){alert("Thattickles!

")});

  Query绑定处理函数到$(document)元素,并把‘click’和‘a’作为函数的参数。

有事件冒泡到document节点的时候,检查这个事件是不是click事件,targetelement能不能匹配‘a’css选择器,如果两个条件都是true,处理函数执行。

  .delegate()

  $('#container').delegate('a','click',function(){alert("Thattickles!

")});jQuery扫描文档找到$(‘#container’),绑定处理函数到他的click事件,’a’css选择器作为函数的参数。

当有事件冒泡到$(‘#container’),检查事件是不是click,并检查targetelement是不是匹配css选择器,如果两者都符合,执行函数。

  注意这次和.live()方法很相似,除了把事件绑定到特定元素与跟元素的区别。

精明的JS’er或许会总结成$(‘a’).live()==$(document).delegate(‘a’),真的是这样吗?

不,不全是。

  四。

spring事务管理

  Spring+Hibernate的实质:

就是把Hibernate用到的数据源Datasource,Hibernate的SessionFactory实例,事务管理器HibernateTransactionManager,

  都交给Spring管理。

那么再没整合之前Hibernate是如何实现事务管理的呢?

通过ServletFilter实现数据库事务的管理,这样就避免了在数据库操作中每次都要进行数据库事务处理。

  一.事务的4个特性:

原子性:

一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做,要么全部做。

一致性:

数据不会因为事务的执行而遭到破坏。

  隔离性:

一个事务的执行,不受其他事务(进程)的干扰。

既并发执行的个事务之间互不干扰。

  持久性:

一个事务一旦提交,它对数据库的改变将是永久的。

  二.事务的实现方式:

实现方式共有两种:

编码方式;声明式事务管理方式。

基于AOP技术实现的声明式事务管理,实质就是:

在方法执行前后进行拦截,然后在目标方法开始之

  前创建并加入事务,执行完目标方法后根据执行情况提交或回滚事务。

声明式事务管理又有两种方式:

基于XML配置文件的方式;另一个是在业务方法上进行@Transactional注解,将事务规则应用到业务逻辑中。

三.创建事务的时机:

是否需要创建事务,是由事务传播行为控制的。

读数据不需要或只为其指定只读事务,而数据的插入,修改,删除就需要事务管理了。

  一种常见的事务管理配置:

事务拦截器TransactionInterceptor和事务自动代理BeanNameAutoProxyCreator相结合的方式。

  五。

oracle通用函数

  sum(),max(),min(),count(),decode(),case,avg(),to_date(),

  如nvl(字段,‘x’)字段值等于null就这个函数得到的结果就是'x',

  ABS(x)函数,此函数用来返回一个数的绝对值。

  CEIL(x)函数,用来返回大于或等于X的最小整数。

  FLOOR(x)函数,用来返回小于或等于X的最大整数。

  ROUND(x[,y])函数,返回舍入到小数点右边Y位的X值。

Y缺省为0,这将X舍入为最接近的整数。

如果Y是负数,那么舍入到小数点左边相应的位上,Y必须为整数。

  SelectCONVERT(varchar(100),GETDATE(),23):

XX-05-16

  CONVERT(data_type(length),data_to_be_converted,style)data_type(length)规定目标数据类型(带有可选的长度)。

data_to_be_converted含有需要转换的值。

style规定日期/时间的输出格式。

  六.oracle存储过程

  1.存储过程异常处理

  createorreplaceprocedurepeace_insert(c_ninvarchar2)

  is

  errorEXCEPTION;

  begin

  ifc_n='OK'

  then

  insertintocourse(course_name)values(c_n);

  elsifc_n='NG'then

  insertintocourse(course_name)values(c_n);

  raiseerror;

  else

  Dbms__line('c_n'||c_n);

  endif;

  commit;

  exception

  whenerrorthen

  rollback;

  Dbms__line('ERRO');

  end;

  关于游标if,for的例子

  createorreplaceprocedurepeace_if

  is

  cursorvar_cisselect*fromgrade;

  begin

  fortempinvar_cloop

  if_name='OS'then

  dbms__line('Stu_name='||_name);

  elsif_name='DB'then

  dbms__line('DB');

  else

  dbms__line('fenglafengla');

  endif;

  endloop;

  end;

  ---关于游标for,case的例子1

  createorreplaceprocedurepeace_case1

  is

  cursorvar_cisselect*fromtest_case;

  begin

  fortempinvar_cloop

  case

  when1then

  dbms__line('haha1');

  when2then

  dbms__line('haha2');

  when3then

  dbms__line('haha3');

  when4then

  dbms__line('haha4');

  else

  dbms__line('qita');

  endcase;

  endloop;

  end;

  七。

java对象作用范围

  Java对象的生命周期大致包括三个阶段:

对象的创建,对象的使用,对象的清除。

因此,对象的生命周期长度可用如下的表达式表示:

T=T1+T2+T3。

其中T1表示对象的创建时间,T2表示对象的使用时间,而T3则表示其清除时间。

由此,我们可以看出,只有T2是真正有效的时间,而T1、T3则是对象本身的开销。

下面再看看T1、T3在对象的整个生命周期中所占的比例。

  我们知道,Java对象是通过构造函数来创建的,在这一过程中,该构造函数链中的所有构造函数也都会被自动调用。

另外,默认情况下,调用类的构造函数时,Java会把变量初始化成确定的值:

所有的对象被设置成null,整数变量(byte、short、int、long)设置成0,float和double变量设置成,逻辑值设置成false。

所以用new关键字来新建一个对象的时间开销是很大的,如表1所示。

  表1一些操作所耗费时间的对照表

  运算操作示例标准化时间

  本地赋值i=n

  实例赋值=n

  方法调用Funct()

  新建对象NewObject()980

  新建数组Newint[10]3100

  从表1可以看出,新建一个对象需要980个单位的时间,是本地赋值时间的980倍,是方法调用时间的166倍,而若新建一个数组所花费的时间就更多了。

  再看清除对象的过程。

我们知道,Java语言的一个优势,就是Java程序员勿需再像C/C++程序员那样,显式地释放对象,而由称为垃圾收集器(GarbageCollector)的自动内存管理系统,定时或在内存凸现出不足时,自动回收垃圾对象所占的内存。

凡事有利总也有弊,这虽然为Java程序设计者提供了极大的方便,但同时它也带来了较大的性能开销。

这种开销包括两方面,首先是对象管理开销,GC为了能够正确释放对象,它必须监控每一个对象的运行状态,包括对象的申请、引用、被引用、赋值等。

其次,在GC开始回收“垃圾”对象时,系统会暂停应用程序的执行,而独自占用CPU。

  因此,如果要改善应用程序的性能,一方面应尽量减少创建新对象的次数;同时,还应尽量减少T1、T3的时间,而这些均可以通过对象池技术来实现。

  实现一个对象池,一般会涉及到如下的类:

  1)对象池工厂(ObjectPoolFactory)类

  该类主要用于管理相同类型和设置的对象池(ObjectPool),它一般包含如下两个方法:

createPool:

用于创建特定类型和设置的对象池;

  destroyPool:

用于释放指定的对象池;

  同时为保证ObjectPoolFactory的单一实例,可以采用Singleton设计模式,见下述getInstance方法的实现:

  publicstaticObjectPoolFactorygetInstance(){if(poolFactory==null)

  篇二:

我常用的十个中级java工程师面试题

  1,如何理解多态?

类与对象的区别是什么?

  2,如何理解()方法,它的作用是什么?

  3,Collections类的作用?

Arrays类的作用?

  4,问号,星号,加号在正则中分别表示什么?

成对的小括号在正则表达式里的作用是什么?

  5,JSP文件与JAVA文件的区别

  6,forward和redirect的区别

  7,oracle:

  A表有10条记录,以下查询可以查出几条?

  select*fromAwhererownum>5

  8,mysql有几种索引类型?

使用索引时都有那些地方要注意?

sql优化原则?

mysql用那个关键字分析sql语句性能?

  9,

  publicstaticvoidtest(Stringstr){

  str="hello";

  }

  publicstaticvoidmain(Stringargs[]){

  Stringstr="beijing";

  test(str);

  sysout(str);//这里输出什么?

  }

  10,linux下

  ulimit,scp,less命令的作用分别是什么?

  文件重命名的命令是什么?

  篇三:

java软件工程师面试常见问题

  1、面向对象的特征有哪些方面

  1.抽象:

  抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。

抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。

抽象包括两个方面,一是过程抽象,二是数据抽象。

  2.继承:

  继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。

对象的一个新类可以从现有的类中派生,这个过程称为类继承。

新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。

派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

  3.封装:

  封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。

面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

  4.多态性:

  多态性是指允许不同类的对象对同一消息作出响应。

多态性包括参数化多态性和包含多态性。

多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

  2、String是最基本的数据类型吗

  基本数据类型包括byte、int、char、long、float、double、boolean和short。

  类是final类型的,因此不可以继承这个类、不能修改这个类。

为了提高效率节省空间,我们应该用StringBuffer类

  3、int和Integer有什么区别

  Java提供两种不同的类型:

引用类型和原始类型(或内置类型)。

Int是java的原始数据类型,Integer是java为int提供的封装类。

Java为每个原始类型提供了封装类。

  原始类型封装类

  booleanBoolean

  charCharacter

  byteByte

  shortShort

  intInteger

  longLong

  floatFloat

  doubleDouble

  引用类型和原始类型的行为完全不同,并且它们具有不同的语义。

引用类型和原始类型具有不同的特征和用法,它们包括:

大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。

对象引用实例变量的缺省值为null,而原始类型实例变量的缺省值与它们的类型有关。

  4、String和StringBuffer的区别

  JAVA平台提供了两个类:

String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。

这个String类提供了数值不可改变的字符串。

而这个StringBuffer类提供的字符串进行修改。

当你知道字符数据要改变的时候你就可以使用StringBuffer。

典型地,你可以使用StringBuffers来动态构造字符数据。

  5、运行时异常与一般异常有何异同?

  异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。

java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

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

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

  与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

  7、说出ArrayList,Vector,LinkedList的存储性能和特性

  ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许

  直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历

  8、EJB是基于哪些技术实现的?

并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。

EJB包括SessionBean、EntityBean、MessageDrivenBean,基于JNDI、RMI、JAT等技术实现。

  SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。

EntityBean被用来代表应用系统中用到的数据。

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

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

  SessionBean还可以再细分为StatefulSessionBean与StatelessSessionBean,这两种的SessionBean都可以将系统逻辑放在method之中执行,不同的是StatefulSessionBean可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应的StatefulSessionBean的实体。

StatelessSessionBean虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫StatelessSessionBean的时候,EJBContainer并不会找寻特定的StatelessSessionBean的实体来执行这个method。

换言之,很可能数个使用者在执行某个StatelessSessionBean的methods时,会是同一个Bean的Instance在执行。

从内存方面来看,StatefulSessionBean与StatelessSessionBean比较,StatefulSessionBean会消耗J2EEServer较多的内存,然而StatefulSessionBean的优势却在于他可以维持使用者的状态。

  9、Collection和Collections的区别。

  Collection是集合类的上级接口,继承与他的接口主要有Set和List.

  Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

  10、&和&&的区别。

  &是

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

当前位置:首页 > PPT模板 > 图表模板

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

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