Sicheng’s blog

The Sicheng's blog

推荐一个系统建模常用的模型 C4

  那天我之前的同事突然在领英上给我发消息:   他说的是指我一直在前东家的组里面推一种叫做 C4 的模型。   什么叫做 C4 模型? C4 模型是一种描述软件系统的建模方式,其中的 C4 指的是 Context(系统上下文),Container(容器),Component(组件),Code(代码)。这四个层级从高到低,从全局到局部,从不同的层级来描述一个软件系统。

Continue Reading

工作内推 2022-02

上周和经理 1:1 的时候,他提到了还想在德国和爱尔兰招人的事情,问我有没有可以推荐的。我一来想赚内推费,二来希望和我同时区的同事多一点,这样我可以不用跨时区开很多会。于是就写了这篇文章。在博客首页能找到我的联系方式。 注意:虽然职位都是远程,但是由于税务法律的关系,我们组只考虑已经在德国或者爱尔兰的候选人。因为是小公司,HR 在英国,他们也不愿意提供 Visa sponsorship,因为不熟悉各个国家的法律政策。我们公司还有其他组在其他地区招人,也欢迎同我联系。   我们是谁 来自于维基百科: Netskope is an American software company providing a computer security platform. The platform offers cloud-native solutions to businesses for data protection and defense against threats in cloud applications, cloud infrastructure, and the web. Netskope is considered a “leader in its field” status for its Cloud […]

Continue Reading

面试算法,面试官都在考察些什么?

经常有人问我: “请问我 LeetCode 刷了多少道题就能去某某公司了” “我 LeetCode 刷多少道题是不是就能去 xxx 公司了?” 这种思路其实特别像我们高三时候讨论的: “我高考考了多少多少分就能上一本?” “去年清华的录取分数线是多少分?” 我国的做题教育已经深入我们的脑子里面了,以至于很多人在工作以后还是这种思路。LeetCode 是一种非常好的练习自己算法能力的方式,如果没有任何解题能力是肯定通不过算法轮的面试的。但是算法轮是不是就是在考察候选人的 LeetCode 能力?其实算法只是一种比较容易标准化的面试方式,真正考察候选人的理解问题的能力,通过和面试官交流去沟通去搞清楚需求的能力,编码能力以及算法和数据结构知识。     上面这个视频是我帮一个同学 mock interview 的视频,我出了一个算法题: 假设一个公司每个员工都会汇报给经理,员工之间有时候会有矛盾或者不同意见,这种时候我们需要找到这两个员工共同的经理来解决这个问题。所以我们需要写一个函数,找到两个员工的共同经理。 这个时候,有 LeetCode 高手已经在说了,这道题我刷过,这不就是 LeetCode 235 Lowest Common Ancestor of a Binary Search Tree 吗?来,看我给你 30 秒给你秒了这道题,接着迫不及待的开始写代码了。 做为面试官我当然知道这个题目的本质就是 LCA。但是我期望的并不是仅仅是候选人把代码写出来,我期望的是,他能先搞清楚这个需求。这是我假想中的对话。 Q: 员工只会汇报给一个经理还是多个吗?(我描述的时候特地漏掉了一个) A: 对,只汇报给一个经理。 Q: 请问什么是共同经理? A: 共同经理是两个员工汇报线上层级最低的经历,这个经理同时管理或者同时间接管理这两个员工。 Q: 假设这两个员工中,一个已经向另外一个汇报了,那么共同经理是谁? A: 这种情况下我希望返回经理的经理,否则就不公平了。(LeetCode 上是返回两个节点中做为祖先节点的那一个。很多人也会这么实现,这个时候等他写完代码我就会把这个 corner case […]

Continue Reading

我所经历的欧美科技公司的面试

从 17 年 10 月份到德国工作,到现在 2022 年,四年期间我面试了很多家公司。作为程序员,时不时的去面试一下是非常好的习惯,这样你可以了解一下市场上的薪资水平如何,也可以了解市场上对于程序员的技能需求是怎么样的,毕竟软件工程师是一个需要不断学习的职业。还有一个好处是,面试需要的技能其实并不完全和你平时的工作紧相关,偶尔面试能让你不要完全忘记面试的技能。 每个科技公司的面试大致都由 4 – 6 轮构成,每一轮的内容各个公司都大同小异,但是各个公司,甚至不同的组侧重点都不一样,有些公司喜欢考算法多一点,有些公司喜欢问项目经验多一点。但是总体而言,基本上各轮面试都可能会有下面说的几种形式之一。 home work 有些公司在和HR聊完以后,在正式的技术面试之前会发一个 home work 给你做。往往是要求你完成一个小项目,完成以后把项目代码发过去。这种项目往往说不希望你花太多时间,最多也就两个小时,但是期望你的代码是 production ready , 并且有完善的测试。个人非常不喜欢这种技术面试的方式,因为不同于其他的面试方式,因为你不知道面试官的标准在哪里,所以这种小项目理论上你可以无限打磨的你的代码。 我要不要写这个测试?恩还是写吧,万一因为没有测试挂了呢。 我要不要写一个运行指引?恩还是写吧,万一面试官不知道怎么运行呢。 我还见过的 home work 里面给的代码有注释 this is just an toy project, so we take a short cut,但是给你的要求是 you should right production-ready code. 我曾经花了一个星期写了一个作业,最后倒在了谈薪资的那一轮。 所以我的建议是 如果不是非得找工作,尽量避免这种面试。如果决定面试了,就尽可能的把作业做的尽善尽美。花两三个小时搞一个半吊子的方案是肯定过不了面试官的 review,而且你还是浪费了时间。 算法 这种面试形式是经常见到的,也是被讨论最多的,关于如果准备算法面试我之前的博文了提到了。这种面试形式也是被讨论最多的,因为美国的科技公司的标准化面试都有 3 – 4 轮的算法题。我强烈推荐一个叫做花花的博主,他的题解是我见到的做的最好的。在这里我就不在累述了。 […]

Continue Reading