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

南京字节一面题,可能因为项目不太匹配,全程八股比较多,也有两道手撕代码题,强度还是有的。为了方便大家学习,大部分答案由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进行负载均衡,分散查询请求等入手发散。


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

17.3.4 颜色矩阵

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 17.3.4.1 矩阵基本概念 矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,类似于数组。 由…

LabVIEW在电机自动化生产线中的实时数据采集与生产过程监控

在电机自动化生产线中,实时数据采集与生产过程监控是确保生产效率和产品质量的重要环节。LabVIEW作为一种强大的图形化编程平台,可以有效实现数据采集、实时监控和自动化控制。详细探讨如何利用LabVIEW实现这一目标,包括硬件选择、软件架构设…

mybatis(78/134)

前天学了很多&#xff0c;关于java的反射机制&#xff0c;其实跳过了new对象&#xff0c;然后底层生成了字节码&#xff0c;创建了对应的编码。手搓了一遍源码&#xff0c;还是比较复杂的。 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE …

【NLP251】Transformer精讲 残差链接与层归一化

精讲部分&#xff0c;主要是对Transformer的深度理解方便日后从底层逻辑进行创新&#xff0c;对于仅应用需求的小伙伴可以跳过这一部分&#xff0c;不影响正常学习。 1. 残差模块 何凯明在2015年提出的残差网络&#xff08;ResNet&#xff09;&#xff0c;Transformer在2016年…

全程Kali linux---CTFshow misc入门(25-37)

第二十五题&#xff1a; 提示&#xff1a;flag在图片下面。 直接检查CRC&#xff0c;检测到错误&#xff0c;就直接暴力破解。 暴力破解CRC的python代码。 import binascii import struct def brute_force_ihdr_crc(filename): # 读取文件二进制数据 with open(filen…

OpenAI深夜反击:o3-mini免费上线,能否撼动DeepSeek的地位?

还在为寻找合适的 AI 模型而烦恼吗&#xff1f;chatTools 平台为您精选 o1、GPT4o、Claude、Gemini 等顶尖 AI 模型&#xff0c;满足您不同的 AI 应用需求。立即体验强大的 AI 能力&#xff01; 深夜反击&#xff0c;OpenAI祭出o3-mini 在DeepSeek异军突起&#xff0c;搅动AI行…

蓝桥杯备考:模拟算法之字符串展开

P1098 [NOIP 2007 提高组] 字符串的展开 - 洛谷 | 计算机科学教育新生态 #include <iostream> #include <cctype> #include <algorithm> using namespace std; int p1,p2,p3; string s,ret; void add(char left,char right) {string tmp;for(char ch left1;…

NLP深度学习 DAY5:Sequence-to-sequence 模型详解

Seq2Seq&#xff08;Sequence-to-Sequence&#xff09;模型是一种用于处理输入和输出均为序列任务的深度学习模型。它最初被设计用于机器翻译&#xff0c;但后来广泛应用于其他任务&#xff0c;如文本摘要、对话系统、语音识别、问答系统等。 核心思想 Seq2Seq 模型的目标是将…

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

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

Three.js 后期处理(Post-Processing)详解

目录 前言 一、什么是后期处理&#xff1f; 二、Three.js 后期处理的工作流程 2.1 创建 EffectComposer 2.2 添加渲染通道&#xff08;Render Pass&#xff09; 2.3 应用最终渲染 三、后期处理实现示例 3.1 基础代码 四、常见的后期处理效果 4.1 辉光效果&#xf…

低代码系统-产品架构案例介绍、炎黄盈动-易鲸云(十二)

易鲸云作为炎黄盈动新推出的产品&#xff0c;在定位上为低零代码产品。 开发层 表单引擎 表单设计器&#xff0c;包括设计和渲染 流程引擎 流程设计&#xff0c;包括设计和渲染&#xff0c;需要说明的是&#xff1a;采用国际标准BPMN2.0&#xff0c;可以全球通用 视图引擎 视图…

从 HTTP/1.1 到 HTTP/3:如何影响网页加载速度与性能

一、前言 在最近使用Apipost时&#xff0c;突然注意到了http/1.1和http/2&#xff0c;如下图&#xff1a; 在我根深蒂固的记忆中&#xff0c;对于http的理解还停留在TCP协议、三次握手。由于我的好奇心&#xff0c;于是触发了我被动“开卷”&#xff0c;所以有了这篇文章&…

项目练习:重写若依后端报错cannot be cast to com.xxx.model.LoginUser

文章目录 一、情景说明二、解决办法 一、情景说明 在重写若依后端服务的过程中 使用了Redis存放LoginUser对象数据 那么&#xff0c;有存就有取 在取值的时候&#xff0c;报错 二、解决办法 方法1、在TokenService中修改如下 getLoginUser 方法中&#xff1a;LoginUser u…

C语言------二维数组指针从入门到精通

前言: 目标:需要了解及掌握数组指针的行地址、列地址、具体元素地址、具体元素地址的值是怎样定义及实现。 重点:指针的偏移,指针解引用。 难点:指针的升阶与降阶。 1. 基本概念 二维数组&#xff1a;二维数组可以看作是一个数组的数组。例如&#xff0c;int a[3][4] 表示一个 …

AI-ISP论文Learning to See in the Dark解读

论文地址&#xff1a;Learning to See in the Dark 图1. 利用卷积网络进行极微光成像。黑暗的室内环境。相机处的照度小于0.1勒克斯。索尼α7S II传感器曝光时间为1/30秒。(a) 相机在ISO 8000下拍摄的图像。(b) 相机在ISO 409600下拍摄的图像。该图像存在噪点和色彩偏差。©…

自定义数据集 ,使用朴素贝叶斯对其进行分类

代码&#xff1a; # 导入必要的库 import numpy as np import matplotlib.pyplot as plt# 定义类1的数据点&#xff0c;每个数据点是二维的坐标 class1_points np.array([[1.9, 1.2],[1.5, 2.1],[1.9, 0.5],[1.5, 0.9],[0.9, 1.2],[1.1, 1.7],[1.4, 1.1]])# 定义类2的数据点&…

蓝桥杯单片机第七届省赛

前言 这套题不难&#xff0c;相对于第六套题这一套比较简单了&#xff0c;但是还是有些小细节要抓 题目 OK&#xff0c;以上就是全部的题目了&#xff0c;这套题目相对来说逻辑比较简单&#xff0c;四个按键&#xff0c;S4控制pwm占空比&#xff0c;S5控制计时时间&#xff0…

小程序设计和开发:如何研究同类型小程序的优点和不足。

一、确定研究目标和范围 明确研究目的 在开始研究同类型小程序之前&#xff0c;首先需要明确研究的目的。是为了改进自己的小程序设计和开发&#xff0c;还是为了了解市场趋势和用户需求&#xff1f;不同的研究目的会影响研究的方法和重点。例如&#xff0c;如果研究目的是为了…

反向代理模块jmh

1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;将从服务器上得到的结果返回给客户端&#xff0c;此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说&#xff0c;反向代理就相当…

一文讲解HashMap线程安全相关问题

HashMap不是线程安全的&#xff0c;主要有以下几个问题&#xff1a; ①、多线程下扩容会死循环。JDK1.7 中的 HashMap 使用的是头插法插入元素&#xff0c;在多线程的环境下&#xff0c;扩容的时候就有可能导致出现环形链表&#xff0c;造成死循环。 JDK 8 时已经修复了这个问…