吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1256|回复: 12
收起左侧

[学习记录] 字节一面 今日头条byteitern 面经记录分享

[复制链接]
chris3will 发表于 2023-4-6 16:21

2023.04.06
飞书平台远程会议,一面,字节跳动今日头条后端开发,暑期实习。
总时长1h15min左右


自我介绍

问:你的研究方向是什么?展开讲讲
问:你能实习多久?多久能去实习?

项目介绍

问:服务都是单机部署还是分布式部署?
问:是否是微服务式的?
问:你说说所做的所有项目或事情里面,遇到的最大的挑战是什么?是怎么解决的?
问:你觉得你最擅长的是什么?可以说是一些技术或者说技能方面的都可以?
问:你或者说某一门课程之类的都可以,你觉得你最擅长的什么?
问:如果说你个人能力方面、偏软素质这方面的,你觉得你最擅长的什么?
问:项目里你为什么当组长?

八股

Java

问:讲一讲JVM内存结构,再讲一下JVM内存管理和操作系统的虚拟内存是什么关系? 这两者的交互是怎么实现的?

复盘的是时候发现,这部分可能是想问JMM在不同平台是如何实现的?有点深刻。
参考回答
JVM内存结构分为以下几个区域:程序计数器、Java虚拟机栈、本地方法栈、堆、方法区(元空间)。其中,程序计数器、Java虚拟机栈、本地方法栈是线程私有的,堆和方法区是线程共享的。程序计数器用于线程执行的指令计数,Java虚拟机栈和本地方法栈用于存储方法调用和执行的局部变量等数据,堆用于存储对象实例,方法区(元空间)用于存储类信息、常量、静态变量等数据。

JVM内存管理的主要目标是尽量地提高内存利用率和性能,并保证应用程序的稳定性。内存管理主要涉及垃圾收集、内存分配、内存回收等方面。JVM通过垃圾收集器来自动回收不再使用的对象,内存分配则通过堆区实现,内存回收通过垃圾收集器实现。

操作系统的虚拟内存是为了解决物理内存不足而提出的一种技术。操作系统将磁盘空间虚拟化成一段连续的地址空间,称为虚拟内存。应用程序可以像访问物理内存一样访问虚拟内存,而操作系统将虚拟内存映射到物理内存,以实现虚拟内存的访问。

JVM内存管理与操作系统的虚拟内存之间的关系主要是JVM通过堆区使用内存,并由操作系统将堆区的虚拟内存映射到物理内存,以实现对内存的使用。同时,垃圾收集器的工作也需要占用操作系统的内存资源,垃圾收集器需要对虚拟内存中的内存块进行标记和清除操作,由于虚拟内存可能比物理内存大,因此可能会发生虚拟内存交换到磁盘中的情况,这也是操作系统和JVM之间的交互。JVM和操作系统通过系统调用等方式实现对虚拟内存和物理内存的操作。

MySQL

问:事务的隔离级别有几种,分别有什么含义?
问:脏读,不可重复读,幻读都有什么问题,具体解释一下?

Redis

问:你用过Redis对吧?谈谈你的了解

问:缓存穿透,缓存雪崩,缓存击穿这些情况都应该怎么解决?

408

操作系统

问:IO多路服务用了解吗?讲一讲select,poll和epoll的区别。Epoll的两种触发方式讲一下?
参考回答
IO多路复用是指利用一个线程来监听多个socket的IO事件,可以大大提高网络编程的性能和并发性能。常见的IO多路复用有select、poll和epoll三种方式。

select和poll方式都是通过轮询的方式实现的,即通过遍历文件描述符集合来检查每个文件描述符是否有事件到达。select和poll的缺点在于,每次调用都需要遍历整个文件描述符集合,效率不高,而且文件描述符集合的大小是有限制的。

epoll方式采用了回调机制,不再需要遍历整个文件描述符集合。epoll将文件描述符集合放入内核中进行监听,当文件描述符集合中的文件描述符有事件到达时,内核会将该文件描述符加入就绪链表中,同时调用回调函数。这种方式可以提高效率,同时能够支持大量的文件描述符。

epoll支持两种触发方式:LT(Level Triggered)和ET(Edge Triggered)。LT是默认方式,当文件描述符有事件到达时,会持续通知应用程序,直到应用程序处理完毕。而ET方式只会通知应用程序一次,直到应用程序处理完毕,才会再次通知。ET方式可以减少通知次数,提高效率,但是需要应用程序能够正确处理,否则可能会造成丢失事件的情况。

问:虚拟内存知道吗?主要用来解决什么问题?
参考回答
虚拟内存是一种操作系统的技术,它可以将计算机硬盘中的部分空间作为内存来使用,使得计算机可以运行更多的程序或者更大的程序。这种技术可以让程序能够使用比实际物理内存更多的内存空间,从而提高计算机的运行效率。同时,虚拟内存还可以让操作系统更加灵活地管理内存,避免了内存碎片的问题。因此,虚拟内存是操作系统中非常重要的概念。

计算机网络

如果说客户端或者说前端发送一个http请求,这个请求是如何到达后端的?中间涉及哪些协议?

手撕

每一题出的很快,不能切出飞书平台,后台会有记录,面试官会要求你先将思路,然后写代码,同时代码要可以运行,满足样例的结果。

岛屿数量

代码参考:

class Solution {
    int ans = 0; //岛屿数量统计
    int[] dx = {-1, 0, 1, 0};
    int[] dy = {0, 1, 0, -1};
    public int numIslands(char[][] grid) {
        // 经典题目复习
        if(grid == null || grid[0] == null) return ans;
        int m = grid.length;
        int n = grid[0].length;
        int[][] vis = new int[m][n];

        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(grid[i][j] == '1'){
                    if(vis[i][j] == 0){
                        ans++; //发现一个岛屿
                        // 我们要将其进行延伸
                        vis[i][j] = 1;
                        for(int k=0;k<4;k++){
                            int ni = i + dx[k];
                            int nj = j + dy[k];
                            if(ni>=0 && ni<m && nj >=0 && nj < n && vis[ni][nj] == 0 && grid[ni][nj] =='1'){
                                dfs(grid, vis, ni, nj);
                            }
                        }
                    }
                }
            }
        }

        return ans;
    }

    public void dfs(char[][] grid, int[][] vis, int x, int y){
        // 该函数要执行的功能就是进行发散
        vis[x][y] = 1;
        for(int i=0;i<4;i++){
            int nx = x + dx[i];
            int ny = y + dy[i];
            if(nx >= 0 && nx < grid.length && ny >=0 && ny < grid[0].length && grid[nx][ny] == '1' && vis[nx][ny] == 0){
                dfs(grid, vis, nx, ny);
            }
        }
    }
}

接雨水
参考代码:

class Solution {
    public int trap(int[] height) {
        // 标准的单调栈题目
        int ans = 0; // 求得我们最终的计算结果
        // 遍历每一个位置,找该位置左右两侧比其大的点,才能接水
        Stack<Integer> stk = new Stack<>();

        for(int i =0;i<height.length;i++){
            while(!stk.isEmpty() && height[stk.peek()] < height[i]){
                // 第i个元素比当前栈顶要大,需要观察左侧情况,是否能接
                // 先把当前位置提取出来
                int curIdx = stk.pop();
                while(!stk.isEmpty() && height[stk.peek()] == height[curIdx]){
                    // 和当前高度相同的柱子我们要进行跳过
                    // 这些柱子构成一个大平层
                    stk.pop();
                }
                if(!stk.isEmpty()){
                    // 栈不为空,则栈顶元素此时比height[curIdx]要大
                    int highIdx = stk.peek();
                    // 我们把这一层灌上水
                    ans += (Math.min(height[i], height[highIdx]) - height[curIdx]) * (i - highIdx -1);
                }
            }
            stk.push(i);
        }

        return ans;
    }
}

智力题

问:有20 瓶药丸,其中 19 瓶药丸质量相同为1克,剩下一瓶药丸质量为 1.1 克。瓶子中有无数个药丸。要求用一次天平找出药丸质量 1.1克的药瓶。

:可以从药丸的数量上来制造差异: 从第i 瓶药丸中取出i个药丸然后一起称重。如果第i 瓶药丸重 1.1克/粒,那么称重结果就会比全是1克的情况下重 0.1*i 克

总结

不知道后面会不会有面试跟进。
内容很丰富,时间跨度不小,对项目的追问还是挺多的。
八股部分问得比较宽泛,答完之后没有太多的追问,epoll部分确实好久妹啊看了。
JVM和虚拟内存的交互这一点确实很深,自己之前也没有了解过。
继续查漏补缺,积累经验吧!

免费评分

参与人数 3吾爱币 +3 热心值 +2 收起 理由
TJSCer + 1 用心讨论,共获提升!
柒呀柒 + 2 + 1 热心回复!
lmarch2 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

www478347671 发表于 2023-4-6 16:29
多谢分享,上班久了感觉啥都不会了
初级菜鸟 发表于 2023-4-6 16:32
神幻静 发表于 2023-4-6 16:43
one23 发表于 2023-4-6 17:37
恭喜恭喜恭喜
嘉禾家和 发表于 2023-4-6 18:03
智力题
感觉答案有问题,天平应该是只知道哪边重 而不知道具体重多少吧
AnonHedgehog 发表于 2023-4-6 18:30
本帖最后由 AnonHedgehog 于 2023-4-6 18:33 编辑
嘉禾家和 发表于 2023-4-6 18:03
智力题
感觉答案有问题,天平应该是只知道哪边重 而不知道具体重多少吧

应该是有对应的砝码,能知道秤上的药丸的重量。一开始以为两边都放药丸
rcg1997 发表于 2023-4-6 19:00
嘉禾家和 发表于 2023-4-6 18:03
智力题
感觉答案有问题,天平应该是只知道哪边重 而不知道具体重多少吧

万分之一电子天平也是天平
kailifei 发表于 2023-4-6 21:06
为三年后做准备
px307 发表于 2023-4-6 21:49
多谢分享,上班久了感觉啥都不会了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-11 09:58

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表