Category: 软件工程

软件工程师面试: TCP/IP协议是什么?

最近,在面试第一轮抖音(字节跳动)的伦敦职位(Site Reliability Engineer),被问到了这个问题:TCP/IP协议是什么?这个是考基本功,是每个软件工程师都要会的。 TCP/IP(传输控制协议/互联网协议)是一组网络协议,管理数据如何通过互联网和其他网络传输。它是互联网的基本通信模型,由两个主要层组成: 互联网协议 (IP) IP 负责将数据包从源地址路由到目标地址。它工作在 OSI 模型的网络层。 IP 地址:互联网中的每个设备都被分配了一个唯一的 IP 地址,用于标识数据包的发送者和接收者。 数据包路由:IP 将数据分成多个包,并通过不同的网络将其路由到目标地址。 版本:IP 主要有两个版本:IPv4(32位地址)和 IPv6(128位地址)。 传输控制协议 (TCP) TCP 负责确保设备之间数据传输的可靠性。它工作在 OSI 模型的传输层。 面向连接:TCP 在传输数据之前会在发送方和接收方之间建立连接。 数据完整性:TCP 通过确认、序列号和错误检查等机制,确保数据包按顺序无误地到达。 …

C/C++ 中的内存管理器(堆与栈)

最近面试的时候遇到这个问题。这个问题考你计算机的基本功。 在 C/C++ 中,内存管理是控制程序如何分配和管理其资源的关键方面。C/C++ 程序中的内存通常分为不同的区域:堆栈和堆是最主要的动态和自动内存分配区域。 ACM题解系列之 – 最小堆栈 (Min Stack) 堆栈内存 定义:堆栈内存用于静态(自动)内存分配。它是存储函数参数、本地变量和返回地址的地方。当调用一个函数时,一个新的内存块(称为堆栈帧)会被添加到堆栈的顶部。当函数返回时,该内存会被自动释放。 分配:内存由系统自动管理——在变量超出作用域时自动分配和释放。无需人工干预。 生命周期:受限于函数或代码块的作用域。一旦函数退出,内存将被释放。 大小限制:堆栈的大小通常较小并由系统预定义,意味着大的分配可能导致堆栈溢出。 访问速度:由于其后进先出(LIFO)的结构,堆栈内存访问速度更快。由于内存是连续的且可预测的,它允许快速访问。 使用场景:局部变量、函数调用信息和固定大小的对象(数组、结构体)。 堆内存 定义:堆内存用于动态内存分配,程序员使用 C 中的 malloc()、calloc()、free() 和 C++ 中的 new、delete 手动分配和释放内存。 分配:内存在运行时分配,并且分配的生命周期由程序员手动控制。它可以持续存在,直到显式释放。 生命周期:堆分配的对象的生命周期不受作用域的限制。内存将一直被使用,直到被释放为止。 …

软件工程师经典面试题: 当你在浏览器的地址栏敲入google.com并按回车后发生了什么?

我认为这无疑是最受欢迎的软件工程师的(Software Engineer) 面试问题 之一。最近有人说这个问题曾出现在 抖音Tiktok 的面试中。 要回答面试中的“当你在浏览器中输入 https://www.google.com 时会发生什么?”这个问题,可以按步骤详细说明整个过程,涉及 DNS 查找、TCP/SSL 握手、请求处理和页面渲染。以下是全面的解释: URL 解析 当你输入 URL https://www.google.com 并按下回车时: 协议:浏览器识别出协议是 https,意味着它将使用 HTTP 加密传输(TLS)。 主机:浏览器识别出 www.google.com 是域名。 路径:默认路径是 /,因为没有提供具体路径,表示请求主页。 DNS 查找 …

C++的 map 当键(Key)不存在的时候会发生什么?

在面试流程(例如筛选)的早期阶段,一位 Google 招聘人员曾向我问过这个问题。 在C++中,当你使用std::map访问一个不存在的键时,行为取决于你是如何访问它的。 使用下标操作符 访问时 如果键不存在,std::map 会默认插入一个该键的元素,并为其赋值为类型的默认值。比如,如果 map 的值类型是 int,那么它会插入该键并赋值为 0。 例子: std::map<int, int> myMap; int value = myMap; // 如果键10不存在,会插入myMap = 0 使用 at() 方法访问时 如果键不存在,at() 会抛出 …

可以用ChatGPT来轻松转换编程语言

ChatGPT是今年最火的技术,人工智能AI,但是确实来说,是AGI,也就是通用人工智能 Artificial General Intelligence。ChatGPT可以用来做很多事情,我最近发现它可以拿来转换编程语言。比如我想学习一门新语言了,就可以把现有的程序让ChatGPT转换成新的编程语言。或者在力扣上换个新的编程语言学习一下。 下面这个例子ChatGPT转换后的代码我就可以直接在力扣上跑,就通过了所有的测试用例。 网上还有很多不同语言之间的转换工具,相信实现起来都不简单,但是如今有了ChatGPT这个通用人工智能,完全可以套个UI前端就可以实现不同语言之间的转换工具,而且转换逻辑完全不用自己实现,调用ChatGPT的API即可。 英文:Programming Language Conversion Tool based on ChatGPT AI 本文一共 283 个汉字, 你数一下对不对. 可以用ChatGPT来轻松转换编程语言. (AMP 移动加速版本) 赞赏我的几个理由. ¥ 打赏支持 扫描二维码,分享本文到微信朋友圈

数据和软件工程师职责区别

近几年随着大数据机器学习的流行,除了传统的软件工程师延申出了一些和数据科学/人工智能/机器学习相关的职业:数据工程师、数据科学家、机器学习工程师、软件工程师、数据分析师。 这些职位在数据和软件工程领域中都很受欢迎,每个职位都有其特定的职责和技能需求。以下是对这些职位的简单描述和它们之间的区别: 数据工程师 Data Engineer 工作职责: 设计、构建、整合、维护大数据平台和数据管道。确保数据可以在大规模和高速地在不同系统之间流动。 技能和工具: Hadoop, Spark, Kafka, Airflow, SQL, NoSQL数据库等。 数据科学家 Data Scientist 工作职责: 利用统计学、机器学习和其他高级技术来分析和解释数据,从而获得洞察力并做出预测。 技能和工具: Python, R编程, TensorFlow, PyTorch, Scikit-learn, 数据建模,统计分析。 数据分析师 Data Analyst …

ChatGPT 使用 Promise.All 重构/重写代码(并行发送请求)

在我的一个项目中, 我有以下代码(Node/Javascript), 它(顺序)调用了一些 API. 这些 HTTPS 请求其实是可以并行完成的, 因为它们相互独立. 然后结果会被聚合到一个数组中. 我知道可以用Promise.all来把这些请求并行化, 我就问了ChatGPT怎么弄, 看看它是否能理解并给出正确的代码: 我先用英文问 ChatGPT-3.5: Rewrite the following Python code using the Promise.all to parallelize the requests: let result = …