• 遇到的java面试题


    1、struts2与struts1的区别

    2、声明式事务是什么,怎么实现?

    3、ajax两种请求方式

    4、java中string str=new string("ss")创建了个几个对象内存分配如何?

    java 虚拟机分为堆区、栈区、代码区、树根区,创建了一个对象,在堆中有一个内存,保存的是"ss",这个字符串的值,在栈中有一个内存,保存的堆是"ss",这个字符串的引用str,即栈中str是一个引用,指向堆中"ss"这个字符串的地址

    5、spring有几种拦截器

    6、struts2有几种拦截器

    7、敏捷开发 取代 UML统一建模语言

    设计模式是一套反复使用,多数人知晓,经过分类编写,代码设计经验的总结。

    用例图、静态图、行为图、交互图、实现图

    8、++i与i++

    10、线程如何同步、状态、

    11、分层设计的好处

    12、序列化接口id有什么作用?

    13、hashCode方法(hashCode和equals)

    14、编程:一笔总额为T元的N年贷款,年利率为R,求出每一期还款本金和利息的总额

    部分本金利息=部分本金金额*月利率*月数

    int monthMoney=T/N/12;

    float monthRate=R/12;

    int totalMonth=N*12;

    float totalRate=0;

    for(int i=1;i<totalMonth;i++){

        totalRate+=monthMoney*monthRate*i;

    }

    int result=monthMoney+totalRate/N/12;

    15、 介绍Aop

    16、面向对象的特征

    17、抽象类和接口的区别

    18、抽象方法是否可以是static、native、synchronized?

          1)不能是static的,抽象方法时要被子类事项的,static和子类没有关系

          2)native标示该方法要用另外一种依赖平台的编程语言来实现,不存在被子类实现的问题,所以不行

         3)关于abstract与synchronized,我觉得不行,同步要用到具体的方法上

    19、servlet生命周期

    20、什么是java序列化,如何实现java序列化

    21、字节流与字符流的区别

    22、java中有几种类型的流

    23、说出一些常用的类,包、接口

    24、两个对象组相同(x.equals(y)==true),却有不同的hashCode对吗?

          如果对象保存在hashSet或hashMap中,equals相等,那么hshCode必须相等

          如果不是保存在hashSet或hashMap中,equals与hashCode没有关系,hashCode可以不等

    25、hashMap与hashTable的区别

    26、List、set、map

    27、string与stringBuffer与stringBuilder区别

    28、把","分割的字符串转换成数组

         1)java.util.scanner input=new java.util.scanner(system.in);

         system.out.printIn("输入字符");

         string str=input.next();

         string[] arr=str.split(",");

        for(int i=0;i<arr.length;i++){

            system.out.printIn(arr[i]);

        }

         字符串有length()方法,数组只有length属性,没有length方法

       2)stringTokenizer token=stringTokenizer(str,",");

           string[] result=new string[token,countTokens()];

           int i=0;

          while(token.hashNext()){

          result[i++]=token.nextToken();

         }

    25、string s="a"+"b"+"c"+"d"创建了几个对象

          1个;

         说明:

         string s1="a";

        string s2=s1+"b";

        string s3="a"+"b";

        system.out.printIn(s2=="ab"); //false

        system.out.printIn(s3="ab");//true

        说明javac编译可以对字符串常量直接相加的表达式进行优化,不必要运行想法运算出来,而是在编译时去掉加号,直接编译成这些常量相加的结果

    26、try{}里有一个return语句,那么紧跟在try后的finally{}里的code会不会还行,什么时候执行,return之前还是之后?

            按java规范,在try。。。catch。。finally中,如果try。。。finally或catch。。。finally都有return,则两个return都执行,并且最终返回的是finally里的return值。

            如果finally没有return,则最终、返回的是try或catch中的return值。但finally中的代码会执行,并且在return之前,除非碰到if exit()。

         class Test{

            main(){

              system.out.printIn(new Test().test());

        }

       static  int test(){

            int x=1;

            try{

           return x;

           }

          finally{

               return ++x;

             }

           }

         }

        相等于计算出return值后先将return 值在 内存中暂存,执行finally,finally执行完,再返回内存中暂存的值,结果为1;

    27、错误和异常有什么区别?

          是throwable的两个分支;

          error 指错误,通常是程序员不可能通过代码解决的问题,代表致命的错误,不是个人处理的了的

          Exception指异常,人为的错误,可以理解为程序运行时出现的意外情况

    28、运行的异常和一般异常有何区别?

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

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

    29、java中异常处理机制的简单原理和应用(面向对象)

         异常是指程序运行时可能发生的非正常情况和错误,java使用面向对象的方式来处理异常,它把程序中发生的每个异常封装到一个对象来    表示,该对象包含异常的信息

        java对异常进行分类

        java.lang.Throwable

        error、exception、运行时异常、一般异常  

    30、写出5个runtime Exception

    NullPointException

    UnsupportedOperationException (不支持请求操作)

    Index outOfBoundsException (索引超出范围)

    array store Exception (错误对象存储到对象数组)

    array indexOutOfBounds Exception

    31、java语言如何进行异常处理,关键字throw,throws,try...catch...finally 分别代表什么意义,在try块中可以抛出异常吗?

    java通过面向对象的方式处理异常,把各种不同的异常进行分类,并提供了良好的接口,java中每个异常都是一个对象,它是throwable或其子类的实例,当一个方法出现异常便抛出一个对象,该对象包含异常信息,调用对象的方法可以捕获异常并进行处理。java异常处理通过5个关键字来实现

    throw:抛出异常

    throws:表明一个函数可能抛出的各种异常

    try:指定一块可能发生异常的程序

    catch:指定要捕获的异常的类型

    try块中可以抛出异常

    try{

    throw new Exception();

    }

    catch(Exception e){}

    32、java中有几种方法可以实现一个线程?

    两种:一种是通过thread类的子类实现

    另一种是通过实现runnable接口

    new thread(){

    public void run(){

    }

    }.start();

    用关键字synchronized修饰同步方法,java中为什么不推荐用stop()和suspend();

    stop()方法终止所有来结束的方法,包括run(),立即释放所有锁住对象上的锁,不安全。

    条用suspend()方法,栓起一个有锁住的线程,连续回复之前不会被释放,会发生死锁。

    若标志线程应该挂起,使用wait(),若标志线程恢复,使用notify();

    34、同步和异步有什么区别?

    同步是指多个线程同时访问一个资源,一个在用时,其他的需要等待,同步是线程安全的。

    异步非线程安全,并发

    35、启动一个线程用start(),run()是该线程所关联的执行代码

    36、线程的基本概念,基本状态,以及状态,直接的关系 

    ............

    37、当一个线程进入一个对象的synchronized方法,其他线程是否可进入此对象的其他方法。

       一个对象的一个synchronized方法只能由一个线程进行访问

       分几种情况

      1)其他方法方法是否加了synchronized,如果如果没加,可以

      2)如果这个方法调用wait(),则可以进入其他synchronized方法

      3)如果其他方法都加了synchronized关键字,并且没有调用wait,则不能

    38、多线程有几种实现方法,同步有几种实现方法?

        多线程:继承thread类,实现runable接口

        同步:添加同步锁,wait和notify

    39、sleep与wait的区别

      sleep就是正在执行的线程主动让出CPU,CPU去执行其他线程,在sleep指定的时间过后,CPU将继续执行这个线程,如果当前线程进入了同步锁,sleep不会释放锁,即sleep()让出了CPU,其他被同步锁挡住的线程也无法执行

     wait()是一个已经进入同步锁的线程内,让自己暂时让出同步锁,以便其他正在等待此锁的线程可以得到同步锁并运行,调用了notify()方法,调用wait()方法的线程去解除wait状态,程序可以再次得到锁并继续运行,notity方法不释放锁,只是告诉调用wait()的线程可以参与获得锁的竞争,但不是可以得到锁,锁还没释放,当notify()方法后面的代码执行完,才释放锁

    40、synchronized和java.util.concurrent.Locks.Lock有何异同?

      相同点:Lock能完成synchronized实现的所有功能

     不同点:Lock有更精准的线程语义和更好的性能;synchronized会自动释放锁,Lock需要手动释放并且必须在finally从句中释放,Lock有更强大的功能,如:它的try Lock方法可以非阻塞方式去解锁

    。。。。。。。。。。。。

    Collection框架

    集合框架(Collection Framework)泛指java.util包得若干个类和接口

    1、Collection框架中实现比较要实现什么接口?

       comparable, comparator

    2、ArrayList与vector区别

      相同点:都实现了List接口,List继承Collection接口,都是有序集合,允许重复

     区别:1)vector线程安全,ArrayList线程不安全,如果有一个线程访问,用ArrayList,效率较高,多个线程访问,用vector,不用自己考虑和编写线程安全代码

             2)ArrayList与vector都有一个初始量大小,当存储元素超过容量时,需要增加存储空间,每次增加多个存储单元,vector为原来的一倍,ArrayList位0.5倍

    3、HashMap与HashTable区别?

      HashMap是HashTable的轻量级实现,都实现map接口,主要区别:

     1) HashMap允许空键值

     2)HashTable线程安全,HashMap非线程安全,当只有一个线程访问时,HashMap效率高

     3)HashTable基于陈旧的Dictionary类,HashMap基于java1.2引进的map接口的一个实现

    4、List与map区别

      list单例,map双利

     list有序,允许重复,map无序,key值不能重复

    5、List,set,map存储元素,各有什么特点?

     list:有序,可重复,允许null,单例,继承Collection

    set:无序,不可重复,允许null,单例,继承Collection

     map:保存键值对,value可多值

    6、ArrayList,vector与linkedList的存储性能和特性。

           ArrayList与vector使用数组方式,在存储数据,该数组元素数大于实际存储数据,以便增加和插入元素,它们都允许直接按序号索引元素,但插入元素引起数组元素移动等内存操作,所以插入数据慢,索引数据快。

           vector线程安全,通常性能比ArrayList差,linkedList使用双向的链表实现存储,按序号索引需要进行前向或后向遍历,但出入数据只需记录本项的先后项即可,所以插入过度快,索引慢

           linkedList线程不安全,linkedList提供一些方法,可当做堆栈和队列来使用。

    7、去掉vector中重复元素

      vector v2=new vector();

      for(int i=0;i<v.size();i++){

       object obj=v.get();

        if(!v2.contains(obj))

        v2.add(obj);

      }

    8、collection 与collections的区别。

       collection是集合类的上级接口,list,set实现它

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

    9、set元素不能重复,用什么方法来区分重复与否,==还是equals()?有什么区别

       set元素不能重复,用equals()进行判断

       equals用来检测,两个对象是否相等,即两个对象内容是否相等

      ==比较引用和基本数据类型

    10、你所知道的集合有哪些,主要方法

        最常用的集合 List 、Map

        List包括arrayList与vector,它们是可变大小的列表,适合构建,存储和操作任何类型对象的元素类别;List适用于按数值索引访问元素的情形;Map提供更通用的元素存储方法,map集合类用于存储元素对(健和值),每个键对应一个值

        collection包括list和set;list包括arrayList、vector;;;set包括hashset、treeset

        map包括hashmap与hashtable

       方法: set    有  add、remove、contains

                map有  put、remove、contains

               list有get(int、index)

      set中没有get()方法,list和set都可以迭代出所有元素,迭代时,得到iterator对象,所以都有iterator方法

     map可以返回三个集合:key、value、key和value组成的EntrySet对象集合,有get(key)方法

    。。。。。。。。。。。。。。。。。。。。。。。。。。

    1、数据库三大范式是什么?

     第一范式:字段具有原子性,不可再分;

                  数据库表中的字段都是单一属性,不可再分,如姓名不能分为姓和名,只能作为一个整体

    第二范式:在第一范式的基础上建立起来,为了使数据库表中得实例式。。。。。

    2、用一条sql语句查询没门课>80的人

      创建表:

        create table score(

                  id int   primary key auto_increment,

                  name  varchar(20),

                  subject  varchar(20),

                  score  int 

      );

    注:auto_increment 对主键id进行自动增加编号的

    插入数据:

        insert into score values

          (null,'张三','语文',81)

          (null,'张三','数学',90)

          (null,'李四','语文',70)

          (null,'李四','数学',100);

     select distinct name from score where name not in (select distinact name from score where score <= 80);

    *******************************************   hibernate   查询方式总结                **************************************************

    1、get() and load()

        session.get(clazz,id);

        session.load(clazz,id) ;

    区别:@get 查询,不管查询结果是否使用,只要调用get,立即到数据库中查询,而load查询使用延迟加载,当使用时再到数据库中查询

            @当从数据库中查询的结果不存在时,get返回null,load返回false,所以如果不确定是否有匹配的行存在时,用get查询

    2、hql

      string hql=" from user";

      query q=session.CreatQuery(hql);

      q.list();

    3、使用Criteria

       Criteria c=session.createCriteria(user.class);

      c.

  • 相关阅读:
    JSON
    什么是Jsonp?
    用border做三角形
    前端模块化
    Web 前端
    前端性能优化
    Ajax的原理
    node.js基础语法
    【真·新手初篇】菜鸟们都戳进来看看(欢迎大神指导)
    2019.11.20 开启一天的工作
  • 原文地址:https://www.cnblogs.com/zjn0zjn/p/4898658.html
Copyright © 2020-2023  润新知