JAVA面试一

ORACLE分页
-- 要求根据年龄排序后的 第三 行到第6 行的数据 (?) 分页语句
select t.* from (
select t1. *, rownum num from
(
select * from t_student order by age desc
) t1 where rownum<=6
) t where t.num>=3

MYSQL分页
select * from dept order by deptno desc limit 3,3;

 

中软面试

1.先自我介绍一下你自己,说一下你最近做的项目吧?

2.集合框架有哪些,可以说一下,它们的接口,实现类吗?

接口:

List特点:元素有顺序,元素可重复

Set特点:元素无放入顺序,元素不可重复

Map特点:元素按键值对存储,无放入顺序

 

List接口有三个实现类:LinkedListArrayListVector

 LinkedList,底层基于链状,增删快,查找慢;

 ArrayListVector;基于数组的,增删慢,查找快;

ArrayList,非线性安全的,效率高,Vector线性安全的,效率慢。

 

Set接口有:HashSet linkedHashSet

 

Map接口有三个实现类:HashMapHashTableLinkeHashMap

HashMap非线程安全,高效,支持null

HashTable线程安全,低效,不支持null

List,set 是 Collection接口下的两个子接口

3.jquery的选择器有哪些,说一下。属性有哪些?

基本选择器 l用法: $(‘#id’) 返回值:根据 id 属性匹配一个标签, 封装成 jQuery 对象 n

层次选择器用法:   $(”form input”) 说明: 在给定的祖先元素下匹配所有后代元素 n

 

  过滤选择器      3.1). :first 用法: $(”tr:first”) ;  说明: 匹配找到的第一个元素

attr(name [,value])  根据属性名获取属性值或者设置一个属性 

removeAttr(name)  根据属性名删除对应的属性

val([value])     获得匹配元素的当前值或者设置其值

 

4.大数据的处理?假如有一千万数据,你是怎么样处理的?

方an1:按主键分区   查询条件是主键  则分表变快  如果查询条件不是主键 则势必比未分表更慢 每个表分区union all关联就可以了

4.1 7. 怎么在海量数据中找出重复次数最多的一个?

方an1:先做hash,然后求模映射为小文件,求出每个小文件中重复次数最多的一个,并记录重复次数。然后找出上一步求出的数据中重复次数最多的一个就是所求(具体参kao前面的题)。

 

5.多线程。

5.1 sleep() 和 wait()有什么区别? ? ? ?

Sleep 是指休眠给定的时间,当这个时间达到之后,线程会再次醒来。

 Wait 是等待状态,多长时间不清楚,由另一个线程将其唤醒

5.2当一个线程进入一个对象的一个 synchronized方法后,其它线程是否可进入此对象的其它方法?

如只其它方法是同步方法,不可以进入。如果不是可以进入。

6.spring原理,hibernate 原理,struts原理。

 

struts原理:

1. 请求发送给 StrutsPrepareAndExecuteFilter

2. StrutsPrepareAndExecuteFilter 询问 ActionMapper 该请求是否是一个 Struts2 请求(即是否返回一个非空的 ActionMapping 对象)

3.  ActionMapper 认为该请求是一个 Struts2 请求,则 StrutsPrepareAndExecuteFilter 把请求的处理交给 ActionProxy

4. ActionProxy 通过 Configuration Manager 询问框架的配置文件,确定需要调用的 Action 类及 Action 方法

5. ActionProxy 创建一个 ActionInvocation 的实例,并进行初始化

6. ActionInvocation 实例在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

7. Action 执行完毕,ActionInvocation 负责根据 struts.xml 中的配置找到对应的返回结果。调用结果的 execute 方法,渲染结果。在渲染的过程中可以使用Struts2 框架中的标签。

8. 执行各个拦截器 invocation.invoke() 之后的代码

9. 把结果发送到客户端

 

spring原理

内部最核心的就是IOC了,  

动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射  

反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置  

文件来动态的创建对象,和调用对象里的方法的 。

hibernate 原理

1.配置好hibernate的配置文件和与类对应的配置文件后,启动服务器
2.服务器通过实例化Configeration对象,读取hibernate.cfg.xml文件的配置内容,并根据相关的需求建好表或者和表建立好映射关系
3.通过实例化的Configeration对象就可以建立sessionFactory实例,进一步,通过sessionFactory实例可以创建session对象
4.得到session之后,便可以对数据库进行增删改查操作了,除了比较复杂的全文搜索外,简单的操作都可以通过hibernate封装好的session内置方法来实现
5.此外,还可以通过事物管理,表的关联来实现较为复杂的数据库设计

SpringMVC 原理

1. 客户端请求被spring前端控制器DispatcherServlet捕获

2. DispatcherServlet控制器查询HandlerMapping,找到处理请求的Controller

3. DispatcherServlet将请求提交到Controller

4. Controller调用业务逻辑处理后,返回ModelAndView

5. DispatcherServlet查询对应的ViewResoler视图解析器,结合ModelAndView来渲染视图  

 6.将渲染的结果显示到客户

 

springmvcstruts2的对比

首先它们都web层的框架

spring mvc 开发效率比struts2 要高,springMVC 请求只实列化一次 struts2 没请求一次都会实列化一次

springMVC 是基于方法级别的一种拦截设计

struts2 是基于类的设计

 

 

软通面试

 

1、<div id="item" class=""/>如何获取它的值,若要增加内容“hello”,应该怎样做?

 

用jquery和javascript实现

 

Var textValue = document.getElementById(“item”)

 

Console.log (textValue.value);

 

 

 

Var textValue = $(‘#id’)

 

Console.log(textValue.val())

 

2、String和StringBuffer哪种处理效率更高?为什么?

 

String:长度给定不可变,当多个字符串联合时要先转为StringBuffer,再联合, 速度慢。 StringBuffer:长度可变,可以将多个字符串值直接联合,效率高

 

3、用javascript创建一个point对象,它有两个属性x,y,x赋值为100,y赋值为130,写出关键代码。

 

  window.onload = function(){

 

              var b = document.getElementById("point"); //根据id得到一个元素,dom对象

 

                 var x=100;

 

                 var y =130;

 

                          }

 

<div id=”point”></div>

 

 

 

4、<div id="item" class=""/>要给它注册一个点击事件,该怎样做?

 

   $(function(){

 

      $(‘#item’).click(function(){…………})

 

})

 

5、Spring的注入方式有哪几种?

 

Setter  Interface   constructor       1  接口注入(不推荐)

 

2. getter,setter方式注入(比较常用) 3. 构造器注入(死的应用)

 

 

 

6、List和Set异同。?

 

1、List,Set都是继承自Collection接口
2、List特点:元素有序,可重复 ,Set特点:元素无顺序,不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的, 其位置其实是固定的) 
3、List接口有三个实现类:LinkedList,ArrayList,Vector ,Set接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet

 

7、选取几个权限后,点击提交按钮到tomcat,再到数据库,谈谈它的运行过程,会发生什么?

 

Tomcat是Servlet运行环境(容器),每个servlet执行init(),service(),destory()

 

首先客户发送一个请求,Servlet是调用service()方法对请求进行响应的

 

service()方法中对请求的方式进行了匹配,选择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应

 

在Servlet接口和GenericServlet中是没有doGet,doPost等等这些方法的,HttpServlet中定义了这些方法  必须实现doGet或doPost等这些方

 

8、c3p0和dbcp必须用?

无论现在是B/S或者是C/S应用中,都免不了要和数据库打交道。在与数据库交 
互过程中,往往需要大量的连接

DBCP有着比C3P0更高的效率,但是实际应用中,DBCP可能出现丢失 
连接的可能,而C3P0稳定性较高。因此在实际应用中,C3P0使用较为广泛。

 

9、jdbc的过程?它能替代hibernate吗?

可以  Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架 

jdbc操作步骤总结如下:

1加载数据库驱动     2、  创建并获取数据库链接   3、  创建jdbc statement对象

4、设置sql语句       5,设置sql语句中的参数(使用preparedStatement)

6、通过statement执行sql并获取结果   7,对sql执行结果进行解析处理

8、释放资源(resultSet、preparedstatement、connection)

 

10、你是怎样处理中文乱码?

1JSP输出中文的乱码问题

原因:没有给JSP页面制定显示字符的编码方式。

解决方法:

JSP页面头部加上语句<%@page contentType="text/html;charset=utf-8"%>(Servlet中使用httpServletResponse.setContentType("text/html;charset=utf-8")),最好同时在JSP页面的head部分加上<meta http-equiv="Content-Type" content="text/html;charset=utf-8">

2、获取表单提交的数据时的中文乱码问题

request.getParameter("paramName")获取表单提交中的数据,且表单数据中含有中文时,返回的字符串出现乱码。

原因:TomcatJ2EE实现对表单提交,即以POST方式提交的参数采用默认的ISO-8859-1来处理。

解决方法:

一是:转换编码,如String str = request.getParameter("chStr");String str = new String(str.getBytes("ISO-8859-1"),"utf-8")。此法在较大项目中不可行。

二是:让所有页面的请求都通过一个Filter,将处理字符集设置为utf-8

3URL中的中文问题

原因:Tomcat中以get方式提交的请求对query-string处理时采用了和post方法不一样的处理方式。

解决方法:

打开Tomcat目录下的/conf/server.xml文件,找到Connector块,往其中添加URIEncoding="utf-8"/>

4、数据库访问时的乱码问题

在使用JDBC连接MySQL数据库时,连接字符串写成如下形式可以避免一些中文问题:

jdbc://mysql://hostname:port/DBname?user=username&password=pwd&useUnicode=true&character Encoding=utf-8

 

11、表单的校验有前台和后台,前台检验什么?后台校验什么?必须都要吗?

前台校验不需要服务器返回数据的选项,例如密码为空啊,邮箱不合法啊,但是也需要后台校验,例如用户名重复校验,必须提交后台查询数据库,返回是否重复。原则就是能前台JS校验的就前台校验,一来快捷,二来减少服务器的压力

 

12、你知道有哪几种表单提交方式?

get  post一个用于获取数据,一个用于修改数据

1.Post传输数据时,不需要在URL中显示出来,而Get方法要在URL中显示

  2.Post传输的数据量大而Get方法由于受到URL长度的限制

 

13、谈谈你项目的权限管理?

缺陷限制:
数据库里用户表其中一个属性就是权限
用户名  密码   权限
aa      **    1
bb      **    2
cc      **    3
可以在需要控制权限时对用户对应的权限进行判断
因为在用户输入用户名和密码后
需要通过判断其权限来控制该用户能进行哪些操作
所以你只要对用户表中相应的权限字段进行判断就可以了
我们曾做过个拍卖行的系统是用JAVA 连接ORACLE
就是通过这个对用户进行控制的

 

14、GET和POST有什么异同?

一个用于获取数据,一个用于修改数据

1.Post传输数据时,不需要在URL中显示出来,而Get方法要在URL中显示

  2.Post传输的数据量大而Get方法由于受到URL长度的限制,

 

15、session和cookie异同?如何让它们失效?Session.TimeOut = 30  半小时

1session保存在服务器,客户端不知道其中的信息;cookie保存在客户端,服务器能够知道其中的信息。    

 2session中保存的是对象,cookie中保存的是字符串。   

    

cookie session的区别是:cookie数据保存在客户端 硬盘,session数据保存在服务器端。

cookie 户端访问server端程序被调用被创建,而如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,

只要关闭浏览器窗口,cookie就消失了。关闭浏览器只会使存储在客户端浏览器内存中的session cookie失效,不会使服务器端的session对象失效。

禁用cookie 在浏览器中将cookie移除

JAVA 中让session失效有哪些方法?

答:session.invalidate();

 

cookie 和session 的区别:

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
   考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
   考虑到减轻服务器性能方面,应当使用COOKIE(相对session可以减轻服务器性能)。

4、单个cookie保存数据有限(不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。)

 

16、左边表数据10条,右边表数据少5条,用左连接结果会怎样?

 

17、hibernate中get和load方法的异同?

区别:总之对于getload的根本区别,一句话,hibernate对于load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,就抛异常;而对于get方法,hibernate一定要获取到真实的数据,否则返回null

相同:加载数据库里面的对象

 

18、try{ return;}catch(){}finally{},执行过程?

1、不管有木有出现异常,finally块中代码都会执行;
2、当trycatch中有return时,finally仍然会执行;
3finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;
4finally中最好不要包含return,否则程序会提前退出,返回值不是trycatch中保存的返回值。

 

19、你是如何理解one to many和many to one?

比如,一个班级里面有多个学生,可以映射为学生对班级的多对一,或者班级对学生的一对多。如果你经常通过班级来查询某个班里有哪些学生,显然一对多比较方便;
但是如果你经常会从学生来查找他属于哪个班的,以及这个班的信息,显然使用同学对班级的多对一较方便。
如果两边的信息可能都经常用,那么就使用双向的映射

 

其它公司面试:

1、 string stringbuffer stringbuild 的区别。

2、 String:长度给定不可变,当多个字符串联合时要先转为StringBuffer,再联合, 速度慢。 StringBuffer:长度可变,可以将多个字符串值直接联合,效率高

3、 StringBuilder 字符串变量(非线程安全)

 

2、servlet 的生命周期。

    1.初始化阶段,调用init()方法。

2.响应客户端请求阶段,调用service()方法。

3.销毁阶段,调用desttory()方法。

 

3、spring的原理,在项目中怎么用的?简述IOC和AOP的原理?

  • Spring是一个开源框架,处于MVC模式中的控制层,它能应对需求快速的变化,其主要原因它有一种面向切面编程(AOP)的优势,其次它提升了系统性 能,因为通过          依赖倒置机制(IOC),系统中用到的对象不是在系统加载时就全部实例化,而是在调用到这个类时才会实例化该类的对象,从而提升了系统性能。这两个优秀 的性能   使得Spring受到许多J2EE公司的青睐,如阿里里中使用最多的也是Spring相关技术。Spring的优点: 

1、降低了组件之间的耦合性,实现了软件各层之间的解耦。 

2、可以使用容易提供的众多服务,如事务管理,消息服务,日志记录等。 

3、容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能。Spring中AOP技术是设计模式中的动态代理模式。只需实现jdk提供的 动态代理接口InvocationHandler,所有被代理对象的方法都由InvocationHandler接管实际的处理任务。面向切面编程中还要 理解切入点、切面、通知、织入等概念。 

Spring中IOC则利用了Java强大的反射机制来实现。所谓依赖注入即组件之间的依赖关系由容器在运行期决定。其中依赖注入的方法有两种,通过构造函数注入,通过set方法进行注入。 

 

 

4、多线程同步,并发怎么处理?

synchronized关键字主要解决多线程共享数据同步问题。 

ThreadLocal使用场合主要解决多线程中数据因并发产生不一致问题。

ThreadLocal和Synchonized都用于解决多线程并发访问。

 

4、 cache(cache 和MemCache)的区别?

cache类:里面都是静态方法,提供基于key,value的方法进行cache的添加,修改,访问,进行cache过期后调用callback方法。

MemCache的工作流程如下:先检查客户端的请求数据是否在 memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作;如果请求的数据不在memcached中,就去查数据库,把从数据库中获取 的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现);每次更新数据库的同时更新 memcached中的数据,保证一致性;当分配给memcached内存空间用完之后,会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据。[2] 

Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash,它能够用来存储各种格式的数据,包括图像视频文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。

 

6、jvm是怎么执行class的,原理,机制是什么?

  Java源文件经过Java编译器编译成字节码文件 被类装载器装载到jvm中 

被jvm解释给操作系统 最后操作系统来执行

 

1.先自我介绍一下。

2.问struts原理

 

springMVC的作用:1控制请求转发 2获取用户提交表单的数据 3调用后面的业务层将表单的数据转发到视图上进行展示

3.hibernate 的配置,缓存,(感觉问得最大的是缓存技术)缓存技术 我没答好。

Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存。

Hibernate一级缓存又称为“Session的缓存”。Session内置不能被卸载,Session的缓存是事务范围的缓存(Session对象的生命周期通常对应一个数据库事务或者一个应用事务)。一级缓存中,持久化类的每个实例都具有唯一的OID。

2.Hibernate二级缓存又称为“SessionFactory的缓存”。

由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。第二级缓存是可选的,是一个可配置的插件,默认下SessionFactory不会启用这个插件。Hibernate提供了org.hibernate.cache.CacheProvider接口,它充当缓存插件与Hibernate之间的适配器。

 

4.spring的配置xml的属性。

依赖注入之通过xml配置文件给对象的属性注入值

通常我们创建一个类,让Spring容器管理,通过控制反转给这个类生成对象Person

 

5.多线程。大数据怎么处理。

6.前台的js,jquery 知道多少(今天都是被问到这个了,我不太深入了解)

7.weblogic ,和Tomcat的优化,配置你知道怎么配置吗?缓存怎么配置?

8.oracle怎样处理大数据。用过mysq和sqlservice吗?

9.springmvc的原理?mybaitais的原理? 

 

MyBatis应用程序根据XML配置文件创建SqlSessionFactorySqlSessionFactory在根据配置,配置来源于两个地 方,一处是配置文件,一处是Java代码的注解,获取一个SqlSessionSqlSession包含了执行sql所需要的所有方法,可以通过 SqlSession实例直接运行映射的sql语句,完成对数据的增删改查和事务提交等,用完之后关闭SqlSession

 

10.前台页面的展示有没有做过?

做过 jsp页面

11.一个框架在2到3天能否熟练使用?

12.工资多么(这个答得不是很好)

好像还有,忘记了。

 

1、 多线程有几种实现方式?

两种  1继承Thread 类 并实现run()方法

2实现runable接口 进而实现run()方法

 

2、 HashTable和HashMap的异同?

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

HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。

 

3、 项目中用到了哪些技术?

Js  springMVC  jquery easyUI

 

4、写个单例模式?抽象工厂模式?

 

5、用过内部类?有什么好处 为什么需要内部类? 

   1一个内部类对象可以访问创建它的外部类对象的内容,甚至包括私有变量

真正的原因,java中的内部类和接口加在一起,可以很好的实现多继承的效果

 可以使某些编码根简洁。  隐藏你不想让别人知道的操作

 

6抽象类和接口的异同

  1 抽象类中可以有抽象的方法也可有具体的方法

   而接口中的方法都是抽象方法

  2 接口可以多实现 而方法只能继承一个

5、 webservice有用过吗?

有 Web Service是面向服务架构的一种实现形式,它能够以一种平台无关的方式在不同系统之间进行交互。

6、 面向对象的特性?详细说明?

继承

封装

 多态

10什么是反射?什么地方用反射?

对于任何一个类,都能知道该类中的所有属性和方法;对于任何一个对象,都能够调用他的任意一个方法和属性。

hibernate配置 反射pojo

Spring 反射得到所有controller与method

10、写sql语句,把重复的人名和总素统计出来?

Select name, count(name)from emp where count(name)>1;

11、介绍集合框架

Collection  set list  map

12、ajax原理?优缺点?

Ajax的工作原理相当于在用户和服务器之间加了—个中间层(AJAX引擎),使用户操作与服务器响应异步化。并不是所有的用户请求都提交给服务器,像— 些数据验证和数据处理等都交给Ajax引擎自己来做, 只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。

Ajax其核心有JavaScript、XMLHTTPRequest、DOM对象组成,通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用JavaScript来操作DOM而更新页面。这其中最关键的一步就是从服务器获得请求数据

 

13、多态中,父类和子类方法如何相互调用?

  先检查父类中是否有该方法 如果没有的话编译会出错 如果有 子类没有重写 调用父类对应的该方法 子类重写了该方法 在调用子类对应的方法

14、Servlet的生命周期?如何实现的?

 

1.初始化阶段,调用init()方法。

2.响应客户端请求阶段,调用service()方法。

3.销毁阶段,调用desttory()方法。

 

 

15、权限管理中,怎样过滤显示字段?

现在我们项目使用jackson进行json操作

项目都是用户登录就直接跳转到其拥有权限的页面,或者显示可访问页面的链接。使用这种方式来幼稚地控制访问权限

jsp中权限的控制是通过Filter过滤器来实现的

 

posted @ 2018-03-12 19:58  侯爵吖  阅读(413)  评论(0编辑  收藏  举报