自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(128)
  • 收藏
  • 关注

原创 算法题for THS

第一题穷尽集合之间的元素组合public class THS01 { public static void main(String[] args) { List<String> list1 = new ArrayList<>(); list1.add("1"); list1.add("2"); list1.add("3"); List<String> list2 = new Ar

2022-03-19 15:03:57 479

原创 链表中环的入口结点--LeetCode第142题

给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。题解:快慢指针法,快指针一次走两步,慢指针一次走一步,当快慢指针第一次相遇,此时: 2(x+y)=n圈周长+x+y相遇以后快指针回到head和慢指针以同样速度每次走一步,最终会在链表中环的入口结点处相遇。这里可以这样理解, x + y = n圈周长, y = n圈周长 - x; 快慢指针再继续走x后, 快指针走到入口点,此时慢指针再圆中走的路程为: x + y, 刚好为圆n圈周长。package com.a.

2021-01-14 21:43:51 206

原创 两个链表的第一个公共节点 -剑指Offer第52题

输入两个链表,找出它们的第一个公共节点。如下面的两个链表:注意:如果两个链表没有交点,返回 null.在返回结果后,两个链表仍须保持原有的结构。可假定整个链表结构中没有循环。程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。解题思路:可以先计算两个链表的长度,长度差为n,首先,比较长的链表header先往后移动n步,然后两个链表一起往后移动,如果一样,则为公共节点。package com.alibaba.study.offer;/** * @Auther: w

2020-12-16 21:25:40 170

原创 数组中的逆序对 - 剑指Offer第51题

在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。示例 :输入: [7,5,6,4]输出: 5解题思路:参考LeetCode解题思路:https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui-lcof/solution/shu-zu-zhong-de-ni-xu-dui-by-leetcode-solution/package com.alibaba.s

2020-12-16 09:50:17 133

原创 合并K个升序链表 - LeetCode第23题

给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6提示:k == lists.length0 <

2020-12-14 19:23:38 149

原创 Kafka位移提交以及CommitFailedException

一、Kafka的消费位移  Consumer 端有个位移的概念,它和消息在分区中的位移不是一回事儿,虽然它们的英文都是 Offset。它记录了Consumer 要消费的下一条消息的位移。这可能和你以前了解的有些出入,不过切记是下一条消息的位移,而不是目前最新消费消息的位移。Consumer 需要向 Kafka 汇报自己的位移数据,这个汇报过程被称为提交位移。从用户的角度来说,位移提交分为自动提交和手动提交;从 Consumer 端的角度来说,位移提交分为同步提交和异步提交。  开启自动提交位移的方法很简

2020-12-13 21:56:36 806 1

原创 Kafka如何管理TCP连接

一、Kafka消息生产Kafka 的 Java 生产者 API 主要的对象就是KafkaProducer。通常我们开发一个生产者的步骤有 4 步。第 1 步:构造生产者对象所需的参数对象。第 2 步:利用第 1 步的参数对象,创建 KafkaProducer 对象实例。第 3 步:使用 KafkaProducer 的 send 方法发送消息。第 4 步:调用 KafkaProducer 的 close 方法关闭生产者并释放各种系统资源。二、TCP连接管理Java Producer 端管理

2020-12-13 19:31:03 587

原创 Kafka拦截器应用

一、Kafka拦截器 Kafka 拦截器分为生产者拦截器和消费者拦截器。生产者拦截器允许你在发送消息前以及消息提交成功后植入你的拦截器逻辑;而消费者拦截器支持在消费消息前以及提交位移后编写特定逻辑。值得一提的是,这两种拦截器都支持链的方式,即你可以将一组拦截器串连成一个大的拦截器,Kafka 会按照添加顺序依次执行拦截器逻辑。如果需要加AddTimestampInterceptor和UpdateCounterInterceptor两个拦截器,可以这样配置Properties props = new

2020-12-13 07:58:29 226 2

原创 十大经典排序算法

一、算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。-...

2020-12-11 19:54:05 847 1

原创 括号生成 - LeetCode第22题

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例:输入:n = 3输出:[  “((()))”, “(()())”,  “(())()”,  “()(())”,  “()()()”]解题思路:采用递归的思路,每个位置放置一个字符,可能是“(”,也可能是“)”,但是左右括号数量不允许超过 n, 右括号数量在放置的时候,不允许超过左括号数量。package com.alibaba.study.leetcode;import

2020-12-11 14:50:39 214 4

原创 Kafka之无消息丢失配置怎么实现

如何实现Kafka不丢消息?Kafka 只对“已提交”的消息(committed message)做有限度的持久化保证。不要使用 producer.send(msg),而要使用 producer.send(msg, callback)。记住,一定要使用带有回调通知的 send 方法。设置 acks = all。acks 是 Producer 的一个参数,代表了你对“已提交”消息的定义。如果设置成 all,则表明所有副本 Broker 都要接收到消息,该消息才算是“已提交”。这是最高等级的“已提交

2020-12-11 13:51:11 152

原创 Kafka基础(二)

一、Kafka分区  Kafka 的消息组织方式实际上是三级结构:主题 - 分区 - 消息。主题下的每条消息只会保存在某一个分区中,而不会在多个分区中被保存多份。  分区的作用就是提供负载均衡的能力,或者说对数据进行分区的主要原因,就是为了实现系统的高伸缩性(Scalability)。不同的分区能够被放置到不同节点的机器上,而数据的读写操作也都是针对分区这个粒度而进行的,这样每个节点的机器都能独立地执行各自分区的读写请求处理。并且,我们还可以通过添加新的节点机器来增加整体系统的吞吐量。除了提供负载均衡这

2020-12-11 11:17:56 152 1

原创 Kafka基础(一)

一、基本术语消息:Record。Kafka 是消息引擎嘛,这里的消息就是指 Kafka 处理的主要对象。主题:Topic。主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务。分区:Partition。一个有序不变的消息序列。每个主题下可以有多个分区。消息位移:Offset。表示分区中每条消息的位置信息,是一个单调递增且不变的值。副本:Replica。Kafka 中同一条消息能够被拷贝到多个地方以提供数据冗余,这些地方就是所谓的副本。副本还分为领导者副本和追随者副本,各自有不同的角色划分。副本

2020-12-10 19:39:52 112 1

原创 电话号码的字母组合 - LeetCode第17题

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].解题思路:可以按照递归的思路解题,递归遍历每一个数值,每个数字取一个字母,拼接起来。import com.alibaba.fastjson.JSON;import java.util.Calendar;impor

2020-12-07 21:15:22 96

原创 最接近的三数之和 - LeetCode第16题

 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。3 <= nums.length <= 10^3-10^3 <= nums[i] <= 10^3-10^4 <= target <= 10^4示例输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (

2020-12-07 18:49:09 126 2

原创 整数转罗马数字 - LeetCode第12题

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符         数值I           1V           5X           10L           50C           100D           500M    

2020-12-03 23:52:24 111

原创 字符串转整数 - LeetCode第8题

请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。注意:假如该字符串中的第一个非空格字符不是一个有效整数

2020-12-02 15:39:04 130

原创 设计模式之行为型(一)

一、观察者模式  观察者模式的应用场景非常广泛,小到代码层面的解耦,大到架构层面的系统解耦,再或者一些产品的设计思路,都有这种模式的影子,比如,邮件订阅、RSS Feeds,本质上都是观察者模式。不同的应用场景和需求下,这个模式也有截然不同的实现方式,有同步阻塞的实现方式,也有异步非阻塞的实现方式;有进程内的实现方式,也有跨进程的实现方式。public interface RegObserver{ void handleRegSuccess(long userId);}public cla

2020-11-30 08:54:32 98

原创 设计模式之结构型

一、代理模式  在不改变原始类(或叫被代理类)的情况下,通过引入代理类来给原始类附加功能。一般情况下,我们让代理类和原始类实现同样的接口。但是,如果原始类并没有定义接口,并且原始类代码并不是我们开发维护的。在这种情况下,我们可以通过让代理类继承原始类的方法来实现代理模式。  静态代理需要针对每个类都创建一个代理类,并且每个代理类中的代码都有点像模板式的“重复”代码,增加了维护成本和开发成本。对于静态代理存在的问题,我们可以通过动态代理来解决。我们不事先为每个原始类编写代理类,而是在运行的时候动态地创建原

2020-11-29 10:06:35 98

原创 设计模式之创建型

一、单例模式  单例设计模式(Singleton Design Pattern)理解起来非常简单。一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。实现方式:饿汉模式public class IdGenerator{ private AtomicLong id = new AtomicLong(0);privatestaticfinal IdGenerator instance = new IdGenerator();private

2020-11-27 23:40:51 103

原创 面向对象设计基本原则

六大基本原则面向设计主要分为六大基本原则:单一职责原则——SRP开闭原则——OCP里式替换原则——LSP依赖倒置原则——DIP接口隔离原则——ISP迪米特原则——LOD1、单一职责原则  一职责原则的英文是 Single Responsibility Principle,缩写为 SRP。这个原则的英文描述是这样的:A class or module should have a single reponsibility。如果我们把它翻译成中文,那就是:一个类或者模块只负责完成一个职责

2020-11-22 13:35:30 219 1

原创 分布式锁

一、什么是分布式锁?  锁是实现多线程同时访问同一共享资源,保证同一时刻只有一个线程可访问共享资源所做的一种标记。分布式锁是在分布式环境下,系统部署在不同机器、集群,实现多进程争夺共享资源的标记。为了保证多个进程能看到锁,锁被存在公共存储(比如 Redis、Memcache、数据库等三方存储中),以实现多个进程并发访问同一个临界资源,同一时刻只有一个进程可访问共享资源,确保数据的一致性。二、分布式锁的实现方式1、基于数据库实现分布式锁  基于数据库实现分布式锁,主要是通过在数据库建立一张锁表,当

2020-11-18 17:29:07 226

原创 分布式事物

一、什么事分布式事物?分布式事物,就是在分布式系统中运行的事物,由多个本地事物组成。在分布式场景下,事物可能来自与不同的系统,不同的集群。分布式事物的基本特性  分布式事物是由多个事物的组合,那么,事物的特征ACID也就是分布式事务的基本特征。原子性(Atomicity),即事务最终的状态只有两种,全部执行成功和全部不执行。若处理事务的任何一项操作不成功,就会导致整个事务失败。一旦操作失败,所有操作都会被取消(即回滚),使得事务仿佛没有被执行过一样。一致性(Consistency),是指事务操

2020-11-18 13:54:57 651 1

原创 分布式选举

为什么有分布式选举?       主节点,在分布式集群中,负责对其他节点的协调和管理。主节点的存在可以保证其他节点的有序运行,以及数据库集群中,每个节点的数据一致性。如果主节点故障了,无法协调各个节点,可能会造成各个节点运行紊乱。比如,数据库集群主节点故障以后,可能会导致各个节点数据不一致。这时候,需要依赖分布式选举算法,选举出新的可用主节点。分布式选举算法1、Bully算法Bully 算法选举的原则是“长者为大”,意味着它的假

2020-11-15 14:28:48 386

原创 分布式互斥

一、什么是分布式互斥在分布式系统里,排他性的访问方式,叫做分布式互斥,被这种互斥方式访问的共享资源叫做临界资源。二、分布式互斥算法1、集中式算法集中式算法的核心是引入一个协调者程序,得到一个分布式互斥算法。每个程序在需要访问临界资源时,先给协调者发送一个请求。如果当前没有程序使用这个资源,协调者直接授权请求程序访问;否则,放到一个队列当中(先来先服务)。如果有程序使用完资源,则通知协调者,协调者从队列中里取出在最前面的请求,并给它发送授权信息。拿到授权信息的程序,可以直接去访问临界资源。

2020-11-14 21:06:29 741

转载 Spring日志

log4j日志pattern配置c category的名称,可使用{n}限制输出的精度。例如:logger名为"a.b.c",%c{2}将输出"b.c"。C 产生log事件的java完全限定类名。可使用{n}限制输出的精度。例如:“org.apache.xyz.SomeClass”,%C{2}将输出“SomeClass”。d 时间和日期的输出格式,例如:%d{yyyy MM dd HH:mm...

2020-04-19 14:53:13 196

原创 GIt使用总结

1、 拉取代码git clone ssh://[email protected]:22222/goods-record-system.git2、创建本地分支git branch feature_goods-record-system_0314_wjjIDEA上右下方NEW BRANCH直接创建3、查看本地分支git branch4、查看远程分支git b...

2019-04-03 10:30:48 606

原创 项目名上有叉号,但是项目不报错解决方案

遇到问题可以查看Problem中的错误信息提示一、异常信息:导入maven工程后,出现如下错误:Project configuration is not up-to-date with pom.xml. Run project configuration update    rdc        line 1    Maven Configuration Problem 二、解...

2019-01-03 16:07:20 926

转载 Linux网络配置、Tomcat、JDK安装

修改Linux的基本配置 修改主机名         vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=server1.itcast.cn      2.修改ip地址        vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0...

2018-10-10 13:26:54 234

转载 在centos6.7上安装mysql5.6

1.新开的云服务器,需要检测系统是否自带安装mysql# yum list installed | grep mysql2.如果发现有系统自带mysql,删除(所有以mysql开头的都删除)# yum -y remove mysql-libs3.随便在你存放文件的目录下执行,这里解释一下,由于这个mysql的yum源服务器在国外,所以下载速度会比较慢,还好mysql5.6只有7...

2018-10-04 10:22:41 334

转载 VMware Tools 安装方法

1.首先启动CentOS 7,在VMware中点击上方“VM”,点击“Install VMware Tools...”(如已安装则显示“Reinstall VMware Tools...”)。2.在命令行输入“ls /dev”查看。3.输入“mkdir /mnt/cdrom”在/mnt目录下新建一个名为cdrom的文件夹。4.输入“mount -t iso9660 /dev...

2018-09-26 21:55:35 792

转载 SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系

一 简介(1)过滤器:依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等关于过滤器的一些用法可以参考我写过的这些文章: ...

2018-08-23 18:02:43 171

转载 如何破坏单例模式?如何防止?

单例模式的书写这里列出懒汉式的写法/**在多线程下如何保证单例模式需要记住三点。 *第一就是双重加锁机制。 *第二是确保SingleTest为volatile变量。 *第三,是我觉得最容易被遗忘的一点,就是构造函数为private。*/public class SingleTest { public static volatile SingleTest sing...

2018-08-20 12:13:35 328

转载 JVM调优

堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。典型设置: java -Xmx3550m -Xms3550m -...

2018-08-19 13:39:41 169

转载 Tomcat请求过程

1 – Tomcat Server的组成部分1.1 – ServerA Server element represents the entire Catalina servlet container. (Singleton)Server表示整个的Catalina Servlet容器。  Tomcat提供了Server接口的一个默认实现,这通常不需要用户自己去实现。在Server容器中,...

2018-08-18 16:45:58 307

转载 spring 启动过程

首先,对于一个web应用,其部署在web容器中,web容器提供其一个全局的上下文环境,这个上下文就是ServletContext,其为后面的spring IoC容器提供宿主环境; 其次,在web.xml中会提供有contextLoaderListener。在web容器启动时,会触发容器初始化事件,此时contextLoaderListener会监听到这个事件,其contextInit...

2018-08-17 13:12:06 172

转载 一个tomcat配置两个端口

一、Tomcat 安装后本身提供了一个server,端口配置默认是8080,对应目录为:..\Tomcat 8.0\webapps二、Tomcat 8.0 配置多个端口,其实也就是给Tomcat增加几个server,并设置对应目录。下面以增加两个端口号为例第一步、修改server.xml[..\Tomcat 8.0\conf](1)Tomcat提供的如下:&lt;?xml ver...

2018-08-17 11:34:03 3886

原创 不错的集合框架(HashMap、ConcurrentHashMap、LRUCache、HashSet、ArrayList等)的文章链接

http://wiki.jikexueyuan.com/project/java-collection/concurrenthashmap.html

2018-08-13 10:32:57 356

转载 LinkedHashMap 与 LRUcache

LRU 缓存介绍我们平时总会有一个电话本记录所有朋友的电话,但是,如果有朋友经常联系,那些朋友的电话号码不用翻电话本我们也能记住,但是,如果长时间没有联系了,要再次联系那位朋友的时候,我们又不得不求助电话本,但是,通过电话本查找还是很费时间的。但是,我们大脑能够记住的东西是一定的,我们只能记住自己最熟悉的,而长时间不熟悉的自然就忘记了。其实,计算机也用到了同样的一个概念,我们用缓存来存放以...

2018-08-13 09:40:36 146

转载 断点续传下载原理实现

需求背景动态创建的文件下载的时候希望浏览器显示下载进度 动态创建的文件希望能够分段下载HTTP断点续传报文要实现HTTP断点续传必须要简单了解以下几个报文。Accept-Ranges 告诉客户端(浏览器..)服务器端支持断点续传 服务器端返回 Range 客户端告诉服务器端从指定的的位置/范围(这里值字节数)下载资源 客户端发出 Content-Range 服务器端告诉客户端响...

2018-08-08 11:04:13 434

空空如也

空空如也

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

TA关注的人

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