java
文章平均质量分 73
witheredwood
这个作者很懒,什么都没留下…
展开
-
Java篇之序列化和IO
数据输入到计算机内存的过程即输入,反之输出到外部存储(比如数据库,文件,远程主机)的过程即输出。(比如将 Java 对象保存在文件中,或者在网络传输 Java 对象),这些场景都需要用到序列化。字节数据要转成我们能识别的正常字符,需要选择正确的编码方式。修饰的变量,在反序列化后变量值将会被置成类型的默认值。方式编码的字符,一个英文字符需要一个字节,一个中文需要三个字节。计算机的传输本质都是字节,而一个字符由多个字节组成,的,为什么使用字节流,而不是字符流?方式编码的字符,占一个字节;原创 2022-09-27 15:38:42 · 690 阅读 · 0 评论 -
Java篇之类的执行顺序
只使用类时,不会进行初始化在使用静态变量或创建对象时,才会进行初始化。初始化的顺序是。原创 2022-09-27 15:35:33 · 149 阅读 · 0 评论 -
Java篇之对象
用过的内存全部整合到一边,没有用过的内存放在另一边,中间有一个分界值指针,只需要向着没用过的内存方向将该指针移动对象内存大小位置即可。作为起点,向下搜索,遍历可以到达的节点。节点走过的路径是引用链,如果一个对象没有引用链相连,那么就说明这个对象是不可用的。另外,根据虚拟机当前运行状态的不同,如是否启用偏向锁等,对象头会有不同的设置方式。它需要保证引用所指向的对象都是活着的,当前线程栈帧中的对象在当前时刻肯定是活着的。,例如这个对象是哪个类的实例、如何才能找到类的元数据信息、对象的哈希码、对象的。原创 2022-09-27 15:33:02 · 321 阅读 · 0 评论 -
类加载机制
双亲委派机制是通过类加载器。原创 2022-09-27 15:21:24 · 239 阅读 · 0 评论 -
HashMap
在调整大小的过程中,有一步是把老数组中的全部元素转移到新数组中。这个过程在并发环境中会发生错误,导致数组链表中的链表形成循环链表。)(将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容,而不是转换为红黑树)时,将链表转化为红黑树,以减少搜索时间。哈希表内部数组的大小很重要,要保持一个平衡的数字,不能让哈希碰撞太频繁,也不能占用空间太大。如果进行2倍扩容,也需要将表中已有的值,重新散列到新表中,重新散列的过程是通过。在哈希表使用的过程中,会不断的调整数组的容量。原创 2022-09-27 15:10:09 · 576 阅读 · 0 评论 -
数组/List 互转
性能比较(灰色字体是不推荐使用)原创 2022-09-27 15:00:44 · 535 阅读 · 0 评论 -
比较两个值是否相等
基本类型位数字节默认值对应的包装类型包装类的默认值数字型short1620Shortnullint3240Integernulllong6480LLongnull字符型byte810Bytenullchar162‘u0000’Characternull数字型float3240fFloatnulldouble6480dDoublenull布尔型boolean1—FALSEBooleannull。...原创 2022-08-18 16:30:40 · 1287 阅读 · 0 评论 -
从编译到运行
因为字节码是面向虚拟机,不面向任何特定的处理器,所以使得Java语言有可移植的特点,不需要重新编译就可以在不同的操作系统上运行,也就是Java语言可以跨平台。类库一起支持了反射(具体怎么支持才实现的,不知道😂),这样,通过类库就可以在运行时获取某个类的信息,比如变量、构造函数、方法。字节码,是Java虚拟机可以理解的代码,简短点理解就是,字节码是代码😅。编译是由编译器完成的,将源码一次性翻译成字节码,编译完成后生成中间的字节码文件,也就是。中包含类的信息,所以如果想要在运行时使用类的类型信息,可以从。...原创 2022-08-15 12:33:56 · 1012 阅读 · 0 评论 -
(五)编译中出现的向后兼容问题
合并,不建议用来调整记录的顺序。当时想着有这个用法,我又有这个需求,为啥不用。的设置不对,比如没有加版本号之类的。开源项目的配置,粗略一想,不是我能动的,自然也不会是这些原因。向后兼容问题,可能会有很多原因导致向后兼容出现问题,那么在这次编译中导致这个问题的原因是什么呢?,直到回退到没有修改的版本。回退完了,确认修改无误后提交。明明看报错一分钟解决的问题,花了挺长时间。也就是现在的代码是不允许重大修改的。,然后发现提示中给了解决方案,可以。,回退一个版本,把本地的修改隐藏。,知道把所有的都提交完成。....原创 2022-08-06 15:58:49 · 307 阅读 · 0 评论 -
java接收数据的方式
前端传递数据的方式不同,java 也要使用不同的方式来接收数据。下面是三个例子。前端请求地址格式如下假如请求的具体地址是 。那么,java 接收参数格式如下,需要用 来接收2. 请求中用 params 传递数据前端请求地址格式如下假如请求的具体地址是 ,请求的参数是 和 。那么,java 接收参数格式如下,需要用 来接收单个的参数,一个 接收一个参数。 中客户以设置接收数据的默认值3. 请求中用 data传递数据 : 提交的数据是列表。前端请求地址格式如下假如请求的具体地址是原创 2022-06-08 21:57:13 · 4537 阅读 · 0 评论 -
(四)Alluxio 卸载挂载目录和删除文件
卸载:把以前加载到 根目录下的路径卸载,然后,底层存储系统的目录和 中的目录没有关系了。删除:把 中的普通文件(master 节点或者 worker 节点)中的文件从 中移出,但是并不会在底层存储系统中删除该文件。如果将挂载目录删除了,也就没有这个挂载节点了。卸载一个在 中已经挂载的目录,并确认该目录已经在Alluxio命名空间中被删除,但是不会删除底层存储系统中的文件。注意:在 节点的 web 界面查到有一个挂载节点,是将本地的 路径挂载到了 的 路径。现在将这个挂载节点卸载。卸载后的原创 2022-06-07 17:08:13 · 1014 阅读 · 0 评论 -
(三)Alluxio 的挂载和加载
挂载:把底层存储系统和 联系起来,文件的元数据信息在 的 master 节点中。加载:把 中的路径的数据放在 worker 节点中。把本地目录 挂载到 中的 。挂载以后, 目录下的内容就是 目录下的内容。挂载后的结果,可以通过 查看。但是之后在 中添加新的文件,新文件并不会自动加载到 中。把 中的某个文件加载到 空间中。当使用 挂载后,只是相当于把 和底层存储系统连接起来。可以使用 将文件(数据)加载到 的空间中,也就是把文件(数据)移到 worker 节点。2.2原创 2022-06-07 17:07:22 · 774 阅读 · 0 评论 -
(二)Alluxio 挂载和 fs ls
在多次测试和各种奇奇怪怪的操作之后,我发现我设置的根挂载点 中没有任何文件,但是通过 仍能查出来 空间中是有数据的。一顿凌乱之后,整理了一下目前自己理解的东西,期望能找寻蛛丝马迹。在使用本地运行项目时,挂载的是 RAMFS文件系统,该系统是使用 RAM 作为文件存储系统,运行速度较快。因为在本地运行 项目时, 的一个 节点和一个 节点都在本地,所以可能需要区分一下 的本地缓存路径 和存放所有文件元数据的 节点的空间(或者路径)。 和底层存储系统是两个独立的东西,底层存储系统是存储设备,可原创 2022-06-01 15:43:30 · 933 阅读 · 0 评论 -
(一)Linux下 Alluxio 的编译和运行
文章目录概念:是什么?字节码编译与解释共存??代码放哪里?Linux 下编译Linux 下运行运行之前运行验证Alluxio是否运行第一次接触分布式项目,还是在Linux下编程,确实和Windows下编程有一点点不一样。没有一点点防备,就让我了解到不能用在 windows 上运行的代码,以及除了 web 开发之外的开发。熟悉了以前在Windows下的开发,用 IDEA 工具开发,点 build 编译项目(之前一直翻译成构建项目),点 run 运行项目,有时甚至都不点 build 。这个过程好像是肌肉记忆原创 2022-03-18 09:06:07 · 778 阅读 · 0 评论 -
了解分布式缓存系统 Alluxio
文章目录分布式是什么??缓存是什么??Alluxio 基础概念Alluxio 基础组成从技术上来讲,Alluxio 是一个数据编排技术(数据编排,大概类似于一个平台,这个平台是用来管理数据的,主要是管理,对象是数据),它相当于一个数据层,在应用层和存储层之间加了一层,为上下两层搭建了桥梁,将数据移到离应用更近的地方,从而更容易访问数据。数据驱动型应用是什么样的应用?数据驱动:以数据为基础,将数据组织成信息,然后利用机器学习、算法等手段处理信息,最终形成自动化的决策模型。数据驱动型应用是以数据为基础,对原创 2022-03-18 08:56:41 · 803 阅读 · 0 评论 -
TCP 协议
文章目录报文段TCP 头部TCP 数据TCP 连接三次握手四次挥手如何实现可靠性的??滑动窗口发送窗口接收窗口自动重传请求 ARQ拥塞控制拥塞控制算法慢启动拥塞避免快重传失序失序的2种情况TCP 数据传输的过程TCP 协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP 是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议。应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段)。然后TCP把报文段传给IP层,由它来通过网络将原创 2022-03-17 16:49:49 · 4620 阅读 · 0 评论 -
归并排序 MergeSort
1. 基本思想什么是归并排序??归并排序是基于归并的排序。归并,是将两个或两个以上的有序表合成一个有序表。假设待排序的数组有 n 个元素,将数组看成是 n 个有序的子数组,每个子数组只有一个元素。然后两两合并,得到每个子数组长度为2。然后继续两两合并,直到合并为长度为 n 的数组。时间复杂度平均复杂度是 O(nlogn),最好复杂度是 O(nlogn),最坏复杂度是 O(nlogn) 。(图片来源于网络)将原数组划分子数组的过程看成是一棵二叉树,那么数组划分到每个子数组中只有一个元素原创 2022-01-28 13:00:27 · 4762 阅读 · 1 评论 -
快速排序 QuickSort
文章目录1. 基本思想2. 代码实现(java)3. 代码说明1. 基本思想快速排序的基本思想是基于分治法的。在待排序数组中选取一个元素作为基准,假设以第一个元素为基准。每趟排序都能确定基准的位置。找到基准在数组中最终存放的位置。左边是所有比该元素小的值,右边是所有比该元素大的值。然后再分别对左边和右边两部分递归排序。直到每部分只有一个元素时停止排序。适用场景只适用于 顺序结构 (也就是数组),不能对链式结构排序。时间复杂度平均复杂度:O(nlogn),最好复杂度:O(nl原创 2022-01-24 16:49:00 · 332 阅读 · 0 评论 -
优先级队列 PriorityQueue
1. 优先级队列是什么??首先,优先级队列是一个队列,队列所有的性质,它也有。其次,优先级队列每次取出的是优先级最高的元素。优先级队列的内部是用堆来维护的。将优先级最高的排在前面。2. 什么时候用这个队列呢??看完优先级队列的定义,好像看懂了,又好像没看懂。这队列,什么用它呢?1)排序的对象和排序时比较的对象常见的排序方法(插入、快排等),排序的对象和比较的对象是一样的,根据数本身的大小进行排序。优先级队列可以对排序对象和比较对象相同的进行排序,也可以对 排序的对象和排序时比较的对象不同 的原创 2022-01-22 16:31:50 · 461 阅读 · 0 评论 -
堆排序 heapsort
1)什么是堆?堆是一棵顺序存储的完全二叉树。每个结点的关键字都小于或等于其所有子结点的关键字,这样的堆称为小根堆。每个结点的关键字都大于或等于其所有子结点的关键字,这样的堆称为大根堆。2)什么是堆排序?堆排序(Heapsort)是指利用堆这种数据结构来进行排序的选择排序算法。堆积是一个近似完全二叉树的结构,并同时满足子结点的值总是小于(或者大于)它的父节点。小根堆在排序算法中用于升序排列;大根堆在排序算法中用于降序排序;堆排序 只适用于顺序结构。堆排序的平均时间复杂度是O(nlongn)原创 2022-01-22 11:10:57 · 944 阅读 · 0 评论 -
二叉树中递归遇到的问题
本篇文章以求二叉树中的最大值和最小值的最大差值为例,记录一下递归中遇到的问题,是递归时的参数问题,什么时候需要把变量放在参数中,什么时候需要把变量定义为全局变量。变量定义为全局变量以下面的二叉树为例,求整棵树中的节点的值的最大差值,也就是求出最大值和最小值。前序遍历的过程如下:图中圆圈中记录的是结点的访问顺序,前序的遍历顺序和访问顺序相同。走到结点 1 (遍历结点),记录下当前的最大值和最小值 [1, 1] (访问结点),然后遍历左子树,遍历完左子树再右子树。当走到节点 2 时,更新最大值和最原创 2022-01-20 15:08:54 · 392 阅读 · 0 评论 -
二叉树和树的小问题
先大概说一下二叉树的基本内容。1. 二叉树什么是二叉树?二叉树是一种树形结构,每个结点最多两棵子树,而且子树有左右之分,次序不能颠倒。左右子树也是一棵二叉树。1.1 二叉树的存储二叉树可以用数组和链表存储。1)顺序存储使用一组地址连续的存储单元依次自上而下,自左而右的顺序存储二叉树上的结点。简单来说,就是用数组存储,存二叉树的顺序是从上到下,从左到右。顺序存储方式适合完全二叉树或满二叉树。因为数组的长度是固定的,而这种二叉树的空节点少,不会浪费很多数组的地址空间。// java 定义方式原创 2022-01-20 15:07:41 · 711 阅读 · 0 评论 -
kmp算法
整篇以主串为 ababcabcacbab ,模式串为 abcac为例。模式串与主串做匹配时,如果是暴力匹配,在主串某趟匹配失败后,模式串要移动第一位,而主串也有苦难需要回退。在KMP算法中,如果在匹配过程中,主串不需要回退,当匹配失败后,会从当前位置开始继续匹配。而模式串会滑动到某一位开始比较,而不是没都回退到第一位开始比较。1. 前缀表:不能不了解KMP算法中,在写代码之前, 先了解一下KMP算法。首先看一下模式串子串的前后缀。前缀:除最后一个字符以外,字符串的所有头部子串。后缀:除第一个字符以原创 2021-12-19 21:43:59 · 462 阅读 · 0 评论 -
递归复杂度计算
详细分析:代码随想录:递归算法的时间与空间复杂度分析时间复杂度递归算法的时间复杂度本质上是要看: 递归的次数 * 每次递归的时间复杂度递归过程 抽象成一颗递归树,二叉树中每一个节点都是一次递归一棵深度(按根节点深度为1)为k的二叉树最多可以有 2^k - 1 个节点。一棵高度为 k 的二叉树最多可以有 2^k - 1 个节点。空间复杂度递归算法的空间复杂度 = 每次递归的空间复杂度 * 递归深度每次递归所需的空间都被压到调用栈里,一次递归结束,这个栈就是就是把本次递归的数据弹出去。所以这个栈转载 2021-12-19 21:38:30 · 520 阅读 · 0 评论 -
前后端交互:前端传递数据是json格式
文章目录前端发送数据后端接收数据方案一:接收全部数据(String类型的变量)方案二:接收每个数据(Map类型的变量)这篇文章记录的是前后端在交互时,数据以json的格式进行传递。本文章中的例子,前端使用的语言是vue,后端使用的语言是 java。整篇文章使用的数据例子(json格式)如下:{ "name": "testfilename.xlsx", "list": [ { "row": "1", "col": "A"原创 2021-11-05 08:59:01 · 15810 阅读 · 5 评论 -
【springboot】设置跨域
在实现文件下载的功能时,如果使用vue下载本项目的静态资源,则会遇到跨域的问题,从而不能下载。所以,需要添加一些设置才能使得vue项目下载本项目中的资源。在 config 下新建一个文件 WebConfig.java ,跨域设置如下:package com.withered.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configur原创 2021-10-12 16:59:25 · 494 阅读 · 0 评论 -
IDEA 自动生成快捷键
打出一些字母后回车,可以自动生成某些代码。自动生成 main() 函数: 打出 main 后回车输出打印: 打出 sout 后回车复制当前行: 光标在当前行,Ctrl + C复制当前行到下一行: Ctrl + D自动生成构造函数/set/get函数:Alt + Insert新建一行,且光标移到新行:Shift + Enter...原创 2021-05-31 22:12:16 · 2723 阅读 · 1 评论 -
【Java】stack转为list
目录例子:// 创建一个栈Stack<Integer> stack = new Stack<>();// 放入元素stack.push(1);stack.push(2);// 把栈中的元素转为list存储List<Integer> list = new LinkedList<>(stack);// 查看结果System.out.println("stack="+stack);System.out.println("list="+list)原创 2021-05-15 20:15:07 · 1617 阅读 · 0 评论 -
Scanner 类中 next() 和 nextLine() 的区别
不能使用的原因不是语法不对,而是使用这两种来接收数字和字符串时,需要额外处理。会发现结果不如预想中的接收到3个数字和1个字符串。如果使用以下方式混合接收:先接收3个数字,后接收字符串。在接收完3个数字之后,接收输入的位置是停留在数字。接收的是一个换行符,并不是输入的字符串。用于判断释放还要输入。接收输入时,就会接收到换行符。接收输入,也不能混合使用。输入以下内容,分别使用。从键盘接收输入需要用到。...原创 2021-04-27 14:36:25 · 2435 阅读 · 0 评论 -
多线程概念
目录1. 什么是线程呢?2. 什么是进程呢?3. 什么是多线程呢?4. 为什么要使用多线程呢?5. 怎么创建线程?1)继承 Thread 类2)实现 Runnable 接口3)实现 Callable 接口4)run() 和 start() 的区别6. 线程的6个状态有哪些?1. 什么是线程呢?线程是CPU能够进行运算调度的最小单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务,互相之间并不同步。线程是独立调度和分派的基本单位。线程不拥有系统资源,同一原创 2021-04-13 16:46:39 · 331 阅读 · 0 评论 -
Java 中的集合体系
目录1. 什么是集合?2. 为什么要使用集合?3. 3个接口介绍3.1 `List` 接口包括以下实现3.2 `Set` 接口包括以下实现3.3 `Map` 接口包括以下实现4. 如何选择集合?5. 比较和区别一些接口或类6. Collections 工具类有哪些常用方法?6.1 排序6.2 查找,替换1. 什么是集合?集合类是 Java 数据结构的实现。它允许以各种方式将元素分组,并定义了各种使这些元素更容易操作的方法。集合类是可以往里面保存多个对象的类,存放的是对象,不同的集合类有不同的功能和特点,原创 2021-04-12 23:56:47 · 819 阅读 · 0 评论 -
类加载机制简要介绍
目录1.类加载过程有哪些?2. 什么时候会加载类?3. 类加载器是什么?4. 类加载器有什么用?5. JVM中有哪些类加载器(类加载体系是什么)?6. JVM 类加载机制有哪些?7. 双亲委派7.1 双亲委派是什么?7.2 双亲委派的工作原理是什么?7.3 双亲委派有什么优点?class 文件需要加载到虚拟机中之后才能运行和使用,虚拟机加载class 文件的过程就是类加载过程。1.类加载过程有哪些?系统加载class 文件主要有三步:加载 -> 连接 -> 初始化。连接的过程又分为三步原创 2021-04-10 22:03:51 · 298 阅读 · 0 评论 -
垃圾回归机制GC
垃圾回收机制GC目录垃圾回收机制GC1.GC是什么?2. GC是干什么的?3. 什么时候需要监控GC4. 什么时候触发GC?5. 如何判断对象是否存活?5.1 引用计数法5.2 可达性分析算法6. 如何回收垃圾?— GC算法6.1 复制算法6.2 标记清除算法6.3 标记清除压缩算法6.4 比较三种算法6.5 堆中使用哪种算法7. 常见的垃圾回收器7.1 Serial 收集器7.2 ParNew 收集器7.3 Parallel Scavenge 收集器7.4 Serial Old 收集器7.5 Paral原创 2021-04-10 17:52:15 · 530 阅读 · 0 评论 -
JVM虚拟机机制简要介绍
目录1. JVM是什么?2. JVM是干什么的?3. Java内存区域1. 程序计数器2. 虚拟机栈3. 本地方法栈4. 堆5. 方法区6.元空间7. 直接内存8. 哪里有垃圾1. JVM是什么?JVM 是 Java Virtual Machine(Java虚拟机)的缩写。Java 语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。这就是J ava的一个特性:与平台的无关性。有三种Java虚拟机,分别是:HotSpot、JRockit、J9VM。2.原创 2021-04-10 11:15:39 · 178 阅读 · 0 评论 -
【Java】String 转 int
目录方法一:Integer.parseInt()方法二:Integer.valueOf(s).intValue()方法一:Integer.parseInt()例子:String s = "14";int res = Integer.parseInt(s);System.out.println(res);运行结果:14方法二:Integer.valueOf(s).intValue()例子:String s = "14";int res = Integer.valueOf(s).in原创 2021-04-02 22:39:14 · 161 阅读 · 0 评论 -
【Java】修改字符串String
目录方法一:`string` 变为 `char[]`方法二:连接符+方法三:替换函数replaceString 字符串是不可变的,所以不能直接赋值或者通过赋值修改其中的一个字符。方法一:string 变为 char[]String str = "Hello";System.out.println(str);char[] str = s.toCharArray();str[0] = 'h';System.out.println(new String(str));运行结果:Hellohel原创 2021-03-31 20:52:07 · 2362 阅读 · 0 评论 -
【Java】删除空格
目录方法一:删除首尾空格trim()方法二:删除所有空格 - 替换函数replace()方法三:分割字符串split()以字符串 s 为例。不同的方法操作之后,查看修改后的字符串s,为方便与修改前的字符串对比,在输出运行结果时,在结果前后添加了 s=" "String s = " Bob Loves Alice ";方法一:删除首尾空格trim()例子:String s = " Bob Loves Alice ";s = s.trim();System.out.p原创 2021-03-31 20:52:31 · 216 阅读 · 0 评论