自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(136)
  • 资源 (1)
  • 收藏
  • 关注

原创 想理解Java的IO,不要从操作系统开始说起的都是耍流氓

Java网络IO涵盖的知识体系很广泛,本文将简单介绍Java网络IO的相关知识从操作系统开始为了保护操作系统的安全,会将内存分为用户空间和内核空间两个部分。如果用户想要操作内核空间的数据,则需要把数据从内核空间拷贝到用户空间。举个栗子,如果服务器收到了从客户端过来的请求,并且想要进行处理,那么需要经过这几个步骤:服务器的网络驱动接收到消息之后,向内核申请空间,并在收到完整的数据包(这个过程会产生延时,因为有可能是通过分组传送过来的)后,将其复制到内核空间; 数据从内核空间拷贝到用户空间;.

2022-09-18 18:03:43 324

转载 查看使用的网卡是否打满

1、查看Linux系统有几块网卡一般系统默认都有4个,无所谓了管它几个呢~[root@db25440 ~]# ifconfig -aeth0 Link encap:Ethernet HWaddr D4:BE:D9:AA:30:18 inet addr:10.255.254.40 Bcast:10.255.255.255 Mask:255.255.240.0 inet6 addr: fe80::d6be:d9ff:feaa:3018/64 S...

2021-03-04 10:45:17 1161 1

转载 InnoDB 对比 MyISAM

区别:1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;2. InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;3. InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按B+Tree组织的一个索引结构),必须要有主键,通过主键索引效率很高。但是..

2021-02-25 11:24:50 280

原创 7.对象

  我们知道redis所有的主要数据结构:比如简单动态字符串、双端链表、字典、压缩列表、整数集合、 跳表。Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象,列表对象、哈希对象、集合对象、有序集合对象。对象的类型及编码  Redis中的每个对象都是由一个redisObject结构表示typedef struct redisObject{ //类型 unsigned type:4; //编码 u

2021-01-13 11:10:36 133

原创 6.跳跃表

  跳跃表是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。  跳跃表支持平均O(logN)、最坏O(N)复杂度的节点查找,还可以通过顺序性操作来批量处理节点。跳跃表的实现  Redis的跳跃表由redis.h/zskiplistNode和redis.h/zskiplist两个结构定义,其中zskiplistNode结构用于表示跳跃表节点,而zskiplist结构则用于保存跳跃表节点的相关信息,比如节点的数量,以及指向表头节点和表尾节点的指针等等。zski

2021-01-09 11:27:28 185

原创 压缩列表

  压缩列表(ziplist)是列表键和哈希键的底层实现之一。当一个列表键只包含少量列表项,并且每个列表项要么就是小整数值,要么就是长度比较短的字符串,那么redis就会使用压缩列表来做列表键的底层实现。压缩列表的构成  压缩列表是Redis为了节约内存而开发的,由一系列特殊编码的连续内存组成的顺序型数据结构。zlbyteszltailzllenentry1entry2…entryNzlendzlbyteszltailzllenentry1zlby

2021-01-09 11:18:56 478

原创 简单动态字符串SDS

  Redis没有直接使用C语言传统的字符串表示(以空字符串结尾的字符数组,以下简称C字符串),而是构建了一种名为简单动态字符串的抽象类型,并将SDS用作redis的默认字符串表示。在redis里面,C字符串只会用在一些无需修改的地方,比如打印日志。SDS的定义  每个sds.h/sdshdr结构表示一个SDS值:struct sdshdr{ //记录buf数组中已使用字节的数量,等于sds所保存字符串的数量 int len; //记录buf数组中未使用字节的数量 in

2021-01-09 10:39:36 143

原创 字典

字典中的每个键都是独一无二的。结构typedef struct dictht{ dictEntry **table; unsigned long size; unsigned long sizemask = size -1; // 该hash表已有的节点数量 unsigned long used;} dictht;typedef struct dictEntry{ void *key; union{

2021-01-09 09:59:19 94

转载 Java非静态内部类

Java非静态内部类在java中内部类主要分为成员内部类(非静态内部类、静态内部类)、匿名内部类、局部内部类接下来我要说的是以下这种内部类,非静态内部类。首先了解非静态内部类的定义。非静态内部类:1.非静态内部类必须寄存在一个外部类对象里。因此,如果有一个非静态内部类对象那么一定存在对应的外部类对象。非静态内部类对象单独属于外部类的某个对象2.非静态内部类可以直接访问外部类的成员,但是外部类不能直接访问非静态内部类成员3.非静态内部类不能有静态方法、静态属性、静态初始化块4.外部类的静态

2020-11-26 11:15:22 378

转载 大佬问我: notify()会立刻释放锁么?

大佬问我: notify()会立刻释放锁么?​我的内心戏: 肯定会啊! 这么简单的问题?image聪明如我, 决定装小白, 回答: 不会?大佬: 很好, 小伙子基础不错!我:image大佬: 说说为什么我: ………………image于是, 有了这篇文章!问题的根本原来在于 “立刻”这个描述词!如果你和咸鱼君一样懵逼, 不妨往下看!技术大佬可以告辞了!!接下来, 我们深入的分析分析wait和notify...

2020-11-13 14:22:54 378

转载 《Scalable IO in Java》译文

Scalable IO in Java》 是java.util.concurrent包的作者,大师Doug Lea关于分析与构建可伸缩的高性能IO服务的一篇经典文章,在文章中Doug Lea通过各个角度,循序渐进的梳理了服务开发中的相关问题,以及在解决问题的过程中服务模型的演变与进化,文章中基于Reactor反应器模式的几种服务模型架构,也被Netty、Mina等大多数高性能IO服务框架所采用,因此阅读这篇文章有助于你更深入了解Netty、Mina等服务框架的编程思想与设计模式。下面是我对《Scalab

2020-11-13 09:55:12 261

转载 初识Netty原理(三)——解码和编码

在Netty底层读入的是ByteBuf二进制数据,在实际开发中,需要将它解码为Java的POJO对象,处理完业务后,需要将Java的POJO对象编码为ByteBuf二进制数据放进通道中进行传输。这里就需要使用到Netty的解码器和编码器。Decoder原理和使用原理Netty中的解码器都直接或间接地实现了入站处理适配器,所以在使用时,直接继承解码器就行,而不需要再去实现处理适配器。在继承解码器的时候需要重写decode方法(在父类中是个抽象方法),在decode方法里实现具体的解码过程。Net

2020-11-04 10:00:19 630

转载 FileOutputStream 和 FileInputStream

import java.io.*; public class fileStreamTest2 { public static void main(String[] args) throws IOException { File f = new File("a.txt"); FileOutputStream fop = new FileOutputStream(f); // 构建FileOutputStream对象,文件不存在会自动新建 .

2020-10-17 17:50:22 214

转载 JAVA学习脚印10:解惑java 中UTF-16与char

JAVA学习脚印10:解惑java 中UTF-16与charjava中的char、utf-16编码、代码点、代码单元等概念,做一个了解还是有必要的。1.基本概念1) Java的字符类型和字符串类型字符类型采用的是UTF-16编码方式对Unicode编码表进行表示。其中一个char类型固定2字节,为无符号数,表示范围为'\u0000'(0)~'\uffff'(65,535)。java中的String定义如下:public final class String imple...

2020-10-15 20:18:01 363

原创 Mybatis----Cache(缓存模块) 源码解析

一、Cache简介 MyBatis作为一个强大的持久层框架,缓存是其必不可少的功能。MyBatis中的缓存是分为两层结构的,分为一级缓存和二级缓存,但是本质上是相同的,他们使用的都是Cache接口的实现。二、Cache继承结构 接下来会逐个介绍每个类的作用和主要字段及实现方法三、Cache的实现类1、Cache接口 /** * @return 该实例的唯一标识符 */ String getId(); /** ...

2020-09-29 14:21:57 397

原创 Mybatis子查询 column={} 时sql异常

1.使用子查询时,当子查询的sql的 parameterType=int,association的 column={} 时会报异常Caused by: java.lang.NoSuchMethodException: java.lang.Integer.<init>()2.原因:是因为{}被解析为map,子查询语句会从parameterType中拿map中的key,导致解析异常...

2020-09-25 15:22:43 417

原创 openzipkin/brave初步了解

一、brave是什么? github链接:https://github.com/openzipkin/brave/tree/master/instrumentation brave是zipkin提供的链路跟踪的组件,支持服务间的各种调用的路径跟踪,支持htttp的同步异步调用跟踪,dubbo,kafka、rabbit等消息的链路跟踪: 二、HTTP、kafka的链路跟踪的实现原理 都是通过请求头或消息头的方式,...

2020-09-24 09:42:47 449

原创 类加载机制

一.类生命周期1.加载 读取二进制内容2.验证 验证class文件格式规范、语义分析、引用验证、字节码验证3.准备 分配内存、设置类static修饰的变量初始值4、解析 类、接口、字段、类方法解析5、初始化 为静态变量赋值;执行静态代码块6、使用 创建实例对象7、卸载二、类加载器1.Boostrap loader C/C++实现,无对应的java类:null。加载JRE_H...

2020-09-19 17:49:05 159

转载 JVM常用内存参数配置

一、 常用参数  -Xms  JVM启动时申请的初始Heap值,默认为操作系统物理内存的1/64但小于1G。默认当空余堆内存大于70%时,JVM会减小heap的大小到-Xms指定的大小,可通过-XX:MaxHeapFreeRation=来指定这个比列。Server端JVM最好将-Xms和-Xmx设为相同值,避免每次垃圾回收完成后JVM重新分配内存;开发测试机JVM可以保留默认值。(例如:-Xms4g)  -Xmx  JVM可申请的最大Heap值,默认值为物理内存的1/4但小于1G,...

2020-09-19 10:34:03 888

原创 java的常量池在堆中

public class StringPoolTest { public static void main(String[] args) { String str = "abc"; char[] arrays = {'a', 'b', 'c'}; String str2 = new String(arrays); str2 = str2.intern(); S...

2020-09-17 19:52:01 458 1

转载 构造HTTP请求Header实现“伪造来源IP”(重在原理)

转载自:http://zhangxugg-163-com.iteye.com/blog/1663687http://www.walkerjava.com/index.php?m=blog&f=view&id=101. 伪造原理在阅读本文前,大家要有一个概念,在实现正常的TCP/IP双方通信情况下,是无法伪造来源IP的,也就是说,在TCP/IP协议中,可以伪造数据包来源IP,但这会让发送出去的数据包有去无回,无法实现正常的通信。这就像我们给对方写信时,如果写...

2020-09-15 16:52:17 4520

原创 spring xml中bean的id和name的区别

1.bean的id会默认作为bean名称,name全部作为别名,如果没有id则取第一个name作为别名代码如下:org.springframework.beans.factory.xml.BeanDefinitionParserDelegate#parseBeanDefinitionElement(org.w3c.dom.Element, org.springframework.beans.factory.config.BeanDefinition) String id = el

2020-09-05 19:54:43 1127

原创 spring的ResourceLoader体系

1.spring中使用ResourceLoader来加载资源2.ResourcePatternResolver ResourcePatternResolver中的getResources()方法返回多个Resource资源,参数支持“classpath*”和通配符路径和文件名称。3.DefaultResourceLoader 当没有classpath*和通配符时,spring中使用的是DefaultResourceLoader来加载资源。4.AbstractA...

2020-09-04 20:36:33 835

原创 FactoryBean 创建过程

1.FactoryBean用途 FactoryBean是一个工厂bean,自定义工厂bean时需要继承FactoryBean类 FactoryBean代码如下 package org.springframework.beans.factory;import org.springframework.lang.Nullable;public interface FactoryBean<T> { @Nullable T g...

2020-08-29 18:15:38 494

原创 Ubuntu 修改系统时区(note:date显示的时间是正常的,也可能需要重新设置时区,尤其是当日志时间差了12个小时)

buntu linaro(Lubuntu) 修改系统时区 (Cubieboard CC-A80修改系统时区)dpkg-reconfigure tzdata

2020-07-22 17:06:47 588

转载 Java8获取参数名称

Java8获取参数名称前言在mybatis的源码学习中,知道了mybatis可以开始在Java8将参数名称作为映射名称,Java8一项新的特性——在class文件中保留参数名。通过反射获取参数名称Java8中反射包出现了新的方法,Method.getParameters(),可以获取Parameter数组。而以前只能使用Method.getParameterTypes()获取Class数组。import java.lang.reflect.Method;import java.lan

2020-07-09 16:01:06 951

转载 List ? super T和List ? extends T之间有什么区别

List<? extends T>和List<? super T>之间有什么区别?List<? extends T>表示类型的上界为T,即参数化的类型可能是T也可能是T的子类。<? extends T>被设计用来读数据的泛型,只能读取类型为T的元素。List<? super T>表示类型的下界为T,即参数化的类型可能是T也可能是T的父类型。<? super T>被设计用来写数据的泛型,只能写入T或T的子类型,不能用来读。...

2020-06-28 16:40:16 971

原创 为什么“super”关键字在泛型使用时不允许在类级别使用

如下的代码编译不通过ConstructorTest<T super CharSequence>在stackoverflow上的讨论:https://stackoverflow.com/questions/37411256/why-super-keyword-in-generics-is-not-allowed-at-class-level满意的回答是: 类型擦除后变为<Object>,Object又是所有类型的父类型,所有类型就都可以作为T,是没有意义...

2020-06-28 16:08:15 906

转载 java泛型中“”?“”和“”T“”有什么区别

T代表一种类型加在类上:class SuperClass<A>{}加在方法上:public<T>voidfromArrayToCollection(T[]a, Collection<T>c){}方法上的<T>代表括号里面要用到泛型参数,若类中传了泛型,此处可以不传,调用类型上面的泛型参数,前提是方法中使用的泛型与类中传来的泛型一致。class People<T>{publicvoidshow(Ta) {...

2020-06-28 14:59:31 578

转载 Java反射——Type接口详解

目录Type的简介Type的获得Type的分类1,Class2,ParameterizedType3,GenericArrayType4,WildcardType5,TypeVariableType的简介java.lang.reflect.Type接口及其相关接口用于描述java中用到的所有类型,是Java的反射中很重要的组成部分。在API文档中,Type接口的说明如下:Type 是 Java 编程语言中所有类型的公共高级接口。它们包括原始类型、参数化类型、数组

2020-06-26 15:34:32 564

转载 DOM中元素节点、属性节点、文本节点的理解

节点信息每个节点都拥有包含着关于节点某些信息的属性。这些属性是:nodeName(节点名称) nodeValue(节点值) nodeType(节点类型)nodeTypenodeType 属性可返回节点的类型。最重要的节点类型是:元素类型 节点类型 元素 1 属性 2 文本 3 注释 8 文档 9 在实际应用中,经常用到的就是元素节点、属性节点和文本节点了,下面我们通过小段代码进行讲解1:元素节点<HEAD&.

2020-06-22 20:46:53 563

原创 Eclipse中Debug调试的F5、F6、F7、F8的作用

F5:跳入方法F6:向下逐行调试F7:跳出方法F8:直接跳转到下一个断点,如果只有一个断点,则调到第二次执行该断点的地方

2020-06-22 20:10:17 2985

原创 XML解析器--参考mybatis技术内幕

在 MyBatis 中涉及多个 XML 配置文件,因此我们首先介绍 XML 解析的相关内容 。 XML解析常见的方式有三种 , 分别是: DOM ( Document Object Model )解析方式和 SAX ( Simple APIfor XML )解析方式,以及从 JDK6.0 版本开始, JDK 开始支持的 StAX ( Streaming API for XML)解析方式。在开始介绍 MyBatis 的 XML 解析功能之前,先介绍这几种常见的 XML 处理方式 。 ...

2020-06-20 17:21:43 160

原创 mybatis核心处理层

SQL执行 SQL语句的执行涉及多个组件,其中比较重要的是Executor、StatementHandler、ParameterHandler、ResultSetHandler。Executor主要负责维护一级缓存和二级缓存,并提供事务管理的相关操作,它会将数据库相关操作委托给StatementHandler完成。StatementHandler首先通过ParameterHandler完成SQL语句的实参绑定,然后通过java.sql.Statement对象执行SQL语句并得...

2020-06-20 12:23:41 284

原创 git将本地项目文件夹直接变为git远端仓库的项目

1.首先需要在远程git仓库创建项目2.通过命令 git init 可以把一个目录本地项目根目录变成git管理仓库3. 执行命令 git remote add originhttps://github.com/xxxxxxxxxxxxxxxxxxx.git 将本地仓库管理到远程仓库4.开始推送 git push -u origin master 这...

2020-04-16 18:01:53 2562

转载 Springboot项目的war包与jar包的目录结构分析

Spring Boot项目可以制作成jar包和war包,其目录结构是不一样的,具体的如下所示:1、war包目录结构分析WAR(Web Archivefile)网络应用程序文件,是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。WAR包标准目录结构:说明:1、index.jsp[可选]2、METAINF[MAVEN自动生成目录]3、WEB-INF[必含]①...

2020-03-16 15:22:53 1348

原创 InnoDB的gap lock

InnoDB在REPEATABLE-READ的隔离级别中消灭了幻读,在标准的隔离级别中,REPEATABLE-READ的隔离级别是允许幻读的,咋一看mysql的隔离级别更完善,但是实际上mysql之所以在REPEATABLE-READ隔离级别中消灭幻读是因为需要填历史版本的坑(为了确保statement模式replicate的主从一致性) 从gap lo...

2020-01-19 15:10:20 215

转载 mysql查看未提交的事务进程

查询 正在执行的事务:SELECT * FROM information_schema.INNODB_TRX查看正在锁的事务SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;查看等待锁的事务SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;有时候代码里运行异常会导致出现未提交的事务,快...

2020-01-19 11:29:17 1386

原创 mysql InnoDB 行锁的实现 -Oracle是对每行数据加锁实现

通过索引项加锁实现1.只有条件走索引才能实现行级锁 2.索引上有重复值,可能锁住多个记录 3.查询有多个索引可以走,可以对不同索引加锁 4.是否对索引加锁实际上取决于mysql的执行计划自增主键做条件更新,性能最好测试验证:1.创建t2表,在a上添加索引create table t2(a int,b int,key idx1(a));2.在t2表上插...

2020-01-19 10:56:15 272

转载 VMware虚拟机三种网络模式详解--桥接模式

由于Linux目前很热门,越来越多的人在学习Linux,但是买一台服务放家里来学习,实在是很浪费。那么如何解决这个问题?虚拟机软件是很好的选择,常用的虚拟机软件有VMware Workstations和VirtualBox等。在使用虚拟机软件的时候,很多初学者都会遇到很多问题,而VMware的网络连接问题是大家遇到最多问题之一。在学习交流群里面,几乎每天都会有同学问到这些问题,写这篇详解也是因为群...

2019-12-30 16:29:16 339

redis-trib.rb 只收两分

edis-trib.rb是redis官方推出的管理redis集群的工具,集成在redis的源码src目录下,是基于redis提供的集群命令封装成简单、便捷、实用的操作工具。redis-trib.rb是redis作者用ruby完成的

2018-07-15

空空如也

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

TA关注的人

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