Java基础:
1:八大基本数据类型,及所占字节数?
2:讲下对面向对象的理解?
特征:封装、继承、多态; 基础:抽象
面向对象,主要就是将现实中的对象抽象成一个类,这个对象具有一定的属性和行为,面向对象的主要目的,就是为了实现程序的可扩展性和可维护性。
面向对象的特征主要是封装、继承和多态
-
封装:就是将对象的属性和行为进行处理,隐藏需要隐藏的数据,只向外界提供最简单的接口;这样做可以使程序便于使用,以及提高代码的安全性;
-
继承: 所谓继承主要就是子类继承父类,并可以对子类进行二次加工,从而提高代码的可重用性;
-
多态: 简单说多态就是 相同的对象调用同样的方法但做了不同的事情。主要的目的是实现接口的可重用性。
多态的实现主要有两种方式: (1)方法重写,实现运行时的多态。子类继承父类重写父类的方法,父类引用指向子类对象;(2)方法重载,实现编译时的多态。主要通过参数的个数和类型进行方法重载。
3:讲下集合有哪些?
4:hashmap hashtable的区别?
HashMap 和 Hashtable 在哈希表中存储键和值对。当使用 Hashtable 或 HashMap 时,我们指定一个用作键的对象和要链接到该键的值。然后对键进行哈希处理,并使用生成的哈希代码作为索引,该值存储在表中。
- HashMap 是非同步的。它不是线程安全的,如果没有适当的同步代码,就不能在多个线程之间共享,而 Hashtable 是同步的。它是线程安全的,可以与许多线程共享;
- HashMap 允许一个空键和多个空值,而 Hashtable 不允许任何空键或值。
- 如果不需要线程同步,HashMap 通常优于 HashTable
5:讲下throwable?
Java通过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子类的实例;
- Throwable: 有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。
- Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。
-
大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,Java虚拟机运行错误(Virtual MachineError),当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。
-
这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,如Java虚拟机运行错误(Virtual MachineError)、类定义错误(NoClassDefFoundError)等。
-
这些错误是不可查的,因为它们在应用程序的控制和处理能力之 外,而且绝大多数是程序运行时不允许出现的状况。对于设计合理的应用程序来说,即使确实发生了错误,本质上也不应该试图去处理它所引起的异常状况。在 Java中,错误通过Error的子类描
-
-
Exception(异常):是程序本身可以处理的异常。
Exception 类有一个重要的子类 RuntimeException。RuntimeException 类及其子类表示“JVM 常用操作”引发的错误。例如,若试图使用空值对象引用、除数为零或数组越界,则分别引发运行时异常(NullPointerException、ArithmeticException)和 ArrayIndexOutOfBoundException。
注意:异常和错误的区别:异常能被程序本身可以处理,错误是无法处理。
-
深入可以参考:Java-异常Throwable,Exception,Error - 243573295 - 博客园
6:进程和线程的区别?wait 和sleep的区别?
- 进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发; 线程是进程的子任务,是CPU调度和分派的基本单位,用于保证程序的实时性,实现进程内部的并发;线程是操作系统可识别的最小执行和调度单位。 每个线程都独自占用一个虚拟处理器:独自的寄存器组,指令计数器和处理器状态。
- sleep、wait调用后都会暂停当前线程并让出CPU的执行时间,但不同的是sleep不会释放当前持有对象的锁资源,到时间后会继续执行,而wait会释放所有的锁并需要notify/notifyAll后重新获取到对象资源后才能继续执行。
7:string stringbuild stringbuffer的区别,优缺点,何时使用?
- 实际上,StringBuilder 和StringBuffer 功能基本相似,方法也差不多。 不同的是,StringBuffer 是线程安全的,而StringBuilder 则没有实现线程安全功能,所以性能略高。 因此在通常情况下,如果需要创建一个内容可变的字符串对象,则应该优先考虑使用StringBuilder 类。
8:concurrenthashmap的实现原理?
Java集合篇:HashMap 与 ConcurrentHashMap 原理总结_张维鹏的博客-CSDN博客_hashmap swap
数据库:
9:sql优化?
10:数据量超级大的情况,如何处理?
11:b+树的作用是什么?
12:存储过程?读写分离?
13:sql执行顺序?
Mybatis:
14:一级二级缓存命中规则?
15:插入一条数据,如何返回id?
16:如何批量插入、更新、删除?
17:如何分页?
Spring:
18:讲下Ioc aop?
19:spring的生命周期?
20:过滤器拦截器的区别及使用场景?
21:springmvc的工作原理?
22:讲下joinpoint cutpoint?
23:讲下aop工作中的使用场景?
24:spring如何切换单例模式?
SpringCloud:
25:base理论?
26:你使用的是什么注册中心,cp与ap支持哪一种?
27:nacos的配置文件存在什么位置?
28:微服务升级相应的微服务模块是否会服务停止?
多线程:
29:volatile 和 sychornized的区别?
30:线程如何通信?
31:常用的线程池有哪些?讲下常用的参数?
其他:
32:常用的集合,以及它们底层原理
33:Cap 原则base 理论