字节跳动 面试 复盘 回顾 2021 过客局

本文是作者对字节跳动Java后端面试的复盘,分享了面试中关于数据库索引设计、哈希算法应用以及内存管理和编程题的思考。面试体验表明,扎实的复习、刷题与实践是提升面试成功率的关键。
摘要由CSDN通过智能技术生成

面了字节的Java后端,其实面试之前是有点慌的,最近一直在准备论文,基本没怎么复习,偶尔帮同学做做题会看一看,基本上都是用到了再去查资料学习。所以字节这次面试称为过客局也不为过。面试完心里拔凉拔凉的,这件事告诉我们的教训是:第一还是要认真复习,多刷刷题,多练练手,编程题因为用了牛客网,根本没用提醒和代码补全,我直接数组定义都没写对;第二就是简历问的很细,最好及时复盘一下,很多知识重在平时积累。下面回顾一下面试问题:

1.先问用过什么数据库,然后问到数据库的索引,让根据抖音的关注列表设计一个数据库结构

当时回答了Mysql,介绍了一下项目用的索引,因为使用的不是很多也差不多忘记了,所以面试官举了个例子让我分析。抖音的关注列表我当时是设计了关注用户的ID和被关注用户的ID、头像、昵称和关注时间戳这几个。考虑到两个ID都是外键,查询需要联表,所以加了头像和昵称,也说了这样会快但是会造成信息不一致。然后面试官问如何加索引,希望得到时间戳排序的结果。

先来科普,索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。索引分为聚簇索引和非聚簇索引两种,聚簇索引 是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。根据数据库的功能,可以在数据库设计器中创建三种索引:唯一索引、主键索引和聚集索引。

感觉索引做不了排序,所以就只在ID上加了主键索引,想的是查表也是根据ID作为where条件。排序的话使用order by直接排就行,应该也不需要索引(学艺不精的狗头)

2.一道设计题,要求给定一个输入:Java 构造代码块的作用 为什么不直接用构造函数_为什么有的函数后面会有代码块-CSDN博客类似这种的,然后输出一个https://blog.csdn.net/HK5fM,要求这个输出可以唯一对应一个输入,同一个输入的每次输出不一样。感觉其实就是邀请码这种,给定了最后字符有五个,取值范围是62个常规字符。要求设计一个具有这种功能的算法。输入输出均为字符串,问了面试官可以使用数据库。

输入:
https://interview.nowcoder.com/interview/31022844/interviewer?code=urXY3kZA#hrCode

https://interview.nowcoder.com/interview/31022844/interviewer?code=urXY3kZA#hrCode

输出:
https://short.nowcoder.com/Xf3FG/

https://short.nowcoder.com/Xf4FG/

感觉就用一个哈希函数就可以,讲了每次加入时间戳进行哈希,然后将结果的对应关系保存到数据库。然后面试官问了具体的哈希过程,完全忘记了,主要是如何生成符合要求的字符串。最后只说可以哈希可以实现从高维空间到低维空间的映射,之前也都是直接用了,没去细究!

哈希(Hash)也称为散列,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,这个输出值就是散列值。几种常见的Hash算法:

① 除法哈希法  公式:hash(key) = key mod M (注意:M 通常为“素数”)

② 乘法哈希法  公式:hash(key) = floor( M/W * ( a * key mod W) ) 其中 floor 表示对表达式进行下取整

注意:

  1. 通常设置 M 为 2 的幂次方。
  2. W 为计算机字长大小(也为2的幂次方)。
  3. a 为一个非常接近于W的数。

其实,“乘法哈希”的思想就是:提取关键字 key 中间 k 位数字。

③ 斐波那契(Fibonacci)哈希法  也就是当 “乘法哈希法” 的 a ≈ W/φ1/φ ≈ (√5-1)/2 = 0.618 033 988 时情况。而,1/φ ≈ (√5-1)/2 = 0.618 033 988,可称为黄金分割点。

看完感觉面试官其实问的是怎么处理字符串,继续百度:由哈希函数的性质,对于一个字符串:S=s1s2...sn,我们把每个字符转换成idx(si)=si-'a'+1 当然直接用字符串的ASCII码表示也可以,则哈希模型为Hash(i)=Hash(i-1)*p+idx(si),其中p为素数。最终算出的Hash(n)作为该字符串的哈希值。

又联想到其实使用md5和sha256这类的现有哈希算法也不错,MD5_百度百科sha256_百度百科可以记一下。对于生成位数为5,我认为可以直接截取,或者用生成的结果循环相加取模。

3.操作系统课程的内存管理是如何进行的,完全没学过,还问了如何将内存分配给进程?

JVM 中的内存可以划分为若干个不同的数据区域,主要分为:程序计数器、虚拟机栈、本地方法栈、堆、方法区。

具体细节可参考:

程序运行时内存如何分配的_运行内存可不可以分配-CSDN博客

Linux系统如何为进程分配内存_linux如何指定进程独占部分内存-CSDN博客

4.最后一个题是个力扣的编程题,给定一个一维数组用于描述一个海拔,相邻的海拔高度不同,则下雨后低洼海拔的洼地会有积水,假设雨水足够,能够填满所有低洼地段,计算下雨后所有低洼地段总蓄水量。例如给定数组为:5, 2, 1, 4, 3  则:所有低洼地段蓄水为量为 5

大概做了一下,但感觉不一定对,力扣还是要多刷~

import java.util.ArrayList;

public class Main {
    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!");
        int[] a = {5, 2, 1, 4, 3};
        ArrayList<Integer> max = new ArrayList<>();//存放峰值
        int allWater = 0;
        for (int i = 0; i < a.length; i++) {
            if (i != 0 && i != a.length - 1) {
                if (a[i] >= a[i - 1] && a[i] >= a[i + 1])//去重复
                    max.add(i);
            }
        }
        for (int j = 0; j < max.size() - 2; j++) {
            if ((max.get(j + 1) - max.get(j)) > 1) {
                int high = (a[max.get(j)] >= a[max.get(j + 1)] ? a[max.get(j + 1)] : a[max.get(j)]);
                int water = 0;
                for (int k = max.get(j) + 1; k < max.get(j + 1); k++) {
                    water += (high - a[k]);
                }
                allWater += water;
            }
        }
        System.out.println(allWater);
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的公寓报修管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此公寓报修管理系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。公寓报修管理系统有管理员,住户,维修人员。管理员可以管理住户信息和维修人员信息,可以审核维修人员的请假信息,住户可以申请维修,可以对维修结果评价,维修人员负责住户提交的维修信息,也可以请假。公寓报修管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:公寓报修管理系统;Spring Boot框架;MySQL;自动化;VUE
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值