java宝典

转载自@http://www.cnblogs.com/wangyayun/p/3809950.html
@https://blog.csdn.net/riverflowrand/article/details/54974521

1.&和&&之间的区别

        &和&&  都可以做逻辑运算符

        &还可以做位运算,

        &&具有短路的功能   &要两边为true时才为true

例如,对于if(str != null    &&     !str.equals(“”))表达式,当str 为null 时,后面的表达式不会执行,所以不会出现NullPointerException
如果将&&改为&,则会抛出NullPointerException 异常。

2.左位移   3<<2  相当于3*2^2=12       右位移20>>2  相当于 20除以2^2=5     取商 、 -20>>2   就是补位+1 加负号 -6

注:<< , >> , ,>>> , 运算符只针对int型和long型,byte ,short ,char型需要转换成Int型在进行操作。 

2.1   Java支持多继承么?

java  中  类只支持单继承
          接口支持多继承,也就是多实现


3.        ==    比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符

    equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同

                   String a=new String("foo");

		  String b=new String("foo");

		  System.out.println(a.equals(b));//true
		  System.out.println(a==b);//false
		  
		  int a1 = 3;
		  int b1 = 3;		  System.out.println(a1==b1);//true 基本数据类型没有equals方法

                          String a1 = "3";
		         String b1 = "3";
		         System.out.println(a1==b1);//true
		  System.out.println(a1.equals(b1));//true   引用数据类型有equals方法

4 。静态变量和实例变量的区别?                                              静态变量可以通过类名来使用,实例变量必须要创建对象才能使用

  静态变量要加static 关键字  实例变量不加

                   String a=new String("foo");

 实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,

                static int d;

        静态变量属于整个类,


5.Integerint的区别

int是八种基本数据类型(byte short int long float double char boolean)

 java为每个基本数据类型都提供了封装类  integer就是int的封装类

    int的默认值0  integer的默认值null

    Integer 是一个对象,需要存储对象的元数据。所以他比int占用更多的空间
    但是 int 是一个原始类型的数据,所以占用的空间更少。
Java 中,int 类型变量的长度是一个固定值,与平台无关,都是 32 位或者4个字节。意思就是说,在 32 位 和 64 位 的Java 虚拟机中,int 类型的长度是相同的。



6.    ceil 想上取整 floor 向下取整   round 分情况

                   System.out.println(Math.round(-11.6));//-12
		  System.out.println(Math.round(-11.5));//-11
正数  四舍五入
负数  五舍六入

7.  域的作用区域

作用域    当前类 同一package 子孙类 其他package 

public    √     √          √       √ 

protected  √     √          √      × 

default   √     √          ×      × 

private    √     ×          ×      × 

8.overload  区别   override

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

  重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,(在不同的类中)。子类重写父类的方法时,只能抛出比父类更少的异常,
    子类的访问权限只能比父类的更大,如果父类是private类型的,那么子类是拥有自己的一个方法,不再是重写。   运行时的多态性

  重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回值类型作为重载函数的区分标准。

9.分层设计的好处

    各个功能按照流程进行模块化,模块化的好处就是能进行随意组合……便于进行分工,便于维护,便于功能的拓展,便于用户需求的不断变化。

10.序列化接口ID的作用

    如果根据现在的需要我们要新增一个新的版本的方法,我们就可以通过修改ID号进行修改

,不仅取决于类路径和功能代码是否一致,一个非常重要的一点是两个类的序列化 ID 是否一致(就是 private static final long serialVersionUID = 1L)

11.    hashcode的作用

     hashCode()方法和equal()方法的作用其实一样,在java里都是用来对比两个对象是否相等一致,但是equals()方法里面的比较复杂,效率比较低,而hashcode是根据他们的hash值来进行比较的,效率较高。

         1.equal()相等的两个对象他们的hashCode()肯定相等,也就是用equal()对比是绝对可靠的。

         2.hashCode()相等的两个对象他们的equal()不一定相等,也就是hashCode()不是绝对可靠的。

12.构造器Constructor是否可被override? 

因为构造器Constructor不能被继承,所以他是不能被重写的,但是他可以被重载  如有参和无参的构造器

13.java实现多态的机制

                Java实现多态有三个必要条件:继承、重写、向上转型 

      指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的,尽管是重载该方法。若子类重写了父类中的某些方法,在调用该些方法的时候,必定是使用子类中定义的这些方法(动态连接、动态调用)。

    在Java中有两种形式可以实现多态:继承和接口


  14.    servler的生命周期

    Servlet 通过调用 init () 方法进行初始化。
    Servlet 调用 service() 方法来处理客户端的请求。
    Servlet 通过调用 destroy() 方法终止(结束)。
    最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。


servlet 在web.xml 中的配置参数
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<!-- ... -->
<servlet>
        <servlet-name>PageName</servlet-name>
        <jsp-file>  路径  </jsp-file>
</servlet>
<!-- ... -->
<servlet-mapping>
        <servlet-name> PageName </servlet-name>
        <url-pattern>/*</url-pattern>
</servlet-mapping>
<!-- ... -->

《过滤器的配置  Struts2》
<filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>*.action</url-pattern>
    </filter-mapping>
</web-app>

15 在oracle数据库中需要查询出前8条记录的sql语句怎么写

select * from table order by columName where romNum<=8;

mysql  select * from table orber by colunName limit 0,8;


16 string 是一个不可变类,所以它赋值的对象的内容不可改变  若果重新定义了一个string类,那么说明指向的是一个新的对象,原来的那个对象还是保留在栈里面,没有被改变

    由于string类是final 类型的,所以它不可继承

17  String 和 StringBuffer 的区别

    string 表示内容不可变,stringBuffer内容可以被修改的字符串。而且,stringBuffer的执行效率要比string要快。string里面有equals方法,但是stringBuffer里面没有equals方法

stringbuffer 和stringbuilder 都表示字符可以被修改的字符串。只是stringBuiler是线程不安全的(因为build是建筑,是高危行业。所以他是不安全的),由于他是线程不安全的,所以他的运行效率会快点

18    如何把一段逗号分割的字符串转换成一个数组?

 public static void main(String[] args) {
        String orgStr="a,b,c,d,e,f";
        String [] result = orgStr.split(",");//用正则表达式的方法

        for(int a = 0;a<result.length;a++){
            System.out.print(result[a]);
        }
    }
                结果:abcdef

String ont = "a,b,c,d";
String [] result = ont.split ( "," );

 System.out.println (Arrays.toString ( result ));

结果:[a, b, c, d]




19  数组只有length的属性,string有length()方法

20  try{  return语句 } catch{} finally{    }

static int test(){
        int i = 1;
        try {
            System.out.println("try里面的i : " + i);
            return i;//结果1
        }finally{
            System.out.println("进入finally...");
            ++i;//结果2
            System.out.println("fianlly里面的i : " + i);
        }

        如果存在finally代码块,try中的return语句不会立马返回调用者,而是记录下返回值待finally代码块执行完毕之后再向调用者返回其值,
然后如果在finally中修改了返回值,就会返回修改后的值

21 final, finally, finalize的区别。

    1.final 用于声明属性, 方法和类, 分别表示属性不可变, 方法不可覆盖, 类不可继承。
        内部类要访问局部变量, 局部变量必须定义成 final 类型, 例如, 一段代码……

    2.finally 是异常处理语句结构的一部分, 表示总是执行。
    如果存在finally代码块,try中的return语句不会立马返回调用者,而是记录下返回值待finally代码块执行完毕之后再向调用者返回其值,
然后如果在finally中修改了返回值,就会返回修改后的值。显然,在finally中返回或者修改返回值会对程序造成很大的困扰
    3.finalize 是 Object 类的一个方法, 在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收, 例如关闭文件等。 JVM 不保证此方法总被调用 所有object都继承了finalize()方法    final,finally,finalize的区别。final表示不可变,final表示必须执行的语句,finalize表示垃圾回收时执行的代码。

22 error 和 exception 有什么区别?

1.error指恢复不是不可能但非常困难的情况下的一种严重错误.比如内存溢出,不指望程序可以处理这样的情况. 程序只有死了的份了

2.exception表示一种设计或者实现问题,如果程序正常运行,则从不会发生. 程序能够克服的问题,又分为普通异常和系统异常  如:arrayindexoutofboundsexception
        ClassCastException,NullPointerException,AirthmeticException(算数异常,如:除数为0),systemException,SqlException;

23 Java特性

四大特性   封装、继承、抽象、多态
        封装:在面向对象的语言中,封装特性是由类来体现的,其中包括(属性和方法)。
        抽象:就是将一类实体的共同特性抽象出来,将它封装在一个抽象类中,因为抽象出来的实体不是一个真正的对象。所以在抽象类中不能实例化对象
        继承:就好比我们现实生活中的父子关系,在面向对象中就是一个类可以继承另一个类的一些特性,从而提高代码的复用程度
        多态:就是通过传递给父类对象引用不同的子类对象从而表现出不同的行为

24  单列模式 singleton

public class SingletonDemo {
    private static SingletonDemo instance=new SingletonDemo();        //静态实例对象
    private SingletonDemo(){
                                                                       //私有方法
    }
    public static SingletonDemo getInstance(){
        return instance;                                                //静态方法  return  实例变量
    }
}

单列模式是可以被继承和重写的,而静态类是不能的

25  JSP九大隐式对象

out:输出对象                                 作用域:page
request:请求对象   作用域:request
response:响应对象                            作用域:page
page:页面                                    作用域:page
pageContext:页面上下文对象                     作用域page
application:作用域对象      作用域:application
session:会话对象           作用域:session
config:配置对象                              作用域:page
exception:例外对象                            作用域:page

动作类(六大动作类)
include
userbean:
getproperty:
setproperty:
forword:
plugn:

26 两大跳转方式

forward(转发):转发是在服务器端完成的,转发地址栏不会发生变化,转发的速度快,转发必须是在同一服务器端完成的


redirect(重定向):重定向是在客户端完成的,重定向地址栏会发生变化,重定向的速度慢,重定向是在不同服务器上完成的

27 回文数

  Scanner sc = new Scanner ( System.in );
        while (true){
            System.out.println ("输入一个数字或字符");
            /* String str = "ABCD";*/
            String str = sc.next ();
            for (int i = 0; i < str.length(); i++)
                System.out.print("" + str.charAt(str.length() - i - 1));  //如果不减掉本身的话  就会出现 下标越界的一场
        }

28   排序

  // Collator 类是用来执行区分语言环境的 String 比较的,这里选择使用CHINA
        Comparator comparator = Collator.getInstance(java.util.Locale.CHINA);
        
         String[] arrStrings = {"usa","china","amerucan","canada"};

        // 使根据指定比较器产生的顺序对指定对象数组进行排序。
        Arrays.sort(arrStrings, comparator);
        for (int i = 0; i < arrStrings.length; i++)
        {

            System.out.print(  arrStrings[i]  );
        }

结果:amerucan,canada,china,usa,

29  三层架构思想  及  作用

划分为:表现层:展现给用户的界面(view)
业务逻辑层:对数据层的操作,对数据业务逻辑处理()
数据访问层:直接操作数据库,也就是对数据进行增删改查的处理

体现了:高内聚,低耦合   思想


30  HTML   XML 的区别

同:   他们两者都是标记语言    HTML是超文本标记语言   XML 是扩展标记语言
异:    语法要求不同,  标记不同  作用不同
          在HTML中不严格区分大小写   XML中严格区分大小写
           HTML不要求必须有结束标签   XML中必须要有结束标签
            HTML是用来显示数据的,xml是用来描述数据和存放数据的 

31   OOA  OOP  OOD
OOA    是面向对象分析  analysis
OOD      是面向对象设计   design
OOP          是面向对象编程  program

32  内部类

    public class Outer {
        private int size;
        public class Inner {
            private int counter = 10;
            public void doStuff() {
                size++;
            }
        }
        public static void main(String args[]) {
            Outer outer = new Outer();
            Inner inner = outer.new Inner();//创建INNER 对象
            inner.doStuff();
            System.out.println(outer.size);
            System.out.println(inner.counter);
            // 编译错误,外部类不能访问内部类的变量
            System.out.println(counter);
        }
    }


关键字  new class 等都不能作为标识符
保留字  保留字goto也不能作为标识符
数字   数字12345都不能作为标识符

内部类的编译名        class com.xingxue.mybatis.test.Outer$Inner

33  class.forName 的作用

    Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段。

34  常用  类 包  接口

类:BufferedReader  BufferedWriter  FileReader  FileWirter  String  Integerjava.util.Date System Class List HashMap

包:java.lang   java.io  java.util  java.sql javax.servlet org.apache.strtuts.action org.hibernate

接口:Remote  List  Map  Document  NodeList Servlet HttpServletRequest HttpServletResponse Transaction(Hibernate)、
Session(Hibernate) HttpSession  
 Runnable    LIst Map   Set Servlet Session  Hibernate

35  String s = new String ("xyz")

1.如果String常理池中,已经创建"xyz",则不会继续创建,此时只创建了一个对象new String("xyz");
2.如果String常理池中,没有创建"xyz",则会创建两个对象,一个对象的值是"xyz",一个对象new String("xyz")==s。

        补充一个面试题:String str = "aaa" + new String("bbb")创建了几个String对象?

 "aaa"一个对象   new Sring()一个对象  "bbb"一个对象 "aaa" + new String("bbb")==str一个对象

36     HTTP请求的GETPOST方式的区别

   GET请求能够被缓存

·        GET请求会保存在浏览器的浏览记录中

·        以GET请求的URL能够保存为浏览器书签

·        GET请求有长度限制

·        GET请求主要用以获取数据


  POST请求不能被缓存下来

·        POST请求不会保存在浏览器浏览记录中

·        以POST请求的URL无法保存为浏览器书签

·        POST请求没有长度限制

37 说一说Servlet的生命周期?  

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

            先加载这个servlet 》》init 》》service(doget   dopost)》》destroy

38  forward() redirect()的区别?

1. 从地址栏显示来说
        forward:它的地址栏还是原来的地址.
        redirect:新的地址.

2. 从数据共享来说
        forward:转发页面和转发到的页面可以共享request里面的数据.(能共享数据)
        redirect:不能共享数据.

3. 从运用地方来说
        forward:一般用于用户登陆的时候,根据角色转发到相应的模块.(用户登录)
        redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等(用户注销)

4. 从效率来说
        forward:高.
        redirect:低.

                                    转发是服务器行为,重定向是客户端行为。                                

39 MVC的各个部分都有那些技术来实现?如何实现?
M>>model  业务逻辑层(javabean)
V》view  表示层面(jsp技术)
C》controller 过程控制(servlet)
  将他们分成不同的组件进行实现,这些组件之间可以相互调用,提高了代码的复用度

 40  局部变量前不能放任何修饰符

 void doSomething () {
       private String s = "";
       int l = s.length();
   }注意:这是在方法里面  不是在类里面  如果在类class里面就是正确的
   局部变量前  不能有任何修饰符
   

41  抽象类的方法不能为private

abstract class Something {
   private abstract String doSomething ();
}
     这好像没什么错吧?
     答案: 错。abstract的methods不能以private修饰。abstract的methods就是让子类implement(实现)具体细节的,怎么可以用private把abstract
method封锁起来呢? (同理,abstract method前不能加final)。

42 final  的用法

class Something {
    final int i;    因为final是最终的,所以不能是变量
finalinstant variable没有default value,必须在constructor (构造器)结束之前被赋予一个明确的值。
可以修改为"final int i = 0;"
        
private  final  String name = new String ();  这是正确的
    
final int i = 0;也是正确的
public void doSomething() { System.out.println("i = " + i); }}

43 静态方法 不能调用非静态的方法

public class App {
    public static void main(String[] args) {
        App s = new App ();
        System.out.println("s.doSomething() returns " + doSomething ()
);正确的做法:s.doSomething()
    }
    public String doSomething() {
        return "Do something ...";
    }

44  C/S   B/S 的区别

1.硬件环境不同C(client)/S 局域网里面(一般建立在专用的网络上)B(bromine)/S 广域网里面(只要有操作系统和浏览器就行)

2.安全要求不同C/S 面对相对固定的用户群,安全系数较高B/S 因为运用在广域网里面,所以安全性系数较低3.用户接口不同C/S 是建立在window窗口上的B/S 是建立在浏览器上的

45  应用服务器与WEB SERVER的区别?

       严格意义上Web服务器只负责处理HTTP协议,只能发送静态页面的内容。
而JSP,ASP,PHP等动态内容需要通过CGI、FastCGI、ISAPI等接口交给其他程序去处理。这个其他程序就是应用服务器。

1。应用服务器处理业务逻辑,web服务器则主要是让客户可以通过浏览器进行访问。 
2。应用服务器处理业务逻辑,web服务器是用于处理HTML文件的。web服务器通常比应用服务器简单,如apache就是web服务器,Jboss就是EJB应用服务器。 
应用服务器:Weblogic、Tomcat、Jboss 
WEB SERVER:IIS、 Apache

46  统计字符个数

 String str = "我a爱中华abc我爱传智def123";
        int num=0;//数字个数    给他个初始值0 然后统计
        int hanzi=0;//汉字个数
        int zimi=0;//字母个数
        for(int i=0;i<str.length ();i++)
        {
            char c = str.charAt (i);//取出字符串里面的每个元素进行判断
            if(c>='0' && c<='9')
            {
                num++;
            }else if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
            {
                hanzi++;
            }else
            {
                zimi++;
            }
        }
        System.out.println (num+"shu"+hanzi+"han"+zimi+"zimu" );
47  递归算法
 public static void main(String[] args) {
        doubleNum (1237);
    }
    public static void doubleNum(int n)
    {
        System.out.println(n);
        if(n<=5000)
            doubleNum(n*2);
        System.out.println(n);
    }

结果:1237,2474,4948,9896,9896,4948,2474,1237,


package com.xingxue.spring.test;

import com.xingxue.spring.beans.A;
import com.xingxue.spring.beans.B;
import com.xingxue.spring.web.controller.UserController;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.Arrays;

public class App {
    public static void main(String [] args)
    {
        System.out.println(computeAge(8));
    }

    public static int computeAge(int n)
    {
        if(n==1) return 10;
        return computeAge(n-1) + 2;
    }
}

48  金额转换

package com.xingxue.spring.test;

import com.xingxue.spring.beans.A;
import com.xingxue.spring.beans.B;
import com.xingxue.spring.web.controller.UserController;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.Arrays;
public class App {
    private static final char[] data = new char{
            '零','壹','贰','叁','肆','伍','陆','柒','捌','玖'
    };

    private static final char[] units = new char[]{
            '元','拾','佰','仟','万','拾','佰','仟','亿'
    };
   
    public static String convert(int money)
    {
        StringBuffer sbf = new StringBuffer();
        int unit = 0;
        while(money!=0)
        {
            sbf.insert(0,units[unit++]);
            int number = money%10;
            sbf.insert(0, data[number]);
            money /= 10;
        }
        return sbf.toString();
    }
 public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(convert(12345));
    }
}

49 JSP中动态INCLUDE与静态INCLUDE的区别?

动态INCLUDE用jsp:include动作实现 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。
静态INCLUDE用include   伪码  实现,定不会检查所含文件的变化,适用于包含静态页面

50 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

   是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。
对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。
51  工厂模式

[java] view plain copy

    package demo8;  
    /** 
     * 工厂接口 
     * 
     */  
    interface IFactory {  
        Operation CreateOperation();  
    }  
      
      
    package demo8;  
    /** 
     * 具体工厂(Concrete Creator)角色:加法类工厂 
     * 
     */  
    public class AddFactory implements IFactory {  
        @Override  
        public Operation CreateOperation() {  
            return new OperationAdd();  
        }     
    }  
      
      
    package demo8;  
    /** 
     * 具体工厂(Concrete Creator)角色:减法类工厂 
     * 
     */  
    public class SubFactory implements IFactory {  
        @Override  
        public Operation CreateOperation() {          
            return new OperationSub();  
        }  
    }  
      
      
    package demo8;  
    /** 
     * 具体工厂(Concrete Creator)角色:乘法类工厂 
     * 
     */  
    public class MulFactory implements IFactory {  
        @Override  
        public Operation CreateOperation() {          
            return new OperationMul();  
        }  
    }  
      
      
    package demo8;  
    /** 
     * 具体工厂(Concrete Creator)角色:除法类工厂 
     * 
     */  
    public class DivFactory implements IFactory {  
        @Override  
        public Operation CreateOperation() {          
            return new OperationDiv();  
        }  
    }
53  代理模式

public interface Subject {
    void visit();
}

public class RealSubject implements Subject {

    private String name = "byhieg";
    @Override
    public void visit() {
        System.out.println(name);
    }
}

public class ProxySubject implements Subject{

    private Subject subject;

    public ProxySubject(Subject subject) {
        this.subject = subject;
    }

    @Override
    public void visit() {
        subject.visit();
    }
}

public class Client {

    public static void main(String[] args) {
        ProxySubject subject = new ProxySubject(new RealSubject());
        subject.visit();
    }
}

51  存在两个类,B 继承 A,C 继承 B,我们能将 B 转换为 C 么?如 C = (C) B;

            可以,向下转型。但是不建议使用,容易出现类型转型异常。

52  .Java 中 ++ 操作符是线程安全的吗?

不是线程安全的操作。它涉及到多个指令,如读取变量值==》》增加==》》存储回内存,这个过程可能会出现多个线程交差。

53    filter 和 servlet 的生命周期

Filter和Servlet的生命周期:
1.Filter在web服务器启动时初始化
2.如果某个Servlet配置了 1 ,该Servlet也是在Tomcat(Servlet容器)启动时初始化。
3.如果Servlet没有配置1 ,该Servlet不会在Tomcat启动时初始化,而是在请求到来时初始化。
4.每次请求, Request都会被初始化,响应请求后,请求被销毁。
5.Servlet初始化后,将不会随着请求的结束而注销。
6.关闭Tomcat时,Servlet、Filter依次被注销。

54  抽象类和接口的区别

a.一个类只能继承单个类,但是可以实现多个接口

b.抽象类中可以有构造方法  实列变量,接口中不能有构造方法  实列变量

c.抽象类中的所有方法并不一定要是抽象的,你可以选择在抽象类中实现一些基本的方法。而接口要求所有的方法都必须是抽象的

d.抽象类中可以包含静态(static)方法,接口中不可以

e.抽象类中可以有普通成员变量(int i;),接口中不可以有成员变量


55 堆和栈的区别
a.基本数据类型的变量和对象的引用都是在栈分配的

b.堆内存用来存放由new创建的对象和数组

通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用JVM中的栈空间;
而通过new关键字创建的对象和数组   和      构造器创建的对象则放在堆空间,堆是垃圾收集器管理的主要区域
String str = new String("hello");
上面的语句中变量str放在栈上,用new创建出来的字符串对象放在堆上,而"hello"这个字面量是放在方法区的。
56   Java 中会存在内存泄漏吗,请简单描述。 
理论上Java因为有垃圾回收机制(GC)不会存在内存泄露问题(这也是Java被广泛使用于服务器端编程的一个重要原因);
然而在实际开发中,可能会存在无用但可达的对象,这些对象不能被GC回收,因此也会导致内存泄露的发生。
例如Hibernate的Session(一级缓存)中的对象属于持久态,垃圾回收器是不会回收这些对象的,
然而这些对象中可能存在无用的垃圾对象,如果不及时关闭(close)或清空(flush)一级缓存就可能导致内存泄露

57 如何实现克隆
    1). 实现Cloneable接口并重写Object类中的clone()方法; 
      2). 实现Serializable接口,通过对象的序列化和反序列化实现克隆,


58  如何取得年月日、小时分钟秒? 
 Calendar cal = Calendar.getInstance ();
        int i = cal.get (Calendar.YEAR);
        System.out.println (i );
        int i1 = cal.get (Calendar.MONTH)+1;//月是从0-11 的  所以要加上1
        System.out.println (i1);
        int i2 = cal.get (Calendar.DATE);
        System.out.println (i2 );


如期格式化
  SimpleDateFormat oldFormatter = new SimpleDateFormat("yyyy/MM/dd");
        Date date1 = new Date();
        System.out.println(oldFormatter.format(date1));

59  拦截器和过滤器的区别

两者都是AOP思想的体现,都能实现权限检查,r日志记录等

Filter  是Servlet规定的,只能作用于web程序中,。而拦截器interceptor既能作用于servlet中,也能作用于application,spring中,
拦截器是spring中支持的,而过滤器是servlet中支持的,在spring框架中  优先使用拦截器
拦截器只能对action请求起作用,而servlet对所有请求都起作用。
拦截器可以使用多次,而过滤器只能在初始化的时候使用一次

拦截器不依赖servlet容器,而过滤器依赖servlet容器
拦截器是基于java反射机制的,而过滤器是基于函数回调的

》》总结    过滤器包含着servlet,servlet包含着拦截器

                过滤器只能作用在servlet中,拦截器都可以作用
TomCat容器》》Filter(过滤器)》》Servlet》》Interceptor(拦截器)》》Controller

60  java  javaScript  区别

java  是Sun公司推出的   面向对象的语言,基于程序的设计   在执行前必须经过编译才能执行
JavaScript  是 NetScape(网景)推出的    脚本语言,用来制作与网站无关的,与用户交互的复杂的软件,不需要经过编译,直接在浏览器上执行

61  断言 assert

        当软件正式发布后,可以取消断言部分的代码。java中使用assert作为断言的一个关键字,这就可以看出java对断言还是很重视的,
因为如果不是很重要的话,直接开发个类就可以了,没必要新定义一个关键字。

 

62  常见异常

- ArithmeticException(算术异常) 
- ClassCastException (类转换异常) 
- IllegalArgumentException (非法参数异常) 
- IndexOutOfBoundsException (下标越界异常) 
- NullPointerException (空指针异常) 
- SecurityException (安全异常)

63  List、Map、Set三个接口存取元素时,各有什么特点?

List可存放相同元素的集合
    Set不能存放相同元素的集合
        Map保存键值对的映射,键不能重复,值可以重复。可以是一对一,一对多的集合

64 实现多线程有两种方法

继承Thread类
实现Runnable接口。
    这两种方法都要通过重写run()方法来定义线程的行为,因为在Java中是单继承的,一个类只能继承另一个类,如果继承了Thread类之后,
就不能继承其他的类了,所以,实现Runnable接口是比较灵活的。也推荐使用这种方式

65  同步  异步

同步  也成为  阻塞式操作
异步  也成为  非阻塞式操作
如果你想在写这个程序的时候,另外一个程序也能读取这个程序,那么久采用异步编程。否则,采用同步编程,异步编程的效率要比同步的大

66   启动一个线程是调用run()还是start()方法?

      启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM 调度并执行,
这并不意味着线程就会立即运行。run()方法是线程启动后要进行回调(callback)的方法。
67  Java 中的流

字节流和字符流。字节流继承于InputStream、OutputStream,字符流继承于Reader、Writer

68  事务ACID值得是?

A:(原子性),在事务中,要么都完成,要么都不完成。任何一项操作的失败都会导致整个事务的失败。
C:(一致性):事务结束后状态是一致的
I;(隔离性):自己执行自己的,不予其他的相互关联
D;(持久性):持久化数据库

只有在并发数据访问时,才需要事务的执行

69  获得一个类的对象 有几种方法?

  方法1:类型.class,例如:String.class 
- 方法2:对象.getClass(),例如:"hello".getClass() 
- 方法3:Class.forName(),例如:Class.forName("java.lang.String")

70 get和post请求的区别?

①get请求用来从服务器上  获得资源,而post是用来向客户端   提交数据; 

②get将表单中数据按照name=value的形式,添加到action 所指向的URL 后面,
并且两者使用"?"连接,而各个变量之间使用"&"连接;  超链接的方式就是get方式
post是将表单中的数据放在HTTP协议的请求头或消息体中,传递到action所指向URL; 
    
③get传输的数据要受到URL长度限制(1024字节);而post可以传输大量的数据,上传文件通常要使用post方式; 

④使用get时参数会  显示在地址栏上,如果这些数据不是敏感数据,那么可以使用get;对于敏感数据还是应用使用post(不会显示在地址栏上)

71    JSP和Servlet是什么关系? 

JSP侧重于视图,Servlet更侧重于控制逻辑,在MVC架构模式中,JSP适合充当视图(view)而Servlet适合充当控制器(controller)。

72  web.xml文件中可以配置哪些内容? 

监听器(listener)、过滤器(filter)、 Servlet、会话超时时间、错误页面等


JSTL  标签的内容:C:foreach  C:IF  c:choose

73   什么是IoC和DI?

IoC叫控制反转,是Inversion of Control的缩写,也称为DI(Dependency Injection)叫依赖注入,是对IoC更简单的诠释。

IOC(Inversion of control):控制反转,依赖注入:
对象的创建再也不需要程序员来管理,而是可以有spring容器来进行创建和销毁,我们只需要关注业务逻辑 依赖IOC容器并管理bean,有两种,一种是BeanFactory,另一种是ApplicationContext, 但是APPlicationContext extends BeanFactory.. AOP来说,他也可以理解为一个面,在这个面里面我们利用代理类来找目标对象是什么,拦截那些方法, 然后在这些方法的前后也可以执行一些操作.

74   Spring中如何使用注解来配置Bean?有哪些相关的注解? 

首先需要在Spring配置文件中增加如下配置:

<context:component-scan base-package="org.example"/>  扫包

然后可以用@Component、@Controller、@Service、@Repository注解来标注需要由Spring IoC容器进行对象托管的类。这几个注解没有本质区别,
只不过@Controller通常用于控制器,@Service通常用于业务逻辑类,@Repository通常用于仓储类(例如我们的DAO实现类),普通的类用@Component来标注。

75   jre  jdk  区别

JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。
JDK顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。
如果你需要运行java程序,只需安装JRE就可以了。如果你需要编写java程序,需要安装JDK。

76 10!   阶乘

 public static void main(String[] args) {
        int num=1;
        for(int i = 10;i>0;i++)
        {
            num= num*i;
            System.out.println ("10 的阶乘="+num );
        }
    }

77  为何Map接口不继承Collection接口?

尽管Map接口和它的实现也是集合框架的一部分,但Map不是集合,集合也不是Map。因此,Map继承Collection毫无意义,反之亦然。 














发布了38 篇原创文章 · 获赞 4 · 访问量 7714
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章