架构设计分布式数据结构与算法面试题

目录

    • 架构设计
      • 请列举出在JDK中几个常用的设计模式?
      • 什么是设计模式?你是否在你的代码里面使用过任何设计模式?
      • 静态代理、JDK动态代理以及CGLIB动态代理
        • 静态代理
        • 动态代理
        • cglib代理
      • 单例模式
      • 工厂模式
      • 观察者模式
      • 装饰器模式
      • 秒杀系统设计
    • 分布式
      • 分布式概述
        • 分布式
        • 集群
        • 微服务
        • 多线程
        • 高并发
      • 分布式系统设计理念
        • 分布式系统的目标与要素
        • 分布式系统设计两大思路:中心化和去中心化
        • 分布式与集群的区别是什么?
    • CAP定理
      • CAP定理的证明
      • BASE理论
      • BASE理论的核心思想
      • BASE理论三要素
        • 1. 基本可用
        • 2. 软状态
        • 3. 最终一致性
    • 数据结构与算法
      • 冒泡排序(最高位确认最大)
      • 选择排序(最低位选最小)
      • 快速排序
      • 递归
      • 二分查找
      • 一致性Hash算法
        • 概述
        • 一致性Hash算法原理

架构设计

请列举出在JDK中几个常用的设计模式?

在这里插入图片描述

什么是设计模式?你是否在你的代码里面使用过任何设计模式?

在这里插入图片描述

静态代理、JDK动态代理以及CGLIB动态代理

在这里插入图片描述

静态代理

在这里插入图片描述

动态代理

在这里插入图片描述

cglib代理

在这里插入图片描述

单例模式

在这里插入图片描述

工厂模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

观察者模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

装饰器模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

秒杀系统设计

在这里插入图片描述

分布式

分布式概述

分布式

在这里插入图片描述

集群

微服务

在这里插入图片描述

多线程

在这里插入图片描述

高并发

在这里插入图片描述

分布式系统设计理念

分布式系统的目标与要素

在这里插入图片描述

分布式系统设计两大思路:中心化和去中心化

在这里插入图片描述
在这里插入图片描述

分布式与集群的区别是什么?

在这里插入图片描述

CAP定理

在这里插入图片描述

CAP定理的证明

在这里插入图片描述

BASE理论

在这里插入图片描述

BASE理论的核心思想

在这里插入图片描述

BASE理论三要素

在这里插入图片描述

1. 基本可用

在这里插入图片描述

2. 软状态

在这里插入图片描述

3. 最终一致性

在这里插入图片描述

数据结构与算法

冒泡排序(最高位确认最大)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

选择排序(最低位选最小)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

快速排序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

递归

在这里插入图片描述

二分查找

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一致性Hash算法

概述

在这里插入图片描述

一致性Hash算法原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Java代码实现

public class ConsistentHash<T> {/*** 节点的复制因子,实际节点个数 * numberOfReplicas = 虚拟节点个数*/private final int numberOfReplicas;/*** 存储虚拟节点的hash值到真实节点的映射*/private final SortedMap<Integer, T> circle = new TreeMap<Integer, T>();public ConsistentHash(int numberOfReplicas, Collection<T> nodes) {this.numberOfReplicas = numberOfReplicas;for (T node : nodes) {add(node);}}public void add(T node) {for (int i = 0; i < numberOfReplicas; i++) {// 对于一个实际机器节点 node, 对应 numberOfReplicas 个虚拟节点/** 不同的虚拟节点(i不同)有不同的hash值,但都对应同一个实际机器node* 虚拟node一般是均衡分布在环上的,数据存储在顺时针方向的虚拟node上*/String nodestr = node.toString() + i;int hashcode = nodestr.hashCode();System.out.println("hashcode:" + hashcode);circle.put(hashcode, node);}}public void remove(T node) {for (int i = 0; i < numberOfReplicas; i++) {circle.remove((node.toString() + i).hashCode());}}/*** 获得一个最近的顺时针节点,根据给定的key 取Hash* 然后再取得顺时针方向上最近的一个虚拟节点对应的实际节点* 再从实际节点中取得 数据** @param key* @return*/public T get(Object key) {if (circle.isEmpty()) {return null;}// node 用String来表示,获得node在哈希环中的hashCodeint hash = key.hashCode();System.out.println("hashcode----->:" + hash);//数据映射在两台虚拟机器所在环之间,就需要按顺时针方向寻找机器if (!circle.containsKey(hash)) {SortedMap<Integer, T> tailMap = circle.tailMap(hash);hash = tailMap.isEmpty() ? circle.firstKey() : tailMap.firstKey();}return circle.get(hash);}public long getSize() {return circle.size();}/*** 查看表示整个哈希环中各个虚拟节点位置*/public void testBalance() {//获得TreeMap中所有的KeySet<Integer> sets = circle.keySet();//将获得的Key集合排序SortedSet<Integer> sortedSets = new TreeSet<Integer>(sets);for (Integer hashCode : sortedSets) {System.out.println(hashCode);}System.out.println("----each location 's distance are follows: ----");/** 查看相邻两个hashCode的差值*/Iterator<Integer> it = sortedSets.iterator();Iterator<Integer> it2 = sortedSets.iterator();if (it2.hasNext()) {it2.next();}long keyPre, keyAfter;while (it.hasNext() && it2.hasNext()) {keyPre = it.next();keyAfter = it2.next();System.out.println(keyAfter - keyPre);}}public static void main(String[] args) {Set<String> nodes = new HashSet<String>();nodes.add("A");nodes.add("B");nodes.add("C");ConsistentHash<String> consistentHash = new ConsistentHash<String>(2, nodes);consistentHash.add("D");System.out.println("hash circle size: " + consistentHash.getSize());System.out.println("location of each node are follows: ");consistentHash.testBalance();String node = consistentHash.get("apple");System.out.println("node----------->:" + node);}}

转载链接:https://blog.csdn.net/ThinkWon/article/details/105870730

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/425671.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java学习笔记3——集合框架

文章目录1 集合的概念2 Collection体系集合Collection父接口3 List接口与实现类List接口List实现类ArrayListVectorLinkedList4 Set接口与实现类Set接口Set实现类HashSetTreeSet5 Map接口与实现类Map接口Map接口的内部接口Entry1 集合的概念 概念&#xff1a;对象的容器&#…

CLOSE_WAIT状态的原因与解决方法

这个问题之前没有怎么留意过&#xff0c;是最近在面试过程中遇到的一个问题&#xff0c;面了两家公司&#xff0c;两家公司竟然都面到到了这个问题&#xff0c;不得不使我开始关注这个问题。说起CLOSE_WAIT状态&#xff0c;如果不知道的话&#xff0c;还是先瞧一下TCP的状态转移…

html:(32):字体,字号,颜色

文字排版--字体 我们可以使用css样式为网页中的文字设置字体、字号、颜色等样式属性。下面我们来看一个例子&#xff0c;下面代码实现&#xff1a;为网页中的文字设置字体为宋体。 body{font-family:"宋体";} 这里注意不要设置不常用的字体&#xff0c;因为如果用…

html:(33):文字排版粗体和斜体

文字排版--粗体 我们还可以使用css样式来改变文字的样式&#xff1a;粗体、斜体、下划线、删除线&#xff0c;可以使用下面代码实现设置文字以粗体样式显示出来。 p span{font-weight:bold;} 在这里大家可以看到&#xff0c;如果想为文字设置粗体是有单独的css样式来实现的&…

[剑指offer][JAVA]面试题第[14-1、2]题[剪绳子][Leetcode][第343题][整数拆分][数学][动态规划][背包]

【问题描述】[中等] 给你一根长度为 n 的绳子&#xff0c;请把绳子剪成整数长度的 m 段&#xff08;m、n都是整数&#xff0c;n>1并且m>1&#xff09;&#xff0c;每段绳子的长度记为 k[0],k[1]...k[m-1] 。请问 k[0]*k[1]*...*k[m-1] 可能的最大乘积是多少&#xff1f;…

Java学习笔记4——I/O框架

目录1 流的概念2 流的分类3 字节流文件字节流FileInputStreamFileOutputStream字节缓冲流BufferedInputStreamBufferedOutputStream对象流ObjectOutputStreamObjectInputStream注意事项5 字符流文件字符流FileReaderFileWriter字符缓冲流BufferedReaderBufferedWriter转换流Inp…

snappy

参考From <https://dirtysalt.github.io/snappy.html> Snappy API From <https://www.npmjs.com/package/snappy> Snappy 是一个 C 的用来压缩和解压缩的开发包&#xff0c;其目标不是较大限度压缩&#xff0c;而且不兼容其他压缩格式。Snappy 旨在提供高速压缩速…

html:(34):下划线和删除线

文字排版--下划线 有些情况下想为文字设置为下划线样式&#xff0c;这样可以在视觉上强调文字&#xff0c;可以使用下面代码来实现&#xff1a; p a{text-decoration:underline;}<p>三年级时&#xff0c;我还是一个<a>胆小如鼠</a>的小女孩。</p> &…

设计模式--职责链模式

实验15&#xff1a;职责链模式 本次实验属于模仿型实验&#xff0c;通过本次实验学生将掌握以下内容&#xff1a; 1、理解职责链模式的动机&#xff0c;掌握该模式的结构&#xff1b; 2、能够利用职责链模式解决实际问题。 [实验任务]&#xff1a;财务审批 某物资管理系统…

[剑指offer]面试题第[66]题[构建乘积数组][Leetcode][JAVA][第238题][除自身以外数组的乘积][数组]

【问题描述】[中等] 给你一个长度为 n 的整数数组 nums&#xff0c;其中 n > 1&#xff0c;返回输出数组 output &#xff0c;其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4] 输出: [24,12,8,6]提示&#xff1a;题目数据保证数组之中任…

centos 6.5 安装redis

1. 下载redis&#xff0c;编译安装 下载地址&#xff1a;https://redis.io/download&#xff08;建议大家都选择稳定版本&#xff09; 下载到本地&#xff0c;然后上传到集群 当然也可以通过命令行直接在线下载 $ wget http://download.redis.io/releases/redis-5.0.3.tar.gz $…

[剑指offer][JAVA]面试题第[29]题[顺时针打印矩阵][数组]

【问题描述】[中等] 输入一个矩阵&#xff0c;按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1&#xff1a;输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 示例 2&#xff1a;输入&#xff1a;matrix [[1,2,3,4],[5,6,7,…

玩转oracle 11g(48):oracle命令窗口执行sql语句

在plsql里面找到command window&#xff0c;用命令窗口打开

POJ-2407 欧拉函数

本题题意就是要对输入的任意一个1e9内的数字求出其欧拉函数值 根据 欧拉函数 编辑对正整数n&#xff0c;欧拉函数是小于n的正整数中与n互质的数的数目&#xff08;φ(1)1&#xff09;而互质指的是公因数为只有1的两个数&#xff0c;任何数与1都互质根据欧拉公式通式&#xff1…

模块导入以及书写规则

转载于:https://www.cnblogs.com/www-qcdwx-com/p/10419162.html

并发编程面试题

目录并发编程的优缺点为什么要使用并发编程&#xff08;并发编程的优点&#xff09;并发编程有什么缺点并发编程三要素是什么&#xff1f;在 Java 程序中怎么保证多线程的运行安全&#xff1f;并行和并发有什么区别&#xff1f;什么是多线程&#xff0c;多线程的优劣&#xff1…

html:(35):缩进和行高

段落排版--缩进 中文文字中的段前习惯空两个文字的空白&#xff0c;这个特殊的样式可以用下面代码来实现&#xff1a; p{text-indent:2em;} <p>1922年的春天&#xff0c;一个想要成名名叫尼克卡拉威&#xff08;托比?马奎尔Tobey Maguire 饰&#xff09;的作家&#x…

new/delete与malloc/free

C语言中使用malloc/calloc/realloc用来在堆上分配空间&#xff0c;free将申请的空间释放掉。 malloc&#xff1a; 原型&#xff1a;extern void *malloc(unsigned int num_bytes)。 功能&#xff1a;分配长度为num_bytes字节的内存块。 1 int *p(int*)malloc(sizeof(int));…

Java学习笔记5-1——多线程

目录前言核心概念线程创建继承Thread类实现Runnable接口上述两个方法小结实现Callable接口并发问题简介静态代理模式线程状态线程停止&#xff08;stop&#xff09;线程休眠&#xff08;sleep&#xff09;线程礼让&#xff08;yield&#xff09;线程强制执行&#xff08;join&a…