面试的是微软 edge 浏览器的信息流推荐算法。
完全二叉树的层次遍历反转
一面的算法题是给定一个数组,是一个完全二叉树的层次遍历结果,然后输出一个数组,是每层的逆序结果。
思路: 首先,完全二叉树是可以计算每层节点的数量的,也就是可以在原数组中进行层的划分。之后需要处理的就是反转一个 list, 这个可以用双指针,左指针指向第一个位置,右指针指向最后一个位置,然后交换元素,直到左指针大于右指针。考虑特殊情况是,完全二叉树不满的情况,这种只出现在最后一层,需要计算右指针的位置。
2020 年 1 月 1 日,我正式和在知乎上相识几天的女朋友表白,并迅速在一起了。彼时我在武汉华科读研二,她在河北师范大学读大三。缘分这东西就是这样的奇妙,茫茫人海中一眼就能认出自己的有缘人。等到 1 月 15 日 放寒假的时候,我绕去石家庄回家,我们正式第一次见了面。19 号回到家中,23 日武汉爆发疫情。好在我平时出校门交际不多,并没有感染,回家也略早,没有滞留在武汉。接下来的几个月每天都很紧张,早上醒来第一件事就是看看武汉的疫情状况。回想起来,疫情那段时间主要做了几件事情:
由于武汉是疫情中心,华科一直到 6 月 20 号才开学,和女朋友匆匆别过,去了华科收拾了行李,拿了毕业证书, 7 月 1 号正式入职秋招签约的公司 BIGO 广州总部。
我在公司附近租了一个带卫生间的主卧,房租每月 1300,走路到公司 15 分钟。入职的部门是应用算法部的技术体系,负责 BIGO Live 的贴吧 Feed 流内容推荐算法。刚进去的时候真是啥也不会,那段时间跟着师兄学习了 Hive Sql,学习了上线流程,学习了召回和排序算法的实现等等,受益良多。BIGO 的节奏是大小周,相当于每月有两个周六加班,周一到周五的工作节奏是早 10 晚 9。在学校的时候觉得这种加班挺容易的,毕竟研究生的时候也感觉自己挺能熬的。但是工作了后,才明白强度完全不在一个档次,单休的那周真的无比难受。2020 年的国庆节和春节,因为一来国家不提倡流动,二来广州离河北确实有点远,我就没有回家。工作的日子就这样一天天过去,直到 2021 年的 3 月。
脚本其实就是短小的、用来让计算机自动化完成一系列工作的程序,这类程序可以用文本编辑器修改,不需要编译,通常是解释运行的。
打开文本编辑器 (可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh 代表 shell)。
1 | #!/bin/bash |
chmod +x file
加上执行权限,否则会提示无执行权限。./file.sh
,如果不加的话,linux 默认会从PATH 里去找该 file.sh。各位朋友,晚上好!
谢谢来到公开课现场的朋友们,让我感受到这是一个面对面的交流,而不是一个人面对屏幕的直播。
2020,对很多人来说都是很不容易的一年。包括我们的公开课,也改为线上进行了。虽然在几年前的一次公开课上,我说公开课应该线上开就好了,效率最高,但没有想到今天是因为疫情的原因被迫做到了。
去年这个时候我们也没有想到,这次我们已经通过视频号来进行直播了。
因为疫情,很多公司的年会都改线上了,所以这个时候,我的同事们正在努力给视频号直播加一个能力,就是只有白名单的人才能进入直播间的企业内直播,希望能给需要线上开年会的企业一些帮助吧。
回头看十年前,当时的想法只是,希望有一个适合自己的通讯工具来用。于是就开始了微信的第一版。但当时绝对没有想到,十年后的微信会是现在这个样子。对此,我自己感觉特别幸运,我想我一定是那个被上帝选中的人,因为光靠个人努力是做不到这一点的。
我分享一组数据吧,到今天,每天 ——
还有很多,包括微信支付,企业微信,微信读书,搜索等,就不一一说了。如微信支付,它就像你以前的钱包一样,已经变成了生活常用品。而微信,也真的成为了 “一个生活方式”。
今天是公开课,应该有很多的创作者参与,所以,也在这里感谢微信平台的每一个创作者,公众号的,小程序的,视频号的创作者。因为你们的创作,让微信的生态充满活力。
大家知道视频号今年的变化特别大。这里也想分享一下视频号的一些想法。
《Deep Interest Network for Click-Through Rate Prediction》
本文收录于 KDD18,来自于阿里妈妈的精准定向检索及基础算法团队。文章的创新点主要有三个:
Deep Interest Network (DIN) 是盖坤大神领导的阿里妈妈的精准定向检索及基础算法团队,在 2017 年 6 月提出的。 它针对电子商务领域 (e-commerce industry) 的 CTR 预估,重点在于充分利用 / 挖掘用户历史行为数据中的信息。
数据特征: 针对互联网电子商务领域,数据特点:Diversity、Local Activation。
针对问题:用户有多个兴趣爱好,访问了多个 good_id,shop_id。为了降低纬度并使得商品店铺间的算术运算有意义,我们先对其进行 Embedding 嵌入。那么我们如何对用户多种多样的兴趣建模那?使用 Pooling 对 Embedding Vector 求和或者求平均。同时这也解决了不同用户输入长度不同的问题,得到了一个固定长度的向量。这个向量就是用户表示,是用户兴趣的代表。但是,直接求 sum 或 average 损失了很多信息。所以稍加改进,针对不同的 behavior id 赋予不同的权重,这个权重是由当前 behavior id 和候选广告共同决定的。这就是 Attention 机制,实现了 Local Activation。
Diversity: 用户在访问电商网站时会对多种商品都感兴趣。也就是用户的兴趣非常的广泛。
Local Activation: 由于用户兴趣的多样性,只有部分历史数据会影响到当次推荐的物品是否被点击,而不是所有的历史记录。
Diversity 体现在年轻的母亲的历史记录中体现的兴趣十分广泛,涵盖羊毛衫、手提袋、耳环、童装、运动装等等。而爱好游泳的人同样兴趣广泛,历史记录涉及浴装、旅游手册、踏水板、马铃薯、冰激凌、坚果等等。
Local activation 体现在,当我们给爱好游泳的人推荐 google (护目镜) 时,跟他之前是否购买过薯片、书籍、冰激凌的关系就不大了,而跟他游泳相关的历史记录如游泳帽的关系就比较密切。