自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

斜阳雨陌

你有多努力,就有多特殊!

  • 博客(557)
  • 资源 (3)
  • 收藏
  • 关注

原创 后端进阶技术总结

一、基础技术知识(1)SDK与API的区别?SDK是Software Development Kit的缩写,即软件开发工具包。可以把SDK想象成一个虚拟的程序包,在这个程序包中有一份做好的软件功能,这份程序包几乎是全封闭的,通过接口联通外界,相应的接口就是API。JDK(Java Development Kit),即Java开发工具包,是针对Java开发者的产品,JDK是SDK的一个子集,JDK已经成为使用最广泛的JAVA SDK 。JDK是整个Java的核心,包括Java运行环境JRE、一堆Java

2022-05-25 16:22:53 751 2

原创 什么是SAR包?

SAR file is created with the .sar extenstion same like how other archive files (JAR, WAR, EAR) created. But the purpose of the SAR file is differenet from the other archive files. It is used for deploying a service component in the application server witho

2021-11-18 22:30:31 2290

转载 Java Agent

一、什么是 Java Agent ?笼统地来讲,Java Agent 是一个统称,该功能是 Java 虚拟机提供的一整套后门。通过这套后门可以对虚拟机方方面面进行监控与分析。甚至干预虚拟机的运行。Java Agent 又叫做 Java 探针,Java Agent 是在 JDK1.5 引入的,是一种可以动态修改 Java 字节码的技术。Java 类编译之后形成字节码被 JVM 执行,在 JVM 在执行这些字节码之前获取这些字节码信息,并且通过字节码转换器对这些字节码进行修改,来完成一些额外的功能,这种就是

2021-07-11 16:52:50 761

转载 对多租户的理解

一、 多租户定义多租户定义: 多租户技术或称多重租赁技术,简称SaaS,是一种软件架构技术,是实现如何在多用户环境下(此处的多用户一般是面向企业用户)共用相同的系统或程序组件,并且可确保各用户间数据的隔离性。简单讲:在一台服务器上运行单个应用实例,它为多个租户(客户)提供服务。从定义中我们可以理解:多租户是一种架构,目的是为了让多用户环境下使用同一套程序,且保证用户间数据隔离。那么重点就很浅显易懂了,多租户的重点就是同一套程序下实现多用户数据的隔离。对于实现方式,我们下面会讨论到。在了解详细一点: 在

2021-07-03 23:24:05 1280

转载 什么是QoS技术

QoS(Quality of Service)是服务质量的简称。从传统意义上来讲,无非就是传输的带宽、传送的时延、数据的丢包率等,而提高服务质量无非也就是保证传输的带宽,降低传送的时延,降低数据的丢包率以及时延抖动等。广义上讲,服务质量涉及网络应用的方方面面,只要是对网络应用有利的措施,其实都是在提高服务质量。因此,从这个意义上来说,防火墙、策略路由、快速转发等也都是提高网络业务服务质量的措施之一。QoS技术包括流分类、流量监管、流量整形、接口限速、拥塞管理、拥塞避免等。下面对常用的技术简单进行一下介绍。

2021-05-07 01:19:40 1311

转载 怎么理解 IaaS、SaaS 和 PaaS 的区别?

原文链接:怎么理解 IaaS、SaaS 和 PaaS 的区别?我们从SaaS、PaaS、IaaS的定义、工业应用几方面来介绍他们之间的区别一、定义层面的区别SaaS、PaaS、IaaS简单的说都属于云计算服务,也就是云计算+服务。我们对于云计算的概念,维基百科有以下定义:Cloud computing is a new form of Internet-based computing that provides shared computer processing resources and da

2021-03-20 22:51:44 4233

原创 java后端必会【基础知识点】

(一)Redis

2020-11-18 22:04:37 8528 2

原创 【spring容器启动】之bean的实例化和初始化(文末附:spring循环依赖原理)

本次主要介绍ApplicationContext类型的Ioc容器实现,ApplicationContext是Spring推出的先进Ioc容器,它继承了旧版本的Ioc容器实现BeanFactory,并进一步扩展了容器的功能,增加了bean的自动识别、自动初始化功能,同时引入了BeanFactoryPostProcessor、BeanPostProcessor等逻辑处理组件,目前我们的项目基本都基于A...

2020-08-23 23:58:38 12618 10

原创 mysql查询流程解析及重要知识总结

时光荏苒啊!在过两个月我就工作满三年了,大学毕业的情景还历历在目,而我已经默默的向油腻中年大叔进发了。作为一名苦逼的后端工程师,我搞过一段时间python,现在靠java糊口,但后来才发现,始终不弃我的是数据库啊。从大学到工作,她始终陪伴左右,从sql service到mysql,她一直在身边,而今是时候深入了解总结下数据库的一些基础知识了。(一)mysql逻辑架构1.数据库与数据库实例在介绍mysql逻辑架构前,首先需要理解两个概念:数据库和数据库实例。数据库: 数据库是文件的集合,是依照某种数

2020-07-27 20:37:21 3017 1

原创 【精心总结】java内存模型和多线程必会知识

内存模型(1)java内存模型到底是个啥子东西?java内存模型是java虚拟机规范定义的一种特定模型,用以屏蔽不同硬件和操作系统内存访问差异,让java在不同平台中能达到一致的内存访问效果,是在特定的协议下对特定的内存或高速缓存进行读写访问的抽象。我来简单的总结成一句话就是:java内存模型是java定义的对计算机内存资源(包含寄存器、高速缓存、主存等)的读写方法和规则。 注意上面的这些定义...

2020-04-19 23:50:46 561

原创 Minor GC和Full GC

我们在日常开发中可能经常会听大家谈论GC,但是其实很多人对GC的种类其实并不是很了解,接下来我们简单介绍下Minor GC和Full GC及他们的区别。MinorGC:也可以叫作新生代GC,指的是发生在新生代的垃圾收集动作。因为新生代中对象大部分的生命周期都很短,都是朝生暮死,所以MinorGC十分频繁,但因为需要移动的对象比较少及采用了“复制”回收算法,所以回收速度非常快。FullGC:...

2020-04-12 16:28:19 657

原创 同步/异步&阻塞/非阻塞

平时开发中经常会听大家说到什么同步阻塞、异步非阻塞等等名词,这里我谈下自己对这两个名词的理解,仅仅是个人观点,并不一定正确。1.阻塞/非阻塞我认为判定阻塞还是非阻塞,取决于线程所做的操作是否需要将线程挂起等待。举个例子,我们都知道CAS是非阻塞的,而synchronized是阻塞的。为什么呢,因为CAS能快速返回一个获取锁成功或失败结果,线程可以在获取锁失败时再去做其他事情,而synchro...

2020-04-07 00:04:59 418

原创 从源码看ConcurrentHashMap

简介ConcurrentHashMap是线程安全且高效的HashMap实现。这里主要研究JDK8后的ConcurrentHashMap。下面是ConcurrentHashMap的简单结构:ConcurrentHashMap基于HashMap的基本逻辑,通过CAS + synchronized 来保证并发安全性。ConcurrentHashMap使用的数组及数组的每个节点都为volatile类型...

2020-03-28 21:50:46 346

原创 一起唠唠分布式锁

(1)分布式锁和分布式事务的区别1.分布式锁是在集群环境下,用来控制不同机器对全局共享资源的访问。2.分布式事务是在集群环境下,用来保证全局事务的一致性,保证多个数据库的数据整体上能正确的从一个一致性状态转到另一个一致性状态。(2)分布式锁应用场景在我们的某个jvm应用程序中,如果需要对某个共享变量进行多线程同步访问,可以使用java多线程的同步工具,例如ReentrantLock、Syn...

2020-03-26 23:18:57 785

原创 带你理解Spring AOP

AOP概述在我们的日常开发中,除了正常业务逻辑外,还可能经常会需要在业务逻辑的特定位置加入日志,以便于调试和问题分析。但是这种插入日志的逻辑和业务逻辑间并不存在连续性和依赖性,这种逻辑侵入随着项目的不断发展,会导致项目越来越来臃肿,同时也更加难以管理。为了解决这个问题,优秀的前辈们推出了AOP(面向切面编程)理念以及很多优秀的AOP框架,其中比较有代表性的就AspectJ,AspectJ通过扩...

2020-03-01 23:04:31 476

原创 java类加载顺序

在java中类的加载、连初始化都是在程序运行期完成的,虽然会稍微增加开销,但是却很大的增加了灵活性,我们可用在运行期间动态的去网络获取其他地方加载一个二进制流来作为程序代码的一部分。接下来我们简单介绍下java类的加载顺序。从上图中我们可以看到类的生命周期主要有7个过程,分别为加载、验证、准备、解析、初始化、使用、卸载。加载:这个过程很简单,就是通过ClassLoader去加载Class文...

2020-03-01 18:35:22 533 2

原创 深入了解Spring IoC

IoC全称Inversion of Control即控制反转,它还有一个别名依赖注入。spring利用Ioc容器帮我们自动构建对象及注入依赖对象,减少了对象构建与业务代码的耦合,使得我们能够更加高效愉快的写bug????了( ̄▽ ̄)"。接下来我们详细介绍下这个spring Ioc吧。依赖注入原理1.三种依赖注入方式spring中有三种常见的依赖注入方式即:构造方法注入、setter方法注入、接口注...

2020-02-29 22:58:37 337 1

原创 Spring事务那些事儿

(一)事务的隔离级别大家都知道事务有四个属性,即ACID(原子性、一致性、隔离性、持久性)。这四个里面稍微难理解点的是一致性和持久性。所谓的一致性是指:事务执行前后数据的一致性状态,例如事务执行前用户有1万元,事务回滚后用户仍应该有1万元。而这里的持久性指的是:事务在提交后结果是永久的,即使程序崩溃数据也能恢复,当然数据库的持久性指的是高可靠性,事务执行后数据保证一定写到了磁盘及备份日志,但并...

2020-02-19 23:07:14 391

原创 java Exception

(1)异常类体系我们先来看下java异常类的体系结构:Java将java.lang.Throwable作为所有异常的超类。Throwable有两个重要的子类:Exception(异常)和 Error(错误)。Error:代表程序无法处理的异常,一般发生在严重故障时,通常都是jvm错误,例如OOM异常、线程死锁等。Exception:是程序可以处理的异常,应用程序可以通过try catch...

2020-02-05 17:54:16 312

原创 深入理解HashMap

1.HashMap的序列化HashMap中的数据主要存储在类型为Node<K,V>的table数组中。但是我们看下源码,却会发现table使用了transient修饰(即不参与序列化),那么问题来了:HashMap是如何实现序列化的呢?我们仔细翻下代码,可以看到HashMap自己实现了序列化/反序列化的函数writeObject和readObject。我们可以看到HashMap在...

2019-12-23 22:17:53 489

原创 红黑树和B+树

红黑树简介红黑树是一种自平衡二叉查找树,也被称为"对称二叉B树",它可以在O(logn)时间内利用 O(logn)的空间来完成查找、插入、删除操作。红黑树的读操作与普通二叉查找树相同,而插入和删除操作可能会破坏红黑树的规则,需要进行恢复操作。恢复红黑树的性质需要少量的颜色变更(实际是非常快速的)和不超过三次树旋转(对于插入操作是两次),虽然插入和删除很复杂,但操作时间仍可以保持为O(logn)。...

2019-12-11 23:01:55 8563 3

原创 Thread.yield()和Thread.sleep(0)

关于Thread.yield()和Thread.sleep(0)的语义问题真是一个让人挠头的问题,翻了好多资料,在java6语言规范中看到了一段这样的描述:重点在红框中,简而言之就是:sleep(0)和yield()的实现不需要任何可见的效果。那么在实现这两个函数的语义时就可以什么都不做,这取决于具体的JVM实现。后来再看java8的语言规范时发现红框内的提示被去掉了,官方给出了下面的解释:...

2019-12-07 22:26:18 5450 1

原创 java线程实现及线程池的使用

(一)Java线程实现线程把处理器的调度和资源分配分开,是cpu的最小调度单位。多个线程可以共享进程的内存资源,又可以独立调度。java线程关键方法都是通过高效的本地方法实现的。Java线程的主要实现方式有三种:内核实现、用户实现、内核用户混合实现。1.内核实现内核线程就是由内核调度、映射的线程。支持多线程的内核称为多线程内核。这种线程,所有操作都需要系统调度,需要在内核态和用户态切换,系统...

2019-12-01 23:14:24 399

原创 java transient关键字

transient是用在序列化中的,当我们序列化的过程中,如果我们不想序列化某个字段,那么我们就可以使用这个关键字。jvm就会在序列化的时候忽略这个字段的数值。transient主要有两个用途:1.保证数据的安全。在进行序列化时,可以将我们的私密数据隐藏起来,不对外暴露。2.减少无用数据的传输,提高数据传输效率。对于一些可以通过传输数据计算推导的冗余数据,我们可以使用该关键字,避免无用的网络...

2019-11-17 19:16:59 168

原创 mysql中count(*)和count(1)和count(column)区别

在日常的mysql使用中,我们经常会看到SELECT COUNT(*)、SELECT COUNT(1)等查询语句,他们到底有什么区别呢?今天我就来总结下两者的区别。我们从COUNT()函数的含义说起:count(*) 统计满足查询条件的结果集的总行数(包含null)count(1) 统计满足查询条件的结果集的总行数(包含null)count(column) 如果列定义时允许为NULL,那...

2019-11-14 21:52:28 1306

转载 Synchronization and Object Locking

One of the major strengths of the Java programming language is its built-in support for multi-threaded programs. An object that is shared between multiple threads can be locked in order to synchronize...

2019-11-10 18:27:52 320

原创 JVM对象占用内存计算

大家都知道,jvm中对象实例存储在堆中,对象的引用存储在栈中,而对象的元数据(类型数据)存储在方法区。在我们进行内存优化的过程中经常需要了解每个对象占用的内存大小。接下来我将介绍对象占用内存大小的计算方式,首先从java对象模型说起。Java的对象模型java是面向对象的语言,每个对象都属于某个类。在HotSpot虚拟机中对象采用的是oop-klass模型。其实原理很简单:就是在方法区中生...

2019-11-05 22:31:34 1670

原创 占用较多堆外内存的区域

(1)Director Memory主要在nio中会使用,在内存不足时会抛出OOM或者OOM:Direct buffer memory。(2)线程堆栈为每个线程分配的栈空间,用于保存局部变量,执行程序代码。内存不足时可能抛出StackOverflowError或者OOM:unable to create new native thread(即没有足够空间建立新的线程)。(3)socket缓...

2019-10-19 16:41:35 428

原创 JVM中安全点safePoint有哪些?

安全点是jvm选来进行GC的线程中断点。线程在执行到安全点后询问GC标志位,若标志位标识将要进行GC,则程序主动中断挂起线程等待GC。安全点的选定基本上是根据"是否具有让程序长时间执行的特征"为标准进行选定的。目前会产生安全点的主要有:1.方法调用、2.循环跳转、3.异常跳转。...

2019-10-04 18:34:35 740

原创 JVM中GC Root对象有哪些?

众所周知,我们目前最常用的虚拟机hotspot使用可达性分析来进行垃圾回收,而可达性分析需要依赖GC Root。下面我就来可以作为GC Root的对象。(一)虚拟机栈中引用的对象虚拟机栈中的引用的对象可以作为GC Root。我们程序在虚拟机的栈中执行,每次函数调用调用都是一次入栈。在栈中包括局部变量表和操作数栈,局部变量表中的变量可能为引用类型(reference),他们引用的对象即可作为...

2019-10-04 17:21:47 12240 2

原创 使用final修饰局部变量???

为什么有些人使用final修饰局部变量

2019-09-28 17:56:12 3946 7

原创 重载与重写(overload and override)

在java编程中经常会遇到重载和重写,刚接触java的时候对这对概念比较懵比,也不能理解其中的区别,后来在逐渐的学习中更加深刻的理解了其中的原理。哎,说来还是基础知识学的不扎实,这些都是大学期间偷懒欠下的帐。(一)简单理解(我自己的理解方式)1.重载是在一个类中有多个名称一样的方法,需要根据参数来辨识运行时使用哪个方法。在java中同一个类的同名方法的重载仅依赖(1)参数类型、(2)参数个数...

2019-09-21 21:16:39 354 2

原创 动态代理

动态代理是一种字节码生成技术,用来实现代理模式以对目标类或方法进行增强。这里的动态是相对我们自己手动编写的代理类而言的。动态代理依靠jvm或各种字节码类库在程序编译期或运行期间自动生成代理类。这些字节码类库中有些是我们比较常见和熟悉的,例如CGlib、Aspectj,以及jdk自带的。下面列出了这个类库的一些特性。类库织入时机操作对象优点缺点AspectJ编译期、加载...

2019-09-15 19:44:01 248

原创 Class.forName和ClassLoader

(1)ClassLoader使用来加载类数据的(加载的方式由具体的加载器决定)。类加载器根据类的全限定名加载类的二进制字节流,然后将字节流转换成jvm方法区中的运行时数据结构,并在方法区生成一个代表该类的Class对象作为访问入口(单例的)。(2)Class.forName方法会首先获取调用对象的类加载器,并利用该加载器根据类的全限定名加载类数据,并根据boolean initialize字段决...

2019-09-15 16:42:50 247

翻译 What is PECS (Producer Extends Consumer Super)?

"PECS" is from the collection's point of view. If you areonlypulling items from a generic collection, it is a producer and you should useextends; if you areonlystuffing items in, it is a consumer...

2019-08-21 20:52:09 287

原创 java内存区域及静态常量池、运行时常量池介绍

java内存区域介绍我们先来介绍下虚拟机运行时数据区的结构:我们项目中的每一个线程在运行时,都会有拥有自己独立的栈数据和程序计数器。程序计数器可以看作字节码命令的指示器,记录了下个需要执行的字节码指令,栈数据主要分为本地方法栈和java虚拟机栈。java虚拟机栈就是用来处理我们程序中代码生成的字节码的。我们程序中的每个方法在执行时都会被分配给一个虚拟机栈帧,栈帧中包含局部变量表和操...

2019-08-03 20:23:51 1363

原创 java8中LocalDate、LocalTime、LocalDateTime介绍

很久以前java8中就推出了新的Time API,旨在解决旧版Date和Calendar的缺陷。讲道理真的挺好用的,不过由其他工具对新版time的兼容并不够完善,导致现在使用还不够普及。大家都还在用老的Date类,苦

2019-08-01 21:32:40 1099

原创 java装箱拆箱

所谓的拆箱装箱,其实就是一个简单的语法糖。我们以Integer为

2019-07-31 22:07:51 224

原创 Java程序编译运行过程

整体流程1.首先由源程序文件编译成class文件。注意这里的源程序并不仅限于java程序,其他语言如果能够编译成class文件,并且符合jvm规范也能够在jvm上运行。2.jvm将class文件拷贝到内存,解释成相应的机器语言运行。我们常用的hotspot虚拟机在运行时会挑选出一些热点代码(以函数为单位),将这些热点代码直接编译成机器码存储起来,下次执行的时候,就不需要jvm解释,而是直接...

2019-07-21 16:23:21 1034

原创 java中byte、short、char、boolean实际都是按照int处理的!

byte、char、short、boolean四种类型在汇编期或运行期间采取和int类型一样的存储方式,在计算时会先转换为int类型,后进行计算。所以两个short类型数据做算数运算,结果却为int类型。这主要是因为jvm的字节码为了简洁高效,设计时只使用一个字节,导致命令的数量有限,不能为所有类型设计指令,byte、char、short、boolean这四种类型都使用int的指令。...

2019-07-20 20:58:03 750

阿里新版java开发手册.pdf

阿里开发规范手册,记录了很多后端相关的规范知识,对刚刚参加工作的同学来说非常有用,有足于提高代码水平。

2020-04-04

数据链路层协议

2017-02-20

HDLC协议概述

2017-02-20

空空如也

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

TA关注的人

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