sirwsl的博客

最近的辞职与笔试

故事

此刻是2021年11月18日23点43分,刚刚在酒店加班结束,为什么在酒店呢?因为在出差,为什么加班呢?因为工作做不完,加班也还行?为什么写博客呢?骗点访客,再者好久没写了,写的内容是啥?链表闭环判断与构建环形链表。

故事继续,因为上个周裸辞,一些原因就不说了,总之现在还在乖乖上班,为什么?问题解决咱就继续干,对事不对人嘛。提出裸辞请求后,咱也不慌,先投个阿里。

之后,本来都准备好好继续干,阿里hr打电话来预约面试(还没决定继续干之前)然后就同意了,约定面试后,我就没管。然后某个约定时刻面试电话打过来,好家伙,面了110多分钟,全在聊天,聊项目、思路、解决方式。然后最后还问了个开放性问题——超市付款要排队,银行办业务,为什么是取票,为什么不排队?当时我一黑人问号脸?what?绝绝子,自己对生活还是观察不够

让我没想到的是他们痛改八股文的面试形式,全是聊思维、未来规划、以后发展、项目、解决思路,也不知道是不是刷KPI,总之这聊天还是聊了110多分钟,我都聊到怀疑人生了,后来让我反问。

咱也是个老实人有啥问啥,就问了为啥不是八股文了,而更多的是开拓性问题与思维、发展的提问,具体的回答嘛?留点悬念、大家自己去猜去。

结束后收到邮件,让做两个题目,结束后再二面,好了第一题是这样的

题目

一个单向链表,如何判断是否有环?
注意:有设计思路、非伪码且可执行。并提供完整的测试用例。

实现思路

问啥答啥、按要求做,需要提供完整测试用例,也就是说除了判断链表是否有环,还需要做的事
1:创建个链表
2:链表填充值
3:需要构建环形列表
4:测试
所以呢,理解题目要透彻,咱也不敢说多透彻,但也算是按要求做了,具体实现如下,所作的工作:
创建链表Node类,创建链表(无环、有环)
写测试用例、测试

我的作答

package linkedList;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 链表闭环
 * @author sirwsl
 */
public class LinkedListClosedLoop {
    public static void main(String[] args) {
        //测试用例 null
        System.out.println(isClosedLoop(new Node()));
        //测试用例 1
        Node node = Node.builderNode(new ArrayList<>(Arrays.asList(1)));
        System.out.println(isClosedLoop(node));
        //测试用例1->3->5
        node = Node.builderNode(new ArrayList<>(Arrays.asList(1,3,5)));
        System.out.println(isClosedLoop(node));
        //测试用例1->2->3->4->5->6->7
        node = Node.builderNode(new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7)));
        System.out.println(isClosedLoop(node));
        //测试用例 n
        List<Integer> list = new ArrayList<>(512);
        for (int i = 0; i < 400; i++){
            list.add(i);
        }
        node = Node.builderNode(list);
        System.out.println(isClosedLoop(node));

        //测试用例 1->1          头环  true
        node = Node.builderNode(new ArrayList<>(Arrays.asList(1,1)));
        System.out.println(isClosedLoop(node));
        //测试用例 1->2->1       首+N+环   true
        node = Node.builderNode(new ArrayList<>(Arrays.asList(1,2,1)));
        System.out.println(isClosedLoop(node));
        //测试用例 1->2->2       尾环    true
        node = Node.builderNode(new ArrayList<>(Arrays.asList(1,2,2)));
        System.out.println(isClosedLoop(node));
        //测试用例 1->2->3->2    尾+N+环  true
        node = Node.builderNode(new ArrayList<>(Arrays.asList(1,2,3,2)));
        System.out.println(isClosedLoop(node));
        //测试用例 1->2->3->4->5->6->3  尾+N+环  true
        node = Node.builderNode(new ArrayList<>(Arrays.asList(1,2,3,4,5,6,3)));
        System.out.println(isClosedLoop(node));
        //测试用例 n+1
        list.add(300);
        node = Node.builderNode(list);
        System.out.println(isClosedLoop(node));
    }

    /**
     * 比较是否有闭环
     * 快慢指针,如果相遇则表示有环,如果快指针.next == null 则无环
     */
    public static boolean isClosedLoop(Node node){
        if (node ==null || node.getNext() ==null){
            return false;
        }
        Node slow = node;
        Node fast = node;
        //慢指针一步步走 快指针两步一起
        while (fast!=null && fast.next != null){
            slow = slow.getNext();
            fast = fast.getNext().getNext();
            if (slow == fast){
                return true;
            }
        }
        return false;
    }

    /**
     * 链表
     */
    public static class Node{
        private Integer value;
        private Node next;

        public Node() {
        }

        public Node(Integer value) {
            this.value = value;
            this.next = null;
        }


        //构建
        public static Node builderNode(List<Integer> num){
            if (num.size() == 0){
                return null;
            }
            List<Integer> alreadyAdd = new ArrayList<>();
            Node head = new Node(num.get(0));
            if (num.size()==1){
                return head;
            }
            alreadyAdd.add(num.get(0));
            num.remove(0);


            for(Integer li: num){
                Node node = head;
                Node temp = head;
                if (alreadyAdd.contains(li)) {
                    while (node.getNext() != null) {
                        if (node.getValue()==li){
                            temp = node;
                        }
                        node = node.getNext();
                    }
                    node.setNext(temp);
                    break;
                } else {
                    while (node.getNext() != null) {
                        node = node.getNext();
                    }
                    node.setNext(new Node(li));
                    alreadyAdd.add(li);
                }
            }
            return head;
        }

        public Integer getValue() {
            return value;
        }

        public void setValue(Integer value) {
            this.value = value;
        }

        public Node getNext() {
            return next;
        }

        public void setNext(Node next) {
            this.next = next;
        }
    }
}

结束l 结束,凑字数也差不多,睡觉了,睡觉了


标题:最近的辞职与笔试
作者:sirwsl
地址:https://www.wslhome.top/articles/2021/11/18/1637249223236.html