自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java程序打成jar包后部署到linux上,无法取到resource目录下的文件

可以部署后,写一个TestController,在里面获取当前应用目录下的文件,然后找到对应的文件路径。// 使用Files.walk方法进行递归遍历。// 将路径字符串转换为Path对象。

2024-04-18 23:53:45 279

原创 Kafka消费者的分区策略与Reblance操作

目录2. 再均衡原理的四个阶段1.三个分区策略 1.1 RangeAssignor分配策略[Kafka默认]原理:按照消费者总数和分区总数进行整除,获得一个跨度,然后将分区按照跨度进行平均分配,以保证分区尽可能均匀分配给所有的消费者。针对一个主题:假设 n=分区数量/消费者数量。 m=分区数量%消费者数量。那么前m个消费者每个分配n+1个分区,后面的(消费者数量-m个)消费者每个分配n个分区。 1.2 RoundRobinAssignor分配策略...

2021-09-08 23:07:56 382

原创 中介者模式

中介者模式---协调多个对象之间的交互。简介:中介者模式利用一个中介者对象来封装一系列的对象交互,使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。又称为调停者模式。引入中介者对象,可以将系统的网状结构变成以中介者为中心的星型结构。Mediator抽象中介者:定义了同事对象到中介者对象的接口。 ConcreteMediator具体中介者:为抽象中介者的子类,通过协调各个同事对象来实现协作行为,维持了对各个同事对象的引用。以一个集合来管理同事类,接受某个同事对象的消息

2021-05-22 11:25:10 119

原创 判断回文数字

LeetCode 9:思路1:转化为char[]数组,然后两个指针分别在开头与结尾出,分别向后,向前移动。思路2:利用一个辅助变量help,得到最高位为1,其余位置为0的数。[ 1,10,100,1000,10000 ]。同时要防止help溢出。...

2021-05-19 23:26:29 115

原创 Spring学习一:环境搭建,Bean对象使用

Spring是一个IOC(DI)和AOP容器框架。一:搭建Spring运行时环境1:加入JAR包 ① Spring自身JAR包:spring-framework-4.0.0.RELEASE\libs目录下 spring-beans-4.0.0.RELEASE.jar spring-context-4.0.0.RELE2ASE.jar spring-core-4.0.0.RELEASE.jar spring-expressio.

2021-04-27 00:01:21 263 3

原创 Mybatis学习五:逆向工程与分页插件

目录一、MBG简介二、逆向工程配置三、MBG使用测试: 1.基本查询的测试 2.带条件查询的测试四、PageHelper 分页插件五、PageHelper使用步骤:六、测试使用 1.Page对象: 2.PageInfo对象:一、MBG简介 MyBatis Generator: 简称MBG,是一个专门为MyBatis框架使用者定制的代码生成器,可以快速的根据表生成对应的映射文件,接口,以及bean类。支持基本的增删改查,以及QBC风格的...

2021-04-26 21:00:46 389 1

转载 Mybatis学习四:缓存

MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。缓存可以极大的提升查询效率。 MyBatis系统中默认定义了两级缓存:一级缓存 与二级缓存。 默认情况下,只有一级缓存(SqlSession级别的缓存,也称为本地缓存)开启。 二级缓存需要手动开启和配置,他是基于namespace级别的缓存。 为了提高扩展性。MyBatis定义了缓存接口Cache。我们可以通过实现Cache接口来自定义二级缓存。一、一级缓存: 默认开启,sqlSession级别的。即同一...

2021-04-26 19:59:37 240

原创 MyBatis学习三:动态SQL

动态 SQL是MyBatis强大特性之一。极大的简化拼装SQL的操作 动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似 MyBatis 采用功能强大的基于 OGNL 的表达式来简化操作1.if <if test=" "> </if>:通过test表达式,拼接SQL。 <select id="getEmpListByMoreTJ1" resultType="Emp"> select eid,ename,age,se...

2021-04-26 16:03:02 139

原创 Mybatis学习二:CRUD操作,获取参数

Mapper与XML进行CRUD如何起别名?<select id="方法名" resultType="Bean的全限定名"> </select> <insert id="方法名"> insert into empvalues(null,#{ename},#{age},#{sex}) </insert>。需要sqlSession.commit() <update id="方法名"> update emp set e...

2021-04-26 00:02:33 248

原创 MyBatis学习一:入门与环境搭建

Mybatis提供的持久层框架包括SQL Maps,Data Access Objects[DAO]支持定制化SQL,存储过程,以及高级映射的优秀的持久层框架。 避免了几乎所有的JDBC代码和手动设置参数以及获得结果集。 可以使用简单的XML或者注解用于配置和原始映射,将接口和Java的Plain Old Java Objects普通Java对象【POJO】映射成数据库中的记录 Mybatis是一个半自动的ORM框架[Object Relation Mapping]预编译对象有两种,sta.

2021-04-25 18:06:23 120

原创 http与https

不完整,待完善~~HTTP:超文本传输协议,以明文的方式在计算机世界里实现连两点之间传输文字,图片,音视频等超文本数据的约定和规范。原理:HTTP由请求与响应构成,是一个标准的客户端服务器模型 [ C/S ]。由客户端发起请求,服务器发送响应。客户端的浏览器首先通过网络与服务器建立,该连接是通过TCP来完成的,一般连接的端口是80。连接建立后,客户机发送一个请求给服务器,请求格式:URL,协议版本号,MIME信息[包括 请求修饰符,客户机信息,许可内容。] 服务器接到请求后,给予相应.

2021-04-23 16:30:58 81

原创 泛型

定义泛化的类型。 包括: 泛型形参[public class ArrayList<E> ],泛型实参[ArrayList<String> list=new ArrayList<String>(); ]。 瓶子上贴标签,集合类指定存放数据的类型。取出来的时候方便知道是哪种类型。好处: ①安全 ② 避免类型转换使用:泛型类\泛型接口 泛型方法:泛型类\泛型接口 【修饰符】 class 类名 <泛型形参列表>{ } 【修饰符...

2021-04-22 12:48:50 71

原创 面向对象一些知识点

面向对象三大特性封装:把对象属性私有化,向外界提供一些访问该属性的方法 继承:子类继承父类的所有方法和属性,包括私有的[ 但只能拥有,不能访问 ], 多态:多种形态,具体的表现特征是编译时的类型和运行时的类型不一致[ 编译看左边,运行看右边 ]。 变量的引用形式有两种:本态引用:左边的变量与右边的对象是同一种类型。 多态引用:左边的变量是父类类型,右边的对象是子类的对象。多用可用于方法的动态绑定。多态数组[数组声明是父类的类型,实际存储的是子类的对象 ],多态参数[ 形参是父类的类型,实参是...

2021-04-21 23:06:00 63

原创 LRU的实现

定义节点public static class Node<V> { public V value; public Node<V> last; public Node<V> next; public Node(V value) { this.value = value; } }定义双向链表public static class NodeDoubleLinkedList<V> { private Node<V&

2021-04-21 20:08:10 54

原创 JDK1.8中HashMap源码追踪

几个常量默认初始容量:default_initial_capacity=(1<<4)=16 最大容量:maximum_capacity=(1<<30); 树化阈值:treeify_threshold=8:当链表的长度达到这个数值后,要考虑树化 反树化值:untreeify_threshold=6:当树中的节点个数达到这个阈值之后,要考虑变为链表。 最小树化容量:min_treeify_capacity=64。 单个链表的节点个数达到8且table的长度达到64,会...

2021-04-21 17:46:55 126

原创 JDK1.7的hashMap源码

public V put(K key, V value) { if (table == EMPTY_TABLE) {//判断table数组是否是空数组 inflateTable(threshold); } if (key == null) return putForNullKey(value); int hash = hash(key);//根据...

2021-04-21 00:04:22 136 1

原创 Set,Map的底层实现

Set的底层实现 1、HashSet : HashMap 2、TreeSet : TreeMap 3、LinkedHashSet: LinkedHashMap Set添加元素时用add(元素),而Map添加元素put(key,value)。 发现添加到Set中的元素,是作为底层的Map的key,那么value它们选用了一个Object类型的常量对象PRESENT。 所有的HashSet共用同一个PRESENT对象。 所有的TreeSet共用同一个PRESENT对象。 所有的Lin

2021-04-20 23:45:23 438 1

原创 List的子类源码笔记

List的Vectornew Vector(),初始化长度为10的数组,增量为0 public synchronized boolean add(E e) 。线程安全方法+synchronized锁。默认扩容为原来的2倍,如果手动指定了capacityIncrement的值,那么就可以按照指定的增量进行扩容。 public synchroniezed boolean insertElementAt (E e,int index)。① .考虑扩容 [ ensureCapacityHelper(el

2021-04-20 21:34:57 61

原创 系统接口

系统接口是用户使用计算机系统的基本入口。 上层应用程序通过操作系统提供的系统调用来实现对计算机得使用。fork,exex,wait,exit这四个系统调用是和进程有关的最为重要的四个系统调用。open,read,write是操作文件的系统调用。操作系统分为两种状态:内核态:操作系统代码执行时的状态。 内核态的代码放在“内核状态区域”。 用户态:应用程序代码执行时的状态。 用户态的代码放在“用户态区域”。建立系统调用的目的就是让执行在用户态区域的代码不能进入内核态。操作系统在内存中划定一...

2021-04-20 01:57:51 1510

原创 进程管理

为什么要提出进程的概念:进程是资源分配的基本单位,是一个程序对某个数据集的动态执行过程。操作系统通过PCB感知进程的存在,PCB内部描述进程的基本信息和运行状态,所谓的创建进程和撤销进程,都是指对PCB进行操作。进程的状态进程状态的转换:初始【建立PCB】 就绪【经过调度进入3】 执行【时间片到进入2,IO请求时进入4,正常完成时进入5】 等待【IO满足时进入2】 消亡进程空间被划分为两大部分,用户程序在用户空间内执行,操作系统内核程序在系统空间执行。为了防止用户程..

2021-04-20 01:35:28 283

原创 JVM体系结构

JVM区域

2021-04-18 23:56:29 52

原创 多线程基础

(1)Java的程序入口是main,其实也是main线程,主线程。 线程是进程的其中一条执行路径,即一个进程至少有一个线程。那么main线程就是Java程序进程的第一个线程了。(2)如何开启main线程以外的其他线程:①继承Thread类②实现Runnable接口 ③④⑤.....待学启动线程的两种方式继承Thread类* 步骤:* (1)编写线程类去继承java.lang.Thread类* (2)必须重写父类的public void run(){}* ...

2021-04-13 22:53:53 67

原创 从暴力递归到动态规划:矩阵中的最长路径

LeetCode329:https://leetcode-cn.com/problems/longest-increasing-path-in-a-matrix/递归思路 从矩阵中的每一个点出发,调用一个函数,假设为process,表示从当前点(row,col)出发,所能得到的最长路径长度为多少。 在process方法中,分别去求从当前点向左,向上,向右,向下出发,所用得到的矩阵路径中最长的长度,例如: 如果不能向左出发[ 边界or 两个点的值不递增],向左的这个方向的最长路径长度就是1,..

2021-04-11 22:59:30 425

原创 查询优化器

对于一个SQL语句,查询优化器先看是不是能转化成JOIN,再将JOIN进行优化,优化分为:条件优化 计算全表扫描成本 找出所有能用到的索引 针对每个索引计算不同的访问方式的成本 选出成本最小的索引以及访问方式开启查询优化器:set optimizer_trace="enabled=on";准备,优化,执行Mtsql最核心的就是JOIN两个表怎么进行连接?小表驱动大表。...

2021-04-10 14:59:16 60

原创 计算机系统概述

概念:计算机系统自下而上的视角:硬件 ---> 操作系统 ---> 应用程序 ---> 用户。OS: 控制和管理整个计算机的硬件与软件资源,合理地组织,调度计算机的工作与资源分配,进而为用户和其他软件提供方便的接口与环境的程序集合。 ———— OS为计算机系统中最基本的系统软件 !!特征:【并发,共享,虚拟,同步 】- - > 时分,空分。1)并发:多个事件在同一时间间隔内发生。OS中同时存在多个运行的程序,具备处理和调度多个程序同时执行的能力。 在多道程序...

2021-04-08 17:33:29 78

原创 二叉树的遍历-递归与非递归版本,层次遍历

递归版本前序遍历中序遍历后序遍历非递归版本前序遍历中序遍历后序遍历

2021-04-08 10:24:13 45 1

原创 InnoDB行格式,数据页结构,索引底层实现

根据局部性原理,操作系统会以页为单位 [4Kb]从磁盘中取数据。InnoDB默认页的大小为16K :show global status like "InndoDB_page_size"; ==>16384xx行格式DynamicCompact[老版本默认]int的数据类型长度固定。varchar是字符,字符有编码格式。utf8 一个字符0~4Byte。新老格式的区别:varchar(M):指定真实的数据最大能存多少个字符,最多可存55533个字..

2021-04-08 00:06:03 111

原创 Explain执行计划

通过explain查询当前语句执行的效率。在进行SQL优化的主要手段,通过Expalin可以查看如下信息:查看表的加载顺序。 查看sql的查询类型。 哪些索引可能被使用,哪些索引又实际被使用了 表与表之间的引用关系 一个表中有多少行被优化器查询 其他额外的辅助信息...

2021-04-07 22:51:06 57

原创 图:最小生成树

krusKal算法从边的权重考虑问题,并利用并查集的特点。 每次从图中 选择 一条权值最小,且加入后不会形成环路的边,直到所有的边都已经被考虑了。 选择某一条边之后,让这些边两边点合并成到一个相同的集合中去。利用优先级队列,每次先考虑边值最小的边。public List<Edge> kruskal(Graph graph){ List<Edge> res=new ArrayList<>(); UnionFindSet unionSet=new

2021-04-07 19:36:10 80

原创 图的基本概念以及遍历

定义// 节点public class Node { public int val; public int in; // 入度 public int out; // 出度 public ArrayList<Node> nexts; // 邻接节点 public ArrayList<Edge> edges; // 邻接边 public Node(int val) { this.val = val;.

2021-04-07 16:55:40 125 2

原创 从树的遍历看字符串子序列,全排列问题

题目1:打印"abc"的所有子序列,得到["abc","ab","ac","a","bc","b","c",""]。思路:public static void main(String[] args) { String str="abc"; char[] chs = str.toCharArray(); String now=""; printSubSeq(chs,0,now);}private static void .

2021-04-06 22:27:05 110

原创 排序算法

1.冒泡排序public void bubbleSort(int[] arr){ for(int i=arr.length-1;i>0;i--){ for(int j=0;j<i;j++){ if(arr[j]>arr[j+1){ swap(arr,j,j+1); } } }}public void swap(int[] arr,int i

2021-04-06 17:03:50 87

原创 链表相交问题

题目:两条单向链表,不确定是否是有环还是无环,求两条链表是否相交,如果相交,则返回相交的节点,否则返回NULL思路:有环无环可以通过快慢指针判断,如果有环,需要返回入环的节点。假设链表1的头部为head1,入环节点为loop1,链表2的头部为head2,入环节点为loop2。如果是都是无环链表,则问题转化为两条单链表的相交问题:先遍历head1,获取链表1的长度n1,以及链表1的最后一个节点tailA,再去遍历head2,获取链表2的长度n2,以及链表2的最后一个节点tailB。如果tailA==t

2021-04-06 00:58:15 79

原创 求一个完全二叉树的节点个数

性质:满二叉树的高为h,则节点个数为。思路:对于一个完全二叉树,从根节点遍历完全二叉树的左子树,得到完全二叉树的树高h,再去查跟节点的右子树的树高。如果右子树到达了整棵树的最深一层,则证明根节点的左子树是满二叉树,节点个数为,递归去获取右子树的节点个数。 如果右子树到达了没有整棵树的最深一层,则证明根节点的左子树高度为h-2是满二叉树,节点个数为,递归去获取左子树的节点个数。public int getNodeNum(Node root){ if(root==null) retu.

2021-04-06 00:33:53 178

原创 从暴力递归改动态规划

1.矩阵的最小路径和给定一个二维数组,二维数组中的每个数都是正数,要求从左上角走到右下角,每一步只能向右或向下。沿途经过的数字要累加起来,返回最小的路径和。//暴力递归版本// 从arr[i][j]出发到达右下角的最小路径和。public int minPath(int[][] matrix,int i,int j){ if(i==matrix.length-1 && j==matrix[0].length-1) { return m

2021-04-05 17:24:47 118

原创 LeetCode-252:会议室安排

贪心策略一些项目要占用一个会议室宣讲, 会议室不能同时容纳两个项目的宣讲。 给你每一个项目开始的时间和结束的时间(给你一个数组, 里面 是一个个具体的项目), 你来安排宣讲的日程, 要求会议室进行 的宣讲的场次最多。 返回这个最多的宣讲场次。会议最早开始的先安排,不可,可能出现很早开始但是持续时间久的会议。 会议持续时间短的先安排,不可,持续时间短,但是可能会影响到另外的两场会议,如下面情况:【A B C】,B的会议时间短,但是,A的结束时间晚于B的开始时间,C的开始时间早于B的结束时间。选A.

2021-04-05 00:37:34 847 1

原创 LeetCode 502 :IPO

LeetCode 502:贪心算法+堆的思路题目:假设 力扣(LeetCode)即将开始其 IPO。为了以更高的价格将股票卖给风险投资公司,力扣 希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限,它只能在 IPO 之前完成最多 k 个不同的项目。帮助 力扣 设计完成最多 k 个不同项目后得到最大总资本的方式。给定若干个项目。对于每个项目 i,它都有一个纯利润 Pi,并且需要最小的资本 Ci 来启动相应的项目。最初,你有 W 资本。当你完成一个项目时,你将获得纯利润,且利润将被添加到你的总

2021-04-04 23:38:41 103

原创 网络层

网络层提供的两种服务:1)面向连接的虚电路服务:可靠通信由网络来保证。必须建立网络层的连接。【 以往的电话服务电信网 】2)无连接的数据报服务: 可靠通信应当由用户主机来保证。不需要建立网络层连接。每个分组可走不同的路径。 即,网络层向上只提供简单灵活的,无连接的,尽最大努力交付的数据报服务。IP协议是TCP/IP协议族中至关重要的一个协议。IP协议借助于IP协议使得互联网上异构的计算机系统能够连接成为一个网络。IP协议实现两个基本功能寻址:IP协议可以根据数据报报头中的...

2021-04-03 20:54:21 513

原创 字符串

特点String类型被final修饰声明的,意味着我们不能继承String。 字符串的对象也是不可变对象,意味着一旦进行修改,就会产生新对象。 如果修改了字符串后,想要重新获取新的内容,必须重新接受。 如果程序中涉及大量的字符串修改操作,那么此时的时空消耗就比较高。可能需要考虑使用StringBuilder或StringBuffer。 String对象内部是用字符数组进行保存的。 JDK 1.9之前,有过一个Char[] value数组,JDK 1.9之后用byte[]数组。 String类的

2021-04-03 20:53:41 52

原创 并查集

定义并查集是一种树形的数据结构,用于处理不交集的合并(union)及查询(find)问题。【即 并 + 查 的问题 】提供两种操作isSameSet(Node a,Node b); // 判断两个节点是否属于同一个集合。 union(Node a,Node b); //将两个节点所在的集合合合并在一起。【节点数量小的集合,放在节点数量大的集合里】public class Node { // 节点定义 // whatever you like}public class Union.

2021-04-03 00:33:19 54

空空如也

空空如也

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

TA关注的人

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