面了百度推荐算法岗(实习),这次如愿以偿。。。

最近技术群组织了一次算法面试讨论会,今天分享的是一位拿到 OFFER 的小伙子,如果你想加入我们的讨论群,见文末。


首先感谢组织AI算法岗的交流会,我从中收获很多,今天也有机会分享我的面试的经历。

  • 学校:哈尔滨工业大学
  • 专业:计算机类
  • 岗位:百度推荐算法(实习)

本次面经内容如下:

一面

介绍自己的项目

项目相关问题(其中一个是问方法/论文的创新点在哪)

协方差和相关系数是什么,他们的的关系是什么

L1范数和L2范数的区别

谈谈Sigmoid

ReLU函数在0点的梯度怎么处理

Transformer和Rnn的区别

谈谈Transformer多头注意力机制,多头注意力和普通注意力的区别

从普通注意力换成多头注意力会导致参数暴涨吗?如果有所增加的话,请分析主要是哪个结构导致的

Transformer可以并行训练吗?

Transformer可以处理双向输入吗

了解哪些工业界在用的推荐系统

了解AUC吗

讲讲NDCG

除了序列推荐,推荐系统还有哪些topic

算法题:Leetcode74题 搜索二维矩阵

二面

介绍项目

讲讲因果推断(自己有在做这方面的)

讲讲Recall、MRR和NDCG

算法:二叉搜索树转为有序数组

技术交流

技术要学会分享、交流,不建议闭门造车。一个人走的很快、一堆人可以走的更远。

各大厂面试资料、数据、技术交流提升, 均可加知识星球交流群获取,群友已超过2000人,添加时切记的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、添加微信号:mlc2060,备注:来自 获取推荐资料
方式②、微信搜索公众号:机器学习社区,后台回复:推荐资料

历史精选

任务描述 在最近的班干部竞选中,小明如愿以偿的当上了班长,成为班长后的第一件事,便是统计制作全班同学的花名册。由于上一任班长是个马大哈,之前的花名册可能存在各种问题,现在小明想要比对两份花名册的长度,以及它们是否相同。 相关知识 String类的对象的创建 可以按照创建类的对象的一般方法来创建String类的对象: String string = new String(); 也可以直接在创建对象时指定字符串内容: String string1 = "Hello World"; //string1字符串内容为"Hello World" String string2 = ""; //string2字符串内容为空 length()方法 String类中的length()方法将返回字符串对象的长度,请看示例: String string = "abcd"; int len = string.length(); System.out.println(len) 运行上述代码,执行结果为: 4 compareTo()方法 String类中的compareTo()方法将返回两个字符串对象的比较结果,若相等,返回0。不相等时,从两个字符串第1个字符开始比较,返回第一个不相等的字符差;另一种情况,较长字符串的前部分恰巧是较短的字符串,返回它们的长度差。 请看示例: String s1 = "abc"; String s2 = "abcd"; String s3 = "abcdfg"; String s4 = "1bcdfg"; String s5 = "cdfg"; System.out.println( s1.compareTo(s2) ); // -1 (相等,s1长度小1) System.out.println( s1.compareTo(s3) ); // -3 (相等,s1长度小3) System.out.println( s1.compareTo(s4) ); // 48 ("a"的ASCII码是97,"1"的的ASCII码是49,所以返回48) System.out.println( s1.compareTo(s5) ); // -2 ("a"的ASCII码是97,"c"的ASCII码是99,所以返回-2) 编程要求 本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下: roster1变量为之前的全班花名册,roster2变量为小明统计的全班花名册。 你将被要求输出3行: 第一行为roster1的长度; 第二行为roster2的长度; 第三行为两个花名册是否相同,若相同,输出“相同”;反之输出“不相同”(若姓名顺序不同,也算作不相同)。 评测说明 平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。 以下是测试样例: 测试输入: 张三 李四 王五 小明 李明 张三 小明 王五 预期输出: 11 11 不相同
03-18
<think>好的,我现在需要解决这个问题。让我仔细看看题目要求。题目是说小明要比较两个花名册是否相同,输出它们的长度以及是否相同的结果。那首先我得理解输入是怎么处理的,以及如何用Java代码来实现。 根据编程要求,roster1和roster2是两个字符串,可能包含多个姓名,用空格分隔。比如测试输入中的例子,第一行是“张三 李四 王五 小明”作为roster1,第二行是“李明 张三 小明 王五”作为roster2。预期输出是它们的长度都是11,但内容不同,所以第三行输出不相同。 那问题来了,如何计算这两个字符串的长度?比如,样例中的roster1字符串“张三 李四 王五 小明”的长度是11?让我数一下每个字符。张三是两个汉字,加上后的空格,每个空格可能是一个字符。比如“张三”后有一个空格,接着“李四”后一个空格,以此类推。假设这里的字符串是直接用输入的,每个汉字算一个字符,空格也算一个。例如,“张三 李四 王五 小明”总共有:张三(2)+空格(1) +李四(2)+空格(1)+王五(2)+空格(1)+小明(2)=2+1+2+1+2+1+2= 11?对的,样例的输出第一行是11。所以直接用length()方法获取字符串长度是正确的。 接下来,比较两个字符串是否相同。这里需要注意的是,compareTo方法是否适用于这种情况?或者是否应该使用equals方法?因为compareTo返回0时表示两个字符串相等,而equals方法直接判断内容是否相同。题目中的第三个输出要求是如果两个字符串相同(顺序也要相同),则输出“相同”,否则“不相同”。比如,样例中的两个字符串,虽然长度相同,但是姓名顺序不同,所以结果是不相同。那这里的比较应该直接比较字符串是否完全一致,包括顺序和每个字符。因此,应该使用equals方法而不是compareTo。例如,当两个字符串内容完全一致时,equals返回true,否则false。而如果用compareTo的话,只有当所有字符顺序都相同才会返回0。比如,如果两个字符串完全相同,compareTo返回0;否则,返回非0。所以这时候,如果使用compareTo是否等同于equals的判断呢? 例如,在Java中,String的compareTo方法返回0当且仅当两个字符串相等(内容相同)。所以,判断两个字符串是否相同可以用equals方法,或者看compareTo是否等于0。但题目中的例子,测试输入的roster1和roster2是不同的,所以即使长度相同,但因为内容不同,所以输出“不相同”。 那正确的做法应该是:比较两个字符串是否equals。如果等于,则输出“相同”,否则输出“不相同”。或者是否应该比较两个字符串是否在内容上完全相同,包括空格的位置和顺序? 比如,样例中的roster1和roster2的长度都是11,但具体内容不同,所以它们的字符串是不同的。例如,第一个字符串是“张三 李四 王五 小明”,而第二个是“李明 张三 小明 王五”。所以,它们的字符串内容不同,因此equals方法会返回false,所以应输出“不相同”。 那在代码中,应该怎么做? 题目中的编程要求是补全代码,输出三行。首先获取roster1和roster2的长度,然后比较是否相同。 所以,步骤应该是: 1. 输出roster1的长度:System.out.println(roster1.length()); 2. 输出roster2的长度:System.out.println(roster2.length()); 3. 比较两个字符串是否相等,如果相等,输出“相同”,否则输出“不相同”。 那么如何比较?用roster1.equals(roster2)吗? 比如,如果roster1和roster2的内容完全相同(包括顺序和每个字符),那么equals返回true。否则false。例如,如果两个花名册中的名字顺序不同,比如张三在前,李四在后,那么即使内容相同,但顺序不同,字符串就会不同,比如“张三 李四”和“李四 张三”是不同的字符串,所以equals返回false。这时候就会输出“不相同”,这符合题目中的样例情况。 那正确的比较方式就是使用equals方法。或者,题目中的compareTo方法是否必须使用? 但题目中的相关知识中提到了compareTo方法,可能提示应该使用这个方法。比如,在第三行的输出判断中,是否应该用compareTo的结果是否为0来判断是否相同? 因为,比如,如果compareTo返回0,说明两个字符串相等。此时,输出“相同”;否则输出“不相同”。 所以,两种方法都可以。例如: roster1.compareTo(roster2) == 0 ? "相同" : "不相同" 或者: roster1.equals(roster2) ? "相同" : "不相同" 这两个方法有什么区别? equals方法比较的是两个字符串的内容是否完全相同。而compareTo方法在内容相同时返回0,否则返回非零。所以对于字符串是否相等的判断,这两种方法是等效的。例如,两个字符串相等当且仅当equals返回true,或者compareTo返回0。 所以,这里无论用哪种方法都可以。不过,根据题目中的相关知识,compareTo方法被介绍了,可能预期使用这个方法。例如,题目中的示例,compareTo返回0时说明相等,否则不相等。 所以,可能正确的做法是使用compareTo()方法是否等于0来判断是否相同。 但需要注意,compareTo的返回值为0时,两个字符串确实相等。而如果两个字符串不相等,比如顺序不同,则compareTo返回的不是0。所以,在样例的情况下,roster1和roster2的字符串内容不同,所以compareTo返回的结果不等于0,因此会输出“不相同”。 因此,在代码中,第三行的判断条件应该使用roster1.compareTo(roster2) ==0吗? 是的。或者,用equals是否更好? 例如,在Java中,字符串的equals方法被覆盖,用于比较内容是否相同。而compareTo方法用于字典顺序比较。但是,当且仅当两个字符串内容完全相同时,equals返回true,同时compareTo返回0。所以,两者在这种情况下是等价的。 但可能存在其他情况吗?例如,当两个字符串内容相同,但对象不同?比如,字符串常量池中的对象和new出来的对象。例如: String a = "hello"; String b = new String("hello"); 此时,a.equals(b)返回true,因为内容相同。而a.compareTo(b)返回0。但a == b返回false。所以,在比较内容是否相同时,equals和compareTo都是可以的。所以,在本题中,不管用哪一种方法都可以正确判断两个字符串是否内容相同。 但是,题目中的相关知识中的示例,使用的是compareTo方法。比如,示例中的比较结果,当两个字符串相等时返回0。所以,可能题目希望我们使用compareTo方法来判断是否相同。 因此,正确的代码可能是: System.out.println(roster1.length()); System.out.println(roster2.length()); if (roster1.compareTo(roster2) == 0) { System.out.println("相同"); } else { System.out.println("不相同"); } 或者,使用equals: if (roster1.equals(roster2)) { ... } 哪种更合适? 根据题目描述中的“若相同,输出0”,所以compareTo的返回值为0时,说明相同。所以题目中的判断条件应该使用compareTo是否为0。例如,在编程要求中,第三行输出是否相同,根据compareTo的结果是否为0来判断。 或者,可能题目中的“是否相同”指的是字符串内容是否完全相同,包括顺序,这正好是equals方法的作用。 所以,两者在此处的判断是等价的。因此,无论用哪一种方法都是正确的。 但需要确认的是,如果两个字符串的内容完全相同,那么compareTo返回0,而equals返回true。所以,在本题中,两种方法都可以得到正确的结果。例如,在样例输入中,两个花名册字符串的内容不同,所以无论用compareTo还是equals,结果都是不同的。 那么问题可能在于,用户输入的两个字符串可能长度相同,但内容不同。比如,测试输入中的情况,长度都是11,但内容不同,所以第三行输出“不相同”。 现在,我需要编写代码,在Begin和End之间补全代码。根据题目中的代码框架,可能roster1和roster2已经被正确赋值,我需要输出三个结果。 所以,步骤是: 第一行输出roster1的长度:roster1.length() 第二行输出roster2的长度:roster2.length() 第三行,根据roster1和roster2是否相同,输出“相同”或“不相同”。这里判断是否相同的方法是使用equals或者compareTo。 假设题目中的测试用例中,如果两个字符串内容完全相同,则输出相同,否则不同。例如,当两个字符串完全一致时,不管用equals还是compareTo,都会得到正确的结论。 那么,在代码中,我可以用: System.out.println(roster1.length()); System.out.println(roster2.length()); if (roster1.compareTo(roster2) == 0) { System.out.println("相同"); } else { System.out.println("不相同"); } 或者: if (roster1.equals(roster2)) { ... } 两种方式都可以。但根据题目中的相关知识,可能更倾向于使用compareTo方法,因为题目中介绍了它。比如,题目中的第三个输出条件可能需要使用compareTo来判断是否相同。 例如,在相关知识中的示例,当两个字符串相等时,compareTo返回0。所以在代码中,应该比较compareTo的结果是否为0。 比如,给出的示例中的第三个输出是“不相同”,说明两个字符串的compareTo结果不等于0。 所以,在代码中应该使用compareTo方法。 例如,在测试输入中,roster1和roster2的内容不同,因此compareTo的结果不为0,输出“不相同”。 因此,正确的做法是用compareTo方法来判断是否相同。 综上,正确的代码应该是: 输出roster1和roster2的长度,然后根据roster1.compareTo(roster2)的结果是否为0来决定输出是否相同。 所以,补全后的代码应该如下: // 输出第一行:roster1的长度 System.out.println(roster1.length()); // 输出第二行:roster2的长度 System.out.println(roster2.length()); // 比较是否相同,并输出第三行 if (roster1.compareTo(roster2) == 0) { System.out.println("相同"); } else { System.out.println("不相同"); } 这样就能满足题目的要求了。 现在需要测试这种情况是否正确。例如,当两个字符串完全相同时,会输出相同。否则,不相同。例如,当顺序不同,如“张三 李四”和“李四 张三”时,字符串不同,compareTo返回非零,输出“不相同”。 所以,这样的代码应该能正确通过测试样例。</think>要完成小明比对两份花名册的任务,我们需要按以下步骤实现: ### 步骤分析 1. **获取字符串长度** 使用`length()`方法分别计算`roster1`和`roster2`的长度。 2. **比较字符串内容** 使用`compareTo()`方法判断两个字符串是否完全一致。若结果为0,则内容相同;否则不同。 ### 解决代码 ```java // 输出roster1的长度 System.out.println(roster1.length()); // 输出roster2的长度 System.out.println(roster2.length()); // 比较内容是否相同 if (roster1.compareTo(roster2) == 0) { System.out.println("相同"); } else { System.out.println("不相同"); } ``` ### 代码解释 1. **输出长度** `roster1.length()`和`roster2.length()`分别返回两个字符串的字符数量,直接输出即可。 2. **比较内容** `compareTo()`方法逐字符比较两个字符串: - 若完全一致(包括顺序和空格),返回0,输出“相同”。 - 若内容或顺序不同,返回非0值,输出“不相同”。 该方法确保严格匹配字符串内容,符合题目要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值