- 博客(136)
- 资源 (1)
- 收藏
- 关注
原创 想理解Java的IO,不要从操作系统开始说起的都是耍流氓
Java网络IO涵盖的知识体系很广泛,本文将简单介绍Java网络IO的相关知识从操作系统开始为了保护操作系统的安全,会将内存分为用户空间和内核空间两个部分。如果用户想要操作内核空间的数据,则需要把数据从内核空间拷贝到用户空间。举个栗子,如果服务器收到了从客户端过来的请求,并且想要进行处理,那么需要经过这几个步骤:服务器的网络驱动接收到消息之后,向内核申请空间,并在收到完整的数据包(这个过程会产生延时,因为有可能是通过分组传送过来的)后,将其复制到内核空间; 数据从内核空间拷贝到用户空间;.
2022-09-18 18:03:43
370
转载 查看使用的网卡是否打满
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
1234
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
321
原创 7.对象
我们知道redis所有的主要数据结构:比如简单动态字符串、双端链表、字典、压缩列表、整数集合、 跳表。Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象,列表对象、哈希对象、集合对象、有序集合对象。对象的类型及编码 Redis中的每个对象都是由一个redisObject结构表示typedef struct redisObject{ //类型 unsigned type:4; //编码 u
2021-01-13 11:10:36
180
原创 6.跳跃表
跳跃表是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。 跳跃表支持平均O(logN)、最坏O(N)复杂度的节点查找,还可以通过顺序性操作来批量处理节点。跳跃表的实现 Redis的跳跃表由redis.h/zskiplistNode和redis.h/zskiplist两个结构定义,其中zskiplistNode结构用于表示跳跃表节点,而zskiplist结构则用于保存跳跃表节点的相关信息,比如节点的数量,以及指向表头节点和表尾节点的指针等等。zski
2021-01-09 11:27:28
213
原创 压缩列表
压缩列表(ziplist)是列表键和哈希键的底层实现之一。当一个列表键只包含少量列表项,并且每个列表项要么就是小整数值,要么就是长度比较短的字符串,那么redis就会使用压缩列表来做列表键的底层实现。压缩列表的构成 压缩列表是Redis为了节约内存而开发的,由一系列特殊编码的连续内存组成的顺序型数据结构。zlbyteszltailzllenentry1entry2…entryNzlendzlbyteszltailzllenentry1zlby
2021-01-09 11:18:56
522
原创 简单动态字符串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
170
原创 字典
字典中的每个键都是独一无二的。结构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
121
转载 Java非静态内部类
Java非静态内部类在java中内部类主要分为成员内部类(非静态内部类、静态内部类)、匿名内部类、局部内部类接下来我要说的是以下这种内部类,非静态内部类。首先了解非静态内部类的定义。非静态内部类:1.非静态内部类必须寄存在一个外部类对象里。因此,如果有一个非静态内部类对象那么一定存在对应的外部类对象。非静态内部类对象单独属于外部类的某个对象2.非静态内部类可以直接访问外部类的成员,但是外部类不能直接访问非静态内部类成员3.非静态内部类不能有静态方法、静态属性、静态初始化块4.外部类的静态
2020-11-26 11:15:22
406
转载 大佬问我: notify()会立刻释放锁么?
大佬问我: notify()会立刻释放锁么?我的内心戏: 肯定会啊! 这么简单的问题?image聪明如我, 决定装小白, 回答: 不会?大佬: 很好, 小伙子基础不错!我:image大佬: 说说为什么我: ………………image于是, 有了这篇文章!问题的根本原来在于 “立刻”这个描述词!如果你和咸鱼君一样懵逼, 不妨往下看!技术大佬可以告辞了!!接下来, 我们深入的分析分析wait和notify...
2020-11-13 14:22:54
403
转载 《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
286
转载 初识Netty原理(三)——解码和编码
在Netty底层读入的是ByteBuf二进制数据,在实际开发中,需要将它解码为Java的POJO对象,处理完业务后,需要将Java的POJO对象编码为ByteBuf二进制数据放进通道中进行传输。这里就需要使用到Netty的解码器和编码器。Decoder原理和使用原理Netty中的解码器都直接或间接地实现了入站处理适配器,所以在使用时,直接继承解码器就行,而不需要再去实现处理适配器。在继承解码器的时候需要重写decode方法(在父类中是个抽象方法),在decode方法里实现具体的解码过程。Net
2020-11-04 10:00:19
696
转载 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
245
转载 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
401
原创 Mybatis----Cache(缓存模块) 源码解析
一、Cache简介 MyBatis作为一个强大的持久层框架,缓存是其必不可少的功能。MyBatis中的缓存是分为两层结构的,分为一级缓存和二级缓存,但是本质上是相同的,他们使用的都是Cache接口的实现。二、Cache继承结构 接下来会逐个介绍每个类的作用和主要字段及实现方法三、Cache的实现类1、Cache接口 /** * @return 该实例的唯一标识符 */ String getId(); /** ...
2020-09-29 14:21:57
455
原创 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
447
原创 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
510
原创 类加载机制
一.类生命周期1.加载 读取二进制内容2.验证 验证class文件格式规范、语义分析、引用验证、字节码验证3.准备 分配内存、设置类static修饰的变量初始值4、解析 类、接口、字段、类方法解析5、初始化 为静态变量赋值;执行静态代码块6、使用 创建实例对象7、卸载二、类加载器1.Boostrap loader C/C++实现,无对应的java类:null。加载JRE_H...
2020-09-19 17:49:05
194
转载 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
941
原创 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
489
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
4674
原创 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
1170
原创 spring的ResourceLoader体系
1.spring中使用ResourceLoader来加载资源2.ResourcePatternResolver ResourcePatternResolver中的getResources()方法返回多个Resource资源,参数支持“classpath*”和通配符路径和文件名称。3.DefaultResourceLoader 当没有classpath*和通配符时,spring中使用的是DefaultResourceLoader来加载资源。4.AbstractA...
2020-09-04 20:36:33
867
原创 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
525
原创 Ubuntu 修改系统时区(note:date显示的时间是正常的,也可能需要重新设置时区,尤其是当日志时间差了12个小时)
buntu linaro(Lubuntu) 修改系统时区 (Cubieboard CC-A80修改系统时区)dpkg-reconfigure tzdata
2020-07-22 17:06:47
622
转载 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
1000
转载 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
1000
原创 为什么“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
951
转载 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
613
转载 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
607
转载 DOM中元素节点、属性节点、文本节点的理解
节点信息每个节点都拥有包含着关于节点某些信息的属性。这些属性是:nodeName(节点名称) nodeValue(节点值) nodeType(节点类型)nodeTypenodeType 属性可返回节点的类型。最重要的节点类型是:元素类型 节点类型 元素 1 属性 2 文本 3 注释 8 文档 9 在实际应用中,经常用到的就是元素节点、属性节点和文本节点了,下面我们通过小段代码进行讲解1:元素节点<HEAD&.
2020-06-22 20:46:53
611
原创 Eclipse中Debug调试的F5、F6、F7、F8的作用
F5:跳入方法F6:向下逐行调试F7:跳出方法F8:直接跳转到下一个断点,如果只有一个断点,则调到第二次执行该断点的地方
2020-06-22 20:10:17
3057
原创 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
179
原创 mybatis核心处理层
SQL执行 SQL语句的执行涉及多个组件,其中比较重要的是Executor、StatementHandler、ParameterHandler、ResultSetHandler。Executor主要负责维护一级缓存和二级缓存,并提供事务管理的相关操作,它会将数据库相关操作委托给StatementHandler完成。StatementHandler首先通过ParameterHandler完成SQL语句的实参绑定,然后通过java.sql.Statement对象执行SQL语句并得...
2020-06-20 12:23:41
316
原创 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
2654
转载 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
1392
原创 InnoDB的gap lock
InnoDB在REPEATABLE-READ的隔离级别中消灭了幻读,在标准的隔离级别中,REPEATABLE-READ的隔离级别是允许幻读的,咋一看mysql的隔离级别更完善,但是实际上mysql之所以在REPEATABLE-READ隔离级别中消灭幻读是因为需要填历史版本的坑(为了确保statement模式replicate的主从一致性) 从gap lo...
2020-01-19 15:10:20
238
转载 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
1453
原创 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
292
转载 VMware虚拟机三种网络模式详解--桥接模式
由于Linux目前很热门,越来越多的人在学习Linux,但是买一台服务放家里来学习,实在是很浪费。那么如何解决这个问题?虚拟机软件是很好的选择,常用的虚拟机软件有VMware Workstations和VirtualBox等。在使用虚拟机软件的时候,很多初学者都会遇到很多问题,而VMware的网络连接问题是大家遇到最多问题之一。在学习交流群里面,几乎每天都会有同学问到这些问题,写这篇详解也是因为群...
2019-12-30 16:29:16
374
redis-trib.rb 只收两分
2018-07-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人