① java面试时问在项目开发时遇到最难的是什么问题,怎么解决
面试时,回答在项目开发中遇到最难的问题以及如何解决,可以从以下几个关键点展开:
难点1:测试、部署和管理流程不熟悉。
你可以在项目中展示你的参与和成长。例如:我们项目使用了Maven进行项目管理、Jenkins进行部署,Git进行代码管理。除了编码,我还负责了单元测试和联调。我们最终将Java代码打包为jar包,并部署到了Linux服务器。这个过程展示你的项目测试、部署和管理的综合能力。
难点2:数据库性能调优经验。
你可以描述监控过程,如使用CAT、New Relic或Zabbix监控数据库。遇到性能问题时,通过查看执行计划和业务日志分析问题,例如,发现没有为特定字段建立索引或缓存,导致性能瓶颈。解决方法包括建立索引、使用复合索引或引入缓存。
难点3:JVM内存管理。
分享监控内存使用情况、处理内存泄露的经验,如通过JVM内存监控工具发现内存使用异常,并分析原因和采取的措施。例如,发现内存泄露是因为没有关闭文件对象或缓存设置不当,采取了关闭对象和优化缓存策略。
难点4:Linux操作系统技能。
分享在Linux环境下处理问题的经验,如在Linux服务器上查看日志文件,定位业务问题。描述遇到的错误,如服务器错误500,并说明如何通过日志文件定位问题原因,并采取相应措施。
亮点5:理解底层源码。
分享通过阅读和理解底层源码解决实际问题的经验,例如在库存管理中遇到快速失效问题,通过阅读相关源码理解并解决。展示对数据结构和算法的理解能力。
在准备面试时,确保每个亮点都能结合具体项目经验进行阐述,并准备相关技能的细节,如数据库调优中的Redis和索引知识、JVM内存管理的JVM结构、算法与数据结构等,同时也要准备如何回答面试官可能提出的细节问题。面试过程中,通过引导面试官关注关键技能和经验,以展示你的项目经验和能力。
② Java常见的面试问题(带答案),自己答出来多少
1、在java中如果声明一个类为final,表示什么意思?
答:final是最终的意思,final可用于定义变量、方法和类但含义不同,声明为final的类不能被继承。
父类的构造方法是否可以被子类覆盖(重写)?
答:父类的构造方法不可以被子类覆盖,因为父类和子类的类名是不可能一样的。
2、请讲述String 和StringBuffer的区别。
答:String 类所定义的对象是用于存放”长度固定”的字符串。
StringBuffer类所定义的对象是用于存放”长度可变动”的字符串。
3、如果有两个类A、B(注意不是接口),你想同时使用这两个类的功能,那么你会如何编写这个C类呢?
答:因为类A、B不是接口,所以是不可以直接继承的,但可以将A、B类定义成父子类,那么C类就能实现A、B类的功能了。假如A为B的父类,B为C的父类,此时C就能实现A、B的功能。
4、谈谈你对抽象类和接口的理解。
答:定义抽象类的目的是提供可由其子类共享的一般形式、子类可以根据自身需要扩展抽象类、抽象类不能实例化、抽象方法没有函数体、抽象方法必须在子类中给出具体实现。他使用extends来继承。
接口:一个接口允许一个类从几个接口继承而来,Java 程序一次只能继承一个类但可以实现几个接口,接口不能有任何具体的方法,接口也可用来定义可由类使用的一组常量。其实现方式是interface来实现。
5、Java中什么是竞态条件?
答:竞态条件会导致程序在并发情况下出现一些bugs。多线程对一些资源的竞争的时候就会产生竞态条件,如果首先要执行的程序竞争失败排到后面执行了,那么整个程序就会出现一些不确定的bugs。这种bugs很难发现而且会重复出现,因为线程间的随机竞争。
6、Java中如何停止一个线程?
答:Java提供了很丰富的API但没有为停止线程提供API。JDK 1.0本来有一些像stop(), suspend() 和 resume()的控制方法但是由于潜在的死锁威胁因此在后续的JDK版本中他们被弃用了,之后Java API的设计者就没有提供一个兼容且线程安全的方法来停止一个线程。当run() 或者 call() 方法执行完的时候线程会自动结束,如果要手动结束一个线程,你可以用volatile 布尔变量来退出run()方法的循环或者是取消任务来中断线程。点击这里查看示例代码。
7、 一个线程运行时发生异常会怎样?
答: 简单的说,如果异常没有被捕获该线程将会停止执行。Thread.UncaughtExceptionHandler是用于处理未捕获异常造成线程突然中断情况的一个内嵌接口。当一个未捕获异常将造成线程中断的时候JVM会使用Thread.getUncaughtExceptionHandler()来查询线程的UncaughtExceptionHandler并将线程和异常作为参数传递给handler的uncaughtException()方法进行处理。