面试
文章平均质量分 84
DP成长之路
这个作者很懒,什么都没留下…
展开
-
掌握设计原则,你就是光(25个问题,你会几个)
掌握设计原则,你就是光(25个问题,你会几个)原创 2021-04-08 21:22:13 · 76 阅读 · 0 评论 -
平衡二叉树和红黑树的区别
首先红黑树是不符合AVL树的平衡条件的,即每个节点的左子树和右子树的高度最多差1的二叉查找树。但是提出了为节点增加颜色,红黑是用非严格的平衡来换取增删节点时候旋转次数的降低,任何不平衡都会在三次旋转之内解决,而AVL是严格平衡树,因此在增加或者删除节点的时候,根据不同情况,旋转的次数比红黑树要多。所以红黑树的插入效率更高!!!Answer红黑树的 查询性能略微逊色于AVL树,因为他比avl树会稍微不平衡最多一层,也就是说红黑树的查询性能只比相同内容的avl树最多多一次比较,但是,红黑树在插入和删除上完.原创 2021-04-01 13:31:31 · 335 阅读 · 0 评论 -
从浏览器地址栏输入url到请求返回发生了什么?
你一看这种烂掉牙的问题,小case,但996面试大佬由此延展的问题已经远远超越了这个问题本身了,不信你就接着看。我回答了首先会进行 url 解析,根据 dns 系统进行 ip 查找。话音刚落,此时一位喜欢修福报的公司的大佬打断了我,说url为啥要解析,dns查询规则是什么?我一听就心里想,不按套路出牌啊,网上一般都没问这两个问题,心里再一想,俗话说,万事开头难,扛过这一波,答出来,就是阳光明媚,万物骚动的春天!先说为什么url要解析(也就是编码) 我回答大概内容是:因为网络标准规定了U转载 2021-03-31 19:43:58 · 185 阅读 · 0 评论 -
Redis主从复制的问题总结
读写分离的问题1.数据复制的延迟读写分离时,master会异步的将数据复制到slave,如果这是slave发生阻塞,则会延迟master数据的写命令,造成数据不一致的情况解决方法:可以对slave的偏移量值进行监控,如果发现某台slave的偏移量有问题,则将数据读取操作切换到master,但本身这个监控开销比较高,所以关于这个问题,大部分的情况是可以直接使用而不去考虑的。2.读到过期的数据我们知道redis在删除过期key的时候,是有两种策略,第一种是懒惰型策略,即只有当redis操原创 2021-03-31 19:33:56 · 407 阅读 · 0 评论 -
RR和RC的MVCC实现
Mysql事务和并发问题解决办法MVCCMVCC 多版本并发控制机制详解,undo log版本链和ReadView是如何避免并发问题转载 2021-03-27 20:20:45 · 579 阅读 · 0 评论 -
面对千万级、亿级流量怎么处理?
这是一道很常见的面试题,但是大多数人并不知道怎么回答,这种问题其实可以有很多形式的提问方式,你一定见过而且感觉无从下手:面对业务急剧增长你怎么处理?业务量增长10倍、100倍怎么处理?你们系统怎么支撑高并发的?怎么设计一个高并发系统?高并发系统都有什么特点?... ...诸如此类,问法很多,但是面试这种类型的问题,看着很难无处下手,但是我们可以有一个常规的思路去回答,就是围绕支撑高并发的业务场景怎么设计系统才合理?如果你能想到这一点,那接下来我们就可以围绕硬件和软件层面怎么支撑高转载 2021-03-25 20:42:03 · 243 阅读 · 0 评论 -
Java 后端线上问题排查常用命令
内存瓶颈freefree是查看内存使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存。free -h -s 3表示每隔三秒输出一次内存情况,命令如下[1014154@cc69dd4c5-4tdb5~]$freetotalusedfreesharedbuff/cacheavailableMem:1196236564305222045611364431376...转载 2021-03-23 19:39:55 · 273 阅读 · 0 评论 -
MySQL与Redis缓存的同步
本文介绍MySQL与Redis缓存的同步的两种方案 方案1:通过MySQL自动同步刷新Redis,MySQL触发器+UDF函数实现 方案2:解析MySQL的binlog实现,将数据库中的数据同步到Redis 一、方案1(UDF) 场景分析:当我们对MySQL数据库进行数据操作时,同时将相应的数据同步到Redis中,同步到Redis之后,查询的操作就从Redis中查找 过程大致如下: 在MySQL中对要操作的数据设置触发器Trigger,监听...转载 2021-03-23 19:18:36 · 129 阅读 · 0 评论 -
常见的Java锁总结:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,偏向锁,自旋锁等等
前言在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下:1.公平锁 / 非公平锁2.可重入锁 / 不可重入锁3.独享锁 / 共享锁4.互斥锁 / 读写锁5.乐观锁 / 悲观锁6.分段锁7.偏向锁 / 轻量级锁 / 重量级锁8.自旋锁公平锁 / 非公平锁公平锁公平锁是指多个线程按照申请锁的顺序来获取锁。非公平锁非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先.转载 2021-03-23 18:59:37 · 122 阅读 · 0 评论 -
多线程面试
1. 线程池都有哪些状态?RUNNING:这是最正常的状态,接受新的任务,处理等待队列中的任务。 SHUTDOWN:不接受新的任务提交,但是会继续处理等待队列中的任务。 STOP:不接受新的任务提交,不再处理等待队列中的任务,中断正在执行任务的线程。 TIDYING:所有的任务都销毁了,workCount 为 0,线程池的状态在转换为 TIDYING 状态时,会执行钩子方法 terminated()。 TERMINATED:terminated()方法结束后,线程池的状态就会变成这个。2. 守原创 2021-03-23 09:31:34 · 53 阅读 · 0 评论 -
线程池中多余的线程是如何回收的?
下面以JDK1.8为例进行分析1.runWorker(Worker w)工作线程启动后,就进入runWorker(Worker w)方法。里面是一个while循环,循环判断任务是否为空,若不为空,执行任务;若取不到任务,或发生异常,退出循环,执行processWorkerExit(w, completedAbruptly); 在这个方法里把工作线程移除掉。取任务的来源有两个,一个是firstTask,这个是工作线程第一次跑的时候执行的任务,最多只能执行一次,后面得从getTask()方法里.转载 2021-03-22 21:07:30 · 255 阅读 · 0 评论 -
阻塞、非阻塞、多路复用、同步、异步、BIO、NIO、AIO 一锅端
承接上文的操作系统,关于IO会涉及到阻塞、非阻塞、多路复用、同步、异步、BIO、NIO、AIO等几个知识点。知识点虽然不难但平常经常容易搞混,特此Mark下,与君共勉。1 阻塞跟非阻塞1.1 阻塞阻塞IO阻塞IO情况下,当用户调用read后,用户线程会被阻塞,等内核数据准备好并且数据从内核缓冲区拷贝到用户态缓存区后read才会返回。可以看到是阻塞的两个部分。 CPU把数据从磁盘读到内核缓冲区。 CPU把数据从内核缓冲区拷贝到用户缓冲区。 1.2 非阻塞.转载 2021-03-20 14:01:08 · 94 阅读 · 0 评论 -
硬核操作系统讲解
1 冯诺伊曼体系1.1 冯诺伊曼体系简介现代计算机之父冯诺伊曼最先提出程序存储的思想,并成功将其运用在计算机的设计之中,该思想约定了用二进制进行计算和存储,还定义计算机基本结构为 5 个部分,分别是中央处理器(CPU)、内存、输入设备、输出设备、总线。 存储器:代码跟数据在RAM跟ROM中是线性存储, 数据存储的单位是一个二进制位。最小的存储单位是字节。 总线:总线是用于 CPU 和内存以及其他设备之间的通信,总线主要有三种: 地址总线:用于指定 CPU 将要操作的内存转载 2021-03-20 14:00:07 · 242 阅读 · 0 评论 -
TCP/IP 开胃菜 之 HTTP
1 TCP/IP1.1 TCP/IP 定义TCP/IP协议族是一组协议的集合,也叫互联网协议族,计算机之间只有遵守这些规则,才能进行通信。TCP和IP只是其中2个重要的协议,所以用TCP/IP来命名这个互联网协议族,实际上他大致包括四层协议。1.2 TCP/IP 功能上文说过 TCP/IP 宏观上分为四层,接下来说下四层的具体作用。1.2.1. 应用层应用层 为用户直接提供不同的网络服务协议,比如 HTTP、Email、FTP 等,这些协议都是为了解决实际生...转载 2021-03-20 13:58:34 · 133 阅读 · 0 评论 -
TCP/IP高频考点之一个数据包的流浪日记 - 网络层
4 网络层 IP数据包的传输主要经过应用层、传输层、网络层、链路层。承接应用层HTTP、传输层TCP讲解,应用层数据被传输层包裹后接下来就需要被网络层包裹了,网络层的核心任务就是实现主机与主机之间的通信。讲解IP层之前需铺垫众多基础知识。4.1 IP 基础知识4.1.1 IP 定义现实生活人能找到人是因为知道彼此的详细地址,在网络中要通讯就要知道对方的 IP 地址,IPv4 是由32位二进制数据来表示的,每4位算一组并换算成10进制数据,组与组之间通过.分割。IPv44.1...转载 2021-03-20 13:57:16 · 574 阅读 · 0 评论 -
面试反客为主 TCP
3 传输层 TCP/UDP承接上文HTTP,数据经过应用层就到传输层,但数据到传输层之前需要先获得服务端的 IP 地址,这就涉及到DNS域名解析。3.1 DNS3.1.1 DNS 讲解主机的真正地址是IP,问题是IP地址不方便人们记忆,就像你拿手机给张三打电话,难道你能瞬间说出张三电话号码么,手机里做一个名字跟电话的映射即可,想通话时直接从通讯录找到张三就可以找到对应的手机号,在网络请求时候也是需要映射的,而域名服务器Domain Name System就是干这个事的,深入...转载 2021-03-20 13:55:47 · 157 阅读 · 0 评论 -
Java并发
1、HashMap面试第一题必问的HashMap,挺考验Javaer的基础功底的,别问为啥放在这,因为重要!HashMap具有如下特性: HashMap 的存取是没有顺序的。 KV 均允许为 NULL。 多线程情况下该类不安全,可以考虑用 HashTable。 JDk8底层是数组 + 链表 + 红黑树,JDK7底层是数组 + 链表。 初始容量和装载因子是决定整个类性能的关键点,轻易不要动。 HashMap是懒汉式创建的,只有在你put数据时.转载 2021-03-20 13:53:13 · 134 阅读 · 0 评论 -
Redis面试
Redis 是什么面试官:你先来说下 Redis 是什么吧!我:(这不就是总结下 Redis 的定义和特点嘛)Redis 是 C 语言开发的一个开源的(遵从 BSD 协议)高性能键值对(key-value)的内存数据库,可以用作数据库、缓存、消息中间件等。它是一种 NoSQL(not-only sql,泛指非关系型数据库)的数据库。我顿了一下,接着说,Redis 作为一个内存数据库: 性能优秀,数据在内存中,读写速度非常快,支持并发 10W QPS。 ...转载 2021-03-15 20:09:50 · 70 阅读 · 0 评论 -
ZGC垃圾回收器
ZGC(Z Garbage Collector)是一款由Oracle公司研发的,以低延迟为首要目标的一款垃圾收集器。它是基于动态Region内存布局,(暂时)不设年龄分代,使用了读屏障、染色指针和内存多重映射等技术来实现可并发的标记-整理算法的收集器。在JDK 11新加入,还在实验阶段,主要特点是:回收TB级内存(最大4T),停顿时间不超过10ms。一、动态RegionZGC的Region可以具有如图所示的大、中、小三类容量: 小型Region(Small Region):容量固定为2转载 2021-03-11 21:39:40 · 227 阅读 · 0 评论 -
如何发现 Redis 热点 Key ,解决方案有哪些?
产生原因热点问题产生的原因大致有以下两种: 用户消费的数据远大于生产的数据(热卖商品、热点新闻、热点评论、明星直播)。 在日常工作生活中一些突发的的事件,例如:双十一期间某些热门商品的降价促销,当这其中的某一件商品被数万次点击浏览或者购买时,会形成一个较大的需求量,这种情况下就会造成热点问题。同理,被大量刊发、浏览的热点新闻、热点评论、明星直播等,这些典型的读多写少的场景也会产生热点问题。 请求分片集中,超过单 Server 的性能极限。 在服务端读数据进行访问时,往往会对数据进转载 2021-03-07 22:29:41 · 118 阅读 · 0 评论 -
阿里面试:哈希一致性算法以及如何判断哈希一致性算法的好坏
一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用。判定哈希算法好坏的四个定义:1、平衡性(Balance):平衡性是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利用。很多哈希算法都能够满足这一条件。2、单调性(Monotonicity):单调..原创 2021-03-06 14:50:13 · 250 阅读 · 0 评论 -
Redis的缓存穿透、缓存击穿、缓存雪崩和布隆过滤器
一、缓存处理流程 前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果。二、缓存穿透描述:缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。解决方案:接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截; 从缓存取不到的数据...原创 2021-03-06 12:57:47 · 220 阅读 · 0 评论 -
生产者消费者三种实现方式Java
生产者消费者模式1、生产者只在仓库未满时进行生产,仓库满时生产者进程被阻塞;2、消费者只在仓库非空时进行消费,仓库为空时消费者进程被阻塞;一、synchronized方式实现代码如下:**ProduceAndConsumeBySynchronized.java**public class ProduceAndConsumeBySynchronized{ // TODO多线程调用}class StoreWN { public int capacity = 10; public i转载 2021-03-04 19:17:12 · 142 阅读 · 1 评论 -
快手:链表重排(使用原地算法)
import java.util.Scanner;// 时间复杂度O(n) 空间复杂度O(n)public class Main { public void reorderList(ListNode head){ if(head == null || head.next == null){ return ; } ListNode t = head; // 找到中间节点 ListNode te.原创 2021-02-22 16:04:03 · 323 阅读 · 0 评论 -
MySQL-InnoDB-MVCC多版本并发控制
前言最近正在啃《高性能MySQL》这本书, 当看到事务相关知识时,决定对该知识点稍微深入一下, 《高性能MySQL》中在介绍事务相关知识点时, 显然不是特别深入, 很多比较底层的知识点并没有太多的深入, 当然此处并不是要对本书做什么评判,言归正传, 这里主要先说一下本人在啃相关知识点时的曲折之路:首先是事务相关ACID特性, 之前已经有相关笔记进行过介绍, 这里不再重复; 接下来是高并发事务相关的问题, 像是脏读,不可重复读,幻读,更新丢失等问题之前也有相关笔记; 再下来就是MySQL应...原创 2021-02-20 00:18:17 · 245 阅读 · 0 评论