Category: 程序员
我每天都在力扣上刷题。力扣有国服和美服,我两边都会打卡。每天打卡可以获得积分,而积分可以兑换各种礼物,比如T恤、卫衣、水壶,甚至可以用来抵扣一个月的会员费用。 我从2018年8月开始刷题找工作(当时去伦敦面试亚马逊),从那时起每年都会续费会员,费用是159美元,相当于每月13.25美元。我觉得这是对自己最值得的投资。买了力扣会员,就会有动力刷题、思考,通过不断练习让自己熟能生巧,保持一定的竞争力。 到目前为止,我已经用积分兑换了7-8件力扣的衣服,其中有2-3件是卫衣。国内的礼物我都寄到姐姐家。 前不久,我收到了力扣的邮件,说我获得了DCC奖励。我也不知道为什么会获得这个奖,随手回了邮件。没多久,就收到了一件新版的力扣衬衫。 英文:Leetcode DCC Winner T-shirt 本文一共 291 个汉字, 你数一下对不对. 力扣刷题获得一件衣服奖励(Leetcode DCC Winner). (AMP 移动加速版本) 赞赏我的几个理由. ¥ 打赏支持 扫描二维码,分享本文到微信朋友圈
在系统设计面试中,可用性百分比是软件工程师应该熟悉的基本知识。 在系统可靠性领域(System Availability),99.9% 或 99.99% 之类的可用性百分比是关键的基准。但是这些数字究竟意味着什么?它们又如何转化为实际停机时间(Downtime)?以下介绍了如何计算与不同可用性水平相关的停机时间,并使用示例来说明 99.9%、99.99% 和其他可用性目标所带来的预期。 什么是可用性百分比? 可用性百分比表示系统在给定时间段(通常是一年、一月或一天)内预计正常运行的时间比例。例如,99.9% 的可用性意味着系统在指定期间内可以停机 0.1% 的时间。 可用性百分比和停机时间 以下是根据不同时间段的可用性百分比计算停机时间的方法: 确定总时间周期:选择参考周期: 年:365 天,或 31,536,000 秒(365 天 × 24 小时 × 60 分钟 × 60 …
我打算写几篇文章来分享这些年来我在STEEM区块链上的一些有趣玩法。我是在2016年8月20日首次注册STEEM账号 @justyy 的(至今已有8.2年),后来发现区块链真的很有趣,特别适合程序员,因为它开放、透明、强大并且充满自由。 我还有一个外号“行长”,这个称号源于我在STEEM上创建了第一个银行。最初,我的业务是收取存款并支付利息,后来逐渐扩展到了代币兑换服务等。存折腾,用爱发电,(扣掉每个月昂贵的服务器运维成本)基本不挣钱,就交个朋友.jpg 在2018年2月25日(至今6.7年)我成为了STEEM见证人/Witness,也就是出块打包的矿工。一路走来,从2020年3月18日左右开始进入全球前20名,并一直保持未掉出前20,甚至长期位居STEEM见证人排行榜的首位,目前排名第二。STEEM区块链采用的共识算法是DPOS,即 Delegated Proof of Stake / 委托权益证明算法。 今天我要分享的是今年8月1日左右我推出的一项服务。当时我在村里跑步,一边跑步一边构思。回家后,我当天加隔天写好了代码,测试完毕后上线。 SP租赁服务 在STEEM区块链上,有STEEM和SBD两种代币/Token,SBD(Steem Dollar)是锚定1美元的代币,而STEEM目前约值0.16美元。区块链上的代币主要用于激励,例如奖励矿工、点赞文章获得收益等。 STEEM可以锁定(Stake)成Steem Power(解锁需要4周)。锁定的能量越多,账号的权力越大,比如投票权和点赞能力。我的SP租赁服务的原理非常简单:用户先将利息(STEEM)转账到账号@rentsp,并在备注(MEMO)中注明租赁天数。程序会计算所需的SP并自动借给指定账号。查看当前的借款人。 这是预付利息的形式,用户先支付利息,区块链上没有退款功能,资金到账后不可逆转。当SP代理(租出)后,借款人仅在取消代理前拥有使用权。等到期后,程序会自动收回SP代理。这遵循STEEM区块链的规则(代码即法律,Code is Law),因此不必担心用户卷款跑路。 用户A将SP借给用户B,用户B仅拥有SP的使用权。用户A可以随时收回借出的SP,完全不必担心资金的丢失。这就好比用户A把一只会下蛋的母鸡借给用户B,用户B在租借期间只能获取母鸡下的蛋,而用户A随时可以收回这只母鸡。 由于STEEM目前没有智能合约,理论上我是可以卷款跑路的,但不值得为了些许利息而影响长期信用。我在STEEM上活跃多年,各项指标如声誉(Reputation)、见证人排名和STEEM POWER(可直接借出的资金)等都较强。 上线三个月来,该服务累计使用49次,总共收取利息XXXX个STEEM。没多少,用爱发电/折腾。这算不上是被动收入,因为每隔几天才会有一单,好在不需要太多的维护。 有兴趣的可以查看详情:STEEM区块链SP租赁服务 STEEM高利贷? 2024年底,比特币突破了10万美元,带动了USDT的借贷利率上涨,因为投资者想要购买BTC大饼通常需要用到USDT。或许是受到这一趋势的影响,STEEM也迎来了一波上涨行情,虽然持续时间并不长,仅仅维持了几天。当STEEM连续几天超过0.25美元的时候,写文章的收益会有SBD/Steem Dollars,因为SBD长年一直是溢价的状态,当前一个SBD价格为3.2美元。当STEEM价格高的时候,会刺激人们借STEEM来Power Up/锁定,写文章,因为这样的收益很多。 …
Google(谷歌)是全球知名的互联网巨头之一,几年前被认为是养老终级大厂,福利优厚,压力相对较小。在英国伦敦,Google设有一个主要从事开发和研究的办公室。 第一次面试 2016年 我在2016年首次面试Google。第一轮是电话面试,由一位在瑞士的工程师主导,通过电话交流并在Google Doc上同步编写代码。由于当时技术水平有限,我用C++完成了那道消息打印的题目,核心是使用队列和哈希表来解决问题,写得很磕磕巴巴。 当时对软件工程师的级别没有特别概念,推测自己面的是SWE L4/L5的级别,因为当时也就工作了5年多。 我查了一下邮件,2013年11月份的时候谷歌猎头联系我问我要不要试试?我说我当时没拿到英国永居,不想冒险,虽然他说到谷歌可以办工签,我当时还是没有选择去面试,现在想起来实在不可思议,后来2014年/2015年的时候同一个猎头还每隔6个月就check-in一次,最后面是在2016年4月份的时候才开始第一次的。 我要是当时聪明一些,努力刷题一些,搞不好当时进谷歌,现在也工作将近十年了,拿着谷歌股票到现在,也不至于现在混个高不成低不就的。 第二次面试 2020年 第二次面试是2020年11月份,第零轮其实应该算是Google的猎头问的一些选择题,比如C++里的哈希表/map如果访问一个不存在的键会发生什么?Google的软件工程师包括SRE站点可靠工程师在面试的时候都可以选两种路径,一个是数据结构和算法(编程),另一个是运维/DevOps偏LINUX知识的。我都选前者,毕竟这个我感觉只要短期刷题就好了,相反后者需要多年工作实战的积累。 通过了猎头的小测试,我进入了第一轮,是道编程题,但是并不是那种力扣上可以见到的,这一轮45分钟,给得是一个比较有意思的游戏,比如迷宫生成算法。面试的时候需要你主导整个过程,包括澄清问题,构思,写代码,分析复杂度等等,每一步都需要你Think Aloud。虽然这一轮我犯了些错误,但是给得反馈总题还不错,面试官说他觉得我应该进入下一轮。 到了终面,安排在了同一天,上午2轮,下午3轮,我记得3轮编程/Coding,一轮系统设计,一轮Culture Fit/Behavior/行为模式。除了系统设计是1小时,其它的4轮都是45分钟,谷歌的Coding面试45分钟都是解决1题即可,题目并不是力扣上的,题目范围/scope较大,偏难。一般来说coding完还会有一些Follow-up的问题,比如怎么优化算法。这个和Meta/Facebook的Coding面试不同,Meta百分百喜欢出力扣上原题,40分钟内需要解决2题力扣原题(留5分钟问问题),这个可以通过力扣按公司归类最近3/6个月的试题准备即可。 系统设计我记得是设计一个类似AWS S3的文件存储,也不知道是不是看我当时在AWS S3工作。很可惜,最后面这一轮不过关,当时我面的是L5(Senior),软件工程师级别越往上走,对系统设计的能力则要求越高(设计可扩展/分布式/高性能的系统 )。 Unfortunately Google doesn’t disclose specific feedback per interview session …
在 Facebook/Meta 的软件工程师(包括站点可靠性工程师SRE和企业工程师EE)的面试中,产品设计/Product Design和系统设计/System Design起着比较相当重要的作用。 一般来说,编程面试(Coding Interviews)和行为规范面试(Behavior,考查是否和公司的文化价值观一致)是最基本的要求,而设计能力(系统设计或者产品设计)才是决定给你Offer的级别。 产品设计面试:Product Design Interview 目标:评估您创建以用户为中心的产品的能力,这些产品可以有效解决实际问题。 重点:您如何考虑用户需求、确定功能的优先级以及制定符合业务目标的解决方案。 典型问题 “您将如何设计一个允许用户管理其隐私设置的功能?” “为 Facebook 上的新用户设计入门体验。” 评估的技能 了解用户角色和痛点。 打造直观且可扩展的用户体验。 平衡用户需求与业务目标。 分析不同产品特性之间的权衡。 关键方法:CIRCLES 等框架(考虑用户、想象场景、需求、削减和确定优先级、列出解决方案、评估权衡、总结)。 系统设计面试:System Design Interview 目标:评估您构建可扩展、可靠且性能卓越的复杂的分布式系统的能力。 重点:如何设计技术后端和基础设施以支持高流量和强大的应用程序性能。 …
许多大公司都有站点可靠性工程师(SRE = Site Reliability Engineer)的职位空缺。例如,谷歌、Facebook/Meta 或字节跳动的抖音。软件工程师(Software Engineer)与亚马逊/Amazon所称的软件开发工程师相同(Software Development Engineer)。 站点可靠性工程师(SRE)是一个专注于确保生产环境中软件系统的可靠性、可扩展性和性能的角色。SRE 负责服务的健康状况和正常运行时间,平衡软件开发与运维任务。软件工程师(SE)主要专注于编写和维护代码以创建软件产品,而 SRE 则融合了开发技能、系统管理、故障排除和事件管理,以确保这些产品在实际环境中顺利运行。 以下是两者之间关键区别的比较: 站点可靠性工程师 (SRE) 专注于可靠性与运维: 确保系统高度可用、可扩展且具有弹性。 监控系统健康状况,管理事件并处理故障。 运维自动化: 使用代码自动化手动任务(例如基础设施部署、监控和补救措施)。 通过创建自动恢复或仅需最少人工干预的系统来减少重复性工作。 随叫随到的职责/也就是On-call:我在亚马逊AWS云On Call的体验 通常参与随叫随到的轮值,处理操作问题和紧急情况。 性能和容量规划: 分析系统性能,确保系统能够应对增长和流量高峰。 SLA、SLO 和 …
第一次伦敦 TikTok 面试 四年前/2020年12月,我申请了伦敦 TikTok 的 System Engineer/系统工程师职位。那时伦敦的 TikTok 团队正在组建,面试我的工程师在北京。 第一轮面试主要是了解我的情况,根据简历逐段提问经历。当时这一轮并没有涉及技术问题,所以很顺利地进入了下一轮。 第二轮也是由北京的工程师面试,问了很多计算机相关的基本知识点,比如: TCP/IP 三次握手原理 Java 的 Stream 设计理念,为什么要有这个类? 然后是一道算法题:合并 K 个有序链表,这是一道力扣上的困难题。面试时需要在提供的编程环境中写出代码,并要求代码能够编译和通过测试。虽然没有想到最优解,简单解法也遇到了一些问题,最终没能在规定时间内通过。 很遗憾,这轮面试未通过。 整个面试流程给我的感觉是比较松散,面试官往往是随意提问,等几秒再问下一个问题。相比 Google、Meta 等大厂的面试,TikTok 的面试流程显得比较随意,并没有特别清晰的结构。 第二次伦敦 TikTok 面试 …