- 博客(69)
- 问答 (1)
- 收藏
- 关注
原创 如何在MAC M1上同时安装JDK8和JDK17
笔者原先就在电脑上安装了JDK8,由于需要用到MAT,MAT支持MAC m1的只兼容JDK17及以上的版本,故需安装JDK17,特此记录。接下来,打开终端,输入。
2023-04-03 22:52:58
4887
3
原创 IO模型详解
文章目录聊聊阻塞与非阻塞、同步和异步IO模型实验BIO概述特点优点缺点NIO概述特点IO多路复用selectepoll边缘触发和水平触发AIO概述总结聊聊阻塞与非阻塞、同步和异步在讲IO模型之前,我们先来聊聊什么是阻塞和非阻塞,同步和异步。因为我发现这两个概念非常容易混起来,好像阻塞就是同步,非阻塞就是异步。但是请注意:我们说的同步和异步描述的是顺序关系,而阻塞和非阻塞描述的是一种是否等待的行为,不能划上等于号举个例子:我们去食堂吃饭的时候,经常会有两种,一种是需要自己排队打饭,另一种是商家叫
2022-05-10 22:42:17
564
原创 详解零拷贝
零拷贝文章目录零拷贝前言IO基本原理内核态与用户态系统调用缓冲区进程缓冲区和内核缓冲区DMA技术零拷贝read+writemmap+writesendfile()sendfile()+SG-DMA总结前言零拷贝在很多地方都有用到,比如netty、kafka、rabbitMQ中,那为什么会需要用到零拷贝呢?我们今天来看一下原因。IO基本原理内核态与用户态现代操作系统中,由于系统资源(CPU、内存、硬盘)可能同时被多个应用程序访问,如果不加保护,那各个应用程序之间可能会产生冲突,对于恶意应用程序更可
2022-04-09 17:59:15
765
原创 zookeeper入门概述
文章目录简介数据结构节点类型持久(Persistent)持久化目录节点持久化顺序编号目录节点短暂(Ephemeral)临时目录节点临时顺序编号目录节点应用场景特点选举机制理解几个概念选举状态什么时候会进行选举?第一次启动非第一次启动Leader在集群中存在Leader不在集群中监听器原理监听器原理详解:常见的监听:注意写数据原理向Leader节点发送写数据的请求向Follower节点发送写数据的请求分布式锁分布式锁的由来什么是分布式锁?分布式锁的特点zookeeper分布式锁原理:简介ZooKeepe
2022-03-26 16:39:43
2761
原创 SQLException:no opration allowed after statement closed问题排查
SQLException:no opration allowed after statement closed问题排查文章目录SQLException:no opration allowed after statement closed问题排查问题深入Druid探索原由概念介绍大体流程:PS初始化和close过程prepareStatement():初始化PScloseStatement():关闭Statement根据代码与实践总结druid 1.0.29中是如何修复的?总结问题前几天,我负责的一个应
2022-03-20 15:40:30
16479
原创 zookeeper启动报错:serverid is not a number
zookeeper启动报错:serverid is not a number文章目录zookeeper启动报错:serverid is not a number问题错误原因解决问题启动zookeeper时,启动失败:查看logs下面的日志,发现了这个错误。ERROR [main:o.a.z.s.q.QuorumPeerMain@99] - Invalid config, exiting abnormallyorg.apache.zookeeper.server.quorum.QuorumPee
2022-03-19 17:19:57
4146
原创 Guava限流
Guava限流文章目录Guava限流为什么要做限流原理漏桶算法令牌桶算法实战为什么要做限流通常我们的应用在部署之前都会先进行评估,有多少的调用量,需要多少台机器,能承受多大的流量;但是难免会有流量突然增大的时候,比如某时段某个接口突然遭受攻击,这时候某些机器可能会承受不了这个压力,导致崩溃,从而导致整个系统不可用。其实就像我们生活中,电闸的保险丝一样,突然使用了大功率的电器,导致保险丝就会烧断以保护各个电器不被强电流给烧坏;而在我们的系统中,就是设置一定的阈值,保护我们的系统能正常运行。通常我们流量
2022-03-19 13:46:59
4391
原创 Dubbo服务引用
Dubbo服务引用文章目录Dubbo服务引用概念服务引用的方式服务引用时机服务引用源码解析配置解析服务引用大致流程服务引用入口ref判空导致无法初始化BUG修复createProxy()——服务引用的开始RegistryProtocol.Refer()——消费者端的注册与订阅DubboProtocol.refer()——创建服务代理InvokergetSharedClient(url) ——获取共享客户端initClient(url) 初始化Netty客户端DubboProtocol.refer()流程图
2021-09-25 16:00:59
180
原创 dubbo服务暴露与注册
dubbo服务暴露与注册文章目录dubbo服务暴露与注册配置解析大致流程图服务暴露SPI机制本地暴露本地暴露作用远程暴露服务暴露:服务注册远程暴露流程图总结参考配置解析本文Dubbo源码版本为2.8.4。我们先从dubbo的配置讲起,主要是Spring的原理:我们一般通过XML或者annotation的方式,对dubbo进行配置。我们下面来讲一下XML的配置解析:上面这要用到了Spring的自定义标签功能,这个配置文件中,主要定义了一个dubbo的命名空间,编写了对应的xsd文档,用于约束 X
2021-08-13 17:42:38
692
原创 Dubbo优雅上下线详解
Dubbo优雅上下线文章目录Dubbo优雅上下线什么是Dubbo优雅上下线?为什么要Dubbo优雅上下线?为什么要优雅上线(延迟发布)?为什么要优雅下线?优雅上下线原理优雅上线原理优雅停机原理Dubbo延迟发布源码解读大致流程图:入口实现Dubbo优雅停机源码解读大致流程图停机入口注册中心注销注销协议Spring下的Dubbo优雅停机缺点解决总结参考什么是Dubbo优雅上下线?首先让我们来解释一下看一下优雅的意思:指人行为举止优美,自然且高雅。而在程序员眼中的优雅呢?代码具有以下特点:良
2021-07-05 11:02:28
1122
1
原创 Dubbo接口测试
Dubbo接口测试文章目录Dubbo接口测试如何在本机上进行Dubbo的接口测试如何在本机上进行Dubbo的接口测试首先,打开本机的设备终端。接下来,连接到本机的Dubbo端口:telnet localhost 20880然后,ls -l自己要测试的Dubbo接口类:ls -l XXService最后,Invoke 自己要测试的接口,如果要传的参数为一个对象的话,用JSON;如果为一个字符串,直接输入就可以了:invoke service路径.XXService.testUser({
2021-06-25 11:27:55
262
原创 Dubbo过滤器
Dubbo过滤器的使用文章目录Dubbo过滤器的使用如何使用?源码解析如何使用?通过实现Dubbo的Filter,重写里面的Invoke方法就可以了,在Invoke方法中写自己的要做的逻辑。@Componentpublic class XXFilter implements Filter { @Resource private XXService xxService; //如果在@Resource时出现注入的service为空,则加上这个 public void
2021-06-25 11:00:04
1100
1
原创 Mac搭建kafka集群
之前完成了单点的kafka,今天我们来完成kafka集群的搭建。首先设置多个broker首先为每个broker创建一个配置文件。cp config/server.properties config/server-1.properties cp config/server.properties config/server-2.properties然后编辑这些新的配置文件,设置新的属性,不然会引起冲突:config/server-1.properties: broker.id=1
2021-04-30 15:17:47
764
1
原创 Mac安装与启动kafka
安装的方法:利用终端直接安装brew install kafka通过brew安装,会默认直接安装最新的版本。因为我的电脑系统版本比较低,所以brew不支持最新的kafka版本。本文介绍的是通过官网下载安装包的方式。通过官网下载安装包安装有两个步骤:下载zookeeper(或者也可以使用kafka内置的zookeeper),因为kafka依赖zookeeper,所以在启动kafka前必须先启动zookeeper。>下载Kafka下载Zookeeper下载地址:http://ar
2021-04-29 18:41:53
3169
原创 什么是消息队列?
什么是消息队列?把要传的数据放到队列中,往队列中送消息的为生产者,往队列取数据的为消费者。其实消息队列就像是个房产中介,生产者给中介提供房源,消费者从中介买房。发布订阅模型大家都知道队列是先进先出的。但是如果此时出现多个消费者的时候,此时有一个消费者取了信息,取到之后,队列中就没有这个消息了,那其他消费者就没有办法再消费这个消息了。如果消费者中有些不需要消费这个消息怎么办?为了解决这些问题就有了一种新的模型:发布-订阅模式发布-订阅模式:这个模型中,将消息队列换成了主题,就是生产者发
2021-04-28 17:01:14
156
原创 IDEA项目代码github更新,本地未提交修改被覆盖怎么解决?
今天git pull的时候,发现把本地修改的代码都给覆盖了。解决方法:要恢复的类-》右键-》Local History-》show History-》右键要恢复的版本-》revert但是文件太多了,一个个地恢复非常地麻烦,问了下同事,记录了下解决方法。右键-》git-》repository-》stash Changes将要保存的内容取一个名字从GitHub更新代码右键-》git-》repository-》UnStash Changes再点击Apply Stash...
2021-04-27 18:39:56
1861
原创 什么是摩尔投票法?
目录一、摩尔投票法?概述步骤二、实战题目解题一、摩尔投票法?概述摩尔投票法又称多数投票法,主要用于解决一个数组中的众数的问题。步骤对抗阶段:分属两个候选人的票数两两对抗抵消计数极端:计算对抗结果中最后留下的候选人票数是否有效二、实战LeetCode主要元素题目数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1。解题public int majorityElement(int[] nums) { int major=num
2020-12-02 10:49:00
1404
原创 如何才能不用额外变量交换两个值?
目录原理实战解析原理首先我们需要知道异或(^)计算:相同为0,不同为1。所以,进行异或计算的结果相当于是结合了两个值的特征。从中我们也可以知道,如果两个相同的值进行异或的话,则得到的结果为0。实战编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值。示例:输入: numbers = [1,2]输出: [2,1]提示:numbers.length == 2public int[] swapNumbers(int[] numbers) { nu
2020-11-29 14:11:29
304
原创 详解HashMap与源码
源码系列ArrayList源码目录源码系列一.什么是HashMap?二、HashMap特点1.底层结构2.索引的计算3.哈希冲突4.为什么扩容是2的幂次方5.为什么hashmap可以存储null,而hashtable不可以?6.快速失败与安全失败7.线程安全8.hashmap到底是先扩容再加载还是先加载再扩容?二、源码分析1.常量2.构造方法3.Hash方法4.getNode5.put(篇幅较长,核心方法在红黑树前的部分)6.reSize(索引位置的计算最好自己动手计算一下会好理解)7.remove总
2020-11-13 17:14:58
350
原创 ArrayList重点方法源码分析
目录ArrayList底层结构可随机访问扩容机制使用快速失败机制线程不安全内存占用空间情况重点方法分析定义的常量及变量和数组构造方法扩容机制克隆toArray()get、set、remove、addforEachIteratorArrayList底层结构Object[]数组,可动态变化大小可随机访问实现了RandomAccess接口(一个标识接口,标识实现这个类的接口具有随机访问功能),底层是因为数组存储方法时连续储存的扩容机制oldCapacity+oldCapacity>>1=
2020-11-09 15:46:00
453
原创 什么是快速幂???
目录原理示例实战原理核心思想就是每一步都把指数分成两半,而相应的底数做平方运算。这样不仅能把非常大的指数不断变小,所执行的循环次数也变小,而最后的结果却不会变。时间复杂度为 O(log₂N)示例例如:3^11的计算11的二进制为 1011=2^3+2^1+2^03^11=(3*2^3)*(3*2^1)*(3*2^0)实战LeetCode50例题: 实现 pow(x, n) ,即计算 x 的 n 次幂函数。输入: 2.00000, 10输出: 1024.00000public do
2020-11-07 21:13:24
262
原创 剑指offer56-数组中只出现一次的数字
目录题目思路具体实现题目一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。示例1: 输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1]示例2:输入:nums = [1,2,10,4,1,4,3,3]输出:[2,10] 或 [10,2]思路使用异或位运算,异或运算:使两个进行异或的数,不同为1相同为0如果数组中只有一个数出现一次,其余数出现两次,则对整个数组进行遍历一次进
2020-11-05 10:09:56
119
原创 快速搞懂值传递与引用传递
传递与引用传递值传递引用传递注意雷区值传递基本数据类型作为参数的方法调用实参给形参传递数据的方式,直接将值复制一份给形参,实参和形参在内存上两个方法中的 互相独立的局部变量 不涉及到引用对内存中的数据,修改形参不会影响实参示例:public class test { public static void change(int x){ x=100; } public static void main(String[] args) { i
2020-10-31 19:14:50
393
原创 JAVA实现LRU缓存
1. 题目:设计LRU缓存结构,该结构在构造时确定大小,假设大小为K,并有如下两个功能:(1)set(key,Value):将记录(key,Value)插入该结构(2)gte(key):返回key对应的value值2. 要求:(1)set和get方法的时间复杂度为O(1)。(2)某个key的set或get操作一旦发生,认为这个key的记录成了最常使用的。(3)当缓存的大小超过K时,移除最不经常使用的记录,即set和get最久远的。3. 思路:实现一个双向链表,功能: 增加节点 删除
2020-10-26 10:11:31
263
1
原创 中兴一面
杭州地区,问的很基础,大概20分钟左右。面试官很好,叫我不要紧张(流汗了都????)1、自我介绍(三分钟)2、抽象类和接口的区别3、接口中可以有构造函数吗4、hashmap和hashTable(面试官居然问我是不是背过题????????????)5、hashcode和equals的关系6、equals相等hashcode一定相等吗7、String可以继承吗8、乐观锁和悲观锁9、CAS有在什么地方用到过吗10、讲一下GC11、进程的状态可能还有些题没记起来,大概就是这些,没有手撕代码;
2020-10-13 19:48:09
285
原创 LeetCode 搜索旋转排序数组(JAVA)
题目假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], target = 0输出: 4示例 2:输入: nums = [4,5,6,7,0,1,2], tar
2020-06-07 19:47:14
145
原创 LeetCode 两两交换链表中的节点(JAVA)
题目给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.代码实现public class TwoChange { public static void main(String[] args) { ListNode node1=new ListNode(1); ListNode no
2020-06-04 22:39:52
198
原创 LeetCode 删除链表的倒数第n个节点(JAVA)
题目给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.代码实现public class DeleteNNode { public static void main(String[] args) { ListNode node1=new ListNode(1); ListN
2020-06-04 21:43:49
225
原创 Leetco 两数相加(JAVA)
问题:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。*如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。*您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807代码实现public class 两数相加 {
2020-06-03 22:00:19
221
原创 LeetCode排序链表(JAVA)
问题:在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5代码实现public class 排序链表 { public static void main(String[] args) { ListNode no
2020-06-03 21:53:07
355
原创 贪心算法(JAVA)
基本介绍贪心算法是指在对问题进行求解的时候,在每一步选择中都采取最好的或者最优(最有利)的选择,从而希望能够导致最好或者最优的算法贪心算法所得到的结果不一定是最优的(有时是最优解)但是都是相对近似(接近)最优解。算法的应用问题:有城市北京、上海、天津、广州、深圳、成都、杭州、大连,有五个电台K1(北京、上海、天津)、K2(广州、北京、深圳)、K3(成都、杭州、上海)、K4(上海、天津)K5(杭州、大连),问如何选择最少的电台数,使得覆盖所有的城市代码实现public class Greed
2020-06-03 19:45:39
413
原创 KMP算法及其应用(JAVA)
基本介绍KMP是一个解决模式串在文本串是否出现过,如果出现过,最早出现的位置的经典算法KMP算法利用之前判断过信息,通过一个next数组,保存模式串中前后最长公共子序列的长度,每次回溯时,通过next数组找到,前面匹配过的位置,省去大量时间代码实现public class KMPAlogrithm { public static void main(String[] args) { //测试 String str1="BBC ABCDAB ABCDABCD
2020-05-31 23:31:05
376
原创 动态规划应用(JAVA)
基本介绍(1)核心思想:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法(2)基本思想:将代求解问题分成若干子问题,先求解子问题,然后从这些子问题的解得到原问题的解(3)与分治算法不同的是,适合用动态规划求解的问题,经分解得到子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,是进行进一步的解)(4)动态规划可以通过填表的方式来逐步推出,得出最优解利用动态规划解决01背包问题代码实现:/** * 动态规划解决背包问题 */public clas
2020-05-30 23:48:23
202
原创 分治算法的应用(JAVA)
基本介绍“分而治之”,就是把一个复杂问题分成两个或更多相同或相似的子问题,再把子问题分成更小的子问题…直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。基本步骤1、分解:将原问题分解为若干规模较小,相互独立,与原问题形式相同的子问题2、解决:若子问题规模较小而容易被解决则直接解决,否则递归地解各个子问题3、合并:将各个子问题的解合并为原问题的解利用分治算法实现汉诺塔问题public class DivideAndConquare { public static void
2020-05-30 23:33:44
355
原创 二分查找(2)(JAVA实现)
该二分查找采用的是非递归的方式代码实现:public class BinarySearchNoRecur { public static void main(String[] args) { int[] arr={1,3,4,7,9,13,15,17}; int target=9; System.out.println(binarySearchNoRecur(arr,target)); } //二分查找的非递归实现 /*
2020-05-30 23:28:16
155
原创 图的深度遍历与广度遍历(JAVA实现)
为什么要有图?(1)线性表局限于一个直接前驱和一个直接后继的关系(2)树也只有一个直接前驱也就是父节点(3)当我们需要表示多对多关系时,就需要用到了图概念:表示方式:(1)二维数组(邻接矩阵)(2)链表表示(邻接表)邻接表:(1)邻接矩阵需要为每个顶点都分配n个边的空间,其实很多边都是不存在,会造成空间的一定的损失(2)邻接表的实现只关心存在的边,不关心不存在的边,因此没有空间浪费,由链表+数组组成。深度优先遍历深度优先遍历(Depth First Search):(1)
2020-05-30 23:25:49
383
原创 JDKAPI及JAVA需要的软件分享
需要自取链接:https://pan.baidu.com/s/14rMOtcWtXJf8KsLRQa47VA提取码:3m9bIDEA :链接:https://pan.baidu.com/s/1baujXv3IuNdpOz00FCawzQ提取码:qyzvmySql:链接:https://pan.baidu.com/s/1lPKmwmmRf6_otJQL_GncYA提取码:et4tSQLYog:链接:https://pan.baidu.com/s/1EdlzkkOG21LM_CAJSdVc1
2020-05-30 22:34:09
136
原创 平衡二叉树(AVL)(JAVA实现)
为什么要有平衡二叉树?因为有的时候,一颗树只有左子树或者右子树有节点,这样像一个单链表,相对于查找就没有优势了。基本介绍:(1)平衡二叉树也叫平衡二叉搜索树,又被称为AVL树,可以保证查询效率(2)具有以下特点:它是一颗空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一颗平衡二叉树情况(一):当rightHeight - leftHeight>1成立,此时不是一颗AVL树,需要进行左旋转步骤:(1)创建一个新节点newNode,值等于当前节点的值(2)把新节点的左
2020-05-27 22:49:24
161
原创 二叉排序树(JAVA实现)
基本介绍:BST(Binary Sort Tree),对于二叉排序树的任何非叶子节点,要求左子节点的值比当前节点小,右子节点的值比当前节点的值大注意:如果有相同的值,可以将该节点放在左子节点或右子节点删除节点:1、删除叶子节点(1)先找到要删除的节点 targetNode(2)找到targetNode的父节点parent(3)确定targetNode是parent的左子节点还是右子节点(4)根据前面的情况对应删除左子节点: parent.left=null右子节点:parent.rig
2020-05-26 22:35:08
168
原创 赫夫曼编码与解码(JAVA实现)
**作用:**用于压缩文件,是无损压缩步骤:设传输的字符串为:(i like like like java do you like a java)(1)计算各字符出现的次数:d:1 y:1 u:1 j:2 v:2 o:2 I:4 k:4 e:4 i:5 a:5 (空格):9(2)按照上面字符出现的次数,构建一颗赫夫曼树,次数作为权值(3)根据赫夫曼树,给各个字符,规定编码(前缀编码),向左路径为0,向右路径为1(5)按照上述的赫夫曼编码,就可以得到字符串对应的编码**注意:**赫夫曼树根据排
2020-05-26 22:21:28
205
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人