滴滴面经 社招 6年经验
1792
发布于 未知归属地

滴滴一面:共计1小时。

问题包括常见八股文+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小时。

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.做架构师需要具备哪些方面的能力?

滴滴三面 hrbp面试 30min

聊过往项目经历,职业规划等等

评论 (6)