Java 后端开发人员职位面试的 10 个必问问题
来源:Medium 文章作者分享了他通过多次 Java 后端开发人员职位面试的个人经历。 面试往往很困难。因此,在面试之前了解问题是个好主意。由于过去几个月我经历了多次采访,现在我可以与大家分享一些我最常遇到的问题。我申请了一个具有 1-3 年经验的后端 Java 开发人员的职位。1.Java及其特点
面试官通常会询问你正在使用的Java的最新版本及其功能。我主要使用 Java 8,经常被问到有关 API 流、lambda 表达式、函数式接口等问题。面试官通常会询问这些功能以及基于它们的应用程序。2.HashMap的内部工作原理
我参加的大部分面试都有这个问题。在解释了它的工作原理之后,一些人询问了默认的 HashMap 大小,另一些人询问了更多有关 Java 集合的信息。3. 错误和异常
错误和异常之间的区别是面试中很常见的问题。还问了什么是检查异常和非检查异常。4. 多线程
多线程对于面试来说是一个非常重要的概念,通常会问有关 Thread、Runnable 类、它们之间的差异以及两者的用例的问题。我还建议你研究一下Executor框架。5. 字符串和不变性
大多数面试官询问字符串类中的不变性,有时还会询问字符串生成器和字符串缓冲区(如果您说它们是可变的替代字符串)。有时他们会问如何创建一个不可变的类。6. 垃圾收集
Java 中的垃圾收集是面试准备中非常重要的话题。有时会询问有关垃圾收集生命周期和垃圾收集的不同方法的问题。7. Java中的比较器和Comparable
常见的问题是在 Java 中什么时候使用 Comparator 和 Comparable 以及它们之间有什么区别。8.Java设计模式
当谈到 Java 设计模式时,问题通常从当前项目中使用的不同模式开始。有时会询问何时使用它们中的每一个。还询问了有关在 Java 中创建不可变类的问题。9. 最终、最后和最终确定
关键字final、finally 和finalize 之间的区别是面试中很常见的问题。作为一个附加问题,他们询问使用每个关键字的选项。10. Java 中的序列化和反序列化
序列化和反序列化是准备面试的一个非常重要的话题。通常会询问用例,有时会询问休眠和 JPA。如果您即将面临 Java 服务器端开发人员职位的面试,希望准备此处提到的问题会对您有所帮助。在 Java 中实现队列
来源: Faun.pub 感谢这份出版物,您将学习如何在 Java 中实现队列。什么是队列?
队列是一种线性数据结构,其元素访问顺序按照“先进先出”原则进行。这意味着先插入的元素将先被删除。也就是说,元素按照插入的顺序被删除。队列由两部分组成:Front(前面,删除元素的地方)和Back(后面,插入元素的地方)。 常见的队列操作: 队列中常用的操作如下:- 入队- 从队列末尾添加一个元素。
- 出队- 从队列头部删除一个元素。
- Front/Peek - 返回队列前面元素的值,而不从队列中排除(删除)该元素。
- IsEmpty - 检查队列是否为空。
- IsFull - 检查队列是否已满。
- 显示- 打印队列中的所有项目。
代码实现:
public class Example {
public static void main(String[] args) {
Queue myQueue = new Queue();
myQueue.enQueue(3);
myQueue.enQueue(2);
myQueue.enQueue(1);
myQueue.display();
myQueue.deQueue();
myQueue.peak();
}
}
class Queue {
int queueLength = 3;
int items[] = new int[queueLength];
int front = -1;
int back = -1;
boolean isFull(){
if(back == queueLength - 1){
return true;
} else {
return false;
}
}
boolean isEmpty(){
if(front == -1 && back == -1){
return true;
} else {
return false;
}
}
void enQueue(int itemValue) {
if(isFull()){
System.out.println("Queue is full");
} else if(front == -1 && back == -1){
front = back = 0;
items[back] = itemValue;
} else{
back++;
items[back] = itemValue;
}
}
void deQueue(){
if(isEmpty()){
System.out.println("Queue is empty. Nothing to dequeue");
} else if (front == back){
front = back = -1;
} else {
front++;
}
}
void display(){
int i;
if(isEmpty()){
System.out.println("Queue is empty");
} else {
for(i = front; i <= back; i++){
System.out.println(items[i]);
}
}
}
void peak(){
System.out.println("Front value is: " + items[front]);
}
}
解释:
-
首先我们创建变量及其参数。我们使用 3 作为可以在数组中排队的最大元素数。我们将正面(Front)和背面(Back)的初始索引设置为-1。
-
接下来我们将定义isEmpty和isFull的功能。
-
isEmpty()方法非常简单,对于isFull()方法,数组中允许的最大元素数是 3,但是数组中的三个元素不是用索引 3 表示,而是用 2 表示,因为第一个索引是 0。所以最大长度负 1 给出索引 2,它是数组中的第三个单元格。当所有单元格都以直到第三个单元格的值排队时,数组已满。
-
enQueue - 如果数组已满,我们会收到一条消息,表明数组已满。如果 Front 和 Back 部分均为 -1,则该元素将分配给索引 0 处的第一个单元格 - 否则将插入该值并递增后面的位置。
-
deQueue - 如果数组为空,我们会收到相应的消息。如果 Front 部分与 Back 部分相遇,那么我们将它们的索引重置回 -1。如果最后两个条件不适用,则 Front 会增加。
-
display - 如果数组不为空,我们将迭代并打印所有元素。
-
Peak - 这只是打印前导元素的值。
GO TO FULL VERSION