java面试问题简单汇总

java基础

深拷贝浅拷贝

public和private是在运行时进行验证还是在编译时就进行验证。

加密算法(非对称,对称,MD5)

java中集合的层次

java中堆和栈的区别是什么

HashMap、Hashtable、ConcurrentHashMap的区别

(hasnmap)角度:数据结构+扩容情况+put查找的详细过程+哈希函数+容量为什么始终都是2^N+JDK1.7与JDK1.8的区别。

JDK1.8的新特性?

HashMap如何实现线程安全?ConcurrentHashMap的底层实现?JDK1.7与JDK1.8的区别

hashMap为什么不是线程安全的?怎么实现安全线程为什么不是线程安全的

原子类底层机制(cas, Unsafe)以及快排实现方式

CAS原理,如果比较不相等会怎么样,自旋锁为什么要不断重试,CAS性能什么时候比锁差

1)原理: CAS是比较值,如果值相等则变换,不相等只返回当前值,多线程下会自旋竞争
2)这个我也不大会,感觉是因为用到CAS自旋,默认是乐观情况,几乎不存在竞争,不断重试等待保持者释放锁就立刻竞争?
3)单核CPU?

对BigDecimal的理解?

主要是在涉及到金融交易项目中浮点运算丢失精度的问题,通过对构造器的参数为String类型进行算术运算相关API的调用。通过API提供的对象方法进行传统的加减乘除算术运算……

抽象类和接口的区别,你倾向用哪个?什么场景下用抽象类

怎么实现自定义注解

一致性hash算法

什么是分布式session

Javaconfig @applicationProperties 获取前缀的值注解

Java集合hashtable和concurrenthashmap的区别

Nio有哪些类

举例常用的字节流

创建字节流后,关闭有几种方式

ArrayList和LinkedList的区别和底层实现?如何实现线程安全?

ArrayList是有序的吗

Set集合的底层实现

面向对象特性介绍,面向对象编程的五大原则,类能否多继承?子类继承父类,会继承父类的所有属性吗?

查Java进程的命令,查文件中关键字向下500行的命令

java 中数组和链表的区别,各自优势

知道对称加密和非对称加密的区别和应用场景吗?

多态实现原理

泛型以及泛型擦除。List类型的list,可以加入无继承关系的B类型对象吗?如何加入?

反射原理以及使用场景

ThreadLocal原理,如何使用?

static关键字和final关键字使用情况,一个类不能被继承,除了final关键字之外,还有什么方法(从构造函数考虑)?
序列化和反序列化。反序列化失败的场景。
List遍历时如何删除元素?fail—fast是什么?fail—safe是什么?
正则表达式会写吗?

解决hash冲突的其他方法

什么静态代理和动态代理? 它们的优缺点?你自己实现的动态代理是怎么写的

静态***类对真实业务类的功能进行扩充,即创建一个***类实现和真实类方法相同的功能,让***类持有真实对象,然后通过调用***类的方法达到对真实业务逻辑的升级。缺点就是:如果真实对象中有多个业务逻辑方法(或者有多个真实对象实例),那***对象同样需要调用多个逻辑方法和对象,造成***类的膨胀。动态***是通过在运行时,动态生成一个持有RealObject、并实现***接口的Proxy,同时注入相同的逻辑。……

java的编码方式

你一般如何抛出异常,在什么情况下使用什么抛出异常,你知道的异常的种类

java的io模型有哪些

Final修饰变量

Final还有啥使用场景

Final static一起使用有啥作用

object类的equals()方法和clone()方法是做什么的,以及应用场景,什么时候需要equals和hashcode保持一致


JVM

什么时候需要自定义类加载器?

做题:手写一个对象池

Jdk中rt目录下的类是哪个加载器加载的

如何动态加载类

tomcat的类加载机制

volatile作用?底层实现?禁止重排序的场景?单例模式中volatile的作用?

JVM性能调优,常用命令,以及工具

平时用线程是直接new还是用线程池进行管理的?Jdk常用的线程池介绍一下?

缓冲线程池的存储结构,有上限吗

内存泄漏和内存溢出的区别

内存泄漏常发生在jvm的哪?Java 内存泄漏如何定位,命令

ReadWriteLock与ReentrantReadWriteLock的理解和区别?

接口实现的关系。ReadWriteLock读锁(多个线程可以共同读)和写锁(只有一个线程写),对应的readLock()和writeLock()用于读取操作和写入操作的锁……。ReentrantReadWriteLock结合了ReentrantLock和ReadWriteLock的实现,其构造方法的重载决定了其公平或非公平的模式默认是非公平(即没有参数)可能导致多个读写线程的推迟,而公平模式可以兼顾到等待时间将长的写线程获取到锁……。

ReenTrantLock使用方法?底层实现?和synchronized区别?

你还了解ReentrantReadWriteLock哪些特性?

重入特性,允许读写重新获取读取锁或写入锁。在写入线程保持的所有写入锁都被释放后,才允许重入读线程使用。锁降级,允许写锁降级为读锁,通过先获取写入锁,然后获取读取锁,最后释放写入锁,反之是不允许的。锁获取的中断,读取锁和写入锁都支持获取期间的中断。

Full GC触发条件

频繁的full gc有什么问题?怎么排查?

答:系统性能变低。一般full gc不会频繁执行,如果出现了就要去查看一下是不是创建了大的对象或者空间分配担保失败。调大参数。

说一说进程所占的虚拟内存和物理内存是什么样的

jvm进程所占的虚拟内存和物理内存相差比较大是什么情况(物理内存不足)?

jvm进程所占用的虚存大于了虚拟机的堆栈设置参数,为什么不报错(可能是元空间的关系)?

推测答案:堆栈参数设置是堆栈的临界值,但是jvm进程占用虚拟内存的大小包括的范围不止堆栈,还有元空间,元空间实际占用的是本机内存,不会受到堆栈参数限制,如果虚拟内存过大是元空间造成的(且没有超过元空间的限制)而不是堆内存过大造成的,就可能导致虚拟内存大于堆栈参数但是进程并不报错。欢迎有更好的答案指点一下

你所了解的IO模型?

-最好是画个草图来阐述。阻塞式IO:当用户进程对服务请求时,服务器在返回数据的过程中,用户线程阻塞在调用处,直到数据返回才继续执行。非阻塞式IO:当用户请求数据时会立即得到一个回复,即使数据报还没准备好,不会阻塞用户线程的其他执行操作。异步IO:用户发出请求后会立即得到一个请求,不阻塞用户的其他执行,当数据准备好后会通知用户。

你是如何理解同步/异步,并发/并行的概念的?

-同步就是调用者必须等到方法调用返回后,才能继续后续的行为,异步调用会立即返回,调用者可以继续后续的操作,因为真正的执行不会影响阻塞调用者。并发,多个任务交替执行,但每次只有一个任务在执行。并行是真正的同时执行……

如何理解锁的概念,列举出几个锁来说明它?

-------------手写伪代码来说明……

怎么避免产生浮动垃圾?

CPU 总是 100%,怎么定位问题,并且解决

CPU 时而 100%,内存经常 100%,怎么定位问题,并且解决
查看一个线程的信息

堆的原理和分代了解吗?

------年轻代(Eden,Suvivor1,Suvivor2),年老代……阐述下对象的生命周期随着GC而从不同的年龄代区域进行迁移……任何一个空间不够用的时候都会促使JVM进行GC。

GC过程中对应用有什么影响

Eden区垃圾回收用什么算法?为什么用这个算法?

谈谈你对上面GC中回收对象中提出的对象有什么理解?回收那些对象,需要怎么分辨?

----------(一坑套一坑,环环都是坑)对象在内存中的存储布局,对象头、实例数据、对齐填充(按理说这个不是我们业务开发员所关注的定义,都是翻译老外的一些术语),主要还是对象的生命周期导致GC回收,也就是判读对象是否存活。引用计数算法是根据对象的引用来给计数器增减1,当计数器为0的对象即被回收,但很难解决对象之间的相互引用;根搜索算法,GCROOT作为对象起始点,向下搜索,搜索的路线为引用链,如果有些对象不再引用链触及点,那就判断为失效对象。

cpu时间如何优化

jdk1.8用的是哪个垃圾回收器?

并发编程

线程池类型进程的几种状态

哪些是线程私有的;

get需要加锁么,为什么?

jvm线程和操作系统线程之间的区别和联系

wait,notify阻塞唤醒确切过程?在哪阻塞,在哪唤醒?为什么要出现在同步代码块中,为什么要处于while循环中?

Execuors类实现的几种线程池类型,阿里为啥不让用?

谈谈你对AbstractQueuedSynchronizer的理解?基于AQS实现的lock, CountDownLatch、CyclicBarrier、Semaphore介绍

--------常见的AQS术语,juc中locks包下面的一个类。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待唤醒锁机制将暂时获取不到锁的线程加入到队列中。如果共享资源空闲,则将当前请求资源的线程设置为工作线程并且锁定共享资源……其实还有很多,个人也对其用法不太熟悉,只知道个大概……有时间再查资料吧

线程池构造函数7大参数,线程处理任务过程,线程拒绝策略

线程池类型在什么地方会发生OOM?分析OOM发生的原因?

线程池类型让你自己实现OOM,你会怎么做?

java线程你怎么使用

进程线程区别,线程安全和非线程安全区别

线程池类型你自己定义的类能被最顶级的类加载器加载吗?为什么?

线程池类型自定义的类会被什么类加载器加载?

线程池类型如何加载一个不在根目录下的类?

Runnable和callable区别

启动线程的三个方法,它们之间的区别

如何保证线程安全?

线程池,你怎么创建线程池

八大参数说了一遍,具体讲了自己对最大线程数和阻塞队列这两个参数的理解,如果设置的是无界队列,那么最大线程数这个参数就没什么意义了 . 又说了下线程池的具体工作流程vol

如果线程池和队列都满了,继续添加任务呢

会触发拒绝策略,拒绝策略其实就是一个接口,这个接口有个方法,会传进来两个参数,一个是线程池本身另一个是继续添加的任务,你想怎么处理这个任务都行,比如直接抛弃报异常,或者是让当前线程去执行这个任务.....

CyclicBarrier的理解?

-翻译过来就是循环栅栏。JUC包下的类,其构造方法就是一组线程在达到栅栏的某个状态后就执行一定数量的线程。该类型的对象await()方法是是挂起作用,其重载方法可以指定挂起到一定的时间……

线程池的理解?线程池大小如何设置?

高并发的大型项目中如果每个请求都去创建线程,那么线程的创建、销毁、上下文切换等操作都会造成资源的损耗。所以需要一个专门管理线程的类,这个类负责安排空闲的线程运行任务

手写简单的线程池,体现线程复用

高并发情况下的解决策略

谈谈你对多线程锁的理解,以及JDK有怎样的措施来应对多线程并发的问题的?

锁就是在多线程访问并对共享资源进行写的时候而进行的一种管控。synchronized关键字就是一个例子,通过修饰静态方法、实例方法,或者代码块的方式保证锁管控的代码具有原子性和单线程操作性(写操作)……。JDK后来升级为加入了Lock接口来实现和synchronized类似功能,使用时需要手动获取锁和释放锁,可中断获取锁,超时获取锁

那谈谈Lock接口的API以及其实现类相关的了解?

属于对上个问题的延续。API也就是上一个问题的手动获取/释放锁,中断锁……。实现类:ReentrantLock可重入锁,ReadLock读锁,WriteLock写锁。一般的使用方式就是多态的概念,以接口类型作为引用指向对应的不同实现类,创建不同的锁实例对象。对于可重入锁ReentrantLock,多个线程获取其lock()进行业务代码的操作,必须按照争夺锁的先后依次执行,一个线程执行完毕后,另一个线程才能获取锁执行,术语称其为独占锁

ReentrantLock的理解?

重入锁就是该类创建的实例对象能够多次调用lock方法和unlock方法进行当前线程持有锁的次数增加/减少,通过对象的getHoldCount可以进行获取锁的次数。内部构造方法是一个NonfairSync的实例对象,翻译过来就是非公平锁,多个线程获取一个锁时,可能多次被同一个线程获取。

那么公平锁是怎样的底层实现 ?

属于对上个问题的延续。Sync的一个两个子类NonfairSync和FairSync……我也不太熟悉底层源码。

那么ReentrantLock中的lock和unlock之间的同步如何进行线程间的通信?

实际就是使用synchronized关键字同步中用到的wait和notify,notifyAll方法的类似功能。ReentrantLock采用的是Condition接口中的await等待,signal方法进行唤醒。Condition这个接口的类型是通过ReentrantLock的实例newCondition()进行创建的类型

对于其通信方式有哪些应用?举个简单的案例出来?

-是对上个问题的延续。可以通过伪代码的形式进行阐述,比如一个缓冲区有固定的大小,当缓冲区已满则put线程就只能阻塞,直到缓冲区有空间;当缓冲区已空take线程只能阻塞,直到缓冲区有数据。 new一个ReentrantLock的实例,并通过其newCondition()创建两个Condition对象;创建一个固定大小的数组对象模拟缓冲区

如何规避ThreadLocal的内存泄漏

JUC包下的计数锁?CountDownLatch?

采用直接new的方式创建CountDownLatch类型的对象,构造方法中直接传入参数int,作为计数值。……方法就是设定某些任务执行完毕后,本任务才去执行的场景

Semaphore类的了解?

也属于JUC包下的一个类,翻译过来就是信号量,用来控制同时访问线程的个数。

如何中断线程,await和sleep区别

线程池coreSize,maxSize怎么设置,依据是什么?

Java中多线程操作下的三个特性?

原子性一系列操作不允许被中途打断,必须全部执行或者不执行;可见性是指当多个线程访问同一个共享变量时,一个线程对其修改,其他线程都可以看到;有序性多个线程对同步代码的操作,只有竞争到锁才能执行,反之没有同步的措施就会造成线程执行的无序性……。

线程池的线程是不是必须手动remove才可以回收value?那你说的内存泄漏是指主线程还是线程池?

什么是自旋锁?

Java程序启动至少启动几个线程?

------除了main主线程,应该还有垃圾回收机制线程吧……这个不太确定……

创建线程以及线程运行时代码的方式?

----------继承Thread类,实现Runnable、Callable接口。实际可以在纸上列出他们的伪代码……

线程的中断、休眠相关以及区别?

-------sleep是线程暂停指定时间后继续执行,中断interrupu是线程停止运行。

进程间的通信方式以及线程之间的通信方式 ?

进程之间的通信方式:1. 共享内存 2. 管道 3. 消息队列 4. 信号量 5. 套接字 6. 信号
线程之间的通信方式:1. 使用volatile关键字 2. 使用synchronized配合wait()和notify() 3. JUC工具类CountDownLatch(闭锁) 4. 使用ReentrantLock结合Condition 5. BlockingQueue阻塞队列

手写多线程交替打印ABC

手写阻塞队列

为什么不能用Excutor创建线程?

答:会造成资源耗尽的风险,(这里问我系统的是没有定义线程数量吗?)然后我解释了一下newCachedThreadPool是创建可伸缩的newFixedThreadPool是创建固定的线程数量,newSingleThreadExecutor是创建单个的,但是由于newCachedThreadPool最大线程数量这个参数可以为Integer.max-value,所有会无限扩展到内存耗光。

如果没有大于最大线程数量,则创建线程并执行任务,如果大于最大线程数量,则启用线程池的拒绝策略handler


mysql

数据库连接池

数据库的存储机制和存储过程

数据库是如何调优的

公平锁和非公平锁区别?为什么公平锁效率低?

数据库基本查询关键字使用,如left join on,where,beteen and,group by,having,limit,聚合函数等。

当前读和快照读指的是,什么时候使用快照读,什么时候使用当前读

左右链接

事务隔离级别,4个隔离级别分别有什么并发问题?

Mysql默认隔离级别?如何保证并发安全?

隔离级别的单位是数据表还是数据行?如串行化级别,两个事务访问不同的数据行,能并发吗?

数据库事务是干什么的,事务特性,事务隔离级别,mysql默认级别,为什么是RR

ACID四大特性mysql如何保证实现的?

mysql如何实现事务持久性

数据库是怎么保证一定不会丢失数据的

如果自己实现事务的插入操作和删除操作的原子性,你怎么实现?

Mysql怎么解决脏读,怎么解决幻读

举例MySQL发生死锁的情况

了解MySQL分区、分表吗?分表的方式说一下

对分库分表,避免热点是怎么处理的?

这涉及到数据库瓶颈问题的解决,所以要结合项目,对数据进行垂直和水平拆分。水平分库:(可以手动画个草图来阐述)当用户通过userId来请求数据,通过对userId的分析得出该去哪个数据库进行操作(比如:A数据库是偶数userId,B数据库是奇数userId。不仅仅是通过userId也有按照其他分库的方式,每个库的结构一样,但数据不一样)。水平分表:做法和分库是一样的。垂直分库:依照业务的不同,拆分成多个数据库(用户数据库和产品数据库……各管各的),垂直分表就是依照uid为核心,将字段分割(比如表一存放个人身份信息姓名年龄……,表二存放个人社交信息联系方式地址……)

为什么要分这么多库这么多表,-基于什么考虑?

分库分表后怎么保证分布式主键id的唯一性?

mysql主从复制的实现流程,binlog记录格式,复制的异步半同步同步模式区别

主从复制或读写分离等数据不一致性问题以及如何解决

MySQL的读写分离配置过程用到了什么注解

间隙锁

你了解那些数据库引擎,说说它们的异同优劣以及使用场景?

-常见的InnoDB采用的是B+树底层数据结构,适用于经常更新的表,支持事务,可以通过bin-log日志进行恢复丢失的数据……;

MylASM没有提供对数据库事务的支持,也不支持行级锁和外键,所以执行写操作的时候需要锁定整个表导致效率低下,适合读取操作的速度快

Mysql两种搜索引擎,两种搜索引擎差别

InnoDB:事务型数据库首选,支持事务ACID,支持行锁定和外键,用在需要高性能的大型数据库站点上。

MyISAM:不支持事务,较高的插入查询速度,在Web,数据仓储上最常用。

数据库的三大范式?

如何走索引,而避免全表扫描?

结构数据库和非结构数据库区别,你了解的非结构数据库有哪些

频繁的增删数据量某个表,数据库最终数据只有几万或者更少,为什么查询会变慢

-如何实现数据库动态扩容?

聚簇索引和非聚簇索引区别

非聚簇索引为什么存储的主键id而不是主键索引的行地址

手写mysql左连接查询,把表也模拟写出来,查询结果也写出来

主键索引与二级索引的区别

主键索引存储什么数据

数据库有哪些索引?原理,优缺点,怎么应用的

如何创建索引?插入数据索引维护,最坏会发生什么

索引的存储结构?数据库索存储用的什么数据结构?

索引值改变了,树的结构如何改变?

什么是覆盖索引?

根据索引查询的过程是什么?

各种索引存储结构的应用场景。

Like走索引吗?

查询条件在索引列上使用函数操作,或者运算的情况

2、 查询条件字符串和数字之间的隐式转换

3、特殊修饰符 %, Or 将不走索引

4、 索引优化器选择最优的索引

不等于可以用索引吗?大于小于?

正确应该是:在使用不等于(!=或者<>)的时候无法使用索引导致全表扫描 is not null也无法使用索引,但是is null是可以使用索引的.

hash与B+树对比?哪种场景下应用更合适?

查询主键/非主键索引的实现方式

innodb索引种类

哈希索引是如何实现的?

B树和B+树的区别, 使用B+树的好处?

为什么B+树比B树更加矮小,查询效率更高?

为什么主键用auto_increment

如何生成唯一主键 :UUID

UUID的缺点

如何避免sql注入

在已提交读的隔离级别下,事务A、B同时读取数据,事务A修改数据提交后事务B再次读取,那么事务B两次读取的数据有变化吗

在可重复读的隔离级别下是什么样的情况,能不能解决幻读

布隆过滤器怎么实现的

说说Mysql的sql优化

26.你有哪些sql调优经验?

mysql储存引擎有哪些?

分布式集群实现的原理。

explain执行计划看过没有?其中type字段都有哪些值?分别代表什么?

讲一讲数据库的慢查询?

平时建mysql表的时候会考虑一些什么?

写sql语句的时候where会考虑什么?

数据库的大表查询优化了解吗?

MVCC机制了解不?MVCC机制有什么问题?怎么去解决这个问题?

为什么数据量大的时候会出现慢sql? 慢sql如何解决。

mysql慢语句调优做过吗?说说你是怎么做的

如何定位一个慢查询,一个服务有多条SQL你怎么快速定位?

Mysql 事务隔离级别、锁、索引的数据结构、

聚簇索引和非聚簇索引、最左匹配原则、查询优化(explain等命令) 常见问题 Mysql(innondb 下同)

数据库的索引了解吗?说一下索引的原理?

mysql索引是怎么实现的?b+树有哪些特点?真实的数据存在哪里? 哪些情况下建索引?

B树和B+树的区别?

mysql索引为什么用的是b+ tree而不是b tree、红黑树

9.b树和b+树的叶子节点和非叶子节点都存什么

b+高度一般多少,什么量级。b+树的高度怎么计算

聚集索引和非聚集索引了解吗?什么情况用聚集索引什么情况用非聚集索引?各自有什么优缺点。

b+树索引是否支持范围查询,联合索引的失效情况

红黑树索引

加索引的原则

解释下最左匹配原则? 现在一个表有三列a b c,组合索引(a,b,c)查询的时候where a like ? and b=? and c=?能用到这个组合索引吗?为什么

为什么用联合索引;bc会走abc联合索引吗;

怎么看mysql有没有执行索引

数据库的索引有哪几种?为什么要用B+树来做索引?组合索引和几个单个的索引有什么区别?

了解mysql的回表吗?

如果没有主键的话会怎么样;

myisam和innodb哪个会保存表的总记录数,为什么;

为什么InnoDB用的多?

数据库方面有mysql的innodb引擎锁的底层实现、以及回表、怎么避免索引覆盖

为什么MyISAM查询性能好?

如果由大量的增删操作,那么应该选择哪个存储引擎,为什么?

为什么myisam不支持事务 ,innodb是如何支持的事务 ,为什么myisam不采用和innodb相同的方案来解决事务问题 ,

分库分表如何做到不同库表间数据不重复。
MySQL作为相对于雪花算法全局唯一性id的缺点除了性能问题,还有什么?

弹性库自动扩容原理

Nosql引擎用的什么存储结构,关系型数据库和NoSQL各自的优劣点是什么,如何技术选型?

mysql主从复制主要有几种模式?

两个数据库表复制数据库有什么方式?

mysql同步机制原理,有哪几种同步方法?

数据库主从同步如何实现,事务如何实现?

mysql主从节点怎么保证数据的一致性;

分库分表应该怎么分?怎么解决数据迁移的问题?

分库分表如何选择分表键 分库分表的情况下,查询时一般是如何做排序的?

mysql行锁最大并发数?(秒杀项目指出)

mysql最多能存多少数据

Mysql的log有哪些,分别用来解决什么问题

如何保证缓存和数据库双写的一致性

MySQL的查询机制

频繁的增删数据量某个表,数据库最终数据只有几万或者更少,为什么查询会变慢?

数据如果出现了阻塞,你是怎么排查的

Mysql数据库默认的隔离机制。

事务是什么,什么特征,事务如何实现原子性和一致性的

事务的四大特性、并发一致性导致的问题、四种隔离级别解决的问题以及如何实现的(加了什么锁);

Mysql默认的事务隔离级别是什么,有什么缺点

数据库事务的隔离级别有哪些?Mysql默认的隔离级别?不同的隔离级别是通过什么实现的?

不同事务隔离级别分别会加哪些锁?

什么是幻读 ,怎么解决幻读

AUTO_INCREMENT原理(考察并发情况)

自增锁、共享锁、排他锁、意向锁、插入意向锁、记录锁、间隙锁是什么;

怎么定位死锁;

数据库锁知道吗,有几种,加锁和解锁的场景,给一句SQL和隔离级别,能分析加什么锁吗?

数据库的悲观和乐观锁都说一下吧,什么时候用乐观锁比较合适?什么时候用悲观锁呢?

mysql的行锁、表锁、间隙锁、意向锁分别是做什么的?

springBoot

Spring boot注解和原理

用过springboot吗?

spring系列的一个整合框架(tomcat和配置文件),简述下helloworld原理即可,依赖maven的配置+注解以及启动类的web应用。

SpringBoot自动配置的原理是什么?介绍SpringBootApplication注解.

主要是代替以前SpringMVC繁琐的XML配置(视频解析器,组件扫描器,调度器),spring-boot-autoconfigure依赖通过@EnableAutoConfiguration 核心注解初始化并扫描Classpath目录中自动配置类对应的依赖

SpringCloud

spring

Spring的了解?

Spring是一个提供IOC和AOP的容器框架。所谓IOC就是通过框架创造对象,所谓AOP就是在不改变原来业务代码的情况下,通过增加功能类即可以实现对原来代码的方法功能升级,也就是编程的开闭原则思想。

Spring的AOP理解?aop实现有哪几种实现

直译过来就是面向切面编程,防止在纵向的业务逻辑执行中重复代码,而且不利于代码的扩展升级。比如一些:安全、日志、权限等集中式管理……主要以静态***和动态***的模式来实现

Bean作用域?默认什么级别?是否线程安全?Spring如何保障线程安全的?

IOC中DI注入方式?如果在一个系统中有很多不同包下的bean名字是一样的,怎么解决注入时的冲突问题?(这些bean不分优先级)

AOP中用到了哪些注解?怎么做切面的优先级(先走切面2,再走切面1)?

SpringIOC的理解?

将原先有手动创建对象的方式交给容器管理,通过构造器注入、setter方法注入,注解注入

spring生命周期,几种scope区别,,接口和类会有什么区别

Spring的单例是怎么实现的?

spring循环依赖怎么解决

Spring事务隔离级别和事务传播属性

Spring以及Spring MVC常见注解

@autowired和@resource的区别,当UserDao存在不止一个bean或没有存在时,会怎样?怎么解决?

spring中的注解原理?例如事务注解,spring如何根据注解实现事务功能的

Spring中用到了哪些设计模式?单例、***、工厂、适配、观察者之类的说一说就行

springMvc

SpringMVC处理请求的流程?

-画图阐述:用户发送请求-->前端控制器(根据URL选择哪一个页面控制器进行处理并把请求委托给它)-->页面控制器(接收请求进行功能处理,收集并绑定一个对象作为命令对象然后委托给业务对象进行处理)-->调用业务对象返回模型/逻辑数据-->页面控制器-->ModelAndView-->前端控制器-->根据返回的逻辑视图名进行渲染-->返回控制器响应给客户

SpringMVC不同用户登录的信息怎么保证线程安全的?

Spring MVC工作原理

你怎么把数据返回json,对日期是怎么处理的

mvcc如何实现的

MMVC实现的原理

Mybatis

Mybatis整合Springboot做表的操作时,环境搭建过程

MyBatis框架的理解?

属于持久层的框架。通过配置文件XML或注解,将接口和POJO映射成数据库中的记录……相关的依赖包,数据库表,配置文件(数据库驱动信息,核心配置文件),实体对象,最重要的Mapper接口对实体的增删改查操作和Mapper映射文件xml(也需要注册到核心配置文件中),通过SqlSessionFactory创建SqlSession对象进行操作……

mybatis如何防止sql注入?${}和#{}的区别?传入表名用哪个?

${}就是数据源中通过对数据源驱动配置引入到框架核心配置文件中的变量值,#{}mapper.xml的预编译SQL文件

对于XML映射文件和Mapper接口对应,这Mapper接口的原理是什么?

也就是映射文件的namespace值对应Mapper接口包名接口名,接口中的方法名为映射文件中的id值,接口中的方法参数为传递给映射文件的sql参数。Mapper接口没有实现类,调用时采用接口全限名+方法名组成的字符串作为key,即可定位对应的标签(<select>,<insert>……)。Mapper接口原理是JDK动态daili(这两个字被平台加入到了违禁词系统了

什么是分页?

`-分页就是将数据库表的记录分页显示,比如1000条记录,分成100页来显示(从0页、0行开始),第0页显示第0-99条数据,以此类推……。逻辑分页,显示每页数据时首先查询1000条数据,然后根据当前页码选出其中的100条来显示。物理分页,先判断该选出的这1000条的第几条到第几条,然后数据库根据给定的请求查询出需要的100条数据返回给前端。

Mybatis如何进行分页?

-属于对上个问题的延续,逻辑分页采用的是RowBounds对象进行分页,针对ResultSet结果集执行的内存分页。物理分页可以直接用带有物理分页的参数,也可以使用分页插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据方言添加对应的物理分页语句和参数。

MyBatis是如何将sql执行结果封装为目标对象并返回的?

采用resultMap标签,定义数据库列名和对象属性名之间的映射关系

Mybatis的延迟加载以及实现原理?

`对于一对一、一对多的查询中通过在Mybatis配置文件中启动lazyLoadingEnabled的布尔值。其原理是使用CGLIB创建目标对象的daili对象……

一级、二级缓存?

一级缓存是默认的,作用域为Session,当Session flush或close之后,Session中的所有缓存被清空。二级缓存需要手动配置开启的,存储作用域为namespace,即整个mapper接口……

框架默认是开启一级缓存的,其存储作用域为session,当session的flush和close之后,所有缓存会被清空。二级缓存作用域为Mapper命名空间,可以自定义存储源Eh***默认不打开二级缓存,要开启二级缓存需要手动配置。缓存数据更新机制,当执行了更新数据操作,默认该作用域下所有的select中的缓存将被clear

mybatis工作流程原理吗?

所谓流程原理,个人认为是对mybatis环境搭建后的具体应用。读取可信配置文件并返回流对象。根据流对象解析创建工厂对象。通过工厂对象创建session,通过session结合映射文件做出一系列的操作……



计算机网络

HTTP1.0、1.1、2.0之间的区别

HTTP与HTTPS之间的区别,HTTPS链接建立的过程

HTTP请求有哪些

Post和get区别。

http为什么说是无状态的?

说一下http , https 的状态码,从1xx到5xx都要说。如304,301,302,504,

HTTP默认端口号,可以有其他端口吗?进程可以共用多个端口号吗?

浏览器敲入一个域名,尽可能详情的说下接下来网络协议层面发生了什么

当前视频面试时,用到了哪些网络协议?

OSI七层模型与TCP/IP 五层模型,

常见应用层协议和运输层、网络层协议,以及硬件如路由器之类在哪一层

讲一下Udp和tcp,tcp的可靠性是怎么保证的,UDP怎么让他可靠。

TCP粘包现象原因和解决方法

TCP与UDP区别和应用场景,基于TCP的协议有哪些,基于UDP的应用有哪些

拥塞控制和流量控制的区别, 具体讲讲tcp拥塞控制(拥塞控制目和过程)

TCP三次握手过程以及每次握手后的状态改变,为什么三次?为什么两次不行?如果你的答案是防止已失效的请求报文又传送到了服务端,建立了多余的链接,浪费资源,但这个答案被否定了,你还能给出什么答案?

TCP四次挥手过程以及状态改变,为什么四次?为什么要等Timewait,timewait为多少?CLOSE-WAIT和TIME-WAIT存在的意义?如何查看TIME-WAIT状态的链接数量?为什么会TIME-WAIT过多?解决方法是怎样的?

TCP、UDP、IP、以太网报文格式以及重要字段,报文从一端到另一端传递的过程。

重定向和转发区别

cookie, session, token区别。

session在服务器端是什么

使用session有两个服务器怎么办

DNS查询的过程

DNS和HTTP,在传输层使用那些协议。

为什么DNS即使用TCP又使用UDP

网站IP变更了,用户访问该网站会发生什么

电脑如何判断本机缓存的IP地址的错误的

访问一个网站首页,是如何把所有数据都请求过来的(比如说首页还有其他的图片等对其他URL的请求)

常见协议对应端口

socket由哪些部分组成

socket可以TCP和UDP共用吗?

socket种accept()和TCP三次握手之间的前后顺序。

close_wait和time_wait是什么,如果出现大量time_wait会是什么原因

2)close_wait 服务端还有消息没法送完时候

3) time_wait 客户端 最后的ACK发送完等待2MSL时间,如果丢失重发时间2MSL,上一次链接的消息完全消失

4) 出现大量time_wait: 在 高并发短连接 的TCP服务器上,当服务器处理完请求后立刻主动正常关闭连接。这个场景下会出现大量socket处于TIME_WAIT状态。如果客户端的并发量持续很高,此时部分客户端就会显示连接不上。

具体一点,短连接表示“业务处理+传输数据的时间 远远小于 TIMEWAIT超时的时间”的连接。比如取一个web页面,1秒钟的http短连接处理完业务,在关闭连接之后,这个业务用过的端口会停留在TIMEWAIT状态几分钟,而这几分钟,其他HTTP请求来临的时候是无法占用此端口的。这样大量端口占用造成严重的资源浪费


Linux

Linux命令, 各种操作命令

Linux 从一个文件夹中找到文件名包含某些关键字的文件的命令

Linux /etc /usr这两个目录下分别存放的什么文件

用什么命令打开大文件,比如5G这么大(不应该用vim,应该用grep范围查)

Linux查看CPU核数命令

kill -9 与 kill -5的差别

linux的IO多路复用有哪些技术手段

操作系统

1、进程和线程的区别

2、协程呢?

3、进程间通信方式IPC

4、用户态和核心态

5、操作系统分配的进程空间是怎样的?线程能共享哪些?

6、操作系统内存管理方式,分页分段以及段页式的优缺点

7、页面置换算法有哪些,FIFO为什么不好?如何改进?LRU思想,手写LRU

8、死锁条件,解决方式。

1、操作系统都有哪些内容啊?(答:进程管理、内存管理、文件管理)

2、进程通信的方式?每种方式的应用场景?进程如何保证并发的?讲一下信号量?什么是临界区?
3、操作系统怎么进行内存管理?每种方式有什么优缺点?
4、页式存储和段式存储分别应用在什么场景下?


Redis

跳表的查询过程是怎么样的,查询和插入的时间复杂度?

如何设计拥有高效的随机读取能力的的链表(跳表)

设计跳表,跳表插入开销,跳表随机读取过程

redis是单线程还是多线程?有什么好处,为什么那么快?

select、poll、epoll的区别?

一般设置过期时间吗,业务场景有哪些,过期策略有哪些

redis热key问题?如何发现以及如何解决?

redis分布式锁如何玩?超时时间如何设置

Redis 怎么保证不丢数据,能不能保证严格意义的一定不会丢

Redis 集群,生产环境Redis 如何做数据迁移

怎么保证缓存和数据库双写一致

分布式缓存和本地缓存有啥区别?

Redis的高可用?

Redis分布式锁咋实现的?

Redis跳跃表

redis常用数据结构和使用场景

什么是Redis缓存雪崩?什么是Redis缓存穿透?以及解决方法

Redis哨兵模式和集群模式区别

Redis并发量上限

redis的五种IO模型的区别

解释同步/异步/阻塞/非阻塞

一致性哈希的工作原理,优点,缺点

hashtable的操作get和put的时间复杂度

解决哈希冲突的方法

keep_alive

谈谈你对Redis的了解?

`基于内存运行,支持分布式扩展,key-value存储系统,默认支持0-15命名的16个数据库。项目中应用的场景:热点数据的高频读,低频写;发布订阅排行榜,计数器等。五种类型:String Hash List Set Zset 并分别对这几种类型提供了相关的命令来操作数据的增删改查……

Redis事务的了解?

`对一组命令集合进行执行,中途不允许打断,否则所有的命令都不执行。从客户端发送一个MULTI发送给Redis来标明线面发送的命令属于事务,每发送一条命令Redis响应一个QUEUED表示命令进入等待执行的事务队列中了。直到用户输入EXEC结束事务的输入并请求Redis执行输入的所有命令。

Redis的持久化?

`-RDB方式:用户自定义一定的条件,然后Redis将自动将缓存进行快照并存储到硬盘上,条件就是在指定时间改动了指定数量的键数,默认会将快照文件存到dump.rdb文件中。

AOF方式:记录服务器执行的所有写操作,需要手动开启参数设置……

只用AOF行不行

持久化的时候还能接受请求吗?

关于Redis的主从复制?

`避免单点宕机造成服务数据丢失,所以需要主(写)从(读)复制的措施,一个主数据库可以拥有多个从数据库……

关于哨兵机制?

`哨兵模式监控主从架构的工作是否正常进行,通过通知转移故障主节点而重新配置一个新的主节点的特点……

redis缓存回收机制,准备同步,哨兵机制

统计10分钟内订单的亏损,你会怎么设计

分布式缓存redis原理,zookeeper锁是如何实现的

其他分布式锁的实现方式

Redis 集群一致性

Redis会导致什么问题,怎么解决这些问题

redis数据分布方式?有什么优点?一致性hash呢?

redis主从复制,主从切换,集群

3.redis为什么不可靠,怎么变得可靠

1)异步主从复制,没复制完master宕机

2)脑裂,master脱离连接范围,哨兵选举新的mastere,client没来得及切换继续发送到旧master,数据丢失


设计模式

说说你了解的设计模式,适配器与袋里模式的区别,适配器模式有哪几种实现方式,使用适配器模式的优点

单例模式

如何更好的实现一个单例

手写观察者模式

ElasticSearch

ES的检索机制(query-then-fetch)

消息队列

什么是消息队列

如何保证消息不丢失

如何保证消息不重复

mq 通知时,消费者没消费到怎么办

消息如何保证一定被消费,如何没有消费到怎么办

当消费者消费了消息,数据库已提交,消费发送的ACK还没到就挂了,如何解决

异步队列是怎么解决的写压力大的问题

队列中消息是允许延迟吗,如果延迟的话怎么保证消息不被重复消费

生产者消费者模型的实现(堵塞队列,代码)

rabbitmq的几种模型

nameServer的作用?

有了zk和eureka为什么还需要nameServer?

zookeper

zk的监听原理,你来实现你怎么做

主动推送怎么实现

阻塞队列有哪几个实现?

用MQ采集消息的时候,有没有做消息重复消费处理?怎么做的?

RocketMQ的commitLog的作用

为什么commitLog每个文件的大小是1G?

负载均衡

常见的负载均衡的策略

项目设计

基于 junit 写一个测试代码,场景是加减乘除计算器;

如果现在要搜一个词,按相关度排序,如何获取排名在(100-120)之间的文档

针对于“用户打车付款-滴滴后台-支付宝后台”设计一个一致性处理方案

五亿数据,找出数量top100

10G数据,在内存小于10G如何分片

分片处理完如何汇总

分布在多个节点上如何汇总

哈希取模如何哈希?哈希冲突怎么办?能完全解决哈希冲突吗

秒杀系统如何设计?

秒杀系统的需求就是在同一时间大量的请求对指定商品进行购买交易,但系统一定要扛得住这些大量并发请求。所谓实现就是项目设计的高性能数据库的读写拆分、热点优化……,一致性就是高并发对数据库商品库存字段的扣除要一致……,高可用某台服务器宕机对客户来说是透明的……

字符串数目从 0开始,一直往后递增,字符串大小不需要考虑,只是字符串的数量不断增加,在高并发的情况下, QPS十几万时,怎么生成这个确定的唯一 id,还可以保证下次查询时高效率的查到

做的项目价值,架构设计,给你一个集群你会怎么分布,考虑哪些因素,容灾、负载均衡

让你来设计咸鱼,你会怎么设计?模型设计

设计一个订餐排队系统,底层模型有哪些

场景1:单台机器4核,服务A请求时间为5S,但是A调用的某个服务B耗时4.98S,A服务超时时间是10S,问100QPS的访问量,动态线程池CoreSize,maxSize,等待队列怎么指定?

实现一个接口,该接口被上游调用,向上游承诺300ms返回结果,但是该接口依赖下游5个接口,下游每个接口平均调用时间在100~200ms,让说出该接口的实现思路(这个题聊了挺久的)

服务器2G内存,对磁盘上10G内存排序。我回答的归并排序,然后让我说出具体的排序过程,越详细越好。

有1千万条字符串,请问插入hashmap中会遇到什么问题?(我当时只说了插入太慢,会频繁扩容数组,且不能通过多线程来插入,后来想了一下,还会内存溢出,因为数组长度不可能分配一千万那么长)

说一下在RPC服务中如何去实现限流操作,我讲了一下令牌桶算法,然后问我令牌桶不平滑怎么解决,我说可以再加上滑动窗口算法一起实现限流。

当某一时刻有大量并发请求,如何避免系统的核心功能挂掉(复盘之后我猜是想问容灾方案?)

前件条件:你手里有一个购物网站

思考一
网站首页应该怎么设计
刚刚从业务上说了,那么从技术和后台设计呢
思考二
购物车上,从后台方面考虑有哪些可以设计的
思考三
前期用户量较少,后期多了,推送广告性能变慢,从后台角度怎么优化提升性能

两个并发操作一起扣减库存,如何保证库存的数据一致性

串行扣减库存效率不高,并发操作有没有什么好的解决方案

写一段代码,实现三个线程,第一个线程打印1,2,3,4,第二个线程打印5,6,7,8,第三个线程打印9,10,11,12,然后第一个线程再去打印13,14,15,16,一直打印下去。

为什么要单独实现一个服务治理框架?

1、100亿黑名单URL,每个64B,判断一个URL是否在黑名单中

2、2GB内存在20亿整数中找到出现次数最多的数

3、40亿个非负整数中找到没有出现的数

4、40亿个非负整数中找到一个没有出现的数,内存限制10MB

5、找到100亿个URL中重复的URL

6、海量搜索词汇,找到最热TOP100词汇的方法

7、40亿个无符号整数,1GB内存,找到所有出现两次的数

8、10MB内存,找到40亿整数的中位数

9、设计短域名系统,将长URL转化成短的URL.(知乎老哥给出了答案,博客有人根据他的总结了一下,很好)

10、让你系统的设计一个高并发的架构,你会从哪几个方面考虑?

11、一个千万级的APP,你要搞定关注和粉丝列表,你用什么来做。要求最后一个关注的在最前面。新增和取关都要比较快的反馈你怎么做?如果一个人关注了之后,服务器宕机了怎么办?

12、OOD design:计费停车场

13、假设有这么一个场景,有一条新闻,新闻的评论量可能很大,如何设计评论的读和写

14、显示网站的用户在线数的解决思路

1、如何解决超卖?mysql锁+redis预减库存+redis缓存卖完标记

2、如何解决重复下单?mysql唯一索引+分布式锁

3、如何防刷?IP限流+验证码

4、热key问题如何解决?redis集群+本地缓存+限流+key加随机值分布在多个实例中

5、消息队列的作用?如何保证消息的不丢失?异步削峰;发送方开启confirm+消息队列持久化+消费方关闭自动ACK,确保消费成功之后自动调用API进行确认。

6、缓存和数据库数据一致性如何保证?秒杀项目不用保证,其他项目就用延时双删或者先更新数据再是缓存失效,为防缓存失效这一信息丢失,可用消息队***保。

7、压测没有?用什么压测?什么情况?

8、系统瓶颈在哪?如何查找,如何再优化?

几千万的数据如何读取处理处理?
答:这个场景题我也没答好,我一直想是让想出一条效率很好的sql语句,然后面试管最后说用limit分页,然后又问我limit可以吗?

这里面试官可能想问我优化分页查询。知识点是关于分页优化索引的吧,不过这里我不太清楚,答的不好。

然后我说没这样实际操作过,但是用explain分析过执行计划。

算法

算法一个二叉树给一个target,找到所有sum==target的路径

判断某个数是2的n次方

如果大数据量排序选哪种

堆排,快排,归并这些可能会好点,具体看业务
讲了下自己的理解,有些业务可能选插入冒泡这种稳点的排序会更好,比如需要多次排序

哪些是稳定排序呢

链表有无环

lru缓存

完全二叉树逆序打印

快速排序、堆排序

B-树B+树区别,数据库索引原理,组合索引怎么使用?最左匹配的原理

两个有序数组,数组中包括一些重复元素,合并成一个有序数组,并且去重,如何通过代码实现?

two linkedlist megre to one

Leetcode 121题 买卖股票的最佳时机

刷题网 105. Construct Binary Tree from Preorder and Inorder Traversal

写链表翻转(代码)

合并k个有序数组(代码)

红黑树了解么,时间复杂度?

既然两个数据结构时间复杂度都是O(logN),zset为什么不用红黑树

数组A,2*n个元素,n个奇数、n个偶数,设计一个算法,使得数组奇数下标位置放置的都是奇数,偶数下标位置放置的都是偶数。

多叉树的最大深度

不额外的空间,进行俩排序链表的合并

二叉树中的最大路径和

判断字符串是不是包含数字2)反转矩阵3)判断字符串的不重复最长字串

数组n有n个数,判断是否存在a、b、c满足a+b+c=0,返回这三个数

判断一个字符串中不含重复字符的最长子串

数组n+1个数,放到数组中,判断哪个重复,返回重复数

带括号的字符串反转,输入:(u(love)i),输出:iloveu等等

数组n有n个数,判断是否存在a、b、c满足a+b+c=0,返回这三个数

判断一个字符串中不含重复字符的最长子串

数组n+1个数,放到数组中,判断哪个重复,返回重复数

斐波拉契数列非递归实现

反转链表第n到m个结点

有序数组A和B,将B合并到A中形成新的有序数组

10个城市编号0~9,城市之间移动只能前后移动(比如5只能到4或者6),10个城市构成一个环,从0可以到9,从9也可以到0。从任意城市X出发,途径N个城市,问有多少途径?

public class Main {
    //dp + 递归
    static int solution(int X, int N){
        int result = recur(X, X + 1, N);
        return result * 2;
    }

    static int recur(int X, int Y, int N) {
        if (N == 0) {
            if (Y == X) {
                return 1;
            } else {
                return 0;
            }
        }
        //处理循环
        int pre = Y - 1;
        if (pre < 0) {
            pre = 9;
        }
        int next = Y + 1;
        if (next > 9) {
            next = 0;
        }
        return recur(X, pre, N-1) + recur(X, next, N-1);
    }
    public static void main(String[] args) {
        System.out.println(solution(0, 3));
    }
}

时间复杂度O(N)和O(logN)怎么理解的

二叉树的最近公共祖先、二叉树中的和为给定值的路径

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值