第1篇 Java核心知识点 1<br/> 第1章 Java基础知识 2<br/> 1.1 数据类型 2<br/> 1.1.1 为什么要设计封装类,Integer和int有什么区别 2<br/> 1.1.2 为什么“1000==1000”为false,“100==100”为true 3<br/> 1.1.3 new String("hello")之后,到底创建了几个对象 6<br/> 1.1.4 String、StringBuffer、StringBuilder的区别是什么 8<br/> 1.2 Object对象 9<br/> 1.2.1 如何理解Java对象的创建过程 9<br/> 1.2.2 什么是深克隆和浅克隆 10<br/> 1.2.3 强引用、软引用、弱引用、虚引用有什么区别 12<br/> 1.2.4 一个空的Object对象到底占多大内存 14<br/> 1.2.5 为什么重写equals()方法就一定要重写hashCode()方法 15<br/> 1.3 其他特性 17<br/> 1.3.1 请对比一下Java和JavaScript的区别 17<br/> 1.3.2 什么是受检异常和非受检异常 18<br/> 1.3.3 fail-fast机制与fail-safe机制分别有什么作用 20<br/> 1.3.4 如何理解序列化和反序列化 21<br/> 1.3.5 什么是SPI,它有什么用 22<br/> 1.3.6 finally语句块一定会执行吗 24<br/> 1.3.7 什么是内存溢出,什么是内存泄漏 25<br/> 第2章 并发编程与多线程 27<br/> 2.1 J.U.C和锁 27<br/> 2.1.1 什么是AQS 27<br/> 2.1.2 如何理解AQS的实现原理 28<br/> 2.1.3 AQS为什么要使用双向链表 29<br/> 2.1.4 什么是CAS 31<br/> 2.1.5 什么是乐观锁,什么是悲观锁 32<br/> 2.1.6 什么条件下会产生死锁,如何避免死锁 33<br/> 2.1.7 synchronized和Lock的区别是什么 35<br/> 2.1.8 什么是可重入锁,它的作用是什么 37<br/> 2.1.9 ReentrantLock的实现原理是什么 38<br/> 2.1.10 ReentrantLock是如何实现锁的公平性和非公平性的 39<br/> 2.1.11 说说你对行锁、间隙锁、临键锁的理解 40<br/> 2.1.12 如何理解Java中令人眼花缭乱的各种并发锁 42<br/> 2.1.13 阻塞队列被异步消费,怎么保持顺序 51<br/> 2.1.14 基于数组的阻塞队列ArrayBlockingQueue的实现原理是什么 52<br/> 2.2 多线程与线程池 53<br/> 2.2.1 Thread和Runnable的区别是什么 53<br/> 2.2.2 什么是守护线程,它有什么特点 54<br/> 2.2.3 BLOCKED和WAITING两种线程状态有什么区别 55<br/> 2.2.4 为什么启动线程不能直接调用run()方法,调用两次start()方法会<br/> 有什么后果 56<br/> 2.2.5 谈谈你对Java线程5种状态流转原理的理解 58<br/> 2.2.6 谈谈你对线程池的理解 60<br/> 2.2.7 Java有哪些实现线程池的方式 62<br/> 2.2.8 线程池是如何回收线程的 63<br/> 2.2.9 线程池是如何实现线程复用的 64<br/> 2.2.10 线程池如何知道一个线程的任务已经执行完成 65<br/> 2.2.11 当任务数超过线程池的核心线程数时,如何让任务不进入队列 66<br/> 2.2.12 什么是伪共享,如何避免伪共享 67<br/> 2.2.13 wait和notify为什么要写在synchronized代码块中 69<br/> 2.2.14 wait和sleep是否会触发锁的释放及CPU资源的释放 70<br/> 2.2.15 volatile关键字有什么用,它的实现原理是什么 71<br/> 2.2.16 说说你对CompletableFuture的理解 73<br/> 2.2.17 谈谈你对ThreadLocal实现原理的理解 75<br/> 2.2.18 CountDownLatch和CyclicBarrier有什么区别 77<br/> 2.2.19 谈谈你对Happens-Before的理解 79<br/> 2.3 线程安全 81<br/> 2.3.1 谈谈你对线程安全的理解 81<br/> 2.3.2 Java保证线程安全的方式有哪些 82<br/> 2.3.3 如何安全中断一个正在运行的线程 83<br/> 2.3.4 SimpleDateFormat是线程安全的吗 84<br/> 2.3.5 并发场景中,ThreadLocal会造成内存泄漏吗 85<br/> 第3章 集合原理 89<br/> 3.1 ArrayList 89<br/> 3.1.1 ArrayList是如何实现自动扩容的 89<br/> 3.1.2 谈谈ArrayList、Vector和LinkedList的存储性能及特性 91<br/> 3.2 HashMap 92<br/> 3.2.1 单线程下的HashMap工作原理是什么 92<br/> 3.2.2 HashMap是如何解决Hash冲突的 97<br/> 3.2.3 HashMap什么时候扩容,如何自动扩容 99<br/> 3.2.4 为什么HashMap会产生死循环 101<br/> 3.2.5 HashMap和TreeMap的区别是什么 104<br/> 3.2.6 为什么ConcurrentHashMap的key不允许为null 106<br/> 3.2.7 谈谈你对ConcurrentHashMap底层实现原理的理解 108<br/> 3.2.8 ConcurrentHashMap是如何保证线程安全的 111<br/> 第4章 JVM原理 115<br/> 4.1 JVM介绍 115<br/> 4.1.1 如何理解Java虚拟机,它的结构是如何设计的 115<br/> 4.1.2 什么是双亲委派机制 119<br/> 4.2 内存管理 121<br/> 4.2.1 JVM如何判断一个对象可以被回收 121<br/> 4.2.2 谈谈你对JVM中主要GC算法的理解 123<br/> 4.2.3 JVM分代年龄为什么是15次 125<br/> 4.2.4 JVM为什么使用元空间替换永久代 126<br/> 第5章 I/O与网络编程 129<br/> 5.1 I/O基础 129<br/> 5.1.1 Java有几种文件拷贝方式,哪一种效率最高 129<br/> 5.1.2 I/O和NIO的区别是什么 130<br/> 5.1.3 谈谈你对I/O多路复用机制的理解 131<br/> 5.2 网络编程 135<br/> 5.2.1 什么是网络四元组 135<br/> 5.2.2 TCP为什么要设计3次握手 137<br/> 5.2.3 Cookie和Session有什么区别 138<br/> 第6章 设计模式 140<br/> 6.1 单例模式 140<br/> 6.1.1 在Java中实现单例模式有哪些方法 140<br/> 6.1.2 哪些情况下的单例对象可能会被破坏 143<br/> 6.1.3 在DCL单例写法中,为什么主要做两次检查 147<br/> 6.1.4 哪些场景不适合使用单例模式 150<br/> 6.2 代理模式 151<br/> 6.2.1 什么是代理,为什么要用动态代理 151<br/> 6.2.2 JDK动态代理为什么只能代理有接口的类 153<br/> 6.3 责任链模式 155<br/> 第2篇 框架源码与原理 159<br/> 第7章 Spring全家桶 160<br/> 7.1 Spring框架 160<br/> 7.1.1 为什么要使用Spring框架 160<br/> 7.1.2 Spring IoC的工作流程是怎样的 162<br/> 7.1.3 Spring中BeanFactory和FactoryBean的区别是什么 164<br/> 7.1.4 谈谈你对Spring Bean的理解 165<br/> 7.1.5 Spring Bean的定义包含哪些内容 169<br/> 7.1.6 Spring中Bean的作用域有哪些 172<br/> 7.1.7 如何叙述Spring Bean的生命周期 174<br/> 7.1.8 Spring中的Bean是线程安全的吗 178<br/> 7.1.9 Spring有几种依赖注入的方式 179<br/> 7.1.10 Spring如何解决循环依赖问题 180<br/> 7.1.11 Spring中用到了哪些设计模式 183<br/> 7.1.12 Spring中的事务传播行为有哪些 184<br/> 7.1.13 导致Spring事务失效的原因有哪些 185<br/> 7.1.14 Spring中实现异步调用的方式有哪些 187<br/> 7.1.15 谈谈你对Spring AOP原理的理解 190<br/> 7.2 Spring MVC框架 193<br/> 7.2.1 说说你对Spring MVC的理解 193<br/> 7.2.2 简述Spring MVC的核心执行流程 194<br/> 7.2.3 谈谈你对Spring MVC中9大组件的理解 197<br/> 7.2.4 Spring中@Autowired和@Resource的区别 202<br/> 7.3 Spring Boot框架 207<br/> 7.3.1 为什么越来越多的人选择Spring Boot 207<br/> 7.3.2 如何理解Spring Boot约定优于配置 210<br/> 7.3.3 Spring Boot自动装配机制的实现原理是什么 211<br/> 7.3.4 如何理解Spring Boot中的Starter 213<br/> 7.4 Spring Cloud框架 214<br/> 7.4.1 谈谈你对Spring Cloud的理解 214<br/> 7.4.2 谈谈Eureka Server数据同步原理 215<br/> 7.4.3 简述Nacos配置更新的工作流程 216<br/> 第8章 互联网常用框架 218<br/> 8.1 Dubbo框架 218<br/> 8.1.1 简述Dubbo和Spring Cloud的优缺点对比 218<br/> 8.1.2 Dubbo的服务请求失败怎么处理 220<br/> 8.1.3 Dubbo是如何动态感知服务下线的 221<br/> 8.2 Netty框架 223<br/> 8.2.1 谈谈你对Netty中Reactor模式的理解 223<br/> 8.2.2 Netty是如何实现零拷贝的 225<br/> 8.2.3 为什么Netty线程池默认大小为CPU核数的两倍 228<br/> 8.2.4 谈谈你对Netty中Pipeline工作原理的理解 229<br/> 8.3 MyBatis框架 231<br/> 8.3.1 谈谈你对MyBatis缓存机制的理解 231<br/> 8.3.2 MyBatis中#号和$号的区别是什么 233<br/> 8.3.3 MyBatis是如何进行分页的 234<br/> 第3篇 分布式与中间件 237<br/> 第9章 分布式与微服务 238<br/> 9.1 分布式通信 238<br/> 9.1.1 谈谈你对RPC框架的理解 238<br/> 9.1.2 HTTP和RPC有什么区别 240<br/> 9.2 微服务协调组件 242<br/> 9.2.1 分布式和微服务的区别是什么 242<br/> 9.2.2 谈谈你对负载均衡的理解 243<br/> 9.2.3 谈谈你对ZooKeeper的理解 248<br/> 9.2.4 简述ZooKeeper中的Watch机制的原理 250<br/> 9.2.5 ZooKeeper如何实现Leader选举 251<br/> 9.3 分布式锁 254<br/> 9.3.1 谈谈你对分布式锁的理解和实现 254<br/> 9.3.2 什么是幂等,如何解决幂等性问题 255<br/> 9.3.3 谈谈你对一致性Hash算法的理解 256<br/> 9.3.4 常用的分布式ID设计方案有哪些 260<br/> 9.3.5 实现分布式锁,ZooKeeper和Redis哪个更好 261<br/> 9.4 分布式事务 263<br/> 9.4.1 如何区分Spring中的事务和分布式事务 263<br/> 9.4.2 谈谈分布式事务的解决方案 264<br/> 9.4.3 谈谈你对Seata的理解 265<br/> 9.4.4 如何解决TCC中的悬挂问题 269<br/> 9.5 限流和鉴权 271<br/> 9.5.1 常用的限流算法有哪些 271<br/> 9.5.2 简述雪花算法的实现原理 273<br/> 9.5.3 简述Sentinel组件里的滑动窗口算法 278<br/> 9.5.4 谈谈你对OAuth的理解 279<br/> 9.6 DevOps与云原生 283<br/> 9.6.1 谈谈你对Swagger工作流程的理解 283<br/> 9.6.2 什么是云原生 286<br/> 9.6.3 什么是服务网格 287<br/> 9.6.4 谈谈你对IaaS、PaaS、SaaS的理解 290<br/> 第10章 MySQL数据库 293<br/> 10.1 存储引擎 293<br/> 10.1.1 存储MD5值应该用VARCHAR还是CHAR 293<br/> 10.1.2 能不能用MySQL的VARCHAR来存储一本小说 294<br/> 10.1.3 导致索引失效的原因有哪些 296<br/> 10.1.4 什么是聚集索引和非聚集索引 297<br/> 10.1.5 谈谈你对B树和B+树的理解 298<br/> 10.1.6 为什么MySQL的索引结构要采用B+树 302<br/> 10.1.7 MySQL索引的优点和缺点是什么 303<br/> 10.1.8 为什么SQL语句命中索引比不命中索引要快 304<br/> 10.1.9 MySQL中MyISAM和InnoDB引擎有什么区别 306<br/> 10.1.10 MySQL表设计时间列用datetime还是timstamp 309<br/> 10.2 事务 310<br/> 10.2.1 如何理解 MySQL的事务隔离级别 310<br/> 10.2.2 MySQL事务的实现原理 312<br/> 10.2.3 谈谈你对MVCC的理解 314<br/> 10.2.4 MySQL的InnoDB如何解决幻读 315<br/> 10.3 性能优化 318<br/> 10.3.1 执行SQL响应比较慢,你有哪些排查思路 318<br/> 10.3.2 数据库连接池有什么用,它有哪些关键参数 321<br/> 10.3.3 为什么分布式系统中不推荐使用多表关联查询 322<br/> 第11章 缓存与NoSQL 324<br/> 11.1 Redis缓存 324<br/> 11.1.1 谈谈你对Redis的理解 324<br/> 11.1.2 如何解决缓存雪崩、缓存穿透和缓存击穿问题 325<br/> 11.1.3 简述Redis持久化机制RDB和AOF实现原理 328<br/> 11.1.4 简述Redis中AOF重写的过程 330<br/> 11.1.5 Redis的内存淘汰算法和原理是什么 331<br/> 11.1.6 谈谈你对时间轮的理解 333<br/> 11.1.7 Redis到底是单线程还是多线程 334<br/> 11.1.8 Redis存在线程安全问题吗 336<br/> 11.1.9 Redis和MySQL如何保证数据一致性 337<br/> 11.2 其他NoSQL 340<br/> 11.2.1 谈谈你对NoSQL的理解 340<br/> 11.2.2 对比FastDFS说明MinIO的优缺点 342<br/> 11.2.3 谈谈你对Elasticsearch的理解 344<br/> 第12章 消息中间件 347<br/> 12.1 RabbitMQ 347<br/> 12.1.1 谈谈你对MQ(消息队列)的理解 347<br/> 12.1.2 谈谈你对RabbitMQ工作原理的理解 350<br/> 12.1.3 RabbitMQ是如何实现消息路由的 351<br/> 12.1.4 RabbitMQ如何保证线上MQ消息不丢失 353<br/> 12.1.5 RabbitMQ如何实现高可用 356<br/> 12.2 Kafka 358<br/> 12.2.1 Kafka为什么这么快 358<br/> 12.2.2 谈谈你对Kafka零拷贝原理的理解 360<br/> 12.2.3 Kafka如何保证消息不丢失 362<br/> 12.2.4 Kafka是怎么避免重复消费的 364<br/> 12.2.5 Kafka如何保证消息顺序消费 366<br/> 12.2.6 谈谈你对Kafka数据存储原理的理解 368<br/> 12.2.7 什么是ISR,为什么要引入ISR 370<br/> 12.2.8 Kafka副本是如何完成Leader选举的 371<br/> 12.3 其他中间件 373<br/> 12.3.1 RocketMQ为什么要放弃ZooKeeper 373<br/> 12.3.2 谈谈你对RocketMQ分布式事务原理的理解 375<br/> 12.3.3 谈谈你对Pulsar的理解 377<br/> 第4篇 经典场景与求职攻略 383<br/> 第13章 互联网经典场景 384<br/> 13.1 服务器反应慢 384<br/> 13.1.1 线上服务器CPU飙升,如何定位到Java代码 384<br/> 13.1.2 生产环境服务器变慢,如何诊断处理 386<br/> 13.1.3 线上接口负载剧增,快扛不住了,你的首选方案是什么 388<br/> 13.2 秒杀设计 388<br/> 13.2.1 从全局角度如何设计一个秒杀系统 388<br/> 13.2.2 如何解决秒杀系统中超卖、少卖等问题 391<br/> 13.2.3 如何设计百万并发场景中的抢优惠券业务 392<br/> 13.2.4 如何设计春节抢红包金额随机的算法 394<br/> 13.2.5 如何设计订单超时自动取消功能 396<br/> 13.3 架构设计 397<br/> 13.3.1 Java Web开发如何解决跨域问题 397<br/> 13.3.2 如何避免订单重复提交和支付 401<br/> 13.3.3 日数据量超300万条的监测系统,该如何设计数据库架构 403<br/> 13.3.4 手机扫码登录到底是怎么实现的 405<br/> 13.3.5 线上单表数据量达到1亿,如何做分表迁移 406<br/> 13.3.6 如何统计亿级用户的在线状态 408<br/> 13.3.7 线上MySQL数据库连接池泄漏,该如何排查 410<br/> 13.3.8 短信验证码接口被狂刷,怎么办 413<br/> 13.3.9 简述互联网架构20年来的演变过程 414<br/> 第14章 面试求职攻略 420<br/> 14.1 简历编写与投递技巧 420<br/> 14.1.1 找工作与从一份精美的简历开始 420<br/> 14.1.2 如何有效并且精准地投递简历 431<br/> 14.1.3 简历投递和职业发展的关系 433<br/> 14.1.4 什么时间投递简历最有效果 434<br/> 14.2 面试谈薪技巧 437<br/> 14.2.1 了解行业面试潜规则 437<br/> 14.2.2 打有准备的仗更容易获得胜利 440<br/> 14.2.3 面试过程中如何更好地展现自己 444<br/> 14.2.4 巧妙回答面试中的常见问题 448<br/> 14.2.5 捕捉面试官的微表情并做出及时反应 450<br/> 14.2.6 HR问薪资的时候,应该说多少 452<br/> 14.3 求职决策技巧 455<br/> 14.3.1 拿到多个Offer时应该如何选择 455<br/> 14.3.2 到底要不要去外包公司 458<br/> 14.3.3 如何和现在的公司友好地说分手 460<br/> 附录A 互联网程序员职业成长发展路线图 463<br/> 附录B 互联网程序员职业各成长阶段能力模型图 464<br/> 附录C Java互联网程序员技术成长路径 465<br/> · · · · · · (收起)
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/159912.html