问题包括常见八股文+1道算法题。
1.自我介绍 介绍一个项目 详细聊项目 大概10min 由于保密要求就不分享了。
1.如何理解redis是单线程的?为什么redis是线程安全的?
2.项目中利用redis做了哪些工作?
3.缓存的一致性如何处理?redis是强一致性的吗?满足了CAP中的拿两种?
4.解决缓存一致性三种方案:旁路缓存、读写穿透、异步写入的具体流程
5.为什么会存在线程安全问题?从根本原因上解释。
6.算法题 20min 反转链表 例如:1 2 3 4 5 反转后为: 5 3 4 1 2
思路:先两两反转 变成2 1 4 3 5 再整体反转 变成 5 3 4 1 2
class ListNode {
int val;
ListNode next;
public ListNode(int val) {
this.val = val;
}
public ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}
public class Solution {
static ListNode reverseList(ListNode head) {
ListNode prev = null, cur = head, temp = null;
while (cur != null) {
temp = cur.next;
cur.next = prev;
prev = cur;
cur = temp;
}
return prev;
}
static ListNode reverseTwoNode(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode next = head.next;
ListNode newNode = reverseTwoNode(next.next);
next.next = head;
head.next = newNode;
return next;
}
//反转链表 先两两节点反转,再整体反转
//例如 1 2 3 4 5 反转后为: 5 3 4 1 2
static ListNode reverse(ListNode node) {
ListNode result = reverseTwoNode(node);//两两反转
return reverseList(result);//整体反转
}
public static void main(String[] args) {
ListNode node5 = new ListNode(5);
ListNode node4 = new ListNode(4, node5);
ListNode node3 = new ListNode(3, node4);
ListNode node2 = new ListNode(2, node3);
ListNode node1 = new ListNode(1, node2);
ListNode result = reverse(node1);
System.out.println(result);
}
}1.介绍项目,问了一些项目相关问题。大概半小时,其中涉及到具体的工作内容,由于保密要求就不分享了。
2.设计一个抢红包的方法并进行代码实现。
首先设计好方法 static List redBag(double total, int num)
入参total为总金额,num为几个红包,返回的list为红包列表,list的大小等于num
要求:要保证每个人都能抢到红包,且红包被抢光。
比如10个人抢100元的红包,需要保证10个人抢完10个红包之后红包被抢光,也不能抢到第9个人的时候没钱了。
思路:先求出每个人平均能抢到的红包avg,然后两人一组,一个人抢到avg+random(),
另一个人抢到avg-random(),这样两个人一共抢到的就是2*avg,for循环5次,就把10个红包都抢光了。
然后进行代码实现:
static List<Double> redBag(double total, int num) {
List<Double> result = new ArrayList();
double avg = total / num;
for (int i = 0; i < num / 2; i++) {
double amount = avg * Math.random();
result.add(avg + amount);
result.add(avg - amount);
}
if (num % 2 == 1) {//处理奇数个红包
result.add(avg);
}
return result;
}3.哪些场合下需要建数据库的索引?建索引有哪些注意的地方?
4.http和https的区别和联系。
5.说出对于进程和线程的深入理解。
6.职业规划是怎么样的?
7.做架构师需要具备哪些方面的能力?
聊过往项目经历,职业规划等等