写在一年之际(二)

上篇写了猫,这篇写我吧。我其实非常不想谈这段经历,想起来就觉得挺难受的。

去年因为这样那样的原因以及一些骚操作加自尊心,本来有个亚麻 offer 也浪费了,当时的想法是老子来了之后再找,我要是知道后来发生啥非得抱着人大腿把 offer 求回来。

远程工作

这里要非常感谢我在前东家的老板,帮我办了几个月的远程办公,一定程度缓解了我找工作的压力。虽然远程工作没有很重的业务需求,不过也非常锻炼人的沟通能力,我以前觉得沟通对于我来说小菜,后来发现如果涉及到语言障碍和思维方式其实还是门深的学问。当然不要来跟我杠我的英语能力,我在口语上没有啥问题,虽然跟 native speaker 拼不过,但是不算差的那派。主要还是跟人沟通的思维方式上,如何进行有效的沟通也是一门学问。

刷题

老实说我不会刷题,上大学的时候因为 C++ 的作业是 ACM 题,我真是哭了又哭,反正我也不是啥好学生,题是真刷不动。但是为了找工作不得不开始刷,Leetcode 买了会员,分门别类开始学习。我其实更想说明区分刷题和学习,刷题只是过了一遍题,学习是学习怎样写这样的题,怎样的方式可以优化,遇到题想到考点在哪里。随着深入学习还要脱离编辑器的辅助,努力追求正确率,都是需要练习的事。人老说做题家刷题家,我无所谓,反正是面试敲门砖而已,我做好自己就行,自己躺地上嫌别人学习那我没得办法。

面试

我一直怀疑2020是我的本命年,甚至我追问了很久我妈是不是生错时间了。由于众所周知的原因,3月开始 lockdown,当时又面了一次亚麻,但是因为 virtual 面试写题的时候有点慌乱,没有 bug free 所以就挂了。之后很长一段时间网上也鲜有新职位,我就老实刷了一段时间题。6月开始不断投简历面试,怎么说……就是觉得差点缘分,有面着面着没信的,有面试完全没问题我还教面试官怎么写回头就跟我说实在抱歉,有 OA 做完明明 90% 以上但还是跟我 unfortunately 的,有等着安排面试时间回头跟我说他们找到人了,有以我没有 PR 拒的,更不要说简历投出去石沉大海的。期间也有几个猎头在紧密联系,不过都是些 start up,一个脾气不对就挂了(我还没说他们给我乱安排面试时间还放我鸽子),总之就是一刷邮箱眼泪就掉下来。我从来没有经历过如此低谷的时刻,每天都在自我反省到底我哪里做错了觉得我也没有这么差劲吧,脾气暴躁跟大柱一言不合就摔电脑,一刷 SNS 看大家的工作生活如此丰富多彩就开始难过。还有些人落井下石给我添堵我谢谢你啊。

很长一段时间都不想上网,啥都不想干,完全靠着大柱和几个朋友的支持坚持过来。大柱在我哭我撒泼我沮丧我难过的时候乖乖地抱着我。悦姐看我不说话不理人找我视频聊天,wandou 也在鼓励我,大毛还跟我一起动森聊了会天还给我寄了口罩,现在想起来都是我想流着眼泪感谢的人。

好在投了好久简历之后终于接到现在这家的 offer,在面试的时候就让人觉得很舒服,面试官(我后来知道是个士大夫)水平真是高,好多东西我觉得没问题,经过他一点播才发现噢!有道理,而且还有几个面试官聊过之后觉得真不错,有了 offer 就马马接了。事实证明这家真的不错,虽然公司小,但是同事水平是真高,我以前不觉得自己拉胯,现在发现最拉胯的是我(我要赶上!)

爱好

众所周知我是个指甲油爱好者,今年最大的变化是开始拍视频。一开始只是心情难过找点事干,一开始买了个手机支架开始涂开始拍,一年过了之后涂/印花/拍摄/剪辑的水平突飞猛进,甚至买了非常棒的相机和镜头搞得更专业一点。好多人都说开美甲店啥的,但那不是我的兴趣:),我还是好好拍视频玩玩就好。

没啥好展望的新的一年,世界回到正轨就好,找回失去的一年。

写在一年之际(一)

一直在想写一个今年的总结,一拖再拖到了现在,今天早上被 Google 相册提醒,原来到加拿大已经一年整了。

我不是一个特别喜欢说情绪说经历的人,说多了都是矫情,甚至去年出国的时候也是跟交好的人吃了几顿饭然后就摸了出来,不过还是有一些事情值得记录一下。

拖家带口

自从开始准备来加拿大之后就在搜索如何带猫出国,我的功课如下。

适用地区:

北京

相关机构:

北京观赏动物医院、通州海关

加拿大海关要求:

超过一个月的狂犬疫苗证明

提前准备:

1. 超过一岁没有生病的猫(不要带小猫上飞机)

2. 符合航班要求的猫包(我带进机舱,加航的要求是55x40x27cm,比较奇葩的一个猫包尺寸,你买买就知道了,尽量符合高度限制就行)

3. 尿垫、便携猫砂盆和小包猫粮

办理过程:

1. 在出发前至少一个月(我提前了三个月)去北京观赏动物医院去打狂犬疫苗,说清楚是为了办出境,他们会建议一并注射芯片,加好医院联系出境的联系方式。

2. 确定人的行程后立刻打电话给航空公司买猫的票,能带进机舱的收费标准是100加币,每趟航班的宠物数量有限,一定要赶快打电话预定。另外猫算一件随身行李,所以理论上会少一个包,但很少有人查随身行李有多少件所以要求也不是特别严格。

3. 买好机票后立刻联系医院方,说明出发时间和出发地点,对方会建议一个时间去医院做体检和准备申报材料。

4. 带上护照、疫苗本和猫去医院体检,医院会帮忙整理材料申报给海关,医生建议2天后去海关处拿申报材料,但也说一般第二天就可以去拿。

5. 体检后第二天带猫和护照疫苗本去通州海关缴费、给猫查体温做基本检测以及拿到通关文书。

6. 出发哄骗吃好拉好(但明显不会听话不会拉撒)。带猫去机场 checkin,说明带猫。过海关的时候拿通关文书敲章。

7. 落地走申报通道,还是拿那堆通关文书,交进口税(21刀?30刀?)

中间趣闻:

狂犬疫苗:北美这些国家是消灭了狂犬病的国家,所以带宠物入境是需要注射狂犬疫苗的。狂犬疫苗非常容易致敏,麻达在注射了狂犬疫苗后开始出现了摇头晃脑,爪子特别烫的症状。我找护士看了看,对方说没事。但是在我带猫回去的路上开始呕吐而且出现了应激反应,赶快回医院,这个时候小猫咪已经出现了水肿,整个脑袋肿了起来,鼻梁老高。打了抗过敏药之后观察了一个小时才回去。如果大家要打狂犬疫苗一定要多观察一会,有任何异常一定要找医生看。另外防杠声明:猫三联里不包含狂犬疫苗,我们注射过猫三联。如果猫不出门的话狂犬疫苗一般不是必须的,因为根本没有感染源。

注射芯片:加拿大是不要求注射芯片的,但是我在打疫苗的时候医院强烈建议注射。我后来才知道去海关办通关文书的时候是要扫描芯片确认是疫苗本上的这只猫。

通州海关:我印象里政府工作人员都是冷冰冰而且给办事就算不错了,这次遇到了一个特别和蔼的阿姨,非常亲切,眼睛一笑眯一条缝。还祝我们一路顺利。

机场安检:安检的几个工作人员没有遇到过带猫过安检的情况。让我抱着猫过门,猫包单独过X光机。小哥很犹豫地问我它咬人吗?我说不咬随便抱!小哥还是很害怕,我就举着小猫咪让他摸了摸猫头猫腿猫肚子。

起飞和落地:虽然直飞只需要11个小时,但是加上提前出发和落地后到住处差不多要22个小时了。出发前各种哄骗小猫咪上厕所也没成功,而且怕中间饿我们还偷偷带了点冻干。但小猫咪精神明显不好,什么都不吃,刚开始的时候还呼呼大睡,后半段不耐烦开始小声叫。我带去洗手间放出来活动了活动终于好了点。入关的时候 CSBA 说你的猫呢,我举猫包起来给她看,小猫咪惊恐地瞪大了眼睛,她直呼 cute!我其实有点心酸,我是再也不想带猫再折腾一次了,人都觉得11个小时难熬,对于一只小猫咪来说真的是难上加难。

Leetcode - Remove Duplicates from Sorted List II

https://leetcode.com/problems/remove-duplicates-from-sorted-list-ii/

Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

Return the linked list sorted as well.

Example 1:

Input: 1->2->3->3->4->4->5
Output: 1->2->5

Example 2:

Input: 1->1->1->2->3
Output: 2->3

 

Leetcode - Plus One Linked List

https://leetcode.com/problems/plus-one-linked-list/

Given a non-negative integer represented as non-empty a singly linked list of digits, plus one to the integer.

You may assume the integer do not contain any leading zero, except the number 0 itself.

The digits are stored such that the most significant digit is at the head of the list.

Example :

Input: [1,2,3]
Output: [1,2,4]

 

Go Routine Practice - tcp server&client

 

Go Channel Practice V - 祖安萝莉

idea 来自 https://www.zhihu.com/question/402635037/answer/1302122540

逻辑没有照抄,只是做 channel 使用方法练习。

 

Leetcode - Task Scheduler

https://leetcode.com/problems/task-scheduler/

You are given a char array representing tasks CPU need to do. It contains capital letters A to Z where each letter represents a different task. Tasks could be done without the original order of the array. Each task is done in one unit of time. For each unit of time, the CPU could complete either one task or just be idle.

However, there is a non-negative integer n that represents the cooldown period between two same tasks (the same letter in the array), that is that there must be at least n units of time between any two same tasks.

You need to return the least number of units of times that the CPU will take to finish all the given tasks.

 

Example 1:

Input: tasks = ["A","A","A","B","B","B"], n = 2
Output: 8
Explanation: 
A -> B -> idle -> A -> B -> idle -> A -> B
There is at least 2 units of time between any two same tasks.

Example 2:

Input: tasks = ["A","A","A","B","B","B"], n = 0
Output: 6
Explanation: On this case any permutation of size 6 would work since n = 0.
["A","A","A","B","B","B"]
["A","B","A","B","A","B"]
["B","B","B","A","A","A"]
...
And so on.

Example 3:

Input: tasks = ["A","A","A","A","A","A","B","C","D","E","F","G"], n = 2
Output: 16
Explanation: 
One possible solution is
A -> B -> C -> A -> D -> E -> A -> F -> G -> A -> idle -> idle -> A -> idle -> idle -> A

 

Constraints:

  • The number of tasks is in the range [1, 10000].
  • The integer n is in the range [0, 100].

 

C memory layout

High Addresses ---> .----------------------.
                    |      Environment     |
                    |----------------------|
                    |                      |   Functions and variable are declared
                    |         STACK        |   on the stack.
base pointer ->     | - - - - - - - - - - -|
                    |           |          |
                    |           v          |
                    :                      :
                    .                      .   The stack grows down into unused space
                    .         Empty        .   while the heap grows up. 
                    .                      .
                    .                      .   (other memory maps do occur here, such 
                    .                      .    as dynamic libraries, and different memory
                    :                      :    allocate)
                    |           ^          |
                    |           |          |
 brk point ->       | - - - - - - - - - - -|   Dynamic memory is declared on the heap
                    |          HEAP        |
                    |                      |
                    |----------------------|
                    |          BSS         |   Uninitialized data (BSS)
                    |----------------------|   
                    |          Data        |   Initialized data (DS)
                    |----------------------|
                    |          Text        |   Binary code
Low Addresses ----> '----------------------'

Leetcode - Top K Frequent Elements

https://leetcode.com/problems/top-k-frequent-elements/

Given a non-empty array of integers, return the k most frequent elements.

Example 1:

Input: nums = [1,1,1,2,2,3], k = 2
Output: [1,2]

Example 2:

Input: nums = [1], k = 1
Output: [1]

 

React - 组合 vs 继承

React 有十分强大的组合模式。我们推荐使用组合而非继承来实现组件间的代码重用。

Props 和组合为你提供了清晰而安全地定制组件外观和行为的灵活方式。注意:组件可以接受任意 props,包括基本数据类型,React 元素以及函数。

如果你想要在组件间复用非 UI 的功能,我们建议将其提取为一个单独的 JavaScript 模块,如函数、对象或者类。组件可以直接引入(import)而无需通过 extend 继承它们。