谢玉龄吧 关注:1贴子:67
  • 11回复贴,共1

Interview Preparing

只看楼主收藏回复

一、类只有以下两个修饰:
public:随便调用
default:(缺省)同包内调用
变量与方法才有以下四个修饰
public:项目内引用即可调用
protected:不同包里引用,只能在子类中才能调用
default:(缺省)不同包不能调用
private:私有后只能本类调用。
二、基本数据类与其对应的封装类能通过java5版本的拆装机制互换使用:
public class Box{
public static void main(String[] args){
Integer a = new Integer(3);
Integer b = 3;
int c = 3;
c == b && c==a //true 比较的是值
b==a //false 比较的是地址
}
}


1楼2018-02-23 23:48回复
    一、内存中堆栈的区别:
    堆是操作者自己申请的内存空间,栈是系统自动分配的内存空间


    2楼2018-02-24 00:32
    回复
      广告
      立即查看
      关于第二点封装类
      如果整型字面量的值在-128到127之间,那么不会new新的Integer对象,而是直接引用常量池中的Integer对象
      比如 Integer a =127;Integer b = 127 那么 a == b 是true;而Integer a =222;Integer b =222那么a == b is false


      3楼2018-02-24 09:56
      收起回复
        一、&与&&是有区别的,区别在于&是两头都会运行而&&先判断前面条件是否为真,如果为假,那么会直接中止判断返回false,用书面表达是这样表述
        &&是短路运算,如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。
        重要案例:
        username != null &&!username.equals(""),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本不能进行字符串的equals比较,否则会产生NullPointerException异常。
        二、Math.round(11.5) is 12 Math.round(-11.5) is -11
        四舍五入是按精度+0.5;
        三、switch的作用域是:
        char short int byte
        不能作用于:
        boolean long double float
        四、<<左移符号(相当于乘以2的N次幂) >>右移符号(相当于除以2的N次幂)
        五、两个对象equals相等,hashcode一定相等;hashcode相等,equals不一定相等
        eg:12345 与54321 ,hashcode is 1+2+3+4+5 ,hashcode两个都相等,但equals不等
        六、String与StringBuilder与StringBuffer:
        String的改变是生成新对象,StringBuilder与StringBuffer的改变都是修改本对象区别在于Builder没有加锁(synchronized)效率更高(适合单线程);
        七、重载只看参数类型与参数个数,返回值类型可以相同也可以不同
        八、JVM加载class文件的机制:
        加载、链接、初始化三步。
        加载是由类的加载器ClassLoader和它的子类实现的,加载器负责查找和装入类文件中的类。
        先把类文件的数据放入内存(通过字节数组读入类文件),然后进入链接阶段:验证、准备(分配内存)、解析。
        最后JVM对类进行初始化。
        类的加载器有:
        类加载器包括:根加载器(BootStrap)、扩展加载器(Extension)、系统加载器(System)和用户自定义类加载器(java.lang.ClassLoader的子类)
        九、抽象类和接口的区别
        最大的区别是抽象类有构造器而接口没有,其次是抽象类的成员可以有四种修饰而接口全是public等。


        4楼2018-02-24 18:06
        回复
          一、抽象abstract能与static、native、synchronized一起使用吗?
          不行。因为抽象方法是需要子类重写,而static无法被重写;native是什么鬼...没见过啊;synchronized是具体方法才有的锁,而抽象没有具体方法。
          二、静态变量与实例变量的区别:
          静态变量属于类变量,在内存中仅有一个,所有实例都能对其修改;实例变量依赖于自己的实例,也只能通过自己的实例才能对其进行修改。
          三、静态方法只能访问静态成员而不能访问非静态的成员:
          因为非静态的成员调用首先需要实例对象,而静态成员随类的加载而加载。
          四、clone是浅拷贝,深化拷贝的方法是实现Cloneable接口然后重写clone,最直接的深拷贝是对象序列化(有待学习)。
          五、具有抽象方法的一定是抽象类,但是抽象类也可以由具体方法;抽象类能实现接口,接口不能继承抽象类,因为接口没有构造方法,而抽象类有。
          六、一个class文件只能有一个public 类,但是可以由多个类
          七、java的final关键字有什么用:
          修饰作用,使用以后不能被继承重写与修改。
          八、创建对象的顺序是:先初始化静态成员,再调用父类构造器,再初始化非静态成员,最后调用自身构造器。


          5楼2018-02-26 09:54
          收起回复
            一、JAVA获取日期时间可以使用Calendar对象提供的get方法:
            eg;calendar.get(Calendar.year);//获取年份
            二、Error与Exception的区别:
            Error表示错误和程序无法处理的异常(只能人工解决),Exception表示需要捕捉或程序处理的异常(可以程序处理);
            三、try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后?
            答:finally代码块是一定会执行的,问题的这种情况是执行到return 前,记录return 的返回值,然后执行finally,最后回到return语句执行。这种方式有个弊端,万一return的返回值与finally代码块出现冲突,return的返回值可能不是我们想要的!
            四、Java语言如何进行异常处理,关键字:throws(声明异常)、throw(抛出异常)、try(检测代码)、catch(捕抓到异常的处理方式)、finally(确保必须执行的代码运行)。
            五、运行时异常与受检异常
            运行异常是程序设计不合理导致程序无法执行下去的错误;
            受检异常是编译器要求实现方法的时候必须声明的抛出的可能异常;
            六、List是线性结构的容器,能按索引取值;set是存储集合,特征是不允许重复元素;List set都继承自集合collection。Map是键值对。
            七、ArrayList 与Vector都是数组都是能随意按索引取值,存取方便但是速度较慢,Vector是线程安全的(有Synchronized关键字)所以速度比ArrayList更慢;LinkedList是链表先进先出规则,存取不便但是速度较快。
            八、Collction是一个接口,实现于set和list;Collections 是一个工具类,提供静态方法辅助容器操作,比如容器搜索、排序。
            九、TreeSet与TreeMap存放的对象所属类必须实现Comparable接口,改接口提供了compareTo()方法,TreeSet与TreeMap添加元素的时候会回调这个方法进行比较从而实现树结构的排序。
            十、sleep()与wait()和yield()的区别:
            sleep只是暂停指定时间,把cpu让给其他线程,依然持有锁,时间到了立马进入就绪状态。
            而wait暂停以后,就放弃持有锁进入等待池,必须使用notify() or allnotify()才能让线程重新进入就绪状态。
            yield()只会让给相同或者更高的优先级,而且yield()之后线程进入的是就绪状态而不是阻塞状态。
            十一、一个对象不管有多少个方法加了同步(synchronized())都只有一个对象锁,只要一个线程持有了这个对象锁,那么其他线程就不能访问这个对象的其他同步方法。
            十二、Runnalbe相较于Callable的差距在于没有返回值,Callable可以让Future拿到返回值
            十三、synchronized关键字的用法:
            synchronized关键字可以将对象或者方法标记为同步,以实现对对象和方法的互斥访问,也可以用synchronized(对象){}定义同步代码块。
            十四、同步与异步!(回头详细实现)
            比如主线程有三个动作,依次执行完毕才能开启下一个动作就是同步;每个动作开启一个互不干扰的子线程,然后主线程继续执行其他代码,三个子线程独立执行完毕;
            十五、线程池(Thread pool)
            为了减少虚拟机的运行开销,减少线程创建和销毁的次数,使用线程池可以事先创建若干个线程,在使用的时候调用线程,不用的时候放回线程池从而减少创建线程与销毁线程的开销。java5+的Executor接口定义了一个执行线程的工具。它的子类型即线程池的接口是:ExecutorService。最佳使用是newFixedThreadPool(int x);
            十六、join()方法是强行让线程执行的方法。
            十七、Lock一定要程序员自己手动释放锁(最好在代码最后加个finally代码块进行释放锁),synchronized会自动释放锁。
            十八、什么是JAVA序列化:
            序列化是一种用来处理对象流的机制,将对象的内容进行流化。可以对流化的对象进行读写操作,也可以将流化的对象进行网络传输。序列化是为了了解对象流读写操作时可能引发的问题。
            要实现序列化,需要类实现一个serializable接口,改接口是一个标识性接口,标注该类对象是可被序列化的,然后使用一个输出流来构造一个对象输出流并通过writeObject(Object)方法就可以将实现对象写出(即保存其状态),如果需要反序列化则可以用一个输出流建立对象输入流,然后通过readObject方法从流中读取对象。序列化能持久化对象,也能对对象进行深度clone。
            十八、


            6楼2018-02-27 09:08
            回复
              一、JAVA有两种流:字节流,字符流
              字节流继承于InputStream和OutputStream,字符流继承于Reader和Writer。引用I\O需要注意两点:
              ①对称性,输入输出对称,字节字符对称②两种设计模式(适配器模式和装潢模式)。
              二、代理模式很重要,我们不需要修改原先的实现类,用一个代理类来进行过滤就能实现功能。
              new 代理类{ new 原有类 }
              三、XML文档的作用
              XML文档主要有两个作用,数据交换和信息配置。XML将数据用标签组装起来,然后打包加密后通过网络传输给接受者,接受者接受解密之后再从XML文件中还原相关信息,JSON也能做到交换数据。很多软件用XML来储存配置信息,尤其是JAVA的框架这些框架都选择dom4j作为xml处理工具。
              四、JDBC四步走:
              加载驱动、创建连接、执行语句、关闭连接。(加载配置文件可以使用Properties类:
              properties.load(new FileInputStream("mysql.ini"))


              7楼2018-02-28 23:52
              回复
                J2EE MVC:
                users.jsp (V)
                UserController.java (C)
                UserService.java (Service层)
                UserDao.java (DAO层)
                User.java (M)


                8楼2018-03-19 13:06
                回复
                  广告
                  立即查看
                  servlet与action 的区别
                  (1)Servlet:默认在第一次访问的时候创建,对象只会创建一次,单实例对象。
                  (2)Action:默认访问的时候创建,每次访问的时候都会创建一个action对象,多实例对象。


                  9楼2018-03-29 17:37
                  回复
                    过滤器与拦截器的区别!
                    1、拦截器是基于Java反射机制的,而过滤器是基于函数回调的。
                    2、过滤器依赖于servlet容器,而拦截器不依赖于servlet容器。
                    3、拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。
                    4、拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。
                    5、在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。


                    10楼2018-04-02 22:22
                    回复