一、自我总结:
- 1)首先最重要的一点。对自己的要求高点。不要以简单的实习生来要求自己。你要想 你会的别人都会 你的核心竞争力是什么呢。所以楼主建议以Java高级工程师来要求自己。不会的就学嘛。人面对未知的事物 本能反应是恐惧与退缩。可当你尝试去理解它 运用它 你会发现其实也没那么难的。
- 2)带着好奇心去思考问题。不要停留在问题表面。要多想想为什么用这个技术。不要和我说你会什么语言和框架。语言和框架本身只是工具而已,重要的是框架背后的设计模式与原理,抛开设计模式降低模块耦合外,个人觉得核心就是数学。因为不同的数学思维可能造成代码的质量不在一个层次。(说白了就是时间空间复杂度的问题)。
Java主要分为三个部分:
- 1)Java基础(Java面向对象思想)各种Jar包熟练调用以及运用。
- 2)Java框架的使用 SSM,SpringBoot。。等等一系列。
- 3)JDK常见源码(比如HashTable HashMap) 优缺点。JVM Java虚拟机 Java高并发线程安全策略 Spring各种框架源码的实现。
二、源码分析思路:
- 1)由于源码包含太多抽象类 很多都是一层又一层的封装(先看个大体流程 再去关注具体的抽象方法的具体实现)。当学习一个框架时,建议是了解它的基本功能,然后自己去跑个Demo 然后再去分析它的底层。
- 2)比如Spring,主要功能是Ioc 丶AOP。首先你要知道Ioc丶Aop的功能是什么。再其次Ioc怎么去加载 管理 销毁 Bean。这个Bean是怎么加载的 存放再哪里 怎么回收等等一些列问题。为什么用Aop,实现原理是什么,Java动态代理与cglib的优缺点是什么。
三、分布式思维:
有问题就去解决问题。没有问题就是最大的问题。(为了防止单点宕机一般采用分布式。为了缓解数据库压力 我们会引用缓存技术)
通常系统都是采用单点模式。所以当出现宕机的时候你怎么去解决它。最常见是采用分布式方法。多起几个应用。一个挂了 自动切换到另一个。但是分布式也有很多问题值得我们思考。
分布式一般遵循CAP(一致性,可用性,分区容错性)原则,Base原则。
- 1)Session共享问题
- 2)分布式事务管理怎么解决
- 3)分布式锁怎么解决。
- 4)缓存雪崩 问题怎么解决。
四、系统的设计主要围绕两个点:1)安全 2)性能 围绕这两个点逐渐延申:
常见安全:
- 1)XSS攻击
- 2)CSRF(表单重复提交)
- 3)SQL注入
- 4)反盗链怎么解决
性能:
- 1)Nginx负载均衡
- 2)消息中间件
- 3)缓存Redis
- 4)分布式架构
总结
就写到这了,写的有点多了,也算是给这段时间的面试做一个总结,查漏补缺,祝自己好运吧,也希望正在求职或者打算跳槽的 程序员看到这个文章能有一点点帮助或收获,我就心满意足了。多思考,多问为什么。希望小伙伴们早点收到满意的offer! 越努力越幸运!