2.java内存模型、导致线程不安全的原因。
3.volatile关键字,缓存一致性、指令重排序概念。
4.synchronize关键字,java对象头、Markword概念、synchronize底层monitorenter和moniterexit指令。
5.lock语句和synchronize对比。
6.原子操作,CAS概念、相关参数。
7.乐观锁、悲观锁概念及使用场景。
8.线程池概念、实现原理等。
9.JVM锁的优化,偏向锁、轻量级锁概念及原理。
10.多线程方面回答得比较好,面试官反馈比较满意。
然后就是数据库相关的:(其实没这么多,有些是我整理的,挑了一些概率大的题目,仅参考)
1.在MySQL中ENUM的用法是什么?
2.CHAR和VARCHAR的区别?
3.为什么事务可以优化数据库?
4.Mysql的数据库引擎,区别特点
5.数据连接池采用了什么设计模式?意义是什么?
6.项目用到什么数据库?隔离级别?每个隔离级别各做了什么
7.数据库的索引?mysql不同引擎索引的区别
8…索引使用的注意事项
9…数据库挂了怎么办?除了热备份还有什么方法?
10…接上面场景题:服务器挂了,优惠券还没发怎么办?
11…数据库挂了怎么办?
12…数据库优化中,有一个关键字可以分析执行过程,知道么(explain关键字)?
13…数据库优化有什么了解?
14…索引的原理说一下吧。
15.联合索引,如果联合索引(a,b),现在查询a>0,b>0可以用到这个联合索引么?(太久没看,生疏了,答错了,答案应该是不能,只能用到a的索引,范围索引只能用到一列)
16.Mysql集群数据是怎么同步的?
17.Select,poll,epoll的区别。
还围绕了项目架构、Java基础、JVM、并发编程、中间件技术和Dubbo服务治理框架等展开。(题目不怎么记得了)
=========================================================================================
JVM方面
1.java内存模型,五个部分,程序计数器、栈、本地栈、堆、方法区。
2.每个部分的概念、特点、作用。
3.类加载的过程,加载、验证、准备、解析、初始化。每个部分详细描述。
4.加载阶段读入.class文件,class文件时二进制吗,为什么需要使用二进制的方式?
5.验证过程是防止什么问题?验证过程是怎样的?加载和验证的执行顺序?符号引用的含义?
6.准备过程的静态成员变量分配空间和设置初始值问题。
7.解析过程符号引用替代为直接引用细节相关。
8.初始化过程jvm的显式初始化相关。
9.类卸载的过程及触发条件。
10.三种类加载器,如何自定义一个类加载器?
11.双亲委派机制。
12.JVM内存分配策略,优先放于eden区、动态对象年龄判断、分配担保策略等。
13.JVM垃圾回收策略,怎样判对象、类需要被回收?
14.四种垃圾回收算法标记-清除、复制、标记-整理、分代收集。
15.JVM中的垃圾回JVM收器,新生代回收器、老年代回收器、stop-the-world概念及解决方法。
16.四类引用及使用场景?
这里给大家分享一个JVM知识图谱,可以分享给大家。
JVM知识图谱展示
通信协议
接下来是对通信协议的了解,大概问了下列问题:
1.TCP三次握手、四次挥手。
2.http请求报文结构、响应报文,状态码。
3.http2.0相比于http1.0的新特性,推送、多路复用、消息头压缩等。
数组面试问题
1.如何在给定的1到100的整数数组中找到缺失的数字?
2.如何在给定的整数数组上找到重复的数字?
3.如何在未排序的整数数组中找到最大和最小的数字?
链表面试问题
1.如何在没有递归的情况下反转单链表?
2.如何在未排序的链表中删除重复节点?
3.你如何找到单链表的长度?
4.如何在单链表中找到最后的第三个节点?
5.如何使用Stack找到两个链表的总和?
二叉树、字符串面试问题
1.你如何计算给定字符串中的元音和辅音?
2.如何计算字符串中给定字符的出现次数?
3.如何找到字符串的所有排列?
4.如何在不使用任何库方法的情况下反转给定句子中的单词?
5.如何使用递归来反转给定的字符串?
6.如何检查字符串是否只包含数字?
7.如何在字符串中找到重复的字符?
8.如何在没有递归的情况下按预先遍历给定的二叉树?
9.如何在给定的二叉树中执行有序遍历?
10.如何在没有递归的情况下使用inorder遍历打印给定二叉树的所有节点?
11.你如何实现一个后序遍历算法?
12.如何在没有递归的情况下遍历后序遍历中的二叉树?
13.如何打印二叉搜索树的所有叶子?
14.如何计算给定二叉树中的多个叶节点?
这里整理了关于数据结构相关资料文档,需要的小伙伴请直接关注公众号【程序员黑哥】获取。
=====================================================================
1.Spring Boot有哪些优点?
2.什么是 Spring Framework?
3.Spring Framework有哪些不同的功能?
4.Spring Framework中有多少个模块,它们分别是什么?
5.什么是 Spring配置文件?
6.什么是Spring IOC容器?
7.BeanFactory–BeanFactory实现举例
8.解释AOP模块
9.解释JDBC抽象和DAO模块
10.解释对象/关系映射集成模块
11.哪种依赖注入方式你建议使用,构造器注入,还是Setter方法注入?
12.对MySQL的锁了解吗
13.隔离级别与锁的关系
14.按照锁的粒度分数据库锁有哪些?锁机制与InnoDB锁算法
15.从锁的类别上分MySQL都有哪些锁呢?像上面那样子进行锁定岂不是有点阻碍并发效率了
16.MySQL中InnoDB引擎的行锁是怎么实现的?
17.什么是死锁?怎么解决?
这里给大伙儿分享一张Spring知识总结图(不知道怎么学习的可以收藏)
=========================================================================
=====================================================================
1.Elasticsearch是怎么使用的,有接触过大数据的应用吗?
2.项目里的数据处理是怎么做的?
3.当前要存入elasticsearch的数量过大,会在存储时造成等待,存储速度很慢,如何解决这个问题?
4.Jvm里如何判断对象死亡?
5.Jvm里如何判断类死亡?
6.Hashmap在jdk7和8里的区别。
7.多线程,synchronized和lock的区别。
8.Concurrenthashmap的数据结构讲一下,如何做到线程安全的?
9.Concurrenthashmap新插入一个对象会Hash几次?
10.讲一个简历上的项目,技术难点在哪?
11.Jvm内存分区,为什么要有新生代和老年代?
12.有做个VM内存优化吗?
13.数据库索引主键和唯一索引有什么区别?
14.聚集索引和非聚集索引的区别?
15.MySQL存储引擎innoDB和MylSAM的区别?
16.InnoDB的B+树索引叶子节点的Data域存储的是什么?MylSAM的B+树索引叶子节点的Data域存储的是主键还是物理地址?
=====================================================================
1.Hashmap说下吧。
2.线程池有哪些参数,如果满了新的线程会怎么处理?
3.你们网关有配jvm参数吗,都有哪些?
4.高并发的时候你们网关高可用怎么做的?
5.数据库用过吗,如果现在有十亿的数据给你怎么存?
6.你们的熔断降级怎么做的?
7.项目的线程池怎么配的?
8.字符串的类说一下。
9.两个字符串都是y,用equals返回什么?
10.Hashcode和equals的关系。
11.两个线程一起输出100个数怎么做?
12.SpringBoot的AOP是什么?
=====================================================================
1.分布式下redis如何保证线程安全?
2.redis持久化的方式以及区别;
3.zookeeper如何实现分布式锁、其他分布式锁怎么实现?
4.kafka的架构,如何用kafka保证消息的有序性?
5.数据库的优化包含哪些?MySQL的优化,谈两个你优化的例子。
6.最有技术难度的项目,介绍下相关核心设计流程。
7.工作中,遇见了技术瓶颈无法解决,你的解决思路?
8.未来你的职业规划是怎么样?
======================================================================
-
你觉得自己的优点是什么,有哪些缺点呢?(灵魂拷问)
-
你之前公司给的薪水是怎么样的?如果阿里给你offer,你是怎么考量这两个offer的?
-
为什么没有在之前的公司留下来?之前公司的主管是怎么评价你的?
-
除了今天这个面试,还安排了其他公司的吗?(这不是无聊吧)
======================================================================
1.HashMap和hashtable的区别有哪些?
2.Mysql有哪些索引方式
3.一个Java文件有3个类,编译后有几个class文件?
4.局部变量使用前需要显式地赋值,否则编译通过不了,为什么这么设计?
5.ReadWriteLock读写之间互斥吗?
6.Semaphore拿到执行权的线程之间是否互斥?
7.写一个你认为最好的单例模式。
8.B树和B+树是解决什么样的问题的?怎样演化过来,之间的区别?
9.写一个生产者消费者模式。
10.写一个死锁。
11.CPU 100%怎样定位?
12.Synchronized底层实现原理。
13.volatile作用,指令重排相关。
14.Spring怎样解决循环依赖的问题?
15.说说InheritableThreadLocal 的实现原理?
16.InheritableThreadLocal 是如何弥补 ThreadLocal 不支持继承的特性?
17.CyclicBarrier内部的实现与 CountDownLatch 有何不同?
=====================================================================
1.多线程先入队出队操作的线程安全?
2.为什么不使用一把锁,使用两把为何能提高并发度?
3.基于数组的阻塞队列 ArrayBlockingQueue原理。
4.讲讲对JUC 中回环屏障 CyclicBarrier 的使用?
5.CyclicBarrier内部的实现与 CountDownLatch 有何不同?
6.Semaphore 的内部实现是怎样的?
7.简单对比同步器实现,谈谈你的看法?
8.什么是Java指令重排序?
9.Java中Synchronized关键字的内存语义是什么?
10.Java中Volatile关键字的内存语义是什么?
11.什么是可重入锁、乐观锁、悲观锁、公平锁、非公平锁、独占锁、共享锁?
=====================================================================
1.说说分库与分表设计
2.分库与分表带来的分布式困境与应对之策
3.说说 SQL 优化之道
4.MySQL 遇到的死锁问题
5.存储引擎的 InnoDB 与 MyISAM
6.数据库索引的原理
7.为什么要用 B-tree
8.聚集索引与非聚集索引的区别
9.limit 20000 加载很慢怎么解决
10.选择合适的分布式主键方案
11.选择合适的数据存储方案
12.ObjectId规则是什么?
13.聊聊 MongoDB使用场景吧。
14.pring MVC运行流程是什么?
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Java)
最后
为什么我不完全主张自学?
①平台上的大牛基本上都有很多年的工作经验了,你有没有想过之前行业的门槛是什么样的,现在行业门槛是什么样的?以前企业对于程序员能力要求没有这么高,甚至十多年前你只要会写个“Hello World”,你都可以入门这个行业,所以以前要入门是完全可以入门的。
②现在也有一些优秀的年轻大牛,他们或许也是自学成才,但是他们一定是具备优秀的学习能力,优秀的自我管理能力(时间管理,静心坚持等方面)以及善于发现问题并总结问题。
如果说你认为你的目标十分明确,能做到第②点所说的几个点,以目前的市场来看,你才真正的适合去自学。
除此之外,对于绝大部分人来说,报班一定是最好的一种快速成长的方式。但是有个问题,现在市场上的培训机构质量参差不齐,如果你没有找准一个好的培训班,完全是浪费精力,时间以及金钱,这个需要自己去甄别选择。
我个人建议线上比线下的性价比更高,线下培训价格基本上没2W是下不来的,线上教育现在比较成熟了,此次疫情期间,学生基本上都感受过线上的学习模式。相比线下而言,线上的优势以我的了解主要是以下几个方面:
①价格:线上的价格基本上是线下的一半;
②老师:相对而言线上教育的师资力量比线下更强大也更加丰富,资源更好协调;
③时间:学习时间相对而言更自由,不用裸辞学习,适合边学边工作,降低生活压力;
④课程:从课程内容来说,确实要比线下讲的更加深入。
应该学哪些技术才能达到企业的要求?(下图总结)
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
本上都有很多年的工作经验了,你有没有想过之前行业的门槛是什么样的,现在行业门槛是什么样的?以前企业对于程序员能力要求没有这么高,甚至十多年前你只要会写个“Hello World”,你都可以入门这个行业,所以以前要入门是完全可以入门的。
②现在也有一些优秀的年轻大牛,他们或许也是自学成才,但是他们一定是具备优秀的学习能力,优秀的自我管理能力(时间管理,静心坚持等方面)以及善于发现问题并总结问题。
如果说你认为你的目标十分明确,能做到第②点所说的几个点,以目前的市场来看,你才真正的适合去自学。
除此之外,对于绝大部分人来说,报班一定是最好的一种快速成长的方式。但是有个问题,现在市场上的培训机构质量参差不齐,如果你没有找准一个好的培训班,完全是浪费精力,时间以及金钱,这个需要自己去甄别选择。
我个人建议线上比线下的性价比更高,线下培训价格基本上没2W是下不来的,线上教育现在比较成熟了,此次疫情期间,学生基本上都感受过线上的学习模式。相比线下而言,线上的优势以我的了解主要是以下几个方面:
①价格:线上的价格基本上是线下的一半;
②老师:相对而言线上教育的师资力量比线下更强大也更加丰富,资源更好协调;
③时间:学习时间相对而言更自由,不用裸辞学习,适合边学边工作,降低生活压力;
④课程:从课程内容来说,确实要比线下讲的更加深入。
应该学哪些技术才能达到企业的要求?(下图总结)
[外链图片转存中…(img-JHWBdWhA-1713794844562)]
[外链图片转存中…(img-hlaCqppj-1713794844562)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!