摘要: 一 Unsafe介绍 Unsafe 是位于 sun.misc 包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升 Java 运行效率、增强 Java 语言底层资源操作能力方面起到了很大的作用。但由于 Unsafe 类使 Java 语 阅读全文
posted @ 2024-03-03 11:09 balfish 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 1 重点场景分类 1. 线程 2. volatile 3. 锁 4. jvm和gc 5. TreadLocal 6. 深拷贝浅拷贝 7. 设计模式 8. IO 2 Java 中的几种基本数据类型了解么? Java 中有 8 种基本数据类型,分别为: 6 种数字类型: 4 种整数型:byte、shor 阅读全文
posted @ 2024-03-02 16:35 balfish 阅读(29) 评论(1) 推荐(0) 编辑
摘要: 一 概述 Semaphore也叫信号量,在JDK1.5被引入,可以用来控制同时访问特定资源的线程数量,通过协调各个线程,以保证合理的使用资源。 Semaphore内部维护了一组虚拟的许可,许可的数量可以通过构造函数的参数指定。 访问特定资源前,必须使用acquire方法获得许可,如果许可数量为0,该 阅读全文
posted @ 2024-02-29 10:39 balfish 阅读(16) 评论(0) 推荐(0) 编辑
摘要: 一 概述 "事务传播性","事务传播行为类型" 都是面试中问题的问法,看到"事务", "传播"就要想到下面的内容 二 分类 先来看一下Spring中对于事务传播性的几种定义 PROPAGATION_REQUIRED -- 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。PROPAG 阅读全文
posted @ 2024-02-26 15:24 balfish 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 1 概述 布隆过滤器实际上是一个很长的二进制数组 + 一系列随机hash映射函数,主要用于判断一个元素是否在集合中。 链表、树、散列表等等数据结构也都可以进行判断, 但是随着集合中元素的增加,我们需要的存储空间也会呈现线性增长,检索速度也越来越慢,最终达到瓶颈。 上述三种结构的检索时间复杂度分别为O 阅读全文
posted @ 2024-02-06 15:12 balfish 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 一 概述 RPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,这个过程就像调用本地方法一样,而不需要了解底层网络技术的思想。 为什么要 RPC ? 因为,两个不同的服务器上的服务提供的方法不在一个内存空间,所以,需要通过网络编程才能传递方法 阅读全文
posted @ 2021-08-05 20:46 balfish 阅读(45) 评论(0) 推荐(0) 编辑
摘要: 一 哈希表 哈希即散列技术,就是数据保存的存储位置和关键字之间存在一个映射关系,使得关键字可以和存储位置直接对应起来。 记录的存储位置 p 和关键字 key 之间确定一个对应关系 H,使得 p = H(key),则称关系 H 为散列函数,p 为散列地址。 通过散列技术将数据存储起来的所建成的存储结构 阅读全文
posted @ 2021-07-16 11:18 balfish 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 有时候需要索引很长的字符列,这会让索引变得大且慢。通常可以索引开始的部分字符,这样可以大大节约索引空间,从而提高索引效率。但这样也会降低索引的选择性。(索引空间<->索引选择性的冲突, 如何折中选择是本次要讨论的话题)索引的选择性是指不重复的索引值和数据表的记录总数的比值,范围从1/T到1之间。索引 阅读全文
posted @ 2018-05-07 17:15 balfish 阅读(17880) 评论(3) 推荐(2) 编辑
摘要: 一 内存模型 - 主存高速缓存的一致性 在计算机执行程序时,每条指令都是在CPU中执行的。而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行中的临时数据时存放在主存(物理内存)当中的,CPU执行速度很快,而从内存中读取&写入数据的速度很慢,因此对数据的操作如果通过内存的交互来操作,会大大降低 阅读全文
posted @ 2018-04-17 12:04 balfish 阅读(358) 评论(0) 推荐(1) 编辑
摘要: 一 TCP三次握手 (右图为简化版的) 起初服务器和客户端都为CLOSED状态。在通信开始前,双方都得创建各自的传输控制块(TCB)。 服务器创建完TCB后遍进入LISTEN状态,此时准备接收客户端发来的连接请求。 第一次握手 客户端向服务端发送连接请求报文段。该报文段的头部中SYN=1,ACK=0 阅读全文
posted @ 2018-03-29 17:13 balfish 阅读(2184) 评论(0) 推荐(0) 编辑
摘要: 一 什么是dubbo 下面从Dubbo官网直接拿来,看一下基于RPC层,服务提供方和服务消费方之间的调用关系,如图所示: 上述节点简单介绍以及他们之间的关系: Container: 服务运行容器,负责加载、运行服务提供者。必须。 Provider: 暴露服务的服务提供方,会向注册中心注册自己提供的服 阅读全文
posted @ 2018-03-28 12:11 balfish 阅读(557) 评论(0) 推荐(0) 编辑
摘要: 一 分布式中的CAP怎么理解 1 CAP定义 C(Consistency)一致性 指的是所有节点在同一时间的数据完全一致 A(Availability)可用性 指服务一直可用,而且是正常响应时间 P(Partition Tolerance)分区容忍性 指在遇到某节点或网络分区故障的时候,仍然能够对外 阅读全文
posted @ 2018-03-27 17:28 balfish 阅读(26755) 评论(1) 推荐(3) 编辑
摘要: 一 进程和线程 什么是进程 进程是程序的一次执行过程,是系统运行程序的基本单位。系统运行一个程序即是一个进程从创建, 运行到消亡的过程。 在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程。 如下图所示, 阅读全文
posted @ 2018-03-26 11:53 balfish 阅读(397) 评论(0) 推荐(0) 编辑
摘要: 一 mq简介(message queue) 我们可以把消息队列看作是一个存放消息的容器,当我们需要使用消息的时候,直接从容器中取出消息供自己使用即可。由于队列 Queue 是一种先进先出的数据结构,所以消费消息时也是按照顺序来消费的。 通过消息队列,应用程序可独立地执行-它们不需要知道彼此的位置,或 阅读全文
posted @ 2018-03-22 15:32 balfish 阅读(344) 评论(0) 推荐(0) 编辑
摘要: 一 引言 当前memcached,redis这类分布式kv缓存已经非常普遍。我们知道memcached的分布式其实是一种"伪分布式",也就是它的服务器节点之间其实是无关联的,之间没有网络拓扑关系,由客户端来决定一个key要存放在哪台机器。 具体来讲,假设我们有多台memcached服务器,编号分别为 阅读全文
posted @ 2018-03-12 16:52 balfish 阅读(2970) 评论(0) 推荐(0) 编辑