2023-03-28晚上7点面试总结

61 阅读2分钟

1.了解过SQL注入么?${}和#{}说一下?

  • ${}是 Properties 文件中的变量占位符,它可以用于标签属性值和 sql 内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc. Driver
  • #{}是 sql 的参数占位符,MyBatis 会将 sql 中的#{}替换为? 号,在 sql 执行前会使用 PreparedStatement 的参数设置方法,按序给 sql 的? 号占位符设置参数值,比如 ps.setInt(0, parameterValue),#{item.name} 的取值方式为使用反射从参数对象中获取 item 对象的 name 属性值,相当于 param.getItem().getName()

2.HashMap的扩容原理?

3.怎么创建线程池?

4.Sort Set如何做排行榜?流程?

5.Mysql事务说一下?

6.RocketMq主要用来干嘛?

7.ComplatebleFuture说一下?

  • CompletableFuture是Java 8中的一个异步编程工具,可以用于执行异步任务并在任务完成后执行其他操作,它提供了丰富的API和函数式编程风格。

  • 线程池是用于管理和重复利用线程的一种机制。它允许将任务提交到线程池中,并在可用线程中执行这些任务,从而避免了频繁创建和销毁线程的开销。

  • 虽然CompletableFuture和线程池都可以用于异步编程,但它们的目的和使用方式有所不同。CompletableFuture更加注重任务执行完成后的操作,例如等待、合并或转换任务结果,而线程池更加注重任务的执行本身,通过重复利用线程提高程序的性能表现。

8.ES分词器分错了怎么办?比如:中国你好,分成了中,国你好怎么处理?

  1. 在Elasticsearch服务器上创建一个插件目录,例如 /usr/share/elasticsearch/plugins/my_plugin
  2. 创建一个包含自定义词典的文件 my_dict.txt,将需要自定义的单词添加到该文件中。例如,我们可以在该文件中添加如下内容:我爱

3.创建一个Java类 MyTokenizerFactory.java,用于实现自定义分词规则逻辑。该类继承了 IKTokenizerFactory 类,并覆盖了其中的 create 方法

public class MyTokenizerFactory extends AbstractTokenizerFactory 

9.ThreadLocal的key为什么设置成软引用?VALUE为什么不设置成软引用?

  • ThreadLocal的key被设置为软引用是为了避免在没有手动删除ThreadLocal变量的情况下,这些变量将无法被垃圾收集器回收,从而可能导致内存泄漏。

  • ThreadLocal中每个线程持有的变量副本对应的值不适合被设置成软引用。因为如果值被设置为软引用,则会更容易导致该值被过早地回收,从而影响程序正确性。因为当线程需要访问这些变量时,如果这些变量已经被回收,那么就会获取到null值,从而导致程序出现错误,所以ThreadLocal中的值被设置为强引用。