中国科学院软件研究所 (iscas.ac.cn)

软件所2025年接收推免生预报名公告—-中国科学院软件研究所 (cas.cn)

基本介绍

参考信息:中科院软件所 — postgraduate-recommendation 文档

中科院计算机所和自动化所硬实力非常强,可能仅次于清北(上交浙大都不虚),里面的一些牛导和清北差不多。软件所的实力稍弱于南软。

软件所下面大概有十几个实验室,各实验室招生独立进行。我报名的是智能软件研究中心

预推免招生不提供食宿,自行安排。

软件所是弱com,里面有一些导师还是很厉害的,可以去知乎或者小红书上面做做功课。套磁一些感兴趣的导师,导师也可能会来面试你。

我是直接参加面试,没联系导师的(bushi)。

流程记录

软件所信息审核很快,我大概是9.4 - 9.5 左右在官网上申请9月6号就收到邮件通过初选,告知复试计划在13日或者14日举行,进群等待复试通知。

复试开始前,要完成一个心理测试,就按照自己个人来就行。

个人感觉智能软件中心的行政效率不是很好,首先是发消息和公告的人很杂(大概有三四个),并且也没有群马甲(id都是自己的,看着很乱),发公告也不会 @全体成员 ,所以基本上就需要你经常关注群消息,不然说不定就错过了。其次,每次要推进下一个流程的之前,才会发布具体安排,导致你时间安排就会很赶,甚至不能提前安排一些事情。

进群之后沉默了几天天,也没通知具体线下是哪一天面试,车票也没法提前买。

然后直到9号有人问,才说可能是在13号举行。并且当天下午有人询问这次有没有笔试机考,群里面的另一个人才说 9号晚上20:30-22:30进行线上笔试(+机试)。 在考试结束后,我们被告知这就是唯一的笔试和机考,并且根据成绩进行筛选。(通过比例应该是1 / 2

11号早上公布了入选名单,并且告知了每个人的面试时间9月13日,具体到几时几分(可以协商调节)。之后便告知了面试的具体要求(附带上包含30个文献压缩包),如下:

面试分为三个部分,即ppt自我介绍、文献阅读报告和问答部分。
1.自我介绍部分通过ppt展示,来介绍自己的基本情况、科研情况以及未来展望等(中文);
2.文献阅读报告部分请根据提供的文献目录选一篇感兴趣的文章,介绍为什么选择该文献,然后介绍该文献的工作,以PPT的形式做展示;
自我介绍和文献阅读报告总时长控制在7分钟内
3.问答环节即各位导师针对考生的情况进行提问,其中包含1-2个英文问题,时常控制在8分钟内
总时长15分钟

PPT得在12号晚上之前交到指定邮箱里面。我之前个人陈述不打算做PPT,所以得临时做PPT然后把文献也扔了进去,时间非常赶。文献涵盖范围包括但不限于DL框架、编译原理相关和软件供应链安全等(我没看完,只看了部分)。

之后就是按照指定时间去线下复试。

面试前告知发放的名额大概也是进面人数的 1/2 左右,原话:名额大概在15位左右 包含南京学院的名额

笔试机考

120min,若干选择题,若干填空题,1道翻译题(千字左右的行业相关文章),3道算法题

选择题和填空题涵盖计算机408的八股。还考了数学题:包含1道二重积分,1~2道线性代数(矩阵的秩),大概5道概率论与数理统计。

算法题难度都不算高,leetcode难度在Medium的题目(第二题我只拿了最简单的分就跳了)。

算法1:leetcode 53. 最大子数组和

53. 最大子数组和 - 力扣(LeetCode)

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组是数组中的一个连续部分。

示例 1:

1
2
3
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。

示例 2:

1
2
输入:nums = [1]
输出:1

示例 3:

1
2
输入:nums = [5,4,-1,7,8]
输出:23

题解:可以采用动态规划DP,也可以直接完成。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int maxSum = nums[0];
// 当前和
int curSum = nums[0];
for(int i = 1; i < nums.size(); i++) {
if(curSum >= 0) { // 若上次的和不为负,可继续累加
curSum += nums[i];
}else{ // 若上次的和为负数,累加会变的更小,本次和取当前元素
curSum = nums[i];
}
maxSum = max(maxSum, curSum);
}
return maxSum;
}
};

算法2:PTA团体天梯赛 —— L1-046 整除光棍

这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。

现在,你的程序要读入一个整数 x ,这个整数一定是奇数并且不以5结尾。然后,经过计算,输出两个数字:第一个数字 s ,表示 x 乘以 s 是一个光棍,第二个数字 n 是这个光棍的位数。这样的解当然不是唯一的,题目要求你输出最小的解

提示:一个显然的办法是逐渐增加光棍的位数,直到可以整除 x 为止。但难点在于,s 可能是个非常大的数 —— 比如,程序输入31,那么就输出3584229390681和15,因为 31 乘以 3584229390681 的结果是 111111111111111 ,一共15个1。

输入格式

输入在一行中给出一个不以5结尾的正奇数 x(<1000)。

输出格式

在一行中输出相应的最小的 sn ,其间以1个空格分隔。

输入样例

1
31

输出样例

1
3584229390681 15

题解

模拟竖式除法

其实我们只是在每一次的计算后(发现不能整除)我们就会添加一个1继续去除。之前的商就保留下来了,和我们使用竖式除法是一样的。我们只是需要每次除不尽的时候,填上一个1继续除便是了,之前的商直接输出不是更好。

显然除数为x,被除数一开始需要在末位不断添1直到被除数不小于除数,才开始求商。求出第一个商后求余数,若余数为0说明运算结束,否则在余数末位添1,重复上述求商过程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
using namespace std;
int main(){
int x, r = 1, cn = 1; // r 表示光棍类型的数据,cn 记录位数
cin >> x;
while(r < x){
r *= 10;
r++;
cn++;
}
while(1){
cout << r / x; //输出商
r %= x; //取余
if(r == 0) //取余后,若等于0,则证明能被整除,break掉
break;
r = r * 10 + 1; //不等于0则在余数后一位加上1
cn++;
}
cout << " " << cn;
return 0;
}

这题当时是我认为最难的一题,我几分钟拿了提示解法最简单的分就PASS了。(但是现在看题解似乎也还好)

算法3:字母字符串字典倒序

凭借印象编的题目描述了,原题描述有些差异,不过理解应该没差。

给定两个整数 nx,其中:

  • n 是字符串的长度。
  • x 是要求返回的字符串的倒数索引(基于 1 的正数索引)。

你需要在按字典序排序的长度为 n小写字母字符串,并返回倒数第 x 个字符串。

示例 1:

1
2
3
输入:3 27
输出:zyz
解释:所有长度为 3 的小写字母字符串的字典序倒数排列如下:`zzz, zzy, zzx, ..., zza, zyz, ...`, 按照这个顺序第 27 个字符

输入样例

1
3 17520

输出样例

1
ace

输入样例

1
5 114514

输出样例

1
ztmpq

我的思路
先创建一个 unordered_map<int, char> 记录 1-26 分别对应 a-z 。
算出倒数第 x 个字符是对应的正数第几个,之后循环对 26 取模,并记录余数。在草稿纸上演算一下就很容易找到规律了。
最后如果位数不够 n,在结果字符串前面对应补齐小写字母 a

放一份GPT给出的答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <string>

using namespace std;

int main() {
int n, x;
cin >> n >> x;
// 计算长度为 n 的所有字符串的总数
int totalCount = 1;
for (int i = 0; i < n; ++i)
totalCount *= 26;

// 计算从头索引的零基值
int zeroBasedIndex = totalCount - x;

// 将零基索引转换为字符串
string result(n, 'a');
for (int i = n - 1; i >= 0; --i) {
result[i] = 'a' + (zeroBasedIndex % 26);
zeroBasedIndex /= 26;
}

cout << result << endl; // 倒数第 x 个字符串
return 0;
}

面试部分

英文Part

感觉英文部分的套路模板就那么几个,面试前多看看基本就有底了。

问1:为什么选择ISCAS?

我事先准备过这个问题,不过以为不会问英文。大概从科研实力,学术水平、地理优势(深造和就业)等去回答。

问2:有了解过ISCAS的相关导师以及研究方向吗?

这道题开始没听清,让老师重复了一遍,老师也非常和蔼,用较慢的语气清晰地换了一种更易于理解的表述。(点个大大的赞👍)

因为确实没有专门研究过导师以及相关的研究方向,所以答得非常的磕磕绊绊。大致表示导师的水平都很厉害,难以短时间内作出抉择,不过无论我参与了哪个导师的项目,我都会结合研究方向和自身兴趣找到自己的研究方向并深入探索。

结果看老师的表情,似乎也过得去?

中文Part

他们似乎挺喜欢我们学校的学生?更多感觉是在和我唠家常。老师很慈祥,态度很好,我慢慢放松下来之后,就当作是平时聊天一样去唠嗑了。

因为一直是一个老师在问我,中间她问其他导师还有什么想问的吗?结果就沉寂了下来,场面一度有点尴尬,然后她就又接着和我聊了。[笑]

问3:你这个成绩能够拿到推免资格吗?

我:确定能够拿到推免资格了。

问4:你高考成绩是多少?在当地排名应该很高吧?

问5:高考考那么优秀,为什么大学排名没那么靠前了呢?

我直接钻地下QAQ

问6:你使用过PyTorch吗?(因为我英文文献选的是PyTorch)

问7:你说你“喜爱新知识”,这在你的生活中有哪些体现?

问8:我看你的简历上有个百度的项目是吧?是参加了百度的实习吗?介绍一下?

我解释说是 百度移动端开发暑期课程 的项目,然后简单介绍了一下。

好的,时间差不多了,我们就到这里吧。

录取结果

群里大概七十多人,笔试机考筛选过后进面试的大概三十多人,最后录取人数应该有20左右(没仔细问)?

我最终排名13,软件所北京本部招的名单如下:

我的情况想去本部的话只能候补(感觉也能候补到,今年果壳的9.29的行政效率太低了,感觉被鸽穿了,很多学生担心没学上都跑路了),也可以选择去南京学院,南京这边录十几个(最后看了一下,大概有五六个选了南京这边吧)。

综合考虑了一下,为了留一个保底offer,最后选择了国科大南京学院这边。学位学历证、导师和本部都是一样的(目前如此,不知以后是否会改变),如果后期想跟着导师去北京做项目和导师沟通同意后,可以去北京,学校也提供宿舍。

需要注意的一个点是,南京这边的专业名是电子信息,北京的是软件工程。但专业代码都是一样的:电子信息 (软件工程 085405)

PS:虽然最后还是没有选择软件所,但是软件所导师的亲切和蔼和北京中关村地段的优秀都让我充满了好感!

如果涉及相关保密信息泄露,请联系博主本人删除