【面经】字节南京一面部分题目记录

南京字节一面题,可能因为项目不太匹配,全程八股比较多,也有两道手撕代码题,强度还是有的。为了方便大家学习,大部分答案由GPT整理,有些题给出了我认为回答比较好的博客链接。

文章目录

  • 一、python2 和 python 3 的区别?
  • 二、python的多线程是一个假线程,请问它具体是怎么“假”的
  • 三、http3与http2的区别
  • 四、算法题:二叉树A和二叉树B,判断B是不是A的子树
  • 五、设计题:Java 三个线程 第一个线程打印1 第二个线程打印2 第三个线程打印3(口述如何实现)
  • 六、场景题:假如电脑内存只有1个G,但是需要你统计大约100个G的数据(假设都是int型的 ),每个数字出现的次数,问题在于这100个G的数字,无论是这个原始文件还是统计结果我都是存不下的,但是我又需要你把这个结果输出,那这个事要怎么做呢?
  • 七、场景题:我现在有一个IP黑名单,我需要你设计一个服务去调用查看黑名单,我这个调用的QPS非常高,可能会达到阈值,你怎么来设计这个服务呢? 去保持这种查询的稳定性,并且还可以往里面加新的IP,并且支持高可运行性。


一、python2 和 python 3 的区别?

(1)语法差异:Python 3引入了一些语法上的改变。例如,Python 3中的print语句变成了函数调用print(),并且print后面需要加括号。此外,Python 3的整数除法运算符/将得到浮点数结果,而Python 2中的整数除法运算符/将截断小数部分。
(2)Unicode支持:在Python 2中,字符串默认使用ASCII编码,而在Python 3中,默认使用Unicode编码。这使得Python 3更好地支持国际化和处理非ASCII字符。
(3)异常处理:在Python 2中,except语句使用逗号分隔多个异常类型,而在Python 3中,使用as关键字将异常实例赋值给变量。
(4)xrange变为range:在Python 2中,range函数返回一个列表,而xrange函数返回一个迭代器。在Python 3中,range函数返回一个类似于Python 2中xrange的迭代器,而xrange函数被移除。
(5)其他标准库变化:Python 3中有一些标准库的改动,包括urllib、unittest和io等模块。
需要注意的是,由于Python 2的支持已于2020年停止,推荐使用Python 3来编写新的代码。如果您有现有的Python 2代码,可能需要进行一些修改才能在Python 3中运行。可以使用2to3工具来自动转换大部分代码,但某些特定的语法和库可能需要手动修改。

python2与python3的区别
上面这个博客总结得挺好,建议直接看这个博客

二、python的多线程是一个假线程,请问它具体是怎么“假”的

答:Python的多线程之所以被称为“假线程”,主要是因为全局解释器锁(Global Interpreter Lock, GIL)的存在。GIL限制了真正的并行执行,即使在多线程环境中,Python也无法充分利用多核CPU的优势。以下是对这一现象的详细解释:
GIL(全局解释器锁)

  1. 定义: GIL是一种机制,用于在多线程环境中保护访问Python对象的内存安全。它确保同一时刻只有一个线程执行Python字节码,防止多个线程同时执行时出现竞态条件(race conditions)和其他并发问题。
  2. 工作机制:
    o 在CPython解释器中(最常用的Python实现),GIL允许一个线程运行一定数量的字节码指令或在特定的I/O操作后,便会释放锁。
    o 其他线程必须等待GIL被释放才能获得执行权。
  3. 影响:
    o CPU密集型任务:对于需要大量CPU运算的任务(如数值计算、图像处理),GIL会显著限制多线程的效率,因为同一时刻只有一个线程能获得GIL,导致多线程的性能表现与单线程相近。
    o I/O密集型任务:对于大量I/O操作(如网络请求、文件读写)的任务,多线程仍然有优势。因为线程在等待I/O操作完成时会释放GIL,其他线程可以继续执行。
    举例说明
    在这里插入图片描述

假设有两个线程,A和B,它们都需要执行CPU密集型的计算:

在这种情况下,即使有两个线程,Python程序也无法同时利用多个CPU核心,因为GIL限制了同一时间只有一个线程能执行Python代码。因此,运行时间几乎不会比单线程快。

【扩展】解决办法:
为了克服GIL的限制,Python提供了一些替代方案:

  1. 多进程: 使用multiprocessing模块,可以创建多个进程,每个进程都有自己的Python解释器和GIL,可以实现真正的并行执行。
    在这里插入图片描述

2、C扩展和JIT编译: 使用C语言编写性能关键的部分,或者使用如PyPy等支持JIT编译的Python解释器,可以减少GIL的影响。
3、异步编程: 使用asyncio模块,实现协程并发处理,对于I/O密集型任务是一个很好的选择。

三、http3与http2的区别

在这里插入图片描述
补充:由于HTTP3 基于QUIC作为传输层协议,具有延迟更短、遇到错误重连时恢复时间更短的优点,且QUIC本身具有内置的安全性,默认启用加密,所以HTTP3也更安全。
这个总结写得挺好,可以直接看这个:
HTTP1 HTTP2 HTTP3的区别

四、算法题:二叉树A和二叉树B,判断B是不是A的子树

力扣572题 属于简单题 递归就行

五、设计题:Java 三个线程 第一个线程打印1 第二个线程打印2 第三个线程打印3(口述如何实现)

这一类题可以用的方法蛮多的,信号量Semaphore,锁Lock,notify啊等等都能解决。
手撕面试题:多个线程交替打印问题
上面这个专栏有总结一些打印题 里面就有

六、场景题:假如电脑内存只有1个G,但是需要你统计大约100个G的数据(假设都是int型的 ),每个数字出现的次数,问题在于这100个G的数字,无论是这个原始文件还是统计结果我都是存不下的,但是我又需要你把这个结果输出,那这个事要怎么做呢?

(用GPT 给出了一种分治的方法)
1、分块读取数据:一次读取一小部分数据,以避免内存溢出。
2、使用哈希桶分块:将每一小部分数据按哈希值分配到多个桶文件中。
3、统计哈希桶数据:对每个桶文件中的数据进行统计,并将结果写入临时文件。
4、逐步合并和输出结果:从每个桶文件中读取数据进行统计,并逐步将结果写入最终输出文件,以避免在内存中保持所有统计结果。(当内存中的统计结果超过一定数量,比如0.99G,我们就先将统计结果写入输出文件并清空内存)

【我怎么感觉上面有点不太对。。。我感觉就是用时间换空间 ,先分块,把100G数据分块,每块1个G,然后用哈希桶,比如:
在这里插入图片描述
当然实际要根据数据量修改桶的数量,比如题目这种情况我感觉桶得再多点 每次选定一个桶(比如余数都是1的数) 然后去遍历这100个块,每遍历一个块把结果放桶里,直到100个块遍历完,把桶的结果输出到外存,然后清空内存换个桶继续】

七、场景题:我现在有一个IP黑名单,我需要你设计一个服务去调用查看黑名单,我这个调用的QPS非常高,可能会达到阈值,你怎么来设计这个服务呢? 去保持这种查询的稳定性,并且还可以往里面加新的IP,并且支持高可运行性。

要点一:用BitMap存储IP黑名单,每个IP对应一个bit位,1表示在黑名单中,0表示不在。IPv4地址有32位,最多需要2^32个bit(约512MB)来存储所有可能的IP地址。
要点二:使用Redis等分布式缓存存储BitMap,支持高并发读取和写入。
要点三:使用KafkaRabbitMQ异步处理黑名单更新,避免直接写入影响查询性能。

设计思路:

查询服务:

接收IP地址,转换为BitMap中的偏移量。(示例如图)
在这里插入图片描述

查询Redis中的BitMap,返回是否在黑名单中。

如果Redis未命中,从数据库加载并更新Redis。

更新服务:

接收新IP地址,转换为BitMap偏移量。

通过消息队列异步更新数据库和Redis中的BitMap。

为了提高高可用性,从中间件的常用trick入手,如部署Redis集群,配置数据库主从复制,使用Nginx或HAProxy进行负载均衡,分散查询请求等入手发散。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/12179.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言篇】“三子棋”

一、游戏介绍 三子棋,英文名为 Tic - Tac - Toe,是一款简单而经典的棋类游戏。游戏在一个 33 的棋盘上进行,两名玩家轮流在棋盘的空位上放置自己的棋子(通常用 * 和 # 表示),率先在横、竖或斜方向上连成三个…

vscode软件操作界面UI布局@各个功能区域划分及其名称称呼

文章目录 abstract检查用户界面的主要区域官方文档关于UI的介绍 abstract 检查 Visual Studio Code 用户界面 - Training | Microsoft Learn 本质上,Visual Studio Code 是一个代码编辑器,其用户界面和布局与许多其他代码编辑器相似。 界面左侧是用于访…

【B站保姆级视频教程:Jetson配置YOLOv11环境(六)PyTorchTorchvision安装】

Jetson配置YOLOv11环境(6)PyTorch&Torchvision安装 文章目录 1. 安装PyTorch1.1安装依赖项1.2 下载torch wheel 安装包1.3 安装 2. 安装torchvisiion2.1 安装依赖2.2 编译安装torchvision2.2.1 Torchvisiion版本选择2.2.2 下载torchvisiion到Downloa…

于动态规划的启幕之章,借 C++ 笔触绘就算法新篇

注意:代码由易到难 P1216 [IOI 1994] 数字三角形 Number Triangles 题目链接:[IOI 1994] 数字三角形 Number Triangles - 洛谷 题目描述 观察下面的数字金字塔。 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每…

分页按钮功能

前言 在前端开发中,分页功能是一个常见的需求,特别是当需要展示大量数据时,它能有效提升用户体验。该文章结合运用了HTML,CSS,JS实现网页的分页按钮功能,并且可以选择每页显示的条数试试更新总页数及显示当…

SAP HCM 回溯分析

最近总有人问回溯问题,今天把12年总结的笔记在这共享下: 12年开这个图的时候总是不明白是什么原理,教程看N次,网上资料找一大堆,就是不明白原理,后来为搞明白逻辑,按照教材的数据一样做&#xf…

gitea - fatal: Authentication failed

文章目录 gitea - fatal: Authentication failed概述run_gitea_on_my_pkm.bat 笔记删除windows凭证管理器中对应的url认证凭证启动gitea服务端的命令行正常用 TortoiseGit 提交代码备注END gitea - fatal: Authentication failed 概述 本地的git归档服务端使用gitea. 原来的用…

X Window System 架构概述

X Window System 架构概述 1. X Server 与 X Client ​ 这里引入一张维基百科的图,在Linux系统中,若用户需要图形化界面,则可以使用X Window System,其使用**Client-Server**架构,并通过网络传输相关信息。 ​ ​ X…

Linux防火墙基础

一、Linux防火墙的状态机制 1.iptables是可以配置有状态的防火墙,其有状态的特点是能够指定并记住发送或者接收信息包所建立的连接状态,其一共有四种状态,分别为established invalid new related。 established:该信息包已建立连接&#x…

[论文学习]Adaptively Perturbed Mirror Descent for Learning in Games

[论文学习]Adaptively Perturbed Mirror Descent for Learning in Games 前言概述前置知识和问题约定单调博弈(monotone game)Nash均衡和Gap函数文章问题定义Mirror Descent 方法评价 前言 文章链接 我们称集合是紧的,则集合满足&#xff1…

Go学习:类型转换需注意的点 以及 类型别名

目录 1. 类型转换 2. 类型别名 1. 类型转换 在从前的学习中,知道布尔bool类型变量只有两种值true或false,C/C、Python、JAVA等编程语言中,如果将布尔类型bool变量转换为整型int变量,通常采用 “0为假,非0为真”的方…

使用Pygame制作“吃豆人”游戏

本篇博客展示如何使用 Python Pygame 编写一个简易版的“吃豆人(Pac-Man)” 风格游戏。这里我们暂且命名为 Py-Man。玩家需要控制主角在一个网格地图里移动、吃掉散布在各处的豆子,并躲避在地图中巡逻的幽灵。此示例可帮助你理解网格地图、角…

ubuntu磁盘扩容

ubuntu磁盘扩容 描述先在虚拟机设置里面扩容进入Ubuntu 配置使用命令行工具parted进行分区输出如下完成 描述 执行命令,查看 fs 类型是什么 lsblk -o NAME,FSTYPE,MOUNTPOINT将60G扩容到100G,其中有些操作我也不知道什么意思,反正就是成功了&#xff0…

redis底层数据结构

底层数据结构 了解下这些咱常用的数据其底层实现是啥 在提到使用哪类数据结构之前,先来了解下redis底层到底有多少种数据结构 1,sds动态字符串 概念与由来 redis是一种使用C语言编写的nosql,redis存储的key数据均为string结构&#xff0…

ChatGPT怎么回事?

纯属发现,调侃一下~ 这段时间deepseek不是特别火吗,尤其是它的推理功能,突发奇想,想用deepseek回答一些问题,回答一个问题之后就回复服务器繁忙(估计还在被攻击吧~_~) 然后就转向了GPT&#xf…

趣味Python100例初学者练习01

1. 1 抓交通肇事犯 一辆卡车违反交通规则,撞人后逃跑。现场有三人目击该事件,但都没有记住车号,只记下了车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前…

2024-我的学习成长之路

因为热爱,无畏山海

蓝桥杯备考:高精度算法之除法

我们除法的高精度其实也不完全是高精度,而是一个高精度作被除数除以一个低精度 模拟我们的小学除法 由于题目中我们的除数最大是1e9,当它真正是1e9的时候,t是有可能超过1e9的,所以要用long long

Maven jar 包下载失败问题处理

Maven jar 包下载失败问题处理 1.配置好国内的Maven源2.重新下载3. 其他问题 1.配置好国内的Maven源 打开⾃⼰的 Idea 检测 Maven 的配置是否正确,正确的配置如下图所示: 检查项⼀共有两个: 确认右边的两个勾已经选中,如果没有请…

【前端】ES6模块化

文章目录 1. 模块化概述1.1 什么是模块化?1.2 为什么需要模块化? 2. 有哪些模块化规范3. CommonJs3.1 导出数据3.2 导入数据3.3 扩展理解3.4 在浏览器端运行 4.ES6模块化4.1 浏览器运行4.2 在node服务端运行4.3 导出4.3.1 分别导出4.3.2 统一导出4.3.3 默认导出4.3.4 混用 4.…