新西兰在线电子签攻略(夫妻)

计划跟亲老婆元旦期间去新西兰旅游,用完10天婚嫁刚好凑足俩礼拜。找了半天发现新西兰是个不错的目的地,于是乎开始申请签证。这次签证申请过程非常顺利,周日提交,礼拜五就出了电子签,五年多次。

对我贡献最大的一篇文章应该是这个《2018新西兰家庭电子签证手把手攻略(更新付款失败、催签)

材料准备

首先,需要有VISA、MasterCard或者银联卡用于付费。

我们俩准备的材料有:

  • 有效期6个月以上的签证扫描件,非空白页都扫
    • 给出签证的有效期与你俩签证的有效期有关系,所以最好签证有效期在5年及以上
  • 用于签证的近照(标准请参考此页面
    • 支付宝有小程序提供近照,不过要仔细挑选,并且有些还有收费的。另外就是AppStore搜证件照也能出来好些App
    • 注意严格参考标准,不要瞎JB 修图
  • 户口本,非空白页都扫描
  • 财力证明
    • 我提供了我的六个月工资流水,直接银行自助机上打的,只滤出了存款
    • 妹子提供了存款证明
  • 机票
    • 提供了往返机票的PDF文档(恰好找到了价格合适的)
    • 暂时没有购买机票的小伙伴其实可以直接打携程客服或者找网上客服,他们一般能够帮忙Email一份英文机票预订单。按照我之前签英国、申根的经历,这东西能用。
  • 结婚证扫描件
  • 公司的准假信(在职证明)
    • 携程搜一下新西兰签证,页面拉到中间部位有提示你要准备什么材料,那边有模板可以直接下载的。编辑好后找HR吧,我们只提供了文的。
  • 新西兰移民局要求提供的附加表INZ1224以及INZ1027.因为懒所以这两个表我直接无纸化填了
    • INZ1027填写个人信息。网上很多PDF编辑软件(搜pdf online editor)
    • INZ1224要夫妻两人签名。AppStore上有Adobe Fill&Sign,凑合用用反正不要钱,电子签名和手写签名是具有同等法律效力的

附注:可能白本签证需要提供更详细一些的材料。如果你的签证本上发达国家的签稍微有一点的话,我看提供以上这些就足够了。

填写表格、上传文档

去新西兰政府官网:https://www.immigration.govt.nz/audiences/chinese/visiting/visitor-visa

点击Immigration Online,然后会引导你进入一个ReadMe的登陆页面。首次使用注册即可。

注册完毕后,根据《
2018新西兰家庭电子签证手把手攻略(更新付款失败、催签)》的步骤填写申请表即可,写的相当详细了,我这里就不废话的。

关于英文翻译件的问题,我这边只在工资流水每个月的收入部分高亮并且备注了Salaries,其余文档我只给了扫描件,并没有进行翻译。

有个在线免费处理PDF的利器:https://smallpdf.com/

等待

耐心等待。成功提交后你的Profile状态是”Submitted”.网上教程有说他们会给你发一个什么提交确认邮件,其实这个要看他们心情,我在收到签证之前从未收到他们的提交确认邮件。这个Status并不会发生什么奇怪的变化。

出签的时候你会收到一封邮件,来自onlineservices@mbie.govt.nz的,就告诉你签证的结果,有个Word文档的附件。此时也可以登陆申请的网站,点Visitor Visa那个链接,新页面底部会有个PDF文档,那就是签证了。

不得不说这个电子签很随意,字面上只有我一个人的护照号码…

Arduino as Socks5 Proxy Server

Still WIP because the buffer manipulation is so f**king problematic.

Hardware: Arduino Uno + W5100 Ethernet Module

Tested working through curl.

 

记两次面试

第一次是一家香港公司,跟现在公司的领域很相近。笔试是3个小时的,不过里面题目难度中性,都是改编题,印象中其中一题是霍夫曼编码之类的有点好玩。反正一个半小时做完了。

后来电话面试就坑B了,一接电话是浓厚的印度英语!结果就是对方的每一个问题我都要跟他确认一下,两边都不爽。电话面试持续了45分钟左右,上来先问项目经历,然后主要问C++11特性: move, forward, 智能指针,还问了些模板什么的。另外在扯CPU的cache warm。这个电面妥妥的跪了,一方面C++11的某些细节我没有掌握,但我觉得最大的问题就是语言不通,这个怪我听力不好,但是咖喱味的英语真乃从未有过的体验,下次不敢了。

======

第二次突然一猎头在领英上找到我说有杭州的机会,那就试试。结果是X方量化。

之前一次听同事说X方面试难,如何如何厉害,也想见识一下。这里客观陈述一下

  1. 在线笔试。题目是牛客网的通题,都是套路题,最后两道编程对于不常刷题的人来说时间有一点赶,不过难度就是LeetCode Easy的难度;
  2. 面试第一轮。问各种C++的问题,但是基本是STL容器内部运作的机制,并且当我讲到C++11特性的时候(比如move)对方并没有细问,故猜测該公司用C++11的地方可能略有局限。随后一道公司自己出的算法题,考数据结构设计的。在面试官给出某种场景的前提下,我给出了个性能更好的解决方案,不过面试官也换了场景让我的方案往他预想的地方靠,最终终于实现了一统~面试官对时间复杂度的计算有要求。
  3. 面试第二轮。也是各种C++问题开场,难度一般。遂给了一道算法题,当时懵了竟然想到用动态规划,但是后来经提示有O(N)方法于是用了贪心法,然后面试官又小改了一下测试我是不是真的理解了。另外就是讲到C++模板还有我的项目经历,我提到之前使用过CRTP做东西,于是让我写了下CRTP长什么样。
  4. 面试第三轮。一个中年大叔,一进门就接了一分钟电话,然后让我做自我介绍。当时心想肯定是个领导于是开始忽悠简历,然后做了个滑动窗口最大值的原题就结束了。
  5. 面试第四轮。后来了解到是CTO,反正被带去吃了个午饭瞎聊然后说问个小问题。蓄水池抽样,不过可惜我当时拉肚子加上对概率不敏感,瞎凑对了抽样概率但是一直卡壳没法证明它是对的,估计让大佬失望了哈哈。
  6. 然后是HR面,不细说了。

最终结局是Offer隔了两天收到了,但是我与猎头都不是很满意。个人觉得面试上没有安排系统设计的问题可能是对方的一个疏忽点,也可能觉得我就是个junior而已怕把我伤了,其实可以试探一下的。

目前的教训是面试之前不能乱吃东西,第三轮到第四轮的时候肠胃就开始闹腾。第二就是还是要熟悉一下基本的概率套路,自己在这方面是弱点。第三就是下次面试之前要打听一下薪资待遇,这次还特地周末看了看书,现在想想瞎紧张个啥….

面向对象软件设计的S.O.L.I.D原则

具体示例请看原文:S.O.L.I.D: The First 5 Principles of Object Oriented Design

S.O.L.I.D 代表着:
S – Single-responsiblity principle 单一责任原则

一个类应有且仅有一个理由去变更,即一个类只应用于一个工作。

O – Open-closed principle 开闭原则

对象或实体只应该开放扩展,而不该开放修改。

我的理解是应该避免越俎代庖的事情发生,不应该在调用某类实体的地方去关心某个对象该方法的具体实现。例如有两个Shape类的继承类Circle及Square,在对各自计算面积的时候,具体计算面积的方法不是调用者需要关心的,否则每增加一种继承类都要去修改调用方法。

L – Liskov substitution principle 李斯柯夫替代原则

令q(x)是关于类型T的对象x的可证明属性。那么对于T的子类型S的对象y,q(y)也应该是可证明的。

这个是官话,简单来说就是每个子类都应该可替代他们的父类,所谓“子承父业”。

I – Interface segregation principle 接口分离原则

永远不应该强迫用户实现它不使用的接口,或不应该强迫用户依赖于他们不使用的方法。
比如不应该让一个二维平面的类去实现一个计算体积的方法。

D – Dependency Inversion Principle 依赖倒置原则

实体必须依赖于抽象,而不是具象。高级别的模块不能依赖于低级别模块,而是需要依赖于某种抽象。

比如一个Gateway类需要通过某种网络IO接收数据,它应该依赖于一种IO接口的抽象而不是具体的某种IO(比如UDP IO),否则当你想换一种IO做同样的事情时你就会很头疼。

LeetCode 403. Frog Jump

A frog is crossing a river. The river is divided into x units and at each unit there may or may not exist a stone. The frog can jump on a stone, but it must not jump into the water.

Given a list of stones’ positions (in units) in sorted ascending order, determine if the frog is able to cross the river by landing on the last stone. Initially, the frog is on the first stone and assume the first jump must be 1 unit.

If the frog’s last jump was k units, then its next jump must be either k – 1, k, or k + 1 units. Note that the frog can only jump in the forward direction.

思路:这个题目可以看作是动态规划。青蛙的一个状态可以表示为{当前的k,当前的位置(可以用stone的索引表示)},最初的时候状态就是{ 1, 0 }。在某一个状态下,青蛙可以尝试向前移动{k-1, k, k+1}步,如果能成功跳到那就进入了下一个状态。要注意的是这种状态的遍历是有重复的,所以需要一个东西记录已经尝试过(当然是尝试失败的,不然直接return true)的状态们,不然很容易超时。

为了避免栈溢出,下文的解法直接用stack模拟函数的栈调用。

 

654. Maximum Binary Tree

Given an integer array with no duplicates. A maximum tree building on this array is defined as follow:

  1. The root is the maximum number in the array.
  2. The left subtree is the maximum tree constructed from left part subarray divided by the maximum number.
  3. The right subtree is the maximum tree constructed from right part subarray divided by the maximum number.

Construct the maximum tree by the given array and output the root node of this tree.

 

 

C++ Template: Handle mutual (circular) dependencies

Sometimes we have two classes that need to call each other’s somewhat function, for example

but as you can see A depends on B’s type to initialize and vise versa. If we declare the types as above we’ll not get a chance to create any instance.

There are at least two ways to resolve the issue.

I.Template template

A quick introduction about template template can be found here.

Declare either of {A, B} with template of template which accepts the other’s template argument.

II.Type traits

The other resolution is create a type trait struct which acts like a bridge that links the type of each other.

 

Some of the best answers to LeetCode questions

Here I gathered some of (what I thought are) best answers to LeetCode questions:

  • https://leetcode.com/problems/wiggle-subsequence/discuss/84887/C++-0ms-O(N)-dynamic-programming-solution
    • an O(n) solution
  • https://leetcode.com/problems/trapping-rain-water/description/
    • an O(n) solution of a similar (but harder) question, found in the book <算法竞赛入门经典(第二版) pp249例8-18
    • basic idea is to find a maximal height which can reserve the water for each position i, if the max height equals to the unit then no rain can be collected at i
    • (vice versa, from right to left)

LeetCode 89. Gray Code

Divide and conquer!

Add a leading 0 or 1 bit to your existing results so here comes two sub-results: 0{xxxxx} and 1{xxxxx}. How to merge them? Just keep the first sub group and append the second group items reversely so that there is only a 1-bit difference between the end of group 0 and “start” of group 2.