自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 RPC要点介绍

PRC远程过程调用,像调用本地的函数一样去调远程函数。两个服务部署在两台服务器上, 两个服务之间想要互相访问,但是由于不在一个内存空间,无法直接调用,需要通过网络来表达调用的语意和传递调用的数据。几个要点:网络传输:客户机和服务器之间建立TCP/HTTP连接寻址: 基于web服务的RPC,需要提供一个endpoint URI,或者是从服务中心服务上查找。从服务提供者的角度看:当服务提供者启动的时候,需要将自己提供的服务注册到指定的注册中心,以便服务消费者能够通过服务注册中心进行查找;当服务提供者

2021-11-06 15:09:25 214

原创 RPC和Restful

RPC(Remote Procedure Call):远程过程调用,即像调用本地方法一样去调用远端服务器的方法。RPC主要解决的问题:分布式系统中,服务之间的调用问题远程调用时,能够像本地调用一样方便PRC核心点:通讯问题:客户端和服务器端建立TCP连接寻址问题:通常可以提供服务器(主机名/IP地址)以及特定的端口。分布式下,需要考虑负载均衡问题。序列化和反序列化问题:网络协议是二进制的,因此需要在传输前序列化参数,接收后反序列化。RPC主要组件和调用过程RPC响应同步异步

2021-03-16 17:20:59 289

转载 常用的Linux命令

https://blog.csdn.net/xp178171640/article/details/104741430

2021-03-16 16:11:45 186

原创 Java: AbstractQueuedSynchronizer (AQS)

参考资料:https://tech.meituan.com/2019/12/05/aqs-theory-and-apply.htmlhttps://www.cnblogs.com/waterystone/p/4920797.htmlAQS是一种提供原子式管理同步状态、阻塞和唤醒线程功能以及队列模型的简单框架。标题AQS核心思想:如果被请求的共享资源空闲,那么就将当前请求资源的线程设置为有效的工作线程,将共享资源设置为锁定状态;如果共享资源被占用,就需要一定的阻塞等待唤醒机制来保证锁分配。这个机

2021-03-14 18:23:31 117

原创 Java:Atomic原子类

Atomic位于java.util.concurrent包中,可以简化多线程编程:无锁,但是保证线程安全;适用于计数器,累加器等。Atomic原理:无锁,使用CAS(compare and swap)来保证线程安全。Atomic原子类:基本类型AtomicIntegerAtomicLongAtomicBoolean数组类型AtomicIntegerArrayAtomicLongArrayAtomicReferenceArray引用类型AtomicReferenceAto

2021-03-11 11:34:45 89

原创 Java: Threadlocal

ThreadLocal并不是一个Thread,而是Thread的局部变量。*ThreadLocal不是用来解决对象共享访问问题的,而主要是提供了保持对象的方法和避免参数传递的方便的对象访问方式。ThreadLocalMap:是ThreadLocal的一个内部类// ThreadLocalMap is a customized hash map suitable only for maintaining thread local valuesstatic class ThreadLocalMap {

2021-03-10 14:33:40 56

原创 Java: Volatile

volatile是Java提供的一种轻量级的同步机制。并发编程中三个重要特性:原子性:一个操作中就是cpu不可以在中途暂停然后再调度;要么全部成功,要么全部失败。非原子操作都会存在线程安全问题,需要我们使用同步技术(sychronized)来让它变成一个原子操作。一个操作是原子操作,那么我们称它具有原子性。由Java内存模型来直接保证的原子性变量操作包括read、load、use、assign、store和write六个,大致可以认为基础数据类型的访问和读写是具备原子性的。可见性:当一个线程

2021-03-08 21:20:01 99

原创 JAVA: Lock解析

Lock:位于Java concurrent包中,常见的使用方式Lock lock = new ReentrantLock();try{ lock.lock(); ...}finally{ lock.unlock();//需要释放锁}Lock接口的方法:/**尝试获取锁。当该函数返回时,处于已经获取锁的状态。如果当前有别的线程获取了锁,则休眠。*/void lock();/**尝试获取锁。如果有别的线程获取了锁,则休眠。当该函数返回时,有两种可能:a.已经

2021-03-08 12:36:27 447

原创 JAVA- 锁

Java不得不所得“锁”: https://tech.meituan.com/2018/11/15/java-lock.htmlSynchronized原理:https://blog.csdn.net/xueba8/article/details/88753443https://www.jianshu.com/p/19f861ab749ehttps://mp.weixin.qq.com/s/2ka1cDTRyjsAGk_-ii4ngw

2021-03-07 23:16:47 45

原创 JAVA-多线程

多线程whywhathow创建多线程extends threadpublic class KillThread extends Thread{ @Override public void run(){}}implement runnablepublic class Battle implements Runnable{ public void run(){}}匿名类Thread t1= new Thread(){ public void run()

2021-03-01 23:08:18 98 2

转载 Java常见的垃圾回收器

部分转载:https://www.cnblogs.com/lsgxeva/p/10231201.html性能指标吞吐量:运行用户代码的时间占运行时间的比例垃圾收集开销:垃圾收集器占总运行时间的比例暂停时间:执行垃圾收集时,程序的工作线程被暂停的时间收集频率:相对应用程序的执行,收集操作发生的频率内存占用:java堆区所占内存的大小现在常用的标准:在最大吞吐量优先的情况下,降低卡顿时间。常见的收集器G1收集器目前服务端最常用的收集器是G1收集器G1收集器的特点:简单可行的性能调优

2021-02-21 23:58:52 261

转载 GC问题排查

堆内存采用分代结构:新生代+老年代堆的垃圾回收:YGC+FGCYGC触发条件对象通常在在年轻代中的Eden区进行分配,如果Eden区域没有足够的空间,那么就会触发YGC(Minor GC),YGC处理的区域只有新生代。每经过一次YGC,存活对象的年龄就会加1。FGC触发条件当晋升到老年代的对象大于了老年代的剩余空间时,就会触发FGC(Major GC)老年代的内存使用率达到了一定阈值(可通过参数调整),直接触发FGC。Metaspace(元空间)在空间不足时会进行扩容,当扩容到了-XX:Me

2021-02-14 21:45:20 627

转载 Java垃圾回收

垃圾回收的区域:堆识别垃圾引用计数对象被引用一次,计数加一;当引用为0时,则可以回收缺点:无法解决循环依赖可达性算法从GC Root对象出发,依次引入其他结点。遍历结束之后,不在任意一条GC root链条上的其他结点,被判为垃圾,可以进行回收GC Root对象虚拟机栈中引用的对象方法区中类静态属性/常量引用的对象本地方法栈中 JNI引用的对象若被标记为垃圾,则一定会被回收吗?不一定。GC时,先判断对象是否执行了 finalize(),如果未执行,则执行 finaliz

2021-02-10 23:47:52 71

原创 JVM

JVM(Java Virtual Machine):Java虚拟机构成JVM由五部分组成:方法区、堆、栈,本地方法栈和程序计数器。方法区:存放类似于元数据信息方面的数据的,比如类信息,常量,静态变量等堆:存放数据,比如对象实例,数组等。通过new创建的对象,都在堆上进行分配。栈:代码运行空间,方法会在栈里运行。线程创建时创建,和线程的生命周期一致程序计数器:类似于指针,指向正在执行的指令。方法区和堆是现成共享的,其余三部分是线程独享的。当多线程在堆上请求空间时,为了提高效率,采用TLAB(T

2021-02-09 23:46:05 62 1

原创 Java同步容器和并发容器

同步容器通过synchronized保证同一时刻内只有一个线程在使用容器,从而使得容器线程安全。synchronized的意思是同步,它体现在将多线程变为串行等待执行。复合操作不能保证线程安全。常见的同步容器:HashTable, Vector并发容器允许多线程同时使用容器,并且保证线程安全。核心:锁、CAS(乐观锁)、COW(读写分离)、分段锁。常见的并发容器:ConcurrentHashMap、CopyOnWriteArrayList在并发场景中,建议直接使用java.util.concur

2021-02-08 23:32:12 174

原创 Java集合解析: Vector

ArrayList不是线程安全的,多线程环境下,多使用Vector(矢量队列)数据结构动态数组,和ArratList结构相似重要参数/** * The array buffer into which the components of the vector are * stored. The capacity of the vector is the length of this array buffer, * and is at least large enough to contain a

2021-02-08 23:21:16 92

原创 Java集合解析: LinkedList

常用的ArrayList插入和删除性能低,若是常用到插入和删除,建议使用linkedlist(非线程安全)。LinkedList数据结构双向链表源码解析 transient int size = 0; /** * Pointer to first node. * Invariant: (first == null && last == null) || * (first.prev == null &&

2021-02-08 22:48:46 60

原创 Java集合解析:ArrayList

ArrayList是Java中常用的集合之一。特点随机访问速度快,插入和移除性能较差;支持null元素;有序元素可以重复;线程不安全;内存连续(索引,赋值,修改,遍历性能高)数据结构底层采用数组实现是一个动态数组Object类型的数组,可以容纳任何类型/** * Default initial capacity. */ private static final int DEFAULT_CAPACITY = 10; /** * T

2021-02-07 23:59:22 145 3

原创 Java集合解析:hashmap在多线程下的替代方案

hashMap虽然效率好,但是多线程下是不安全的。一般在多线程的场景,有几种不同的方式去代替:Collections.synchronizedMap(Map)创建线程安全的map集合HashtableConcurrentHashMap:性能和效率好详细解析Collections.synchronizedMap(Map)private static class SynchronizedMap<K,V> implements Map<K,V>, Serializable

2021-02-07 00:01:24 639 1

原创 Java集合解析:HashMap

HashMap是Java常用的数据结构之一,在面试中也经常被问到。HashMap数据结构JDK1.8之后:数组+链表+红黑树static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; V value; Node<K,V> next; Node(int hash, K key, V va

2021-02-06 00:38:27 82 1

原创 Java语言基础

Java的几大关键特性:面向对象健壮性:程序失败的两个主要原因:内存管理错误和未处理的异常(即运行时错误)。java采用了自动内存管理,并且提供了面向对象的异常处理功能。多线程体系结构中立:java虚拟机解释执行和高性能:源代码->字节码->高性能的本机代码OOP三原则:封装:将代码和数据绑定在一起的机制,并保证代码和数据既不会受到外部的干扰,也不会被误用。封装的基础是类(Class)。继承:一个对象获取另一个对象属性的过程。多态:一个接口,多个方法。具体使用哪个方法和

2021-01-29 23:53:04 124

原创 废柴要努力

前几天,登陆了自己的博客账号,看了之前零零散散写的技术博客,发现都看不懂了(汗)突然间意识到,自己不能这样继续打混下去了新开了个专栏《废柴学编程》,记录一下自己的学习之路,也顺便分享给需要的朋友~嗯,就这样,Flag的大旗先立起来~...

2021-01-29 22:48:35 69

原创 JAVA-Lambda

LambdaReferenceWhy函数式编程,简化写法。可以看作匿名类的简化写法WhatLambda:可以被认为是一种匿名函数,可以看做从匿名类一步步演化而来。How结构:(int a, int b) -> { return a + b; }参数类型:一个或者多个参数主体: 一条或者多条语句线程//旧方法:new Thread(new Runnable() {@Overridepublic void run() { System.out.println("He

2020-08-19 17:13:54 109

原创 JAVA范型

JAVA泛型ReferenceWhy不使用范型带来的危害:当我们将一个对象放入集合中,集合不会记住此对象的类型,当再次从集合中取出此对象时,改对象的编译类型变成了Object类型,但其运行时类型任然为其本身类型。取出集合元素时需要人为的强制类型转化到具体的目标类型,且很容易出现“java.lang.ClassCastException”异常。范型可以提供编译时类型安全监测机制。What泛型,即“参数化类型”, 类似于方法中的变量参数。定义方法时有形参,然后调用此方法时传递实参。泛型只在编译阶

2020-08-19 16:37:44 173

原创 LeedCode: LinkedList

Add Two NumbersNum 2: https://leetcode.com/problems/add-two-numbers/思路: 两个链表相加public ListNode addTwoNumbers(ListNode l1, ListNode l2) { if (l1 == null) { return l2; }...

2019-05-15 20:29:57 132

原创 Guava Cache

文章目录缓存使用场景缓存类型Local CacheGoogle Guava Cache优点适用场景内存结构常用方法创建加载缓存回收刷新过期统计移除监听器获取cache附录缓存使用场景计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存。缓存类型分布式缓存本地缓存(local cache) / 内存缓存(memory cache)Local Cac...

2019-05-09 18:22:57 180

原创 LeetCode: Array

Container with most waterNum 11: https://leetcode.com/problems/container-with-most-water/submissions/思路: 最大成水量决定因素:Min(num[i], num[j]) 和间距(j - i)决定。首尾指针,两者中值较小的向中间移动,用变量保存当前最大盛水量。矩阵理解,覆盖了全部可能的case。...

2019-05-03 19:24:59 133

转载 Java- Optional使用

OptionalJava8引入的新特性解决的痛点问题空指针异常(NullPointerException),任何访问对象方法或属性的调用都可能导致 NullPointerException特性创建Optional实例对象不为 null 的时候使用 of()。如果对象即可能是 null 也可能是非 null,你就应该使用 ofNullable() 方法 public sta...

2019-03-10 22:54:33 134

原创 Guice入门

Guice官方资料:https://github.com/google/guice解决的痛点问题代码中的factory(解耦client和实现类)过多new的使用Unit Test难依赖不明显,隐藏在代码中优势减少了factory,采用bind方式修改方便 :注入的object内部发生变化,当前类不需要修改便于UT:UT和prod注入的object可以不同,便于测试。...

2019-03-05 18:40:58 560

原创 Lombok入门

Lombok解决的痛点问题原始的java object(POJO)private fields,每一个field都需要有setter/getter方法constructortoString() methodfinally bock这些代码都是可以优化的优势通过注解方式,优化了冗余代码和主流的IDE结合的很好主要内容check for Nulls@NonNull @...

2019-03-01 20:27:48 109

转载 oc

变量定义:https://blog.csdn.net/shenjie12345678/article/details/39052659消息传递和转发机制:http://www.cnblogs.com/zhanggui/p/7731394.html*

2018-05-17 15:40:57 210

原创 单链表排序

1、归并排序: 将链表拆分成两个链表,递归,归并,将两个已排序链表合并public ListNode sortList(ListNode head) { // write your code here if (head == null || head.next == null) return head; ListNode slow = head,

2017-06-05 10:44:09 581

原创 leetcode图

leetcode图的相关题目解析: 对图的遍历就是两个经典的方法DFS和BFS。BFS经常用Queue实现,DFS经常用递归实现(可改为栈实现)。1、Clone Graph 题意:给定图中一个节点,克隆图 思路:用HashMap,key存lable值,value存新clone的node,用BFS方法遍历帮助拷贝neighbors的值。给定给一个节点,若lable在map中有,则表示已经clon

2017-05-07 23:01:04 992

转载 消息队列

详细内容:http://www.cnblogs.com/itfly8/p/5155983.html概要介绍如下一、消息队列概述消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。目前在生产环境,使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,R

2017-05-06 15:50:10 345

原创 消息推送

1、WebSocket协议是基于TCP的一种新的网络协议。 它实现了浏览器与服务器全双工(full-duplex)通信——服务器主动发送信息给客户端。 Websocket是一个持久化的协议2、产生原因 HTTP协议只能实现单向的通信。有一种技术都是轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统

2017-04-20 21:47:34 504 2

转载 java IO概要

详细地址:http://blog.csdn.net/lihuapiao/article/details/507314051、概念 输入输出是相对于内存设备而言的。 输入流:把能够读取一个字节序列的对象称为输入流; 输出流:把能够写一个字节序列的对象称为输出流 输入流和输出流中间连接着内存,输入流和输出流将读写分离开来进行操作,先从外设读入内存,然后再写出内存转移到其他外设2、字节流 用字节

2017-04-10 21:10:54 316

转载 java 多线程概要

详细内容 : http://blog.csdn.net/lonelyroamer/article/details/7948329一、概念 1、进程和线程的概念 进程:运行中的应用程序称为进程,拥有系统资源(cpu、内存) 线程:进程中的一段代码,一个进程中可以有多段代码。本身不拥有资源(共享所在进程的资源) 在Java中,程序入口被自动创建为主线程,在主线程中可以创建多个子线程。 区别:

2017-04-10 20:35:16 345

转载 java泛型概要

详细内容:http://blog.csdn.net/lonelyroamer/article/details/7927212概要: 一、泛型即“参数化类型”。所操作的数据类型被指定为一个参数,在用到的时候在指定具体的类型。 这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口和泛型方法。泛型类:class Pair<T> { private T value;

2017-04-10 19:26:56 574

原创 JVM相关面试题及答案

1. 类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,他们的执行顺序 答:先静态、先父后子。 先静态:父静态 > 子静态 优先级:父类 > 子类 静态代码块 > 非静态代码块 > 构造函数 一个类的实例化过程: 1,父类中的static代码块,当前类的static 2,顺序执行父类的普通代码块 3,父类的构造函数 4,子类普通代码块 5,子

2017-03-20 15:47:37 115520 8

原创 java基础面试题及答案

题目链接:http://www.jsondream.com/2016/12/04/java-interview-question.html答案: 1. Arrays.sort实现原理和Collection实现原理 答:Arrays.sort():快排 Collections.sort() :MergeSort,后来变成了TimSort2. foreach和while的区别(编译之

2017-03-20 09:45:54 7046 1

空空如也

空空如也

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

TA关注的人

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