面试永远是程序员迈向成功的第一个门槛,想要面试成功,各种面试题的洗礼是必不可少的,下面就来看看小编精心整理的一些java高级工程师面试题及答案吧。
一、堆的年轻代和老年代怎么理解?
堆的年轻代大则老年代小,GC少,但是每次时间会比较长。年轻代小则老年代大,会缩短每次GC的时间,但是次数频繁。可以让老年代尽量缓存常用对象,JVM默认年轻代和老年代的大小比例为1:2,。观察峰值老年代内存,不影响full GC,加大老年代可调1:1,但是要给老年代预留三分之一的空间。减少使用全局变量和大对象 ,调整新生代,老年代到最合适。
二、字节流与字符流的作用?
字节流不会用到内存缓冲区,文件本身直接操作。字符流操作使用内存缓存区,用缓存存操作文件。字符流在输出前将所有内容暂时保存到内存中,即缓存区暂时存储,如果想不关闭也将字符流输出则可以使用flush方法强制刷出。字节字符转化可能存在系统编码lang,要制定编码。getbyte字节流使用更加广泛。
三、如何唤醒一个阻塞的线程?
如因为Sleep,wait,join等阻塞,可以使用interrupted exception异常唤醒。
四、final在Java当中有什么作用?
final修饰的类叫最终类,这个类不能被继承。
final修饰的方法不可以被重写。
final修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。
五、Java中的Math. round(-1. 5)等于多少?
等于 -1。round()是四舍五入,注意负数5是舍的,例如:Math.round(1.5)值是2,Math.round(-1.5)值是-1。
六、String属于基础的数据类型吗?
String 不属于基础类型,基础类型有 8 种:byte、boolean、char、short、int、float、long、double,而 String 属于对象。
七、Java当中操作字符串都有哪些类?它们之间有什么区别?
操作字符串的类有:String、StringBuffer、StringBuilder。
三者区别:
StringBuffer和StringBuilder都继承自抽象类AbstractStringBuilder。
String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象,而 StringBuffer、StringBuilder 存储数据的字符数组没有被final修饰,说明值可以改变,抽象类AbstractStringBuilder内部都提供了一个自动扩容机制,当发现长度不够的时候(初始默认长度是16),会自动进行扩容工作,扩展为原数组长度的2倍加2,创建一个新的数组,并将数组的数据复制到新数组,所以对于拼接字符串效率要比String要高。
线程安全性:StringBuffer由于很多方法都被 synchronized 修饰了所以线程安全,但是当多线程访问时,加锁和释放锁的过程很平凡,所以效率相比StringBuilder要低。StringBuilder相反执行效率高,但是线程不安全。所以单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer。
执行速度:StringBuilder > StringBuffer > String。
八、String str="i"与 String str=new String(“i”)一样吗?
不一样,因为内存的分配方式不一样。String str=“i"的方式,Java 虚拟机会将其分配到常量池中,如果常量池中有"i”,就返回"i"的地址,如果没有就创建"i",然后返回"i"的地址;而 String str=new String(“i”) 则会被分到堆内存中新开辟一块空间。
九、synchorized和lock的区别有哪些?
(1)Lock是一个接口,synchronized是关键字
(2)synchronized可以锁住类、方法和代码块,而Lock是块范围内的
(3)Lock能够让等待锁的线程响应中断,但是synchronized不会,线程会一直等待下去
(4)synchronized可以自动释放锁,但是Lock要手动释放锁
(5)通过Lock能够知道线程有没有拿到锁,但是synchronized不可以
(6)Lock可以提高多个线程读操作的效率
十、了解kafka吗?讲一下kafka
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它能够处理消费者在网站中的所有动作流数据......。
具体的可以通过以下的文章来进行了解-Kafka是什么?特性有哪些?
十一、说说聚集索引和非聚集索引,mysql的4种事务隔离级别,InnoDB在Repeatable_Read下为什么不会幻读,索引为什么用B+树,B+树和B树的区别
聚集索引是指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同。一个表只能有一个聚集索引,非聚集索引是一种索引,该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。
以上就是关于java面试题的所有内容了,更多java面试题内容请关注奇Q工具网了解详情。
推荐阅读: