自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(85)
  • 问答 (2)
  • 收藏
  • 关注

原创 JVM(三)垃圾回收02

一.Serial/SerialOld等价于新生代用Serial GC,且老年代用Serial 0ld GC单线程回收:使用一个cpu或一条线程去完成垃圾收集工作,必须暂停其他所有的工作线程-XX: +UseSerialGC 参数可以指定年轻代和老年代都使用串行收集器二.ParNew ParNew作用于新生代,采用复制算法通过选项"-XX:+UseParNewGC"手动指定使用.ParNew收集器三.Parallel Scavenge/Parallel Old1.parallel

2021-07-20 13:28:45 122

原创 JVM(三)垃圾回收01

一.判断对象是否存活的两个方法引用计数法:(1)介绍:给每一个对象设置一个引用计数器,每当有一个地方引用这个对象时,就将计数器加一,引用失效时,计数器就减一。当一个对象的引用计数器为零时,说明此对象没有被引用,也就是“死对象”,将会被垃圾回收。(2)优缺点:原理简单,效率高,但无法解决循环引用。可达性分析算法(引用链法):(1)介绍:从一个被称为 GC Roots 的对象开始向下搜索,如果一个对象到 GC Roots 没有任何引用链相连时,则说明此对象不可用。(2)可作为 GC Roots 的

2021-07-20 09:26:44 183 2

原创 HTTP相关问题

1.HTTP概述HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是应用层协议,工作于客户端-服务端架构上,基于TCP/IP通信协议来传递数据。2.简述HTTP状态码和对应的信息1XX:接收的信息正在处理2XX:请求正常处理完毕3XX:重定向4XX:客户端错误5XX:服务端错误常见错误码:301:永久重定向302:临时重定向304:资源没

2021-07-16 18:33:53 141

原创 OSI七层

OSI应用层OSI参考模型中最靠近用户的一层,是为计算机用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP,HTTPS,FTP,POP3、SMTP等。表示层表示层提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。数据压缩和加密也是表示层可提供的转换功能之一。会话层会话层就是负责建立、管理和终止表示层实

2021-07-13 16:25:51 246

原创 UDP常见问题

UDP首部(1)源端口号:在需要对方回信时选用,不需要时可全用0(2)目的端口号:在终点交付时使用(3)长度:UDP用户数据报的长度,最小值是8(4)检验和:检测UDP用户数据报在传输中是否有错,有错就丢弃为什么UDP不可靠?因为UDP没有保证可靠传输的机制。(1)不保证消息交付:不对已发生的数据进行确认,也没有超时重传机制(2)不保证交付顺序:UDP首部不含序号字段,所以报文段的接收可能会失序。(3)不跟踪连接状态: UDP是无连接协议,不建立连接或重启状态机(4)不需要拥塞.

2021-07-13 13:20:51 1945

原创 TCP首部格式

源端口和目的端口序号确认号数据偏移ACKSYNFIN校验和窗口还要注意一点,发送窗口大小为Min(滑动窗口大小,拥塞窗口大小)。

2021-07-13 12:26:24 83

原创 TCP拥塞控制

一.概述若网络中有许多资源同时出现供应不足,网络性能就要明显变化,整个网络的吞吐量将随着输入负荷的增大而下降,这就是拥塞。拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至于过载。流量控制往往指点对点的通信量的控制,是一个端到端端额问题。拥塞控制则是当整个挽留过的输入负载超过网络所能承受的时候,向发送方发送控制报文,并告诉发送端,必须放慢发送速率。二.四种算法慢开始和拥塞避免快重传和快恢复综合情况...

2021-07-12 19:15:31 109 1

原创 TCP可靠传输

TCP怎么实现可靠传输?TCP有三次握手建立连接,四次挥手关闭连接的机制。TCP维持一个强制的校验和,用于检测传送中引入的比特差错。序列号/确认应答机制有效避免报文段的重复接收,也能记录失序到达的报文段。超时重传机制有效避免报文段丢失问题。基于滑动窗口机制进行流量控制,控制发送方的发送速率,让接收方来得及接收,避免数据丢失。拥塞控制机制作用于网络,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况。...

2021-07-12 19:00:26 86

原创 TCP释放连接

一.过程二.常见问题为什么会有TIME-WAIT的状态?确保最后一个确认报文能够到达(如果B没收到A发送来的确认报文,那么就会重新发送连接释放请求报文,A等待一段时间就是为了处理这种情况的发生)避免新旧链接混淆。(等待2MSL可以让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接请求不会出现旧的连接请求报文)为什么是四次挥手,而不是三次?因为TCP是全双工通信的(1)第一次挥手 因此当主动方发送断开连接的请求(即FIN报文)给被动方时,仅仅代表主

2021-07-12 16:34:06 254

原创 TCP建立连接

一.过程:二.常见问题:为什么一定是三次握手?为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤。两次握手有什么问题?如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认。谢希仁版《计算机网络》中的例子是这样的,“已失效的连接请求报文段” 的产生在这样一种情况下:clien

2021-07-12 14:54:13 242

原创 红黑树相关

参考:使用:https://blog.csdn.net/v_JULY_v/article/details/6105630https://www.cnblogs.com/lukazan/p/14702151.html比较:https://www.cnblogs.com/luntai/p/6411719.htmlhttps://www.cnblogs.com/cuiqq/p/13280191.html

2021-07-12 13:25:31 54

原创 Java并发05Java线程池

参考:https://blog.csdn.net/qq_29373285/article/details/85238728

2021-07-12 11:41:42 62

原创 Java并发04Java中的锁02ReentrantLock

一.锁的获取和释放1.获取1.1.非公平代码块1-1 final boolean nonfairTryAcquire(int acquires) { final Thread current = Thread.currentThread(); int c = getState(); if (c == 0) { if (compareAndSetState(0, acquires))

2021-07-08 14:29:20 75

原创 Java并发04Java中的锁01AQS03共享模式

共享式同步状态的获取和释放1. 获取代码块1-1public final void acquireShared(int arg) { if (tryAcquireShared(arg) < 0) doAcquireShared(arg);}首先看能不能直接获得资源,也就是执行tryAcquireShared(arg)(由子类实现),获取成功返回非负数,流程结束。不成功,进入第2步。执行doAcquireShared(arg),下面分析该方法。doAcquir

2021-07-05 16:06:58 55

原创 Java并发04Java中的锁01AQS02独占模式

一.独占式同步状态的获取和释放1. 获取代码块1-1 public final void acquire(int arg) { if (!tryAcquire(arg) && acquireQueued(addWaiter(Node.EXCLUSIVE), arg)) selfInterrupt(); }通过acquire()获取同步状态,关注tryAcquire(arg) 和acquireQueued

2021-07-05 13:10:34 80

原创 Java并发04Java中的锁01AQS01序

简单介绍AQS:全程AbstractQueuedSynchronizer,翻译为队列同步器,是用来构建锁或者其他同步组件的基础框架。它使用了一个int成员变量表示同步状态,通过内置的FIFO队列完成资源获取线程的排队工作。使用方式:(1)通常是程序员自己创建子类继承AQS,子类重写父类相应的方法来管理同步状态。这些方法如下图所示:(2)同时AQS还提供模板方法,帮助实现自定义同步组件,如下图所示:...

2021-07-05 10:42:44 62

原创 Java并发03ThreadLocal

一.参考1.使用及原理https://www.jianshu.com/p/3c5d7f09dfbd2.使用场景https://www.cnblogs.com/zz-ksw/p/12684877.htmlhttps://blog.csdn.net/Mind_programmonkey/article/details/118220731https://www.cnblogs.com/yxysuanfa/p/7125761.html二.我自己的一点理解基于这篇文章(https://blog.csd

2021-07-04 11:58:11 73

原创 Java并发03一些零碎知识

一.进程和线程的关系和区别1. 概念进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位线程:是进程的一部分,是 CPU 调度的一个基本单位。2.关系和区别进程是一段正在执行的程序,是资源分配的基本单元,而线程是CPU调度的基本单元。进程间相互独立,进程之间不能共享资源。一个进程至少有一个线程,同一进程的各线程共享进程的资源(堆区、方法区)。线程的创建和切换开销比进程小,引入线程的概念可以带来更好的并发的。进程间通信可能基于:sock

2021-07-02 13:58:31 82 1

原创 Java并发02Java内存模型04-单例模式双重检查的补充

一.原始方案及存在的问题public class SingleInstance{ private static SingleInstance instance = null; private SingleInstance(){} public static SingleInstance getInstance(){ if(instance == null){ synchronized(SingleInstance.class){

2021-06-30 09:25:01 93 1

原创 Java并发02Java内存模型03-锁和final的内存语义

一.锁释放或获取的内存语义释放:当线程释放锁时,JMM会把该线程对应的本地内存中的共享变量值刷新到主内存。获取:当线程获取锁时,JMM会把该线程对应的本地内存置为无效。得出结论: 锁释放与volatile写内存语义相同,锁获取与volatile读内存语义相同。二.内存语义的实现1. 原理锁分为公平锁和非公平锁,基于AQS,而AQS又基于volatile变量加CAS操作。对加锁:对公平锁:先判断是否有之前就等待加锁的线程,有那本线程加锁失败,没有就对state进行CAS操作。对非公

2021-06-29 18:45:43 82

原创 Java并发02Java内存模型02-volatile内存语义

一.volatile特性关于volatile基础,见:https://blog.csdn.net/baldist/article/details/118300089可见性:对一个volatile变量的读,总是能看到任意线程对这个volatile变量最后的写入。原子性:对任意单个volatile变量的单个读\写操作具有原子性,但复合操作没有。(例如:i++)二.写-读内存语义写:当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量值刷新到主内存。读: 当读一个volat

2021-06-29 16:05:59 52

原创 Java并发02Java内存模型01-预备知识

一.Java内存模型的抽象结构局部变量、方法定义参数、异常处理器参数不会在线程间共享,不存在内存可见性问题,不收内存模型影响。实例域、静态域和数组元素都存储在堆内存中,堆内存在线程之间共享。Java线程之间的通信由Java内存模型(JMM)控制。线程之间的共享变量存储在主内存中,每个线程都有一个私有的本地内存,本地内存存储了该线程读\写共享变量的副本。JMM通过控制主内存与每个线程的本地内存之间的交互,来为Java程序员提供内存可见性的保证。二. 重排序1. 简介为了提高性能,指令可能

2021-06-29 14:03:01 68 2

原创 Java并发01基本原理03-原子操作

一. 处理器实现原子操作通过总线锁保证原子性:某个处理器在总线上输出LOCK #信号,其他处理器的请求将被阻塞,该处理器独占共享内存。通过缓存锁保证原子性:即不锁总线了,而是把该内存地址对应的缓存行锁住。例如:多个CPU都有某个内存地址的缓存行,如果某个CPU要对这个缓存行进行写回操作时,那么内存地址对应的所有缓存行都被锁住。参考:https://yemablog.com/posts/cache-locking-2https://www.jianshu.com/p/2c212631c7cah

2021-06-28 14:48:09 49

原创 Java并发01基本原理02-volatile

一.作用volatile保证共享变量的可见性。二.原理被volatile修饰的变量进行写操作的时候,其汇编代码会多出一条带Lock前缀的指令,这个Lock前缀指令在多核处理器下会引发两件事:将当前处理器缓存行的数据写回到系统内存这个写回操作使得在其他CPU里缓存了该内存地址的数据无效。所以,当一个线程修改某个被volatile修饰的变量时,其他线程能够立即读到该变量的最新值,保证可见性。三.优化LinkedTransferQueue这个类在使用volatile变量的时候,用追加的字节的方

2021-06-28 12:58:57 51

原创 Java并发01基本原理01-synchronized(02)

一.使用class Add implements Runnable{ static Integer num=0; Object obj; public Add(Object obj) { this.obj=obj; } @Override public void run() { synchronized (obj) { for (int i=0;i<100;i

2021-06-27 15:54:48 48

原创 Java并发01基本原理01-synchronized(01)

szxfsd

2021-06-27 13:47:53 79 1

原创 各种常见排序

1.堆排序关键步骤: //nowIndex 为当前要调整的非叶结点,tail为最后一个叶结点 private void downAdjust(int []arr,int nowIndex,int tail) { int i=nowIndex; int j=nowIndex*2+1; //当j>tail时,意味着以nowIndex为祖先的所有子节点都遍历了,直接跳出循环 while (j<=tail) {

2021-06-03 21:49:28 59

原创 leetcode附录02

class Solution {// 一步步详解桶算法,因为自己看了很多遍,看的简直头皮发麻public int maximumGap(int[] nums) { // n int n = nums.length; // 低于两个数不用比较 if (n < 2) { return 0; } int minVal = Arrays.stream(nums).min().getAsInt(); // 计算最小值 int ma

2021-04-09 11:58:21 45

原创 LeetCode专题一:Array

一.27,26,80其中:26和80有固定模板,见:https://blog.csdn.net/baldist/article/details/115342357

2021-03-31 09:23:06 98 1

原创 LeetCode附录01

public int removeDuplicates(int[] nums,int k) { if (nums.length<=k) return nums.length; int l=k-1; int tag=2; for (int i=k;i<nums.length;i++) { if (nums[l-k+1]!=nums[i]) {

2021-03-31 09:22:24 38

原创 LeetCode(十)二叉树相关-二叉搜索树-#701

701. 二叉搜索树中的插入操作1.题目描述及示例题目描述示例2.题解思路及代码思路简单,略。代码public TreeNode insertIntoBST(TreeNode root, int val) { if (root==null) return new TreeNode(val); TreeNode p=root; while (true) { if

2020-11-03 20:37:07 50

原创 LeetCode(十)二叉树相关-二叉搜索树-#450

450. 删除二叉搜索树中的节点1.题目描述及示例题目描述示例2.题解思路及代码思路设root为要删除的节点,用先序遍历。如果root为叶子节点,返回null。如果root的左孩子不空,找到root的左子树的最大值所在的节点l,让l的右孩子指向root的右子树。最后,返回root的左孩子。如果root的右孩子不空,找到root的右子树的最小值所在的节点r,让r的左孩子指向root的左子树。最后,返回root的右孩子。代码public TreeNode d

2020-11-03 20:30:22 45

原创 LeetCode(十)二叉树相关-二叉搜索树-#98

110. 平衡二叉树1.题目描述及示例题目描述示例2.题解思路及代码思路用中序遍历,如果序列一直严格递增就是二叉搜索树;否则,不是。代码 Stack<Integer> stack=new Stack<>(); boolean tag=true; public boolean isValidBST(TreeNode root) { inOrder(root); return tag;

2020-11-03 20:11:31 54

原创 Java并发(五)wait/notify的使用和简单原理

一.使用class Add implements Runnable{ static Integer num=0; Object obj; public Add(Object obj) { this.obj=obj; } @Override public void run() { synchronized (obj) { for (int i=0;i<100;i

2020-11-02 16:37:31 182

原创 Java并发(四)synchronized关键字(2)优化

一.轻量级锁轻量级锁的使用场景:如果一个对象虽然有多线程要加锁,但加锁的时间是错开的(也就是没有竞争),那么可以使用轻量级锁来优化。轻量级锁对使用者是透明的,即语法仍然是 synchronized。举例,流程假设有两个方法同步块,利用同一个对象加锁static final Object obj = new Object();public static void method1() { synchronized( obj ) { // 同步块 A method2(); }}publ

2020-10-31 16:56:34 93

原创 LeetCode(十)二叉树相关-#110

110. 平衡二叉树1.题目描述及示例题目描述给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。示例2.题解思路及代码思路简单,略。代码 boolean tag=true; public boolean isBalanced(TreeNode root) { preOrder(root); return tag; }

2020-10-31 16:10:33 72

原创 LeetCode(十)二叉树遍历相关-层次遍历-#102

102. 二叉树的层序遍历1.题目描述及示例题目描述给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例2.题解思路及代码思路主要是怎么确定每层有多少个。当第i层的第一个节点开始出队时,第i+1层的第一个节点开始入队。当第i层的最后一个节点出队时,第i+1层的最后一个节点也入队了。也就是说,此时队里只有i+1层的节点。这样一层层的遍历。代码public List<List<Integer>> levelO

2020-10-31 16:04:45 80

原创 LeetCode(十)二叉树遍历相关-二叉树非递归遍历

一.前序 #144 public List<Integer> preorderTraversal(TreeNode root) { List<Integer>list=new ArrayList<>(); TreeNode p=root; Stack<TreeNode> stack=new Stack<>(); if (p!=null) stack

2020-10-31 15:51:22 63

原创 Java并发(四)synchronized关键字(1)基本原理

一.用法就记住一点:synchronized修饰非静态方法时,锁是this,即当前的实例对象。synchronized修饰静态方法时,锁是类对象。.理

2020-10-31 15:19:10 97

原创 LeetCode(十)二叉树相关-#1325

public TreeNode removeLeafNodes(TreeNode root, int target) { root=postOrder(root,target); return root; } public TreeNode postOrder(TreeNode root,int target) { if (root!=null) { root.left=postOrder(roo

2020-10-28 18:01:54 100

空空如也

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

TA关注的人

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