文章目录
大全
算法
学习资源
推荐书籍:刘汝佳的《算法竞赛入门经典》,时间充足,使用第二版紫色的,时间紧迫,使用第一版蓝色的。我只剩一个月刷题,所以用了蓝色的薄的那本。
怎么刷:从头到尾读,一边读,一边练,把课后的oj中的题目都做了。反正跟着这本书的节奏来就行了,要刷什么题库,什么oj啥的,这本书里面会讲的很清楚的,慢慢看下去。最好有充足的时间,不要像我一样,只剩下一个月的时间,只能一天一个章节,看不完不睡觉…
必懂的题型:动态规划
2016年北京大学计算机科学技术研究所优秀大学生夏令营上机考前练习
2016年北京大学计算机科学技术研究所优秀大学生夏令营上机考试
数据结构
- 链式和线性哈希
- 线性探测法和伪随机序列法的hash类(自己构造伪随机序列)
- 大数相乘优化
- 三叉排序树
- 最大子串
- 四则运算规则
- 哈弗曼树
- 队列、链表、单调队列等
- 各种排序
- 数据结构题
- dfs
- bfs
- dp
- 简单图论
- 快排复杂度是多少,并且黑板上手写证明。简述如何“快速选到第n个数”(快速选择,复杂度为O(n))。
- 连续最长子序列和(给了一堆正负的数字,任选其中一段连续的数字(可以全选),需要和最大)
- 无向图最长路径(单纯的Dijkstra)
- 给一个表达式,例如 (32+1/2)+12,计算结果
- 给了一棵树求最长的路径(根到叶节点)
- 越界
- 斐波那契额序列(考虑数超级大的情况)
- 大数阶乘
- 给一个类似1+2*3的表达式,计算结果(没有括号,只需要考虑加和乘我记得)
- 构造平衡树
- 普里姆算法(Prim)
- 二叉树最远距离
- 最大子序列和
- 哈弗曼树构造
- 无向图的深度搜索结果是否唯一
- 找出图中从节点s到t总权重小于等于k的情况
- 连续最长子序列和,参考PAT甲级1007题(不要挨个找,要DP)
- 最短路径问题,参考PAT甲级1003题
- 判断一个数学式子是不是合法,就是括号匹配不,运算符合法不
- NP难问题举了例子
- 模拟网站访问
- 最大流
- 递归
- 给一堆区间,找合在一起代表的最大区间
- 给一个字符串,至少插入多少个字符能够让这个字符串变成回文串
- 给定一个正方形,求最终组成的面积大小有多大
- 排序算法
交大计算机题目
第一题是:给了两个数组,分别从两个数组中取一个数组成一个pair,如何组合能让两个数组的pairs的差的绝对值之和最大?这个题目还是比较简单的,一个数组递增排序,一个递减排序,然后依次相减就好了。
第二题是:类似“斐波纳妾”数组判别问题。如,199100199是一个合理的数组,因为拆成1,99,100,199后1+99=100,99+100=199,这个问题我真的不会做,但是想到上交是根据case给分,所以就蒙了一下,我的算法只能判别个位数的斐波纳妾,这样至少能够通过一个case吧。
第三题是:求一个数组中,各元素的右边比这个元素小的数的个数,要求时间复杂度不能是n^2,这就是一个逆序数对的问题,应该用”归并排序”是最快的,而我那个时候脑子里只有动态规划,也根本不知道这个题目是逆序数,于是很天真地用动态规划做了,想着:我的时间复杂度可是n啊!够快吧!最后能有分数应该是也通过了几个cases吧。
数学
考的都是简单题,面试的时候也主要看你对于数学的“悟性”
别去刷题了,就只要给你一个名词你能清楚地讲出来就好。
高等数学
- 线性方程组求解
- 矩阵的运算
- 多远函数极值判断
- 中心极限定理(证明,独立同分布的情况)
- 第一类和第二类错误
- 假设检验
- 原假设和备择假设能否互换
- 当x很小的时候sinx大于什么东西,我印象中是在x趋于0时sinx > x,我就回答了x,然后他看我回答挺快的就问为什么,直接是x-sinx然后求导证明单调就完事了
离散数学
- 数理逻辑。包括命题、公式的等价和蕴含等。
- 集合和关系。包括集合和集合的运算、关系等
- 数函数和递推关系。数函数的母函数、递推关系等。
概率论
线性代数
逻辑推理题
- 4x4的矩阵去掉左上角右下角能不能N个横着或者竖着的方块填满
- 编程怎么实现
-
科研经历
- 能够发表论文的!在面试过程中,科研经历和论文将是一大优势,有时候面试老师就问你科研经历,你如果没有那面试就进行不下去了(有些人没有科研经历,但老师还是一直问,然后都被问哭了)。所以科研经历是仅次于算法的“第二重要”的技能!
- 一个是应用的能力
- 你最近看了什么论文?发表在什么期刊上?作者是谁?
AI
人工智能
弱人工智能:借鉴人类的智能行为,研制出更好的工具以减轻人类智力劳动,类似于高级仿生学
强人工智能:研制出达到甚至超越人类智慧水平的人造物,具有心智和意识,能根据自己的意图展开行动。可谓人造智能
人工智能现在取得的进展和成功,源于弱人工智能。人工智能的国际主流学界所持的目标是弱人工智能,很少有人致力于强人工智能
原因:
- 技术上来说,主流人工智能学界的努力从来就不是朝向强人工智能,现有的技术的发展也不会自动的使强人工智能成为可能
- 人类致力于创造的工具:潜艇比人游得深、火箭比人飞得高,类似的人工智能也在努力制造某种智能行为方面超过人类的工具
- 图像识别、语音识别:机器已经到甚至超过了普通人类的水平;
- 在机器翻译方面,便携的实时翻译器已经成为现实
- 在自动推理方面,机器很早就能进行定理的自动证明
- 在棋类游戏方面,机器已经打败了最顶尖的人类棋手
- 他们都是某种特定类型的智能行为,而不是完全智能。事实上人工智能研究活跃的子领域都是制造人工智能“工具”直接相关的。而对强人工智能必不可少、却与工具不太相关的内容,例如自主心智,独立意识,机器情感之类的罕有严肃的研究
- 人类致力于创造的工具:潜艇比人游得深、火箭比人飞得高,类似的人工智能也在努力制造某种智能行为方面超过人类的工具
- 不知道路在何方,现在有一种说法是如果能够模拟出人脑,把其中的神经元、神经突触等全部同规模的仿制出来,那么强人工智能都会自然产生,但是这种说法没有得到过一点点证明。实际上神经科学家获得目标代码不能还原出源代码,因为这样的反向工程,对软件程序来说是不可能的,更何况神经细胞内部存在分布式表示
- 不应该研究
机器学习的现状和未来
大众的视野里深度学习很热门,其实在领域中顶级学术会议中只有9%的投稿来自深度学习,相关论文总数11%。但是在大众眼中可能有百分之九十。但是未来必定会有其他技术可以达到或者超越深度学习技术目前的地位
神经网络是机器学习的一个分支,在图像视频语音方面取得巨大的成功,这些恰巧在大众比较能了解的方面,造成了大众知道得比较多
目前深度学习看做一种语言,也不是和以前的方法那么截然不同,可以看做一种描述方式,以前很多内容把它用这种方式描述出来,其实今天的深度学习领域已经融入很多以往机器学习中的很多记录。本身其实是相通的,包括一些共性的问题
机器学习的问题:
- 整个中国的人工智能领域可以说是在计算机科学界里面是和国际水平最接轨的之一。但是我们的研究厚度可能不够,比如说我们在某一方面到了一个比较高的位置,但是在其他方面可能还有缺乏,毕竟在这一个领域发展起来还完了几十年
- 机器学习的下一步其实会往各种方向发展,一个大的趋势是因为不同类型的数据会越来越多,所以需要分析的数据也会越来越多。每一个新的任务都需要一种新的技术,可以说是往外辐射的一个状态。往后有很多任务可能都需要新的机器学习技术
- 一个大的趋势是我们要**增加机器学习的鲁棒性。**这个是非常大的需求,因为在目前情况下很多研究中机器能达到人类的水准,甚至比人类的状态还要好。但是如果遇到一些罕见的情况,它会错得非常离谱。在有些应用中,这种情况是大家十分不愿意看到的。例如无人驾驶,开的好时比一般的司机都要好,但是如果表现不好的话,产生的后果就无法估计了。
- 在参数和学习理论上来说是可以做到量化复杂度的方法,但是神经网络的机理存在较多的“trick”。很多人去尝试做,也试出了很多不同的做法。但是做理论分析的门槛非常高,要找到共性的地方,才能做理论分析。现在大家都在盲目去尝试,结果也都还不错,所以相应的理论分析跟不上了。
- 研究学者都戏称“性能不够,加钱来凑”,这种看法其实不是很对——因为增加了层数之后,模型的复杂度更高,可以吃下去更多的数据。但是吃下去之后,模型的性能会不会变好?这个倒不一定。如果本来只需要一百层,你做到一百二十层,其实性能反而会变坏。样本的复杂度和模型的复杂度要恰到好处,过犹不及。
- 我认为目前机器学习领域中最大的问题是基础理论知识没有跟上,更多的人是在做尝试,缺乏比较严格的理论知识。
机器学习
- 先验概率和后验概率
- 贝叶斯
- 正定矩阵
- 线性回归
- SVM
- PCA
- 神经网络
- 聚类
- 贝叶斯分类
- 周老师的西瓜书
- 吴恩达的机器学习课程
- 大数定理、贝叶斯公式等
- machine learning现阶段的问题是什么
- 代价敏感的分类
- KNN的优缺点,KNN怎么做预测的,计算量怎么样
- NB、KNN、logistic、决策树实现,比较分类效果,用多少数据集证明它的判断是好的
软件工程
软件工程
- 什么是软件工程
- 研究软件和研究软件工程有没有什么区别
软件测试
- 用英文解释一下什么事软件测试,必须英文
计算机基础
操作系统
- 死锁:多个进程因循环等待资源而造成无法执行的现象,造成系统资源的极大浪费,无法释放
- 死锁原因(AB互相索取资源)
- 死锁条件(四项)
- 互斥使用:进程对资源进行排他性使用,一段时间内某资源只由一个进程占用。如果还有其他进程请求资源,则请求者只能等待,直到占用资源的进程用毕释放
- 不可抢占
- 请求和保持:该进程已经保持了至少一个资源,但是提出新的请求,而请求资源已经被占用,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
- 循环等待:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。
- 处理器管理。包括进程控制、进程互斥等。
- 存储管理。包括分区存储、页式存储等。
- 文件管理。包括文件目录、文件系统的实现等。
- 操作系统线程跟进程的区别等(操作系统的问题比较爱问)
- 多任务
- 多道程序:CPU资源比较珍贵,为了让CPU得到更好的利用,把暂时无需使用的CPU用于其他正在等待CPU资源的程序,称为多道程序。缺点是不分轻重缓急
- 分是系统:改进躲到程序,使得每个程序运行一段时间就主动让出CPU资源
- 多任务系统:操作系统从最底层接管了所有的硬件资源,所有应用程序在操作系统之上以进程的方式运行,每个进程拥有自己独立的地址空间,相互隔离。CPU统一由操作系统进行分配
- 进程
- 进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。
- 第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。
- 文本区域存储处理器执行的