JAVA程序员必备知识汇总

这是结合自己过往真实面试以及工作经历,思考总结出来的知识内容点。以后也会基于这些知识点进行知识体系的梳理。

 

对于项目:

了解系统主要做什么,解决什么问题,有哪些模块,分别的作用是什么,核心业务处理的流程以及核心业务对应的技术方案分别是什么,为什么采用这个方案,有没有其他方案,优缺点是什么;

面向的用户是谁,如何给用户提供价值,是不是只有这一种方式,与其他方式对比的优缺点是什么?

自己负责的模块和主要工作内容在整个项目中的价值是什么,如何体现,如何做到超越本职工作的期望。

 

对于技术:

工作中遇到的问题记录。包括生产环境的技术问题,开发过程的管理问题,与其他部门沟通协调的协作问题。

工作中需要梳理系统整体的架构搭建,核心模块核心流程核心节点的技术源码实现,业务架构,业务流程的了解。这些都最好通过画图,抽象,然后针对具体某个节点进行具体深入。

工作中需要注意系统的用户量,QPS,订单量,日活量,日订单金额...等等,就是一些能衡量系统规模和特点的核心指标。

 

算法。常见排序算法的实现。基础算法题的解题思路。

设计模式。Java 中,各种框架中,各种中间件中使用的设计模式有哪些?思路怎样的?解决什么场景下的问题?如何实现与使用?实际项目中如何使用?理解的比较好的设计模式有哪些?如何实现一个工厂模式?

Java 基础。HashMap 的数据结构,工作原理,扩容过程与重哈希过程。集合有哪些常用的数据结构?HashSet 与 HashMap 的区别与使用场景?HashMap 是线程安全的吗,为什么?线程安全的集合有哪些,如何做到线程安全?ArrayList 与 LinkedList 的区别,它们插入元素的时间复杂度?ArrayList 的扩容发生在什么时候?扩容流程是怎样的?Map 有什么特点?有哪些保证有序的 Map,LinkedHashMap?

IO流的了解,常见的 IO 类。阻塞 io 与非阻塞 io 的区别?Object 类的方法有哪些?equals 与 hashcode 的区别与作用?创建对象的方式,除了 new 还有哪些方式,哪种创建效率高?工作中什么时候会用到反射机制,Java 动态代理的理解,与 Cglib 动态代理的区别?

JVM。引用类型有哪些?有哪些方面的了解?实际中遇到的问题,优化的过程?了解 JVM 一些命令的作用?GC 算法有哪些,什么场景下使用,为什么?类加载过程,机制,双亲委派模型的理解?

线程池。默认有几种线程池;核心参数,执行流程,线程如何超时回收?允许设置的最大线程数是多少?无边界队列,最终线程能开启多少个?阻塞队列有哪几种,各自有什么特点,有界队列与无界队列有哪些?LinkedBlockingList 是有界的。线程池在初始化完的时候有没有线程,没有的?核心线程会被回收吗?如果想回收核心线程,怎么实现?如何停止一个正在运行中的线程?

并发编程。项目中的多线程的使用场景?创建线程的方式,Callable 与 Runnable 区别?如何保证多线程安全?线程如何停止?死锁是什么,发生条件是什么,如何发现?如何避免?乐观锁与悲观锁的区别?可重入锁的了解与实现原理?有哪些锁?AQS的了解,实现了哪些锁?公平锁与非公平锁如何实现?锁升级过程?volatile 的理解,可以保证原子性吗,为什么?final 修饰的变量的对象是多线程安全的吗?为什么呢?常量可以被修改吗?synchronized 是可重入的锁吗?锁升级的过程?

Spring,SpringMVC,SpringBoot 的区别。循环依赖问题,什么时候会出现这个问题,什么时候不会出现?Spring 如何解决这个问题?Spring Bean 的加载过程,生命周期?Spring MVC 的加载过程与工作原理?InitializingBean 与 init-method 方法的有什么区别?spring 为什么加一个 @Transaction 注解就能创建事务和回滚?嵌套事务如何在数据库事务实现?SpringBoot 的常用注解?SpringBootApplication 注解实现的三个注解?SpringBoot 的加载 Bean 的流程?怎么理解 SpringBoot 的 starters?SpringBoot 如何想在启动的时候运行一些特定的东西,比如替换默认的容器 tomcat?

Hibernate 与 Mybatis 的区别与工作原理。底层的运行原理,比如 DAO 文件与对应 XML 文件的映射怎么做到的,四种 Handler。$ 与 # 的区别?既然 $ 有 SQL 注入的问题,为什么还要保留它?

 

关系型数据库。Mysql,Oracle。关系型数据库与非关系型数据库的区别?innodb 存储引擎的了解?与 Myisam 的区别?b+ 树与 b 树的区别?平时如何优化 MySQL?explain 主要关注哪些指标?索引覆盖是什么?回表查询的了解?什么是聚簇索引,什么是唯一索引?聚簇索引与非聚簇索引的区别?索引失效的条件有哪些?模糊查询应该注意什么?说下覆盖索引?联合索引需要注意的?最左匹配原则是什么?索引下推的了解?如何判断一条 sql 语句有没有用到索引?联合索引 abc,用 or 连接有影响吗?select a from table where b,c 有用到索引吗?Mysql 的分库分表有做吗?

 

非关系型数据库。Hbase,Mongodb。

 

大数据。Hadoop,MapReduce的了解与使用。开源ky,流式的构建与查询,查询存储引擎的优化与构建。

 

redis 的数据结构有哪些?用的比较多有哪些?在哪些场景下使用?如何使用,比如对象如何使用 hash 数据结构保存,用 string 数据结构保存哪些数据?为什么不把对象转为 json 字符串,然后用 string 保存呢?同样的数据,string 和 hash 保存哪个耗时长一点?

redis 常见的问题,比如数据在 redis 与 mysql 数据不一致的情况,缓存雪崩,缓存击穿,缓存穿透的问题,出现这些问题后如何处理?生产环境批量删除大量的 key 可以吗,del 操作会有影响?

redis 为什么这么快?线程模型?

redis 的持久化机制?

redis 的过期策略与淘汰策略是什么?如何选用?什么时候删除缓存?

redis 如何进行集群配置?主从部署做缓存会有什么问题?主节点挂掉还可以用吗?如何做到?如何缓存数据超过物理内存,会进行哪些操作?就是有哪些内存淘汰策略和过期策略?

 

消息中间件。RabbitMQ,RocketMQ,Kafka... 等等,之间的区别是什么?它们的实现原理,使用方式?如何保证消息不丢?

 

SpringCloud 了解,原理,适合哪些场景?

Eureka 为什么说它是 AP 模型,如何保证它的高可用,为什么要这样实现?

Config 为什么不用 Apollo,还了解哪些配置中心,区别是什么?

Gateway 为什么不用 Zuul,区别是什么?主要做什么功能,鉴权的权限管理,路由?

Feigin 它的原理是什么,如何与 Hystrix 配合,与 Ribbon 配合使用?配置 Feigin 的时候需要注意哪些点?如何配置对应超时时间?

Ribbon 它的原理是什么,如何做到负载均衡的作用,有哪些负载均衡策略,默认是什么,如何实现?如何自定义负载均衡算法?

Hystrix 为什么要做熔断?如何做到熔断的作用?如何使用?什么时候触发熔断,什么时候又打开?

SpringCloud 如何做到容错的?

 

Dubbo 与 SpringCloud 的区别是什么?Dubbo 的了解?

 

如何限流?令牌桶限流的原理,使用?

 

分布式事务与分布式锁。

 

系统监控如何做的?系统的链路跟踪如何做的?

 

系统的设计流程,思考。

 

Maven 的设计思路与实现。

 

异步与同步编程的优缺点。

 

思考方式:

技术点,功能是什么,适用于什么场景使用,实现原理是什么,如何使用?

多深入源码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值