java高级工程师面试题
① <java面试>常见的六个面试题
Java面试中常见的六个面试题及答案如下:
BigInteger的使用:
- 描述:BigInteger用于进行大整数运算,允许超出Integer范围的数据进行计算。
- 构造方法:BigInteger,用于从字符串创建BigInteger实例。
- 成员方法:
- 加法:b1.add
- 减法:b1.subtract
- 乘法:b1.multiply
- 除法:b1.divide
静态代码块、构造代码块和构造方法的执行顺序:
- 顺序:静态代码块 > 构造代码块 > 构造方法。
- 特点:静态代码块仅执行一次,当执行new子类对象时,先进行父类初始化,然后进行子类初始化。
==和equals的区别:
- ==:用于基本类型比较值是否相同,用于引用类型比较地址值是否相同。
- equals:Object类默认比较地址值,但String类重写了equals方法,用于比较内容是否相等。
静态变量和成员变量的区别:
- 所属:静态变量属于类,成员变量属于对象。
- 内存位置:静态变量存储在方法区的静态区,成员变量存储在堆内存。
- 生命周期:静态变量随着类加载和卸载,成员变量随着对象创建和销毁。
- 调用:静态变量可以通过类名或对象名调用,成员变量只能通过对象名调用。
Override和Overload的区别,以及this和super的区别:
- Override和Overload:
- Override:发生在子类与父类中,方法名、参数列表相同,返回类型相同或协变,访问修饰符不能更严格。
- Overload:在本类中,方法名相同,参数列表不同,与返回值无关。
- this和super:
- this:代表当前类对象,用于访问当前类的成员变量和方法。
- super:代表父类,用于访问父类的成员变量和方法,以及在子类的构造方法中调用父类的构造方法。
- Override和Overload:
继承的好处与弊端:
- 好处:
- 提高代码复用性:子类可以继承父类的属性和方法,避免重复代码。
- 提高代码维护性:通过继承关系,可以更容易地理解和维护代码。
- 类与类之间的关系为多态前提:继承是实现多态的基础。
- 弊端:
- 增强类耦合性:子类依赖于父类的实现,父类变化可能导致子类也需要变化。
- 打破封装性:子类可以访问父类的私有成员,破坏了封装性。
- 影响代码结构:过多的继承可能导致类层次结构复杂,难以维护。
- 好处:
② Java经典面试题-面向对象三大特性
Java面向对象三大特性包括:封装、继承、多态。
1. 封装 定义:封装是将数据和基于数据的操作包装在一起,形成一个不可分割的独立实体。数据被隐藏在抽象数据类型内部,只通过对外提供的接口与外部发生联系。用户无需了解对象内部细节,仅通过接口来操作对象。 优点: 降低耦合度:封装使得类的内部实现与外部使用分离,减少了类之间的依赖。 提高代码的可读性和可维护性:通过封装,类的职责更加明确,代码结构更加清晰。 隐藏实现细节,增强代码安全性:封装保护了类的内部数据不被外部直接访问和修改,从而增强了代码的安全性。
2. 继承 定义:继承实现“是是一种”关系,如猫继承自动物。继承应遵循里氏替换原则,子类可以替换父类使用。 优点: 代码复用:通过继承,子类可以复用父类的代码,减少重复代码。 层次结构清晰:继承使得类的层次结构更加清晰,易于理解和维护。 易于维护:当父类代码发生变化时,子类可以自动继承这些变化,减少了维护成本。 特点: 子类在初始化前需先完成父类数据初始化,可通过super或this进行构造方法调用。 成员变量关系在子类中查找顺序遵循先局部、后成员、再父类的规则。 类中成员变量初始化分为类初始化和子类初始化。成员方法的关系通过重写实现,遵循方法重写规则。
3. 多态 定义:多态是指在不同时间表现不同状态,在Java中,多态分为编译时多态和运行时多态。运行时多态要求子类可以替换父类,实现方法重写。 优点: 提高代码的可维护性:多态使得代码更加灵活,易于维护和扩展。 提高代码的扩展性:通过多态,可以在不修改现有代码的情况下添加新的功能。 注意事项: 多态可能限制访问子类特有的功能,需要通过强制类型转换、方法重写、使用泛型等方式来访问子类特有的功能。 在多态使用中应注意避免隐藏关键实现,确保多态的正确性和灵活性。
③ 阿里P9整理Java 高频面试题聊一聊 JUC 下的 LinkedBlockingQueue
LinkedBlockingQueue是Java并发包中的一个线程安全的双端队列,它继承自AbstractQueue类并实现了BlockingQueue接口。其主要特性和实现方式如下:
线程安全:
- 允许线程安全地向队列中添加或删除元素。这意味着多个线程可以同时访问队列,而不会导致数据不一致或竞争条件。
存储顺序:
- 队列中的元素按插入顺序进行存储。这保证了元素的先进先出顺序。
容量设置:
- 队列的容量可以设置。这允许开发者根据实际需求来限制队列的大小,从而避免内存溢出等问题。
等待和通知操作:
- 支持元素的等待和通知操作。当队列满时,尝试添加元素的线程会等待;当队列空时,尝试获取元素的线程也会等待。一旦条件满足,相应的线程会被唤醒并继续执行。
常用方法:
- put方法:用于将元素添加到队列中。如果队列未满,则直接添加;如果队列已满,则线程等待直到有空位。
- offer方法:类似于put方法,但不阻塞线程。如果队列已满,则返回false。
- take方法:用于从队列中获取元素。如果队列为空,则线程等待直到有元素可用。
- poll、peek等方法:提供不同类型的获取操作,如poll方法在队列为空时返回null,而peek方法返回队列头部的元素但不移除它。
总结:LinkedBlockingQueue是一个功能强大的并发队列,它提供了线程安全的元素添加和获取操作,并支持多种等待和通知机制。通过理解其内部机制,开发者可以更有效地使用并发技术,提高程序的性能和稳定性。
④ 求java工程师面试题
1.介绍一下你自己吧 ——简单说说你的大学、专业、特长、志向
2.你了解我们公司的工作吗?有兴趣吗?——对你要做的工作给出理解同时用事实说明自己有兴趣
3.你经常到java论坛吗?最喜欢哪一个?——最好说CSDN和ITEYE,别人一听就知道你很有研究。
4.你会考研吗?你怎么看待加班和跳槽?——看你是不是能在公司待下去,一定要说自己不考研,专心在公司好好干,踏实干,如果你说“人总是往高处走的”别人就怀疑你干一年就跳槽!
5.剩下是我总结的经常出现的面试题,答案你可以在这里继续提问。
1. 写出你最常用的5个类和5个接口。
2. 写出你所知道的排序算法。并用Java实现一个快速排序。
3. 实现4个线程,其中2个每次加1,另外2个每次减1。
4. 写出你最常遇到的5个异常,并简单描述它们发生在什么情况下。
5. 用单例模式实现一个线程池。
6. 如何存储一个整数,这个整数的长度大于2的64次方。
7. 写一段代码,当用户输入a,在屏幕上显示b,在D:\test.txt中写入c。
8. Swing组件用的进程条是什么类?
9. JSP里面哪个内置对象可以提交客户的请求?
10. 什么是同步?实现线程同步的关键字是什么?如果已经出现死锁,你如何解决?
⑤ 面试java工程师,面试官一般问什么问题
其实每家公司面试侧重点是不一样的,所以会出现不同的面试题,所以在平时的工作中就可以不断总结积累,给你分享面试题基础总结:
1、 JVM结构原理、GC工作机制详解
答:具体参照:JVM结构、GC工作机制详解,说到GC,记住两点:1、GC是负责回收所有无任何引用对象的内存空间。 注意:垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身,2、GC回收机制的两种算法,a、引用计数法 b、可达性分析算法( 这里的可达性,大家可以看基础2 Java对象的什么周期),至于更详细的GC算法介绍,大家可以参考:Java GC机制算法
2、Java对象的生命周期
答:创建阶段 、 应用阶段 、不可见阶段 、不可达阶段 、收集阶段 、终结阶段、 对象空间重新分配阶段等等,具体参照:Java 对象的生命周期
3、Map或者HashMap的存储原理
答:HashMap是由数组+链表的一个结构组成,具体参照:HashMap的实现原理
4、当数据表中A、B字段做了组合索引,那么单独使用A或单独使用B会有索引效果吗?(使用like查询如何有索引效果)
答:看A、B两字段做组合索引的时候,谁在前面,谁在后面,如果A在前,那么单独使用A会有索引效果,单独使用B则没有,反之亦然。同理,使用like模糊查询时,如果只是使用前面%,那么有索引效果,如果使用双%号匹配,那么则无索引效果
5、数据库存储日期格式时,如何考虑时区转换问题?
6、JavaObject类中有哪些方法?
7、HTTP协议,GET和POST 的区别