0%

两数之和

最暴力的想法就是直接两层循环,遍历所有的可能性,找到符合条件的两个数即可。时间复杂度是$O(n^2)$。

1
2
3
4
5
6
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i in range(len(nums)):
for j in range(i+1, len(nums)):
if nums[i] + nums[j] == target:
return i, j

这里可以用hash表来优化,时间复杂度是$O(n)$。用元素的值作为key,元素的下标作为value,这样就可以通过查找target-num是否在hash表中来判断是否存在这样的两个数。

1
2
3
4
5
6
7
8
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
store = {}
for i, num in enumerate(nums):
if target - num in store:
return [store[target-num], i]
store[num] = i
return []

中国科学院计算技术研究所客座学生 一面(40min)

面试是计算所的phd电话交流的,流程如下:

  • 介绍了要做的项目

    ICT,商汤和南方电网一起合作的项目。主要做LLM+时序预测,有卡有数据集,但是数据集是南方电网的内部私有数据集,不能公开。

  • 谈谈之前做过的LLM相关的项目,有没有自己跑过,或者测试过一些LLM?

    讲了远程实习那段用LLM做漏洞检测和漏洞修复的工作。

阅读全文 »

提交

1
git commit -m "commit_info"

创建分支

是指在当前节点下,创建一个完全一样的分支,和之前的分支互不干扰。

1
git branch <branch_name>

切换到相应的分支上:

1
git checkout <branch_name>

可以用一个指令完成创建与移动:

1
git checkout -b <branch_name>
阅读全文 »

为什么需要图神经网络

对于一个图而言,我们通常注意于三种特征:

  1. 整个图的特征,例如图中有多少个节点,多少条边。
  2. 图中节点的意义,例如对于一个图片的图表示,可能一个节点就表示了一幅图片的一个像素点。
  3. 图中边的意义,例如对于社交网络而言,两个节点之间有边就表示两个人是有联系的,反之则没有联系。

因此,图神经网络的任务也通常集中于这三种,我们可以分为Graph-level,Node-level以及Edge-level的任务。

如何表示一个图

无论要解决什么样的任务,首要任务肯定是要先表示出来一个图,比较容易想到的解决方案就是构造邻接矩阵。但是邻接矩阵有它的缺点,就是太过于稀疏了,我们在学Linear Algebra的时候都知道,稀疏矩阵其实是一个不好的东西,同时对于我们计算机而言,稀疏矩阵同时占用了大量没用的内存,这对于我们以后的计算肯定是会降低性能的,所以我们这里可以采用构建邻接表的形式来表示一个图。

阅读全文 »

之前只是听说过python可以使用beautifulsoup或者是selenium之类的库进行爬虫的操作,也听说过一些理论,例如能爬API就爬API,爬不了API再去爬网页。

这次需要自己手动的去爬取存储漏洞代码的网站SARD以及Github commit

爬取漏洞代码

其实这里我是用selenium模拟了浏览器的这样一个功能,但是后面发现只要爬API就行了。

Selenium模拟浏览器

首先需要安装相应浏览器的驱动,我用Edge比较多,因此选择了Edge的driver,实际上你用哪个就在网上下哪一个然后安装到和python安装目录一样的路径下就ok了。

观察这个网页,发现我们需要找的代码其实是一个滚动的状态,就是说随着鼠标的下滑,它之前的代码会从页面消失,后续的代码会在页面展现,单纯的使用一个selector根据它的class来提取里面的代码肯定是不行的。

阅读全文 »

蔚来数据分析日常实习面试

介绍一下自己的项目

介绍了在NUS做的iwallpaper项目的数据获取以及如何处理的。

一个数分场景题

妈的,我都没听过那些名词,什么数仓异动,最后尴尬的和面试官说没学过不好意思😭

Union和Union all区别

Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;

Union All:对两个结果集进行并集操作,包括重复行,不进行排序;

了解窗口函数吗,说说看呢

1
2
<窗口函数> over (partition by <用于分组的列名>
order by <用于排序的列名>)
阅读全文 »

Church Numbers are the union of natural numbers which are represented by lambda functions.

Math

Think that we need to use function to represent numbers, what method should we take?

The way to describe numbers by church numbers is that:

$0:x$

$1:f(x)$

and so on

So we can use codes to represent them easily by just call the function we need for the numbers times.

阅读全文 »

排序

快速排序

基本思路是,先选择一个基准x,然后根据这个基准来从两边进行判断,这样分成两部分,一部分比基准x小的,另一部分是比基准x长的。
然后再分别对这两边部分递归的进行快速排序,最终会得到一个排好序的数组。
时间复杂度:
最好:$O(nlogn)$ 最坏:$O(n^2)$

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def quick_sort(q,l,r):
if l >= r:
return q
x = q[l]
i = l - 1
j = r + 1
while i < j:
i = i + 1
while q[i] < x:
i = i + 1
j = j - 1
while q[j] > x:
j = j - 1
if i < j:
q[i],q[j] = q[j],q[i]
quick_sort(q,l,j)
quick_sort(q,j + 1,r)
return q
阅读全文 »

Go语言入门

第一个hello world

1
2
3
4
5
6
7
package main

import "fmt"

func main() {
fmt.Println("hello,world!")
}

注意go语言中{}不能单独在一行写出,例如

1
2
func main()
{}

是不允许的。
同时注意,我们导入了fmt这个包,但是像fmt.Printf这种形式的变量才能够被外部访问:
只有标识符为大写字母开头的才能被外部变量引用(like public),而小写字母开头的标识符对外是不可见的(like private)

阅读全文 »