不敢相信,字节二面问的这么简单?

2023-12-14 16:30:15 浏览数 (1)

哈喽~,大家好,我是千羽。

下面分享我认识的一位24届大佬华中科技大学985硕,字节二面。

问了常规基础和面试题,总体上不难。


  • 1、如何使用MyISAM引擎(建表时指定engine为MyISAM)
  • 2、Linux下如何查找CPU占用率最高的进程(top指令)
  • 3、编程题:实现带有TTL的LRUCache(太简单了)

1、如何使用MyISAM引擎(建表时指定engine为MyISAM)

使用MyISAM引擎建表需要指定engine为MyISAM。以下是使用MyISAM引擎建表的一般步骤:

  1. 打开MySQL命令行客户端或MySQL管理工具,连接到相应的数据库。
  2. 创建表时,使用CREATE TABLE语句并指定engine为MyISAM。例如:
代码语言:javascript复制
CREATE TABLE my_table (  
  id INT(11) NOT NULL AUTO_INCREMENT,  
  name VARCHAR(50) NOT NULL,  
  age INT(11),  
  PRIMARY KEY (id)  
) ENGINE=MyISAM;

在上述示例中,创建了一个名为"my_table"的表,包含id、name和age字段。id字段为主键,engine为MyISAM。

  1. 创建完表后,可以使用SHOW CREATE TABLE语句查看表的详细信息,包括所使用的引擎。例如:
代码语言:javascript复制
SHOW CREATE TABLE my_table;

这将显示包含表的所有详细信息的查询结果,包括engine为MyISAM。

请注意,使用MyISAM引擎的表不支持事务和外键约束。此外,MyISAM表在系统发生崩溃时可能会导致数据损坏,因此需要定期备份数据。在使用MyISAM引擎时,建议对表进行优化以提高性能,例如使用OPTIMIZE TABLE语句。

2、Linux下如何查找CPU占用率最高的进程(top指令)

在Linux下,可以使用top命令来查找CPU占用率最高的进程。top命令会实时显示系统中各个进程的资源占用状况,并按照CPU占用率的高低进行排序。

要使用top命令,请按照以下步骤操作:

  1. 打开终端(Terminal)。
  2. 在终端中输入以下命令:top

然后按回车键。

这会启动top命令,并显示系统中各个进程的CPU占用率等信息。

top命令的界面中,你会看到各个进程按照CPU占用率的高低排列。默认情况下,top命令会按照CPU占用率排序,占用CPU资源最多的进程会排在最前面。

你可以使用键盘上的方向键来浏览不同的进程列表,按下q键退出top命令。

如果你想在top命令中查看其他资源的使用情况,可以使用以下命令:

  • 要查看内存使用情况,按下M键。
  • 要查看交换空间使用情况,按下S键。
  • 要查看磁盘I/O情况,按下D键。

3、编程题:实现带有TTL的LRUCache(太简单了)

在Java中实现带有TTL(Time To Live)的LRU(Least Recently Used)缓存,我们可以使用Java标准库中的LinkedHashMapLinkedHashMap 是一个带有链接和排序的散列映射,它同时具有LRU和时间戳特性。下面是一个简单的实现:

代码语言:javascript复制
import java.util.LinkedHashMap;  
import java.util.Map;  
import java.util.concurrent.TimeUnit;  
  
public class LRUCacheWithTTL<K, V> {  
    private final int capacity;  
    private final long ttl;  
    private final Map<K, ValueHolder<V>> cache;  
  
    public LRUCacheWithTTL(int capacity, long ttl) {  
        this.capacity = capacity;  
        this.ttl = ttl;  
        this.cache = new LinkedHashMap<>(capacity, 0.75f, true) {  
            protected boolean removeEldestEntry(Map.Entry<K, ValueHolder<V>> eldest) {  
                if (size() > capacity) {  
                    expireOldestEntry();  
                    return true;  
                } else {  
                    return false;  
                }  
            }  
        };  
    }  
  
    public synchronized V get(K key) {  
        ValueHolder<V> valueHolder = cache.get(key);  
        if (valueHolder == null) {  
            return null;  
        } else {  
            valueHolder.touch();  
            return valueHolder.getValue();  
        }  
    }  
  
    public synchronized void put(K key, V value) {  
        if (cache.containsKey(key)) {  
            cache.get(key).setValue(value);  
        } else {  
            ValueHolder<V> valueHolder = new ValueHolder<>(value, System.currentTimeMillis());  
            cache.put(key, valueHolder);  
            expireOldestEntry();  
        }  
    }  
  
    private void expireOldestEntry() {  
        ValueHolder<V> eldest = null;  
        long now = System.currentTimeMillis();  
        for (ValueHolder<V> valueHolder : cache.values()) {  
            if (eldest == null || valueHolder.getTimestamp() < eldest.getTimestamp()) {  
                eldest = valueHolder;  
            }  
        }  
        if (eldest != null && now - eldest.getTimestamp() > ttl) {  
            cache.remove(eldest.getKey());  
        }  
    }  
}

这里我们定义了一个内部类ValueHolder来保存值和时间戳:

代码语言:javascript复制
public class ValueHolder<V> {  
    private V value;  
    private long timestamp;  
  
    public ValueHolder(V value, long timestamp) {  
        this.value = value;  
        this.timestamp = timestamp;  
    }  
  
    public V getValue() {  
        return value;  
    }  
  
    public void setValue(V value) {  
        this.value = value;  
    }  
  
    public long getTimestamp() {  
        return timestamp;  
    }  
}
  • 原文链接:https://github.com/warthecatalyst/What-to-in-Graduate-School/blob/main/秋招的面经/华科计科第二人的秋招报告.md

0 人点赞