琐事
- 记录学习
- 随便乱写
琐事
三月份澳洲案例逐渐增多,为了避免乘坐公共交通工具,三月份有一个星期都是开车都市区附近的公园找地方停车,然后再步行经过海港大桥上班。因为需要抢到能免费停一天的车位,每天6点半就要出门口了,这些经历以前还从没有过。 后来疫情逐渐严重,公司确定所有员工在家工作。当时公司说资金可以撑到年底,当时我在想疫情不会持续很长时间,应该不会有太大变动,也就继续安心工作了。 四月 到4月6日,CEO 突然说跟我视频,就知道大事不好了。果然是通知我被裁了,除了我还有其余两个开发,四个客服,公司补偿还算到位。那时候心态还算不错,觉得市场应该还有职位可以选择。 通知的当天已经不用工作了,下午四点就收到了CEO发出的辞退信。一切来得都太突然,当天都不知道要怎么做。到了第二天才知道要开始找工作了。 第二天一开始就投了三家自己想去的公司。其实这样是不太正确的做法,因为已经有两年没有准备过面试了,需要练习,如果一开始就投自己想去的公司的话面试很可能回答不上来问题,成功率会比较低。 过了几天,其中一家公司的 recruiter 来了电话,简单的自我介绍和公司介绍后冷不丁就问了一个 behavior 问题,当时就愣住了,答得支支吾吾的。面完说会联系结果,最后却是什么消息都没有。 第二家公司过了一个星期后直接说已经找到合适的人了。 最后一家公司C迟迟没有信息,只好继续投职位了,同时准备好 behavior questions 和刷题。这时新闻上都在报道大公司停止或延缓招聘,在 Linkedin 上也只能找到合同工的工作了,这时候心里是有点慌的。 Google 关于延缓招聘的新闻 Google parent Alphabet Inc. is slowing hiring for the remainder of the year, the most drastic action by the web search giant since the Covid-19 pandemic began battering its advertising business several weeks ago. 在一个旧公司的 Slack channel 里有人发布了一个合同工的招聘信息,第一时间就投了。面试官很快回复并在第二天面试。 第二天的面试很顺利,问的都是比较实际的 Android 问题,面试后就跟我说进入下一轮了。第二轮面试是完成一个自定义 View 的动画,由于紧张,API 调用的参数没有搞明白,虽然最后在提示下做了出来,但是还是被拒了。 再一次发现自己的不足,唯有做个 Demo 补好这个漏洞,希望以后碰到类似的面试能更好地应付。 五月 最后一个之前投的公司C终于联系我了,开始了一次面试官电话面试。一开始问的都是 beavior questions,由于之前做了准备,答得还可以,之后居然问一些 Java 的基础问题,幸好还记得,虽然有时需要几秒钟思考,也答出来了。面试官感到我不是太流畅,说了一句可能我太久没准备面试了吧。...
References 1. How does Firebase initialize on Android 2. Take Control of Your Firebase Init on Android
Coursera 这门课程评分很高,简介里说这不是编程语言的入门课程,而是使用三种不同的语言实践让我们感受函数式编程与面向对象编程的特点。 老师讲得很用心,一个理念不能在一个短的时间内表达清楚,会先用一个简单概念表示,到后来会好好的讲清楚。边上课边写代码,好处是可以让老师和学生的思想同步,更容易让学生接受观念,坏处是代码有时会有错误,但是不影响讲课质量。 Programming Language 课程分为三部分,A部分讲函数式编程的各个概念,使用的语言是 SML。B部分讲函数式与面向对象,使用的语言是Racket,最后是纯面向对象Ruby。 课程推荐的编辑器是 Emacs ,推荐使用
番茄工作法 科学家通过分析表明,人都会无意识地避开困难的东西。如何避开?我们使用的机制就是当我们面对困难时,我们会把注意力转移到可以令自己开心的事情上去,例如上网,看视频,玩游戏。然后时间就这么过去了,正事一点都没有做。 为了克服人的惰性,上世纪八十年代 Francesco Cirillo 创立了番茄工作法,原理其实很简单: 确定待完成的任务 专注工作25分钟(人的专注时间) 5分钟时间的休息,适当奖励自己,喝喝咖啡,伸伸懒腰。 每完成4个 1到3 的循环就休息15-30分钟。
自动完成 auto completion ctrl + space 选择后按 tab 可以覆盖原理的方法。 shift + ctrl + space 更加聪明的补全方式 selection extend selection alt + ↑ intention alt + enter 对于构造函数,可以自动生成private 变量并赋值,增加变量可自动添加。 在 instanceCheck 中可以自动生成 cast 代码 suppress templates fori list.for 自动生成循环 logi logd loge 打印 logt 生成 TAG logm 方法开头用 logr 方法结尾用 command + n 弹出Generate 布局 tools:showIn="@layout/fragment_sign_in" 可以包含另一个布局来预览 tools 关键字可以用在不同的参数上,用上后该参数只会在预览中有效。 public.xml 可以暴露想暴露的属性给 ide 格式为 <resources> <public name="ccl_app_name" type="string"/> </resources> ctrl + tab Switcher...
定义 不同于 Stack 的 FIFO 和 Queue 的 FILO。Priority Queue 总是删除集合中最大(或最小)的数。例如 operation argument return value insert P insert Q insert E remove max Q insert X insert A insert M remove max X insert P insert L insert E remove max P 如果使用数组来实现 Priority Queue 的插入和删除操作,需要的时间复杂度和理想的时间复杂度如下 implementation insert del max max unorded array 1 N N ordered array N 1 1 goal logN logN logN 有一种数据结构可以实现目标的时间复杂度,我们叫它做二叉堆 Binary heaps 二叉堆有几个特点: 它可以用一个数组来表示,不需要额外的数据结构。 它是一颗完全二叉树。如果其子是 k,父节点就是 k/2 对于最大堆来说,其父节点比其子节点都大,也就是说它的最大值是 k = 1 当子节点比父节点大时,需要对二叉堆作调整。基本思路是比较父节点和本节点,父节点比本节点大时交换节点数据。再比较父节点和父节点的父节点,直到顶为止。...
BST BST 的特性就是左子树都比本节点小,右子树都比本节点大。 private class Node { private Key key; private Value val; private Node left, right; public Node(Key key, Value val) { this.key = key; this.val = val; } } public class BST<Key extends Comparable<Key>, Value> { private Node root; public void put(Key key, Value val) { root = put(root, key, val); } private Node put(Node x, Key key, Value val) { if (x == null) return new Node(key, val); int cmp = key....
Selection sort In iteration i, find index min of smallest remaining entry. Swap a[i] and a[min] i 从0开始,找到数组中最小的,与i交换,i++,直到 i 等于数组长度。 Comparable[] a; int N = a.length; for(int i = 0; i < N; i++) { int min = i; for(int j = i + 1; j < N; j++) { if(less(a[j], a[min])) min = j; } exch(a, i, min); } Both best case and worst case: $$ \theta(n^2) $$ not stable...
曾经我们使用 WeakReference 来处理 Android 中 Out of Memory 的问题。但是随着 Google 修改了回收机制的行为,这个方法已经没什么用了。 因此,Google 为我们提供了一个新的数据结构,LRU cache。 它的使用是这样的 LruCache bitmapCache = new LruCache<String, Bitmap>() 像是使用 Map ,但是它有一些独特的行为特性。 使用前,我们需要确定 cache 的大小。如何确定需要多大的空间? Google 给了我们一个最佳实践的空间计算方法。g ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); int availMemInBytes = am.getMemoryClass() * 1024 * 1024; LruCache bitmapCache = new LruCache<String, Bitmap>(availMemInBytes / 8); 另外还有一个重要的部分是我们需要告诉 cache 每个 bitmap 的大小,如何告诉?重写 sizeOf 方法 public class ThumbnailCache extends LruCache(String, Bitmap) { @Override protected int sizeOf(String key, Bitmap value) { return value....
Intro Before introducing a red black tree, we need to know what is a binary search tree. Binary search tree Binary search tree’s features insert cost order lgn find cost order lgn delete cost order lgn If we want all operations are order lgn time, we need to make sure the tree is balanced. A red black tree is balanced all the time. We can say a red black tree is a self balanced binary search tree....