赞
踩
先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
**1、手撕代码。牛客题霸上的原题,可以去看看:**NC3链表中环的入口节点
**2、**Redis 的数据结构及使用场景
(1)String字符串:字符串类型是 Redis 最基础的数据结构,首先键都是字符串类型,而且 其他几种数据结构都是在字符串类型基础上构建的,我们常使用的 set key value 命令就是字符串。常用在缓存、计数、共享Session、限速等。
(2)Hash哈希:在Redis中,哈希类型是指键值本身又是一个键值对 结构,添加命令:hset key field value。哈希可以用来存放用户信息,比如实现购物车。
(3)List列表(双向链表):列表(list)类型是用来存储多个有序的字符串。可以做简单的消息队列的功能。
(4)Set集合:集合(set)类型也是用来保存多个的字符串元素,但和列表类型不一 样的是,集合中不允许有重复元素,并且集合中的元素是无序的,不能通过 索引下标获取元素。利用 Set 的交集、并集、差集等操作,可以计算共同喜好,全部的喜好,自己独有的喜好等功能。
(5)Sorted Set有序集合(跳表实现):Sorted Set 多了一个权重参数 Score,集合中的元素能够按 Score 进行排列。可以做排行榜应用,取 TOP N 操作。
3、zset跳表的数据结构
4、ZAB协议
ZAB协议包括两种基本的模式:崩溃恢复和消息广播。当整个 Zookeeper 集群刚刚启动或者Leader服务器宕机、重启或者网络故障导致不存在过半的服务器与 Leader 服务器保持正常通信时,所有服务器进入崩溃恢复模式,首先选举产生新的 Leader 服务器,然后集群中 Follower 服务器开始与新的 Leader 服务器进行数据同步。 当集群中超过半数机器与该 Leader 服务器完成数据同步之后,退出恢复模式进入消息广播模式,Leader 服务器开始接收客户端的事务请求生成事物提案来进行事务请求处理。
5、volatile作用
(1)volatile在多处理器开发中保证了共享变量的“ 可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。(共享内存,私有内存)
(2)volatile关键字通过“内存屏障”来防止指令被重排序。
1、手撕代码。牛客题霸上的原题,可以去看看:NC116把数字翻译成字符串
2、进程的组成部分
进程由进程控制块(PCB)、程序段、数据段三部分组成。
3、Redis的应用场景
(1)缓存
(2)共享Session
(3)消息队列系统
(4)分布式锁
4、单线程的Redis为什么快?
(1)纯内存操作
(2)单线程操作,避免了频繁的上下文切换
(3)合理高效的数据结构
(4)采用了非阻塞I/O多路复用机制
5、事务的基本要素**(事务特性)**
(1)原子性:事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行
(2)一致性:事务开始前和结束后,数据库的完整性约束没有被破坏。
(3)隔离性:同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。
(4)持久性:事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。
6、CAP定理
一个分布式系统不可能同时满足以下三种,一致性,可用性,分区容错性。在此ZooKeeper保证的是CP,ZooKeeper不能保证每次服务请求的可用性,在极端环境下,ZooKeeper可能会丢弃一些请求,消费者程序需要重新请求才能获得结果。 另外在进行leader选举时集群都是不可用,所以说,ZooKeeper不能保证服务可用性。
7、HashMap和ConcurrentHashMap区别
(1)由于HashMap是线程不同步的,虽然处理数据的效率高,但是在多线程的情况下存在着安全问题,因此设计了CurrentHashMap来解决多线程安全问题。
(2)HashMap在put的时候,插入的元素超过了容量(由负载因子决定)的范围就会触发扩容操作,就是rehash,这个会重新将原数组的内容重新hash到新的扩容数组中,在多线程的环境下,存在同时其他的元素也在进行put操作,如果hash值相同,可能出现同时在同一数组下用链表表示,造成闭环,导致在get时会出现死循环,所以HashMap是线程不安全的。
8、Kafka判断一个节点还活着的两个条件
(1)节点必须可以维护和 ZooKeeper 的连接,Zookeeper 通过心跳机制检查每个节点的连接
(2)如果节点是个 follower,他必须能及时的同步 leader 的写操作,延时不能太久。
社招 JAVA 1年
1、 NC16 判断二叉树是否对称
2、NC32 求平方根
3、NC2 重排链表
社招 JAVA 2年
腾讯一面:(总耗时:120min)
1、jvm内存结构介绍、代码调用过程中的内存流程;
2、java如何分配内存,多线程呢?
3、Spring如何加载注解
4、Spring启动流程、bean实例化
5、xxljob原理,使用流程
6、OOM定位、解决方式,流程
7、讲项目xxxxx
8、redis pipline是全双工还是半双工
9、云原生是什么?(这个真不会)
10、rabbitMQ原理、流程、用途
11、rabbitMQ如何保证数据到达
12、Http 1.0 1.1 2.0
13、注解使用、如何扫描
14、cas原理,缓存一致性原理(volatile、synchronized、可见性)
16、jedis是否使用链接池,如何处理有序数据
算法:
go代码求输出(面试官让我按自己理解猜…)
leetcode 74. 搜索二维矩阵
1、项目简述(blablabla…);
2、MQ选型;(RocketMQ、ZeroMQ、Kafka、RabbitMQ优缺点)
3、消息可靠性保证;(数据幂等、高可用镜像集群、Confirm机制、事务机制、持久性)
4、Redis类型及源码简述;(String、Hash、ZSet、Set、Dict、GEO、HyperLogLog、BloomFilter、Stream、Bitmap等)
5、MySql和MongoDB区别;( blablabla)
6、JVM中如何扫描对象;(root、hotspot算法、cardTable)
7、GC算法;(复制、标记清除、标记整理、内存碎片及解决方式)
8、代码运行流程对应JVM内部流程;(几个关键字:栈桢、操作数栈、)
9、红黑树;(这个简单,自己吹牛逼…;红黑节点、特性等)
10、线程&协程;(blabla…)
11、阻塞IO、非阻塞IO、同步IO、异步IO、IO多路复用(区别及内部流程、用户态内核态blablabla…);
12、死锁及打破方式;(互斥、请求与保持、循环等待、阻塞;超时、银行家算法)
13、一致性Hash算法详解;(热点分布、2的31个槽、虚拟节点等)
14、看什么书;(随便挑一本,开始背书)
15、对c++和java看法;(吹牛逼,吹到面试官high点)
16、自己技术发展方向;(技术or管理)
17、读过什么组件源码;(redis、JVM、MyBatis、Spring及相关基本都读过、sharding-jdbc等)
18、随便讲个源码组件源码结构及内部核心原理;(redis、MyBatis等吹牛逼)
算法:
a、链表相加;
b、leetcode 1567 乘积为正数的最长子数组长度;(滑动窗口、贪心分治法求解)
两轮面试都是电面。
一面总体上还是围绕项目架构、Java基础、JVM、并发编程、数据库操作、中间件技术和Dubbo服务治理框架等展开,可能因为是云安全部门,有一半时间在考察JVM,还提问了一些编译优化的知识。
一面结束后很快安排了二面,相对一面,二面的问题更深入,问题比较刨根问底,更加注重对一些技术细节的理解和把握。比如数据库操作,面试官会详细的问你数据库插入和删除一条数据的过程在底层是如何执行的,项目里配置了读写分离,也会比较深入的就实现方法和底层逻辑展开讨论。
面试问题:
1、JVM内存分代。
2、Java 8的内存分代改进。
3、深入分析了Classloader,双亲委派机制。
4、JVM的编译优化。
5、对Java内存模型的理解,以及其在并发中的应用。
6、指令重排序,内存栅栏等。
7、HashMap的并发问题。
8、了解LinkedHashMap的应用吗?
9、在工作中遇到过哪些设计模式,是如何应用的?
爱奇艺的面试都是二对一,每轮面试两个面试官。
一面比较顺利,主要是Java基础,Spring原理,Java NIO,并发和集合框架等,可能是因为视频网站,爱奇艺考察网络原理的知识多,比如TCP/IP协议、长连接与短连接等。
一面提到了自己可能会在下半年学习大数据与机器学习相关的知识,二面就在这上面栽了跟头,问了很多海量数据的问题。
面试问题:
1、手撕代码。牛客题霸上的原题,可以去练练:NC22合并两个有序的数组。
2、TCP/IP协议。
3、长连接与短连接。
4、mapreduce过程。
5、多路归并的时间复杂度。
6、海量url去重类问题。
7、Java NIO使用。
7、倒排索引的原理。
8、对分词技术的了解。
面试中给了一个具体场景,考察对MapReduce过程的理解,比如Map阶段和Reduce阶段是如何进行的等,Reduce阶段面试官希望分析给出一个多路归并的时间复杂度,用外排序的知识简单分析了一下,回答的不太好。回来以后搜索了胜者树和败者树的优化,发现这里面的内容还挺多, 深刻体会到有些知识点如果平时掌握的不够全面深刻,很难信手拈来 。
JAVA 1年
一面:
1、final是干嘛的,用在什么地方,你们项目中有用到过吗
2、有那些集合,一个一个说linkedlist,arraylist,hashmap
3、说一下hashmap基本结构,和hashmap的扩容,hashmap的并发
4、说一下jvm的垃圾回收器,有那些,算法有哪些,他们的优缺点
5、线程池用过吗?用来干什么?说一下线程池。
6、做过sql优化吗(我简历上写了),说一下吧。
7、mysql的索引说一下,b+树的优缺点
8、说一下dubbo的架构(简历上有写)
9、说一下kafka的topic,partition,broker概念
10、kafka的主从选举机制
11、redis用过吗?有哪些数据类型,常用什么数据类型?我有说zset,那说一下zset的底层原理吧
12、linux中你用哪些命令
13、linux中想看一个文件中某个关键字出现的次数(我不会,后面还会问到。。)
二面:
直接先做题:leetcode70 跳台阶,这个我做过所以写的很快,还说了下递归和动态规划的优缺点,
然后特别,面试官发给了一个飞书文档的连接,上面有很多实际的问题,大致有这些:
1、给一个实习生写的代码,请指出他的问题
2、给定一个订单和商品的要求,请设计表结构,然后有三个问题,分别写3条sql来。根据联合索引来设计索引。
3、接着第二题,用redis来存储上面问题查询出来的结果,该怎么写redis
然后:
1、问一个之前问过你当时你没回答上来的: linux中想看一个文件中某个关键字出现的次数,嘻嘻,那天面试完我去百度了!
2、说一下redis的主从复制,缓冲区大小,超过缓冲区大小怎么办?
3、tcp三次握手,为什么三次,为什么四次
4、tcp快速恢复,快速启动,慢启动
5、进程和线程的区别(这一部分没细问,他说看你是搞java,如果是搞c的会问的更加深入。)
我算法题做的比较快,问完上面的问题后就花了30分钟,面试官看太快了,就说你还有什么比较拿手的,我就说了说我做过一点mysql的治理。然后又聊了10分钟
三面:
直接先做题:合并两个有序链表。。
1、你做过哪些项目?
2、说一个你觉得难度最大的项目,你是怎么解决技术难点问题的。
3、你做过微服务项目吗?用的什么技术?
4、你说一下springcloud 的 hytrix的原理是什么?
5、说一下dubbo的原理。
7、知道微服务网格吗,知道微服务治理吗?
8、你的优点和缺点
做了笔试题,一面针对笔试和简历提问了一些基础问题。
二面技术经理就比较偏架构和中间件的应用,提问了项目,主要考察了服务治理和消息队列等中间件使用的问题。
面试问题:
1、手撕代码。牛客题霸上的原题,可以去看看:NC63扑克牌顺子。
2、消息中间件如何解决消息丢失问题
3、Dubbo的服务请求失败怎么处理
4、重连机制会不会造成错误
5、对分布式事务的理解
6、深入分析几个设计模式
面试最后提问了一个不定长字符串转为定长字符串的问题,这个简单的问题被我想复杂了,没有Get到面试官的点,考虑了唯一性,性能等,扯了一大堆。
也提醒一下大家,面试过程中要保持清醒,不要有思维定式,除非是底层研发岗位,社招对算法的考察不会特别难,用正常的思路去解决就可以。
三轮技术面,大部分是实际场景的算法和系统设计类问题。
面试问题:
1、HTTP请求的报文格式Spring的事务实现原理
2、实际场景问题,大量用户数据如何在内存中排序和去重
3、缓存机器增删如何对系统影响最小,一致性哈希的实现
4、Redis持久化的几种方式
5、Redis的缓存失效策略
7、实际场景问题解决,典型的TOP K问题
8、实际场景问题,海量登录日志如何排序和处理SQL操作,主要是索引和聚合函数的应用
做了一份笔试题,主要考察Java基础,数据库,设计模式以及数据结构,要求写出B-Tree的节点结构,算法题目是一道等概率抽奖的题目,用蓄水池抽样算法解决了。
面试问题:
1、SQL语句编写。
2、MySQL的几种优化。
3、Spring行级锁。
4、Spring衍生的相关其他组件整理。
5、RMI的几种协议和实现框架。
6、BTree相关的操作。
7、数据库锁表的相关处理。
8、考察跳台阶问题。
另外面试过程中询问了一些工作中用到框架和组件的版本等细节问题,平时没太关注,后来思考了一下,对开源组件的应用,版本的管理很重要。
1.MySQL or查询能使用索引吗,为什么能或者不能,说出原理?
2.如何实现cookie跨域?非子域名
3.两个文件a,b,a中包含b中所有的文件行,b中包含a中所有的文件行,满足这两个条件a和b相等,怎么用程序来实现?
4.二维求组,由a【0】【0】到a【n】【n】会有多少种情况,只考虑从左到右,从上到下
5.多台服务器,一个域名,客户端请求到具体某一台服务器的全过程,尽可能的细
6.如何提取具有一定规则的日志行,并做技术统计
1.手撕代码。牛客上的原题,可以去看看:NC13**二叉树的最大深度。**
2.JVM内存查看与分析,编写内存泄露实例
3.线上CPU100%,如何定位和排查问题
4.如何在运行时确定对象类型?
5.引用传递和值传递
6.类加载过程,如何获得当前对象的****ClassLoader
7.Git操作,Maven多[项目]聚合
8.10万个ip段如何快速查找
**9.Java内存模型,volatile和****i++**的线程安全
10.线程池实现原理,Lock机制的实现
(1)其实java线程池的实现原理很简单,说白了就是一个线程集合workerSet和一个阻塞队列workQueue。当用户向线程池提交一个任务(也就是线程)时,线程池会先将任务放入workQueue中。workerSet中的线程会不断的从workQueue中获取线程然后执行。当workQueue中没有任务的时候,worker就会阻塞,直到队列中有任务了就取出来继续执行。
11.JVM对final关键字的编译优化
12.ConcurrentHashMap深入分析
本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们:
目录:
Java面试核心知识点
一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!
Java面试核心知识点
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
**i++**的线程安全
10.线程池实现原理,Lock机制的实现
(1)其实java线程池的实现原理很简单,说白了就是一个线程集合workerSet和一个阻塞队列workQueue。当用户向线程池提交一个任务(也就是线程)时,线程池会先将任务放入workQueue中。workerSet中的线程会不断的从workQueue中获取线程然后执行。当workQueue中没有任务的时候,worker就会阻塞,直到队列中有任务了就取出来继续执行。
11.JVM对final关键字的编译优化
12.ConcurrentHashMap深入分析
本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们:
目录:
[外链图片转存中…(img-U0F9kuST-1713207304222)]
Java面试核心知识点
一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!
[外链图片转存中…(img-pZojQmxX-1713207304222)]
Java面试核心知识点
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-UHhwLXsj-1713207304223)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。