- 博客(84)
- 收藏
- 关注
原创 基于传统I/O或Netty简单实现tomcat容器
1、环境准备自定义Servletservlet抽象类public abstract class AbstractServlet { public void service(MyRequest request, MyResponse response) throws Exception { if ("GET".equals(request.getMethod())) { doGet(request, response); } else {
2022-03-30 14:22:48
618
1
原创 Java动态修改注解值
现有这样一个需求,导出一张Excel报表,导出的实体类属性上有@ExcelProperty注解,加了该注解的属性,在导出的Excel中会显示该属性的值属于那个title。比如// regionName属于“区域”@ExcelProperty(value="区域")private String regionName// regionName属于“区域名称”@ExcelProperty(value="区域名称")private String regionName这是手动修改注解中value的
2022-03-24 13:01:23
8706
1
原创 kafka日志存储【日志清理】
日志目录日志索引日志清理 Kafka将消息存储在磁盘中,为了控制磁盘占用间的不断增加就需要对消息做一定的清理操作。Kafka 中每个分区副本都对应一个Log ,而Log又可以分为多个日志分段,这样也便于日志的清理操作。 Kafka 提供了两种日志清理策略。日志删除(Log Retention):按照一定的保留策略直接删除不符合条件的日志分段。日志压缩(Log Compaction):针对每个消息的key进行整合,对于有相同key 的不value值,只保留最后一个版本。 我们可以通过
2022-03-22 23:49:51
3086
原创 kafka日志存储【日志索引】
日志索引 每个日志分段文件对应了两个索引文件,主要用来提高查找消息的效率。偏移量索引文件用来建立消息偏移量( offset )到物理地址之间的映射关系,方便快速定位消息所在的物理文件位置;时间戳索引文件则根据指定的时间戳( timestamp )来查找对应的偏移量信息。 索引文件以稀疏索引( sparse index )的方式构造消息的索引,它并不保证每个消息在索引文件中都有对应的索引项,每当写入一定量(log.index.interval.bytes 指定,默认值为 4096 ,即 4KB )的消
2022-03-21 23:10:47
2703
原创 kafka日志存储【日志目录】
文件目录布局 Kafka 中的消息是以主题为基本单位进行归类的,各个主题在逻辑上相互独立。每个主题又可以分为一个或多个分区,分区的数量可以在主题创建的时候指定,也可以在之后修改。每条消息在发送的时候会根据分区规则被迫加到指定的分区中,分区中的每条消息都会被分配一个唯一的序列号,也就是通常所说的偏移量(offset )。总的来说就是: 一个主题(topic)对应多个分区(partition)、一个分区对应多个副本(replica)、一个副本对应一个日志(log)、一个日志由多个日志分段(segmen
2022-03-21 23:07:27
4481
原创 InterProcessMutex实现zookeeper分布式锁原理
InterProcessMutex实现zookeeper分布式锁原理原理简介:zookeeper实现分布式锁的原理就是多个节点同时在一个指定的节点下面创建临时会话顺序节点,谁创建的节点序号最小,谁就获得了锁,并且其他节点就会监听序号比自己小的节点,一旦序号比自己小的节点被删除了,其他节点就会得到相应的事件,然后查看自己是否为序号最小的节点,如果是,则获取锁。zookeeper节点图分析InterProcessMutex实现的锁机制是公平且互斥的,公平的方式是按照每个请求的顺序进行排队的。Inte
2022-03-19 11:44:53
2762
原创 springboot+zookeeper实现分布式锁
springboot+zookeeper实现分布式锁InterProcessMutex内部实现了zookeeper分布式锁的机制,所以接下来我们尝试使用这个工具来为我们的业务加上分布式锁处理的功能zookeeper分布式锁的特点:1、分布式 2、公平锁 3、可重入关于InterProcessMutex内部如何实现zookeeper分布式锁,请看我写的这篇文章:依赖<dependency> <groupId>org.apache.zookeeper</groupI
2022-03-19 11:39:46
3770
3
原创 scala学习-集合篇
文章目录集合集合简介数组不可变数组可变数组不可变数组与可变数组的转换多维数组列表List不可变List可变 ListBufferSet集合不可变Set可变 mutable.SetMap 集合不可变 Map可变 Map元组集合常用函数基本属性和常用操作衍生集合集合计算简单函数集合计算高级函数Reduce方法Fold方法普通 WordCount 案例复杂 WordCount 案例队列并行集合集合集合简介Scala 的集合有三大类:序列 Seq、集 Set、映射 Map,所有的集合都扩展自Iterable
2022-03-16 22:10:48
227
原创 scala学习-面向对象
文章目录面向对象封装构造器构造器参数继承和多态抽象类抽象属性和抽象方法继承&重写匿名子类伴生对象apply方法特质(Trait)特质声明特质基本语法特质叠加特质叠加执行顺序特质自身类型特质和抽象类的区别扩展类型检查和转换枚举类和应用类Type 定义新类型面向对象封装构造器和 Java 一样,Scala 构造对象也需要调用构造方法,并且可以有任意多个构造方法。Scala 类的构造器包括:主构造器和辅助构造器基本语法class 类名(形参列表) { // 主构造器 // 类体 def
2022-03-15 16:48:10
210
原创 scala学习-函数篇
文章目录函数式编程函数基本语法函数和方法的区别函数定义函数参数函数至简原则函数式编程函数基本语法函数和方法的区别1)核心概念(1)为完成某一功能的程序语句的集合,称为函数。(2)类中的函数称之方法。2)案例实操(1)Scala 语言可以在任何的语法结构中声明任何的语法(2)函数没有重载和重写的概念;方法可以进行重载和重写(3)Scala 中函数可以嵌套定义object Test_Function { def main(args: Array[String]): Unit = {
2022-03-15 16:45:05
180
原创 scala学习-循环
文章目录For循环控制范围数据循环(To)范围数据循环(Until)循环守卫循环步长嵌套循环引入变量循环返回值While 和 do..While 循环控制While 循环控制do..while 循环控制循环中断For循环控制范围数据循环(To)// 前后闭合for (i <- 1 to 10) { println(i)}范围数据循环(Until)// 前闭后开for (i <- 1 until 10) { println(i)}循环守卫for (i <-
2022-03-15 16:42:36
591
原创 scala学习-了解篇
基础语法Hello Worldpackage demo/** * object 关键字:声明一个单例对象(伴生对象),跟另外一个类相伴相生 */object HelloWorld { /** * main 方法:从外部可以直接调用执行的方法 * def 方法名(参数名称: 参数类型):返回类型={方法体} * @param args */ def main(args: Array[String]): Unit = { println("hello wor
2022-03-15 16:30:10
921
2
原创 Java实现LRU
原题链接题目设计和构建一个“最近最少使用”缓存,该缓存会删除最近最少使用的项目。缓存应该从键映射到值(允许你插入和检索特定键对应的值),并在初始化时指定最大容量。当缓存被填满时,它应该删除最近最少使用的项目。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据
2021-08-26 16:09:31
140
原创 调整数组顺序使奇数位于偶数前面-牛客-JZ13
原题链接题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。示例2输入:[2,4,6,5,7]返回值:[5,7,2,4,6]Codeimport java.util.*;public class Solution { // 插入排序思想,把前面的奇数看成有序数组,遇到奇数就插入到前面有序队列中 public int[] reOrderA
2021-08-11 00:01:14
111
原创 把数组排成最小的数-牛客-JZ32
原题链接题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。示例1输入:[3,32,321]返回值:“321323”Codeimport java.util.*;public class Solution { public String PrintMinNumber(int [] numbers) { String[] ans =
2021-08-10 10:25:55
139
原创 复杂链表的复制-牛客JZ25
原题链接原题:描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)。 下图是一个含有5个结点的复杂链表。图中实线箭头表示next指针,虚线箭头表示random指针。为简单起见,指向null的指针没有画出。示例:输入:{1,2,3,4,5,3,5,#,2,#}输出:{1,2,3,4,5,3,5,#,2,#}解析
2021-08-09 10:01:09
208
原创 省份数量-力扣-并查集
原题链接题目:有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。给你一个 n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而 isConnected[i][j] = 0 表示二者不直接相连。返回矩阵中 省份 的数量。示例 1:输入:is
2021-08-08 16:22:16
141
原创 二叉树迭代遍历非递归Java
前序遍历public static void pre(TreeNode root) { Stack<TreeNode> stack = new Stack<>(); while (root != null || !stack.isEmpty()) { while (root != null) { System.out.printf(root.val + " ");
2021-08-07 14:53:38
111
原创 3、Open Feign服务调用
作为Spring Cloud的子项目之一,Spring Cloud OpenFeign以将OpenFeign集成到Spring Boot应用中的方式,为微服务架构下服务之间的调用提供了解决方案。首先,利用了OpenFeign的声明式方式定义Web服务客户端;其次还更进一步,通过集成Ribbon或Eureka实现负载均衡的HTTP客户端。Feign,假装、伪装。OpenFeign可以使消费者将提供者提供的服务名伪装为接口进行消费,消费者只需使用“Service接口 + 注解”的方式即可直接调用Service
2021-01-31 23:07:53
366
2
原创 vuex中getters使用案例
点击查看: 前一篇vuex使用案例/store/index.js 配置import Vue from 'vue'import Vuex from 'vuex'Vue.use(Vuex)const store = new Vuex.Store({ state:{ counter: 100, students: [ {id: 110 , name: 'Tom' , age: 18}, {id: 120 , na
2021-01-15 23:41:06
268
原创 vuex中state单一状态案例
准备环境安装:在项目文件夹下执行 npm install vuex --savesrc下创建store文件夹和index.js文件main.js如下import Vue from 'vue'import App from './App'import store from './store'Vue.config.productionTip = falsenew Vue({ el: '#app', store, render: h => h(App)})
2021-01-15 17:15:08
135
原创 Vue封装TabBar组件
Vue环境准备1、npm install vue-router 因为后面用得到路由2、阿里矢量库,用于TabBar的图标组件抽离为两个1、TabBar.vue<template> <div id="tab-bar"> <slot></slot> //插槽:插入多个TabBarItem </div></template><script>export default { nam
2021-01-15 14:32:59
532
原创 1、微服务父工程配置
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0
2021-01-13 16:59:19
186
原创 2、Eureka+Ribbon+RestTemplate案例
Eureka注册中心服务名:cloud-eureka-server-7001注册中心的jar包是:spring-cloud-starter-netflix-eureka-server 注册中心端口号:7001pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSche
2021-01-13 16:56:32
116
原创 spring容器创建源码解析
refresh()接下来我们解析AbstractApplicationContext 中的refresh()方法源代码:一个一个的分析refresh()中调用的各个方法@Overridepublic void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // Prepare this context for refreshi
2020-12-18 11:12:43
383
2
原创 MySQL变量笔记
/** 系统变量: 全局变量 会话变量 自定义变量: 用户变量 局部变量**/# 一、系统变量/** 说明:变量由系统提供,不是用户定义,属于服务器层面使用的语法**/# 1、查看所有的系统变量SHOW GLOBAL | SESSION VARIABLES;# 2、查看满足条件的部分系统变量SHOW GLOBAL | SESSION VARIABLES LIKE '%char%';# 3、查看指定的某个系统变量的值SELECT
2020-11-05 21:05:16
122
原创 MySQL视图笔记
/** 视图: MySQL从5.0.1版本开始提供视图功能。一种虚拟 存在的表,行和列的数据来自定义视图的查询中使用的表, 并且是在使用视图时动态生成的,只保存了sql逻辑,不保存查询结果 视图与表的对比: 创建语法的关键字 是否实际占用物理空间 使用视图 CREATE VIEW 只是保存了sql逻辑 增删改查,只是一般不能增删改表 CREATE TABLE 保
2020-11-05 16:41:03
769
原创 MySQL事务笔记
# TCL/*Transaction Control Language 事务控制语言事务: 一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行。案例:转账张三丰 1000郭霞 1000UPDATE 表 SET 张三丰的余额=500 WHERE name ='张三丰'UPDATE 表 SET 郭霞的余额=1500 WHERE name ='郭霞'事物的特性:ACID原子性:一个事务不可再分割,要么全部执行,要么都不执行一致性:一个事务执行
2020-11-05 00:09:01
101
原创 MySQL约束笔记
# ========添加表级约束 [约束名] 约束类型(字段)DROP TABLE IF EXISTS stuinfo;DROP TABLE IF EXISTS majors;CREATE TABLE majors( id INT NOT NULL PRIMARY KEY, majorName VARCHAR(20) NOT NULL);CREATE TABLE stuinfo( id INT, stuname VARCHAR(20), gender CHAR(1),
2020-11-03 21:36:03
103
原创 648.单词替换(使用前缀树实现)
原题题目:示例:利用前缀树实现(Java)构建前缀树/** * 前缀树 */class Trie { private TreeNode root; public Trie(){ this.root=new TreeNode(); } /** * 构建前缀树 * @param word */ public void insert(String word){ TreeNode node=r
2020-10-15 17:36:06
124
原创 78.子集
原题链接思路与算法代码package LeetCode.位运算.Subsets;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * 78. 子集 */public class Solution { public static void main(String[] args) { System.out.println(Arrays.toString(n
2020-09-20 15:25:59
77
原创 99恢复二叉搜索树
原题链接二叉搜索树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。package LeetCode.BinarySearch.RecoverTree;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * 99 恢复二叉搜索树 */public class Solution { public static void main(String[] args
2020-09-20 11:48:51
114
原创 java实现迪杰斯特拉算法
应用背景战争时期,胜利乡有7个村庄(A,B,C,D,E,F,G),现在有六个邮差,从G点出发,需要分别把邮件分别送到A, B,C,D,E,F六个村庄各个村庄的距离用边线表示(权),比如A - B距离5公里问:如何计算出G村庄到其它各个村庄的最短距离?如果从其它点出发到各个点的最短距离又是多少?迪杰斯特拉算法介绍迪杰斯特拉(Djkstra)算法是典型最短路径算法,用于计算一个结点到其他结点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。迪杰斯特
2020-09-07 20:29:15
971
原创 java实现克鲁斯卡尔算法
应用背景某城市新增7个站点(A,B,C,D,E,F,G) ,现在需要修路把7个站点连通各个站点的距离用边线表示(权),比如A~B距离12公里问:如何修路保证各个站点都能连通,并且总的修建公路总里程最短?克鲁斯卡尔算法介绍克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法。基本思想: 按照权值从小到大的顺序选择n-1条边,并保证这n-1条边不构成回路具体做法: 首先构造一个只含n 个顶点的森林,然后依权值从小到大从连通网中选择边加入到森林中,并使森林中不产生回路,直至
2020-09-06 13:37:18
1263
2
原创 java实现普利姆算法
应用场景有胜利乡有7个村庄(A, B,C,D, E,F,G),现在需要修路把7个村庄连通各个村庄的距离用边线表示(权),比如A ~ B距离5公里问: 如何修路保证各个村庄都能连通,并且总的修建公路总里程最短?思路:将10条边,连接即可,但是总的里程数不是最小正确|的思路,就是尽可能的选择少的路线,并且每条路线最小,保证总里程数最少最小生成树修路问题本质就是就是最小生成树问题,先介绍一下最小生成树(Minimum Cost Spanning Tree),简称MST:给定一个带权的无向连
2020-09-05 22:53:31
283
原创 java实现贪心算法
算法应用背景假设存在如下表的需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有的地区都可以接收到信号思路分析使用贪婪算法, 效率高:1、目前并没有算法可以快速计算得到准备的值, 使用贪婪算法,则可以得到非常接近的解,并且效率高。选择策略上,因为需要覆盖全部地区的最小集合2、遍历所有的广播电台,找到一个覆盖了最多未覆盖的地区的电台(此电台可能包含一些已覆盖的地区,但没有关系)3、将这个电台加入到一个集合中(比如ArrayList),想办法把该电台覆盖的地区,在下次比较
2020-09-05 18:21:31
829
1
原创 Java原型设计模式
文章目录克隆羊问题传统方式解决克隆羊问题思路图解代码实现传统的方式的优缺点原型模式基本介绍原型模式实例代码原型模式在Spring框架中源码分析深入讨论原型模式的浅拷贝和深拷贝浅拷贝的介绍深拷贝基本介绍深拷贝实现代码原型模式的注意事项和细节克隆羊问题现在有一只羊 tom,姓名为: tom, 年龄为:1,颜色为:白色,请编写程序创建和 tom 羊 属性完全相同的 10只羊。传统方式解决克隆羊问题思路图解代码实现羊public class Sheep { private String name
2020-06-23 21:06:33
409
原创 Java设计七大原则及其案例
文章目录七大原则1、单一职责原则基本介绍代码示例总结和注意事项2、接口隔离原则基本介绍代码示例3、依赖倒转原则基本介绍代码示例依赖关系传递的三种方式总结和注意事项4、里氏替换原则OO 中的继承性的思考和说明基本介绍代码示例5、开闭原则基本介绍代码示例6、迪米特法则基本介绍代码示例小结和注意事项7、合成复用原则基本介绍8、设计原则核心思想七大原则1、单一职责原则基本介绍对类来说的,即一个类应该只负责一项职责。如类A负责两个不同职责:职责1,职责2。当职责1需求变更而改变A时,可能造成职责2执行错误,
2020-06-21 12:37:48
753
1
原创 Java单例设计模式
文章目录1、单例设计模式介绍2、单例设计模式八种方式2.1、饿汉式(静态常量)步骤代码实现优缺点说明2.2、饿汉式(静态代码块)代码实现优缺点说明2.3、懒汉式(线程不安全)代码实现优缺点说明2.4、懒汉式(线程安全,同步方法)代码实现优缺点说明2.5、懒汉式(线程安全,同步代码块)2.6、双重检查代码实现优缺点说明2.7、静态内部类代码实现优缺点说明2.8、枚举代码实现优缺点说明3、单例模式在JDK源码使用举例4、单例模式注意事项和细节说明1、单例设计模式介绍所谓类的单例设计模式,就是采取一定的方法保
2020-06-21 12:23:47
188
原创 JVM第十六章_垃圾回收相关概念
文章目录1、System.gc()的理解2、内存溢出与内存泄露内存溢出 ( 00M)内存泄露(Memory Leak)3、Stop The World4、垃圾回收的并行与并发并发(Concurrent)并发(Parallel)并发vs并行垃圾回收的并发与并行5、安全点与安全区域安全点(Safepoint)安全区域(Safe Region)6、再谈引用:强引用再谈引用强引用 ( Strong Reference) 一一不回收7、再谈引用:软引用软引用( Soft Reference)一内存不足即回收8、再谈引
2020-06-20 23:38:54
203
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人