面试题day15

转转

2021.8.31日 技术一面(约50min)

  • 自我介绍

  • 介绍一下项目?

  • Spring的两个核心。说一下

    ioc 控制反转,将创建对象权利交给ioc容器

    aop 面向切面编程 扩展性高 常见于日志

  • AOP主要用到的Java的哪些技术呢?

    动态代理,jdk动态代理/cglib

  • MySQL的索引有哪些了解?

    主键索引、非主键索引、唯一索引

  • 主键索引和普通索引有什么区别?

    innodb 主键索引叶子结点的数据、非主键索引叶子结点为主键id

    myisam 主键索引唯一、非主键索引不唯一

  • 事务的隔离级别有哪些?

    ru rc rr s

  • 不同的隔离级别解决了哪些问题?

    rc 脏读 rr 不可重复读 s 幻读

  • 可重复读有没有解决这个幻读的问题?

    innodb 解决

  • 可重复读如何解决不可重复读的一个问题?

    mvcc

  • ACID四个特性有了解过吗?

    原子性、持久性、隔离性、一致性

  • 怎么保证这ACID四个特性?

    undo log、redo log、mvcc+锁

  • MVCC有没有起到作用?

  • 介绍一下集合

    list set map

  • HashMap是线程安全的还是线程不安全的?

    线程不安全

  • HashMap线程不安全会出现什么问题?

    死循环、put覆盖

  • 有没有了解过线程安全的HashMap?

    ConcurrentHashMap和hashtable

  • ConcurrentHashMap怎么保证线程安全?

    1.7 segment+reentrantLock entry

    1.8 cas+synchronized node

  • 有没有实际用过多线程的东西?

    文件上传

  • 线程的创建有哪几种方式?

    Thread类、Runable接口、Callable接口

  • Thread类和Runable接口的最大区别是什么?

    单继承、多实现

  • 线程池最核心的是哪些?

    核心线程数、最大线程数、阻塞队列、存活时间、时间单位、拒绝策略、线程工厂

  • 线程池的执行顺序是怎么样的呢?

    核心线程数->阻塞队列->最大线程数->拒绝策略

  • 运行的时候,核心线程数能不能修改?

    可以修改,setCorePoolSize(),在运行期线程池使用方调用此方法设置 corePoolSize 之后,线程池会直接覆盖原来的 corePoolSize 值,并且基于当前值和原始值的比较结果采取不同的处理策略。

  • JVM的内存结构?

    堆、方法区 虚拟机栈、本地方法栈、程序计数器 直接内存

  • 对象在哪个区?

  • Class文件在哪个地方存?

    方法区

  • 垃圾回收会发生在哪几个区域?

    堆、方法区、栈(线程执行完毕)

  • OOM会发生在哪个区域?

    堆 创建太多对象 jmap -XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath

    栈 递归 jstack headdumpon

  • 虚拟机栈会不会溢出?

  • GC算法有没有了解过?

    分代、清除、复制、压缩

  • 怎么确定一个对象是垃圾?

    引用计数法、可达性分析

  • 哪些对象可以做为CG Root?

    虚拟机栈、本地方法栈、静态变量、常量

  • Java有哪些锁?

    公平锁、非公平锁

    乐观锁、悲观锁

    自旋锁、偏向锁、轻量级锁、重量级锁

  • 有没有除了Synchronize和ReentrantLock之外还有没有可以上锁的?

    cas、volatile

  • volatile怎么理解?

    保证原子性、禁止指令重排

  • 类加载器有哪些?

    启动类加载器、扩展类加载器、应用程序加载器、自定义加载器

  • 双亲委派模型。

    类加载器接收到类加载请求,向上传递父类加载器尝试加载,层层递归,失败后才会由自身加载

  • 怎么打破双亲委派模型?

    • https://www.jianshu.com/p/9b2d43c9a09a
    • tomcat之所以造了一堆自己的classloader,大致是出于下面三类目的:
      • 一个web容器可能需要部署两个应用程序,不同的应用程序可能会依赖同一个第三方类库的不同版本,不能要求同一个类库在同一个服务器只有一份,因此要保证每个应用程序的类库都是独立的,保证相互隔离。
      • web容器也有自己依赖的类库,不能于应用程序的类库混淆。基于安全考虑,应该让容器的类库和程序的类库隔离开来。
      • web容器要支持jsp的热部署。
  • 类加载的过程,Class文件

    加载 验证 准备 解析 初始化

  • 有没有自己使用过算法。

  • 有哪些排序?

  • 快排的原理。时间复杂度,最坏情况。

    快速排序实现的重点在于数组的拆分,通常我们将数组的第一个元素定义为比较元素,然后将数组中小于比较元素的数放到左边,将大于比较元素的放到右边,这样我们就将数组拆分成了左右两部分:小于比较元素的数组;大于比较元素的数组。我们再对这两个数组进行同样的拆分,直到拆分到不能再拆分,数组就自然而然地以升序排列了。

    • 最坏情况就是每一次取到的元素就是数组中最小/最大的,这种情况其实就是冒泡排序,时间复杂度O(n2)
    • 平均时间复杂度为O(nlog2n)
  • TCP连接和断开。

  • 三次握手过程

    syn x

    ack x+1 syn y

    ack y+1

  • TCP连接CloseWait和TimeWait状态

    对方主动关闭连接或者网络异常导致连接中断,这时我方的状态会变成CLOSE_WAIT,此时我方要调用close()来使得连接正确关闭。

    我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAIT。TCP协议规定TIME_WAIT状态会一直持续2MSL(即两倍的分段最大生存期),以此来确保旧的连接状态不会对新连接产生影响。

    img

  • 网络的拥塞控制有没有了解过?

    慢开始、快重传、拥塞避免、快恢复

    img

  • 输入一个网址的调用流程。

    缓存 dns ip tcp https

  • 有没有了解过HTTPS

    非对称通信加密对称通信密钥

  • HTTPS的加密算法是哪些?

    非对称通信 rsa

    对称通信 aes

  • 你感觉你比较擅长哪方面?

  • 有没有刷过题?

  • 你觉得动态规划的关键是什么?

转转

021.9.2日 二面(约35min)

  • 自我介绍

  • 介绍一下项目

  • 数据库索引

    b+树

  • 单核情况下,多线程为什么会比单线程的情况下去使用情况会更好?

    多线程技术使程序的响应速度更快,因为用户界面可以在进行其他工作的同时一直处于活动状态。

    适合io大的情况

  • TCP协议了解吗?

  • HTTP长连接还是短连接?

    长连接 keep-alive

    http长连接

    tcp长连接

  • 服务端主动发起关闭还是客户端主动发起关闭TCP?

    客户端

  • 心跳机制说一下?

    检测存活

  • 单例模式说一下。

    私有属性、私有构造、公开get方法

    懒汉 调用方法创建对象

    饿汉 创建类创建对象

  • 线程安全的单例模式是怎么样的?

    双重校验锁

  • 那为什么要使用volatile呢?

    防止指令重排

  • 为什么要使用双段锁呢?

    加锁前判断,提高性能,避免不必要的加锁

    加锁后判断,防止多次创建可能多个线程进入if条件,创建实例前不加判断的话,会线程安全的创建两个实例

  • 算法题:8个人乒乓球比赛,A赢B,B赢C,可以默认A赢C。那么最少比赛多少次可以获得冠亚季军

  • 你怎么学习技术?

  • 你觉得什么最重要?

  • 你在团队开发的项目里面学到了什么?

posted @ 2022-07-26 22:38  Faetbwac  阅读(17)  评论(0编辑  收藏  举报