0%

面试的是微软 edge 浏览器的信息流推荐算法。

完全二叉树的层次遍历反转

一面的算法题是给定一个数组,是一个完全二叉树的层次遍历结果,然后输出一个数组,是每层的逆序结果。
思路: 首先,完全二叉树是可以计算每层节点的数量的,也就是可以在原数组中进行层的划分。之后需要处理的就是反转一个 list, 这个可以用双指针,左指针指向第一个位置,右指针指向最后一个位置,然后交换元素,直到左指针大于右指针。考虑特殊情况是,完全二叉树不满的情况,这种只出现在最后一层,需要计算右指针的位置。

AOV - 网

以顶点表示活动,有向边表示活动之间的先后关系的图称为 AOV 网 (Activity On Vertex Network,顶点表示活动的网)。AOV 网是一种有向无环图 (Directed Acyclic Graph, DAG)。

拓扑排序

拓扑排序就是将 AOV 网中的所有顶点排列成一个线性序列,并且序列满足以下条件:在 AOV 网中,如果从顶点 A 到 B 存在一条路径,则在该线性序列中,顶点 A 一定出现在顶点 B 之前。因此拓扑排序的过程就是将 AOV 网中的各个活动组成一个可行的实施方案。此外拓扑排序也可以判断图中是否有环。拓扑排序并不唯一,有向无环图一定存在拓扑排序。

阅读全文 »

从 2020 到 2021

2020 年 1 月 1 日,我正式和在知乎上相识几天的女朋友表白,并迅速在一起了。彼时我在武汉华科读研二,她在河北师范大学读大三。缘分这东西就是这样的奇妙,茫茫人海中一眼就能认出自己的有缘人。等到 1 月 15 日 放寒假的时候,我绕去石家庄回家,我们正式第一次见了面。19 号回到家中,23 日武汉爆发疫情。好在我平时出校门交际不多,并没有感染,回家也略早,没有滞留在武汉。接下来的几个月每天都很紧张,早上醒来第一件事就是看看武汉的疫情状况。回想起来,疫情那段时间主要做了几件事情:

  • 每天和女朋友视频,感情迅速升温,到了 5 月份好转一点的时候我们还溜出来见了几次。
  • 远程写毕业论文,跟导师汇报和讨论进展,最后的答辩也是远程进行的。
  • 自上大学起回家时间就很少,正好陪了一下父母,教会了我妈骑电动车。

由于武汉是疫情中心,华科一直到 6 月 20 号才开学,和女朋友匆匆别过,去了华科收拾了行李,拿了毕业证书, 7 月 1 号正式入职秋招签约的公司 BIGO 广州总部。

我在公司附近租了一个带卫生间的主卧,房租每月 1300,走路到公司 15 分钟。入职的部门是应用算法部的技术体系,负责 BIGO Live 的贴吧 Feed 流内容推荐算法。刚进去的时候真是啥也不会,那段时间跟着师兄学习了 Hive Sql,学习了上线流程,学习了召回和排序算法的实现等等,受益良多。BIGO 的节奏是大小周,相当于每月有两个周六加班,周一到周五的工作节奏是早 10 晚 9。在学校的时候觉得这种加班挺容易的,毕竟研究生的时候也感觉自己挺能熬的。但是工作了后,才明白强度完全不在一个档次,单休的那周真的无比难受。2020 年的国庆节和春节,因为一来国家不提倡流动,二来广州离河北确实有点远,我就没有回家。工作的日子就这样一天天过去,直到 2021 年的 3 月。

阅读全文 »

初识 shell

脚本其实就是短小的、用来让计算机自动化完成一系列工作的程序,这类程序可以用文本编辑器修改,不需要编译,通常是解释运行的。

第一个 shell 脚本

打开文本编辑器 (可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh 代表 shell)。

1
2
#!/bin/bash
echo "Hello World !"

1、chmod +x file 加上执行权限,否则会提示无执行权限。
2、注意执行脚本时候或者全目录,或者 ./file.sh ,如果不加的话,linux 默认会从PATH 里去找该 file.sh。
3、脚本后缀名可以任意修改,仍然可以正常运行。
阅读全文 »

开场

各位朋友,晚上好!

谢谢来到公开课现场的朋友们,让我感受到这是一个面对面的交流,而不是一个人面对屏幕的直播。

2020,对很多人来说都是很不容易的一年。包括我们的公开课,也改为线上进行了。虽然在几年前的一次公开课上,我说公开课应该线上开就好了,效率最高,但没有想到今天是因为疫情的原因被迫做到了。

去年这个时候我们也没有想到,这次我们已经通过视频号来进行直播了。

因为疫情,很多公司的年会都改线上了,所以这个时候,我的同事们正在努力给视频号直播加一个能力,就是只有白名单的人才能进入直播间的企业内直播,希望能给需要线上开年会的企业一些帮助吧。

回头看十年前,当时的想法只是,希望有一个适合自己的通讯工具来用。于是就开始了微信的第一版。但当时绝对没有想到,十年后的微信会是现在这个样子。对此,我自己感觉特别幸运,我想我一定是那个被上帝选中的人,因为光靠个人努力是做不到这一点的。

我分享一组数据吧,到今天,每天 ——

  • 有 10.9 亿用户打开微信,3.3 亿用户进行了视频通话;
  • 有 7.8 亿用户进入朋友圈,1.2 亿用户发表朋友圈;
  • 有 3.6 亿用户读公众号文章,4 亿用户使用小程序;

还有很多,包括微信支付,企业微信,微信读书,搜索等,就不一一说了。如微信支付,它就像你以前的钱包一样,已经变成了生活常用品。而微信,也真的成为了 “一个生活方式”。

今天是公开课,应该有很多的创作者参与,所以,也在这里感谢微信平台的每一个创作者,公众号的,小程序的,视频号的创作者。因为你们的创作,让微信的生态充满活力。

大家知道视频号今年的变化特别大。这里也想分享一下视频号的一些想法。

阅读全文 »

评价

  不管怎么样他肯定会在历史上扮演一个比较重要的角色,一是他作为一个“颠覆”的角色出现,掀开了右倾民族主义的遮羞布;二是刚好遇上了百年不遇的新冠疫情,美国又恰好是最严重的国家。

  特朗普以及他的团队其实是意识到美国出现了什么问题,他们幸运的找出了部分核心问题而且得到了很多民众的支持,但是很可惜海没有找到本质问题,也没找到解决办法,如果把美国看作一个得了感冒的病人,那么特朗普团队是找出了病因的医生,但是用了以毒攻毒的疗法,很有可能副作用会把人弄死。

  附:唐纳德·特朗普就职和卸任演讲稿

阅读全文 »

论文

《Deep Interest Network for Click-Through Rate Prediction》

本文收录于 KDD18,来自于阿里妈妈的精准定向检索及基础算法团队。文章的创新点主要有三个:

  1. Deep Interest Network(DIN)—— 通过一个局部激活单元(local activation unit)来自适应地从用户历史行为中学习他对于某个广告的兴趣。
  2. Mini-batch Aware Regularization —— 即一个针对 mini-batch SGD 进行优化的 L2 norm 正则项,通过近似减少了计算量。
  3. 一个数据自适应的激活函数,对 PReLU 的 indicator function 进行修改,并取名为 Dice。

背景

Deep Interest Network (DIN) 是盖坤大神领导的阿里妈妈的精准定向检索及基础算法团队,在 2017 年 6 月提出的。 它针对电子商务领域 (e-commerce industry) 的 CTR 预估,重点在于充分利用 / 挖掘用户历史行为数据中的信息

  1. 数据特征: 针对互联网电子商务领域,数据特点:Diversity、Local Activation。

  2. 针对问题:用户有多个兴趣爱好,访问了多个 good_id,shop_id。为了降低纬度并使得商品店铺间的算术运算有意义,我们先对其进行 Embedding 嵌入。那么我们如何对用户多种多样的兴趣建模那?使用 Pooling 对 Embedding Vector 求和或者求平均。同时这也解决了不同用户输入长度不同的问题,得到了一个固定长度的向量。这个向量就是用户表示,是用户兴趣的代表。但是,直接求 sum 或 average 损失了很多信息。所以稍加改进,针对不同的 behavior id 赋予不同的权重,这个权重是由当前 behavior id 和候选广告共同决定的。这就是 Attention 机制,实现了 Local Activation。

  3. DIN 的解决方案:
    1. 使用 用户兴趣分布 (Diversity) 来表示用户多种多样的兴趣爱好
    2. 使用 Attention 机制 来实现 Local Activation
    3. 针对模型训练,提出了 Dice 激活函数,自适应正则 (Adaptive Regulation),显著提升了模型性能与收敛速度

Diversity: 用户在访问电商网站时会对多种商品都感兴趣。也就是用户的兴趣非常的广泛。

Local Activation: 由于用户兴趣的多样性,只有部分历史数据会影响到当次推荐的物品是否被点击,而不是所有的历史记录。

Diversity 体现在年轻的母亲的历史记录中体现的兴趣十分广泛,涵盖羊毛衫、手提袋、耳环、童装、运动装等等。而爱好游泳的人同样兴趣广泛,历史记录涉及浴装、旅游手册、踏水板、马铃薯、冰激凌、坚果等等。

Local activation 体现在,当我们给爱好游泳的人推荐 google (护目镜) 时,跟他之前是否购买过薯片、书籍、冰激凌的关系就不大了,而跟他游泳相关的历史记录如游泳帽的关系就比较密切。

阅读全文 »