先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
正文
我在xx公司做的xx系统,客户主要是xx,项目的功能主要是提供代理雨伞,代理快递,代理订餐,图书借阅等服务,后台用的是主体架构是使用Spring
Cloud,微服务模块划分为xxx,我主要负责其中xxx几个模块的开发,
orm用的是mybatis,数据库是用的mysql,缓存是用的redis,前台用到了vue技术。共有xx个同事参与开发,整个项目持续了xx时间。
面试官会对他感兴趣的点进行提问。
让我想起小学时经常写的作文:最难忘的一件事。这可真是太那啥了,没想到小学学的知识现在派上了用场。
项目中遇到的难题,解决了之后其实都不是什么难题了。我列几个点可以参考一下:
-
跨域
-
任务调度幂等性
-
使用mq遇到的问题
-
分布式系统中的事务问题
-
内存溢出问题
当然最后还是要自己的专业技能扎实,才能获取源源不断的offer。
接下来分享一些这段时间的面试公司
做人脸识别相关的,和我上家公司做的产品差不多。
-
Hashmap原理
-
ConcurrentHashMap原理,为什么多线程条件下性能这么好
-
我从sync在1.6做的优化谈的,他从锁的粒度方面谈的
-
项目相关
-
代码优化
-
mysql优化
-
spring的aop怎么实现的
-
每天抓拍的数据量比较大,有做过分库分表吗
-
用的shardingjdbc 还有mycat,中小公司一般用shardingjdbc,
-
Rabbitmq实现原理
不知道
后面两个没有回答好吧,所以没有后续了。
这家应该是要找做全栈的吧,开头就问我好几个前端相关的,我直接懵了,理所当然的没有后续了
-
用过jquery哪些框架
-
es6语法熟悉吗
-
vue用过哪些组件
-
spring用过哪些注解
-
使用@autowired注入的时候,如果这个接口有多个实现,怎么指定注入哪一个的实现
-
eureka搭过集群吗
-
mysql优化,什么时候不会用到索引
-
select *,可能会导致不走索引
-
where后面有函数运算,导致不走索引
-
索引不适用于隐式转换的情况,比如你的SELECT * FROM T WHERE Y = 5 在Y上面有一个索引,但是Y列是VARCHAR2的,那么Oracle会将上面的5进行一个隐式的转换,SELECT * FROM T WHERE TO_NUMBER(Y) = 5,这个时候也是有可能用不到索引的。
-
like查询使用通配符开头不会用到索引
但是这些好像不是他想要的答案,我也猜不透。。
- 接受长期出差吗
做互联网金融的,公司总部在北京,我面试的时候是在成都的新网银行公司,看这个模式应该就是驻场开发了,但是公司本身不是外包。
-
springboot和spring的不同
-
springboot特性,自动装配怎么实现的
-
spring用到哪些组件,具体场景
-
spring默认是单例还是多例,全局变量会有什么问题
-
spring事务传播行为、隔离级别
-
aop实现方式,jdk动态代理和cglib动态代理区别
-
jdk lambda表达式几种使用方式,取最大和最小值,list转map,list中有重复的怎么办
线程池 有哪些参数,各个参数的意义
-
ioc容器有什么优点
-
jvm 堆栈,区别,线程共享还是线程私有的
-
springcloud组件、用途,负载均衡的几种算法
-
分布式事务怎么做的
-
mybatis一对多,多对多怎么做
-
jpa和mybatis区别
-
vmstat命令干嘛的
-
redis查看内存占用命令
-
mysql导入大量数据怎么优化
-
mysql有一条数据死锁了,怎么排查问题,mysql表死锁,怎么排查
-
nginx反向代理是什么,正向代理呢
这次面试回答得挺好的,hr也打了好几次电话说面试官对我挺有意向的,就是一顿操作猛如虎,一问工资0.9。而且我当时还是在职,要求我一周到岗,我就没去。
朋友内推的,听他说是稳了,去面就能过,结果还是翻车了。
-
java特点描述一下,继承封装多态分别是什么意思
-
synchronized和lock区别
-
ConcurrentHashMap线程安全怎么实现的
-
创建线程的几种方式,创建线程池几个参数的含义,线程饱和策略
-
sleep和wait区别
-
spring是单例还是多例,多线程并发会出现什么问题
-
SpringBoot如何解决跨域,具体怎么配置
-
全局异常捕获怎么做的
-
SpringSecurity的前后端分离,登录怎么做的
我:拦截登录的url,然后获取到用户名和密码,把这个用户名和密码交给manager,manager会交给具体的provider处理,provider会调用UserDetailsService的方法完成验证。
这里是我失误了,他说用户名和密码是通过getattribute 获取到的吗,我说是的。
-
怎么设计一个安全的对外接口
-
单线程的redis为什么这么快
-
redis持久化方式
-
什么是聚簇索引,什么是非聚簇索引
-
mysql事务隔离级别
-
你觉得你能承担独立开发的任务吗
其他问题回答得挺好的,自我感觉不错,本来以为能收到offer的,但是朋友说那个面试官觉得我不行,不能承担独立开发系统的任务,估计是第8个问题回答失误了吧,其他我觉得我回答没有问题。
面试的人比较多,所以是群面,一个面试官对应多个面试者。虽然我回答得比另外一个面试者好很多,但是没有收到offer,很迷,真的很迷。
-
介绍项目,然后基本上就围绕着项目的业务说
-
对金额的计算用什么类型,数据库中用什么类型存储
-
SpringBoot怎么自定义注解
-
mysql优化,like查询的时候,数据量很大,如果like查询以%开头,不会走索引,怎么优化。多表关联查询,怎么优化
-
代码优化怎么做的,平时重构从哪方面考虑
如果各位以后有机会面试别人的话,希望对面试者多一些尊重吧。
-
根据简历提前准备好,针对不同的level提不同的问题
-
不要问一些偏门的怪题
-
问题都是和面试职位相关的
以下是一些翻车面试,有些公司真的把我心态搞崩了,导致后面的面试都没有发挥好。
公司很小,面试官架子不小,面试全程非常不愉快,经常在我说到一半打断我,挺会嘲讽人的。面试的时候没有空间了,然后在外面靠近电梯的走廊面试的。
-
因为我的项目是做人脸识别相机相关的,然后他问我图片处理到算法识别经历了什么过程,我是直接调算法,最多把jpg格式的图片转成bgr格式,或者图片有旋转的,通过exif修正旋转。但是我的回答好像不是他要的,然后就直接打断我,说我不知道就直接说不知道
-
rabbitmq用了哪些设计模式。发布订阅模式,还有其他的吗,我不知道,有知道的朋友可以告诉我一下
-
tcp/ip协议
-
让你设计eureka,你怎么设计
-
乐观锁,悲观锁介绍一下
我:乐观锁实际上没有加锁
然后他就直接打断我了,发出一声嘲笑,问我:那你觉得什么是锁。
- jvm参数调优怎么做的
我回答的是用的微服务部署,有的微服务访问很频繁的,就多给他设置一些内存,比如网关,一些不怎么用到的,可以设置稍微小一点。然后他说:你们这就是全凭感觉瞎设置呗
哎,面完之后心情低落了很多,难受了一下午,开始质疑我自己。
Boos直聘上标榜的上市公司,我去面试的时候顶多就看见5个人在公司,办公区域很空旷很安静。
-
项目介绍
-
挑出你在项目里做的一个模块,谈谈这个模块的整个设计
这个我真不知道怎么回答,你说整个项目怎么设计的我还能画个架构图啥的给你瞅瞅,但是你这说到具体的模块设计,我不知道怎么说,最多给你说说数据库怎么设计的
- 项目并发情况
你这公司规模还问我这个,不合适吧
- 听你说对linux比较熟,环境搭建过吗(tomcat之类的),有没有遇到什么问题
大环境都成为一个技术点来问了嘛,反正我现在用docker了。
- nginx你们一般做什么,正向代理一般用来干啥
你会前端啊,说说vue用history打包之后,部署到服务器,nginx需要配置什么
-
说说你的优点
-
假如你最近加班很累(你已经很累了,要猝死了),但是项目比较急,你想请假怎么跟领导沟通。
第一次见到这样问问题的兄弟,挺有新鲜感的,其他公司翻来覆去的就是那几个问题。就是浪费了我的简历,打印一次一块钱,你还在我的简历上涂涂改改,我都不好意思要回简历了。
-
java的序列化和反序列化什么含义 生成的serialVersionUID有什么用
-
yml文件里有一些属性,怎么获取这些属性
-
有一个枚举类,有很多value和code,然后yml中的一个属性对应这个code的值,怎么通过code的值获取到这个对应value
-
我想说循环判断,但是觉得没这么简单,所以沉默了半天。。。。
然后他说枚举类里面有一个方法valueOf
啊这,是他没表达清楚还是我理解错了?
-
final干嘛的,如果有一个final Stirng a = “123”,后面还可以改变吗
-
一般io操作会捕获异常,然后在catch中释放资源,有更简单的办法吗。
-
有一个list,给它按照类里的一个属性排序
-
有个string数组,里面有些空的值,我想去除空的,怎么做
-
线上有个接口速度慢,但是本地测试环境和线上环境是一样的,数据量也是一样,接口速度却很快。怎么排查
=======================================================================
我觉得这不是一个中级开发工程师甚至高级开发工程师能做的出来的,但是面试就是要问。死记硬背考记忆力呗,只要记住其中几个常用的配置就行了。
堆大小设置
-
-Xms:初始堆大小
-
-Xmx:最大堆大小
-
-XX:NewSize=n:设置年轻代大小
-
-XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
-
-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5
收集器设置
-
-XX:+UseSerialGC:设置串行收集器
-
-XX:+UseParallelGC:设置并行收集器
-
-XX:+UseParalledlOldGC:设置并行年老代收集器
-
-XX:+UseConcMarkSweepGC:设置并发收集器
调优总结
年轻代选择
响应时间优先的应用:尽可能设大,直到接近系统的最低响应时间限制(根据实际情况选择)。在此种情况下,年轻代收集发生的频率也是最小的。同时,减少到达年老代的对象。 吞吐量优先的应用:尽可能的设置大,可能到达Gbit的程度。因为对响应时间没有要求,垃圾收集可以并行进行,一般适合8CPU以上的应用。
年老代选择
响应时间优先的应用:年老代使用并发收集器,所以其大小需要小心设置,一般要考虑并发会话率和会话持续时间等一些参数。如果堆设置小了,可以会造成内存碎片、高回收频率以及应用暂停而使用传统的标记清除方式;如果堆大了,则需要较长的收集时间。
分为三个维度来谈,可以稍微拓展一下:
-
整体框架的优化,根据模块(类)的职责做一些划分,尽量做到每个模块的接口清晰。然后就是善用六大设计原则和24种设计模式。
-
功能逻辑的优化,把内聚的逻辑独立成一个个函数,函数依赖的数据都通过参数传递,这样做到函数可重用,当上层结构做出改变的时候,修改的代码量不会太多。
-
性能优化,如果性能不敏感,代码也不是那么糟糕,那这个优化可以不用关注。
最后
由于篇幅限制,小编在此截出几张知识讲解的图解
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
最后
由于篇幅限制,小编在此截出几张知识讲解的图解
[外链图片转存中…(img-29G4hanB-1713638376166)]
[外链图片转存中…(img-Eii7QBBZ-1713638376166)]
[外链图片转存中…(img-R3GNIcw8-1713638376166)]
[外链图片转存中…(img-sZ8Lw8S4-1713638376167)]
[外链图片转存中…(img-kkCun1n6-1713638376167)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-f11i92Rn-1713638376167)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!