Java秋招面试全解析:Java基础,10万字Mysql实战文档

  1. ArrayList和LinkedList的区别,添加一个元素的时间复杂度各是多少,既然ArrayList添加元素效率没有LinkedList高,为什么我们平时用的比较多的还是ArrayList?

  2. 一般什么情况下会用ArrayList,什么情况用LinkedList?(如果只是普通的存取元素多用ArrayList,LinkedList一般用作栈、队列)

  3. 将一个Map集合变成栈,如何实现?(我的思路是用TreeMap去实现,key存的是要入栈的元素,value存的是可以记录他们入栈的一个先后顺序的,例如时间戳,然后重写Comparator比较器,根据value进行排序,遍历Map时,先进的后面出)

  4. Map集合有迭代器吗?遍历输出Map中所有元素有哪些方法?

三、多线程和Java锁

===========

  1. 线程池的三大方法、七大参数、四种拒绝策略(可以顺带谈一下阿里巴巴开发手册对于线程池使用的规范)

  2. 最大线程数如何定义?(从CPU密集型和IO密集型考虑)

  3. 线程池的五种状态(Running、Shutdown、Stop、Tidying、Terminated)

  4. 线程池的任务执行流程、excute方法和 submit方法的区别?

  5. Synchronized锁和Lock锁的区别

  6. Java线程虚假唤醒(线程本应该处于wait状态却被唤醒了,解决方案是wait方法应该用while循环包裹,不用if)

  7. JMM的三种特性(原子性、可见性、有序性)、主内存和线程工作内存的八种交互动作

  8. volatile如何保证可见性(MESI缓存一致性协议)

  9. volatile如何保证有序性(内存屏障——lock前缀指令)

  10. synchronized和volatile的区别(volatile是一种非锁机制,这种机制可以避免锁机制引起的线程上下文切换和调度问题。因此,volatile的执行成本比synchronized更低;volatile只能保证可见性有序性;synchronized可以保证原子性可见性有序性)

  11. JUC包中的原子类如何保证原子性?(CAS机制和自旋锁)

  12. CAS机制,会引发什么问题,如何解决ABA问题?(CAS会导致ABA问题,解决ABA问题是使用版本号机制)

  13. 悲观锁和乐观锁的区别,应用?(java中的Synchronized关键字和lock锁使用的都是悲观锁;CAS机制是乐观锁的一种实现方式)

  14. 公平锁和非公平锁(公平锁按照先来先服务,不会出现饥饿;非公平锁会导致饥饿,但是效率更高,默认的锁都是非公平的)

  15. 自旋锁和互斥锁,自旋锁的优缺点?(优点:减少上下文切换和用户态内核态的切换带来的开销;缺点:循环等待消耗CPU)

  16. 可重入锁和不可重入锁(不可重入锁容易导致死锁发生,大多数锁都是可重入的,例如Synchronized锁和ReentrantLock)

  17. JDK1.6 Synchronized锁升级(偏向锁—轻量级锁—重量级锁)

  18. Synchronized锁的底层实现,锁的是什么,其它线程如何判断该锁已经被占用了?

  19. 死锁产生的四个必要条件以及死锁的处理策略

四、Mysql

=======

  1. Myisam和InnoDB存储引擎的区别?(Myisam不支持外键也不支持事务,支持的是表锁,当执行select操作时,自动给涉及的表加表锁,当执行增删改操作,自动给涉及的表加写锁;InnoDB支持外键也支持事务,支持的是行锁,当执行select操作时,不加任何锁,当执行增删改操作,自动给涉及的行加写锁)

  2. 间隙锁是什么?行锁升级为表锁的情况?

  3. InnoDB的行锁有哪些?锁住的是行还是索引?(Record Lock、Gap Lock、Next-Key Lock;锁住的是索引,而不是行)

  4. 为什么可重复读隔离级别也可以解决幻读?(通过Next-Key Lock可以消除幻读)

  5. 并发事务处理带来的四种问题和事务的隔离级别(丢失更新、脏读、不可重复读、幻读;读未提交、读已提交、可重复读、串行化)

  6. 如何理解Mysql默认的事务隔离级别可重复读?

  7. 事务的ACID属性是如何实现的?(原子性通过回滚日志undo log实现;持久性通过重做日志redo log实现;隔离性通过锁和MVCC实现;而一致性则是通过原子性、隔离性、持久性来实现,只有满足这三个特性,才能实现事务的一致性)

  8. 聚簇索引、非聚簇索引、回表查询、覆盖索引;

  9. 索引失效的情况?(违反最左前缀法则、范围查询右边的列索引失效、字符串不加单引号、对索引列进行运算、头部模糊匹配、使用不等于!=或者<>)

  10. explain分析执行计划、SQL语句的优化

  11. mysql三大范式(1NF即原子性,2NF即消除部分依赖,3NF即消除传递依赖)

  12. mysql索引的底层实现,为什么用B+树不用B树?(B+树IO次数更少、更适合范围查询、查询效率更加稳定)

  13. 哈希表查找速度不是更快吗,为什么不直接使用哈希表来做索引的底层数据结构?(哈希表不支持范围查找)

五、Redis

=======

  1. Redis五种基本数据类型的使用场景

  2. 缓存穿透、缓存击穿、缓存雪崩

  3. Redis的过期策略和内存淘汰机制

  4. Redis的zset底层数据结构,为什么用跳跃表而不用红黑树

六、框架相关

======

  1. Spring AOP的实现原理?(基于动态代理模式,如果目标类实现了接口,那么使用基于接口的动态代理,否则使用基于子类/cglib的动态代理)

  2. Spring AOP 的具体加载步骤?

  3. AOP和OOP的区别,分别适用什么场景?

  4. Spring Bean的作用域,Spring Bean的生命周期(Bean的实例化—初始化Bean—使用Bean—Bean的销毁)

  5. Spring容器创建对象的两种时机,各有什么优缺点?(一是Spring容器启动时创建Bean,二是调用getBean方法时创建)

  6. SpringMVC的执行流程(可以顺带讲一下适配器模式)

  7. Mybatis的一级缓存和二级缓存?

  8. Mybatis中#和$的区别?

  9. Mybatis如何实现批量插入?

  10. Mybatis的xml文件中,sql语句可以使用直接使用大于号小于号吗?应该用什么符号代替?

七、设计模式

======

  1. 代理模式(应用:一是创建多线程的方式之使用Runnable接口应用了静态代理;二是Spring AOP应用了动态代理)

  2. 适配器模式(应用:一是创建多线程的方式之使用Callable接口;二是SpringMVC中的HandleAdapter)

  3. 工厂模式(应用:一是Spring IOC;二是Mybatis中的SqlSessionFactory就用到了简单工厂模式)

  4. 单例模式(一般会需要手撕单例模式的代码,主要谈DCL模式关于指令重排的问题,以及反射可以破坏除枚举以外的几种方式;单例模式的应用有:一是Spring Bean的作用域默认就是使用单例模式;二是Mybatis中的ErrorContext类也使用了单例模式,这个类用于记录线程执行环境的错误信息)

  5. 装饰器模式(应用:JAVA的IO流就用到了装饰器模式)

  6. 装饰器模式和代理模式的区别?

  7. 策略模式(应用:Arrays类的sort方法就用到了策略模式,Comparator接口就是一个策略接口,将排序方法定义成一个策略,用户可以自定义排序策略,可以是升序也可以是降序)

  8. 观察者模式与发布订阅模式的区别?(JDK源码已经为我们提供好了一套观察者模式,Observer就是观察者接口,Observable类是被观察者,是一个具体类,提供了一个存放所有观察者角色的集合,并且也提供了添加观察者、移除观察者、通知观察者等方法)

八、网络

====

  1. TCP三次握手和四次挥手的过程,每次发送的包的内容,客户端和服务端的状态?

  2. TCP三次握手可以携带数据吗?TCP协议运行时阶段?

  3. 为什么是三次握手,可以四次握手或者两次握手吗?

  4. 为什么握手是三次,而挥手要四次?

  5. TCP四次挥手为什么需要TIME-WAIT阶段等待2MSL,是哪一方有TIME-WAIT阶段?(主动释放释放连接的那端)

  6. TCP的长连接和短连接

  7. 半连接队列和全连接队列,什么是syn flood攻击,如何应对syn flood攻击?

  8. 在浏览器中输入一个网址回车后发生了什么?

  9. 域名解析过程的递归查询和迭代查询

  10. 浏览器输入一个网址之后,按照TP/IP参考模型,从应用层到网络层各使用了哪些协议?

(应用层:HTTP、DNS;传输层:TCP、UDP;网络层:IP、ICMP、ARP)
  1. ICMP协议的两个应用——Ping和Traceroute

  2. IP地址和MAC地址有什么区别?

  3. http和https的区别

  4. 网站为什么要使用cookie和session;cookie和session有什么区别?

  5. get请求和post请求的区别?

  6. TCP和UDP的区别以及各自的应用场景?

  7. epoll和select的区别?

九、JVM

=====

本次面试答案,以及收集到的大厂必问面试题分享:

字节跳动超高难度三面java程序员面经,大厂的面试都这么变态吗?

ie和session;cookie和session有什么区别?

  1. get请求和post请求的区别?

  2. TCP和UDP的区别以及各自的应用场景?

  3. epoll和select的区别?

九、JVM

=====

本次面试答案,以及收集到的大厂必问面试题分享:

[外链图片转存中…(img-YVXzEoSz-1628492708201)]

资料领取方式:戳这里即可免费下载

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值