Tag: 软件工程师

记两次伦敦抖音面试经历(Tiktok)

第一次伦敦 TikTok 面试 四年前/2020年12月,我申请了伦敦 TikTok 的 System Engineer/系统工程师职位。那时伦敦的 TikTok 团队正在组建,面试我的工程师在北京。 第一轮面试主要是了解我的情况,根据简历逐段提问经历。当时这一轮并没有涉及技术问题,所以很顺利地进入了下一轮。 第二轮也是由北京的工程师面试,问了很多计算机相关的基本知识点,比如: TCP/IP 三次握手原理 Java 的 Stream 设计理念,为什么要有这个类? 然后是一道算法题:合并 K 个有序链表,这是一道力扣上的困难题。面试时需要在提供的编程环境中写出代码,并要求代码能够编译和通过测试。虽然没有想到最优解,简单解法也遇到了一些问题,最终没能在规定时间内通过。 很遗憾,这轮面试未通过。 整个面试流程给我的感觉是比较松散,面试官往往是随意提问,等几秒再问下一个问题。相比 Google、Meta 等大厂的面试,TikTok 的面试流程显得比较随意,并没有特别清晰的结构。 第二次伦敦 TikTok 面试 …

Docker, 虚拟机 (VM) 和 Kubernetes (K8s)

Docker 与虚拟机(VMs) 概述:Docker和虚拟机(VMs)都用于在隔离的环境中部署和运行应用程序,但它们的实现方式不同。 Docker(容器) 轻量级:容器共享主机的操作系统内核,因此比虚拟机更轻便,启动速度更快。 隔离:Docker 提供进程级别的隔离,意味着多个容器可以在同一个操作系统实例上运行而不会相互干扰。 高效性:由于容器共享操作系统,只需打包应用程序及其依赖项,因此使用的资源更少。 虚拟机(VMs) 重量级:每个虚拟机包含一个完整的操作系统实例和虚拟化硬件,因此消耗更多的资源。 隔离:虚拟机提供完全的隔离,每个虚拟机拥有自己的操作系统,这样更安全但效率较低。 使用场景:虚拟机适用于在同一主机上运行多种操作系统类型,是需要完全操作系统级别隔离的传统应用程序的理想选择。 总结:Docker 容器更高效且部署更快,而虚拟机提供更强的隔离,更适合多样化的操作系统需求。 什么是 Kubernetes(K8s)? 概述:Kubernetes(K8s)是一个开源平台,用于自动化容器化应用程序的部署、扩展和管理。 主要特性: 编排:Kubernetes 管理跨多个主机的容器集群,处理如扩展、网络和容错等任务。 自愈能力:它自动重启失败的容器,并在节点失败时重新调度,确保高可用性。 可扩展性:K8s 可以根据需求自动扩展应用程序,添加或移除容器。 使用场景:Kubernetes 非常适合在大规模上管理复杂的分布式应用程序,是微服务架构的热门选择。 简而言之,这篇文章展示了 Docker、虚拟机和 Kubernetes 的技术差异和实际应用,这是系统设计和云原生环境中至关重要的内容。 …

软件工程师可以通过ChatGPT来帮助审核代码(提高代码质量)

软件工程师(aka 码农)可以让ChatGPT来帮助审核代码。我发现在工作中挺好用的,把同事的PR(Pull Request)代码贴给ChatGPT,那么它会帮你看看代码中是否有问题,是不是有一些BUG,甚至会给你一些建议,效果很不错。很多时候我发现ChatGPT比我更专业,很能给出中肯的建议(我甚至想不到的方面,也帮助我拓展了思路) 不过,我不建议完全依赖于ChatGPT,至少在拿到ChatGPT的审核结果后你需要自己再看一眼,看看是不是有道理。切忌直接Copy/Paste。 你也可以试一试其它AI工具,像Google的Gemini(以前叫Bard),还有Claude AI等(现在各类AI通用人工智能真是百花其放)。 英文:ChatGPT Use Case for Software Engineer: Review Pull Requests (Code Reviews) 本文一共 202 个汉字, 你数一下对不对. 软件工程师可以通过ChatGPT来帮助审核代码(提高代码质量). (AMP 移动加速版本) 赞赏我的几个理由. ¥ 打赏支持 扫描二维码,分享本文到微信朋友圈

Meta的Enterprise Engineer企业工程师是什么? 和软件工程师的区别

我最近收到了一封来自 Meta 招聘人员的邀请邮件,关于 Meta 伦敦的员工企业工程师职位(Staff Enterprise Engineer): Meta 的企业工程师是什么? Meta 的企业工程师专注于设计、开发和维护内部工具和系统,以帮助公司员工提高生产力和效率。与传统的软件工程师角色相比,这一角色更偏向于内部,主要专注于为企业级需求构建基础设施、应用程序和自动化解决方案。以下是该职位的职责概述: 主要职责 内部工具和基础设施开发:企业工程师构建支持 Meta 内部业务运营的工具,例如 HR 系统、财务工具和协作平台。他们确保内部团队拥有高效运营所需的技术和系统。 自动化:该职位的一个重要方面是通过自动化工作流来减少人工操作并提高可扩展性。这可能包括自动化入职/离职流程、创建提高内部生产力的系统,或自动化数据工作流。 系统设计与集成:他们负责集成各种内部系统,确保 HR 工具、财务系统和公司使用的其他运营平台之间的数据流畅无阻。 与跨职能团队合作:企业工程师与 HR、财务、法律等业务团队紧密合作,了解他们的需求并将其转化为可扩展的技术解决方案。 解决问题:他们处理企业内的复杂运营问题,并提出技术解决方案,如改进内部流程或解决现有瓶颈。 所需技能 全栈开发:具备后端、前端和基础设施工具的经验。 系统设计:对系统架构和可扩展性有深入的理解。 企业 IT …

软件工程师面试: 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 查找 …