ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-06-03 23:57:22  阅读:243  来源: 互联网

标签:https get int max 索引 过客 哈希 复盘 2021


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

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

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

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

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

2.一道设计题,要求给定一个输入:https://blog.csdn.net/Ximerr/article/details/115441000类似这种的,然后输出一个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这类的现有哈希算法也不错,https://baike.baidu.com/item/MD5/212708https://baike.baidu.com/item/SHA256/9726070可以记一下。对于生成位数为5,我认为可以直接截取,或者用生成的结果循环相加取模。

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

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

具体细节可参考:

https://blog.csdn.net/qq_38366111/article/details/105956049

https://blog.csdn.net/qq_32744005/article/details/51830729

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);
    }
}

 

标签:https,get,int,max,索引,过客,哈希,复盘,2021
来源: https://blog.csdn.net/Ximerr/article/details/115873761

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有