Java面试题266:算法+缓存+TCP+JVM+搜索+分布式+数据库

JAVA基础知识
- JAVA中有哪几种基本数据类型,每种占用多少字节。
- String类可以继承吗?为什么。
- String、Stringbuffer和StringBuilder的区别。
- ArrayList 和 LinkedList 有什么区别。
- 先说一下类的实例化顺序,比如父类静态数据、构造函数、字段,子类静态数据、构造函数、字段,以及使用new时它们的执行顺序。
- 您使用过哪些地图类别以及有何区别? HashMap线程安全吗?同时使用的地图有哪些?它们的内部原理是什么,比如存储方式、哈希码、扩展、默认容量等。
- 为什么JAVA8的ConcurrentHashMap放弃分段锁?有什么问题吗?如果你设计它,你怎么设计它。
- 有顺序map实现类吗?如果是这样,他们如何确保订购?
- 抽象类和接口的区别,一个类可以继承多个类,一个接口可以继承多个接口,一个类可以实现多个接口。
- 继承和聚合有什么区别。
- IO 型号有哪些?告诉我你对九的理解。它和bio、aio有什么区别?我们来谈谈反应堆模型。
- 反射原理,通过反射创建类实例的三种方式是什么。
- 反射中Class.forName和ClassLoader的区别。
- 描述几种动态代理的实现方法并说明相应的优缺点。
- 动态代理和cglib实现之间的区别。
- 为什么CGlib方法可以实现接口代理。
- 使用韵尾。
- 编写三个单例模式实现。
- 如何自动完成父类中子类的所有hashcode和equal实现?这样做有什么好处和坏处。
- 请根据OO设计概念讨论public、private、protected和default访问修饰符在应用程序设计中的作用。
- 深拷贝和浅拷贝的区别。
- 数组和链表数据结构描述,各自的时间复杂度。
- 错误和异常的区别,CheckedException和RuntimeException的区别。
- 请提供5个运行时异常。
- 在你自己的代码中,如果你创建了一个java.lang.String类,这个类能被类加载器加载吗?为什么。
- 说说你对java.lang.Object对象中的hashCode和equals方法的理解。在什么场景下我们需要重新实现这两个方法呢?
- 在jdk1.5中引入了泛型。泛型可以解决什么问题。
- such.hashcode()有什么用,和a.equals(b)有什么关系。
- 2 个不同的对象是否可能具有相同的哈希码。
- Java 中的 HashSet 内部是如何工作的。
- 什么是序列化,如何序列化,为什么序列化,反序列化会遇到哪些问题,如何解决。
- java8 中的新功能。
JVM知识
- 什么情况下会发生堆栈溢出?
- JVM内存结构,Eden和Survivor关系。
- JVM内存为什么分为新生代、老年代和持久代。为什么新生代分为Eden和Survivor。
- JVM中完整的GC流程是怎样的?项目如何提升到老年代?我们来谈谈您所知道的最重要的 JVM 参数
- 。
- 你知道垃圾收集器有哪些类型以及各自的优缺点吗?下面重点介绍cms和G1,包括原理、流程、优缺点。
- 垃圾回收算法的实现原理。
- 出现内存溢出时如何排查?
- 你对 JVM 内存模型了解多少,比如重排序、内存屏障、happens-before、主内存、工作内存等。
- 简单介绍一下你对类加载器的了解,父委托可以吗坏了,以及如何坏掉它。
- 我们来说一下JAVA的反射机制。
- 您在线使用的 JVM 参数是什么?
- g1和cms之间的区别,吞吐量优先级和响应优先级垃圾收集器选择。
- 如何打印线程堆栈信息。
- 请解释以下jvm参数的含义:
- -server -Xms512m -Xmx512m -Xss1024K
- -XX:PermSize=256m -XXmerer:XX:Max MaxTenuringThreshold =20XX :CMSIinitiatingOccupancyFraction =80 -
- XX :+仅使用 CMSI 启动占用。
开源框架知识
- 简单讲一下tomcat的结构,它的classloader流程,线程模型等。
- tomcat如何调优,涉及哪些参数。
- 我们来谈谈弹簧加载过程。
- Spring AOP的实现原理。
- 我们来谈谈Spring事务的传播属性。
- Spring 如何管理事务。
- 如何在spring中配置事务(指定一些关键的xml元素)。
- 说说你对Spring的理解以及非单盒注入的原理?它的生命周期?循环注入的原理,aop的实现原理
- ,我们来谈谈aop中的几个术语以及它们之间是如何配合的。
- Springmvc中DispatcherServlet初始化流程。
- Netty的线程模型,Netty是如何基于reactor模型来实现的。
- 为什么选择netty。
- 什么是TCP粘包和拆包。解决办法是什么。
- Netty的fashwheel定时器的使用,实现原理,如果会话不够准时,如何解决。
- 弱网时Netty的心跳处理该怎么办。
- netty的通信协议是什么?
- springmvc中使用了哪些注解,它们的作用和原理是什么。
- springboot的启动机制。
- 点击这里获取一组春季测试题的答案版本。
操作系统
- Linux系统下你注意到了哪些内核参数?告诉我们你所知道的。
- Linux下有几种IO模型,它们各自的含义是什么。
- epoll 和 poll 有什么区别。
- 您通常使用哪些 Linux 命令?
- 使用一行命令查看文件的最后五行。
- 使用一行命令发出正在运行的 java 进程。
- 介绍一下你对操作系统中线程流程的理解。
- 进程和线程的区别。
- top命令后面的内容是什么,作用是什么。
- 电子处理器极高。怎么才能找到问题呢?
多线程
- 多线程的几种实现方法以及什么是线程安全。
- volatile的原理和作用,它能代替锁吗?
- 画出线程的生命周期状态图。
- 睡眠和等待之间的区别。
- 睡觉和睡觉的区别(0)。
- Lock 和 Synchronized 的区别。
- synchronized的原理是什么,一般用在什么地方(比如静态方法和非静态方法的区别,静态静态方法和非静态方法在执行时会有什么影响吗?)同时),请解释以下术语:重排序、自旋锁、偏向锁、轻锁、可重入锁、公平锁、非公平锁、乐观锁、悲观锁。
- 您使用了哪些原子类型以及它们的原理是什么。
- 在JUC期间你学习了哪些并发工具?说说原理吧。
- 你用过线程池吗?如果有请解释一下原理,newCache和newFixed有什么区别,构造函数中各个参数的含义是什么,比如coreSize,maxsize等
- 关闭线程有几种方法池,以及它们之间有什么区别。
- 假设有一个第三方接口,并且有很多线程调用它来获取数据。现在修复了每秒最多 10 个线程可以同时调用它
- ,如何做到这一点。
- Spring的控制器是单实例还是多实例?如何保证并发安全?
- 使用三个线程按顺序打印三个字母abc,例如abcabcabc。
- 你用过ThreadLocal吗?目的是什么,原理是什么,使用时要注意什么。
- 如果要求你实现一个并发安全链表,你会怎么做?
- 无锁数据结构有哪些,其实现原理是什么。
- 我们先来说一下java的wait和notify同步机制。
- CAS机制是什么,它是如何解决ABA问题的。
- 多线程如果线程挂了怎么办。
- countdowlatch和cyclobarrier的内部原理和用法,以及它们之间的区别(比如
- countdownlatch的await方法是如何实现的)。
- 关于AbstractQueuedSynchronizer你了解多少?我们来谈谈加锁和解锁的过程。独占锁和公平锁有什么区别
- 。
- 使用synchronized修饰静态方法和非静态方法有什么区别。
- 简单描述一下ConcurrentLinkedQueue和LinkedBlockingQueue的使用和区别。
- 卡线的原因是什么?如何释放线程锁。
- 有很多线程(可能是不同的机器),它们必须等待彼此之间的协调才能完成特定的工作。我想问一下这样的协调方案是如何设计的?
- 你用过读写锁吗?原理是什么?一般用在什么场景?
- 启动多个线程。如果保证顺序执行,有哪些实现方法,或者如何保证多个线程都执行完
- 才得到结果。
- 延迟队列实现,delayQueue和时间轮算法的异同。
- 单击此处获取一组多线程测试问题的答案版本。
TCP 和 HTTP
- http1.0 和 http1.1 有什么区别。
- TCP三次握手和四次挥手过程,为什么需要4次才能断开连接,如果只有两次握手会出现什么情况。
- TIME_WAIT 和 CLOSE_WAIT 的区别。
- 告诉我更多你知道的HTTP响应码,比如200、302、404。
- 当你用浏览器打开一个链接(比如:http://www.javastock.cn)时,会执行哪些步骤?计算机执行什么操作?
- TCP/IP如何保证可靠性?我们先来说说TCP头的结构。
- 如何避免浏览器缓存。
- 如何理解HTTP协议的无状态本质。
- 简单描述一下Http请求get和post的区别以及数据包格式。
- HTTP 有哪些方法?
- 简单描述HTTP请求报文格式。
- HTTP长连接是什么意思?
- HTTPS的加密方式是什么?下面讲一下整个加密和解密的过程。
- HTTP和https的三向握手有什么区别。
- 什么是分块传输。
- 会话和cookie之间的区别。
- 单击此处获取一组问题的答案。
架构设计与部署
- 使用java自己实现LRU。
- 如何获取分布式集群中唯一的序列号。
- 设计一个限时抢购系统,如果30分钟内没有付款,系统会自动关闭交易。
- 如何使用redis和zookeeper实现分布式锁?它们有什么区别、优缺点、会出现什么问题、适用于哪些
- 场景? (延伸:如果你了解redlock,请告诉我算法的实现以及争议所在)
- 如果有人恶意创建非法连接,如何解决。
- 分布式事务的原理、优缺点、如何使用分布式事务、2pc和3pc的区别、解决了哪些问题、以及
- 没有解决哪些问题、如何解决以及涉及分布式事务在你自己的项目中是如何处理的?
- 什么是一致性哈希。
- 什么是放松?告诉我你对放松的理解。
- 如何设计一个好的API。
- 如何设计和维护100w长连接。
- 解释什么是 MESI 协议(缓存一致性)。
- 告诉我更多你知道的HASH算法,简单的也可以。
- 什么是paxos算法,什么是zab协议。
- 可以编辑文档的在线文档系统。如何防止多人同时编辑和更新同一个
- 文档。
- 在线系统突然变得极其缓慢。你如何发现问题?
- 告诉我你通常使用的设计模式。
- Dubbo的原理,你看过源码吗,数据是如何流动的,如何实现集群、负载均衡、服务注册
- 以及发现、重试转发,以及快速失败的策略是什么?
- RPC请求的流程是怎样的。
- 你自己实现过rpc吗?能简单介绍一下原理吗? Rpc要解决什么问题?
- 异步模式的目的和重要性。
- 如何评价编程中的一些设计原则,例如开闭原则,以及它们在工作中的应用。
- 设计某社交网站中的“私信”功能,需要高并发、可扩展性等。画出架构图。
- MVC模式,常见的MVC框架。
- 谈谈你帮忙设计和画图的服务器架构。谈论您遇到的问题以及如何解决这些问题。
- 如何监控应用服务器的性能以及不同方法之间的差异。
- 如何设计高并发的支付方案以及如何设计架构。
- 如何实现负载均衡,可以实现哪些算法。
- Zookeeper的目的是什么,选择原则是什么。
- zookeeper监视机制原理。
- Mybatis底层实现原理。
- 请想一个在分布式环境中实现 countDownLatch 的解决方案。
- 后台系统如何防止请求重复提交?
- 描述服务从发布到消费的详细流程。
- 告诉我们您对服务管理的理解。
- 如何实现接口幂等性。
- 当前的封顶策略、令牌桶和漏斗算法使用场景如何实现。
- 什么是数据一致性?如何理解数据一致性?
- 如果分布式服务调用方不信任服务提供者,那么服务提供者挂掉后,如何处理大量无效资源请求的浪费
- ?如果服务商的吞吐量不高怎么办?如果服务挂起,它会在一段时间后重新启动。如何才能做到资源浪费最少?实现半开放流量的机制是什么?
- dubbo的泛化调用是如何实现的?如果是你,你会怎么做?
- 远程调用会出现超时现象。如果实现优雅的控制,那么JDK内置了哪些超时机制,又是如何实现的呢?
算法
- 在 10 亿个数字中找到 10 个最小的数字。
- 有1亿个数字,其中2个是重复的。快速找到它并优化时间和空间。
- 2亿个随机生成的无序整数,找到中间的值。
- 给定一个未知长度(可能非常大)的输入字符串,设计一个解决方案来排序重复的字符。
- 遍历二叉树。
- 有3n+1个数字,其中3n个是重复的,只有1个是不重复的。如何找到它。
- 输入字符串(如:http://www.javastack.cn)来反转该函数。
- 常用的排序算法,快速排序、合并和冒泡。快速排序的最佳时间复杂度和最坏情况复杂度。冒泡排序的
- 优化解决方案。
- 二分查找的时间复杂度和好处。
- 如何对构造好的树集完成逆排序。
- 什么是B+树和B树并列出实际的使用场景。
- 单向链表,删除倒数第n条数据。
- 200 个有序数组,每个数组有 100 个元素,找到最好的 20 个元素。
- 单向链表,找到中间的元素。
数据库知识
- 数据库隔离级别有哪些,各自的含义是什么,MYSQL默认的隔离级别是多少。
- 什么是幻读?
- MYSQL有哪些存储引擎?每个都有自己的优点和缺点。
- 如何在高并发下安全地修改同一行数据。
- 什么是乐观锁和悲观锁? INNODB中默认的两种行级锁是什么?解释它们的含义。
- SQL优化的一般步骤是什么,如何读取执行计划以及如何理解其中每个字段的含义。
- 数据库会锁吗?给出死锁的示例以及如何解决 MySQL 中的死锁。
- MYsql的索引原理,索引有哪些类型,如何创建合理的索引以及如何优化索引。
- 聚集索引和非聚集索引的区别。
- 选择更新是什么意思?它会锁定表或行或其他什么吗?
- 为什么要用Btree来实现,它是如何分裂的,什么时候分裂的,为什么是平衡的。
- 数据库的ACID是多少。
- 某表快千万条数据,CRUD比较慢,如何优化。
- 如何优化Mysql中的表扫描。
- 如何编写sql来有效使用复合索引。
- i和的区别在mysql中找到。
- 数据库自动增加的主键可能出现问题。
- MVCC 的重要性及其实现方式。
- 您在做过的项目中遇到过分库、分表吗?你是怎么做到的?你用过中间件吗,像sharding jdbc之类的,你知道它们的
- 原理吗?
- 如何解决MYSQL主从滞后问题。
消息队列
- 消息队列的使用场景。
- 再次发送消息并完成策略。
- 如何确保消息的顺序。
- 您用过哪个MQ?与其他mq相比有哪些优点和缺点? MQ 连接是线程安全的吗?企业MQ服务
- 的架构是怎样的?
- 如何保证MQ系统中的数据不丢失。
- rabbitmq如何实现集群高可用。
- kafka吞吐量高的原因。
- kafka与其他消息队列的区别,kafka中如何实现主从同步。
- 如何使用 mq 实现一致性。
- 您在使用kafka时遇到过问题吗?您是如何解决的?
- MQ可能会造成重复消费。如何避免它以及如何使其幂等。
- 如何处理延迟的MQ消息?消息可以设置过期时间吗?过期后您通常如何处理它们?
缓存
- 常见的缓存策略有哪些,如何实现缓存(如redis)和DB之间的数据一致性,您的项目中使用了哪种缓存系统
- ,它是如何设计的。
- 如何防止缓存崩溃和雪崩。
- 如何设计缓存数据过期后的更新。
- 与redis的链表结构相关的操作。
- Redis的数据结构有哪些。
- 使用Redis需要注意什么?下面讲讲持久化方式、内存设置、集群应用、优缺点、淘汰策略等。
- redis2和redis3的区别,redis3内部通信机制。
- 目前的redis集群方式有哪些,各自的优缺点以及场景。
- Memcache的原理,哪些数据适合放在缓存中。
- redis和memcached内存管理的区别。
- 如何解决Redis的并发争用问题?你知道Redis事务的CAS操作吗?
- Redis的选择算法和流程有哪些。
- Redis的持久化机制,aof和rdb的区别。
- redis集群如何同步数据。
- 了解什么是redis优化操作。
- Reids的主从复制机制原理。
- Redis的线程模型是什么。
- 请考虑设计一个自适应本地缓存的解决方案,可以控制缓存的总大小。
- 如何看缓存(本地缓存、集中式缓存)的使用情况,简单描述一下本地缓存和集中式缓存的优缺点。
- 同时使用本地缓存时的注意事项。
搜索
- 你对elasticsearch了解多少?告诉我们你们公司的ES集群架构、索引数据大小、分片数量以及一些
- 调优方法。什么是elasticsearch的倒排索引?
- elasticsearch索引数据过多怎么办,如何调优和分配。
- elasticsearch是如何实现master选择的。
- 详细描述Elasticsearch文档索引的过程。
- 详细描述Elasticsearch搜索过程。
- 部署Elasticsearch时Linux设置有哪些优化方法?
- lucence的内部结构是怎样的。
作者:冯峰
来源:知乎
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。