福利待遇

方向:面试的是金融科技部,做信贷核心的,富e贷
薪资福利: 我当时拿的15k(3年),行内编制,五险一金最高比例,三个月年终,包三餐
环境:洪湖东路地铁出站5分钟到公司,公司大楼比较大气,环境也不错,工位较小,美女较多 doge.jpg
工作强度: 正常8点半上班,我们团队下班基本都是在7点左右

综合面试难度在重庆:中高

四道算法题:

简单排序
package com.moonxy.fumin;

/**
 * @author: MoonXy
 * @Date: 2021/7/8 11:14 上午
 * @Email: 945561359@qq.com
 **/
public class Sort {


    public void  sorting(int[] nums,int l,int h){

        if (l>= h){
            return;
        }
        int depart  = depart(nums, l, h);
        sorting(nums, l, depart-1);
        sorting(nums,depart+1,h);

    }

    /**
     * @Desc: 分隔参数
     * @Author: moonxy
     * @Date: 11:16 上午 2021/7/8
     * @Param:
     * @Return:
     **/
    public int depart(int[] nums, int l, int h){
        int base = nums[h];

        while (l < h){
            while (l< h && nums[l] <= base ){
                l++;
            }
            if (l < h ){
                change(nums,l,h);
                h--;
            }
            while (l < h && nums[h] >= base){
                h--;
            }
            if (l < h){
                change(nums, l, h);
                l++;
            }
        }
        return h;
    }


    /**
     * @Desc: 交换
     * @Author: moonxy
     * @Date: 11:16 上午 2021/7/8
     * @Param:
     * @Return:
     **/
    public void change(int[] nums, int i, int j){
        if (i == j){
            return;
        }
        nums[i] = nums[i] ^ nums[j];
        nums[j] = nums[i] ^ nums[j];
        nums[i] = nums[i] ^ nums[j];
    }

}

删除链表

package com.moonxy.fumin;

/**
 * @author: MoonXy
 * @Date: 2021/7/8 10:26 上午
 * @Email: 945561359@qq.com
 **/
class Solution2 {

    class ListNode {

        int val;
        ListNode next;

        ListNode() {
        }

        ListNode(int val) {
            this.val = val;
        }

        ListNode(int val, ListNode next) {
            this.val = val;
            this.next = next;
        }
    }

    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode dum = new ListNode(0,head);
        ListNode now = dum;
        int length = getLength(now);
        for (int i = 1; i < length - n +1 ; ++i) {
            now = now.next;
        }
        now.next = now.next.next;
        return dum.next;
    }

    public int getLength(ListNode head) {
        int length = 0;
        while (head != null) {
            ++length;
            head = head.next;
        }
        return length;
    }
}

实现LRU缓存

package com.moonxy.fumin;

import java.util.HashMap;

/**
 * @author: MoonXy
 * @Date: 2021/7/1 3:03 下午
 * @Email: 945561359@qq.com
 **/
public class LRU {

    class Node {
        private int key;
        private  int value;
        private Node pre;
        private  Node next;
        public Node (){};
        public Node (int inKey,int inVlaue){
            this.key = inKey;
            this.value = inVlaue;
        }
    }

    private int size;
    private Node head;
    private  Node tail;
    private HashMap<Integer,Node> map = new HashMap<Integer, Node>();
    private int cap;

    public LRU (int cap){
        this.cap = cap;
        this.size = 0;
        head = new Node();
        tail = new Node();

        // 控制边界
        head.next = tail;
        tail.pre = head;
    }


    public Integer get(int key){
        Node node = map.get(key);
        if (node == null){
            return  -1;
        }
        // 存在值 移动到头部
        removeNode(node);
        addHead(node);
        return node.value;
    }

    public void put(int k,int v){
        Node putNode = new Node(k,v);
        // 如果值不存在
        Node node = map.get(k);
        if (node == null){
            // 新建一个node节点 存入双链表
            addHead(putNode);
            map.put(k,putNode);
            ++size;
            if (size > cap){
                // 移除末尾的元素
                map.remove(tail.pre.key);
                removeNode(tail.pre);
                --size;
            }
        } else {
            // node已经存在 更新值即可
            node.value = v;
            // 移动到头部
            removeNode(node);
            addHead(node);
        }
    }

    public void removeNode(Node node){
        node.pre.next = node.next;
        node.next.pre = node.pre;
    }

    public void  addHead(Node putNode ){
        head.next.pre = putNode;
        putNode.next = head.next;
        head.next = putNode;
        putNode.pre = head;

    }
}

有一个文本文件,里边有十亿条数据,实现一个算法,可以不借助数据库进行类似es的查询

有一说一,我个人觉得这道题有点难,所以我当时没做出来,目前也没想到纯代码能实现的方法,其局限有如下:

  1. 内存塞不下10亿数据
  2. 实现检索算法难度较大
  3. 对文本流的读写目前我只听说过svc能处理这么大数据的文本
Last modification:March 18, 2022
If you think my article is useful to you, please feel free to appreciate