字节面经,流程中(问题附答案)

国际支付一面

  • HTTP协议连接过程?

    • 就是TCP三次握手的过程,首先发送方发送连接请求报文段,同步标志位SYN=1,初始序号seq=x,不能携带数据;
    • 服务端发回确认,SYN=1,ACK=1,seq=y,ack=x+1;
    • 客户端给出确认,不设置同步标志位,ACK=1,seq=x+1,ack=y+1,该报文段可以携带数据,若不携带数据则不需要消耗序列号;
  • HTTP有状态还是无状态?

    • 无状态;
  • HTTP怎么保存状态?

    • Cookie:存放在客户端的一小段数据,会在浏览器向服务器发送请求时被携带发送在服务器上。通常它用于告知服务端两个请求是否来自同一浏览器,通常有以下三方面用途:
      1. 回话状态管理:用户登录状态、购物车、游戏分数或者其他需要记录的信息。
      2. 个性化信息:用户自定义设置、主题等等。
      3. 浏览器行为跟踪:跟踪分析用户行为等。
    • Session:代表着服务器和客户端一次回话的过程,session对象存储特定用户会话所需要的属性及配置信息。这样,当用户在用户在应用程序的web页之间跳转时,存储在session对象中的变量不会消失。当浏览器关闭会话或者session超时失效时会话结束。
    • Token:当浏览器禁用cookie时,可以采用Token机制。Token是服务端生成的一个字符串作为客户端请求的标识,第一次用户登录后服务器产生一个Token交给客户端,以后的每次请求都携带这个Token就好而无需再次登录验证。
  • HTTP和HTTPS的区别?

    • 区别在于超文本传输协议是明文传输的,而HTTPS则是加密传输的;
    • HTTPS的加密过程如下:
      • 服务端向CA机构申请数字证书,然后发送给客户端;
      • 客户端在证书中获取非对称加密的公钥K,并根据证书中的信息确认该证书来源于自己想要申请的网站;
      • 客户端生成一个用于对称加密的秘钥X,并用公钥K加密X传输给服务端;
      • 服务端用私钥K`解密得到X;
      • 服务端和客户端用X加密信息进行传输;
  • Session怎么实现?

    • 这个我没答上来,因为没有相关经验;
  • Java HashMap原理?

    • 底层用hash表实现,冲突处理采用拉链法;
    • JDK8之后,当拉链个数增加到8之后会转化为红黑树,减少到6会从红黑树转化回链表,之所以不设置为7是为了防止冲突多次介于7、8之间时造成频繁的链表和树的转化;
    • 至于达到8之后,由于对于当个桶而言,源源不断的冲突元素流的个数是服从泊松分布的,而且只有放入和不放入两种可能,因此期望为1/2,因此该泊松分布的参数就是1/2,可以得到单个桶冲突个数达到8的概率为百万分之六,已经很小了,因此可以选择8作为阈值;
    • 面试官只是问原理让我自己说,我说了这些,面试官就没让我继续说别的;
  • 写了一个Student类,问加到HashMap之后修改了这个Student的id,能不能get到?

    • 我当时回答的是这要看Student重写的equals和hashcode两个方法用的是Student的哪个属性,如果用的id属性那肯定获取不到,如果不是那就能get到;
  • synchronized原理?

    • Java并发过程中用于保证共享变量互斥访问安全性的关键字,方法是竞争到锁之后将并行转化为串行,执行完临界区代码之后释放锁再由其他线程争取;
    • 面试官追问:那接下来的线程获取锁是按顺序的吗?
    • 回答:不是,synchronized的底层虽然维护了阻塞队列,但是monitor释放资源后,是由操作系统进行竞争的,因此能否竞争到不取决于线程。当然,由于是操作系统进行竞争,这就涉及到内核态和用户态的转化,会在一定程度上降低效率,不过后来Java对synchronized进行了优化,引入了轻量级锁、偏向锁的概念;
    • 回答道这面试官没接着问了;
  • 算法:LC3,最长无重复子串:给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

    class Solution {
    public int lengthOfLongestSubstring(String s) {
        int n=s.length(), j=1, maxLength=0;
        HashSet<Character> set=new HashSet<>();
    
        char[] array=s.toCharArray();
        for(int i=0;i<n;i++){
            if(i==0)
                set.add(array[i]);
            while(j<n&&!set.contains(array[j])){
                set.add(array[j]);
                j++;
            }
            maxLength=Math.max(maxLength, j-i);
            set.remove(array[i]);
        }
        return  maxLength;
    }
    }

    二面(三道题)

  • 算法:不使用相关API实现对2开方,要求精度可变;

    • 二分查找,左右端点小于一个精度就突出循环,代码不写了;
  • 数据库:学生信息、教师信息、课程信息,一个学生可以选多门课,一门课可以多个学生选,一个老师教多门课,一门课一个老师教,问需要几个表,写出来;

    • 四个,学生一个,教师一个,课程一个,选课一个;
  • 智力题:三妃分金——100个金子三个妃子分,三个人依次提出分金方案,获得大于一半的人支持就这么分,否则处死提方案的人,剩下的人继续;对每个人而言:每个人在生存的前提下拿尽可能多的钱;

    • 答:如果第一个人死了,第二个人一定会死,因此为了活着第二个人必须支持第一个人,因此分配方案为100,0,0;
    • 面试官追问:四妃分金呢:
    • 答:如果第一个人死了情况转化为上一题,为了拿到更多钱第三、四个人一定会支持第一个人,因此分法就是98,0,1,1;
    • 反问面试官:这个问题具有某种类似子结构的性质,那么如果输入规模增加怎么编程解决这个问题呢?
    • 面试官说没想过这个问题,不过可以一起分析一下,于是就一起做了五妃分金,找规律,做完时间就到了,结束了就;

    三面

  • 这一面完事之后是电话跟同学说的,所以没记录,有点忘了;

  • 算法:链表乘法:保持链表的结构进行乘法,题挺墨迹,最后写完了没过,应该哪个数写错了,没时间debug就这样了;

  • 这一面没过,我觉得可能是coding没跑过的原因;

目前在面另一部门,感谢其他大佬鼠们分享的面经,所以我就把自己的也整理了一下发出来,希望对大家有帮助,另外也希望这个部门的面试能过,面完再发面经;

#字节面试##面经#
全部评论
诶我去,这该死的格式,下面的问题忘了加黑,这怎么重新编辑啊?
点赞 回复 分享
发布于 2022-04-26 08:24
22校招吗?
点赞 回复 分享
发布于 2022-04-26 11:38

相关推荐

3 30 评论
分享
牛客网
牛客企业服务