赞
踩
先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
8.用过什么mq,说一下rocketmq的消费方式,什么是死信队列
只用过rocketmq。集群和广播,面试官问只有这两种吗,我说是啊。然后大家一阵尴尬。 死信队列简单讲下就结束了。
9.说一下exchange。。
回答说我没用rabbitmq(其实我用过)。面试官原来前面听错了,以为我用过的是rabbitmq,吐槽说难怪消费方式回答只有两种。
10.ack机制,offset何时位移,broker复制原理
作为mq白痴,基本回答的都是浅尝即止。其实我activemq,rabbitmq,rocket,kafka都用过(毕竟跳槽多)。但是mq确实是我的弱项,唉,这一块儿面的我直接心态崩了,当时心想要挂要挂。
11.mysql索引优化没有走对是什么原因
终于又问我擅长的了。说了下优化器的策略,面试官说不是想问这个,就问我explain,然后我就把explain的字段都说了一遍,面试官说还是理解错了。然后说算了这题跳过,有点小尴尬
12.explain语句会执行sql吗
不会,优化器就结束了。所以rows会有误差。
13.mysql两段提交
说了下binlog和redolg以及分组。说实话,直接就说两段提交,不熟悉的人可能都不知道问的是啥啊
14.说下undolog,是不是只有rollback才会触发undolog
基于回滚保证原子性。由于innodb的锁是锁住索引,所以更新主键之类的的时候,原数据也会保留,所以更新后微commit前一条数据会变两条。 在commit的时候会回滚掉原数据,这个场景有点绕,但是我觉得我应该没回答错。
15算法
字符串数组中的字符能否拼接成为某个字符。由于不是牛客原题,当时心态又比较崩。所以这题算然不难但是最后没写出来没走通用例orz。
面完心态崩了,除了mysql,其他回答的都一般,算法也没做出来。面试官看我脸色不好,还挥手让我后面加油。当时是真的以为自己挂了。没想到最后有三面,这里感谢下2面面试官,哈哈哈。
字节跳动3面:
三面面试官是个大佬,头秃的严重,全程都挺忙的样子,有点心不在焉,大多都是聊天,问了下三分工作公司都是干啥的,自己做了什么项目。聊天10分钟,技术10分钟,算法5分钟。
1.java创建一个网络io流。会有什么操作,基于java底层或者网络或者操作系统说一下。
这块我java就简单了下(因为据说字节哪怕面的是java,也很可能做go,所以感觉多少点语言之外的可能好一点)。主要还是说了操作系统和网络。比如ringbuffer,dma,软中断硬中断之类的。
2.零拷贝说一下
就简单说了下sendfile和mmap。此外提了句senfile比较类似于网络中的对等概念,然后转到了网络
3.说一下ftp和http的区别
不了解ftp,跳过
4.文件下载一般用什么协议,udp还是tcp
udp用的多一点,两个都可以。udp主要nat穿透的话打洞容易,这一题过。
5.close wait和time wait有什么区别
这两个我回答的时候刚好说反了,哈哈哈
6.怎么保持长链接,为什么需要长链接
keep-alive。不然每次链接都要创建fd,浪费资源开销。
7.日志海量收集
开始的时候没听懂问什么就说日志用kafka啊。最后他提示多台机器,我就说mapreduce,简单说了下mapreduce,就结束了。
8.你说的主要是离线处理,如何实现实时的呢
流处理的话,flink,spark都没用过,所以不抢答了(我简历也没写我会大数据啊。怎么问这个orz)
9.算法
给出一串字符串,写出选取三个字符组合出来的所有可能。这一题是唯一一题白板,不需要运行。(这题看到我就想用dfs加回朔,但是问了下面试官说固定只选三个,我就傻傻的决定写了三层for循环,写完后面试官看了一下说你就写了三层循环啊,我说嗯)
这一面问的感觉都有点莫名其妙,很多人看了我的面经都吐槽问的都是些啥。最后就挂在这个算法上了。感觉自己傻了。内推我的老哥说我面评就一句话,说我算法表达弱,我想想就明白了,大家写算法的时候一定要想清楚,宁可写出来是错的,思路也要往最优解走啊。唉,字节也是我第一次当场写算法,以为只要结果对就行了,结果吃了不了解套路的亏。
字节总结
最后知道挂了还是很可惜,不仅已经到第三面了,最重要的是明明是能做出来的,结果自己傻x了。唉,看来是和字节无缘(感觉对不起2面面试官)。不过字节的效率还是很高的(腾讯这点就太逊啦)。可惜了我刷了这么多算法,字节面完后我就再也没有刷过一题算法了。要说最大的问题,就是之前没写过算法,所以一旦不是牛客的原题,我就会很慌。其实当时我的算法水平已经够应付社招了。至少之后没再刷过一题算法以及其他公司算法难度和字节差不多的情况下,我都是基本快速撸完,还没有哪个五分钟不能过的。也算是字节让我在算法上成了老油条吧233。
腾讯
======
在字节挂了之后的第二天就开始腾讯一面啦。字节和腾讯的面试经历感觉互为镜像。字节是我面的第一家,而腾讯则是我面试的最后一家。也是找腾讯的小伙伴内推。开始投的csig(去年12月面过然后挂了)一周后得知简历挂了,然后转投ieg,几天后简历也挂了。最后内推了pcg(居然也是个java部门),终于能面了。虽然我还是想面csig啦。
腾讯1面:
一面应该是组长,人很好。也是腾讯唯一一个和我全程视频露脸的面试官orz。是我今年所有面试经历中最好的,没有之一(另外提一下第2的话应该是微盟的2面,上海的小伙伴也可以试试微盟啊)。这一面只面技术不问项目(正好我项目不行,美得很)。技术一个小时10分钟(天呐是今年最长的一场了),算法五分钟不到结束。
1.说一下mysql的悲观锁乐观锁实现
乐观锁版本号加自旋。悲观锁就是slect for update或者 share mode
2.java里面是怎么实现的呢
悲观所主要是synchronized,走的操作系统mutex,又讲了一遍锁省级。乐观锁就是cas,底层是cpu指令。又说了下unsafe相关的内容。
3.如何取舍乐观锁悲观锁场景
当时面试心情好,就说了大实话。场景取舍类似于上厕所。小号就是乐观锁,毕竟排队一会儿就能等到,配合自旋等待就行了,如果使用悲观锁上下文切换(从厕所走到工位)花费的时间不划算。大号就是悲观锁了,毕竟等待的时间一般会很长。二者取舍就预测是否发生竞争,或者竞争的时间长不长。
4.说一下concurrenthashmap怎么实现。1.8比起1.7有什么优化
cas+synchronized,1.7则为分段锁。另外优化了寻址算法和hash算法(具体说了下两个公式)。(ps,最重要的红黑树没说,不过感觉不要紧啦)然后说了下怎么计算总数。扩容的步骤。
5. concurrenthashmap和hashtable的区别
一个最终一致,一个强一致。前者读的时候不加锁。
6.问一下网络吧。三次握手过程,能不能改为两次
经典八股文。ack,syn,半链接这些说一下就可以了。不能改为两次,如果没有中间消息丢失在没有超时机制的情况下就会产生网络的死锁。(不过终于到了我最擅长的网络啦,之前除了字节三面就没人问我网络,不愧是腾讯,嘻嘻)
7.四次挥手说一下,能不能改为三次。为什么要等待2msl
挥手过程又是八股文。可以改为三次,只要服务端开启延迟发送,第二第三步就可能变成一步。2msl是为了保证序列号不紊乱,不产生脏数据。顺便说了下序列号怎么产生的。
8.tcp的一些八股文,校验和,滑动窗口,拥塞控制,流控,nagle算法
又是基础八股文,tcp最大的缺点也就在流控了。流控还要维护整体网络,正常人一旦页面读取失败肯定会疯狂刷新页面啊。怎么可能等待一段时间再刷页面呢。
9.https加密过程
这一题我说太多了,从seesionid,sessionticket到加密套件的四个字断含义,加密套件只有两个算法需要填写,而只有一个算法需要填具体值。还有服务端是否需要发送证书,客户端是否需要发送证书。不同加密算法 ECDSA和RSA中间的过程有什么不同,讲到一半就感觉很累,不想讲了。越讲越快。
10.ca证书如何验证
标准八股文,就一般证书sha1加sha256验证证书完整性。还有就是最重要的密码套件中的算法怎么用(一般就是aes和sha256)。又讲了下证书链,多级证书。还有openssl的pem转crt等等。什么是自签证书(diss了一下12306,哈哈)。到这里网络就结束了
11.说一下redis的数据结构,zset怎么实现的
基础的5个加布隆过滤器,hyperloglog,geohash之类的。zest和字节一面说的一样。
12.zset怎么实现排名
span字段
13. 布隆过滤器怎么实现的,能否有删除功能
bitmap多个hash,增加计数器功能就能一定量实现删除功能(删除这块儿面试官不知道,所以听完有点懵逼,说自己之后在想一下我说的话)redis在这里就结束了
14.数据库的事物隔离级别,各基于什么方式实现
我三家公司一➕用的orcale一家用的pgsql,一家用的mysql,所以我就老老实实三个数据库全都说了一遍。面试官估计对pgsql的ssi很感兴趣,我赶紧说那个太学术了,我解释起来有点难就糊弄过去了233
15.常见的索引结构
lsm树——rocksdb,leveldb ; b树——mysql的innnodb,mongodb ; hash索引 —— mysql的menory,innodb。 倒排索引 —— es,sloar。还有全文索引,r树。
16.mysql的锁,锁的具体使用
主要就是行锁,表锁,页锁。然后问其他分类呢,我就说x锁,s锁,ix,is。然后又问我别的分类,我就说行锁,间隙锁,邻间锁。在具体的就是innodb我记得有四个锁,名字记不住哈哈。至于sql具体的使用,有个锁升级降级策略,那个太绕了,简单说了下面试官就放过我了。
17.mysql的组件
八股文,就强调了一句新版本已经没有缓存了。面试官投来赞许的目光,嘻嘻
18.聚集索引说一下
就索引会存全部数据,按顺序存储之类的。另外聚集一定有唯一性约束。所以不能走出change buffer
19.mvcc
1、看视频进行系统学习
这几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。
另外,我自己也珍藏了好几套视频资料躺在网盘里,有需要的我也可以分享给你:
2、读源码,看实战笔记,学习大神思路
“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。
Spring源码深度解析:
Mybatis 3源码深度解析:
Redis学习笔记:
Spring Boot核心技术-笔记:
3、面试前夕,刷题冲刺
面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。
关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:
只有技术过硬,在哪儿都不愁就业,“万般带不去,唯有业随身”学习本来就不是在课堂那几年说了算,而是在人生的旅途中不间断的事情。
人生短暂,别稀里糊涂的活一辈子,不要将就。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
试题,帮助你举一反三:
[外链图片转存中…(img-0uuv3boW-1713464094772)]
只有技术过硬,在哪儿都不愁就业,“万般带不去,唯有业随身”学习本来就不是在课堂那几年说了算,而是在人生的旅途中不间断的事情。
人生短暂,别稀里糊涂的活一辈子,不要将就。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-l2UM1gHS-1713464094772)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。