面试一定要看的

1  数据库的索引,你怎么理解的?
   添加索引可以使数据查找的速度更快  但是不是说给个字段都要加上索引 因为这样的话  速度反而会下降 要根据需要经常用的字段      有所选择的添加索引;但是这样一来也增加了数据库的存储空间,因为索引要改变所以修改和插入数据时会多花时间的




2  spring的AOP使用过吗? 简单说说你的使用场景吧?项目中,你们怎么


AOP面向切面编程是OOP的延续,它是一种可以通过预编译方式和运行期间动态代理来实现在不修改源代码的情况下给程序动态 地统一添加功能的一种技术,它是软件工程“开-闭”原则的一种实现。在项目中的应用有事务管理和日志管理,是通过拦截器实现的。配 置步骤的话是导包 → 创建被监控的接口和类 → 配置映射bean → 创建拦截器 → 配置事务管理器和传播特性。






3.在一个.java中 可以有多各类,但是只能用一个类是public且是与.java的名字是一样的,可是在另一个类调用时  该怎么调用其内部类中的方法?




4. String str=null;  与   String str="";一样吗?




****************************************************************************************************************


UDP:1,每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。


            2,UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64KB之内。


           3,UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方


TCP:1,面向连接的协议,在socket之间进行数据传输之前必然要建立连接,所以在TCP中需要连接


                时间。


            2,TCP传输数据大小限制,一旦连接建立起来,双方的socket就可以按统一的格式传输大的  


                    数据。


             3,TCP是一个可靠的协议,它确保接收方完全正确地获取发送方所发送的全部数据。




****************************************************************************************************************
对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤:


  (1) 创建Socket;


  (2) 打开连接到Socket的输入/出流;


  (3) 按照一定的协议对Socket进行读/写操作;


  (4) 关闭Socket.(在实际应用中,并未使用到显示的close,虽然很多文章都推荐如此,不过在我的程序中,可能因为程序本身比较简单,要求不高,所以并未造成什么影响。)








***************************************************************************************************************1*
1。ibatIS和hibernate的区别
   i是通过sql语句直接操作数据表,
   h是通过操作实体对象,进而操作数据表的
   如果是比较复杂的业务就用i,因为可以写sql语句
   但是一些例如金融,银行的是是给出部分字段此时就要用i
   如果是简单的业务就可以用h,因为表之间的关系只要配置好,只需要写一些简单的hql语句
   要是跨数据库的话 就选择h 因为h可以自动的生成数据表 可以称之为全自动,而i需要手写sql是半自动
****************************************************************************************************************
2.为什么不用jdbc用这些orm框架
  用jdbc时代码量会很大,繁琐,重复,容易出错,相反用orm框架时则可以避免或者降低这些问题用jdbc时要耗时去写sql语句,而用orm则可以减少写sql或hql的强度和难度使开发效时间缩  短;
  用jdbc处理表之间的关系时要很小心很痛苦而用orm框架时这些就可以自动创建
  从整体框架结构而言用jdbc要对后台的数据库是什么数据库,有哪些表,各个表有哪些字段,各个字段的类型,表之间的关系,索引什么的要很熟悉,但是用orm之后就是这些抽象成数据层
  呈现个开发人员的只是java对象
****************************************************************************************************************
3.Spring对orm框架整合的理解
   把hibernate具体处理业务的类注入到action中,Spring代理了hibernate的数据源,Spring代理了hibernate的事务
****************************************************************************************************************
4.什么是反射机制
  反射就是指程序运行时能获得自身的信息,例如一个对象运行时能获得自身的属性和方法
  常要借助4个类:Class,file,Constructor,Method 
  常见的Clss.forname(),spring的依赖注入就是利用的反射机制
****************************************************************************************************************
5.Spring的依赖注入的理解
  当某个角色需要另一个角色的协助时,在传统的程序设置过程中,通常有调用者创建被调用者的实例,但是这样耦合度会很高,一旦需要修改,就会牵一发动全身;但是在Spring里,创建被调者的工作不在由调用者来完场,因此称之为控制反转,创建被调用者的实例的工作通常由Spring的容器来完成,然后注入到调用者,因此称之为依赖注入,这样就是程序的耦合度降低,在修改时就降低了代价
我在程序开发中在action调用service就是这样的只是用接口而不是直接用实现类的某个方法
****************************************************************************************************************      
6.说说你对Spring的理解
  通过一个xml文件进行解耦使程序达到高内聚低耦合的效果;
  怎样解耦?通过依赖注入,然后Spring就可以动态,灵活的管理各种对象
  Spring中有7个模块;AOP ORM Context Coure DAo MVC Web
        Coure(核心容器):核心容器提供Spring框架的基本功能,核心容器的主要组件是BeanFactory,他是工厂模式的实现,BeanFactory使用控制反转模式将应用程序的配置和依赖性规范与                         实际的应用程序代码分开
        context(上下文):是一个配置文件,向Spring框架提供上下文信息。Spring上下文包括企业服务,例如JNDI,EJB 电子邮件,国际化,校验和调度功能等
        Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向切面的变成功能集成到Spring框架中。所以,可以很容易地使Spring框架管理的任何对象支持AOP。Spring AOP 模块   
        Spring DAO:JDBC DAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应厂商跑出的错误信息。异常层次化结构简化了错误处理,并且极大的降低了                    需要编写的一场代码数量(例如打开和关闭连接)。Spring DAO 的面向JDBC的异常遵从常用的DAO异常层次结构
        Spring ORM:Spring框架插入了若干个ORM框架,从而提供了ORM的对象关系工具,其中包括hibernate和ibatIS等,所有这些都要遵从通用的事务和DAO异常           层次结构
     Spring Web模块:web上下文模块建立在应用程序上下模块之上,为基于web的应用程序提供上下文。所以Spring框架支持
        Spring MVC :Spring3 MVC很容易就可以写出性能优食物活


Spring的事务?
SOAP?


****************************************************************************************************************
7.hibernate的生命周期?
  自由态(Transient):实体对象在内存中自由存在,与数据库中的记录无关,没有被纳入hibernate的实体管理容器,
  持久态(Persistent):实体对对象与session发生了关联,并且处在session的有效期内
  游离态(Detached):  处在持久态的实体对象,其对应的session关闭之后,那就处在游离态
****************************************************************************************************************
8.Spring中的异步调用?




****************************************************************************************************************
1、列举JSP的内置对象,同一应用中页面间传值有哪些方式
   session page application request respone out config exception pagecontext;
   session ? form 表单




2、JSP如何获取HTML FORM 中的数据
   在表单中通过action动作和method方法结合起来把数据交给jsp处理




3、介绍JSP中如何使用JAVA BEAN ,如何使用一个已经定义好的类
<jsp:useBean> 标签
   


4、数据库主外键的作用,以及建立索引的好处何坏处
主键:唯一标识,不能为空
索引:添加索引之后可以加快查询的速度,但不是索引添加的越多越好,要视情况有所选择的添加
      添加索引之后会增加数据库的存储空间
      修改和添加时此时因为索引要随之改变所以会使速度减慢
   


5.简述什么是事务,事务有哪些属性
   一次操作对多张数据表产生影响,要么都执行要么都不执行,“同生共死”
   原子性:一个事务是一个不可分割的工作单位,事务中包括的操作要么全执行 要么全不执行
   一致性:事务必须是使数据库从一个一致性状态变成另一个一致性状态
   隔离性:一个事务的执行不受其他事务的干扰
   持久性:一个事务一旦提交,他对数据库中数据的改变是永久性的
6、如何写出高性能的SQL语句、
   避免select*
   用临时表暂存中间数据结果
   删除重复的数据
   减少访问数据库的次数
   整合简单,无关联的数据库当问
   多使用内部函数
   优化sql语句
   
7、65 37 17 ()最后一个数是什么
   65=8*8+1
   37=6*6+1
   17=4*4+1
   5=2*2+1
8、顶部()震荡 括号里添个字 既有前个词的意思又有后一个词的意思  巅
9、款()样 中间加个字 使前两个字组成个词 后两个字组成个词    式




****************************************************************************************************************
Spring 的英文简述
Spring is the most popular application developement framework for enterprise Java .Milions of developers use Spring to create high peforming easily testtable reusable code without any lock-in
****************************************************************************************************************
10.延迟加载的定义,优缺点?
   延迟加载:即懒加载lazyload 是为了避免一些无谓的性能开销而提出来的,简而言之,只有在使用的时候,才会发出sql语句进行查询
          优点:避免资源浪费,只有在使用的时候,才会发出sql语句,
          缺点:sql被多次执行,对数据库有一定的影响
****************************************************************************************************************
   Spring的MVC的C层返回类型为:对象地址类型
****************************************************************************************************************
webservice的理解?:webService是连接两个项目(这两个项目可以使同一种语言也可以不是同一种语言)之间的一个纽带,其遵循SOAP(simple object access  简单对象传输协议)协议,通过Xfire框架实现,进而达到不通程序见交互的目的,其底层的根本就是xml的解析


****************************************************************************************************************
11.hibernate的缓存?
 用于临时存放数据的内存区域,目的是为了减少应用程序对物理数据源访问的次数,从而提高了程序的运行性能。
 hibernate查询数据时,首先是到缓存中查找,如果找到就直接使用,如果找不到就再从物理数据源中查找
 一级缓存: session  对同一个id进行两次load,不会发送两条sql语句给数据库,但是session关闭的时候,一级缓存就会失效
 二级缓存:sessionfactory ,像一些常量数据,不会被并发访问的数据,不被第三方修改的数据,更新频率低的数据,允许偶尔并发访问的非重要数据,都可以存放在这里
   怎样配置二级缓存?
   靠的是插件,二hibernate位了集成这些插件,hibernatei提供了org.hibernate.cache.CacheProvider接口,用它来充当缓存插件和hibernate之间的适配器
   常用的二级缓存插件:
   JBossCache  org.hibernate.cache.TreeCacheProvider 
   EHCache  org.hibernate.cache.EhCacheProvider 
  具体的配置:
  hibernate.cache.use_query_cache=true
  hibernate.cache.provider_class=org.hibernate.cache.CacheProvider
****************************************************************************************************************
12.左连接,left join 返回包括左表中的所有记录和右表中连接字段相等的记录
   右连接,right join 返回包括右表的所有记录和左表中连接字段相等的记录
   等值连接,inner join 只返回两个表中连接相等的行
   全连接   full outer join 返回两个表中所有的数据


  select * from A left join B  on A.aid=B.bid
****************************************************************************************************************
13.单点登录的理解?
   单点登录即Single Sign On,是为实现只需用户登录一次,就可以访问所有相互信任的应用系统
   单点登录的工作流程 :1.用户登录,系统认证通过,返回一个相应的ticket
                        2.用户再次访问别的应用程序的时候,就会把这个ticket带上,作为自己认证的姘居,若通过验证,就可以了,就实现了
   用到得技术点:cookie
   要实现的前提:1.统一的身份验证
                 2.修改web,使每个应用都要通过这个验证
好处:方便,安全性高,减少资源的消耗
****************************************************************************************************************
14.java的23中设计模式,你用到过哪些?
   工厂模式,单例模式,代理模式,模板方法模式,
****************************************************************************************************************
当一个类不知道它所必须创建对象的类或一个类希望由子类来指定它所创建的对象时,可以使用工厂方法。


工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。


为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑实用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。


我们以类Sample为例, 如果我们要创建Sample的实例对象:


Sample sample=new Sample();


可是,实际情况是,通常我们都要在创建sample实例时做点初始化的工作,比如赋值 查询数据库等。


首先,我们想到的是,可以使用Sample的构造函数,这样生成实例就写成:


Sample sample=new Sample(参数);


但是,如果创建sample实例时所做的初始化工作不是象赋值这样简单的事,可能是很长一段代码,如果也写入构造函数中,那你的代码很难看了(就需要Refactor重整)。




为什么说代码很难看,初学者可能没有这种感觉,我们分析如下,初始化工作如果是很长一段代码,说明要做的工作很多,将很多工作装入一个方法中,相当于将很多鸡蛋放在一个篮子里,是很危险的,这也是有背于Java面向对象的原则,面向对象的封装(Encapsulation)和分派(Delegation)告诉我们,尽量将长的代码分派"切割"成每段,将每段再"封装"起来(减少段和段之间偶合联系性),这样,就会将风险分散,以后如果需要修改,只要更改每段,不会再发生牵一动百的事情。


在本例中,首先,我们需要将创建实例的工作与使用实例的工作分开, 也就是说,让创建实例所需要的大量初始化工作从Sample的构造函数中分离出去。


这时我们就需要Factory工厂模式来生成对象了,不能再用上面简单new Sample(参数)。还有,如果Sample有个继承如MySample, 按照面向接口编程,我们需要将Sample抽象成一个接口.现在Sample是接口,有两个子类MySample 和HisSample .我们要实例化他们时,如下:


Sample mysample=new MySample();
Sample hissample=new HisSample();


随着项目的深入,Sample可能还会"生出很多儿子出来", 那么我们要对这些儿子一个个实例化,更糟糕的是,可能还要对以前的代码进行修改:加入后来生出儿子的实例.这在传统程序中是无法避免的.


但如果你一开始就有意识使用了工厂模式,这些麻烦就没有了.
****************************************************************************************************************
15.Oracle中匿名块?存储过程?两者的区别?
   匿名块没有名字,不能重复使用;而存储过程是有名字的,可以重复使用
****************************************************************************************************************
16.什么时间用同步,什么时间用异步?
   如果数据在线程间共享,例如正在写的数据以后可能被另一个线程读到,此时为了共享数据就要使用同步
   当应用程序在对象上调用一个花费时间很长执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程
  
****************************************************************************************************************
17.java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 
     继承thread 实现Runable接口
     不适用stop()是因为他不安全
    suspend()是因为容易造成死锁
  
多线程是实现并发机制的一个有效手段。进程和线程一样都是实现并发的基本单位
****************************************************************************************************************
18.Hibernate的工作流程
   读取并解析配置文件
   读取并接卸映射信息,创建Sessionfactory
   打开Session
   创建事务Transaction
   持久化操作‘
   提交事务
   关闭Session
   关闭Sessionfactory
   
   new configuration.configur()
   buildSessionfactory
   Session
   Session.beginTransaction
   执行CRUD
   Commit
   Session.close()
   
****************************************************************************************************************
 19.递归
    
   public static int sum(int num){
         if(num>0)
          {return num+sum(num-1)}
          else{
              return 0;        
            }


}
****************************************************************************************************************
20.Spring Aop 的配置
  <!--  配置事务传播特性 -->
<tx:advice id="TestAdvice" transaction-manager="transactionManager">
    <tx:attributes>
      <tx:method name="save*" propagation="REQUIRED"/>
      <tx:method name="del*" propagation="REQUIRED"/>
      <tx:method name="update*" propagation="REQUIRED"/>
      <tx:method name="add*" propagation="REQUIRED"/>
      <tx:method name="find*" propagation="REQUIRED"/>
      <tx:method name="get*" propagation="REQUIRED"/>
      <tx:method name="apply*" propagation="REQUIRED"/>
    </tx:attributes>
</tx:advice>
<!--  配置参与事务的类 -->
<aop:config>
<aop:pointcut id="allTestServiceMethod" expression="execution(* com.test.testAda.test.model.service.*.*(..))"/>
<aop:advisor pointcut-ref="allTestServiceMethod" advice-ref="TestAdvice" />
</aop:config>
(1) advice(建议)的命名:由于每个模块都会有自己的Advice,所以在命名上需要作出规范,初步的构想就是模块名+Advice(只是一种命名规范)。


(2) tx:attribute标签所配置的是作为事务的方法的命名类型。


         如<tx:method name="save*" propagation="REQUIRED"/>


        其中*为通配符,即代表以save为开头的所有方法,即表示符合此命名规则的方法作为一个事务。


        propagation="REQUIRED"代表支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。


(3) aop:pointcut标签配置参与事务的类,由于是在Service中进行数据库业务操作,配的应该是包含那些作为事务的方法的Service类。


       首先应该特别注意的是id的命名,同样由于每个模块都有自己事务切面,所以我觉得初步的命名规则因为 all+模块名+ServiceMethod。而且每个模块之间不同之处还在于以下一句:


       expression="execution(* com.test.testAda.test.model.service.*.*(..))"


       其中第一个*代表返回值,第二*代表service下子包,第三个*代表方法名,“(..)”代表方法参数。


(4) aop:advisor标签就是把上面我们所配置的事务管理两部分属性整合起来作为整个事务管理。
 
****************************************************************************************************************
21.作用域    当前类 同一package 子孙类 其他package 
public    √     √          √       √ 
protected  √     √          √      × 
friendly   √     √          ×      × 
private    √     ×          ×      × 




****************************************************************************************************************
22.类与类之间存在以下关系:


(1)泛化(Generalization)


(2)关联(Association)


(3)依赖(Dependency)


(4)聚合(Aggregation)


23.arrayList vector linkedList 存储性能和特
ArrayList与Vector都是基于数组实现的,这就说明ArrayList与Vector适合做遍历而不适合做频繁的插入和删除。
 LinkedList是基于链表实现的,所以它生来就是为了频繁插入与删除对象
Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的.
当需要增长时,Vector默认增长为原来一倍,而ArrayList却是原来的一半. ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,


24.java cookie session 的区别


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


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


3.session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到。而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的。   


4、session需要借助cookie才能正常工作。如果客户端完全禁止cookie,session将失效。




****************************************************************************************************************
线程:线程是程序执行流的最小单位,一个标准线程是有(线程ID,当前指令指针,寄存器集合,堆栈)组成,是进程中的一个实体,同城一个进程中包含多个线程
      但是一个程序至少有一个线程
特点:1.8轻型实体,
      2.独立调度和分派的基本单位,
      3.可并发执行,
      4.共享进程资源。
线程:就绪、阻塞和运行三种基本状态。




****************************************************************************************************************








wzq_93@126.com 吴志强 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值