Java面试经历——5/13

  • 阿里云国际版折扣https://www.yundadi.com

  • 阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

    这边主要也是记录一下整体的面试过程;
    我感觉面试官看我可能是才工作一年也就没有问的很难都是一些比较常见的
    1、自我介绍和对项目的介绍
    2、手写冒泡和归并排序
    3、询问了一些项目有关的内容
    4、抽象类和接口的关系和区别以及在开发过程中是怎么使用的

    答1、抽象类是一种抽象的类不能直接实例化只能作为其他类的父类。它可以定义抽象方法也可以包含具体方法和成员变量。
    接口是一种抽象类型也不能直接实例化只能由实现类去实现接口中的抽象方法。它只能定义抽象方法和常量不能定义具体方法和成员变量。
    2、子类只能继承一个抽象类但可以实现多个接口。
    在开发过程中我一般会优先使用接口因为它可以灵活地定义类与类之间的关系而且多个接口可以同时被一个类实现可以增强类的功能。只有当一些共性的需求需要具体实现时才会考虑使用抽象类一般工作中不怎么使用

    5、多线程实现的方式有哪几种 并将各个方式都说明一下优缺点

    5种分别是Thread, Runnable, Callable, Future和completablefutrue
    Thread, Runnable使用起来将对简单Thread和Runnable的不同就是一个是继承父类一个是实现接口
    Callable相对于Thread, Runnable可以获取线程的执行结果但是Callable一般都是搭配Future使用来获得线程执行的结果
    Future单独使用其实和使用Callable差不多只不过是将submit里面代码流程展示出来了较为复杂的代码不太建议单独使用Future
    completablefutrue是Java 8引入的功能它主要是继承了Futrue它可以让我们更轻松地处理异步操作特别是当这些操作涉及到多个阶段时。他可以实现串行执行的功能并且可以将两个任务组合到一起执行等处理更加复杂的异步场景。但是使用completablefutrue也会导致一些问题。
    1、如果 CompletableFuture 没有正确关闭或清理在多次调用多个 CompletableFuture 的情况下可能会导致内存泄漏问题
    2、使用 CompletableFuture 操作链过于复杂、深层嵌套就可能导致性能问题降低系统的吞吐量。

    6、一个线程如果调用多次start 会发生什么情况

    一个线程调用了多次 start 方法会抛出 IllegalThreadStateException 异常。因为在 Java 中每个线程只能启动一次。如果线程已经启动再次调用 start 方法会导致线程状态变为非法状态无法再次启动。

    7、讲讲线程池

    线程池的参数有
    核心线程数指线程池预先创建的线程数量用于处理正常情况下的任务。如果任务数大于核心线程数新的任务会被加入到任务队列中等待执行。
    最大线程数线程池所能容纳的最大线程数量。当任务数大于核心线程数并且任务队列已满时线程池会创建新的线程来处理任务直到达到最大线程数。
    任务队列用于存储等待执行的任务的数据结构。可选参数包括有界队列和无界队列有界队列可以限制任务的数量防止内存溢出而无界队列则不限制任务数量但可能会导致内存占用过高。
    空闲线程存活时间指一个线程在处理完任务之后空闲时间超过该参数指定的时间后会被销毁。这个参数可以避免空闲线程占用系统资源。
    线程工厂线程工厂是用于创建线程的工具可以自定义线程的名称、优先级等属性。
    拒绝策略当线程池和任务队列都已满时如何处理新的任务。拒绝策略包括丢弃、抛出异常、阻塞等方式。

    线程池的一个主要优点是降低了线程创建和销毁的频率减少了系统开销。线程池可以通过限制线程的最大数量以及任务队列的长度来避免线程过多导致的性能问题。此外线程池还可以通过灵活的调整线程数量来适应系统的负载情况从而实现系统优化和性能提升的目的。

    8、如何保证多线程高并发污染数据的情况

    1、针对于方法或者代码块进行加锁使用 synchronized 或者 Lock 来保证同一时间只有一个线程访问共享资源。
    2、使用原子类Java 提供了一些原子类如 AtomicInteger、AtomicLong 等可以保证对于单个变量的多线程访问时的线程安全性。
    3、使用常量无法更改就不会导致数据的安全性问题
    4、使用并发集合类Java 提供了一些并发集合类如 ConcurrentHashMap、ConcurrentLinkedQueue、CopyOnWriteArrayList 等通过使用这些类可以实现线程安全的数据访问。

    9、讲讲Synchronized和Lock之间的区别和相同点对于redisson有什么了解

    Synchronized和Lock就是一些基础的回答我就不写了
    redisson我就讲了一下用来进行集群加锁其他的也没背hhhh

    10、你知道设计模式吗比如我这里有个打折活动比如VIP普通用户顾客分别打不一样的折扣你会用什么设计模式讲讲原因

    策略模式然后我讲了讲自己对于策略模式的看法包括数据中台这一方面

    11、JVM原理你知道嘛有没自己调优过

    就讲了一下4个类加载器 没有自己调优

    后面不想写了。。。太累了 就这样吧
    12、讲讲pgsql和mysql之间的区别和相同点
    13、mysql中是最左原则那pgsql是吗对于pgsql有进行调优吗
    14、讲讲索引的调优什么时候会导致索引的失效
    14、项目中有使用rabbitmq如何保证消息的准确分发
    15、springboot中的几大事物针对于transactional你认为是注解式事务好还是编程式事务好
    16、看你有自己从0-1搭建过springsecurity的项目讲讲。
    17、你有什么想问的吗

  • 阿里云国际版折扣https://www.yundadi.com

  • 阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
    标签: Java