75 道 BATJ 中高级 Java 面试题目集锦
整理了 BATJ(百度、阿里、腾讯、京东)等公司在 Java 中高级面试中常见的 75 道题目,供大家查漏补缺。若能掌握这些题目,能在面试中拉开与多数竞争者的差距。 75 道 BATJ 中高级 Java 面试题hashCode 相等,两个对象一定相等吗?equals 呢?反之呢? 介绍一下 Java 集合框架的组成。 HashMap 与 Hashtable 底层实现的区别?Hashtable 与 ConcurrentHashMap 呢? HashMap 与 TreeMap 的区别?底层数据结构是什么? 线程池用过吗?有哪些参数?底层如何实现? synchronized 与 Lock 的区别?synchronized 何时是对象锁?何时是类锁? ThreadLocal 是什么?底层如何实现?写一个示例。 volatile 的工作原理。 CAS 机制是什么?如何实现? 用至少四种方式写一个单例模式。 (以上为热身题,你能答对几道?) 介绍 JVM 内存模型?用过哪些垃圾回收器? 线上频繁 Full GC 如何处理?CPU 使用率过高怎么办? 如何定位线上问题?解决思路是什么? 了解字...
负载均衡常用算法梳理与Nginx策略详解
负载均衡常用算法1、轮询调度法请求依次分配给后端各服务器,实现简单,但不考虑服务器实际负载情况。 2、随机分配法通过随机数生成器选择一台后端服务器处理请求。长期来看,请求量会趋于均匀分布,效果接近轮询。 3、源地址哈希法根据客户端IP计算哈希值,再对服务器数量取模,保证同一IP的请求始终落在同一台服务器上,适用于需要会话保持的场景。 4、加权轮询法根据服务器性能与负载分配不同权重,性能高的服务器获得更多请求,实现负载的动态合理分配。 5、加权随机法在加权的基础上引入随机选择机制,避免顺序分配可能带来的负载不均衡。 6、最小连接数法动态监控各服务器当前连接数,将新请求分配给连接数最少的服务器,提升整体资源利用率。 Nginx负载均衡策略1、轮询(默认)按时间顺序逐一分配请求,支持自动剔除故障节点。 2、权重分配(weight)通过weight参数设置服务器优先级,权重越高,接收的请求比例越大。 textupstream backend {server 192.168.0.14 weight=10;server 192.168.0.15 weight=10;}3、...
BAT 面试中常见的 MySQL 问题整理
若某表具有自增主键 ID,在插入 17 条记录后,删除第 15、16、17 条记录,重启 MySQL 后再插入一条记录,这条记录的 ID 会是 15 还是18? MySQL 的技术特点有哪些? 请解释什么是 Heap 表。 MySQL 服务器的默认端口号是多少? 与 Oracle 相比,MySQL 有哪些优势? 如何区分 FLOAT 和 DOUBLE 类型? CHAR_LENGTH 和 LENGTH 函数有什么区别? 简述 InnoDB 存储引擎支持的四类事务隔离级别及其区别。 ENUM 类型在 MySQL 中如何使用? 如何定义并使用 REGEXP 进行正则匹配? CHAR 与 VARCHAR 的区别是什么? 列的字符串类型可以有哪些? 如何查看当前 MySQL 的版本信息? MySQL 常用的存储引擎有哪些? 什么是 MySQL 驱动程序? TIMESTAMP 类型字段设置为 ON UPDATE CURRENT_TIMESTAMP 时会有什么效果? 主键和候选键的区别是什么? 如何使用 Unix shell 登录 MySQL? myisamchk 工具的作用是什么? 有哪些命...
Java 字符串创建方式的两道典型面试题解析
在 Java 中,创建 String 类型的变量通常有以下两种方式: javaString str1 = “abcd”;String str2 = new String(“abcd”);为什么会有这两种方式?它们在内存中的表现有何不同?下面通过两道常见的面试题来解析。 面试题一:javaString a = “abcd”;String b = “abcd”;System.out.println(a == b); // trueSystem.out.println(a.equals(b)); // true解析:使用双引号直接赋值的字符串,如果内容相同,JVM 会将其放入字符串常量池中,并让变量指向同一内存地址。因此 a == b 比较引用时返回true,equals 比较内容也返回 true。 面试题二:javaString c = new String(“abcd”);String d = new String(“abcd”);System...
Java 面试经典 77 题(涵盖基础与进阶)
“金三银四”求职季即将到来,你是否也在准备面试或已经历了几轮“车轮战”? 这里为大家整理了 77 道经典 Java 面试题,涵盖语言基础、集合、并发、JVM、数据库、Web 等方面。如果你的基础还不够扎实,或面试表现不佳,不妨从这些题目入手。 什么是 Java 虚拟机?为什么 Java 被称为“平台无关语言”? JDK 与 JRE 的区别。 static 关键字的含义,能否覆盖 private 或 static 方法? 静态环境中能否访问非静态变量? Java 支持哪些数据类型?什么是自动装箱与拆箱? 方法覆盖(Overriding)与重载(Overloading)的区别。 构造函数、构造函数重载、复制构造函数的概念。 Java 是否支持多继承? 接口与抽象类的区别。 值传递与引用传递的区别。 进程与线程的区别。 创建线程的几种方式,你偏好哪种?为什么? 线程的几种状态及其含义。 同步方法与同步代码块的区别。 什么是死锁? 如何避免 N 个线程访问 N 个资源时发生死锁? 集合框架的基本接口有哪些? 为什么集合类没有实现 Cloneable 与 Serializable? 什么是...
Redis 面试 50 问,堪称最全合集
21、Redis集群之间是如何实现复制的?异步复制 47、Redis常见的性能问题及解决办法?(1) Master最好不要执行任何持久化操作,比如RDB内存快照和AOF日志文件 (2) 如果数据比较重要,可以让某个Slave开启AOF来备份数据,策略设置为每秒同步一次 (3) 为了提高主从复制的速度和连接的稳定性,Master和Slave最好处于同一个局域网内 (4) 尽量避免在压力很大的主库上增加从库 (5) 主从复制不要采用图状结构,采用单向链表结构会更稳定,即:Master <- Slave1 <- Slave2 <- Slave3… 这样的结构便于解决单点故障问题,能实现Slave对Master的替换。如果Master出现故障,可以立刻将Slave1作为新的Master,其他设置保持不变。
最全 Java 多线程面试题与答案
多线程并发编程是Java编程中的重要内容,也是面试的重点考察领域。所以,学好多线程并发编程对Java程序员来说极其重要。下面小编整理了60道最常见的Java多线程面试题及答案,供你学习或面试参考。 多线程有什么作用? 线程和进程的区别是什么? Java实现线程有哪几种方式? 启动线程的方法start()和run()有什么区别? 怎么终止一个线程?如何优雅地终止线程? 一个线程的生命周期有哪几种状态?它们之间如何流转? 线程中的wait()和sleep()方法有什么区别? 多线程同步有哪几种方法? 什么是死锁?如何避免死锁? 多线程之间如何进行通信? 线程怎样获取返回结果? volatile关键字的作用? 新建T1、T2、T3三个线程,如何保证它们按顺序执行? 怎么控制同一时间只有3个线程运行? 为什么要使用线程池? 常用的几种线程池及各自的工作原理。 线程池启动线程的submit()和execute()方法有什么不同? CyclicBarrier和CountDownLatch的区别? 什么是活锁、饥饿、无锁、死锁? 什么是原子性、可见性、...
40 道 Dubbo 面试题目与答案解析
想要在技术道路上更进一步,怎么能不了解 Dubbo? 作为国内最知名的分布式服务框架之一,Dubbo 是 Java 程序员必须掌握的重要技能点,也是中高级面试中经常涉及的技术话题。无论你是否在实际项目中使用过,对其核心概念和常见问题的理解都是必要的。 这里整理了一些 Dubbo 相关的常见面试题,其中一部分是我在面试中常问的,另一部分则来自我过去参与面试时遇到的问题。希望这些内容能为大家的学习和准备提供帮助。 请简要介绍 Dubbo 框架。 Dubbo 的使用场景与优势有哪些? Dubbo 与 Spring Cloud 有哪些不同? Dubbo 支持哪些协议?一般推荐使用哪一种? Dubbo 是否需要依赖 Web 容器? Dubbo 内置了哪些服务容器? Dubbo 架构中包含哪几种节点角色? 请画出服务注册与发现的基本流程示意图。 Dubbo 默认使用哪种注册中心?是否支持其他选项? Dubbo 有哪几种配置方式? Dubbo 的核心配置项有哪些? 在服务提供者端可以配置哪些消费者端的属性? Dubbo 启动时如果依赖的服务不可用,会怎样处理? Dubbo 推荐使用什么序列化框...
最全 JavaScript 面试题及解析
1、怎样辨别一个变量是数组还是字符串? 可以借助typeof操作符。 2、“==”与“===”的区别? “==”是相等运算符,会进行隐式类型转换。“===”是严格运算符,会同时判断值和类型。 3、如何去除字符串中的所有空格? function trim(str){return str.replace(/\s|\xA0/g,””);} 4、如何获取当前浏览的URL? window.location.href 5、怎样添加、删除、移动、复制、创建和查找节点? 1)创建新节点 createDocumentFragment() //创建一个DOM片段 createElement() //创建一个具体的元素 createTextNode() //创建一个文本节点 2)添加、移除、替换、插入 appendChild() //添加 removeChild() //移除 replaceCh...
深入解析主流缓存淘汰策略
http://cc.cocimg.com/api/uploads//image/20171030/1509368302170729.jpg 缓存淘汰策略是缓存系统中的一组指令集,用于确定哪些数据应从缓存中移除,以保证缓存空间的有效利用。常见的缓存淘汰策略包括LFU、LRU、ARC、FIFO、MRU等。 最不经常使用策略(LFU):该策略通过一个计数器统计每个缓存条目被访问的次数。当缓存空间不足时,访问频率最低的条目将被优先淘汰。LFU策略的不足之处在于,它难以处理那些早期访问频繁但后期长时间未被访问的数据,可能导致缓存效率下降。 http://xiaorui.cc/wp-content/uploads/2015/04/20150420105345_48639.png 最近最少使用策略(LRU):LRU策略将最近访问过的数据置于缓存顶部,而较久未访问的数据则逐渐沉到底部。当缓存容量达到上限时,最久未被访问的数据会被移除。该算法需要维护每个条目的“访问时间戳”或“年龄位”,实现成本较高,且在数据淘汰后需更新其余条目的状态信息。 http://upload-images.jianshu...
