1、编译型代码和解释型代码的区别

特征:

        解释型语言在运行程序的时候才翻译,每执行一次,要翻译一次,效率较低.

        编译型就是直接编译成机型可以执行的,只翻译一次

优点:

        解释型:可移植性好,只要有运行相应需要的解释环境,可以在不用的操作系统上运行,修改调试也非常方便

        编译型:相比解释执行编译执行效率高,占用资源小,适合复杂程序

缺点:

        解释型:一句一句执行解释,浪费计算机资源,效率低

        编译型:兼容性差,编译型程序虽然源代码也可以移植,但前提是必须针对不同的系统分别进行编译.


2、Linux查看文件第n行

head -n data.txt | tail -1   

nl  data.txt | sed -n 'np'

sed -n 'np'  data.txt

awk 'NR==n' filename

3、类加载过程

类加载过程分为三个主要步骤:加载,连接,初始化。

4、重载和重写

方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。


5、synchronized的实现原理
(1)synchronized同步代码块:synchronized关键字经过编译之后,会在同步代码块前后分别形成monitorenter和monitorexit字节码指令,在执行monitorenter指令的时候,首先尝试获取对象的锁,如果这个锁没有被锁定或者当前线程已经拥有了那个对象的锁,锁的计数器就加1,在执行monitorexit指令时会将锁的计数器减1,当减为0的时候就释放锁。如果获取对象锁一直失败,那当前线程就要阻塞等待,直到对象锁被另一个线程释放为止。
(2)同步方法:方法级的同步是隐式的,无须通过字节码指令来控制,JVM可以从方法常量池的方法表结构中的ACC_SYNCHRONIZED访问标志得知一个方法是否声明为同步方法。当方法调用的时,调用指令会检查方法的ACC_SYNCHRONIZED访问标志是否被设置,如果设置了,执行线程就要求先持有monitor对象,然后才能执行方法,最后当方法执行完(无论是正常完成还是非正常完成)时释放monitor对象。在方法执行期间,执行线程持有了管程,其他线程都无法再次获取同一个管程。