JAVA
文章平均质量分 65
Jchgen
本科在读,主修java语言
展开
-
morris算法遍历二叉树
morris遍历时二叉树遍历的一种更高效的方式。其他基础的二叉树遍历不在这里赘述。二叉树的前中后序,层序遍历详解morris遍历可以达到空间复杂度O(1),时间复杂度O(2n)morris遍历过程:如果cur.left == null,直接cur = cur.right如果cur.left != null,就找到左子树中最右的结点,记做mostRight。如果mostRight.right == cur ,则将mostRight.right = null,然后cur = cur.right将原创 2021-10-27 21:59:30 · 234 阅读 · 0 评论 -
SpringBoot读取github出错org.eclipse.jgit.api.errors.TransportException
首先将uri改为https的,不要用ssh协议的链接。然后配置username和password配置label: master 改为 label: main原创 2021-08-26 15:57:23 · 2178 阅读 · 0 评论 -
JVM总结(Java内存模型,GC)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一.java内存模型1.虚拟机栈2.本地方法栈3.程序计数器4.堆5.方法区6.运行时常量池二. 垃圾回收1. 怎么找到垃圾?哪些可以被当成GC Roots?可达性算法补充(了解):2.回收方法区3.垃圾回收算法3.1 标记-清除算法 (Mark-Sweep)3.2 标记-整理算法(Mark-Compact)3.3 标记-复制算法 ( Copying )3.4 优化的复制算法4.垃圾回收器4.1 Serial收集器 (新生代收集原创 2021-08-17 22:21:41 · 202 阅读 · 0 评论 -
归并排序写不出来?可能是你思路太乱
归并排序的思想还是很简单的,但我之前也有的烦恼:一看就会,一写就废。看着不就是简单的分和并嘛,为啥一写就一脸懵逼。所以我决定来捋一捋归并排序,捋完发现写代码比思想还简单嘛。1.首先要记住归并排序的一些重点: 核心思想是分而治之,需要用到O(N)的额外空间 。根据这两点可以确定归并方法的参数//nums是原数组,left和right是左右边界下标,因为要分而治之//temp是额外的辅助数组mergeSort(int[] nums, int left, int right, int[] temp)原创 2021-08-12 11:07:50 · 252 阅读 · 0 评论 -
ConcurrentHashMap底层原理
ConcurrentHashMap一、简介出自JDK5新引进的Concurrent包,ConcurrentHashMap主要解决了两个问题:相较于只使用synchronized的HashTable提高了性能,根据具体场景进行不同的设计,尽量避免了重量级锁。不同于HashMap,采用了 fail-safe 弱一致性迭代器,再迭代器使用过程中,可以对元素进行更新操作。简单说就是可以一个可以并发操作保证安全性并且性能不差的HashMap。二、HashMap,HashTable,Concurrent原创 2021-03-21 20:16:07 · 542 阅读 · 0 评论 -
初识HTTP协议
初识HTTP协议1. 简介HTTP,超文本传输协议(Hypertext Transfer Protocol),是网络五层模型中的应用层的协议。作用是处理资源的请求响应过程。如图,HTTP就是定义了请求端和应答端之间通信的格式:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gstNPlvf-1616216396646)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\1616210592327.png)]原创 2021-03-20 13:00:19 · 224 阅读 · 0 评论 -
多线程和Synchronized在其中的使用
多线程和Synchronized在其中的使用一、多线程需要提高任务执行效率,有多个任务且任务量大,或者多个任务中有会阻塞的情况3.线程状态1. 新建状态(New): 线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。2. 就绪状态(Runnable): 也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。例如,thread.start()。处于就绪状态的线程,随时可能被CPU调度执行。3. 运行状原创 2021-03-19 18:25:02 · 216 阅读 · 0 评论 -
TCP协议内容总结
文章目录一、TCP协议简介TCP报文格式二、TCP三次握手,四次挥手1.三次握手2.四次挥手三、TCP协议的机制1.、确认应答机制2.、四、常见问题1.TCP如何实现可靠性2.TCP和UDP的区别3.黏包问题1.出现原因2.解决方法一、TCP协议简介TCP协议是有连接的,面向字节流的传输层协议。主要实现端到端的数据传输,保证可靠,信息准确无误TCP报文格式二、TCP三次握手,四次挥手1.三次握手代码如下(示例):import numpy as npimport pandas as pd原创 2021-03-17 18:13:12 · 1498 阅读 · 0 评论 -
java对象序列化
1. Serializable接口的使用java规定对象可以被序列化需要满足如下条件:实现Serializable接口当前类提供一个全局常量:serialVersionUID必须保证其内部所有属性也必须是可序列化的。(默认情况下,基本数据类型可序列化)2. 序列化和反序列化序列化过程:将内存中的java对象保存到磁盘中或者通过网络传输出去,使用ObjectOutputStream实现反序列化过程: 将磁盘文件中的对象还原为内存中的一个java对象java中使用ObjectInputS原创 2021-03-07 11:06:12 · 477 阅读 · 4 评论 -
tcp一次连接多次传输/上传如何确定边界?
可以在传输文件之前首先传输文件的长度例如以下代码 客户端建立一次连接,首先发送了一个字符串,然后发送一个图片。如果直接发送会出现边界问题导致乱码。可以先发送 message.getBytes().length 再发送message自身。 socket = new Socket(serverIP, port); //4.发送消息 os = socket.getOutputStream(); String mes原创 2021-02-15 11:04:24 · 520 阅读 · 0 评论 -
求最大子矩阵的大小
*** 求最大子矩阵 例如1 1 0 11 1 1 11 1 1 1最大为1 1 1 11 1 1 1**public class MaxSubMatrix { public static void main(String[] args) { System.out.println(getMaxSubMatrix(new int[][]{{1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1},})); } /**原创 2020-12-24 13:17:33 · 211 阅读 · 0 评论 -
对intern()的理解
对intern()的理解intern()的执行逻辑为:在字符串常量池找和字符串对象的值相等的一个对象或引用 如果找不到,就创建,如果堆里有找的对象,就创建一个引用,该引用指向堆里要找的对象,并返回该引用 如果堆里没有,就创建一个字符串对象并返回先看这道题 String s = new StringBuilder("计算机").append("软件").toString(); Assert.assert原创 2020-12-09 15:53:30 · 320 阅读 · 0 评论 -
java题目汇总(1)
java题目汇总(1)1.** 阅读如下代码。 请问,对语句行 test.hello(). 描述正确的有()****package NowCoder;**`class Test {public static void hello() { System.out.println(“hello”); }}public class MyApplication { public static void main(String[] args) { Test test=null;原创 2020-12-07 16:40:04 · 214 阅读 · 1 评论 -
前端如何定位后端资源
前端如何定位后端资源1.form表单中action=“”<form action="home.html"> <!-- 提交到的资源路径 --> <input type="submit"> <!--表示提交 --></form>2.href 超链接,点击直接跳转<a href="login.html">登录</a><br>3.ajax: function( url, options )原创 2020-11-25 23:48:28 · 356 阅读 · 0 评论 -
优先级队列(堆)
优先级队列(堆)1. 堆的顺序存储1.1 堆的概念堆逻辑上是一棵完全二叉树堆物理上是保存在数组中比特科技满足任意结点的值都大于其子树中结点的值,叫做大堆,或者大根堆,或者最大堆反之,则是小堆,或者小根堆,或者最小堆堆的基本作用是,快速找集合中的最值1.2 存储方式使用数组保存二叉树结构,方式是将二叉树用层序遍历方式放入数组中。一般只适合表示完全二叉树,因为非完全二叉树会有空间的浪费。这种方式的主要用法就是堆的表示。1.3 下标关系已知双亲**(parent)原创 2020-10-31 16:31:19 · 87 阅读 · 0 评论 -
快速排序详解
快速排序详解(符java代码)1.算法思想从待排序区间选择一个数,作为基准值(pivot);Partition: 遍历整个待排序区间,将比基准值小的(可以包含相等的)放到基准值的左边,将比基准值大的(可 以包含相等的)放到基准值的右边;采用分治思想,对左右两个小区间按照同样的方式处理,直到小区间的长度 == 1,代表已经有序,或者小区间 的长度 == 0,代表没有数据。private static void quickSort(int[] arr, int left, int ri原创 2020-10-30 22:16:11 · 173 阅读 · 0 评论 -
计算器java实现(逆波兰)
计算器java实现(逆波兰)思路一:将输入的中缀表达式转换为后缀表达式例如 :1 + ( ( 2 + 3 ) * 4 ) - 5 ==> 1 2 3 + 4 * + 5 -先将表达式字符串存入List集合,便于操作既 "1+((2+3)4)-5" ==> List [1,+,(,(,2,+,3,),,4,),-,5]将得到的中缀表达式对应的Lis...原创 2020-04-05 13:51:59 · 273 阅读 · 0 评论 -
java简单单链表实现栈
import java.util.Scanner;//链表模拟栈//思路:从最前面插入数据和从最前面取出数据class LinkedStack{ private int maxSize;// 栈的大小 LinkedList linkedList;// 单链表初始化 //构造器 public LinkedStack(int maxSize) { this.maxSize = ...原创 2020-03-07 13:08:10 · 235 阅读 · 0 评论