字节跳动南京——后端基础架构 面经

字节跳动南京——后端基础架构 面经

一面

聊天,会什么技术、语言。我们这部门主要用GO语言开发,愿意学吗。
问问题:

  • Java线程池参数?
  • Java concurrent包用过吗?
    • concurrentHashMap结构原理
    • concurrentHashMap如何求size
  • JVM内存模型
    • 本地方法栈是指什么:虚拟机栈为虚拟机执行Java方法服务,而本地方法栈则为使用到的本地操作系统(Native)方法服务
  • JVM垃圾回收算法
    • survivor0 survivor1有区别吗
    • 为什么新生代用复制方法不用标记删除?(对象生命周期短,回收数量多,效率会变低)

算法题:LRU(最近最少用)模型实现:

感觉是很有意义的一个题目,先问你想用什么数据结构,引导你帮助想好实现思路,然后自己实现出来。下面是自己当场写的代码,花了很久,思路就是用双向链表实现LRU插入更新问题,用HashMap实现查询缓存对象功能。时间有点仓促,代码风格有点不好hhh

import java.util.Scanner;
import java.util.HashMap;

public class Main {
    private HashMap<String, char> cache = new HashMap<~>();
    private LinkNode head = null;
    private LinkNode tail = null;
    private static final int MAX_SIZE = 5;
    public void insert(String key, char obj){
        if(cache.size() == MAX_SIZE){
            String keyToDel = head.getKey();
            head = head.next;
            cache.delete(keyToDel);
        }
        if(!head){
            LinkNode node = new LinkNode(key);
            head = node;
            tail = node;
        }else{
            LinkNode node = new LinkNode(key);
            node.prev = tail;
            tail.next = node;
        }
        cache.put(key, obj);
    }
    public char get(String key){
        char obj = cache.get(key);
        LinkNode p = head;
        while(p.getKey() != key){
            p = p.next;
        }
        if(p == tail){
            p.next = head;
            p.prev.next = null;
            p.prev = null;
            head.prev = p;
            head = p;
        }else if(p == head){
            ;
        }else{
            p.prev.next = p.next;
            p.next.prev = p.prev;
            p.next = head;
            p.prev = null;
            head = p;
        }
        return obj;
    }
    
    
    public class LinkNode{
        private String key;
        public LinkNode next;
        public LinkNode prev;
        public LinkNode(String key){
            this.key = key;
            this.next = null;
            this.prev = null;
        }
        public String getKey(){
            return this.key;
        }
    }
    public static void main(String[] args) {
        //Scanner in = new Scanner(System.in);
        //int a = in.nextInt();
        //System.out.println(a);
        System.out.println("Hello World!");
    }
}

持续更新

你可能感兴趣的:(字节跳动南京——后端基础架构 面经)