java面试常问基础问题
1、java中String类型为什么是final修饰的final可以修饰类,方法,变量,当修饰类的时候,它不能被继承,不能拥有子类,final修饰变量需要初始化。那么java中的String被final修饰的原因是效率和安全。不能被继承修改,因此安全。变量引用不被修改,可以重复利用,高效。
2、Spring MVC中的事务处理controller只负责与前端的数据交观立挛蛴互方面,逻辑处理程序放在ser即枢潋雳vice层中,事务管理属于程序处理,我觉得应该放在service层中。在配置文件增加这个配置作为事务操作的支撑。<tx:annotation-driven transaction-manager="txManager"/>在service层中的方法中,添加如下的注解@Transactional public void myService(){ }
3、HashMap底层原理HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传稣匚邸腼递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,然后找到bucket位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表的下一个节点中。 HashMap在每个链表节点中储存键值对对象。当两个不同的键对象的hashcode相同时会发生什么? 它们会储存在同一个bucket位置的链表中。键对象的equals()方法用来找到键值对。
4、Java内存泄露的问题调查定位首先我们要知道为什么会产生内存泄漏,java是通过jvm自动回收内存的,但是当一个对象一直被占用的时候,就会导致申请的内存空间无法创建新的对象导致内存溢出。定位方法:1.通过jmap 打印内存快照,分析快照文件dmp。2.通过jstat 分析gc的具体情况。
5、Java创建线程之后,直接调用start()方法和run()的区别start方法会启动run方法,会执行异步操作。run方法不会执行异步方法,它只是线程的一个普通方法。