
面试
开森的小王
java工作者
展开
-
Codis与RedisCluster的原理详解
把Redis分为三个部分,分别是客户端、主节点以及从节点,如果从节点要同步主节点的数据,它首先会发Sync指令给主节点,主节点收到指令之后会执行BGSAVE命令生成RDB文件,这个RDB文件指的是快照文件,它是Redis两种备份方式的其中一种,另一种叫AOF,它的原理是将所有的写入指令存入文件,mysql的binlog原理是一样的。如果主节点在生成RDB的过程当中,客户端发来了写入指令,这个时候主节点会把指令全部写入缓冲区,等RDB生成完了,会把RDB文件发送给从节点,最后再把缓冲区的指令发送给从节点。.原创 2020-09-01 13:34:35 · 616 阅读 · 0 评论 -
JAVA核心面试知识-数据库(十四)
14.1.1. 存储引擎14.1.1.1. 概念数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同 的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。存储引擎主要有: 1. MyIsam , 2. InnoDB, 3. Mem...原创 2019-12-20 10:54:35 · 422 阅读 · 0 评论 -
JAVA核心面试知识-RabbitMQ(十三)
13.1.1. 概念RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。AMQP :Advanced Message Queue,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。RabbitMQ 最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可...原创 2019-12-20 10:10:55 · 497 阅读 · 0 评论 -
JAVA核心面试知识-Kafka(十二)
12.1.1. Kafka 概念Kafka 是一种高吞吐量、分布式、基于发布/订阅的消息系统,最初由 LinkedIn 公司开发,使用Scala 语言编写,目前是Apache 的开源项目。broker:Kafka 服务器,负责消息存储和转发topic:消息类别,Kafka 按照topic 来分类消息partition:topic 的分区,一个 topic 可以包含多个 partitio...原创 2019-12-20 10:03:05 · 446 阅读 · 0 评论 -
JAVA核心面试知识-Zookeeper(十一)
Zookeeper 概念Zookeeper 是一个分布式协调服务,可用于服务发现,分布式锁,分布式领导选举,配置管理等。Zookeeper 提供了一个类似于 Linux 文件系统的树形结构(可认为是轻量级的内存文件系统,但只适合存少量信息,完全不适合存储大量文件或者大文件),同时提供了对于每个节点的监控与通知机制。11.1.1. Zookeeper 角色Zookeeper 集群是一个基于主...原创 2019-12-20 09:57:36 · 513 阅读 · 0 评论 -
JAVA核心面试知识-日志(十)
10.1.1. Slf4jslf4j 的全称是 Simple Loging Facade For Java,即它仅仅是一个为 Java 程序提供日志输出的统一接口,并不是一个具体的日志实现方案,就比如 JDBC 一样,只是一种规则而已。所以单独的 slf4j 是不能工作的,必须搭配其他具体的日志实现方案,比如 apache 的 org.apache.log4j.Logger,jdk 自带的 ja...原创 2019-12-20 09:50:27 · 464 阅读 · 0 评论 -
JAVA核心面试知识-计算机网络(九)
9.1.1. 网络 7 层架构7 层模型主要包括:物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由 1、0 转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的模数转换与数模转换)。这一层的数据叫做比特。数据链路层:主要将从物理层接收的数据进行 MAC 地址(网卡的地址)的封装与解封装。常把这一层的...原创 2019-12-19 17:11:49 · 654 阅读 · 0 评论 -
JAVA核心面试知识-Netty 与 RPC(八)
8.1.1. Netty 原理Netty 是一个高性能、异步事件驱动的NIO 框架,基于 JAVA NIO 提供的 API 实现。它提供了对TCP、UDP 和文件传输的支持,作为一个异步 NIO 框架,Netty 的所有 IO 操作都是异步非阻塞的,通过 Future-Listener 机制,用户可以方便的主动获取或者通过通知机制获得 IO 操作结果。8.1.2. Netty 高性能在 I...原创 2019-12-19 16:34:35 · 757 阅读 · 0 评论 -
JAVA核心面试知识-微服务(七)
7.1.1. 服务注册发现服务注册就是维护一个登记簿,它管理系统内所有的服务地址。当新的服务启动后,它会向登记簿交待自己的地址信息。服务的依赖方直接向登记簿要Service Provider 地址就行了。当下用于服务注册的工具非常多 ZooKeeper,Consul,Etcd, 还有 Netflix 家的 eureka 等。服务注册有两种形式:客户端注册和第三方注册。7.1.1.1. 客户端注...原创 2019-12-17 17:15:45 · 875 阅读 · 0 评论 -
JAVA核心面试知识-Spring 原理(六)
它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring 仍然可以和其他的框架无缝整合。6.1.1. Spring 特点6.1.1.1. 轻量级6.1.1.2. 控制反转6.1.1.3. 面向切面6.1.1.4. 容器6.1.1.5. 框架集合6.1.2. Spring 核心组件6.1.3. Spring 常用模块6.1.4. Sprin...原创 2019-12-17 15:55:57 · 456 阅读 · 0 评论 -
JAVA核心面试知识-JAVA 基础(五)
5.1.1. JAVA 异常分类及处理5.1.1.1. 概念如果某个方法不能按照正常的途径完成任务,就可以通过另一种路径退出方法。在这种情况下会抛出一个封装了错误信息的对象。此时,这个方法会立刻退出同时不返回任何值。另外,调用这个方法的其他代码也无法继续执行,异常处理机制会将代码执行交给异常处理器。5.1.1.2. 异常分类Throwable 是 Java 语言中所有错误或异常的超类。下...原创 2019-12-16 10:52:50 · 372 阅读 · 0 评论 -
JAVA核心面试知识-JAVA 多线程并发(四)
4.1.10. 线程基本方法线程相关的基本方法有 wait,notify,notifyAll,sleep,join,yield 等。4.1.10.1. 线程等待(wait)调用该方法的线程进入 WAITING 状态,只有等待另外线程的通知或被中断才会返回,需要注意的是调用 wait()方法后,会释放对象的锁。因此,wait 方法一般用在同步方法或同步代码块中。4.1.10.2. 线程睡眠...原创 2019-12-11 15:37:22 · 1235 阅读 · 0 评论 -
JAVA核心面试知识-JAVA 多线程并发(三)
JAVA 多线程并发4.1.1. JAVA 并发知识库4.1.2. JAVA 线程实现/创建方式4.1.2.1. 继承Thread 类Thread 类本质上是实现了 Runnable 接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过 Thread 类的 start()实例方法。start()方法是一个 native 方法,它将启动一个新线程,并执行 run()方法。pub...原创 2019-11-20 11:28:04 · 501 阅读 · 0 评论 -
JAVA核心面试知识-JAVA集合(二)
JAVA集合3.1. 接口继承关系和实现集合类存放于 Java.util 包中,主要有 3 种:set(集)、list(列表包含 Queue)和 map(映射)。Collection:Collection 是集合 List、Set、Queue 的最基本的接口。Iterator:迭代器,可以通过迭代器遍历集合中的数据Map:是映射表的基础接口3.2. ListJava 的 Li...原创 2019-11-04 16:44:39 · 242 阅读 · 0 评论 -
JAVA核心面试知识-JVM(一)
JVM(一)基本概念JVM是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收,堆 和 一个存储方法域。JVM 是运行在操作系统之上的,它与硬件没有直接的交互。(二)运行过程:我们都知道 Java 源文件,通过编译器,能够生产相应的.Class 文件,也就是字节码文件,而字节码文件又通过 Java 虚拟机中的解释器,编译成特定机器...原创 2019-10-29 13:26:55 · 340 阅读 · 0 评论 -
为什么要把String设计成不可变的
字符串池字符串池是方法区中的一部分特殊存储。当一个字符串被被创建的时候,首先会去这个字符串池中查找,如果找到,直接返回对该字符串的引用。下面的代码只会在堆中创建一个字符串String string1 = "abcd";String string2 = "abcd";下面是图示:如果字符串可变的话,当两个引用指向指向同一个字符串时,对其中一个做修改就会影响另外一个。(请记...转载 2018-12-16 22:38:30 · 265 阅读 · 0 评论 -
hashmap原理
HashMap实现原理及源码分析 哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富。一、什么是哈希表 在讨论哈希表之前,我们先大概了解下其他数据结构在新增,查找等基础操作执行性能 数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为O(...转载 2018-12-11 23:15:25 · 201 阅读 · 0 评论 -
collection集合和map集合所有子类
原创 2019-03-11 14:47:41 · 804 阅读 · 0 评论 -
面试常考排序算法(持续更新)
1.桶排序桶排序,也叫作箱排序,是一个排序算法,也是所有排序算法中最快、最简单的排序算法。其中的思想是我们首先需要知道所有待排序元素的范围,然后需要有在这个范围内的同样数量的桶,接着把元素放到对应的桶中,最后按顺序输出。实际上一个桶不总是放同一个元素,在很多时候一个桶里可能会放多个元素,这是不是与散列表有点类似呢?其实真正的桶排序和散列表是一样的原理。除了对一个桶内的元素做链表存储,我...原创 2019-02-14 14:44:25 · 516 阅读 · 0 评论 -
异常类Throwable接口及其子类
原创 2019-03-11 14:47:58 · 898 阅读 · 1 评论 -
面试最常见的208道面试题
面试题模块介绍说了这么多,下面进入我们本文的主题,我们这份面试题,包含的内容了十九了模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。如下图所...原创 2019-03-11 15:04:59 · 1207 阅读 · 0 评论 -
JAVA核心面试知识-分布式缓存(十五)
15.1 前言设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。15.2 缓存穿透缓存穿透是指用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导致用户查询的时候,在缓存中找不到,每次都要去数据库再查询一遍,然后返回空(相当于进行了两次无用的查询)。这样请求就绕过缓存直接查数据库,这也是经常提的缓存命中率问题。15.2.1 解决方案有很多种方...原创 2019-08-08 09:17:31 · 217 阅读 · 0 评论 -
String类对象在JVM堆中和常量池中的情况
Q1:String s = new String("hollis");定义了几个对象。Q2:如何理解String的intern方法?A1:若常量池中已经存在”hollis”,则直接引用,也就是此时只会创建一个对象,如果常量池中不存在”hollis”,则先创建后引用,也就是有两个。A2:当一个String实例str调用intern()方法时,Java查找常量池中是否有相同Unicode的...转载 2018-12-16 22:38:44 · 1052 阅读 · 2 评论