普通视图

发现新文章,点击刷新页面。
昨天以前首页

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


tiktok 记两次伦敦抖音面试经历(Tiktok) 程序员 计算机 面试

Tiktok 字节跳动/抖音

第一次伦敦 TikTok 面试

四年前/2020年12月,我申请了伦敦 TikTok 的 System Engineer/系统工程师职位。那时伦敦的 TikTok 团队正在组建,面试我的工程师在北京。

第一轮面试主要是了解我的情况,根据简历逐段提问经历。当时这一轮并没有涉及技术问题,所以很顺利地进入了下一轮。

第二轮也是由北京的工程师面试,问了很多计算机相关的基本知识点,比如:

  • TCP/IP 三次握手原理
  • Java 的 Stream 设计理念,为什么要有这个类?

然后是一道算法题:合并 K 个有序链表,这是一道力扣上的困难题。面试时需要在提供的编程环境中写出代码,并要求代码能够编译和通过测试。虽然没有想到最优解,简单解法也遇到了一些问题,最终没能在规定时间内通过。

很遗憾,这轮面试未通过。

整个面试流程给我的感觉是比较松散,面试官往往是随意提问,等几秒再问下一个问题。相比 Google、Meta 等大厂的面试,TikTok 的面试流程显得比较随意,并没有特别清晰的结构。

第二次伦敦 TikTok 面试

上个月我申请了伦敦 TikTok 的 Backend Software Engineer – FIDO2 Authentication 职位。第二天,一个 TikTok 的招聘人员联系我,建议我更适合另一个组的 Site Reliability Engineer – Security Engineer 职位。我表示两者都可以,但我更偏向后端开发。

your-application-at-tiktok-london-backend-software-engineer 记两次伦敦抖音面试经历(Tiktok) 程序员 计算机 面试

邮件收到了伦敦抖音的面试邀约

之后安排了下一轮面试,时长一个小时。前 30 分钟主要是各种基础知识点:

后 30 分钟则是一道算法题,也是力扣上的题,巧合的是正好是 Meta 面试时的一道高频题。为了准备面试,可以在力扣上刷过去 3/6 个月的高频题。

这次我回答得很完美,包括编写代码、提供测试用例,并耐心解释,程序顺利通过测试。

最后的 5 分钟一般是留给候选人提问的时间,毕竟面试是双向选择。我询问了 TikTok 的工作与生活平衡以及压力问题。面试官表示,TikTok 不是一个适合养老的公司。

很可惜,又止步这一轮,感觉八股文就是自己的弱项。Tiktok工作节奏给快,这一点从安排面试、给面试结果就能看得出来。我发了封邮件感谢了一下,并咨询是否可以获得一些面试的反馈,很可惜,和上次一样,Tiktok就再也没回消息了。我面试过这么多大厂,给面试反馈最好的是Meta,感觉他们很愿意反馈给面试者,帮助成长。

tiktok-application-reject-email 记两次伦敦抖音面试经历(Tiktok) 程序员 计算机 面试

伦敦抖音Tiktok面试后很快就给了拒信。

英文:Two Interview Experience with ByteDance Tiktok London

面试经历

面试题

面试技巧

面试其它

本文一共 837 个汉字, 你数一下对不对.
记两次伦敦抖音面试经历(Tiktok). (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c 记两次伦敦抖音面试经历(Tiktok) 程序员 计算机 面试
The post 记两次伦敦抖音面试经历(Tiktok) first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
  2. Meta的Enterprise Engineer企业工程师是什么? 和软件工程师的区别 我最近收到了一封来自 Meta 招聘人员的邀请邮件,关于 Meta 伦敦的员工企业工程师职位(Staff Enterprise Engineer): Meta 的企业工程师是什么? Meta 的企业工程师专注于设计、开发和维护内部工具和系统,以帮助公司员工提高生产力和效率。与传统的软件工程师角色相比,这一角色更偏向于内部,主要专注于为企业级需求构建基础设施、应用程序和自动化解决方案。以下是该职位的职责概述: 主要职责 内部工具和基础设施开发:企业工程师构建支持 Meta 内部业务运营的工具,例如...
  3. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  4. 避免选择低质量没保障的 VPS 公司 现在程序员基本都会有VPS服务器, 价钱也不贵, 一个月几美元, 随随便便就能申请个玩. 我自己这几年也玩了不少VPS, 现在手上大概有10台VPS, 用于不同的服务: 博客, 区块链, API等用途. 上两周, 其中一台服务器商 supremevps 突然发邮件 给两天时间,...
  5. 孩子喜欢的 cozmo 机器人 小儿子今年刚过5岁生日, 问他要啥生日礼物, 他说想要 cozmo 机器人. 我们都不知道这是啥, AMAZON一搜还不便宜, 均价200多到300多英镑都有. 估计是孩子在学校的时候知道的这机器人. 在AMAZON下了单, 很快就到了. 图像识别算法很厉害. 这机器人很厉害, 不需要告诉它, 它可以自己玩,...
  6. 同一台服务器上多个WORDPRESS站点的一些设置可以移出去 我自从把所有网站都挪到一处VPS服务器上 就发现很多事情省事很多 可以同时管理多个网站 包括 WORDPRESS博客. 比如我有四个WORDPRESS博客 然后我就把通用的一些资料给移出去 移到 HTTP或者HTTPS都不能直接访问的文件夹里这样就更安全许多. 文件 wp-conn.php 存储了 相同的数据库资料. 1 2...
  7. 优化设计 个人主页 并且 PageSpeed Insights 双项 100分 坛子的个人主页 www.tanzhijun.com 不错 很适合个人主页的模板. 而且是手机友好. 于是我照着把 我的主页改了改. https://steakovercooked.com 并且做了几点修改: 0. 使用 google mod_pagespeed 把 JS,...
  8. 在英国开车的简单介绍/英国开车上路需要准备什么? 在英国合法上路需要有: 有效的驾照; MOT 车的年检; 路税 (Road Tax);还有最重要的汽车保险; 四者缺一不可. 千万不要有侥幸心理, 因为警察现在都高科技, 都能扫描车牌就能知道你合不合法. 不合法直接拦下来轻则罚款, 重则扣车上述法庭. 驾照 在英国可以用欧盟的大部分驾照,...

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


docker Docker, 虚拟机 (VM) 和 Kubernetes (K8s) 云计算 学习笔记 程序员 计算机 面试

Docker

Docker 与虚拟机(VMs)

概述:Docker和虚拟机(VMs)都用于在隔离的环境中部署和运行应用程序,但它们的实现方式不同。

Docker(容器)

  • 轻量级:容器共享主机的操作系统内核,因此比虚拟机更轻便,启动速度更快。
  • 隔离:Docker 提供进程级别的隔离,意味着多个容器可以在同一个操作系统实例上运行而不会相互干扰。
  • 高效性:由于容器共享操作系统,只需打包应用程序及其依赖项,因此使用的资源更少。

虚拟机(VMs)

  • 重量级:每个虚拟机包含一个完整的操作系统实例和虚拟化硬件,因此消耗更多的资源。
  • 隔离:虚拟机提供完全的隔离,每个虚拟机拥有自己的操作系统,这样更安全但效率较低。
  • 使用场景:虚拟机适用于在同一主机上运行多种操作系统类型,是需要完全操作系统级别隔离的传统应用程序的理想选择。

总结:Docker 容器更高效且部署更快,而虚拟机提供更强的隔离,更适合多样化的操作系统需求。

什么是 Kubernetes(K8s)?

概述:Kubernetes(K8s)是一个开源平台,用于自动化容器化应用程序的部署、扩展和管理。

主要特性:

  • 编排:Kubernetes 管理跨多个主机的容器集群,处理如扩展、网络和容错等任务。
  • 自愈能力:它自动重启失败的容器,并在节点失败时重新调度,确保高可用性。
  • 可扩展性:K8s 可以根据需求自动扩展应用程序,添加或移除容器。
  • 使用场景:Kubernetes 非常适合在大规模上管理复杂的分布式应用程序,是微服务架构的热门选择。

简而言之,这篇文章展示了 Docker、虚拟机和 Kubernetes 的技术差异和实际应用,这是系统设计和云原生环境中至关重要的内容。

英文:Docker, Virtual Machines (VMs) and Kubernetes (K8s)

本文一共 555 个汉字, 你数一下对不对.
Docker, 虚拟机 (VM) 和 Kubernetes (K8s). (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c Docker, 虚拟机 (VM) 和 Kubernetes (K8s) 云计算 学习笔记 程序员 计算机 面试
The post Docker, 虚拟机 (VM) 和 Kubernetes (K8s) first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  2. 真正意义上的鼓励优秀作品 – 优秀被错过文章 有奖励啦! 大家都知道我的日报第一项就是 《那些优秀可能被错过的文章》这个算法是通过我自己的认识选出一些比较 好的文章 但是收益却比较低, 那么, 通过 @dailychina 天天回复, 比如: 对于作者来说, 除了心理得到表扬之外 并没啥卵用, 是吧. 而且有些作者经常上榜啊, 于是,...
  3. 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
  4. 在英国给孩子换学校的经历: 孩子离开了村里的小学 由于搬了家, 孩子上学得提前半小时出门了, 因为早上堵, 也得开车半小时才能到. 之前在 Fen Drayton 村庄上小学, 早上8:45学校门开, 9点敲钟孩子排队依次进入教室, 我们由于在村里, 只需要提前5分钟出门和孩子一起走路就可以了. 现在一下子早上变得很匆忙, 得叫孩子起床, 做早饭,...
  5. 英国房子的EPC节能报告(Energe/Efficiency Performance Certificate) EPC (Energe/Efficiency Performance Certificate) 是英国房子的节能报告, 法律上规定, 每个房子都必须要有一个EPC报告, 报告的有效期为十年. 房东在把房子出租或者想卖房的时候, 这个EPC就必须有效, 在一些情况下 比如出租房子的时候, 这个EPC报告还必须符合一些最低标准, 比如房子必须满足 F档(类似及格线)...
  6. 使用AWK来看见证人生成块的速度 每次见证人出块, 媳妇总我说 “又生了”. 每次出块我总会去算一下离上次出块多少时间, 这是可以通过当前块数和上次出块数算出来的. 首先, 我们可以通过 docker logs 来显示很多很多的记录: 有一个脚本 ./run.sh logs是显示最近几条记录 (tail) 我们可以通过管道...
  7. 同一台服务器上多个WORDPRESS站点的一些设置可以移出去 我自从把所有网站都挪到一处VPS服务器上 就发现很多事情省事很多 可以同时管理多个网站 包括 WORDPRESS博客. 比如我有四个WORDPRESS博客 然后我就把通用的一些资料给移出去 移到 HTTP或者HTTPS都不能直接访问的文件夹里这样就更安全许多. 文件 wp-conn.php 存储了 相同的数据库资料. 1 2...
  8. 公司请的专业摄影师 公司来了新的CEO管理之后,很多事情都不一样了, 特别是一些公司对外形象的事情就特别的在意, 比如公司网站用上SSL.现在公司还有空闲的位置,请速来(钱多人不傻). 一月份出差回LUTON,刚好公司请来摄影师给高层管理照像放网站上的,于是我也凑了凑热闹(但是却还不够资格被放在公司网站上),不过没关系,放这里也差不多. 人到中年, 沧桑感强了些. 更新更新: 同事用他NB的单反给谢菲尔得办公室的人也拍了一组这样的照片.看起来很不错, 很专业,灯光,道具应有尽有.我已经用在了LINKEDIN页面上,立马高大上. 本文一共 230 个汉字, 你数一下对不对. 公司请的专业摄影师. (AMP...

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


软件工程师(aka 码农)可以让ChatGPT来帮助审核代码。我发现在工作中挺好用的,把同事的PR(Pull Request)代码贴给ChatGPT,那么它会帮你看看代码中是否有问题,是不是有一些BUG,甚至会给你一些建议,效果很不错。很多时候我发现ChatGPT比我更专业,很能给出中肯的建议(我甚至想不到的方面,也帮助我拓展了思路)

chatgpt-review-code-pull-requests 软件工程师可以通过ChatGPT来帮助审核代码(提高代码质量) ChatGPT (OpenAI) 人工智能 (AI) 代码审核 小技巧 程序员 资讯

让ChatGPT帮我来审核同事的代码 Pull Requests

不过,我不建议完全依赖于ChatGPT,至少在拿到ChatGPT的审核结果后你需要自己再看一眼,看看是不是有道理。切忌直接Copy/Paste。

你也可以试一试其它AI工具,像Google的Gemini(以前叫Bard),还有Claude AI等(现在各类AI通用人工智能真是百花其放)。

英文:ChatGPT Use Case for Software Engineer: Review Pull Requests (Code Reviews)

ChatGPT 可以拿来做什么?

ChatGPT 通用人工智能

本文一共 224 个汉字, 你数一下对不对.
软件工程师可以通过ChatGPT来帮助审核代码(提高代码质量). (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c 软件工程师可以通过ChatGPT来帮助审核代码(提高代码质量) ChatGPT (OpenAI) 人工智能 (AI) 代码审核 小技巧 程序员 资讯
The post 软件工程师可以通过ChatGPT来帮助审核代码(提高代码质量) first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  2. 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
  3. 你要找什么样的老婆? 找媳妇的标准 昨天和网友在剑桥面基, 网友奔现, 他从爱尔兰过来, 小我12岁, 就聊到了找对象的标准. TLDR; 找老婆不要(只)看颜值, 而要注重性格, 为人处事和顾家等更重要的品质, 当然性和谐也很重要. 在当今社会, 人们对于找伴侣的标准有所不同. 有些人认为颜值是最重要的, 因为外貌吸引力可以让人在日常生活中感到愉悦, 这是人的本性,...
  4. 在英国给孩子换学校的经历: 孩子离开了村里的小学 由于搬了家, 孩子上学得提前半小时出门了, 因为早上堵, 也得开车半小时才能到. 之前在 Fen Drayton 村庄上小学, 早上8:45学校门开, 9点敲钟孩子排队依次进入教室, 我们由于在村里, 只需要提前5分钟出门和孩子一起走路就可以了. 现在一下子早上变得很匆忙, 得叫孩子起床, 做早饭,...
  5. 同一台服务器上多个WORDPRESS站点的一些设置可以移出去 我自从把所有网站都挪到一处VPS服务器上 就发现很多事情省事很多 可以同时管理多个网站 包括 WORDPRESS博客. 比如我有四个WORDPRESS博客 然后我就把通用的一些资料给移出去 移到 HTTP或者HTTPS都不能直接访问的文件夹里这样就更安全许多. 文件 wp-conn.php 存储了 相同的数据库资料. 1 2...
  6. ChatGPT-4 使用 Math Wolfram 插件解决数学脑筋急转弯问题 这篇文章, 我们看一个简单的数学问题(脑筋急转弯), 并用 Python 解决它. 我们看一下LLM(大型语言模型): ChatGPT3.5和ChatGPT4. 通过 ChatGPT-Plus 订阅(目前每月 20 美元 + VAT增值税), 我们可以启用...
  7. 送值400 英镑的Google Adwords广告代金券 很久之前, 我用过 Google AdWords, 当时也是拿着免费送的 Credit, 但由于某些原因, 就没继续再用下去. 这次谷歌又发邮件送了400英镑的广告点券/代金券, 如果您想要获得 400 英镑的 Google AdWords 信用额度试用这个Google...
  8. 公司请的专业摄影师 公司来了新的CEO管理之后,很多事情都不一样了, 特别是一些公司对外形象的事情就特别的在意, 比如公司网站用上SSL.现在公司还有空闲的位置,请速来(钱多人不傻). 一月份出差回LUTON,刚好公司请来摄影师给高层管理照像放网站上的,于是我也凑了凑热闹(但是却还不够资格被放在公司网站上),不过没关系,放这里也差不多. 人到中年, 沧桑感强了些. 更新更新: 同事用他NB的单反给谢菲尔得办公室的人也拍了一组这样的照片.看起来很不错, 很专业,灯光,道具应有尽有.我已经用在了LINKEDIN页面上,立马高大上. 本文一共 230 个汉字, 你数一下对不对. 公司请的专业摄影师. (AMP...

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


我最近收到了一封来自 Meta 招聘人员的邀请邮件,关于 Meta 伦敦的员工企业工程师职位(Staff Enterprise Engineer):

meta-enterprise-engineer-invitation-interview Meta的Enterprise Engineer企业工程师是什么? 和软件工程师的区别 程序员 资讯

伦敦Meta猎头Staff Enterprise Engineer的面试邀请

Meta 的企业工程师是什么?

Meta 的企业工程师专注于设计、开发和维护内部工具和系统,以帮助公司员工提高生产力和效率。与传统的软件工程师角色相比,这一角色更偏向于内部,主要专注于为企业级需求构建基础设施、应用程序和自动化解决方案。以下是该职位的职责概述:

主要职责

  • 内部工具和基础设施开发:企业工程师构建支持 Meta 内部业务运营的工具,例如 HR 系统、财务工具和协作平台。他们确保内部团队拥有高效运营所需的技术和系统。
  • 自动化:该职位的一个重要方面是通过自动化工作流来减少人工操作并提高可扩展性。这可能包括自动化入职/离职流程、创建提高内部生产力的系统,或自动化数据工作流。
  • 系统设计与集成:他们负责集成各种内部系统,确保 HR 工具、财务系统和公司使用的其他运营平台之间的数据流畅无阻。
  • 与跨职能团队合作:企业工程师与 HR、财务、法律等业务团队紧密合作,了解他们的需求并将其转化为可扩展的技术解决方案。
  • 解决问题:他们处理企业内的复杂运营问题,并提出技术解决方案,如改进内部流程或解决现有瓶颈。

所需技能

  • 全栈开发:具备后端、前端和基础设施工具的经验。
  • 系统设计:对系统架构和可扩展性有深入的理解。
  • 企业 IT 和云技术:熟悉企业级 IT 服务、云基础设施和企业级 SaaS 产品。
  • 自动化工具:精通脚本语言(如 Python、Bash)以自动化常规任务。
  • 沟通能力:与非技术团队合作时,需要具备较强的沟通能力,将技术需求转化为易于理解的业务需求。

总体而言,Meta 的企业工程师在技术基础设施和业务需求之间架起桥梁,通过创建系统来简化公司范围内的运营。

meta Meta的Enterprise Engineer企业工程师是什么? 和软件工程师的区别 程序员 资讯

Meta / Facebook

TLDR:企业工程师是构建内部工具的软件工程师

企业工程师 vs 软件工程师

企业工程师和软件工程师的角色主要在于他们的关注点、工作范围和他们解决问题的类型有所不同。以下是两者的高层比较:

关注点

企业工程师:主要关注公司内部系统和运营效率。他们的工作包括设计和构建支持内部业务流程的工具,自动化工作流,并集成企业级软件,以提高 HR、财务和法律等内部团队的生产力。

软件工程师:专注于产品开发和面向客户的系统。他们设计、开发和维护公司终端用户(客户、开发者等)使用的软件产品或功能,通常涉及 Web 应用程序、移动应用程序或后端服务。

工作范围

企业工程师:处理企业级解决方案,通常涉及集成大型内部 IT 系统,如 ERP(企业资源规划)、CRM(客户关系管理)等工具,以提高 Meta 内部的运营效率。他们可能同时处理自有系统和第三方系统。

软件工程师:通常专注于特定的产品功能、性能优化,或为外部客户构建可扩展的系统。他们的工作更以产品为驱动,直接为公司的面向用户的产品贡献。

解决问题

企业工程师:解决运营问题,如如何自动化内部流程、管理企业范围的系统,或提高内部团队的工作流效率。他们可能会处理如自动化员工入职流程或改进业务部门之间的数据流。

软件工程师:解决与构建、扩展和维护产品相关的技术挑战。这些问题可能包括优化搜索算法、处理流量负载增加,或为数百万用户的应用程序构建新功能。

合作

企业工程师:与公司内部的业务相关方密切合作,如 HR、法律、财务或 IT 部门,了解他们的需求并提供技术解决方案,以简化他们的运营。

软件工程师:主要与产品经理、设计师和其他工程师合作,构建功能、提高性能并修复错误。他们的工作与产品目标和客户满意度保持一致。

技术栈

企业工程师:通常使用企业级软件、自动化工具、内部 API、数据库和云基础设施。他们可能会使用脚本语言(如 Python)和系统集成工具来连接各种服务。

软件工程师:使用广泛的软件开发技术,具体取决于产品(例如 Java、Python、JavaScript、C++ 等),包括前端、后端或移动开发工具、云平台和数据库。

职业影响

企业工程师:对内部生产力和效率产生重大影响。他们的工作确保 Meta 的内部团队能够顺利运营,并随着公司增长而扩展。

软件工程师:直接影响终端用户体验。他们帮助构建推动公司收入和用户参与的产品和服务。

TLDR

企业工程师:专注于内部工具和基础设施,改善 Meta 内部团队的运营效率。

软件工程师:专注于面向客户的产品和服务,解决与构建和扩展用户端软件相关的挑战。

这两个角色对公司整体的成功都至关重要,但它们的目的不同。

面试难度

Meta 的企业工程师面试难度略低于软件工程师。例如,企业工程师的编码时间为 45 分钟,而软件工程师则为 60 分钟。

你可能有机会在 Meta 内部从企业工程师转为软件工程师,通过额外的一两次面试(这将比外部候选人容易得多)。

比较: 软件工程师 vs 企业工程师

入职要求

企业工程师:

教育背景:

  • 通常需要计算机科学、信息系统或相关领域的学士学位。在某些情况下,拥有商业信息系统或类似领域的学位并具备强大的技术专长也可能被接受。

经验:

  • 具有企业级IT系统、内部工具和自动化相关经验的候选人将受到高度重视。
  • 熟悉企业软件,例如ERP(企业资源规划)系统或云平台,并且具有在内部业务系统(如HR或财务工具)上工作的经验。
  • 候选人可能需要具备使用自动化工具、脚本语言(如Python、Bash)和系统集成的经验。

技能:

  • 特别是在面向内部应用程序的全栈开发知识。
  • 在自动化、系统集成和企业IT基础设施方面拥有强大的技能。
  • 良好的沟通技巧,以便与非技术的利益相关者(HR、财务、法律团队)进行合作。

软件工程师:

教育背景:

  • 通常要求计算机科学、软件工程或相关领域的学士学位。高级学位(硕士或博士)可能是一个加分项,特别是在更高层次的职位或专门角色中。

经验:

  • 软件开发、网页开发或移动应用程序开发中的先前经验至关重要。
  • 熟悉现代编程语言(如Java、Python、C++、JavaScript)和软件开发框架(如React、Django、Spring)通常是必需的。
  • 系统设计、算法和可扩展性的工作知识是关键。

技能:

  • 在设计、开发和部署面向客户的产品方面具备熟练的能力。
  • 具有前端、后端或全栈开发、云服务和大规模系统的经验。
  • 解决技术挑战、性能优化和用户体验相关问题的能力。

面试难度

企业工程师:

面试结构:

  • 企业工程师的面试更侧重于系统设计、自动化和企业级问题的解决,而不仅仅是算法和数据结构。
  • 编码面试可能较短(如45分钟,相对于软件工程师的60分钟),但仍要求候选人展示其编码能力。
  • 系统设计面试通常侧重于内部工具、自动化和系统集成(例如,自动化入职系统,设计HR工具等)。
  • 可能会有关于企业IT系统、云基础设施和诸如企业工作流扩展等现实操作问题的讨论。

难度:

  • 通常认为比软件工程师的面试稍微简单一些,因为它更少关注算法问题,更多地集中在实际的系统设计和业务流程集成上。

软件工程师:

  • 面试结构:软件工程师面试通常强调编码挑战、数据结构、算法和系统设计。
  • 编码面试可能较长(如60分钟),并且候选人需要解决复杂的算法问题(如动态规划、图算法)。
  • 系统设计面试侧重于设计可扩展的、面向客户的系统(如社交媒体功能、推荐引擎或分布式系统)。
  • 对于高级职位,可能会额外关注架构、性能优化和处理大规模流量。

难度:

  • 通常被认为更难,特别是在像Meta和谷歌这样的顶级科技公司,因其深度关注算法、可扩展性和高流量系统。

薪酬待遇

企业工程师:鉴于企业工程师专注于内部系统,与面向客户的角色相比,他们可能拥有略好一些的工作与生活平衡,因为修复错误或部署新功能的紧迫性可能较低。

  • 基本工资:与同级别的软件工程师相当,但可能会因工作的内部性质而略有不同。企业工程师通常在科技公司中获得有竞争力的薪水。
  • 奖金和股票:Meta等公司为企业工程师提供绩效奖金和RSUs(限制性股票单位),但奖金结构有时可能略低于面向客户的角色。
  • 福利:标准的技术员工福利,如健康保险、退休计划、健康计划以及公司特定的其他福利,如健身房会员、免费餐食等。

软件工程师:面向客户的高压环境可能意味着更长的工作时间或更多的压力,但通常也带来总体上更高的报酬。

  • 基本工资:通常是行业中最高的之一,特别是在Meta这样的公司。由于工作直接影响收入,软件工程师的基本工资可能比企业工程师略高。
  • 奖金和股票:软件工程师通常获得高额奖金和大量RSUs(限制性股票单位),特别是因为他们的工作影响到面向最终用户的产品,直接影响公司的收入和用户参与度。
  • 福利:类似的福利,包括健康保险、退休计划、健康福利以及许多相同的公司特定福利。

软件工程师与企业工程师的关键差异总结

方面 企业工程师 软件工程师
入职要求 专注于内部系统、自动化和企业IT;需要一些企业工具的经验 专注于编程、算法和软件开发经验
面试难度 稍微简单一些;更注重系统设计和自动化,较少关注算法 更具挑战性;重点是算法、数据结构和可扩展性
薪酬待遇 有竞争力;通常有较高的基本工资、奖金和股票,但可能低于软件工程师 更高的基本工资、奖金和股票期权,特别是在高级职位上

两种角色都薪酬丰厚且有声望,软件工程师通常由于其面向客户的工作性质和解决的技术难题而获得更高的报酬。然而,企业工程师可能会享受更好的工作生活平衡 Work Life Balance,并专注于提高运营效率的角色。

英文:What is the Enterprise Engineer in Meta? (Comparisions to Software Engineer Roles)

软件工程师

本文一共 3273 个汉字, 你数一下对不对.
Meta的Enterprise Engineer企业工程师是什么? 和软件工程师的区别. (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c Meta的Enterprise Engineer企业工程师是什么? 和软件工程师的区别 程序员 资讯
The post Meta的Enterprise Engineer企业工程师是什么? 和软件工程师的区别 first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. 避免选择低质量没保障的 VPS 公司 现在程序员基本都会有VPS服务器, 价钱也不贵, 一个月几美元, 随随便便就能申请个玩. 我自己这几年也玩了不少VPS, 现在手上大概有10台VPS, 用于不同的服务: 博客, 区块链, API等用途. 上两周, 其中一台服务器商 supremevps 突然发邮件 给两天时间,...
  2. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  3. 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
  4. 同一台服务器上多个WORDPRESS站点的一些设置可以移出去 我自从把所有网站都挪到一处VPS服务器上 就发现很多事情省事很多 可以同时管理多个网站 包括 WORDPRESS博客. 比如我有四个WORDPRESS博客 然后我就把通用的一些资料给移出去 移到 HTTP或者HTTPS都不能直接访问的文件夹里这样就更安全许多. 文件 wp-conn.php 存储了 相同的数据库资料. 1 2...
  5. 英国大多数人平均养老金是5万英镑 今天看到这个统计:英国2021年养老金是5万英镑。意思是大多数打工人在退休的时候能有5万英镑的养老金。当然平均并不是很好的指标,因为这个很可能还是被富人给平均拉上去了。我相信中位数会更低一些。 如果我们将这55900英镑分散到25年内使用,这意味着每年可以获得2,236英镑的养老金。一个月183英镑。这甚至都不够交水电费的。不过还好,退休的时候应该房贷都还完了。 养老金(Pension)是由每月工资的一小部分攒起来的,一般是3%到7%左右,公司/雇主都会匹配,比如你贡献5%,公司会匹配5%。所以有一半的养老金可能是雇主给你交的/贡献的。 据说英国养老金封顶是100万英镑,超过了就如桶装水满了浪费了。等到了退休年纪,就有权力一次性取出来,其中20%是免税额度。 英国国家养老金 State Pension 条件是需要工作30年, 交满30年的NI税。国家的这个养老金也不是很多,大概180英镑1周(这个钱是按现在的购买能力来估计的,会不断的调整),能保障个生活吧。 一份工作的薪资待遇也得包括养老金,不过这个应该是公司统一规定/比例的,养老金也是你的钱,只不过你暂时拿不出来了而已,现在英国的退休年龄大概是68岁左右,如果是自己交的保险,大概55岁之后就可以选择性的半工半退,比如一周可以上3天班,然后剩下2天班由养老金来支付。 除非是你有个很强的金融头脑,能把钱投资到更赚钱的领域,我还是不太建议 Opt-out养老金(也就是不参与), 年轻的时候还是得多多为了老的时候准备,得未雨绸缪。 如果你有多份工作,那么很有可能每一次养老金都是由不同的养老金管理公司来管,那么可以通过 Pension...
  6. 虚拟货币USDT兑换法币英镑的汇率比较: Crypto.com, Ledger硬件钱包卡 和 WirexApps USDT虚拟货币 – 也被常称为U或者泰达币. USDT(Tether)是一种与美元挂钩的稳定币. 它旨在与美元保持 1:1 比价, 这意味着 1 USDT 始终等于 1 美元. 它主要用作不同数字资产交易所之间转移价值的手段, 允许交易者和投资者轻松地在平台之间转移资金,...
  7. 老婆的配偶签证被拒 郁闷死了, 601镑签证费打水漂,一去不回!费钱费力. 去年12月份我请了律师拿到了永居.老婆是T1G签证的陪工签 (DEPENDENT VISA) 2016年4月份到期. 然后我就想说得趁早把她的签证转成配偶签(SPOUSE)这样她就可以尽快走五年永居的路线. 今天收到拒签信,原因是我没有提供 有工资进帐的那份银行帐单,我提供了我和我老婆的联名帐户, 但是工资并不是直接打到这个帐单上的.所以就这一点被拒了.完全不给解释,不给补材料的机会.601镑就这样再见了. 英国的签证寄出之后是先由另一个部门先收费, 收完费才正式审理,而且不管结果如何是不退钱的.后悔没让律师弄,也不至于到现在浪费这么多时间和金钱,签证还没过.由于原签证还没到期,所以还不能上述.估计只能等搬完家后年底请律师搞定这事. 真是郁闷, 600镑, 我可以再买一个IPHONE6,或者给我的新买的车换四个轮胎....
  8. 公司给配了台高配DELL笔记本 早上例会结束的时候我顺便说了一句 我的笔记本有点慢, 当时我并不知道我的经理远程用电话也参加会议了(他全程在听), senior staff SE 对着电话说, “peter, you hear that? btw, my disks are...

软件工程师面试: 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 通过确认、序列号和错误检查等机制,确保数据包按顺序无误地到达。
  • 流量控制:TCP 通过滑动窗口管理数据流,防止接收方超载。

TCP/IP 协同工作原理

  • 应用数据:应用层将数据(例如网页、电子邮件)发送到传输层(TCP)。
  • TCP 层:TCP 将数据分段,添加序列号和错误检查信息,并将其发送到 IP 层。
  • IP 层:IP 层将 TCP 段封装成 IP 包,附上源和目标 IP 地址,并通过各种网络路由数据包。
  • 接收端:在目标设备上,IP 层将数据包交给 TCP,TCP 重新排列并验证数据的完整性,然后将其传递给应用层。

TCP/IP 套件中的其他协议

  • UDP(用户数据报协议):一种无连接、速度更快的 TCP 替代方案,常用于视频流、在线游戏等实时通信。
  • HTTP/HTTPS(超文本传输协议):用于网络通信的应用层协议。
  • DNS(域名系统):将域名解析为 IP 地址。

TCP/IP 确保数据在网络间高效传输,保持可靠性、地址分配和路由,同时遵循互联网的基本通信原则。

TCP/IP 通常被描述为一个四层模型,但有时它可以与 OSI 模型(七层)进行比较。

tcp-ip-and-osi-model 软件工程师面试: TCP/IP协议是什么? 学习笔记 程序员 计算机 计算机 软件工程 面试

TCP/IP 4层协议和OSI的7层协议的比较

TCP/IP 四层模型

TCP/IP 模型简化为四层,旨在反映协议在现实网络中的工作方式。

应用层

这一层对应于 OSI 模型的前三层(应用层、表示层和会话层)。它包括 HTTP、HTTPS、FTP、DNS 和 SMTP 等协议。

传输层

负责设备之间的可靠通信。运行于这一层的协议包括 TCP(传输控制协议)和 UDP(用户数据报协议)。

互联网层

处理跨网络的数据包路由,类似于 OSI 的网络层。该层包含 IP(互联网协议),用于地址分配和数据包路由。

网络接口层(或链路层)

这一层负责物理网络(如以太网、Wi-Fi)和互联网层之间的数据传输。它对应于 OSI 的数据链路层和物理层。

OSI 七层模型

OSI(开放系统互联)模型更加细致,将网络功能分为七个层次。

  • 物理层(如电缆、交换机)
  • 数据链路层(如 MAC 地址、以太网)
  • 网络层(如 IP 路由)
  • 传输层(如 TCP、UDP)
  • 会话层(如管理应用之间的会话)
  • 表示层(如加密、数据格式转换)
  • 应用层(如 HTTP、FTP)

主要区别:TCP/IP vs OSI

TCP/IP 将一些功能合并为更少的层次(四层),反映了它在互联网通信中的实际应用。

OSI 是一个更加详细的概念模型(七层),主要用于教学和理论理解。

总结来说,TCP/IP 通常被认为是四层模型,而 OSI 模型则是七层模型。

英文:What is TCP/IP (4 Layer vs OSI 7 Layer)?

面试经历

面试题

面试技巧

面试其它

本文一共 1009 个汉字, 你数一下对不对.
软件工程师面试: TCP/IP协议是什么?. (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c 软件工程师面试: TCP/IP协议是什么? 学习笔记 程序员 计算机 计算机 软件工程 面试
The post 软件工程师面试: TCP/IP协议是什么? first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  2. 孩子喜欢的 cozmo 机器人 小儿子今年刚过5岁生日, 问他要啥生日礼物, 他说想要 cozmo 机器人. 我们都不知道这是啥, AMAZON一搜还不便宜, 均价200多到300多英镑都有. 估计是孩子在学校的时候知道的这机器人. 在AMAZON下了单, 很快就到了. 图像识别算法很厉害. 这机器人很厉害, 不需要告诉它, 它可以自己玩,...
  3. 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
  4. 这些年在英国开过的车 这个车是真的汽车,从2010/2011年开始学驾照,到2012年考过驾照(两次才过),到现在也有十几年的驾龄了,真的算老司机了。 现在开的是两辆车(第四和第五),分别是奥迪Q5和保时捷卡宴。目前每周加保时捷的油费大概是50英镑。 第一辆 Seat Ibiza 第一辆:在英国的第一辆小黄车 Seat Ibiza (西亚特·伊比飒) 离合很重,男人开的车,当时用来练手,最后面到谢菲而得/Sheffield因为住在市中心不太需要车,就给卖了。 第二辆 奥迪AUDI A6 这辆开了有近十年,当时从谢菲搬家到剑桥Cambourne大剑宝就是开得这车。开了近10年的奥迪A6卖给了车厂(内含开车成本) 我当时买的时候是7000左右,然后买来修了修又多花了1000多英镑,...
  5. 同一台服务器上多个WORDPRESS站点的一些设置可以移出去 我自从把所有网站都挪到一处VPS服务器上 就发现很多事情省事很多 可以同时管理多个网站 包括 WORDPRESS博客. 比如我有四个WORDPRESS博客 然后我就把通用的一些资料给移出去 移到 HTTP或者HTTPS都不能直接访问的文件夹里这样就更安全许多. 文件 wp-conn.php 存储了 相同的数据库资料. 1 2...
  6. Win10右键添加管理员权限.reg 保存以下为 *.reg 文件 双击 Windows Registry Editor Version 5.00 @="获取管理员权限" "NoWorkingDirectory"="" @="cmd.exe /c takeown /f...
  7. 老婆的配偶签证被拒 郁闷死了, 601镑签证费打水漂,一去不回!费钱费力. 去年12月份我请了律师拿到了永居.老婆是T1G签证的陪工签 (DEPENDENT VISA) 2016年4月份到期. 然后我就想说得趁早把她的签证转成配偶签(SPOUSE)这样她就可以尽快走五年永居的路线. 今天收到拒签信,原因是我没有提供 有工资进帐的那份银行帐单,我提供了我和我老婆的联名帐户, 但是工资并不是直接打到这个帐单上的.所以就这一点被拒了.完全不给解释,不给补材料的机会.601镑就这样再见了. 英国的签证寄出之后是先由另一个部门先收费, 收完费才正式审理,而且不管结果如何是不退钱的.后悔没让律师弄,也不至于到现在浪费这么多时间和金钱,签证还没过.由于原签证还没到期,所以还不能上述.估计只能等搬完家后年底请律师搞定这事. 真是郁闷, 600镑, 我可以再买一个IPHONE6,或者给我的新买的车换四个轮胎....
  8. 公司给配了台高配DELL笔记本 早上例会结束的时候我顺便说了一句 我的笔记本有点慢, 当时我并不知道我的经理远程用电话也参加会议了(他全程在听), senior staff SE 对着电话说, “peter, you hear that? btw, my disks are...

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


最近面试的时候遇到这个问题。这个问题考你计算机的基本功。

在 C/C++ 中,内存管理是控制程序如何分配和管理其资源的关键方面。C/C++ 程序中的内存通常分为不同的区域:堆栈和堆是最主要的动态和自动内存分配区域。

ACM题解系列之 – 最小堆栈 (Min Stack)

stack C/C++ 中的内存管理器(堆与栈) 学习笔记 技术 程序员 程序设计 编程 计算机 软件工程 面试

Stack 栈

堆栈内存

  • 定义:堆栈内存用于静态(自动)内存分配。它是存储函数参数、本地变量和返回地址的地方。当调用一个函数时,一个新的内存块(称为堆栈帧)会被添加到堆栈的顶部。当函数返回时,该内存会被自动释放。
  • 分配:内存由系统自动管理——在变量超出作用域时自动分配和释放。无需人工干预。
  • 生命周期:受限于函数或代码块的作用域。一旦函数退出,内存将被释放。
  • 大小限制:堆栈的大小通常较小并由系统预定义,意味着大的分配可能导致堆栈溢出。
  • 访问速度:由于其后进先出(LIFO)的结构,堆栈内存访问速度更快。由于内存是连续的且可预测的,它允许快速访问。
  • 使用场景:局部变量、函数调用信息和固定大小的对象(数组、结构体)。

堆内存

  • 定义:堆内存用于动态内存分配,程序员使用 C 中的 malloc()、calloc()、free() 和 C++ 中的 new、delete 手动分配和释放内存。
  • 分配:内存在运行时分配,并且分配的生命周期由程序员手动控制。它可以持续存在,直到显式释放。
  • 生命周期:堆分配的对象的生命周期不受作用域的限制。内存将一直被使用,直到被释放为止。
  • 大小限制:堆通常比堆栈大,但取决于系统资源。不当处理可能导致内存泄漏(忘记释放分配的内存)或碎片化(内存使用效率低)。
  • 访问速度:堆内存的访问速度比堆栈慢,因为分配是分散的,动态分配涉及更多的开销。
  • 使用场景:如链表、等大数据结构,或在运行时确定大小的对象。

堆与栈的主要区别

特征 堆栈
内存大小 通常较小,预定义 通常较大,受系统资源限制
分配 自动,由编译器管理 手动,由程序员管理(使用 new、malloc 等)
释放 自动(函数退出时) 手动(使用 delete、free 等)
生命周期 限于函数/代码块作用域 可以持续,直到显式释放
速度 较快(连续内存) 较慢(分散内存,开销更大)
风险 堆栈溢出(如果超出大小限制) 内存泄漏和碎片化

堆栈分配示例

void function() {
    int x = 10; // 分配在堆栈上
} // x 会自动释放

堆分配示例

void function() {
    int* p = new int; // 分配在堆上
    *p = 10;
    delete p; // 必须手动释放
}

正确管理堆内存在 C/C++ 中非常重要,因为它可能导致与内存相关的错误,如内存泄漏或重复释放。理解堆和堆栈内存之间的差异有助于优化程序的性能和可靠性。

英文:The Memory Manager in C/C++ (Heap vs Stack)

面试经历

面试题

面试技巧

面试其它

本文一共 874 个汉字, 你数一下对不对.
C/C++ 中的内存管理器(堆与栈). (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c C/C++ 中的内存管理器(堆与栈) 学习笔记 技术 程序员 程序设计 编程 计算机 软件工程 面试
The post C/C++ 中的内存管理器(堆与栈) first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. Javascript 中 sleep 函数实现 Javascript 中并没有 built-in 的 sleep 函数支持, 在 async/await/Promise 的支持之前, 我们可以用 busy-waiting 的方式来模拟: 1 2 3...
  2. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  3. 《Steem 指南》之 justyy 在线工具与 API 系列 – 同时给多个帐号发送SBD或者STEEM 同时给多个帐号发送SBD或者STEEM STEEMIT 和 BUSY 的前端都有一个内置的钱包工具, 您可以一次给一个帐号发送 SBD 或者 STEEM. 当我们要给很多很多人发送钱的时候, 就显得有些不方便了. 这时候可以用这个在线工具: https://steemyy.com/wallet-tool/ 填写表单 只需要填上你的ID,...
  4. 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
  5. 拔牙后的注意事项(图, 慎入) Care of Mouth after Extraction 昨天又拔了两颗牙, 初步定在5月4号装牙套. 这是牙医诊所给的术后注意事项: 拔完后需要等3-4小时麻醉失效后才能吃喝. 稍微流点血是很正常的. 但是请不要漱口吐出, 因为这会加速流血. 你只要轻轻的含着口水并咽下即可. 如果一直流血, 请拿着纱布(并不是纸巾)放在拔牙处20分钟. 24小时内请不要运动, 术后几小时内回家静静坐着. 12小时内不要吸烟, 喝酒或者喝热饮, 因为这会让伤口流血....
  6. 同一台服务器上多个WORDPRESS站点的一些设置可以移出去 我自从把所有网站都挪到一处VPS服务器上 就发现很多事情省事很多 可以同时管理多个网站 包括 WORDPRESS博客. 比如我有四个WORDPRESS博客 然后我就把通用的一些资料给移出去 移到 HTTP或者HTTPS都不能直接访问的文件夹里这样就更安全许多. 文件 wp-conn.php 存储了 相同的数据库资料. 1 2...
  7. 最简单有效的过滤WordPress垃圾评论的方法 当你的Wordpress博客流量大的时候, 不免会收到很多垃圾评论. 本文介绍一种特别简单而且免费的过滤Wordpress垃圾评论的方法. 这种方法不需要你安装任何插件, 也不需要拥有修改Wordpress主题模板函数的能力, 只需要1分钟就可以搞定. 把这个列表拷贝下来 打开 WordPress 的控制面版, 到设置-讨论 拷贝上面的列表到 “评论审核” 或者 “评论黑名单”...
  8. 更改全站的评论名称 坛子给我建议说: 我觉得很有道理,但是别人网站上的留言我改不了, 自己的还是可以先改改的. 于是,我登陆 phpmyadmin (一个网页式的php mysql 管理平台) 然后输入以下命令: update `wp_comments` set `wp_comment_author` = 'JustYY.com...

软件工程师经典面试题: 当你在浏览器的地址栏敲入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 查找

浏览器需要将域名 www.google.com 转换为一个 IP 地址。这个过程分为几个步骤:

  • 浏览器缓存:浏览器 首先检查自己的缓存,看看是否已有 www.google.com 的 IP 地址。
  • 操作系统缓存:如果未找到,浏览器会向操作系统请求缓存。
  • 路由器缓存:如果操作系统没有该 IP,路由器会检查它的缓存。
  • ISP DNS 服务器:如果依然未找到,路由器会查询 ISP 的 DNS 服务器。
  • 递归 DNS 查找:如果 ISP 没有缓存 IP,DNS 服务器会递归查询 DNS 层次结构(根 DNS 服务器、顶级域名服务器、权威 DNS 服务器)。最终,www.google.com 的 IP 地址被解析出来(例如,142.250.72.196)。

建立 TCP 连接

知道 IP 地址后,浏览器需要与 Google 服务器建立连接,使用以下步骤:

TCP 三次握手:

  • SYN:客户端(浏览器)向服务器发送 SYN(同步)包,启动连接。
  • SYN-ACK:服务器响应 SYN-ACK(同步确认)包。
  • ACK:客户端发送 ACK 包,连接建立。

SSL/TLS 握手(针对 HTTPS)

由于使用的是 HTTPS,浏览器与服务器通过 SSL/TLS 建立加密连接:

  • 浏览器与服务器协商加密协议(TLS 版本)并交换加密密钥。
  • 服务器发送其 SSL 证书,浏览器验证该证书以确保服务器身份。
  • 生成会话密钥,用于加密接下来的通信。

HTTP 请求

建立安全连接后,浏览器向服务器发送 HTTP GET 请求:

  • 方法:GET
  • 请求头:包括浏览器类型、cookies 和缓存信息。
  • 主机:www.google.com
  • 路径:/

服务器处理

Google 的服务器位于 负载均衡器 后面,接收请求:

请求可能会通过多个反向代理和负载均衡器处理,通常分布在多个数据中心,以确保可用性和性能

Google 的 Web 服务器处理请求,检查所请求的资源(Google 的主页),并准备响应。

HTTP 响应

服务器返回一个 HTTP 200 OK 响应,并将必要的 HTML、CSS、JavaScript 和其他资源发送到浏览器。

响应包括响应头(如 Content-Type、Cache-Control)以及响应体(Google 主页的 HTML 内容)。

浏览器渲染

浏览器现在获取了 HTML 并开始渲染页面:

  • HTML 解析:浏览器解析 HTML 以构建 DOM(文档对象模型)。
  • CSS 解析:下载并应用任何链接或嵌入的 CSS 样式表以设置 DOM 元素的样式。
  • JavaScript 执行:下载并执行 JavaScript。JavaScript 可能进一步修改 DOM 或发送额外的网络请求(如 AJAX)以动态更新页面。
  • 渲染:浏览器的渲染引擎将解析和样式化的内容绘制到屏幕上,形成可见的网页。

附加资源请求

当浏览器解析 HTML 时,它会识别出额外的资源(图片、样式表、JavaScript 文件)需要加载:

这些资源通过额外的 HTTP/HTTPS 请求获取。这个过程会通过多个并行连接重复进行,以 快速下载和渲染资源。

浏览器缓存与优化

浏览器会根据缓存头(如 Cache-Control、ETag)缓存某些资源(图片、脚本、样式表)。

现代浏览器使用诸如 HTTP/2 多路复用等优化技术,通过单个 TCP 连接下载多个资源,从而减少延迟。

最终页面显示

一旦所有资源下载、解析和渲染完成,用户可以与完全加载的页面进行交互。进一步的用户操作(点击、输入等)可能会触发更多的网络请求(如提交表单、AJAX 更新)。

加分点

  • CDN(内容分发网络):Google 使用 CDN 从地理位置较近的服务器提供内容,减少延迟并提高加载速度。
  • 安全功能:HSTS(HTTP 严格传输安全)确保所有请求都通过 HTTPS 进行。Google 的证书绑定技术确保服务器的 SSL 证书未被篡改。
  • Service Workers:如果启用,Service Worker 可能会拦截请求,提供缓存响应或启用离线功能。

这份详细的说明涵盖了从用户输入 URL 到浏览器最终渲染页面的所有关键步骤,涉及 DNS、TCP/IP、TLS、HTTP 和浏览器渲染等内容,适合系统设计或软件工程面试。

英文:Software Engineering Interview Question: What Happens When You Type Google.com in the Browser Address Bar?

面试经历

面试题

面试技巧

面试其它

本文一共 1423 个汉字, 你数一下对不对.
软件工程师经典面试题: 当你在浏览器的地址栏敲入google.com并按回车后发生了什么?. (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c 软件工程师经典面试题: 当你在浏览器的地址栏敲入google.com并按回车后发生了什么? 学习笔记 程序员 计算机 资讯 软件工程 面试
The post 软件工程师经典面试题: 当你在浏览器的地址栏敲入google.com并按回车后发生了什么? first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. 软件工程师面试: TCP/IP协议是什么? 最近,在面试第一轮抖音(字节跳动)的伦敦职位(Site Reliability Engineer),被问到了这个问题:TCP/IP协议是什么?这个是考基本功,是每个软件工程师都要会的。 TCP/IP(传输控制协议/互联网协议)是一组网络协议,管理数据如何通过互联网和其他网络传输。它是互联网的基本通信模型,由两个主要层组成: 互联网协议 (IP) IP 负责将数据包从源地址路由到目标地址。它工作在 OSI 模型的网络层。 IP 地址:互联网中的每个设备都被分配了一个唯一的 IP 地址,用于标识数据包的发送者和接收者。 数据包路由:IP...
  2. Meta的Enterprise Engineer企业工程师是什么? 和软件工程师的区别 我最近收到了一封来自 Meta 招聘人员的邀请邮件,关于 Meta 伦敦的员工企业工程师职位(Staff Enterprise Engineer): Meta 的企业工程师是什么? Meta 的企业工程师专注于设计、开发和维护内部工具和系统,以帮助公司员工提高生产力和效率。与传统的软件工程师角色相比,这一角色更偏向于内部,主要专注于为企业级需求构建基础设施、应用程序和自动化解决方案。以下是该职位的职责概述: 主要职责 内部工具和基础设施开发:企业工程师构建支持 Meta 内部业务运营的工具,例如...
  3. 测测你的幸运 – Linux Fortune-Teller LINUX 下有很好很好玩的命令,之前已经介绍过: figlet, rig, curl. 现在推荐另一个 命令 fortune 是用来随机显示一段(句)话的.fortune 在英文里就是幸运的意思. 这个命令可以不需要 参数 如果没有 可以通过 apt-get...
  4. 新的旅途 – 离别总是伤感的, 离开了一起创业的公司 2周前, 正式离开了一起创业的公司, 这公司是我博士毕业后的第一份正式工作, 待了8年多了, 离别总是伤感的. 我是9月初提的离职, 三个月 Notice Period, 最后的几周交接完工作确实没有什么压力了. 11月30号, 在公司最后一天, 公司有个习惯, 对于 Good...
  5. Minuet in C – 小步舞曲C Posted Youtube – 油管地址 孩子弹琴的时候最帅了. 我现在成了我儿子的粉丝了. Eric (Aged 6) is playing “Minuet in C” when...
  6. 上了年纪痛风脚崴了的惨痛经历(尿酸过高) 痛风是一种疼痛性关节炎, 当血液中的尿酸水平高, 导致晶体形成并积聚在关节内或关节周围, 就会发生痛风. 当人体分解一种叫做嘌呤的化学物质时, 就会产生尿酸. 嘌呤自然存在于您的身体中, 也存在于某些食物中. 尿酸通过尿液从体内排出. 上两周, 和媳妇吵架, 然后就自己一人睡, 有一天起床后脚踝就开始疼了, 然后明显比左脚肿了. 我刚开始就以为是睡觉的时候不小心姿势不对,...
  7. 优衣库 感觉像炒作 这几天 这个在北京三里屯 ‘优衣库’ 试衣间自拍的视频真的很火, 男女主角均被人肉. 不可否认 这个效果还真的不错 因为我之前根本不知道 “优衣库” 是干嘛的 很刺激 在试衣间XXOO是多么爽的事情 女主角 95后妹子 长相甜美....
  8. RMB人民币数字转大写汉字 – Javascript工具 Javascript工具RMB人民币数字转大写汉字 源码: https://justyy.com/js/atoc.js 最多只能计算15位, 小数点支持2位(毛和分). 最后一位分为0时, 需要加上’整’. 而且还需要在万亿,亿,万,元位等关键位0的位置写上’零’. 例如: 325.04 写成人民币 ‘叁佰贰拾伍元零肆分’ 人民币金额用到的中文大写汉字如下: 零~壹~贰~叁~肆~伍~陆~柒~捌~玖~拾~佰~仟~万~亿 壹佰贰拾壹万叁仟肆佰壹拾贰元整...

45 分钟模拟面试(编程、系统设计)+职业发展建议


许多大型科技公司(如 FANG:Facebook/Meta、Apple、Netflix、Google)以及微软等,在发出工作邀请之前,通常会进行多轮面试。这些面试通常包括编程/Coding、系统设计/System Design和行为评估/Behaviour,以考察文化契合度。

我提供 45 分钟的模拟面试,帮助您准备编码和系统设计环节。作为曾在亚马逊(AWS,S3 Object Lambda)担任面试官的我,将通过真实的练习环节为您提供指导。在编码模拟面试中,您将解决一到两个编程问题;而在系统设计模拟面试中,您需要在白板上设计一个可扩展的产品。

此外,我还提供 45 分钟的聊天时间,可以讨论任何话题,包括职业发展和建议。

我目前定价 60 英镑一小时,会员价是 55 英镑,毕竟时间就是金钱。而这也大概和我的时薪差不多。

如果您有兴趣,请点击此处

mocked-interviews 45 分钟模拟面试(编程、系统设计)+职业发展建议 微软 程序员 系统设计 资讯 面试

本人提供模拟面试(编程/系统设计)或/和 职业规划建议

PS:我发现 Buy Me a Coffee 这个创业点子很好,赞赏+集成了网上商店,很是方便,界面也很友好,感兴趣的可以通过这个链接来创建一个专属于你的页面,在为用户创作内容的同时也能很快捷的收到赞赏!

英文:45 Minute Mock Interview (Coding, System Design) + Career Development Advices

system-design-interview 45 分钟模拟面试(编程、系统设计)+职业发展建议 微软 程序员 系统设计 资讯 面试

系统设计面试 System Design Interview

面试经历

面试题

面试技巧

面试其它

软件工程师

本文一共 395 个汉字, 你数一下对不对.
45 分钟模拟面试(编程、系统设计)+职业发展建议. (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c 45 分钟模拟面试(编程、系统设计)+职业发展建议 微软 程序员 系统设计 资讯 面试
The post 45 分钟模拟面试(编程、系统设计)+职业发展建议 first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
  2. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  3. 英国房子的EPC节能报告(Energe/Efficiency Performance Certificate) EPC (Energe/Efficiency Performance Certificate) 是英国房子的节能报告, 法律上规定, 每个房子都必须要有一个EPC报告, 报告的有效期为十年. 房东在把房子出租或者想卖房的时候, 这个EPC就必须有效, 在一些情况下 比如出租房子的时候, 这个EPC报告还必须符合一些最低标准, 比如房子必须满足 F档(类似及格线)...
  4. 同一台服务器上多个WORDPRESS站点的一些设置可以移出去 我自从把所有网站都挪到一处VPS服务器上 就发现很多事情省事很多 可以同时管理多个网站 包括 WORDPRESS博客. 比如我有四个WORDPRESS博客 然后我就把通用的一些资料给移出去 移到 HTTP或者HTTPS都不能直接访问的文件夹里这样就更安全许多. 文件 wp-conn.php 存储了 相同的数据库资料. 1 2...
  5. 拔牙后的注意事项(图, 慎入) Care of Mouth after Extraction 昨天又拔了两颗牙, 初步定在5月4号装牙套. 这是牙医诊所给的术后注意事项: 拔完后需要等3-4小时麻醉失效后才能吃喝. 稍微流点血是很正常的. 但是请不要漱口吐出, 因为这会加速流血. 你只要轻轻的含着口水并咽下即可. 如果一直流血, 请拿着纱布(并不是纸巾)放在拔牙处20分钟. 24小时内请不要运动, 术后几小时内回家静静坐着. 12小时内不要吸烟, 喝酒或者喝热饮, 因为这会让伤口流血....
  6. 公司给配了台高配DELL笔记本 早上例会结束的时候我顺便说了一句 我的笔记本有点慢, 当时我并不知道我的经理远程用电话也参加会议了(他全程在听), senior staff SE 对着电话说, “peter, you hear that? btw, my disks are...
  7. 老婆的配偶签证被拒 郁闷死了, 601镑签证费打水漂,一去不回!费钱费力. 去年12月份我请了律师拿到了永居.老婆是T1G签证的陪工签 (DEPENDENT VISA) 2016年4月份到期. 然后我就想说得趁早把她的签证转成配偶签(SPOUSE)这样她就可以尽快走五年永居的路线. 今天收到拒签信,原因是我没有提供 有工资进帐的那份银行帐单,我提供了我和我老婆的联名帐户, 但是工资并不是直接打到这个帐单上的.所以就这一点被拒了.完全不给解释,不给补材料的机会.601镑就这样再见了. 英国的签证寄出之后是先由另一个部门先收费, 收完费才正式审理,而且不管结果如何是不退钱的.后悔没让律师弄,也不至于到现在浪费这么多时间和金钱,签证还没过.由于原签证还没到期,所以还不能上述.估计只能等搬完家后年底请律师搞定这事. 真是郁闷, 600镑, 我可以再买一个IPHONE6,或者给我的新买的车换四个轮胎....
  8. 花钱让人换汽车钥匙的电池真是个智商税 今天想不到我这么聪明的人也被人狠狠的收了一把智商税. 今天被收智商税了, 去 Tesco 换车钥匙的电池. . 才发现如此的简单, 那人直接2分钟搞定2个, 然后收了我25英镑. . 服了. . 我还以为很复杂…… 网友说 “1....

回忆起20年前大学时期的学生生活(2003-2004电脑长什么样?)


2003年,我参加了高考,暑假后便到了北京,9月份入学中国农业大学国际学院(ICB)。不过当时我是通过“计划外”入学的,因为高考成绩没能达到农大的录取分数线,所以是自费进入这个中外合作办学项目的。大一在国内学习,大二大三则出国。

2003-2004学年是我计算机知识突飞猛进的第一个阶段。那时我非常专注于学习,学院还专门为我和另一位同学请了一位外教。我淘了一台二手老电脑,装了Windows 95/98系统。其他同学都在玩游戏,而我的老电脑只能用来学习和编程。我的宿舍床上堆满了计算机书籍,大多是从二手书市场或者地摊淘来的。那个时候我可能一个学期都没换过被子,床上卫生环境可能很糟糕。

学院有专门的计算机实验室,我们当时学习的是Java,Applet编程还很流行。我记得那时C#刚刚问世。我觉得电脑课上的内容很简单,于是外教给我布置了一个特殊的题目,并承诺如果我能完成,期末考核就给我A+。最后我确实做出来了,他也信守承诺给了我A+。

mycomputer-scaled 回忆起20年前大学时期的学生生活(2003-2004电脑长什么样?) 照片 看图说话 程序员 编程 讲故事

当时二手淘的电脑,装的是WIN98,很老的电脑了,原来我喜欢这一类的美女,左下角那个可能是Modem

mywall2-scaled 回忆起20年前大学时期的学生生活(2003-2004电脑长什么样?) 照片 看图说话 程序员 编程 讲故事

宿舍7人上下铺,中国农业大学国际学院ICB舒畅宿舍

SV400005-scaled 回忆起20年前大学时期的学生生活(2003-2004电脑长什么样?) 照片 看图说话 程序员 编程 讲故事

笨重的CRT显示屏幕

SV400006-scaled 回忆起20年前大学时期的学生生活(2003-2004电脑长什么样?) 照片 看图说话 程序员 编程 讲故事

当时教程是JAVA-当时Applet还很流行

SV400008-scaled 回忆起20年前大学时期的学生生活(2003-2004电脑长什么样?) 照片 看图说话 程序员 编程 讲故事

中国农业大学国际学院ICB的电脑机房-摄于大概2003/2004年

英文:The Computers at Early 2000s

本文一共 542 个汉字, 你数一下对不对.
回忆起20年前大学时期的学生生活(2003-2004电脑长什么样?). (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c 回忆起20年前大学时期的学生生活(2003-2004电脑长什么样?) 照片 看图说话 程序员 编程 讲故事
The post 回忆起20年前大学时期的学生生活(2003-2004电脑长什么样?) first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  2. 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
  3. 在英国给孩子换学校的经历: 孩子离开了村里的小学 由于搬了家, 孩子上学得提前半小时出门了, 因为早上堵, 也得开车半小时才能到. 之前在 Fen Drayton 村庄上小学, 早上8:45学校门开, 9点敲钟孩子排队依次进入教室, 我们由于在村里, 只需要提前5分钟出门和孩子一起走路就可以了. 现在一下子早上变得很匆忙, 得叫孩子起床, 做早饭,...
  4. 同一台服务器上多个WORDPRESS站点的一些设置可以移出去 我自从把所有网站都挪到一处VPS服务器上 就发现很多事情省事很多 可以同时管理多个网站 包括 WORDPRESS博客. 比如我有四个WORDPRESS博客 然后我就把通用的一些资料给移出去 移到 HTTP或者HTTPS都不能直接访问的文件夹里这样就更安全许多. 文件 wp-conn.php 存储了 相同的数据库资料. 1 2...
  5. 公司请的专业摄影师 公司来了新的CEO管理之后,很多事情都不一样了, 特别是一些公司对外形象的事情就特别的在意, 比如公司网站用上SSL.现在公司还有空闲的位置,请速来(钱多人不傻). 一月份出差回LUTON,刚好公司请来摄影师给高层管理照像放网站上的,于是我也凑了凑热闹(但是却还不够资格被放在公司网站上),不过没关系,放这里也差不多. 人到中年, 沧桑感强了些. 更新更新: 同事用他NB的单反给谢菲尔得办公室的人也拍了一组这样的照片.看起来很不错, 很专业,灯光,道具应有尽有.我已经用在了LINKEDIN页面上,立马高大上. 本文一共 230 个汉字, 你数一下对不对. 公司请的专业摄影师. (AMP...
  6. Leetcode 的在线调试器 最近 leetcode 刷题网站出了一个在线调试器. 个人感觉非常好用. 因为我平时是用 IPAD+蓝牙键盘来刷题, 而在 ipad 上是没有集成的IDE的, 对于调试来说, 只能很原始的让函数退出一个值, 然后尝试不同的输入来发现问题. leetcode在线调试器的好处 理论上来说, 你可以直接在浏览器里解决任何一道...
  7. 优化设计 个人主页 并且 PageSpeed Insights 双项 100分 坛子的个人主页 www.tanzhijun.com 不错 很适合个人主页的模板. 而且是手机友好. 于是我照着把 我的主页改了改. https://steakovercooked.com 并且做了几点修改: 0. 使用 google mod_pagespeed 把 JS,...
  8. 在英国开车的简单介绍/英国开车上路需要准备什么? 在英国合法上路需要有: 有效的驾照; MOT 车的年检; 路税 (Road Tax);还有最重要的汽车保险; 四者缺一不可. 千万不要有侥幸心理, 因为警察现在都高科技, 都能扫描车牌就能知道你合不合法. 不合法直接拦下来轻则罚款, 重则扣车上述法庭. 驾照 在英国可以用欧盟的大部分驾照,...

刷题之路: 刷题改变人生


2018年8月20日,我第一次购买了力扣会员,花费159美元,开启了刷题之路。两天后,8月22日,我去了伦敦参加亚马逊的面试。进入微软(剑桥研究院)后,我已经不再需要刷题,但我依然认为,刷题是对自己最有价值的投资。

第六年力扣会员了,依然觉得这个是对自己最好的投资。

2024-08-21-22.39.28 刷题之路: 刷题改变人生 Amazon 奋斗 程序员 编程 资讯 面试

力扣会员一年159美元,是对自己最好的投资。

2024-08-21-22.39.45 刷题之路: 刷题改变人生 Amazon 奋斗 程序员 编程 资讯 面试

2018年8月22日第一次面试亚马逊(ASCS伦敦)

2024-08-21-22.39.43 刷题之路: 刷题改变人生 Amazon 奋斗 程序员 编程 资讯 面试

收到伦敦亚马逊的面试邀请

2024-08-21-22.39.38 刷题之路: 刷题改变人生 Amazon 奋斗 程序员 编程 资讯 面试

刷题改变人生

2024-08-21-22.48.23 刷题之路: 刷题改变人生 Amazon 奋斗 程序员 编程 资讯 面试

在抱怨自己赚钱少之前,先努力 让自己值钱。Let Yourself Worth It

过往都是体验

本文一共 281 个汉字, 你数一下对不对.
刷题之路: 刷题改变人生. (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c 刷题之路: 刷题改变人生 Amazon 奋斗 程序员 编程 资讯 面试
The post 刷题之路: 刷题改变人生 first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  2. 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
  3. 在英国给孩子换学校的经历: 孩子离开了村里的小学 由于搬了家, 孩子上学得提前半小时出门了, 因为早上堵, 也得开车半小时才能到. 之前在 Fen Drayton 村庄上小学, 早上8:45学校门开, 9点敲钟孩子排队依次进入教室, 我们由于在村里, 只需要提前5分钟出门和孩子一起走路就可以了. 现在一下子早上变得很匆忙, 得叫孩子起床, 做早饭,...
  4. 同一台服务器上多个WORDPRESS站点的一些设置可以移出去 我自从把所有网站都挪到一处VPS服务器上 就发现很多事情省事很多 可以同时管理多个网站 包括 WORDPRESS博客. 比如我有四个WORDPRESS博客 然后我就把通用的一些资料给移出去 移到 HTTP或者HTTPS都不能直接访问的文件夹里这样就更安全许多. 文件 wp-conn.php 存储了 相同的数据库资料. 1 2...
  5. 公司请的专业摄影师 公司来了新的CEO管理之后,很多事情都不一样了, 特别是一些公司对外形象的事情就特别的在意, 比如公司网站用上SSL.现在公司还有空闲的位置,请速来(钱多人不傻). 一月份出差回LUTON,刚好公司请来摄影师给高层管理照像放网站上的,于是我也凑了凑热闹(但是却还不够资格被放在公司网站上),不过没关系,放这里也差不多. 人到中年, 沧桑感强了些. 更新更新: 同事用他NB的单反给谢菲尔得办公室的人也拍了一组这样的照片.看起来很不错, 很专业,灯光,道具应有尽有.我已经用在了LINKEDIN页面上,立马高大上. 本文一共 230 个汉字, 你数一下对不对. 公司请的专业摄影师. (AMP...
  6. Leetcode 的在线调试器 最近 leetcode 刷题网站出了一个在线调试器. 个人感觉非常好用. 因为我平时是用 IPAD+蓝牙键盘来刷题, 而在 ipad 上是没有集成的IDE的, 对于调试来说, 只能很原始的让函数退出一个值, 然后尝试不同的输入来发现问题. leetcode在线调试器的好处 理论上来说, 你可以直接在浏览器里解决任何一道...
  7. 优化设计 个人主页 并且 PageSpeed Insights 双项 100分 坛子的个人主页 www.tanzhijun.com 不错 很适合个人主页的模板. 而且是手机友好. 于是我照着把 我的主页改了改. https://steakovercooked.com 并且做了几点修改: 0. 使用 google mod_pagespeed 把 JS,...
  8. 公司给配了台高配DELL笔记本 早上例会结束的时候我顺便说了一句 我的笔记本有点慢, 当时我并不知道我的经理远程用电话也参加会议了(他全程在听), senior staff SE 对着电话说, “peter, you hear that? btw, my disks are...

我在亚马逊AWS云On Call的体验


从2020年到2021年,我在亚马逊(AWS云)担任软件开发工程师(SDE)。有人说SDE代表”Someone Does Everything”(什么都做的人),这相当准确。在亚马逊,每位SDE软件工程师都负责从设计、编码到测试的所有工作,还需要定期轮值紧急响应任务。大多数亚马逊团队由6-8名工程师和一名软件开发经理(SDM)组成,遵循“两个披萨团队” (Two Pizza Team)的原则。

每位SDE软件工程师通常每6-7周需要轮值一次Oncall(紧急响应任务),持续一整周24/7待命。在此期间,你需要处理和解决业务上出错的问题(比如服务器宕机,原因可能:程序出错崩溃、硬盘空间不足、CPU温度过高等)。为此,你需要在手机上安装紧急响应软件(Pong),以接收与团队产品相关的警报。当警报响起时,你必须在15分钟内确认工单。如果没有及时确认,问题会逐级上报,甚至可能报告到CEO姐夫贝佐斯 Jeff Bezos,这可能会对你的绩效评估产生负面影响。

我听说有个软件工程师下班后和同事到酒吧里喝两杯,然后警报响了,他淡定的拿起笔记本就处理起来了。

amazon 我在亚马逊AWS云On Call的体验 2021年 Amazon 程序员

亚马逊 Amazon

亚马逊的理念是你拥有自己的代码/You own your code。这意味着即使在半夜,警报响了,你也得爬起来解决问题。你的首要任务是恢复服务/Mitigation,其次是调查原因和解决。如果警报在凌晨3点响起,您可以临时重启服务器来解决问题,详细调查可以第二天起床后再进行。如果你在半夜被警报唤醒,第二天可以多休息,不用担心早晨的站会(敏捷开发每天都有例会)。

程序也需要Oncall就会促使他们尽可能的写出高质量的代码,避免BUG日后找麻烦。

这里顺便说一下,我在亚马逊S3的那个组,敏捷开发是2周一个短跑(Sprint),轮到oncall的工程师需要专注于Oncall DevOps,相当于是一个任务(多少点我忘记了),如果不太需要处理警报,则可以适当做一些其它开发任务。对我来说,压力最大的是在Oncall完的第二周,需要写报告,并在每周大会上给大家讲每个警报的原因和处理方案。

这个Oncall非常让人有压力,但它们有效地训练了软件工程师的DevOps技能。由于高灵敏度设置,新产品往往会生成更多警报。亚马逊以其99.99%的服务水平协议(SLA)而自豪,这要归功于SDE的紧急响应文化。

以下是我在2021年担任亚马逊SDE期间最后一次轮值时收到的警报示例。警报声可能非常刺耳,类似空袭警报,不过也有一些不那么刺耳甚至更愉快的铃声可供选择。当时这声音简直是恶梦。

我在Oncall那周,我媳妇都不愿意和我睡,因为大晚上的被警报吵醒是件很吓人并且让人很不爽的事情。当我离开亚马逊来到微软剑桥研究院后,立马压力就小很多,而且人也开心很多,朋友圈状态都比较频繁了。

其实,我感觉Oncall这事不讨好的一个很大原因是在英国Oncall是不额外给钱的,都属于本职工作的一部分。而据说在德国,Oncall是会有额外经济补偿的,在金钱的加持下,我感觉这事的体验感肯定天壤之别。

英文:The Experience of On-call (Paging) for Amazon Software Engineers

本文一共 991 个汉字, 你数一下对不对.
我在亚马逊AWS云On Call的体验. (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c 我在亚马逊AWS云On Call的体验 2021年 Amazon 程序员
The post 我在亚马逊AWS云On Call的体验 first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  2. 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
  3. 微软剑桥研究院/所 Summer Party (2022夏日派对) 大厂(特别是互联网大厂)每年都会有整个公司员工的团建活动. 微软每年都有一次夏日派对 (Summer Party) 还有一次圣诞派对 (Christmas Party). 当年我入职 Amazon 一周的时候正好参加了 冬日派对 Winter Party. 这种全公司的派对一年搞两次, 可以邀请家人...
  4. 英国房子的EPC节能报告 EPC (Energe/Efficiency Performance Certificate) 是英国房子的节能报告, 法律上规定, 每个房子都必须要有一个EPC报告, 报告的有效期为十年. 房东在把房子出租或者想卖房的时候, 这个EPC就必须有效, 在一些情况下 比如出租房子的时候, 这个EPC报告还必须符合一些最低标准, 比如房子必须满足 F档(类似及格线)...
  5. 在英国给孩子换学校的经历: 孩子离开了村里的小学 由于搬了家, 孩子上学得提前半小时出门了, 因为早上堵, 也得开车半小时才能到. 之前在 Fen Drayton 村庄上小学, 早上8:45学校门开, 9点敲钟孩子排队依次进入教室, 我们由于在村里, 只需要提前5分钟出门和孩子一起走路就可以了. 现在一下子早上变得很匆忙, 得叫孩子起床, 做早饭,...
  6. 优化设计 个人主页 并且 PageSpeed Insights 双项 100分 坛子的个人主页 www.tanzhijun.com 不错 很适合个人主页的模板. 而且是手机友好. 于是我照着把 我的主页改了改. https://steakovercooked.com 并且做了几点修改: 0. 使用 google mod_pagespeed 把 JS,...
  7. 什么是战略性怀孕? 今天上网冲浪学到一个新词 “战略性怀孕“. 战略性怀孕 “战略性怀孕”这个术语并不是科学文献中的标准术语, 但在流行文化和社交语境中, 它常常指的是某人(通常是女性)有意识地选择在特定时间或与特定对象怀孕, 以达到某种策略目标或获得某种利益. 以下是一些可能的目的或背景: 经济利益 在某些情境中, 女性可能会选择与经济能力强大的男性怀孕, 以便获得经济上的支持, 无论是通过婚姻还是子女抚养费. 固定关系 有些人可能认为怀孕可以帮助巩固与伴侣的关系,...
  8. 同一台服务器上多个WORDPRESS站点的一些设置可以移出去 我自从把所有网站都挪到一处VPS服务器上 就发现很多事情省事很多 可以同时管理多个网站 包括 WORDPRESS博客. 比如我有四个WORDPRESS博客 然后我就把通用的一些资料给移出去 移到 HTTP或者HTTPS都不能直接访问的文件夹里这样就更安全许多. 文件 wp-conn.php 存储了 相同的数据库资料. 1 2...

推荐一款程序员性价比高的机械键盘 KeyChron K8


程序员性价比高的机械键盘 Keychron

我第一款 keychron 键盘是四年前(2020年)买的,当时在AMAZON工作,通过公司经费报销的。当时还问了经理,需要节俭么?因为亚马逊的16条军规中的一条就是节俭/Frugal。当时经理说,只要能提高你的工作效率就行,我也没太敢搞太贵的,最后面只挑了一个60多美元的机械键盘,型号是:

Keychron C2 Wired Mechanical Keyboard, RGB Backlight / Gateron Mechanical / Red

后来这个键盘就一直用到现在(离职AMAZON的时候也不需要还回去),前不久突然C键不能用了,我插拔了好几次也不管用。于是我就死马当活马医,把键盘整个拿去水下冲了,也难得把键一个一个拿下来嫌麻烦,真的就是水洗。不过据说keychron机械键盘每个键有自己独立的电路,可以把备用键换上去,也可以把不常用的键换到有问题的键上。不过年代已久,配送的换键工具还有备用键早就找不到了。

然后晾干一下午,后面又拿了媳妇的吹风机吹了一会儿,插电源,刚开始好用一会儿,屏幕闪跳,然后就彻底不能用了。

不过我又放了两三天,每天都试一下,在最后面就要放弃的时候竟然好用了,C键也好用了,不过后来发现1键不太好用。将就用了几天,新买的K8今天终于到了。机械键盘有很多轴,不同轴价格还不太一样,各种配置,我也不太懂,反正就是选了一个K8最贵的配置,能比基础款贵个30英镑。这个键盘加运费花了110英镑左右。

Keychron K8 Wireless Mechanical Keyboard (US ANSI Layout) × 1

我选的是美式ANSI,和英式差不多,也就是@键和双引号位置的区别,这些可以通过改键盘布局来选择,问题不大。

keychron这个是国产的键盘,质量很可以,我觉得最好用的地方就是可以两用,即可以通过Type-C连接电脑,也可以蓝牙。线缆连接的时候也是充电模式,这个键盘内置电池,续航很久,我以前出去带iPAD平板+这个键盘刷题就很流畅。

我另一个键盘也是四年了,还能用呢,不得不说,这个质量真是不错,这些年很多国产品牌是相当不错,比如那个Anker也是。

keychron-k8-keyboard-2024-06-06-11.22.50-rotated 推荐一款程序员性价比高的机械键盘 KeyChron K8 I.T. 硬件 福利 程序员 键盘

今天收到的keychron k8开箱,还送了几个备用键。

C2全键盘比K8多了一个小键盘。

keychron-k8-keyboard-2024-06-06-12.26.16-rotated 推荐一款程序员性价比高的机械键盘 KeyChron K8 I.T. 硬件 福利 程序员 键盘

下面这个键盘比k8相比多了一个小键盘。

keychron-k8-keyboard-2024-06-06-12.26.23-rotated 推荐一款程序员性价比高的机械键盘 KeyChron K8 I.T. 硬件 福利 程序员 键盘

这个keychron k8的键盘我用了四年多,Shift/Control/N/M键都磨没了。

keychron-k8-shipped-from-china 推荐一款程序员性价比高的机械键盘 KeyChron K8 I.T. 硬件 福利 程序员 键盘

虽然在keychron.uk上下单,但是是从中国寄出来的,大概是8天寄到。

总体来说,我是很喜欢这Keychron机械键盘,特别是K8,一个是上面说到的两用(蓝牙+Type C),一个是可以选择Windows或者是Mac苹果电脑模式。然后就是键还可以发光,可以通过 Option+灯炮键来选择。内置电源4000mAh/毫安时,但平时基本上都是用Type-C接电脑。

有的人喜欢HHKB,但对于我来说, 方向键是必须的,还不太喜欢没有方向键的键盘。keychron k8刚刚好,去掉了小键盘,尺寸也比较小,容易携带。

Keychron键盘发光模式选择 – 刚刚才发现,N年前已经推荐过一样的键盘了,博文都写过一篇一样的。说明两件事:这个键盘确实好,还有就是人老了记性太差了。

Keychron Keyboard Backlight

可以用这个链接+ 5%的折扣码(ZHIHUA下单。程序员唯数不多的爱好之一了,女性朋友也可以收藏起来逢年过节买一个惊喜送送男友/老公。

机械键盘敲击的声音很清脆,触感很强烈,当然不同轴可能会有点不一样的感觉,不过总体来说,很适合程序员写代码,也比较适合玩游戏,比如玩DOTA2

程序员需要一个好键盘

我儿子在测试这键盘/压力测试

英文:What Keyboards Do You Use?
英文:Review: Keychron K8 Wireless Mechanical Keyboard for Software Engineers

本文一共 1211 个汉字, 你数一下对不对.
推荐一款程序员性价比高的机械键盘 KeyChron K8. (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c 推荐一款程序员性价比高的机械键盘 KeyChron K8 I.T. 硬件 福利 程序员 键盘
The post 推荐一款程序员性价比高的机械键盘 KeyChron K8 first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. 最后一天在谢大工作 2013年10月,我开始在谢大,也就是 University of Sheffield 工作. 这是个两年的合同, 是在一个欧盟项目下,公司暂时把我借调给大学.我的工作标题 是 Marie Curie Experienced Researcher 简单来说也就是研究员,也就是相当于国内说的 博士后(不是学位,只是份工作). 两年,...
  2. 没有一类银行卡也可以用微信支付 这几年因为微信支付用不了,不知错过了多少红包,估计有几个小目标了吧,最主要原因就是当时上传了身份证,然后就一直要国内一类银行卡,而我长期在英国/海外生活,没有国内手机/银行卡,很是不方便。 TLDR; 在国外的朋友们如果没有国内1类银行卡,微信支付用身份证验证是不能使用的,一个解决方法就是先注销微信支付,然后用(中国)护照人脸验证+绑定英国银行卡(VISA/Master应该都可以,支付几毛钱),通过后就可以使用了。 用身份证进行KYC(Know Your Customer 身份认证)会认为你是在国内 所以需要一类银行卡,用护照就可以绕过这个麻烦的一类银行卡的限制,否则对于长期在海外生活/工作的中国人(依然是中国护照/中国国籍)是很不方便的。 如何注销微信支付? 很不好找:服务,钱包,最下面小字的支付设置,里面就有注销微信支付。注销后过往的消费转帐记录就会清空丢失,记得先截图备份。 用护照人脸/身份认证 不仅是微信支付,微信视频号也需要身份认证,否则就不能上传视频,而且系统有BUG,填完资料后说已经有微信支付了。 “你已经开通微信支付,无法继续操作,请退出流程。” 需实名或机构认证后才可以发表:当前WeChatID没有实名,需完成微信支付实名或企业机构认证后才可以发表 微信支付实名...
  3. 新的旅途 – 离别总是伤感的, 离开了一起创业的公司 2周前, 正式离开了一起创业的公司, 这公司是我博士毕业后的第一份正式工作, 待了8年多了, 离别总是伤感的. 我是9月初提的离职, 三个月 Notice Period, 最后的几周交接完工作确实没有什么压力了. 11月30号, 在公司最后一天, 公司有个习惯, 对于 Good...
  4. 为什么应该阻止 ChatGPT 和 Bytedance 爬虫抓取你的页面? 这几天,我发现我的一两个服务器过载(高于平常的CPU使用率),我查看了 Apache 日志,发现 ChatGPT Bot(也称为 GPTBot/1.0)和字节跳动 Bots(也称为 Bytespider)的访问记录。 您可以通过以下 BASH 命令检查访问您服务器的前 10 个 IP: 1...
  5. 终于在北京开通了中信银行一类银行卡 这次回国最重要的事情之一就是办一个一类银行卡,没有这个一类银行卡,微信支付就用不了,但可以通过护照注册接发微信红包。 办银行卡的两个条件就是 二代身份证和国内手机号。身份证我2011年回国办了,有效期到2031年,还有7年时间,相当好用。国内手机号是实名身份证认证的,我姐搞了一张副卡,一个月保号只需要10元。周六联通的人员送SIM卡上门,还需要查看身份证+人脸识别。不得不说,现在国内刷身份证+人脸验证识别是越来越普及了,比如进火车站,坐厦门鼓浪屿轮渡渡船都有体验。 那天周日(周六竟然休息不开业)在家里边上的中信银行(北京)办理银行卡,是店员领着到一柜台机上自助操作的,在屏幕上操作了几分钟,就可以了。不过当时只给了一张日限制2000元的卡,因为没有一年社保的记录,手机号也需要有一年的记录。 后来我姐下午打了电话给银行,然后我从长城打车赶回银行就办好了,日转帐 50万元限制。我到银行4:59分,银行人员那个闸放下来不让我进,我姐打了个电话,然后又把闸拉起来了。我都不知道我姐这么NB,当天就搞定了。我猜因为我姐是银行大客户,所以和银行打声招呼就可以了。当时我还赶到另一个支行,然后,银行直接给那个支行电话,保安才把闸拉起来让我进,还和我不停的道歉,真是体验了一次金主爸爸的待遇。确实是让我吃惊了一把,竟然能有这种操作。 鱼老板说:当时他什么都没有的时候也是只开通了日2000元限制的卡,然后硬是等到3月后办了贷款银行才给开通日50万元的一类银行卡。 我当时申请的时候直接勾选了微信支付+支付宝,一下子支付宝就自动绑卡成功。而微信支付由于之前我是从身份证换成护照,需要解绑重新用身份证注册,也很快就搞定了。 现在,出门,只需要手机就可以了,真是相当的方便。中国的支付技术遥遥领先,不管是微信支付还是支付宝,支付的时候都可以有两种扫码方式,你扫商家,或者商家扫你。还可以直接微信小程序上下单付款。 相比之下,英国的支付大多是银行卡/Apple Pay/Android Pay,苹果/安卓支付其实也不算太差,但是有上限100英镑?接触式 Contactless(闪付)银行卡支付也是,偶尔还会被拒绝(安全因素),所以还做不到出门放心只带手机的地步。在英国出门付款一般都得有Plan B,比如多拿一张银行卡,避免付不了款尴尬的情况发生。 要是英国也有那种商家扫用户QR码这种被动支付的方式就好了。...
  6. 儿子的画 大儿子 ERIC 比我有画画天赋多了. 只要孩子感兴趣 就给培养 让孩子过一个开心快乐的童年. 大儿子 2岁9个月的时候画的 三岁九个月画的爸爸 老大画的 妈妈 本文一共 62 个汉字, 你数一下对不对....
  7. Minuet in C – 小步舞曲C Posted Youtube – 油管地址 孩子弹琴的时候最帅了. 我现在成了我儿子的粉丝了. Eric (Aged 6) is playing “Minuet in C” when...
  8. 上了年纪痛风脚崴了的惨痛经历(尿酸过高) 痛风是一种疼痛性关节炎, 当血液中的尿酸水平高, 导致晶体形成并积聚在关节内或关节周围, 就会发生痛风. 当人体分解一种叫做嘌呤的化学物质时, 就会产生尿酸. 嘌呤自然存在于您的身体中, 也存在于某些食物中. 尿酸通过尿液从体内排出. 上两周, 和媳妇吵架, 然后就自己一人睡, 有一天起床后脚踝就开始疼了, 然后明显比左脚肿了. 我刚开始就以为是睡觉的时候不小心姿势不对,...

第一次在动车上刷题: 国内的火车又快又舒服又便宜


这次回国体体验了不少事情,其中一件比较有意思的事情就是我第一次在动车上刷题

我两周前从厦门回福州,福州到厦门的距离大概是260公里/160英理。开车需要3个半小时,动车大概1个半小时。而且动车很方便,每小时都有班次,最晚的大概是晚上7点多。票价一人是158元左右(约17英镑),小孩能便宜一些。

厦门火车站也是很宽敞,从厦门还有到香港的动车,也是很方便了。

2024-04-05-03.06.08 第一次在动车上刷题: 国内的火车又快又舒服又便宜 折腾 程序员 资讯

厦门火车站出发是在二楼,很宽敞,休息的时候去三楼麦当劳买了豆浆油条。

媳妇回国一周,感觉胖了一圈,不过感觉微胖一点也不错。

2024-04-09-08.41.04 第一次在动车上刷题: 国内的火车又快又舒服又便宜 折腾 程序员 资讯

媳妇在休息刷手机,她让我去看看有什么特产可以买的 送朋友家人。

2024-04-05-03.06.32-scaled 第一次在动车上刷题: 国内的火车又快又舒服又便宜 折腾 程序员 资讯

厦门火车站有到香港西九龙

速度快,厦门到福州这趟 G5110,二等座158.5元,用护照买的,进火车站的时候刷护照身份证都可以,闸口还有人脸识别相当先进。英国这边火车站是不需要人脸识别的,英国火车又贵又慢,而且还经常晚点,落后不是一点半点。

虽然是二等座,但是比起英国的破旧火车,座位和过道是相当的宽敞了。

g5110-train-from-xiamen-to-fuzhou 第一次在动车上刷题: 国内的火车又快又舒服又便宜 折腾 程序员 资讯

G5110 从厦门到福州动车 – 二等座 票价158.5

我这次回国 弄了张 联通的手机电话卡,是我姐帐号的副卡,一个保号10元。每个月流量好像有二三百GB,相当够用了。

leetcode-on-crh-train 第一次在动车上刷题: 国内的火车又快又舒服又便宜 折腾 程序员 资讯

第一次在动车上刷题,用上了中国联通卡/手机热点,速度还行。

动车是CRH (China Railway Highspeed),这趟动车最高时速是309公里每小时。高铁是 CHSR = China High Speed Railway,高铁速度能最高到380公里每小时,中国火车技术真是遥遥领先。

crh-speed 第一次在动车上刷题: 国内的火车又快又舒服又便宜 折腾 程序员 资讯

厦门到福州的动车最高速度是309公理每小时,1个小时37分钟就能到(中间只停留一站:厦门北/集美)

火车在进隧道的时候,手机会没信号,所以网会突然卡一下,不过对于刷题来说这点不是问题,毕竟写代码完提交只需要按一下”Submit”按钮,稍微等一下也没关系。玩低延时的游戏(比如DOTA2)估计够呛/体验感不行。

从2019年3月2日开始刷题,每天都刷,一天未拉下,回国的这两周多也是,不过比较有挑战,因为要考虑到时差,还有就是网络的原因。

leetcode-wall 第一次在动车上刷题: 国内的火车又快又舒服又便宜 折腾 程序员 资讯

回国2周多一些 打卡刷题一天未拉下

2024年回国见闻

2024年3月28号回国,4月12号回英国,在国内玩了两周,北京-福州-厦门。

刷题:程序员的基本技能

来一个视频:

英文: First Time Leetcoding on CRH (China Railway Highspeed)

本文一共 897 个汉字, 你数一下对不对.
第一次在动车上刷题: 国内的火车又快又舒服又便宜. (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c 第一次在动车上刷题: 国内的火车又快又舒服又便宜 折腾 程序员 资讯
The post 第一次在动车上刷题: 国内的火车又快又舒服又便宜 first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  2. 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
  3. 和媳妇约会: 剑桥 Plough Pub 英国酒巴餐厅 暑假结束了, 孩子又回学校上学了, 于是周五中午边和媳妇到了剑桥的一家英国酒巴餐厅, 约个会, 吃个饭. 也许是受COVID影响, 去这家餐厅需要提前预定: 地址: The Plough, Green End, Cambridge, Cambridgeshire, CB5...
  4. 英国房子的EPC节能报告 EPC (Energe/Efficiency Performance Certificate) 是英国房子的节能报告, 法律上规定, 每个房子都必须要有一个EPC报告, 报告的有效期为十年. 房东在把房子出租或者想卖房的时候, 这个EPC就必须有效, 在一些情况下 比如出租房子的时候, 这个EPC报告还必须符合一些最低标准, 比如房子必须满足 F档(类似及格线)...
  5. 在英国给孩子换学校的经历: 孩子离开了村里的小学 由于搬了家, 孩子上学得提前半小时出门了, 因为早上堵, 也得开车半小时才能到. 之前在 Fen Drayton 村庄上小学, 早上8:45学校门开, 9点敲钟孩子排队依次进入教室, 我们由于在村里, 只需要提前5分钟出门和孩子一起走路就可以了. 现在一下子早上变得很匆忙, 得叫孩子起床, 做早饭,...
  6. 同一台服务器上多个WORDPRESS站点的一些设置可以移出去 我自从把所有网站都挪到一处VPS服务器上 就发现很多事情省事很多 可以同时管理多个网站 包括 WORDPRESS博客. 比如我有四个WORDPRESS博客 然后我就把通用的一些资料给移出去 移到 HTTP或者HTTPS都不能直接访问的文件夹里这样就更安全许多. 文件 wp-conn.php 存储了 相同的数据库资料. 1 2...
  7. 公司请的专业摄影师 公司来了新的CEO管理之后,很多事情都不一样了, 特别是一些公司对外形象的事情就特别的在意, 比如公司网站用上SSL.现在公司还有空闲的位置,请速来(钱多人不傻). 一月份出差回LUTON,刚好公司请来摄影师给高层管理照像放网站上的,于是我也凑了凑热闹(但是却还不够资格被放在公司网站上),不过没关系,放这里也差不多. 人到中年, 沧桑感强了些. 更新更新: 同事用他NB的单反给谢菲尔得办公室的人也拍了一组这样的照片.看起来很不错, 很专业,灯光,道具应有尽有.我已经用在了LINKEDIN页面上,立马高大上. 本文一共 230 个汉字, 你数一下对不对. 公司请的专业摄影师. (AMP...
  8. Leetcode 的在线调试器 最近 leetcode 刷题网站出了一个在线调试器. 个人感觉非常好用. 因为我平时是用 IPAD+蓝牙键盘来刷题, 而在 ipad 上是没有集成的IDE的, 对于调试来说, 只能很原始的让函数退出一个值, 然后尝试不同的输入来发现问题. leetcode在线调试器的好处 理论上来说, 你可以直接在浏览器里解决任何一道...

陆奇:除了好代码,工程师怎样才算优秀?

作者 Gracker
2018年10月25日 10:37

转自:百度Family,内容为陆奇 2017 年 7 月 的百度内部分享,非常值得技术人员学习和思考

个人非常崇拜陆奇, “陆奇以精力旺盛著称,通常凌晨4点起床,先查邮件,然后在跑步机上跑4英里,边跑边听古典音乐或看新闻。早上5点至6点就办公室,利用这段时间不受别人干扰准备一天的工作,然后一直工作到晚上10点,有时也会在半夜给同事发电子邮件。LinkedIn CEO 杰夫·维纳(Jeff Weiner)曾在雅虎与陆奇共事多年,他开始以为这种日程安排无法持久,后来不得不说:“陆奇的确是我所见过最有干劲的人。”前雅虎工程师阿米特·库玛尔(Amit Kumar)也夸奖陆奇人缘好。陆奇说:“我不觉得累,我热爱每天的工作。”陆奇获有20项美国专利。”

陆奇

陆奇的演讲核心思想可以归纳为下面五个点,我把它贴在了书房的墙上,时刻提醒自己。

  1. “我们一定要有一个坚定不移的深刻的理念,相信整个世界终究是为技术所驱动的。”
  2. “有没有其他人已经解决这个问题?然后你可以把你的时间放在更好的创新上。”
  3. “做什么事情一定要做最好,一定要是做业界最强的。”
  4. “我把自己想象是一个软件、一个代码,今天的版本一定要比昨天版本好,明天的版本肯定会比今天好。”
  5. “看到问题也不要去问别人,就把它 Fix。”

Believe in 技术

首先要相信技术,我刚才已经讲了,整个我们工业界,特别是像百度这样的公司,对技术坚定的、不动摇的信念特别重要。

我也分享一下,盖茨提到微软公司的宗旨就是:写软件代表的是世界的将来。

为什么?未来任何一个工业都会变成软件工业。盖茨是对的,因为任何工业任何行业自动化的程度会越来越高,最后你所处理的就是信息和知识。

但现在软件的做法又往前提了一次,因为在人工智能时代,不光是写代码,你必须懂算法,懂硬件,懂数据,整个人工智能的开发过程有一个很大程度的提高,但是,技术,特别是我们这个工业所代表的技术一定是将来任何工业的前沿。

所以我们一定要有一个坚定不移的深刻的理念,相信整个世界终究是为技术所驱动的

站在巨人的肩膀上做创新

我们观察一下,在美国硅谷、在中国,互联网创业公司也好,大型公司也好,大家的起点是越来越高的。为什么现在创新速度那么快?主要是起点高了。我们可以使用的代码模块,使用的服务的能力,都是大大的提升。

在内部我想强调这一点,很多大公司包括微软在内,内部的Code都重做了无数遍。

我现在的要求是,每一次你写一行新的代码,第一要做的,先想一想你这行代码值得不值得写,是不是有人已经做了同样的工作,可能做得比你还好一点。有没有其他人已经解决这个问题,然后你可以把你的时间放在更好的创新上。

特别是大公司里面重复或者是几乎重复的Code实在太多,浪费太多的资源,对每个人的职业生涯都不是好事情。

我再强调,在大公司内部,你写代码之前想一想,你这行代码要不要写,是不是别人已经有了,站在别人的肩膀上去做这件事情。

追求Engineering Excellence

我要另外强调的一点就是Engineering Excellence,工程的技术的卓越性和能力。

任何市场上竞争就像打仗一样,就看你的部队体能、质量,每一个士兵他的训练的程度,和你给他使机关枪、坦克,还是什么样的武器。

所以Engineering Excellence跟这个类比,我们要建的是一支世界上最强的部队,每一个士兵,每一个领军人,每个人的能力,他的训练都是超强的,然后我们给每个人提供的工具和武器都是一流的。

所以 Engineering Excellence 是一个永无止境的、个人的、团队的,能力的追求和工具平台的创新,综合在一起可以给我们带来的长期的、核心的竞争力,为社会创造价值,最终的目的是给每个用户、每个企业、整个社会创造价值。

我另外还要在这里强调的一点就是 Relentless pursuit of excellence:永无止境的不断的持续的追求。

我们要么不做,要做的事情一定做最好,这是我对大家的要求。数据库也好,做大平台也好,大数据也好,我们要做什么事情,我们一定要下决心,这是我对你们每个人的要求,做什么事情一定要做最好,一定要是做业界最强的。

每天学习

每天学习,可能是对每个人都是最最重要的。

我今天分享一下,我自己怎么想我自己的。就很简单一个概念,我把自己想象是一个软件、一个代码,今天的版本一定要比昨天版本好,明天的版本肯定会比今天好,因为即使犯了错误,我里面有If statement,说如果见到这个错误,绝对不要再犯。

英语,另外有一句说法就是Life is too short, don’t live the same day twice. 同样一天不要重活两次。每天都是不一样,每天为什么不一样,因为每天都变成最好,每天都变得更好。今天的版本一定要比昨天好,每个好的、杰出的工程师,杰出的技术领袖,一定要保持自己学习的能力,特别是学习的范围。

在这上面我也稍微引申一下,做Computer science的,如果只学Computer science,不去学一些其他的行业,肯定不够。我举个例子,经济学必须要学。为什么这样讲?Computer science它有个很大的限制,他是假定你有输入以后有输出,这种解决问题的方式有它的好处,但有它的限制性。

我给大家举个例子,地图导航,如果你纯粹用这个方式去做,你只是把一个拥挤的地方移到另外一个拥挤的地方。经济学,它对问题的建模是不一样的。它起点是假定是一个整体的一个生态,每个人的输入都是另外一个人的输出,你要用经济学的方式来描述地图导航的问题,你就会去算一个Equilibrium,市场也是这样。

如果把深度学习真的要想彻底,必须把物理重学一遍,把生物学看一遍,再把进化论再看一遍。因为深度学习跟这些东西完全相关,自己肯定想不清楚,要彻底想清楚,必须学。

另外,学产品,我以前跟所有的工程师都讲,如果不懂产品,你不可能成为一个最好的工程师。真正要做世界一流的工程师不光要懂产品,还要懂整个商业,懂生态。因为你的工作的责任,是能够看到将来,把技术展望到将来的需求,把平台、把开发流程、把你的团队为将来做准备。所以学习是非常非常重要的。

Ownership

最后是从我做起。

我们公司有个非常大的使命,用科技让复杂的世界更简单。整个世界非常非常复杂,人其实所做的事情基本上都是Reduce entropy。

因为从热力学第二定律来讲,世界是会变得越来越乱的,我们想做的事情就是把它变的更简单,让我们生活变得更美好。

而且具体的,我们可以通过人工智能技术来做到唤醒万物,但是这一切是通过每一个人的一点一滴的行为累计起来,从我做起。还有Ownership,看到机会不需要问别人,有机会就去做,看到问题也不要去问别人,就把它Fix。

把我们的使命、把我们的公司当成我们自己每个人的事业来做,我可以坦诚的给每个人讲,如果你把公司的使命,把公司的事业,当成你自己个人的事业,Own everything,你在职业生涯一定是走得最快。从我做起,从身边的每一件事情做起。

聊聊团队协同和协同工具

作者 陈皓
2022年10月14日 12:20

这两天跟 CaliRather 做了一个线上的 Podcast – Ep.5 一起聊聊团队协同。主要是从 IM 工具扩展开来聊了一下团队的协同和相应的工具,但是聊天不是深度思考,有一些东西我没有讲透讲好,所以,我需要把我更多更完整更结构化的想法形成文字。(注:聊天聊地比较详细,本文只是想表达我的主要想法)

国内外的企业 IM 的本质差别

国内企业级在线交流工具主要有:企业微信、钉钉、飞书,国外的则是:Slack、Discord这两大IM工具,你会发现,他们有很多不一样的东西,其中有两个最大的不同,一个是企业管理,一个是企业文化。

企业管理

Slack/Discrod 主要是通过建 Channel ,而国内的IM则主要是拉群。你可能会说,这不是一样的吗?其实是不一样的,很明显,Channel 的属性是相对持久的,而群的属性则是临时的,前者是可以是部门,可以是团队,可以是项目,可以是产品,可以是某种长期存在的职能(如:技术分享),而拉群则是相对来说临时起意的,有时候,同样的人群能被重复地拉出好几次,因为之前临时起意的事做完了,所以群就被人所遗忘了,后面再有事就再来。很明显,Channel 这种方式明显是有管理的属性的,而拉群则是没有管理的

所以,在国内这种作坊式,野蛮粗放式的管理风格下,他们需要的就是想起一出是一出的 IM 工具,所以,拉群就是他们的工作习惯,因为没有科学的管理,所以没有章法,所以,他们不需要把工作内的信息结构化的工具。而国外则不然,国外的管理是精细化的,国外的公司还在重度使用 Email 的通讯方式,而 Email 是天生会给一个主题时行归类,而且 Email 天生不是碎片信息,所以,国外的 IM 需要跟 Email 竞争,因为像 Email 那样给邮件分类,把信息聚合在一个主题下的方式就能在 IM 上找到相关的影子。Channel 就是一个信息分类,相当于邮件分类,Slack 的 回复区和 Discord 的子区就像是把同一个主题信息时行聚合的功能。这明显是懂管理的人做的,而国内的拉群一看就是不懂管理的人干的,或者说是就是满足这些不懂管理的人的需求的。

企业文化

团队协作和团队工作最大的基石是信任,如果有了信任,没有工具都会很爽,如果没有信任,什么工具都没用。信任是一种企业文化,这种文化不仅包括同级间的,还包括上下级间的。但是,因为国内的管理跟不上,所以,就导致了各种不信任的文化,而需要在这里不信任的文化中进行协同工作,国内的 IM 软件就会开发出如下在国外的 IM 中完全没有的功能:

  • 监控员工。获取员工的工作时间以及工作位置。
  • 有详细的已读标注。这样会给对方要回复的压力。
  •  发出的信息不能修改,不能删除,非常有限地可撤回

而国外的 IM 则是,发出的信息可以修改/删除,没有已读标准,也不会监控员工。这种时候,我总是会对工作在这种不信任文化中人感到可怜……如果大家需要靠逼迫的方式把对方拉来跟我一起协作,我们还工作个什么劲啊。

小结

所以,我们可以看到,畸形的企业管理和企业文化下,就会导致畸形的协同工具。最令人感到悲哀的是,有好多同学还觉得国内的钉钉非常之好,殊不知,你之所以感觉好用,是因为你所在的环境是如此的不堪。你看,人到了不同的环境就会有不同的认识,所以,找一个好一些的环境对一个人的成长有多重要

给一些新入行的人的建议就是,一个环境对一个人的认知会有非常大的影响,找一个好的环境是非常重要,如果不知道什么 环境是好的,那就先从不使用钉钉为工作协同软件的公司开始吧……

什么是好的协同工具

我们从上面可以得到,协同的前提条件是你需要有一个基于信任的企业文化,还需要有有结构化思维的科学的管理思维。没有这两个东西,给你的团队再多的工具都不可能有真正好有协同的,大家就是装模作样罢了。

假设我们的管理和文化都没有问题,那下面我们来谈谈协同工具的事。

我个人觉得 IM 这种工具包括会议都不是一种好的协同工具,因为这些工具都无法把信息做到真正的结构化和准确化,用 IM 或是开会上的信息大多都是碎片化严重,而且没有经过深度思考或是准备的,基本都是即兴出来的东西,不靠谱的概率非常大。

找人交流和开会不是有个话题就好的,还需要一个可以讨论的“议案”。在 Amazon 里开会,会前,组织方会把要讨论的方案打印出来给大家看,这个方案是深思过的,是验证过的,是有数据和证据或是引用支撑的,会议开始后,10 -15分钟是没有人说话的,大家都在看文档,然后就开始直接讨论或发表意见,支持还是不支持,还是有条件支持……会议效率就会很高。

但是这个议案其实是可以由大家一起来完成的,所以,连打印或是开会都不需要。试想一下,使用像 Google Doc 这样的协同文档工具,把大家拉到同一个文档里直接创作,不香吗?我在前段时间,在公网上组织大家来帮我完成一个《非常时期的囤货手册》,这篇文章的形成有数百个网友的加持,而我就是在做一个主编的工作,这种工作是 IM 工具无法完成的事。与之类似的协同工具还有大家一起写代码的 Github,大家一起做设计的 Figma……这样创作类的协同工具非常多。另外,好多这些工具都能实时展示别人的创作过程,这个简直是太爽了,你可以通过观看他人创作过程,学习到很多他人的思路和想法,这个在没有协同工具的时代是很难想像的。

好的协同工具是可以互相促进互相激励的,就像一个足球队一样,当你看到你的队友在勇敢地争抢,拼命地奔跑,你也会被感染到的。

所以,好的协同就是能够跟一帮志同道合,有共同目标,有想法,有能力的人一起做个什么事所以,在我心中我最喜欢的协同工具从来都是创作类的,不是管理类的,更不是聊天类的。管理和聊天的协同软件会让你产生一种有产出的假象,但其实不同,这种工具无论做的有多好,都是支持性的工具,不是产出类的工具,不会提升生产力的。

另外,在创作类的协同工具上如果有一些智能小帮手,如:Github 发布的 Copilot。那简直是让人爽翻天了,所以,真正能提升生产力的工具都是在内容上帮得到你的。

结束语

我其实并不喜欢今天所有的 IM 工具,因为我觉得信息不是结构化的,信息是有因果关系和上下文的,是结构化的,是多维度的,不是今天这种线性的方式,我们想像一下“脑图”或是知识图,或是 wikipedia 的网关的关联,我们可能就能想像得到一个更好的 IM 应该是什么 样的……

协同工作的想像空间实在是太大了,我觉得所有的桌面端的软件都会被协作版的重写,虽然,这种协作软件需要有网络的加持,但是协作软件的魅力和诱惑力实在的太大了,让人无法不从……

未来的企业,那些管理类的工具一定会被边缘化的,聊天类的会被打成一个通知中心,而创作类的会大放异彩,让大家直接在要干的事上进行沟通、交互和分享。

(全文完)

(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)

The post 聊聊团队协同和协同工具 first appeared on 酷 壳 - CoolShell.

“一把梭:REST API 全用 POST”

作者 陈皓
2022年2月13日 12:28

写这篇文章的原因主要还是因为V2EX上的这个贴子,这个贴子中说——

“对接同事的接口,他定义的所有接口都是 post 请求,理由是 https 用 post 更安全,之前习惯使用 restful api ,如果说 https 只有 post 请求是安全的话?那为啥还需要 get 、put 、delete ?我该如何反驳他。”

然后该贴中大量的回复大概有这么几种论调,1)POST挺好的,就应该这么干,沟通少,2)一把梭,早点干完早点回家,3)吵赢了又怎么样?工作而已,优雅不能当饭吃。虽然评论没有一边倒,但是也有大量的人支持。然后,我在Twitter上嘲讽了一下,用POST干一切就像看到了来你家装修工人说,“老子干活就是用钉子钉一切,什么螺丝、螺栓、卡扣、插销……通通不用,钉枪一把梭,方便,快捷,安全,干完早回家……不过,还是有一些网友觉得用POST挺好的,而且可以节约时间。所以,正好,我在《我做系统架构的原则》中的“原则五”中反对API返回码无论对错全是200的返回那,我专门写下这一篇文章,以正视听。

这篇文章主要分成下面这几个部分:

  1. 为什么要用不同的HTTP动词?
  2. Restful 进行复杂查询
  3. 几个主要问题的回应
    • POST 更安全吗?
    • 全用 POST 可以节省时间沟通少吗?
    • 早点回家的正确姿势
    • 工作而已,优雅不能当饭吃

为什么要用不同的HTTP动词

编程世界通常来说有两种逻辑:“业务逻辑” 和 “控制逻辑”。

  • 业务逻辑。就是你实现业务需求的功能的代码,就是跟用户需求强相关的代码。比如,把用户提交的数据保存起来,查询用户的数据,完成一个订单交易,为用户退款……等等,这些是业务逻辑
  • 控制逻辑。就是我们用于控制程序运行的非功能性的代码。比如,用于控制程序循环的变量和条件,使用多线程或分布式的技术,使用HTTP/TCP协议,使用什么样数据库,什么样的中间件……等等,这些跟用户需求完全没关系的东西。

网络协议也是一样的,一般来说,几乎所有的主流网络协议都有两个部分,一个是协议头,一个是协议体。协议头中是协议自己要用的数据,协议体才是用户的数据。所以,协议头主要是用于协议的控制逻辑,而协议体则是业务逻辑。

HTTP的动词(或是Method)是在协议头中,所以,其主要用于控制逻辑。

下面是HTTP的动词规范,一般来说,REST API 需要开发人员严格遵循下面的标准规范(参看RFC7231 章节4.2.2 – Idempotent Methods

方法 描述 幂等
GET 用于查询操作,对应于数据库的 select 操作 ✔
PUT 用于所有的信息更新,对应于数据库的 update 操作 ✔︎︎
DELETE 用于更新操作,对应于数据库的 delete 操作 ✔︎︎
POST 用于新增操作,对应于数据库的 insert 操作
HEAD 用于返回一个资源对象的“元数据”,或是用于探测API是否健康 ✔
PATCH 用于局部信息的更新,对应于数据库的 update 操作
OPTIONS 获取API的相关的信息。 ✔

其中,PUT 和 PACTH 都是更新业务资源信息,如果资源对象不存在则可以新建一个,但他们两者的区别是,PUT 用于更新一个业务对象的所有完整信息,就像是我们通过表单提交所有的数据,而 PACTH 则对更为API化的数据更新操作,只需要更需要更新的字段(参看 RFC 5789 )。

当然,现实世界中,可能并不一定严格地按照数据库操作的CRUD来理解API,比如,你有一个登录的API /login 你觉得这个API应该是 GETPOSTPUT 还是 PATCH ?登录的时候用户需要输入用户名和密码,然后跟数据库里的对比(select操作)后反回一个登录的session token,然后这个token作为用户登录的状态令牌。如果按上面表格来说,应该是 select 操作进行 GET ,但是从语义上来说,登录并不是查询信息,应该是用户状态的更新或是新增操作(新增session),所以还是应该使用 POST,而 /logout 你可以使用 DELETE这里相说明一下,不要机械地通过数据库的CRUD来对应这些动词,很多时候,还是要分析一下业务语义。

另外,我们注意到,在这个表格的最后一列中加入了“是否幂等”的,API的幂等对于控制逻辑来说是一件很重要的事。所谓幂等,就是该API执行多次和执行一次的结果是完全一样的,没有副作用。

  • POST 用于新增加数据,比如,新增一个交易订单,这肯定不能是幂等的
  • DELETE 用于删除数据,一个数据删除多次和删除一次的结果是一样的,所以,是幂等的
  • PUT 用于全部数更新,所以,是幂等的。
  • PATCH用于局部更新,比如,更新某个字段 cnt = cnt+1,明显不可能是幂等操作。

幂等这个特性对于远程调用是一件非常关键的事,就是说,远程调用有很多时候会因为网络原因导致调用timeout,对于timeout的请求,我们是无法知道服务端是否已经是收到请求并执行了,此时,我们不能贸然重试请求,对于不是幂等的调用来说,这会是灾难性的。比如像转帐这样的业务逻辑,转一次和转多次结果是不一样的,如果重新的话有可能就会多转了一次。所以,这个时候,如果你的API遵从了HTTP动词的规范,那么你写起程序来就可以明白在哪些动词下可以重试,而在哪些动词下不能重试。如果你把所有的API都用POST来表达的话,就完全失控了。

除了幂等这样的控制逻辑之外,你可能还会有如下的这些控制逻辑的需求:

  • 缓存。通过CDN或是网关对API进行缓存,很显然,我们要在查询GET 操作上建议缓存。
  • 流控。你可以通过HTTP的动词进行更粒度的流控,比如:限制API的请用频率,在读操作上和写操作上应该是不一样的。
  • 路由。比如:写请求路由到写服务上,读请求路由到读服务上。
  • 权限。可以获得更细粒度的权限控制和审计。
  • 监控。因为不同的方法的API的性能都不一样,所以,可以区分做性能分析。
  • 压测。当你需要压力测试API时,如果没有动词的区分的话,我相信你的压力测试很难搞吧。
  • ……等等

也许,你会说,我的业务太简单了,没有必要搞这么复杂。OK,没有问题,但是我觉得你最差的情况下,也是需要做到“读写分离”的,就是说,至少要有两个动词,GET 表示是读操作,POST表示是写操作。

Restful 复杂查询

一般来说,对于查询类的API,主要就是要完成四种操作:排序,过滤,搜索,分页。下面是一些相关的规范。参考于两个我觉得写的最好的Restful API的规范文档,Microsoft REST API GuidelinesPaypal API Design Guidelines

  • 排序。对于结果集的排序,使用 sort 关键字,以及 {field_name}|{asc|desc},{field_name}|{asc|desc} 的相关语法。比如,某API需要返回公司的列表,并按照某些字段排序,如:GET /admin/companies?sort=rank|asc 或是 GET /admin/companies?sort=rank|asc,zip_code|desc

  • 过滤。对于结果集的过滤,使用 filter 关键字,以及 {field_name} op{value} 的语法。比如: GET /companies?category=banking&location=china 。但是,有些时候,我们需要更为灵活的表达式,我们就需要在URL上构造我们的表达式。这里需要定义六个比较操作:=<><=>=,以及三个逻辑操作:andornot。(表达式中的一些特殊字符需要做一定的转义,比如:>= 转成 ge)于是,我们就会有如下的查询表达式:GET /products?$filter=name eq 'Milk' and price lt 2.55 查找所有的价柗小于2.55的牛奶。

  • 搜索。对于相关的搜索,使用 search 关键字,以及关键词。如:GET /books/search?description=algorithm 或是直接就是全文搜索 GET /books/search?key=algorithm

  • 分页。对于结果集进行分页处理,分页必需是一个默认行为,这样不会产生大量的返回数据。

    • 使用pageper_page代表页码和每页数据量,比如:GET /books?page=3&per_page=20
    • 可选。上面提到的page方式为使用相对位置来获取数据,可能会存在两个问题:性能(大数据量)与数据偏差(高频更新)。此时可以使用绝对位置来获取数据:事先记录下当前已获取数据里最后一条数据的ID时间等信息,以此获取 “该ID之前的数据” 或 “该时刻之前的数据”。示例:GET /news?max_id=23454345&per_page=20 或 GET /news?published_before=2011-01-01T00:00:00Z&per_page=20

注意:这里需要注意一下,在理论上来说GET是可以带 body 的,但是很多程序的类库或是中间件并不支持 GET 带 body,导致你只能用 POST 来传递参数。这里的原则是:

  1. 对于简单的查询,很多参数都设计在 restful API 的路径上了,而 filter/sort/pagination 也不会带来很多的复杂,所以应该使用 GET 

  2. 对于复杂的查询来说,可能会有很复杂的查询参数,比如:ElasticSearch 上的 index/_search里的 DSL,你也应该尽可能的使用 GET,而不是POST 除非客观条件上不支持GET。ElasticSearch 的官方文档里也是这么说的。

The authors of Elasticsearch prefer using GET for a search request because they feel that it describes the action—​retrieving information—​better than the POST verb. (我们推荐使用 GET而不是 POST,因为语义更清楚)However, because GET with a request body is not universally supported, the search API also accepts POST requests (除非你的类库或是服务器不支持 GET带参数 ,你再用POST,我们两个都支持)

陈皓注:但是在 ElasticSearch 7.11 后,GET 也不支持 body 了。这是 ElasticSearch 的设计和实现不对应了。

另外,对于一些更为复杂的操作,建议通过分别调用多个API的方式来完成,虽然这样会增加网络请求的次数,但是这样的可以让后端程序和数据耦合度更小,更容易成为微服务的架构。

最后,如果你想在Rest中使用像GraphQL那样的查询语言,你可以考虑一下类似 OData 的解决方案。OData 是 Open Data Protocol 的缩写,最初由 Microsoft 于 2007 年开发。它是一种开放协议,使您能够以简单和标准的方式创建和使用可查询和可互操作的 RESTful API。

几个主要问题的回应

下面是对几个问题的直接回应,如果大家需要我回应更多的问题,可以在后面留言,我会把问题和我的回应添加到下面。

1)为什么API 要Restful,并符合规范?

Restful API算是一个HTTP的规范和标准了,你要说是最佳实践也好,总之,它是一个全世界对HTTP API的一个共识。在这个共识上,你可以无成本地享受很多的技术红利,比如:CDN,API网关,服务治理,监控……等等。这些都是可以让你大幅度降低研发成本,避免踩坑的原因。

2)为什么“过早优化”不适用于API设计?

因为API是一种契约,一旦被使用上,就很难再变更了,就算你发行新的版本的API,你还要驱动各种调用方升级他们的调用方式。所以,接口设计就像数据库模式设计一下,一旦设计好了,未来再变更就比较难了。所以,还是要好好设计。正如前面我给的几个文档——Microsoft REST API GuidelinesPaypal API Design Guidelines 或是 Google API Design Guide 都是让你好好设计API的不错的 Guidelines.

3)POST 更安全吗?

不会。

很多同学以为 GET 的请求数据在URL中,而 POST 的则不是,所以以为 POST 更安全。不是这样的,整个请求的HTTP URL PATH会全部封装在HTTP的协议头中。只要是HTTPS,就是安全的。当然,有些网关如nginx会把URL打到日志中,或是会放在浏览器的历史记录中,所以有人会说 GET 请求不安全,但是,POST 也没有好到哪里去,在 CSRF 这个最常见的安全问题上,则完全就是针对 POST 的。  安全是一件很复杂的事,无论你用哪方法或动词都会不能代表你会更安全。

另外,

  • 如果你要 防止你的 GET 上有敏感信息,应该加个密,这个跟 POST是一样的。
  • 如果你要防止 GET 会被中间人修改,你应该做一个URL签名。(通常来说, 我们都在 GET 上做签名,POST 就忘做了)
  • 如果你要防止有人发一些恶意链接来 hack 你的用户(传说中的 GET 不如 POST 安全的一个问题),你应该用 HMAC 之类的认证技术做好认证(参看 HTTP API 认证授权术)。

总之,你要明白,GETPOST 的安全问题都一样的,不要有谁比谁更安全,然后你就可以掉以轻心的这样的想法,安全都是要很严肃对待的。

4)全用 POST 可以节省时间减少沟通吗?

不但不会,反而更糟糕。

说这种话的人,我感觉是不会思考问题。

  • 其一,为API赋于不同的动词,这个几乎不需要时间。把CRUD写在不同的函数下也是一种很好的编程风格。另外现在几乎所有的开发框架都支持很快速的CRUD的开发,比如Spring Boot,写数据库的CRUD基本上就不需要写SQL语言相关的查询代码,非常之方便。
  • 其二,使用规范的方式,可以节约新加入团队人员的学习成本,而且可以大大减少跨团队的沟能成本。规范和标准其实就是在节约团队时间提升整体效率的,这个我们整个人类进行协作的基础。所以,这个世界上有很多的标准,你只要照着这个标准来,你的所生产的零件就可以适配到其它厂商的产品上。而不需要相互沟通。
  • 其三,全用POST接口一把梭,不规范不标准,使用你的这个山寨API的人就得来不断的问你,反而增加了沟通。另外,也许你开发业务功能很快了,但是你在做控制逻辑的时候,你就要返工了,从长期上来讲,你的欠下了技术债,这个债反而导致了更大的成本。
5)早点回家的正确姿势

不要以为你回家早就没事了,如果你的代码有这样那样的问题,别人看懂,或是出误用了你的代码出了问题,那么,你早回家有什么意义呢?你一样要被打扰,甚至被叫到公司来处理问题。所以,你应该做的是为了“长期的早回家”,而不是“短期的早回家”,要像长期的早回家,通常来说是这样的:

  • 把代码组织设计好,有更好的扩展性。这样在面对新需求的时候,你就可以做到少改代码,甚至不改代码。这样你才可能早回家。不然,每次需求一来,你得重新写,你怎么可能早回家?
  • 你的代码质量是不错的,有不错的文档和注释。所以,别人不会老有问题来找你,或是你下班后,叫你来处理问题。甚至任何人都可以很容易地接手你的代码,这样你才可能真正不被打扰
6)工作而已,优雅不能当饭吃

回应两点:

其一,遵循个规范而已,把“正常”叫“优雅”,可见标准有多低。这么低的标准也只能“为了吃饭而生存了”。

其二,作为一个“职业程序员”,要学会热爱和尊重自己的职业,热爱自己职业最重要的就是不要让外行人看扁这个职业,自己都不尊重这个职业,你让别人怎么尊重?尊重自己的职业,不仅仅只是能够获得让人羡慕的报酬,而更是要让自己的这个职业的更有含金量

希望大家都能尊重自己从事的这个职业,成为真正的职业化的程序员,而不是一个码农!

你的工作给你权力,而只有你的行为才会给你尊重

(全文完)

(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)

The post “一把梭:REST API 全用 POST” first appeared on 酷 壳 - CoolShell.

谈谈公司对员工的监控

作者 陈皓
2022年2月12日 15:50

今天看到微博上有一个热点事件, 是一个关于某公司做的一个监控员工离职倾向的软件,从截图中可以看到员工访问招聘网站的次数,还有投递的简历以及搜索的关建词等等信息,通过这些信息分析员工的离职倾向。然后我发一个微博,说了一下,我以前工作过的公司无论外国公司还是中国公司都有这样的情况,收到一些人来问我相关的情况,所以,我想还是写篇文章详细地说一下,我对这种事情的看法。

本文分成下面个部分:

  • 公司监控员工的技术手段有哪些?
  • 为什么要监控员工?
  • 外企和国企有什么不一样?
  • 我对此事的看法

技术手段

下面是我经历过的几个手段:

1)通过网络嗅探的方式。也就是说,你只要上了公司的网络,你个人设备上的通讯信息就可以被人以网络抓包+分析的方式进行分析。当然,这样的手段已经不怎么好用了,因为现在的网络基本上都是HTTPS加密的,网络嗅探的方式只能知道你访问了什么IP,对于其中的数据是没有办法知道的。

2)通过使用公司提供的软硬件工具。你使用公司的电子邮箱,浏览器(或是公司的代理服务器),通讯工具(包括语音电话),手机办公应用……等来处理你的个人事宜的时候,必然会被监控。这样,你只需要不要使用公司的软件来处理自己的私事就好了。

3)通过安装一个监控程序。这个是最可怕的了,因为无论你加不加密都没用了。一般来说,你不安装这个程序,你就没有办法连上网络,包括公司内网和外网。这个监控程序,会收集你电脑或手机上能够收集的到的所有的信息,比如,你的网络信息,按键操作,录屏,软件数据……等等。

4)办公区监控。我见过的还有使用摄像头,在会议室中安装声音和视频监控设备,对整个办公区内发生所有的事情进行监控。

5)通过爬虫。通过爬虫分析员工的社交平台上的各种言论,包括招聘网站。除了公司需要分布和自己相关的舆情,同样也开始监控员工的行为和价值观等。这已经不是监控隐私信息了……

公司监控的目的

公司监控的目的最早就是为了防止自己公司内的数据和信息外泄,所以,他们害怕自己的员工访问了什么不合适的网站,或是下载了什么有恶意的软件,或是不小心发错了邮件。另外一些公司也会使用外包人员,所以,对于外部编制的人员更需要有信息泄漏防范的安全需求。当然,也害怕有一些商业间谍或是自己的员工被收买了窃取公司内部的敏感信息。尤其是对于一些本身就是做数据的公司,如我以前呆过的Thomson Reuters,这家公司主要是卖金融数据的,所以,对信息泄漏是非常注重的,其就是需要在员工的电脑上安装监控软件。

还有一些劳动密集型的工作,比如在Amazon里的仓库里工作的人,公司会监控员工的工作量,以此来评估员工的工作绩效。对于用监控软件来评估程序员的工作量,我到今天仅见过监控外包人员的,在中国,外包人员需要使用甲方的电脑进行签到和签退,以及相关的工作。除了上述的信息安全目前,还能够看到员工的工作时长的情况。

所以,一般来说,公司监控的目的主要是为了自己的信息安全,还有员工的工作量评估,一般来说,不会涉及员工的隐私

但是,随着收集的数据越来越多,有些公司发现还可以做更多的事,比如,上述的员工离职倾向的分析。还有一些公司还会收集员工在外网的数据,比如你在社交平台上的各种言论,来分析你对公司的忠诚度和你的价值观取向……我个人觉得这些已经令人不耻了。

外企与国企不同之处

我经历过的公司中,外国公司和中国公司都有监控的经历,这里说一下他们的不一样之处。最大的不一样的地方是,外国公司会让你有知情权,而中国公司则完全没有

我记得我进入Thomson Reuters 公司的时候,公司要求签署一份监控的知情的同意书,其中用中英文写的,就是说,你授权公司监控你的如下这些信息:1)上网记录,2)下载的软件,3)工作电脑,4)公司的座机电话,5)会议室和办公区的语音和视频监控……大概有两页A4纸,然后也说明了这些数据公司仅用于信息安全的风控,不用于个人隐私分析等等……并且会符合法律要求保护员工的这些数据不外泄……这些条款都经得起法律的推敲。这样的协议是需要员工签字的,并且对双方都有法律约束的。

中国的公司则不会告诉你他们会监控你哪些数据,而这些数据拿来做什么。 我记得我在某公司工作的时候,就有员工发现自己访问自己的gmail的录屏被公司收集后的愤怒……

我对此事的看法

一方面,我对于公司通过使用监控软件监控员工的行为我是能够理解的,但是,应该让员工有知情权,并和员工明确一个监控的信息和范围,包括收集的数据的用途和安全措施,以及数据多长时间销毁的协议。如果没有这个协议的话,我觉得本质上就是一种流氓行为。

另一方面,针对监控员离职的倾向来说,我实在不知道有什么意义?公司你知道了又能如何呢?你是要找员工作思想工作,还是要给员工更好的待遇,还是直接开掉?如果你对自己的企业有信心,你就不必担心员工会离开,如果你的企业有问题,你为什么不把心思花在建设自己的企业上来呢?安装这样的监控软件对于企业没有什么帮助,反而只会让你的企业的形象更low……

再仔细想想,员工有一万种方法泄漏你公司的信息,无论你怎么监控,只要他想,他总是能够找到方法的,不是么?如何让找到或是培养有职业操守的员工,如何管理自己企业的商业信息,如何建立一个更好的企业文化让员工更有归属感,成为企业的共同体,一同维护共同利益,为企业着想,这不才是公司真正应该干的事吗?!监控员工充分暴露了这样的企业没有一个好的企业文化,不懂得高级的管理,所以,只能靠监控这样的手段来管理企业了……这样的企业不去也罢了。

(全文完)

(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)

The post 谈谈公司对员工的监控 first appeared on 酷 壳 - CoolShell.

我做系统架构的一些原则

作者 陈皓
2021年12月21日 15:46

工作 20 多年了,这 20 来年看到了很多公司系统架构,也看到了很多问题,在跟这些公司进行交流和讨论的时候,包括进行实施和方案比较的时候,都有很多各种方案的比较和妥协,因为相关的经历越来越多,所以,逐渐形成了自己的逻辑和方法论。今天,想写下这篇文章,把我的这些个人的经验和想法总结下来,希望能够让更多的人可以参考和借鉴,并能够做出更好的架构来。另外,我的这些思维方式和原则都针对于现有市面上众多不合理的架构和方案,所以,也算是一种“纠正”……(注意,这篇文章所说的这些架构上的原则,一般适用于相对比较复杂的业务,如果只是一些简单和访问量不大的应用,那么你可能会得出相反的结论)

原则一:关注于真正的收益而不是技术本身

对于软件架构来说,我觉得第一重要的是架构的收益,如果不说收益,只是为了技术而技术,而没有任何意义。对于技术收益来说,我觉得下面这几个收益是非常重要的:

  • 是否可以降低技术门槛加快整个团队的开发流程。能够加快整个团队的工程流程,快速发布,是软件工程一直在解决的问题,所以,系统架构需要能够进行并行开发,并行上线和并行运维,而不会让某个团队成为瓶颈点。(注:就算拖累团队的原因是组织构架,也不妨碍我们做出并行的系统架构设计)
  • 是否可以让整个系统可以运行的更稳定。要让整个系统可以运行的更为的稳定,提升整个系统的 SLA,就需要对有计划和无计划的停机做相应的解决方案(参看《关于高可用的架构》)
  • 是否可以通过简化和自动化降低成本。最高优化的成本是人力成本,人的成本除了慢和贵,还有经常不断的 human error。如果不能降低人力成本,反而需要更多的人,那么这个架构设计一定是失败的。除此之外,是时间成本,资金成本。

如果一个系统架构不能在上面三个事上起到作用,那就没有意义了。

原则二:以应用服务和 API 为视角,而不是以资源和技术为视角

国内很多公司都会有很多分工,基本上都会分成运维和开发,运维又会分成基础运维和应用运维,开发则会分成基础核心开发和业务开发。不同的分工会导致完全不同的视角和出发点。比如,基础运维和开发的同学更多的只是关注资源的利用率和性能,而应用运维和业务开发则更多关注的是应用和服务上的东西。这两者本来相关无事,但是因为分布式架构的演进,导致有一些系统已经说不清楚是基础层的还是应用层的了,比如像服务治理上的东西,里面即有底层基础技术,也需要业务的同学来配合,包括 k8s 也样,里面即有底层的如网络这样的技术,也有需要业务配合的 readniess和 liveness 这样的健康检查,以及业务应用需要 configMap 等等 ……

这些东西都让我感觉到所谓 DevOps,其实就是因为很多技术和组件已经分不清是 Dev 还是 Ops 的了,所以,需要合并 Dev和 Ops。而且,整个组织和架构的优化,已经不能通过调优单一分工或是单一组件能够有很大提升的了。其需要有一种自顶向下的,整体规划,统一设计的方式,才能做到整体的提升(可以试想一下城市交通的优化,当城市规模到一定程度的时候,整体的性能你是无法通过优化几条路或是几条街区来完成的,你需要对整个城市做整体的功能体的规划才可能达到整体效率的提升)。而为了做到整体的提升,需要所有的人都要有一个统一的视角和目标,这几年来,我觉得这个目标就是——要站在服务和 对外API的视角来看问题,而不是技术和底层的角度。

原则三:选择最主流和成熟的技术

技术选型是一件很重要的事,技术一旦选错,那会导致整个架构需要做调整,而对架构的调整重来都不是一件简单的事,我在过去几年内,当系统越来越复杂的时候,用户把他们的  PHP,Python, .NET,或 Node.js 的架构完全都迁移到 Java + Go 的架构上来的案例不断的发生。这个过程还是非常痛苦的,但是你没有办法,当你的系统越来越复杂,越来越大时,你就再也不能在一些玩具技术上玩了,你需要的更为工业化的技术。

  • 尽可能的使用更为成熟更为工业化的技术栈,而不是自己熟悉的技术栈。 所谓工业化的技术栈,你可以看看大多数公司使用的技术栈,比如:互联网,金融,电信……等等 ,大公司会有更多的技术投入,也需要更大规模的生产,所以,他们使用的技术通常来说都是比较工业化的。在技术选型上,千万不要被——“你看某个视频公司也在用这个技术”,或是一些在论坛上看到的一些程序员吐槽技术的观点(没有任何的数据,只有自己的喜好)来决定自己的技术,还是看看主流大多数公司实际在用的技术栈,会更靠谱一些。
  • 选择全球流行的技术,而不是中国流行的技术。技术这个东西一定是一个全球化的东西,不是一个局域化的事。所以,一定要选国际化的会更好。另外,千万不要被某些公司的“特别案例”骗过去了,那怕这个案例很性感,关键还是要看解决问题的思路和采用的技术是否具有普世性。只有普世性的技术有更强的生命力。
  • 尽可能的使用红利大的主流技术,而不要自己发明轮子,更不要魔改。我见过好些个公司魔改开源软件,比如有个公司同魔改mesos,最后改着改着发现自己发明另一个 kubernetes。我还见过很多公司或技术团队喜欢自己发明自己的专用轮子,最后都会被主流开源软件所取代。完全没有必要。不重新发明轮子,不魔改,不是因为自己技术不能,而是因为,这个世界早已不是自己干所有事的年代了,这个时代是要想尽方法跟整个产业,整个技术社区融合和合作,这样才会有最大的收益。那些试图因为某个特例需要自成一套的玩法,短期没问题,但长期来说,我都不看好。
  • 绝大多数情况下,如无非常特殊要求,选 Java基本是不会错的。一方面,这是因为 Java 的业务开发的生产力是非常好的,而且有 Spring 框架保障,代码很难写烂,另外,Java 的社区太成熟了,你需要的各种架构和技术都可以很容易获得,技术红利实在是太大。这种运行在JVM上的语言有太多太多的好处了。在 Java 的技术栈上,你的架构风险和架构的成本(无论是人力成本,时间成本和资金成本)从长期来说都是最优的

在我见过的公司中,好些公司的架构都被技术负责人个人的喜好、擅长和个人经验给绑架了,完全不是从一个客观的角度来进行技术选型。其实,从 0 到 1 的阶段,你用什么样的技术都行,如果你做一个简单的应用,没有事务处理没有复杂的交易流程,比如一些论坛、社交之类的应用,你用任何语言都行。但是如果有一天你的系统变复杂了,需要处理交易了,量也上来了,从 1 到 10,甚至从 10 到 100,你的开发团队也变大了,需要构建的系统越来越大,你可能会发现你只有一个选择,就是 Java。想想京东从.NET 到 Java,淘宝从 PHP 到 Java……

注,一些有主观喜好的人一定会对我上述对 Java 的描述感到不适,我还用一些证据说明一下——全中国所有的电商平台,几百家银行,三大电信运营商,所有的保险公司,劵商的系统,医院里的系统,电子政府系统,等等,基本都是用 Java 开发的,包括 AWS 的主流语言也是 Java,阿里云一开始用 C++/Python 写控制系统,后面也开始用 Java ……你可能会说 B站是用 go语言,但是你可能不知道 B 站的电商和大数据是用 Java……懂着数据分析的同学,建议上各大招聘网站上搜一下 Java 的职位数量,你就知道某个技术是否主流和热门……

原则四:完备性会比性能更重要

我发现好些公司的架构师做架构的时候,首要考虑的是架构的性能是否能够撑得住多大多大的流量,而不是考虑系统的完备性和扩展性。所以,我已经多次见过这样的案例了,一开始直接使用 MongoDB 这样的非关系型数据库,或是把数据直接放在 Redis 里,而直接放弃关系型数据库的数据完备性的模型,而在后来需要在数据上进行关系查询的时候,发现 NoSQL 的数据库在 Join 上都表现的太差,然后就开始各种飞线,为了不做 Join 就开始冗余数据,然而自己又维护不好冗余数据后带来的数据一致性的问题,导致数据上的各种错乱丢失。

所以,我给如下的一些如下的架构原则:

  • 使用最科学严谨的技术模型为主,并以不严谨的模型作为补充。对于上面那个案例来说,就是——永远使用完备支持 ACID 的关系型数据库,然后用 NoSQL 作补充,而不是完全放弃关系型数据库。这里的原则就是所谓的“先紧后松”,一开始紧了,你可以慢慢松,但是开始松了,以后你想紧再也紧不过来了。
  • 性能上的东西,总是有很多解的。我这么多年的经历告诉我,性能上的事,总是有解的,手段也是最多的,这个比起架构的完备性和扩展性来说真的不必太过担心。

为了追求所谓的性能,把整个系统的完备性丢失掉,相当地得不偿失。

原则五:制定并遵循服从标准、规范和最佳实践

这个原则是非常重要的,因为只有服从了标准,你的架构才能够有更好的扩展性。比如:我经常性的见到很多公司的系统既没有服从业界标准,也没有形成自己公司的标准,感觉就像一群乌合之众一样。最典型的例子就是 HTTP 调用的状态返回码。业内给你的标准是 200表示成功,3xx 跳转,4xx 表示调用端出错,5xx 表示服务端出错,我实在是不明白为什么无论成功和失败大家都喜欢返回 200,然后在 body 里指出是否error(前两年我在微信公众号里看到一个有一定名气的互联网老兵推荐使用无论正确还是出错都返回 200 的做法,我在后台再三确认后,我发现这样的架构师真是害人不浅)。这样做最大的问题是——监控系统将在一种低效的状态下工作。监控系统需要把所有的网络请求包打开后才知道是否是错误,而且完全不知道是调用端出错还是服务端出错,于是一些像重试或熔断这样的控制系统完全不知道怎么搞(如果是 4xx错,那么重试或熔断是没有意义的,只有 5xx 才有意义)。有时候,我会有种越活越退步的感觉,错误码设计这种最基本最基础的东西为什么会没有?并且一个公司会任由着大家乱来?这些基础技能怎么就这样丢掉了?

还有,我还见过一些公司,他们整个组织没有一个统一的用户 ID 的设计,各个系统之间同步用户的数据是通过用户的身份证 ID,是的,就是现实世界的身份证 ID,包括在网关上设置的用户白名单居然也是用身份证 ID。我对这个公司的内的用户隐私管理有很大的担忧。一个企业,一个组织,如果没有标准和规范,也就会有抽象,这一定是要出各种乱子的。

下面,我罗列一些你需要注意的标准和规范(包括但不限于):

  • 服务间调用的协议标准和规范。这其中包括 Restful API路径, HTTP 方法、状态码、标准头、自定义头等,返回数据 JSon Scheme……等。
  • 一些命名的标准和规范。这其中包括如:用户 ID,服务名、标签名、状态名、错误码、消息、数据库……等等
  • 日志和监控的规范。这其中包括:日志格式,监控数据,采样要求,报警……等等
  • 配置上的规范。这其中包括:操作系统配置、中间件配置,软件包……等等
  • 中间件使用的规范。数据库,缓存、消息队列……等等
  • 软件和开发库版本统一。整个组织架构内,软件或开发库的版本最好每年都升一次级,然后在各团队内统一。

这里重要说一下两个事:

  • Restful API 的规范。我觉得是非常重要的,这里给两个我觉得写得最好的参考:PaypalMicrosoft 。Restful API 有一个标准和规范最大的好处就是监视可以很容易地做各种统计分析,控制系统可以很容易的做流量编排和调度。
  • 另一个是服务调用链追踪。对于服务调用链追踪来说,基本上都是参考于 Google Dapper 这篇论文,目前有很多的实现,最严格的实现是 Zipkin,这也是 Spring Cloud Sleuth 的底层实现。Zipkin 贴近 Google Dapper 论文的好处在于——无状态,快速地把 Span 发出来,不消耗服务应用侧的内存和 CPU。这意味着,监控系统宁可自己死了也不能干扰实际应用。
  • 软件升级。我发现很多公司包括 BAT,他们完全没有软件升级的活动,全靠开发人员自发。然而,这种成体系的活动,是永远不可能靠大众的自发形成的。一个公司至少一年要有一次软件版本升级的review,然后形成软件版本的统一和一致,这样会极太简化系统架构的复杂度。

原则六:重视架构扩展性和可运维性

在我见过很多架构里,技术人员只考虑当下,但从来不考虑系统的未来扩展性和可运维性。所谓的管生不管养。如果你生下来的孩子胳膊少腿,严重畸形,那么未来是很难玩的。因为架构和软件不是写好就完的,是需要不断修改不断维护的,80%的软件成本都是在维护上。所以,如何让你的架构有更好的扩展性,可以更容易地运维,这个是比较重要的。所谓的扩展性,意味着,我可以很容易地加更多的功能,或是加入更多的系统,而所谓可运维,就是说我可以对线上的系统做任意的变更。扩展性要求的是有标准规范且不耦合的业务架构,可运维性要求的则是可控的能力,也就是一组各式各样的控制系统。

  • 通过服务编排架构来降低服务间的耦合。比如:通过一个业务流程的专用服务,或是像 Workflow,Event Driven Architecture , Broker,Gateway,Service Discovery 等这类的的中间件来降低服务间的依赖关系。
  • 通过服务发现或服务网关来降低服务依赖所带来的运维复杂度。服务发现可以很好的降低相关依赖服务的运维复杂度,让你可以很轻松的上线或下线服务,或是进行服务伸缩。
  • 一定要使用各种软件设计的原则。比如:像SOLID这样的原则(参看《一些软件设计的原则》),IoC/DIP,SOA 或 Spring Cloud 等 架构的最佳实践(参看《SteveY对Amazon和Google平台的吐槽》中的 Service Interface 的那几条军规),分布式系统架构的相关实践(参看:《分布式系统的事务处理》,或微软件的 《Cloud Design Patterns》)……等等

原则七:对控制逻辑进行全面收口

所有的程序都会有两种逻辑,一种是业务逻辑,一种是控制逻辑,业务逻辑就是完成业务的逻辑,控制逻辑是辅助,比如你用多线程,还是用分布式,是用数据库还是用文件,如何配置、部署,运维、监控,事务控制,服务发现,弹性伸缩,灰度发布,高并发,等等,等等 ……这些都是控制逻辑,跟业务逻辑没有一毛钱关系。控制逻辑的技术深度会通常会比业务逻辑要深一些,门槛也会要高一些,所以,最好要专业的程序员来负责控制逻辑的开发,统一规划统一管理,进行收口。这其中包括:

  • 流量收口。包括南北向和东西向的流量的调度,主要通过流量网关,开发框架 SDK或 Service Mesh 这样的技术。
  • 服务治理收口。包括:服务发现、健康检查,配置管理、事务、事件、重试、熔断、限流……主要通过开发框架 SDK – 如:Spring Cloud,或服务网格Service Mesh等技术。
  • 监控数据收口。包括:日志、指标、调用链……主要通过一些标准主流的探针,再加上后台的数据清洗和数据存储来完成,最好是使用无侵入式的技术。监控的数据必须统一在一个地方进行关联,这样才会产生信息。
  • 资源调度有应用部署的收口。包括:计算、网络和存储的收口,主要是通过容器化的方案,如k8s来完成。
  • 中间件的收口。包括:数据库,消息,缓存,服务发现,网关……等等。这类的收口方式一般要在企业内部统一建立一个共享的云化的中间件资源池。

对此,这里的原则是:

  • 你要选择容易进行业务逻辑和控制逻辑分离的技术。这里,Java 的 JVM+字节码注入+AOP 式的Spring 开发框架,会带给你太多的优势。
  • 你要选择可以享受“前人种树,后人乘凉”的有技术红利的技术。如:有庞大社区而且相互兼容的技术,如:Java, Docker,  Ansible,HTTP,Telegraf/Collectd……
  • 中间件你要使用可以 支持HA集群和多租户的技术。这里基本上所有的主流中间件都会支持 HA 集群方式的。

原则八:不要迁就老旧系统的技术债务

我发现很多公司都很非常大的技术债务,这些债务具体表现如下:

  • 使用老旧的技术。比如,使用HTTP1.0, Java 1.6,Websphere,ESB,基于 socket的通讯协议,过时的模型……等等
  • 不合理的设计。比如,在 gateway 中写大量的业务逻辑,单体架构,数据和业务逻辑深度耦合,错误的系统架构(把缓存当数据库,用消息队列同步数据)……等等
  •  缺少配套设施。比如,没有自动化测试,没有好的软件文档,没有质量好的代码,没有标准和规范……等等

来找我寻求技术帮助的人都有各种各样的问题。我都会对他们苦口婆心地说同样的一句话——“如果你是来找我 case-by-case 解决问题,我兴趣不大,因为,你们千万不要寄希望能够很简单的把一辆夏利车改成一辆法拉利跑车,或是把一栋地基没打好的歪楼搞正。以前欠下的技术债,都得要还,没打好的地基要重新打,没建配套设施都要建。这些基础设施如果不按照正确科学的方式建立的话,你是不可能有一个好的的系统,我也没办法帮你 case-by-case 的解决问题……”,一开始,他们都会对我说,没问题,我们就是要还债,但是,最后发现要还的债真多,有点承受不了,就开始现原形了。

他们开始为自己的“欠的技术债”找各种合理化的理由——给你解释各种各样的历史原因和不得以而为之的理由。谈着谈着,让我有一种感觉——他们希望得到一种什么都不改什么都不付出的方式就可以进步的心态,他们宁可让新的技术 low 下来迁就于这些技术债,把新的技术滥用地乱七八糟的。有一个公司,他们的系统架构和技术选型基本都搞错了,使用错误的模型构建系统,导致整个系统的性能非常之差,也才几千万条数据,但他们想的不是还债,不是把地基和配套设施建好,而且要把楼修的更高,上更多的系统——他们觉得现有的系统挺好,性能问题的原因是他们没一个大数据平台,所以要建大数据平台……

我见过很多很多公司,包括大如 BAT 这样的公司,都会在原来的技术债上进行更多的建设,然后,技术债越来越大,利息越来越大,最终成为一个高利贷,再也还不了(我在《开发团队的效率》一文中讲过一个 WatchDog 的架构模式,一个系统烂了,不是去改这个系统,而是在旁边建一个系统来看着它,我很难理解为什么会有这样的逻辑,也许是为了要解决更多的就业……)

这里有几个原则和方法我是非常坚持的,分享给大家:

  • 与其花大力气迁就技术债务,不如直接还技术债。是所谓的长痛不如短痛。
  • 建设没有技术债的“新城区”,并通过“防腐层 ”的架构模型,不要让技术债侵入“新城区”

原则九:不要依赖自己的经验,要依赖于数据和学习

有好些人来找我跟我说他们的技术问题,然后希望我能够给他们一个答案。我说,我需要了解一下你现有系统的情况,也就是需要先做个诊断,我只有得到这些数据后,我才可能明白真正的原因是什么 ,我才可能给你做出一个比较好的技术方案。我个人觉得这是一种对对方负责的方法,因为技术手段太多了,所有的技术手段都有适应的场景,并且有各种 trade-off,所以,只有调研完后才能做出决定。这跟医生看病是一样的,确诊病因不能靠经验,还是要靠诊断数据。在科学面前,所有的经验都是靠不住的……

另外,如果有一天你在做技术决定的时候,开始凭自己以往的经验,那么你就已经不可能再成长了。人都是不可能通过不断重复过去而进步的,人的进步从来都是通过学习自己不知道的东西。所以,千万不要依赖于自己的经验做决定。做任何决定之前,最好花上一点时间,上网查一下相关的资料,技术博客,文章,论文等 ,同时,也看看各个公司,或是各个开源软件他们是怎么做的?然后,比较多种方案的 Pros/Cons,最终形成自己的决定,这样,才可能做出一个更好的决定。

原则十:千万要小心 X – Y 问题,要追问原始需求

对于 X-Y 问题,也就是说,用户为了解决 X问题,他觉得用 Y 可以解,于是问我 Y 怎么搞,结果搞到最后,发现原来要解决的 X 问题,这个时候最好的解决方案不是 Y,而是 Z。 这种 X-Y 问题真是相当之多,见的太多太多了。所以,每次用户来找我的时候,我都要不断地追问什么是 X 问题。

比如,好些用户都会来问我他们要一个大数据流式处理,结果追问具体要解决什么样的问题时,才发现他们的问题是因为服务中有大量的状态,需要把相同用户的数据请求放在同一个服务上处理,而且设计上导致一个慢函数拖慢整个应用服务。最终就是做一下性能调优就好了,根本没有必要上什么大数据的流式处理。

我很喜欢追问为什么 ,这种追问,会让客户也跟着来一起重新思考。比如,有个客户来找我评估的一个技术架构的决定,从理论上来说,好像这个架构在用户的这个场景下非常不错。但是,这个场景和这个架构是我职业生涯从来没有见过的。于是,我开始追问这个为什么会是这么一个场景?当我追问的时候,我发现用户都感到这个场景的各种不合理。最后引起了大家非常深刻的研讨,最终用户把那个场景修正后,而架构就突然就变成了一个常见且成熟的的模型……

原则十一:激进胜于保守,创新与实用并不冲突

我对技术的态度是比较激进的,但是,所谓的激进并不是瞎搞,也不是见新技术就上,而是积极拥抱会改变未来的新技术,如:Docker/Go,我就非常快地跟进,但是像区块链或是 Rust 这样的,我就不是很积极。因为,其并没有命中我认为的技术趋势的几个特征(参看《Go,Docker 和新技术 》)。当然,我也不是不喜欢的就不学了,我对区块链和 Rust 我一样学习,我也知道这些技术的优势,但我不会大规模使用它们。另外,我也尊重保守的决定,这里面没有对和错。但是,我个人觉得对技术激进的态度比起保守来说有太多的好处了。一方面来说,对于用户来说,很大程度上来说,新技术通常都表面有很好的竞争力,而且我见太多这样成功的公司都在积极拥抱新的技术的,而保守的通常来说都越来越不好。

有一些人会跟我说,我们是实用主义,我们不需要创新,能解决当下的问题就好,所以,我们不需要新技术,现有的技术用好就行了。这类的公司,他们的技术设计第一天就在负债,虽然可以解决当下问题,但是马上就会出现新的问题,然后他们会疲于解决各种问题。最后呢,最后还是会走到新的技术上。

这里的逻辑很简单 —— 进步永远来自于探索,探索是要付出代价的,但是收益更大。对我而言,不敢冒险才是最大的冒险,不敢犯错才是最大的错误,害怕失去会让你失去的更多……

(全文完)

(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)

The post 我做系统架构的一些原则 first appeared on 酷 壳 - CoolShell.

如何做一个有质量的技术分享

作者 陈皓
2021年7月13日 13:00

分享信息并不难,大多数人都能做到,就算是不善言谈性格内向的技术人员,通过博客或社交媒体,或是不正式的交流,他们都能或多或少的做到。但是如果你想要做一个有质量有高度的分享,这个就难了,所谓的有质量和有高度,我心里面的定义有两点:1)分享内容的保鲜期是很长的,2)会被大范围的传递。我们团队内每周都在做技术分享,虽然分享的主题都很有价值,但是分享的质量参差不齐,所以,想写下这篇文章 。供大家参考。

首先,我们先扪心自问一下,我们自己觉得读到的好的技术文章是什么?我不知道大家的是什么,我个人认为的好的文章是下面这样的:

  • 把复杂的问题讲解的很简单也很清楚。比如我高中时期读到这本1978年出版的《从一到无穷大》,用各种简单通俗通懂的话把各种复杂的科学知识讲的清清楚楚。还有看过的几本很好的书,有一本是《Windows程序设计》,从一个hello world的程序开始一步一步教你Windows下的原生态编程。
  • 有各种各样的推导和方案的比较,让你知其然知其所以然。有了不同方案的比较,才可能让人有全面的认识。这个方面的经典作著是《Effective C++》。
  • 原理、为什么、思路、方法论会让人一通百通。这里面最经典的恐怕就是《十万个为什么》了,在计算机方面也有几本经典书,有《Unix编程艺术》、《设计模式》、《深入理解计算机系统》等书,以及《The C10K Problem》等很多技术论文。

其实,从教科书,到专业书,再到论文,都有上面这些不错的特质。

所以,如果你想做一个好的技术分享的话,下面是我总结出来的方法,供你参考。

  • 先描述好一个问题。这样能够听众带入进来,如果这个问题是他们感同身受的,那是最好了。千万不要一上来就说What,或是直接冲进答案里。这样的分享是在灌输和填鸭。把Why说清楚。没有Why,直接谈What的技术分享,通常来说价值不大。
  • How比What重要。在讲How的时候,也就是如何解这个问题。
    • 先要把问题模型说清楚,有了问题模型这个框框后,方案才有意义。
    • 然后要有不同技术的比较。有了比较后,听众才会更相信你。
    • 直接上What的技术细节,其实没有太大意义。
  • 一定要有Best Practice或方法论总结,否则上不了档次的。也就是分享中大家可以得到的重要收获。

说明了这个模型就是:问题 –> 方案 –> 总结。这其中是有一定的心理学模型的,具体表现如下:

  • 用问题来吸引受众,带着受众来一起思考
  • 用问题模型来框住受众的思考范围,让受众聚焦
  • 给出几种不同的解决方案,比较他们的优缺点,让受众有一种解决问题的参与感。
  • 最后,给出最佳实践,方法论或套路,因为有了前三步的铺垫,受众欣然接受。
  • 整个过程会让受众有强烈的成长感和收获感。

这里有几个示例,也是我在我司 MegaEase 内部的技术分享,供你参考(我个人的YouTube频道

技术分享:Prometheus是怎么存储数据的(Youtube)

技术分享:Distributed Lock Manager(Youtube)

下面是我写在我们公司内的Knowledge Sharing中的Best Practice,供参考

Sharing Guideline

Please follow the following sharing protocols

Understand Sharing

  • Sharing is the hard way to learn knowledge. The presenter gains the biggest advantages. not audience. 分享是学习知识的最难的方式。分享者获得的好处最最多的,而不是观众。
  • Sharing can open the knowledge door for the audience, but you have to walk to knowledge by yourself. 分享可以为听众打开知识的大门,但你能不能获得知识还要靠你自己。

Best Practices

To perform a great sharing, please follow the below practices.

  • Do not share a big topic, a small topic is better. A big topic could make the audience lose focus. Remember, Less is More!
  • Sharing time less than 60 mins is the best.
  • English language for slides is preferred.
  • While prepare the sharing contents, it’s better to discuss with the senior people to help you to see the whole picture, understand the good side and bad side, know what you don’t know … etc.
  • Strong Recommend Materials Outlines
    • What’s the Problem?
    • How to Solve the Problem?
    • The Best Solution or Practice.
    • The Mechanism, Key Techniques, and Source Code
    • Pros/Cons
    • References (Further reading)

For example, if you want to sharing a topic about Docker. the following outlines would be good one:

  • What’s the major problems need to solve. (Provision, Environment, Isolation etc.)
  • The Alternative solutions. (Puppet/Chef/Ansible, VM, LXC etc.)
  • The Best Solution – Docker. Why?
  • Docker’s key techniques – image, cgroup, union fs, namespace…
  • Docker’s Pros/Cons
  • Further reading list.

(全文完)

(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)

The post 如何做一个有质量的技术分享 first appeared on 酷 壳 - CoolShell.
❌
❌