自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Meiko记录

本博记录自己的过往积累和学习记录,所有内容并不是教科书式的解释,只是结合 我自己的情况来编写,若有不妥,请多见谅

  • 博客(36)
  • 收藏
  • 关注

转载 最小代价构造回文串

回文串就是正着读反着读都一样的字符串,面试笔试中经常出现回文相关的题目,我们之前有好几篇讲解回文问题的文章,是判断回文串或者寻找最长回文串/子序列的:经典面试题:最长回文子串子序列解题模板:最长回文子序列如何高效判断回文单链表?本文就来研究一道「构造回文串的最小插入次数」的问题,然后所有回文相关的问题你都可以搞定了,如果再遇到回文算法题,就偷着乐吧~这次的题目比较困难,让字符串成为回文串的最少插入次数:函数签名如下:int minInsertions(string s);比如说

2021-07-30 15:13:49 1013

原创 合并两个有序数组

题目描述给你两个有序整数数组nums1 和 nums2,请你将 nums2 合并到nums1中,使 nums1 成为一个有序数组。初始化nums1 和 nums2 的元素数量分别为m 和 n 。你可以假设nums1 的空间大小等于m + n,这样它就有足够的空间保存来自 nums2 的元素。示例 1:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]示例 2:输入:nums1...

2021-07-30 11:34:23 164

原创 检测链表有环

检测链表有环方法二是常规实思路先用HashMap记录每个节点,如果遇到重复的节点就是环形链表入口点public class Solution { public ListNode detectCycle(ListNode head) { ListNode pos = head; Set<ListNode> visited = new HashSet<ListNode>(); while (pos != nu...

2021-07-30 11:05:31 267

原创 求根节点到叶节点数字之和

题目描述给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。每条从根节点到叶节点的路径都代表一个数字:例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。计算从根节点到叶节点生成的 所有数字之和 。叶节点 是指没有子节点的节点。示例 1:输入:root = [1,2,3]输出:25解释:从根到叶子节点路径 1->2 代表数字 12从根到叶子节点路径 1->3 代表数字 13因此,数字总和

2021-07-30 10:50:43 234

原创 非空链表相加

两数相加给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,

2021-07-30 10:27:03 147

原创 2.5D和3D

首先是2.5D的摄像机,可以看的出来, 2.5D 的摄像机被限定在了一个圆周上。 除了能拉远拉近, 角度是完全不会变的。2.5D的摄像头看见的图像。不管你怎么转都是以这个角度 对着人物拉近拉远,以及围绕周身旋转。--------------------------------------------------------------分割---------------------------------------------然后是2.8D看摄像机示意图。2.8D在2.5D的基础上 增加了

2021-07-29 16:21:58 2513

转载 递归详解

在数据结构算法设计中,或者一个方法的具体实现的时候,有一种方法叫做“递归”,这种方法在思想上并不是特别难,但是实现起来还是有一些需要注意的。虽然对于很多递归算法都可以由相应的循环迭代来代替,但是对于一些比较抽象复杂的算法不用递归很难理解与实现。递归分为直接递归和间接递归,就简单分享一下两个小的直接递归。对于递归的概念,其实你可以简单的理解为自己定义自己,记得小时候看过一部电视剧《狼毒花》,里面主角叫做“常发”,但是个文盲,老师问他叫什么,他说“常发”。“哪个常?”“常发的常啊!”“哪个发?”“常发的发啊

2021-07-29 11:19:38 34857 1

转载 BIO,NIO,AIO区别

BIO,NIO,AIO 总结Java 中的 BIO、NIO和 AIO 理解为是 Java 语言对操作系统的各种 IO 模型的封装。程序员在使用这些 API 的时候,不需要关心操作系统层面的知识,也不需要根据不同操作系统编写不同的代码。只需要使用Java的API就可以了。在讲 BIO,NIO,AIO 之前先来回顾一下这样几个概念:同步与异步,阻塞与非阻塞。同步与异步 同步:同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。 异步:异步就是发起一个调用后,立刻得到被调..

2021-07-23 19:27:56 21236 5

转载 JNI详解

为什么要用JNI?因为有些功能JAVA无法提供,比如对扫描仪驱动,我现在就是要搞这个,网上给的例子都是SB.我气不过,便要自己去搞.感觉很悲剧.搜来想去,只能想办法通过C/C++来操作,然后用JAVA去调用C.这就需要JNI了.什么是JNI?JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++).这是百度百科上说的.通俗来说,就是JAVA调用C/C++函数的接口.如果你要想调用C系列的函数,你就必须遵守这样的约定.

2021-07-23 18:02:29 1512

原创 DFA 敏感词过滤

对于一个游戏,如果有聊天功能,那么我们就会希望我们的聊天系统能够对玩家的输入进行判断,如果玩家的输入中含有一些敏感词汇,那么我们就禁止玩家发送聊天,或者把敏感词转换为 * 来替换。为什么要使用 DFA 算法设我们已经有了一个敏感词词库(从相关部门获取到的,或者网上找来的),那么我们最容易想到的过滤敏感词的方法就是:遍历整个敏感词库,拿到敏感词,再判断玩家输入的字符串中是否有该敏感词,如果有就把敏感词字符替换为 *但这样的方法,我们需要遍历整个敏感词库,并且对玩家输入的字符串进行替换。而整个敏感

2021-07-23 17:34:50 840

转载 java中的ClassLoader

ClassLoader翻译过来就是类加载器,普通的java开发者其实用到的不多,但对于某些框架开发者来说却非常常见。理解ClassLoader的加载机制,也有利于我们编写出更高效的代码。ClassLoader的具体作用就是将class文件加载到jvm虚拟机中去,程序就可以正确运行了。但是,jvm启动的时候,并不会一次性加载所有的class文件,而是根据需要去动态加载。想想也是的,一次性加载那么多jar包那么多class,那内存不崩溃。本文的目的也是学习ClassLoader这种加载机制。Class文件的

2021-07-23 15:30:23 174

转载 深入解析Java AtomicInteger 原子类型

Java开发中不可避免的会遇到并发的问题。在进行并发编程的时候我们需要确保程序在被多个线程并发访问时可以得到正确的结果,也就是要实现线程安全。那么什么样的标准可以称为线程安全呢?这里有线程安全的定义:当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么这个类就是线程安全的。举一个线程不安全的小例子。假如我们想实现一个功能来统计网页访问量,首先我们可能想到用count++的方法来统计访问量.

2021-07-22 18:08:44 149

转载 @Inherited

@Inherited是一个标识,用来修饰注解作用:如果一个类用上了@Inherited修饰的注解,那么其子类也会继承这个注解注意:接口用上个@Inherited修饰的注解,其实现类不会继承这个注解父类的方法用了@Inherited修饰的注解,子类也不会继承这个注解当用了@Inherited修饰的注解的@Retention是RetentionPolicy.RUNTIME,则增强了继承性,在反射中可以获取得到代码演示:@Target(ElementType.TYPE)@Retention

2021-07-22 17:34:25 123

原创 Java private public protected

Java是使用“访问控制符”来控制哪些细节需要封装,哪些细节需要暴露的。 Java中4种“访问控制符”分别为private、default、protected、public,它们说明了面向对象的封装性,所以我们要利用它们尽可能的让访问权限降到最低,从而提高安全性。 下面详细讲述它们的访问权限问题。其访问权限范围如表5-1所示。表5-1 访问权限修饰符 1. private 表示私有,只有自己类能访问 2. default表示没有修饰符修饰,只有同一个包的类能...

2021-07-22 16:29:34 204

原创 Java的Integer和int有什么区别

Java是面向对象的编程语言,一切都是对象,但是为了编程的方便还是引入了基本数据类型,为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换,对应如下:原始类型:boolean,char,byte,short,int,long,float,double包装类型:Boolean,Character,Byte,Short,Integer..

2021-07-22 16:16:03 767

原创 java中的序列化和transient

一、序列化的含义、意义及使用场景序列化:将对象写入到IO流中 反序列化:从IO流中恢复对象 意义:序列化机制允许将实现序列化的Java对象转换位字节序列,这些字节序列可以保存在磁盘上,或通过网络传输,以达到以后恢复成原来的对象。序列化机制使得对象可以脱离程序的运行而独立存在。 使用场景:所有可在网络上传输的对象都必须是可序列化的,比如RMI(remote method invoke,即远程方法调用),传入的参数或返回的对象都是可序列化的,否则会出错;所有需要保存到磁盘的java对象都必须是可序列化

2021-07-22 15:54:37 684

原创 java深克隆和浅克隆

基本概念浅复制(浅克隆)被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所拷贝的对象,而不复制它所引用的对象。 深复制(深克隆) 被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。 实现java深复制和浅复制的最关键的就是要实现Object中的clon..

2021-07-22 14:39:01 290

转载 哈夫曼编码

哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。哈夫曼编码,主要目的是根据使用频率来最大化节省字符(编码)的存储空间。简易的理解就是,假如我有A,B,C,D,E五个字符,出现的频率(即权值)分别为5,4,3,2,1,那么我们第一步先取两个最小权值作为左右子树构造一

2021-07-20 16:46:04 579

转载 SSL/TLS协议

一、作用不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。(1)窃听风险(eavesdropping):第三方可以获知通信内容。(2)篡改风险(tampering):第三方可以修改通信内容。(3)冒充风险(pretending):第三方可以冒充他人身份参与通信。SSL/TLS协议是为了解决这三大风险而设计的,希望达到:(1) 所有信息都是加密传播,第三方无法窃听。(2) 具有校验机制,一旦被篡改,通信双方会立刻发现。(3) 配...

2021-07-20 16:29:03 417

原创 HTTP/2

前言HTTP/2 相比于 HTTP/1.1,可以说是大幅度提高了网页的性能,只需要升级到该协议就可以减少很多之前需要做的性能优化工作,当然兼容问题以及如何优雅降级应该是国内还不普遍使用的原因之一。虽然 HTTP/2 提高了网页的性能,但是并不代表它已经是完美的了,HTTP/3 就是为了解决 HTTP/2 所存在的一些问题而被推出来的。一、HTTP/1.1发明以来发生了哪些变化?如果仔细观察打开那些最流行的网站首页所需要下载的资源的话,会发现一个非常明显的趋势。近年来加载网站首页需要的下载的数据量

2021-07-20 16:14:12 154

原创 MQTT

1. 什么是 MQTT?MQTT (Message Queuing Telemetry Transport,消息队列遥测传输)是一种基于 TCP/IP 协议族的应用层协议。MQTT 协议是专门针对硬件性能低下 & 网络状况不稳定的场景设计的,这使得 MQTT 在物联网和移动应用等受限场景得到广泛应用。1.1 MQTT 协议的发展历史1999 年:Andy Stanfork-Clark (IBM) 和 Arlen Nipper 发布 MQTT 协议,用于通过卫星连接石油管道遥测系统,MQ.

2021-07-19 19:24:56 3092

原创 git clone --depth=1

情况一:git clonegit clone https://github.com/labuladong/fucking-algorithm使用git可视化命令git log --graph --oneline --all,查看仓库的所有历史提交记录(我这里用alias取了别名glog)说明:一般仓库文件不大时,我们都可以用这个方法git clone仓库,但问题是有时候,在仓库历史的某次commit时,有人不小心提交了1G的文件,虽然后面的commit中他把这个文件删除了,但是在.git文件夹中仍然

2021-07-14 11:36:51 450

原创 git 回滚远程分支

1.用命令行打开git项目路径,git log 命令查看commit记录> git log2.找到你需要回滚的commitId,输入git reset --hard{commitId},将本地文件回滚:git reset --hard 70438034dc4c4551910fe9c39ab65752e3dd7bd93.此时本地文件就已回到了commit 70438034dc4c4551910fe9c39ab65752e3dd7bd9之后的状态,但是远程的仓库里并没改变,需要继.

2021-07-14 11:23:45 3987

原创 java NIO/reactor模式/netty

NIO是Java 4里面提供的新的API,目的是用来解决传统IO的问题。本文下面分别从Java NIO的几个基础概念介绍起。  以下是本文的目录大纲:  一.NIO中的几个基础概念  二.Channel  三.Buffer  四.Selector  若有不正之处,请多多谅解并欢迎批评指正。  请尊重作者劳动成果,转载请标明原文链接:  http://www.cnblogs.com/dolphin0520/p/3919162.html一.NIO中的几个基础概念  在N.

2021-07-09 14:54:15 252

原创 kafka网络模型

Kafka基于高吞吐率和效率考虑,并没有使用第三方网络框架,而且自己基于java nio封装的,总体网络模型如下:Broker的内部处理流水线化,分为多个阶段来进行(SEDA),以提高吞吐量和性能,尽量避免Thead盲等待,以下为过程说明。Accept Thread负责与客户端建立连接链路,然后把Socket轮转交给Process ThreadProcess Thread负责接收请求和响应数据,Process Thread每次基于Selector事件循环,首先从Response Queue读.

2021-07-09 11:35:34 1184

转载 深入理解 Kafka 副本机制

一、Kafka集群Kafka 使用 Zookeeper 来维护集群成员 (brokers) 的信息。每个 broker 都有一个唯一标识broker.id,用于标识自己在集群中的身份,可以在配置文件server.properties中进行配置,或者由程序自动生成。下面是 Kafka brokers 集群自动创建的过程:每一个 broker 启动的时候,它会在 Zookeeper 的/brokers/ids路径下创建一个临时节点,并将自己的broker.id写入,从而将自身注册到集群;...

2021-07-09 11:23:11 536

转载 深入消费者

1 消费者参数配置对于一个消费者来说,他要做的事情只有一件,那就是使用poll()来拉取消息。至于他是从哪个分区拉取,则是靠消费者组来动态的调整这个消费者所消费的分区,又或者是由开发者来自定义。但无论如何,这个消费者都需要通过poll()来拉取消息。这也是这一节的内容:通过参数配置能够影响poll操作的哪些内容。首先需要确定一点,当消费者使用poll()拉取消息的时候,他只能拉到HW水位线及以下的消息。1.1 分区配置我们可以让消费者针对于某一个分区进行消费。为了实现这个目标

2021-07-09 10:57:59 146

原创 Kafka 为什么速度那么快

写入数据Kafka会把收到的消息都写入到硬盘中,它绝对不会丢失数据。为了优化写入速度Kafka采用了两个技术, 顺序写入 和 MMFile 。顺序写入磁盘读写的快慢取决于你怎么使用它,也就是顺序读写或者随机读写。在顺序读写的情况下,某些优化场景磁盘的读写速度可以和内存持平。因为硬盘是机械结构,每次读写都会寻址->写入,其中寻址是一个“机械动作”,它是最耗时的。所以硬盘最讨厌随机I/O,最喜欢顺序I/O。为了提高读写硬盘的速度,Kafka就是使用顺序I/O。而且Linux对于磁盘的

2021-07-09 10:50:21 249 1

转载 Kafka如何保证高可用

什么是高可用「高可用性」,指系统无间断地执行其功能的能力,代表系统的可用性程度Kafka从0.8版本开始提供了高可用机制,可保障一个或多个Broker宕机后,其他Broker能继续提供服务备份机制Kafka允许同一个Partition存在多个消息副本,每个Partition的副本通常由1个Leader及0个以上的Follower组成,生产者将消息直接发往对应Partition的Leader,Follower会周期地向Leader发送同步请求同一Partition的Replica不应存储在

2021-07-09 10:45:07 3267

原创 springboot kafka

Kafka 环境安装接下来,小哈为大家演示一下,在 Linux 系统中,采用最简单的单机安装方式, 因为本文着重点还是介绍 Spring Boot 2.x 快速集成整合 Kafka.下载 Kafka访问 Kafka 官网 kafka.apache.org/downloads,下载 tgz 包, 这里演示版本为最新的 2.3.0 版本。解压,进入目录下载下来过后,放置到指定位置,执行命令解压:tar -zxvf kafka_2.11-2.3.0.tgz 复制代码.

2021-07-08 21:02:04 123 1

原创 kafka补充

11.LEO、LSO、AR、ISR、HW 都表示什么含义?讲真,我不认为这是炫技的题目,特别是作为 SRE 来讲,对于一个开源软件的原理以及概念的理解,是非常重要的。LEO(Log End Offset): 日志末端位移值或末端偏移量,表示日志下一条待插入消息的位移值。举个例子,如果日志有 10 条消息,位移值从 0 开始,那么,第 10 条消息的位移值就是 9。此时,LEO = 10。 LSO(Log Stable Offset): 这是 Kafka 事务的概念。如果你没有使用到事务,那么这个值

2021-07-08 20:53:46 616 4

原创 kafka消息丢失问题

生产者丢失消息的情况生产者(Producer) 调用send方法发送消息之后,消息可能因为网络问题并没有发送过去。所以,我们不能默认在调用send方法发送消息之后消息消息发送成功了。为了确定消息是发送成功,我们要判断消息发送的结果。但是要注意的是 Kafka 生产者(Producer) 使用 send 方法发送消息实际上是异步的操作,我们可以通过 get()方法获取调用结果,但是这样也让它变为了同步操作,示例代码如下:详细代码见我的这篇文章:Kafka系列第三篇!10 分钟学会如何在 Spri

2021-07-08 20:38:43 1491

原创 kafka基础

什么是 KafkaKafka 是由 Linkedin 公司开发的,它是一个分布式的,支持多分区、多副本,基于 Zookeeper 的分布式消息流平台,它同时也是一款开源的基于发布订阅模式的消息引擎系统。Kafka 的基本术语消息:Kafka 中的数据单元被称为消息,也被称为记录,可以把它看作数据库表中某一行的记录。批次:为了提高效率, 消息会分批次写入 Kafka,批次就代指的是一组消息。主题:消息的种类称为 主题(Topic),可以说一个主题代表了一类消息。相当于是对消息进行分类。主题

2021-07-08 20:15:22 328 1

原创 Java实现线程间的通信的五种方式

如何使两个线程按顺序执行?假设有两个线程:线程A和线程B。两个线程都可以依次打印三个数字(1-3)。让我们看一下代码:private static void demo1() { Thread A = new Thread(new Runnable() { @Override public void run() { printNumber("A"); } }); Thread B = new Thre..

2021-07-06 21:08:27 3029 5

转载 google Guava之EventBus

EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现,在应用中可以处理一些异步任务。对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案,我们不用创建复杂的类和接口层次结构。EventBus流程图EventBus实际上是一个消息队列,Event Source发送一个消息到EventBus,然后再由EventBus将消息推送到所监听的Listener。EventBus基本用法1. 创建Listener我们可以通过@Subsc

2021-07-06 14:03:41 479

原创 状态机 java简单实现

介绍有限状态机通常用于模拟序列逻辑,换句话说,就是用于代表和控制执行流程。有限状态机所需条件:一个物体只有固定的几种状态(例如交通灯只有绿灯、黄灯和红灯三个状态)。 有固定的变化顺序(例如交通灯只能绿灯->黄灯->红灯->绿灯循环) 物体同一时间点上只有一种状态。例子这里拿一个空调做例子,图是用了别人的,这里说明下下面三个状态的意思:Off:空调关机FanOnly:空调仅吹风Cool:空调制冷原始的解决办法StateEnum用枚举类定义三种

2021-07-06 13:59:37 5338 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除