大三学生实习面试经历(1)

最近听了一位学长的建议,不能等一切都准备好再去开始,于是就开始了简历投递,恰好简历过了某小厂的初筛,开启了线上面试,记录了一些问题:

(通过面试也确实了解到了自己在某些方面确实做的还不够充分,需要继续努力)

1.思维题毒蘑菇

现在有1011种蘑菇,其中1种是毒蘑菇。人一旦吃了微量的毒蘑菇,就会在72小时后发作身亡。现在用松鼠做试验,从开始喂松鼠计时,要在72小时后马上找出毒蘑菇,问最少需要多少只松鼠?(需要给出解题过程)

要找出1011种蘑菇中的毒蘑菇,我当时回答的是使用二进制数的方法来减少所需的松鼠数量。具体过程如下:

  1. 理解问题:我们有1011种蘑菇,且知道其中只有一种是毒蘑菇。我们的目标是在72小时后确定哪一种是毒蘑菇。

  2. 二进制编码:我们可以将每一种蘑菇用一个二进制数来表示。由于我们有1011种蘑菇,我们需要找到一个足够的二进制位数,以便能够区分所有的蘑菇。

  3. 计算所需的位数:我们需要找到满足 ( 2^n 大于等于 1011 ) 的最小整数 ( n )。

    • 计算 ( 2^{10} = 1024 ),而 ( 2^9 = 512 )。
    • 因此,10位二进制数可以表示从0到1023的数字,可以区分1011种蘑菇。
  4. 分配松鼠:每一只松鼠可以对应二进制数中的一位:

    • 如果第 ( i ) 位为1,则该松鼠会吃掉对应的蘑菇;如果为0,则该松鼠不会吃。
    • 通过这种方式,每一只松鼠的生死情况(是否中毒)可以反映出对应的二进制位。
  5. 结果:因为需要10位二进制数来标识每一种蘑菇,所以我们至少需要10只松鼠。

结论

最少需要10只松鼠来确定哪一种蘑菇是毒蘑菇。

2.Java编程题

1.给定一个List<string〉,编写一个方法删除所有重复的字符串,并保持原有顺序不变
测试数据:[“apple”,“banana”,“apple”,“orange”,“banana”,“grape”,“grape”]
输出:[“apple”,“banana”,“orange”,“grape”]
2.给定一个Map<string,Integer〉,其中键是名字,值是年龄。编写一个方法找出年龄最人的三个人的名字。
测试数据:{“John”:35,“Bob”:40,“Alice”:30,“Tom”:45,“Jerry”: 50}
输出:[Jerry","TOm””“Bob”
3.编写一个方法,接收一个List,返回一个Map,其中键是列表中的字符串,值是该字符串在列表中出现的次数。
测试数据:[“apple”,“banana”,“apple”,"orange”,“banana”,“grape”,“grape”
输出:{“apple”:2,“banana”:2,“orange”:1.“grape”: 2}
4.给定一个List,其中的字符串可能包含数字和字母。编写一个方法,将列表中的字符串分为两个列表,一个包含只包含数字的字符串,另一个包含只包含字母的字符串。
测试数据:「“123”,“abc”,“456”,“def”."789"“ghi”]
输出:数字列表:[“123”,“456”,“789”],字母列表:[“abc”,“def”,“ghi”]
5.给定一个Map<string,List>,键是学生的名字,值是他们的成绩列表。编写一个方法,返回一个新的Map,键是学生的名字,值是他们的平均成绩。
测试数据:{“John”:[85,90,95],“Bob”:[80,85,90],“Alice”:[95,100,105]}
输出:f"John”:90.0,“Bob”:85.0,“Alice”:180.0]
6.给定一个List<string〉,每个字符串都是一个山逗号分隔的名字和电子邮件地址(例如,“JohnDoe,john@doe.com”)。编写一个方法,将这个列表转换为一个Map,其中键是电子邮件地址,值是对应的名字
测试数据:[“John Doe,john@doe.com”“Bob smith,bob@smith.com”,“Alice Johnson,alice@iohnson.com”
输出:{“john@doe.com”:“John Doe”.“bob@smith.com”: “Bob Smith”, “alice@iohnson.com”: “Alice Johnson”}

下面是针对每个问题的重述、代码实现和思路分析

1. 删除所有重复的字符串,并保持原有顺序不变

题目重述:给定一个字符串列表,删除所有重复的字符串,并保持原有的顺序。

代码实现一

import java.util.*;public class RemoveDuplicates {public static List<String> removeDuplicates(List<String> strings) {Set<String> seen = new LinkedHashSet<>(strings);return new ArrayList<>(seen);}public static void main(String[] args) {List<String> input = Arrays.asList("apple", "banana", "apple", "orange", "banana", "grape", "grape");List<String> output = removeDuplicates(input);System.out.println(output); // 输出: [apple, banana, orange, grape]}
}

思路

  • 使用 LinkedHashSet 来存储字符串,LinkedHashSet 保持插入顺序且不允许重复元素。
  • 将输入列表传入 LinkedHashSet,然后转换回 ArrayList 以获得所需的输出格式。

代码实现二

import java.util.*;public class RemoveDuplicates {public static List<String> removeDuplicates(List<String> strings) {List<String> result = new ArrayList<>();for (String str : strings) {if (!result.contains(str)) {result.add(str);}}return result;}public static void main(String[] args) {List<String> input = Arrays.asList("apple", "banana", "apple", "orange", "banana", "grape");List<String> output = removeDuplicates(input);System.out.println(output); // 输出: [apple, banana, orange, grape]}
}

思路

  • 创建一个新的列表 result 来存储不重复的字符串。
  • 遍历输入列表,检查 result 中是否已包含当前字符串,如果没有,则添加它。

2. 找出年龄最小的三个人的名字

题目重述:给定一个映射,键是名字,值是年龄,找出年龄最小的三个人的名字。

代码实现一

import java.util.*;public class YoungestPeople {public static List<String> findYoungest(Map<String, Integer> ages) {return ages.entrySet().stream().sorted(Map.Entry.comparingByValue()).limit(3).map(Map.Entry::getKey).collect(Collectors.toList());}public static void main(String[] args) {Map<String, Integer> input = new HashMap<>();input.put("John", 35);input.put("Bob", 40);input.put("Alice", 30);input.put("Tom", 45);input.put("Jerry", 50);List<String> output = findYoungest(input);System.out.println(output); // 输出: [Alice, John, Bob]}
}

思路

  • Map 转换为流,按值(年龄)排序。
  • 使用 limit(3) 选择前3个最小的值,并提取相应的键(名字)。
  • 最后将结果收集到列表中。

代码实现二

import java.util.*;public class YoungestPeople {public static List<String> findYoungest(Map<String, Integer> ages) {List<Map.Entry<String, Integer>> entryList = new ArrayList<>(ages.entrySet());entryList.sort(Map.Entry.comparingByValue());List<String> youngest = new ArrayList<>();for (int i = 0; i < Math.min(3, entryList.size()); i++) {youngest.add(entryList.get(i).getKey());}return youngest;}public static void main(String[] args) {Map<String, Integer> input = new HashMap<>();input.put("John", 35);input.put("Bob", 40);input.put("Alice", 30);input.put("Tom", 45);input.put("Jerry", 50);List<String> output = findYoungest(input);System.out.println(output); // 输出: [Alice, John, Bob]}
}

思路

  • Map 转换为列表并排序。
  • 选择前3个最小年龄的名字。

3. 计算字符串出现的次数

题目重述:给定一个字符串列表,返回一个映射,其中键是字符串,值是该字符串在列表中出现的次数。

代码实现一

import java.util.*;public class CountOccurrences {public static Map<String, Integer> countOccurrences(List<String> strings) {Map<String, Integer> countMap = new HashMap<>();for (String str : strings) {countMap.put(str, countMap.getOrDefault(str, 0) + 1);}return countMap;}public static void main(String[] args) {List<String> input = Arrays.asList("apple", "banana", "apple", "orange", "banana", "grape", "grape");Map<String, Integer> output = countOccurrences(input);System.out.println(output); // 输出: {apple=2, banana=2, orange=1, grape=2}}
}

思路

  • 使用 HashMap 来存储每个字符串及其出现的次数。
  • 遍历列表,对于每个字符串,更新其计数。
  • 使用 getOrDefault 方法来处理未出现的字符串。

代码实现二

import java.util.*;public class CountOccurrences {public static Map<String, Integer> countOccurrences(List<String> strings) {Map<String, Integer> countMap = new HashMap<>();for (String str : strings) {countMap.put(str, countMap.getOrDefault(str, 0) + 1);}return countMap;}public static void main(String[] args) {List<String> input = Arrays.asList("apple", "banana", "apple", "orange", "banana", "grape");Map<String, Integer> output = countOccurrences(input);System.out.println(output); // 输出: {apple=2, banana=2, orange=1, grape=1}}
}

思路

  • 使用 HashMap 来存储每个字符串及其出现的次数。
  • 遍历列表,更新计数。

4. 将字符串分为数字和字母列表

题目重述一:给定一个字符串列表,将字符串分为两个列表,一个包含只包含数字的字符串,另一个包含只包含字母的字符串。

代码实现

import java.util.*;public class SeparateNumbersAndLetters {public static Map<String, List<String>> separate(List<String> strings) {List<String> numbers = new ArrayList<>();List<String> letters = new ArrayList<>();for (String str : strings) {if (str.matches("\\d+")) {numbers.add(str);} else if (str.matches("[a-zA-Z]+")) {letters.add(str);}}Map<String, List<String>> result = new HashMap<>();result.put("numbers", numbers);result.put("letters", letters);return result;}public static void main(String[] args) {List<String> input = Arrays.asList("123", "abc", "456", "def", "789", "ghi");Map<String, List<String>> output = separate(input);System.out.println("数字列表: " + output.get("numbers")); // 输出: [123, 456, 789]System.out.println("字母列表: " + output.get("letters")); // 输出: [abc, def, ghi]}
}

思路

  • 遍历字符串列表,使用正则表达式 matches 方法来判断字符串是数字还是字母。
  • 将对应的字符串添加到相应的列表中。
  • 最终将两个列表放入一个映射中返回。

代码实现二

import java.util.*;public class SeparateNumbersAndLetters {public static Map<String, List<String>> separate(List<String> strings) {List<String> numbers = new ArrayList<>();List<String> letters = new ArrayList<>();for (String str : strings) {if (str.matches("\\d+")) {numbers.add(str);} else if (str.matches("[a-zA-Z]+")) {letters.add(str);}}Map<String, List<String>> result = new HashMap<>();result.put("numbers", numbers);result.put("letters", letters);return result;}public static void main(String[] args) {List<String> input = Arrays.asList("123", "abc", "456", "def");Map<String, List<String>> output = separate(input);System.out.println("数字列表: " + output.get("numbers")); // 输出: [123, 456]System.out.println("字母列表: " + output.get("letters")); // 输出: [abc, def]}
}

思路

  • 遍历字符串列表,使用正则表达式 matches 方法来判断字符串是数字还是字母。
  • 将对应的字符串添加到相应的列表中。

5. 计算学生的平均成绩

题目重述:给定一个映射,键是学生的名字,值是他们的成绩列表,返回一个新的映射,键是学生的名字,值是他们的平均成绩。

代码实现一

import java.util.*;public class AverageGrades {public static Map<String, Double> calculateAverages(Map<String, List<Integer>> grades) {Map<String, Double> averages = new HashMap<>();for (Map.Entry<String, List<Integer>> entry : grades.entrySet()) {String name = entry.getKey();List<Integer> scores = entry.getValue();double average = scores.stream().mapToInt(Integer::intValue).average().orElse(0.0);averages.put(name, average);}return averages;}public static void main(String[] args) {Map<String, List<Integer>> input = new HashMap<>();input.put("John", Arrays.asList(85, 90, 95));input.put("Bob", Arrays.asList(80, 85, 90));input.put("Alice", Arrays.asList(95, 100, 105));Map<String, Double> output = calculateAverages(input);System.out.println(output); // 输出: {John=90.0, Bob=85.0, Alice=100.0}}
}

思路

  • 遍历每个学生的成绩列表,使用流计算平均值。
  • 将名字和对应的平均成绩存储在新的映射中。

代码实现二

import java.util.*;public class AverageGrades {public static Map<String, Double> calculateAverages(Map<String, List<Integer>> grades) {Map<String, Double> averages = new HashMap<>();for (Map.Entry<String, List<Integer>> entry : grades.entrySet()) {String name = entry.getKey();List<Integer> scores = entry.getValue();double total = 0;for (int score : scores) {total += score;}averages.put(name, total / scores.size());}return averages;}public static void main(String[] args) {Map<String, List<Integer>> input = new HashMap<>();input.put("John", Arrays.asList(85, 90, 95));input.put("Bob", Arrays.asList(80, 85, 90));input.put("Alice", Arrays.asList(95, 100, 105));Map<String, Double> output = calculateAverages(input);System.out.println(output); // 输出: {John=90.0, Bob=85.0, Alice=100.0}}
}

思路

  • 遍历每个学生的成绩列表,计算总分并求平均。
  • 将名字和对应的平均成绩存储在新的映射中。

6. 将名字和电子邮件地址转换为映射

题目重述:给定一个字符串列表,每个字符串都是一个逗号分隔的名字和电子邮件地址,将这个列表转换为一个映射,其中键是电子邮件地址,值是对应的名字。

代码实现

import java.util.*;public class NameEmailMapping {public static Map<String, String> mapNamesToEmails(List<String> entries) {Map<String, String> emailMap = new HashMap<>();for (String entry : entries) {String[] parts = entry.split(",");if (parts.length == 2) {String name = parts[0].trim();String email = parts[1].trim();emailMap.put(email, name);}}return emailMap;}public static void main(String[] args) {List<String> input = Arrays.asList("John Doe,john@doe.com", "Bob Smith,bob@smith.com", "Alice Johnson,alice@johnson.com");Map<String, String> output = mapNamesToEmails(input);System.out.println(output); // 输出: {john@doe.com=John Doe, bob@smith.com=Bob Smith, alice@johnson.com=Alice Johnson}}
}

思路

  • 遍历输入列表,使用 split 方法将每个字符串分为名字和电子邮件。
  • 将电子邮件作为键,名字作为值存入映射中。

代码实现二

import java.util.*;public class NameEmailMapping {public static Map<String, String> mapNamesToEmails(List<String> entries) {Map<String, String> emailMap = new HashMap<>();for (String entry : entries) {String[] parts = entry.split(",");if (parts.length == 2) {emailMap.put(parts[1].trim(), parts[0].trim());}}return emailMap;}public static void main(String[] args) {List<String> input = Arrays.asList("John Doe,john@doe.com", "Bob Smith,bob@smith.com");Map<String, String> output = mapNamesToEmails(input);System.out.println(output); // 输出: {john@doe.com=John Doe, bob@smith.com=Bob Smith}}
}

思路

  • 遍历输入列表,使用 split 方法将每个字符串分为名字和电子邮件。
  • 将电子邮件作为键,名字作为值存入映射中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/59696.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Android】逆向开发与反逆向开发入门知识(一)

目录 逆向开发反编译 & 反混淆反编译工具反编译反混淆 修改预置资源文件抓包前期准备二次打包重签名 如何预防 App 被逆向开发&#xff1f;代码混淆应用加固防止动态调试Root 检测二次打包检测 警告&#xff1a;逆向开发相关知识请在法律规定范围内使用&#xff0c;请勿使用…

华为Mate 70临近上市:代理IP与抢购攻略

随着科技的飞速发展&#xff0c;智能手机已经成为我们日常生活中不可或缺的一部分。而在众多智能手机品牌中&#xff0c;华为一直以其卓越的技术和创新力引领着行业的发展。近日&#xff0c;华为Mate 70系列手机的发布会正式定档在11月26日&#xff0c;这一消息引发了众多科技爱…

SQLite 和 MySQL语法区别

SQLite 和 MySQL 在 SQL 语法上有一些差异&#xff0c;这些差异主要体现在数据类型、函数、表和索引的管理等方面。以下是一些主要的不同之处&#xff1a; 1. 数据类型 SQLite 支持的数据类型包括&#xff1a;TEXT, INTEGER, REAL, BLOB。动态类型系统&#xff0c;允许在插入…

【Linux之权限】理论篇

前言 Linux的权限是我们学习Linux初期非常重要的基础知识&#xff0c;接下来我将通过一个系列【Linux之权限】&#xff0c;共三篇文章&#xff0c;对此进行较为全面和详细的解说。 sudo 情况&#xff1a;如果我们不是超级管理员&#xff0c;但是想执行一个权限级别比较高的指…

[C++] 智能指针

文章目录 智能指针的使用原因及场景分析为什么需要智能指针&#xff1f;异常抛出导致的资源泄漏问题分析 智能指针与RAIIC常用智能指针 使用智能指针优化代码优化后的代码优化点分析 析构函数中的异常问题解决方法 RAII 和智能指针的设计思路详解什么是 RAII&#xff1f;RAII 的…

spark性能优化调优指导性文件

1.让我们看一下前面的核心参数设置&#xff1a; num-executors10||20&#xff0c;executor-cores1||2&#xff0c;executor-memory10||20&#xff0c;driver-memory20&#xff0c;spark.default.parallelism64 假设我们的火花队列资源如下&#xff1a; 内存1T&#xff0c;内…

视频流媒体播放器EasyPlayer.js RTSP播放器视频颜色变灰色/渲染发绿的原因分析

EasyPlayer.js RTSP播放器属于一款高效、精炼、稳定且免费的流媒体播放器&#xff0c;可支持多种流媒体协议播放&#xff0c;无须安装任何插件&#xff0c;起播快、延迟低、兼容性强&#xff0c;使用非常便捷。 EasyPlayer.js播放器不仅支持H.264与H.265视频编码格式&#xff0…

GRE数学高频难记词(个人考前重点复习版)

numerator 分子 denominator 分母 mixed number 带分数 reduce 约分 reciprocal 倒数 consecutive integer 连续整数 terminal decimal 有限小数 repeating decimal 循环小数 ones/units 个位数 origin 原点 quadrant 象限 slope 斜率 intercept 截距 rise over run 上升运动 p…

零售项目管理的核心问题:如何让协作更高效?

在零售行业&#xff0c;团队协作的效率直接影响到市场反应速度和客户满意度。商品的上下架、库存管理、促销活动的策划与执行、跨部门的沟通与协作……每一个环节都需要精准的协调。而在这些纷繁复杂的任务中&#xff0c;项目管理软件正成为零售行业的关键工具&#xff0c;帮助…

用appinventor制作艾宾浩斯遗忘曲线app

&#xff08;呕心沥血 仅供参考&#xff09; 测试效果演示 用appinventor制作课本记背应用程序&#xff08;基于遗忘曲线设计&#xff09; 目录 效果演示 项目重难点 总体设计 系统功能模块设计 总体结构如下图所示&#xff1a; 功能模块 详细设计与实现 登录界面 界…

【设计模式】行为型模式(三):责任链模式、状态模式

行为型模式&#xff08;三&#xff09;&#xff1a;责任链模式、状态模式 5.责任链模式&#xff08;Chain of Responsibility&#xff09;5.1 通俗易懂的解释5.2 具体步骤5.3 代码示例5.3.1 处理者接口5.3.2 具体处理者5.3.3 测试类5.3.4 输出 5.4 总结 6.状态模式&#xff08;…

Docker compose部署RocketMQ(单机版)

整个工具的代码都在Gitee或者Github地址内 gitee&#xff1a;solomon-parent: 这个项目主要是总结了工作上遇到的问题以及学习一些框架用于整合例如:rabbitMq、reids、Mqtt、S3协议的文件服务器、mongodb github&#xff1a;GitHub - ZeroNing/solomon-parent: 这个项目主要是…

Ubuntu20.4系统编译瑞芯微RK3568 SDK

Ubuntu20.4系统编译瑞芯微RK3568 SDK ubuntu20.4系统中编译SDK时&#xff0c;需要安装部分依赖。除了官方给出的依赖之外&#xff0c;要先安装如下依赖&#xff0c;否则会报错 sudo apt-get install libatk-bridge2.0-02.34.1-3 -y sudo apt-get install libgtk-3-dev -y完整…

CC3学习记录

&#x1f338; CC3 之前学习到的cc1和cc6都是通过Runtime进行命令执行的&#xff0c;如果Runtime被加入黑名单的话&#xff0c;整个链子也就失效了。而cc3则是通过动态类加载机制进行任意代码执行的。 &#x1f338; 版本限制 JDK版本&#xff1a;8u65 Commons-Collections…

flutter字体大小切换案例 小字体,标准字体,大字体,超大字体案例

flutter字体大小切换案例 小字体&#xff0c;标准字体&#xff0c;大字体&#xff0c;超大字体案例 Android iOS设备带有选择记录 我的flutter项目版本 environment: sdk: ‘>3.4.4 <4.0.0’ 图片案例 pubspec.yaml 添加依赖 # 屏幕尺寸适配 https://github.com/OpenF…

设计模式(四)装饰器模式与命令模式

一、装饰器模式 1、意图 动态增加功能&#xff0c;相比于继承更加灵活 2、类图 Component(VisualComponent)&#xff1a;定义一个对象接口&#xff0c;可以给这些对象动态地添加职责。ConcreteComponent(TextView)&#xff1a;定义一个对象&#xff0c;可以给这个对象添加一…

django入门【05】模型介绍(二)——字段选项

文章目录 1、null 和 blank示例说明⭐ null 和 blank 结合使用的几种情况总结&#xff1a; 2、choices**choices 在 Django 中有以下几种形式&#xff1a;**&#xff08;1&#xff09; **简单的列表或元组形式**&#xff08;2&#xff09; **字典映射形式**&#xff08;3&#…

C++清除所有输出【DEV-C++】所有编辑器通用 | 算法基础NO.1

各位小伙伴们&#xff0c;上一期的保留小数位数教学够用一辈子&#xff0c;有不错的点赞量&#xff0c;可我连一个粉丝铁粉都没有&#xff0c;你愿意做我的第一个铁粉吗&#xff1f;OK废话不多说&#xff0c;开始&#xff01; 温故与知心 可能你也学过&#xff0c;且是工作者…

Android 中的 Zygote 和 Copy-on-Write 机制详解

在 Android 系统中&#xff0c;Zygote 是一个关键的进程&#xff0c;几乎所有的应用进程都是通过它 fork&#xff08;派生&#xff09;出来的。通过 Zygote 启动新进程的方式带来了显著的性能优势&#xff0c;这得益于 fork 操作和 Linux 中的 Copy-on-Write&#xff08;COW&am…

【提高篇】3.3 GPIO(三,工作模式详解 上)

目录 一,工作模式介绍 二,输入浮空 2.1 输入浮空简介 2.2 输入浮空特点 2.3 按键检测示例 2.4 高阻态 三,输入上拉 3.1 输入上拉简介 3.2 输入上拉的特点 3.3 按键检测示例 四,输入下拉 4.1 输入下拉简介 4.2 输入下拉特点 4.3 按键检测示例 一,工作模式介绍…