福利待遇
方向:面试的是金融科技部,做信贷核心的,富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的查询
有一说一,我个人觉得这道题有点难,所以我当时没做出来,目前也没想到纯代码能实现的方法,其局限有如下:
- 内存塞不下10亿数据
- 实现检索算法难度较大
- 对文本流的读写目前我只听说过svc能处理这么大数据的文本