笔试题总结(2)

博客主页:hyhWTX的博客主页

欢迎关注🖱点赞🎀收藏⭐留言✒

本文由hyhWTX原创,csdn首发!

系列专栏:面试题解

🀄如果觉得博主的文章还不错的话,请三连支持一下博主哦

题目十

Java中如何判断字符串为空?

解析过程

有以下几种方法可以判断一个字符串是否为空:

  1. 使用String的isEmpty()方法:
String str = "";
if(str.isEmpty()){
    System.out.println("字符串为空");
}
  1. 使用String的length()方法:
String str = "";
if(str.length() == 0){
    System.out.println("字符串为空");
}
  1. 使用String的trim()方法去除空格后判断是否为空:
String str = "   ";
if(str.trim().equals("")){
    System.out.println("字符串为空");
}

注意:以上方法都只能判断是否为空字符串,如果字符串为null,需要先判断是否为null再判断是否为空。例如:

String str = null;
if(str == null || str.isEmpty()){
    System.out.println("字符串为空");
}

题目十一

String中的方法有哪些?

解析过程

String类中常用的方法有:

  1. char charAt(int index):返回指定索引处的字符。

  2. int length():返回字符串的长度。

  3. String substring(int beginIndex):返回从指定索引开始到字符串结尾的子字符串。

  4. String substring(int beginIndex, int endIndex):返回从指定的开始索引到结束索引之间的子字符串。

  5. boolean equals(Object anObject):比较字符串是否相等。

  6. boolean equalsIgnoreCase(String anotherString):比较字符串是否相等,忽略大小写。

  7. int compareTo(String anotherString):比较两个字符串的大小。

  8. int indexOf(int ch):返回指定字符第一次出现的位置。

  9. int indexOf(int ch, int fromIndex):返回指定字符在指定位置后第一次出现的位置。

  10. int indexOf(String str):返回指定字符串第一次出现的位置。

  11. int indexOf(String str, int fromIndex):返回指定字符串在指定位置后第一次出现的位置。

  12. int lastIndexOf(int ch):返回指定字符最后一次出现的位置。

  13. int lastIndexOf(int ch, int fromIndex):返回指定字符在指定位置前最后一次出现的位置。

  14. int lastIndexOf(String str):返回指定字符串最后一次出现的位置。

  15. int lastIndexOf(String str, int fromIndex):返回指定字符串在指定位置前最后一次出现的位置。

  16. String replace(char oldChar, char newChar):将字符串中的指定字符替换为新的字符。

  17. String replace(CharSequence target, CharSequence replacement):将字符串中的指定子字符串替换为新的字符串。

  18. String[] split(String regex):将字符串按照指定的正则表达式分割为字符串数组。

  19. String[] split(String regex, int limit):将字符串按照指定的正则表达式分割为字符串数组,限制分割的次数。

  20. boolean startsWith(String prefix):判断字符串是否以指定的前缀开始。

  21. boolean endsWith(String suffix):判断字符串是否以指定的后缀结束。

  22. String toLowerCase():将字符串转换为小写。

  23. String toUpperCase():将字符串转换为大写。

  24. String trim():去除字符串两端的空格。

  25. static String valueOf(char[] data):将字符数组转换为字符串。

  26. static String valueOf(char[] data, int offset, int count):将字符数组中指定范围内的字符转换为字符串。

  27. static String valueOf(Object obj):将对象转换为字符串。

  28. static String valueOf(boolean b):将boolean类型的值转换为字符串。

  29. static String valueOf(char c):将char类型的值转换为字符串。

  30. static String valueOf(int i):将int类型的值转换为字符串。

  31. static String valueOf(long l):将long类型的值转换为字符串。

  32. static String valueOf(float f):将float类型的值转换为字符串。

  33. static String valueOf(double d):将double类型的值转换为字符串。

题目十二

给出以下:String s = “123,456,789”,以逗号为间隔截取,使用什么方法?获得的数据类型是什么?如果要在截取出来的数据片段中获得想要的数据

解析

可以使用split方法将字符串按照逗号分割成一个字符串数组,如下所示:

String[] arr = s.split(“,”);

获得的数据类型是字符串数组(String[])。

如果要在截取出来的数据片段中获得想要的数据,可以使用数组下标访问每个数据片段,如下所示:

String first = arr[0]; // 获得第一个数据片段
String second = arr[1]; // 获得第二个数据片段
String third = arr[2]; // 获得第三个数据片段

然后可以使用类型转换方法将字符串转换为目标数据类型,如下所示:

int num1 = Integer.parseInt(first); // 将第一个数据片段转换为整数
int num2 = Integer.parseInt(second); // 将第二个数据片段转换为整数
int num3 = Integer.parseInt(third); // 将第三个数据片段转换为整数

获得想要的数据后,可以进行进一步的处理或使用。

题目十三

String s1 = "aBc"和String s2 = "aBC"进行值比较,是怎么进行比较的,在考虑忽略大小写进行值比较?

解析

在进行字符串比较时,可以使用equals方法进行值比较。该方法会比较两个字符串的每个字符是否都相同,如果相同则返回true,否则返回false。如下所示:

boolean isEqual = s1.equals(s2);

在进行忽略大小写的字符串比较时,可以使用equalsIgnoreCase方法。该方法会将两个字符串转换为小写字母后进行比较,如果相同则返回true,否则返回false。如下所示:

boolean isEqualIgnoreCase = s1.equalsIgnoreCase(s2);

因此,如果要进行忽略大小写的字符串比较,可以使用equalsIgnoreCase方法,否则使用equals方法即可。

题目十四

如何遍历一个list集合?

解析

遍历List集合可以使用以下方式:

1.使用for循环进行遍历

可以使用for循环遍历List集合,如下所示:

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");

for(int i = 0; i < list.size(); i++) {
    String s = list.get(i);
    System.out.println(s);
}

2.使用foreach循环进行遍历

可以使用foreach循环遍历List集合,如下所示:

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");

for(String s : list) {
    System.out.println(s);
}

在以上两种方式中,使用foreach循环可以简化代码,但是无法获取当前遍历的元素在List中的下标。如果需要获取下标,可以使用for循环进行遍历。

3.Java中遍历List集合可以使用迭代器。迭代器是一种设计模式,它提供了一种访问聚合对象中各个元素的方式,而不需要暴露其内部实现。List集合的迭代器可以通过List的iterator()方法获得。示例代码如下:

List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");

// 使用迭代器遍历List集合
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String item = iterator.next();
    System.out.println(item);
}

在上面的示例代码中,通过list.iterator()方法获得List集合的迭代器,然后使用while循环和iterator.hasNext()方法判断是否还有下一个元素,如果有就使用iterator.next()方法获取下一个元素。注意,使用迭代器遍历List集合时可以使用remove()方法删除元素,但是不能使用add()或者set()方法修改元素。

题目十五

在服务器上部署jar打包方式的Java项目,防止独占命令窗口采用的解决方法

解析

在服务器上部署Jar打包方式的Java项目时,如果直接在命令行窗口中运行Jar包,会导致命令行窗口被独占,无法使用其他命令行命令。为了解决这个问题,可以使用以下两种方法:

  1. 使用nohup命令

nohup是Linux/Unix系统中的一个命令,它可以在后台运行命令,并且将命令的所有输出都重定向到一个文件中,从而使命令不会被终止。使用nohup命令运行Java程序的命令如下:

nohup java -jar yourProject.jar > console.log &

其中,yourProject.jar是你的Java项目的Jar包文件名,console.log是重定向输出的日志文件名。这个命令会在后台启动Java程序,并将所有输出写入console.log文件中。运行完命令后,可以使用ps -ef | grep java命令查看Java进程是否在运行。

  1. 使用screen命令

screen是Linux/Unix系统中的一个命令,它可以创建一个虚拟终端,使得用户可以在其中运行命令,并且在需要时可以轻松地切换到其他虚拟终端。使用screen命令运行Java程序的命令如下:

screen -S yourScreenName java -jar yourProject.jar

其中,yourScreenName是你给这个虚拟终端起的名字,yourProject.jar是你的Java项目的Jar包文件名。这个命令会在一个新的虚拟终端中启动Java程序,并且将控制权交给这个虚拟终端。当需要切换到其他虚拟终端时,可以使用Ctrl+a+d组合键将控制权还给原来的终端。如果需要重新进入这个虚拟终端,可以使用screen -r yourScreenName命令。

题目十六

map中添加键值对的方法,如何获取key,如何获取value?

解析

在Java语言中,Map是一种存储键值对的数据结构。常用的Map实现类有HashMap、TreeMap、LinkedHashMap等。

要添加键值对到Map中,可以使用put方法,例如:

Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);

要获取Map中的key,可以使用keySet方法,例如:

Set<String> keys = map.keySet();

要获取Map中的value,可以使用values方法,例如:

Collection<Integer> values = map.values();

另外,也可以使用entrySet方法获取Map中的键值对Entry,然后再通过Entry获取key和value,例如:

Set<Map.Entry<String, Integer>> entries = map.entrySet();
for (Map.Entry<String, Integer> entry : entries) {
    String key = entry.getKey();
    Integer value = entry.getValue();
}

题目十七

Java中写一个异步执行方法?

解析

在Java中,可以使用多线程来实现异步执行方法。下面是一个使用线程池实现异步执行的示例代码:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class AsyncExecutor {
    private static ExecutorService executorService = Executors.newFixedThreadPool(10);

    public static void execute(Runnable task) {
        executorService.execute(task);
    }
}

在上面的代码中,我们使用了Java中的ExecutorService和Executors来创建一个线程池,然后使用execute方法来提交异步任务。这个异步执行方法可以在任何需要异步执行的地方调用,例如:

AsyncExecutor.execute(() -> {
    // 异步执行的代码
});

需要注意的是,异步执行的代码必须是线程安全的,不然可能会出现线程安全问题。

题目十八

多线程执行下的任务放在单线程条件下会出现的问题?

解析

在多线程执行下的任务放在单线程条件下会出现以下问题:

  1. 竞态条件:在多线程环境下,多个线程可能同时访问和修改同一个共享资源,导致竞态条件的出现。在单线程条件下,这些问题可能不会出现,因为只有一个线程在访问和修改共享资源。

  2. 死锁:在多线程环境下,由于线程之间的相互等待,可能会出现死锁的情况。在单线程条件下,这些问题可能不会出现,因为只有一个线程在执行,不会出现相互等待的情况。

  3. 性能问题:在多线程环境下,线程之间的切换和同步会带来一定的性能开销。在单线程条件下,这些问题可能不会出现,因为只有一个线程在执行,不需要进行线程切换和同步。

  4. 线程安全问题:在多线程环境下,由于多个线程同时访问和修改同一个共享资源,可能会导致线程安全问题的出现。在单线程条件下,这些问题可能不会出现,因为只有一个线程在访问和修改共享资源,不存在线程安全问题。

因此,在将多线程执行下的任务放在单线程条件下时,需要注意上述问题的可能出现,并进行相应的处理。

题目十九

SpringBoot项目中常用注解,SpringBoot项目中的核心注解,解释核心注解的作用

解析

SpringBoot项目中常用注解有很多,其中一些核心注解包括:

  1. @SpringBootApplication:这是一个组合注解,包括了@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan三个注解。它的作用是标识一个SpringBoot应用程序的主要配置类,同时启用自动配置和组件扫描。

  2. @RestController:这个注解用于标识一个类是SpringMVC的控制器,并且其中的方法都是用于处理HTTP请求的。它还包括了@ResponseBody注解,用于将方法的返回值转换为JSON格式的响应。

  3. @RequestMapping:这个注解用于映射HTTP请求的URL路径。它可以用在类级别和方法级别,用于定义请求的URL路径和HTTP方法。

  4. @Autowired:这个注解用于自动装配Spring容器中的Bean。它可以用在构造方法、Setter方法和字段上,用于将需要的Bean注入到当前类中。

  5. @Value:这个注解用于将配置文件中的值注入到类中的字段或方法参数中。它可以用于读取配置文件中的属性值、环境变量、命令行参数等。

  6. @Component:这个注解用于标识一个类是Spring容器中的组件。它可以用在任何类上,用于将类注册到Spring容器中。

以上这些注解是SpringBoot项目中比较常用的核心注解。它们的作用分别是:标识应用程序的主要配置类、定义控制器和请求路径、自动装配Bean、读取配置文件中的值、将类注册到Spring容器中等。这些注解的使用可以大大简化开发工作,提高开发效率。

核心注解解析:

SpringBoot项目中的核心注解是@SpringBootApplication。它是一个组合注解,包括了@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan三个注解。

  1. @SpringBootConfiguration:这个注解用于标识一个类是SpringBoot应用程序的配置类。它通常用于定义应用程序的Bean、配置数据源、启用事务管理等。

  2. @EnableAutoConfiguration:这个注解用于启用SpringBoot的自动配置机制。它会根据classpath中的依赖,自动配置应用程序所需的Bean和配置。

  3. @ComponentScan:这个注解用于扫描指定的包,自动注册所有被标记为@Component、@Service、@Repository和@Controller等注解的类到Spring容器中。

@SpringBootApplication注解的作用是标识SpringBoot应用程序的主要配置类,同时启用自动配置和组件扫描。它简化了SpringBoot应用程序的配置过程,使开发者不必手动配置很多东西,从而提高了开发效率。

题目二十

泛型是什么?为什么要使用它?使用泛型的好处是什么?

解析

泛型是一种编程语言的特性,允许在编译时期指定数据类型参数,使代码更加灵活和通用化。

使用泛型可以让代码更加安全、可读和可维护。泛型可以帮助我们避免一些类型转换错误,减少代码重复和冗余。使用泛型可以使代码更加通用,可以适用于不同的数据类型,提高代码的可重用性和可扩展性。

泛型的好处包括:

  1. 类型安全:泛型可以在编译时期检查类型的正确性,避免了运行时期的类型转换错误。

  2. 代码重用:泛型可以使代码更加通用,可以适用于不同的数据类型,提高代码的可重用性和可扩展性。

  3. 可读性:泛型可以使代码更加清晰和易于理解,可以避免一些类型转换和强制类型声明。

  4. 性能优化:泛型可以避免一些不必要的类型转换和装箱操作,可以提高程序的性能。

总之,泛型是一种非常有用的编程特性,可以帮助我们编写更加安全、灵活、通用和高效的代码。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值