Java工程师
约 789 字大约 3 分钟
Java工程师
岗位年限:
无经验
面试时间:
2023年12月6日17点
面试方式:
线上
面试问题:
序号 | 问题 | 解答 | 备注 |
---|---|---|---|
1 | Redis数据类型 | String、Hash、List、Set、ZSet | |
2 | Zset应用场景 | 排行榜、好友关系链表。 | |
3 | 项目中哪些场景用到了Redis | 存储客户标签和字典 | |
4 | Redis缓存满了怎么实现清理 | 设置过期时间和自动清理 | 不停追问,应该是没答到点上 |
5 | MQ的特性 | 消息确认机制、死信队列、延迟任务分别解释了下是什么东西 | 追问,还有呢,答不知道 |
6 | 举例说明MQ的应用场景 | 一个婚庆系统,短时间内有大量的订单,需要更改婚车司机的接单状态,这个场景可以使用 | |
7 | 其中MQ起什么作用 | 优化系统性能,保证所有请求都被处理 | |
8 | MQ的缓存满了的话怎么清理 | 没答上来 | |
9 | Collection有哪些实现类 | list和set,list有linkedList、ArrayList;set有HashSet、TreeSet | |
10 | HashSet、TreeSet区别 | HashSet是无次序的,可以快速查找;TreeSet是保留次序的Set | |
11 | 对HashMap的了解 | 数据结构、扩容机制都详细回答了 | 追问,应该是没说全 |
12 | 多线程用于解决什么问题 | 在请求较多时,使用多线程将这些请求分开处理,提高系统的并发能力和性能 | |
13 | 怎么实现线程同步 | 没答上来 | 面完查了一下发现答案是synchronized 和 Lock。 |
14 | 对线程池的了解 | 管理和复用线程的机制。当线程池中的核心线程都在执行任务时,如果有新的任务提交进来,线程池会先尝试将任务放入任务队列中(如果队列未满的话),以等待核心线程空闲时执行。如果任务队列也已经满了,那么线程池就需要考虑是否要创建额外的线程来处理新的任务。当线程数达到了线程池所允许的最大线程数时,那么线程池就会采取拒绝策略来拒绝新的任务提交。 | 又问了核心线程、任务队列、最大线程数都是什么来决定的,没答上来。 |
`
// 给你一个单向链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
// 输入:head = [1,2,3,4,5], n = 2
//
// 输出:[1,2,3,5]
// * Definition for sigly link list.
public class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode list = new ListNode(0);
list.next = head;
ListNode fast = list;
ListNode slow = list;
//fast指针先走n步
for(int i=1;i<n+1;i++) {
fast = fast.next;
}
//fast和slow指针同时移动,直到fast到达尾部
while(fast != null) {
fast =fast.next;
slow =slow.next;
}
//删除倒数第n各结点
slow.next =slow.next.next;
return list.next;
}
}
/*错误: 找不到或无法加载主类 demo1.Practice原因: java.lang.ClassNotFoundException: demo1.Practice (Practice是原来的类名,改了一下类名和文件名写的。后面让讲思路差点翻车)**/
`