自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

剁椒咸鱼

每一个坚持的背后,都有一个值得敬佩的灵魂。

  • 博客(31)
  • 收藏
  • 关注

原创 Netty - Buffer类学习

Channel是指一个通道,类似于输入输出流,Buffer是缓冲区,与文件读取操作的Buffer类似。那么以读取一个test.txt文件为例,有以下几个步骤:获取当前文件的输入流,便于读取文件内容,此处是获取当前文件输入流的channel。创建Buffer,用于存储读取的数据,此处是给Buffer分配空间,之后通过read()将数据写到Buffer中。

2023-06-02 15:31:26 488 1

原创 Netty学习笔记

1.1 Netty是什么?1.2 Netty解决什么问题?1.3 xx二、Netty学习2.1 Netty学习路线2.2 Netty整体架构

2023-04-30 22:12:38 183

原创 MESI状态转换-在不同操作,不同状态之间的转换

MESI状态转换

2022-08-18 14:51:31 409

原创 JVM - Java对象创建和JVM

1.Java对象结构2.Java对象创建过程存储位置:JVM堆内存结构:(以下是按64位JVM)对象头包含markword和clazz point两部分,其分别包含:markword:clazz point:在开启和关闭指针压缩时(-XX:+UseCompressedOops)对象体作用是保存对象的属性,同上,在开启和关闭指针压缩时,填充对齐当对象是数组类型时,会有额外的4字节记录数组长度大小,因此Java数组可以申请的最大长度为:2^32....

2022-07-06 14:41:28 159

原创 JVM - 类的加载过程

加载 -- 链接 -- 初始化 一、加载完成的事情:二、链接完成的事情:验证 -- 准备 -- 解析三、初始化完成的事情:

2022-07-06 14:38:39 444

原创 Collections.sort(List<T>, Comparator<T>)解读 以及Comparator 和 Comparable 比较

Collections有两种sort(),底层均是Arrays.sort(arr,c)Collections.sort(List list, Comparator c)–底层是Arrays.sort(arr,c),自定义的ret = comparable(e1,e2),当ret大于0,表示e1 > e2,也即是arr[j - 1] > arr[j],此时需要swap,(数组长度小于7 – 插入排序)。2.Collections.sort(List list)–默认Arrays

2022-05-16 18:13:37 707

原创 JVM - intern()

字面量 引用 字符串常量池 intern() Strings.intern() 返回的是字符串s在字符串常量池中的引用。首先判断字符串常量池中是否有 “sss” 如果有则返回其引用地址如果没有则创建一个然后返回 sss 的引用地址

2022-05-07 09:08:30 234

原创 JVM - 怎么判断对象死亡?哪些可以作为 root 呢?

1. 怎么判断对象死亡?根可达算法引用计数法2.哪些对象可以作为 GC Roots 呢?虚拟机栈(栈帧中的本地变量表)中引用的对象本地方法栈(Native 方法)中引用的对象方法区中类静态属性引用的对象方法区中常量引用的对象所有被同步锁持有的对象...

2022-05-06 22:33:40 417

原创 JVM - 内存分配与回收机制

内存分配与回收机制1、优先在Eden区分配对象的分配是优先在Eden区上分配,当Eden区对象分配满了,会执行 Minor gc2、大对象直接进入老年代-XX:PretenureSizeThreshold 参数只对Serial和ParNew两款新生代收集器有效,是说当新建的对象内存大于此设置大小,就会直接将大对象分配到老年代中。3、长期存活的对象将进入老年代-XX:MaxTenuringThreshold=xx 默认是15Eden区对象经过minor gc 回收后存活的对象会转移到 surv

2022-05-06 22:29:17 934

原创 JVM-对象内存分配方式--两种方式

对象内存分配的两种方法指针碰撞空闲列表为对象分配空间的任务等同于把一块确定大小的内存从Java堆中划分出来。与垃圾回收机制有关:对于MS的垃圾回收器,是使用空闲列表进行分配;对于MC的垃圾回收器,是使用指针碰撞进行分配。(1)指针碰撞(Serial、ParNew等带Compact过程的收集器)假设Java堆中内存是绝对规整的,所有用过的内存都放在一边,空闲的内存放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那个指针向空闲空间那边挪动一段与对象大小相等的距离,这种

2022-05-06 22:24:31 1147

原创 JDK动态代理 -- InvocationHandle以及invoke(xxx)调用时机解析

JDK动态代理:实现 InvocationHandler 的invoke(Object proxyObj, Method mothod, Object[] args);$Proxy0:通过Proxy.newProxyInstance()生成的代理类,生成方法就是在仿照 原实现类 实现其接口,再生成一个新的类去实现接口。$Proxy0代理类:$Proxy0 extends Proxy implements 目标类接口静态代码块:通过反射机制,获取到目标接口的方法 m3。

2022-03-28 10:37:59 1889

原创 CGLIB动态代理 -- MethodInterceptor、整体过程分析

使用ASM字节码生成框架,生成目标类的子类作为代理类,其中有MethodInterceptor 类型的成员变量,在静态方法中,有通过反射获取目标类方法,并通过MethodProxy.create(xxx)创建代理方法,如下下图:Class var1 = Class.forName("com.example.springsourcestudy.proxy.MessageServer")Class var0 =Class.forName("com.example.springsour..

2022-03-28 10:29:49 1420

原创 Java多态 -- 实现类与子类

Java多态出现在子类继承父类、接口实现场景中,也即引用变量可以是1、普通类2、抽象类3、接口而指向的对象即是 子类、子类、实现类对象。class Root { int book = 6; public void test() { System.out.println("root..."); }}public class Leaf extends Root { int book = 123; @Override public v

2022-01-23 11:42:41 826

原创 Java包装类 Integer自动装箱后使用 == 比较

Integer i = 128;Integer j = 128; System.out.println(i == j);上面程序的输出结果为:false public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) //IntegerCache.low = -128, .

2022-01-03 18:52:19 126

原创 Java中8种基本数据类型

编程的本质就是对内存中数据的访问与修改。变量就相当于一个容器,对应着一块内存,用于存储和读取。Java中数据类型可分为两类,基础数据类型和引用数据类型。基础数据类型又可分为两类,分别是数值类型和布尔类型;数值类型又分为整数类型和浮点类型。整数类型包括byte、short、int、long、char.浮点类型包括float和double类型。byte:在内存中占8位,表数范围是 -128(2^7) - 127(2 ^ 7 - 1)short:在内存中占16位,表数范围是 -32768 - 3276.

2022-01-02 16:37:55 398 1

原创 Java基础 -- 主数据类型和对象赋值

两种情况:主数据类型和对象赋值a. 对主数据类型的赋值是非常直接的。由于主类型容纳了实际的值,而且并非指向一个对象的句柄,所以在为其赋值的时候,可将来自一个地方的内容复制到另一个地方。例如,假设为主类型使用“A=B”,那么 B 处的内容就复制到A。若接着又修改了 A,那么 B 根本不会受这种修改的影响。String a = "java";String b;b = a;a = "c++";输出a = c++ b = javab. 但在为对象“赋值”的时候,情况却发生了变化。对一个对象进行操作时

2021-12-22 22:02:25 802

原创 不同版本MySQL同时存在的方法

针对不同项目,不同MySQL版本的问题。在一台主机配置两个版本的MySQL.主要就是在电脑上新建服务,打开一个新的端口。1、下载两个版本的数据库2、现在默认是使用的mysql 5.6版本;首先更改mysql的配置文件–my.ini,如果没有此文件,新建一个将配置文件的 port 更改为除了 3306 以外的端口号(因为默认的MySQL5.6使用的是 3306 端口)[mysqld]port = 3307basedir=D:\mysql-8.0.21-winx64datadir=D:\m

2021-12-22 21:52:38 2068

原创 Java求浮点型时间数据差距

问题描述:求两个精度到纳秒的时间间隔时,在将时间转换成时间戳后,因为时间戳单位是毫秒,所以并不能显示纳秒的时间戳,此时需要加上纳秒。我们通过转换可以得到加上纳秒的时间戳,如:1970-01-01 16:54:09.488401366 == 32049488.401366–>32049000 + 488.401366因为计算机内是以二进制存储数据,所以在进行浮点数加减时,并不能准确计算,因此我们需要用到 java.math.BigDecimal中的方法进行计算://transform2Mill

2021-12-22 09:38:11 469

原创 依赖冲突错误:Exception encountered during context initialization - cancelling refresh attempt:

出现错误:Exception encountered during context initialization - cancelling refresh attempt:是pom.xml的依赖有冲突;仔细查看 ‘ : ’后面的错误包

2021-09-19 15:25:20 403 1

原创 BeanPostProcessor 原理及源码分析

BeanPostProcessor:bean后置处理器,bean创建对象初始化前后进行拦截工作 * 1)、BeanFactoryPostProfessor:beanFactory后置处理器 * 在BeanFactory标准初始化之后调用,来定制和修改BeanFactory的内容 * 所有的bean定义已经保存加载到beanFactory,但是bean的实例还未创建 * 在实例化bean时,是先往容器中添加bean定义,但是都未实例化 * 1.创建i o c容器 * 2

2021-09-17 17:28:21 259

原创 声明式事务

* 声明式事务: * * 环境搭建: * 1、导入相关依赖 * 数据源、数据库驱动、Spring-jdbc模块 * 2.配置数据源、JdbcTemplate(Spring提供的简化数据库操作的工具)操作数据 * 3.给方法加上@Transational 表示当前方法是事务方法;作用是当方法内异常时,进行回滚; * 4. @EnableTransactionManagement 开启基于注解的事务管理功能 * 5.配置事务管理器来控制事务; * 事务管理器加在容器中; * *

2021-09-17 17:26:59 76

原创 Spring扩展原理:BeanPostProcessor:bean后置处理器,bean创建对象初始化前后进行拦截工作1)、BeanFactoryPostProfessor

* 扩展原理: * BeanPostProcessor:bean后置处理器,bean创建对象初始化前后进行拦截工作 * 1)、BeanFactoryPostProfessor:beanFactory后置处理器 * 在BeanFactory标准初始化之后调用,来定制和修改BeanFactory的内容 * 所有的bean定义已经保存加载到beanFactory,但是bean的实例还未创建 * 在实例化bean时,是先往容器中添加bean定义,但是都未实例化 * 1.创建i

2021-09-17 17:25:38 491

原创 基于注解的Spring-Aop原理

在容器创建完成后,会进行刷新容器(refresh()),在容器刷新时会有一步是将Bean定义保存起来//xxxRegistrar一般是在其中手动注册一些组件,再通过@import导入到容器中;@EnableAspectJAutoProxy/** * @Import(AspectJAutoProxyRegistrar.class) * 1.(beanName)internalAutoProxyCreator = AnnotationAwareAspectJAutoProxyCreator(组件类型)

2021-09-17 17:22:12 106

原创 ThymeLeaf错误:An error happened during template parsing (template: “class path resource [templates/tes

使用Thymeleaf时出现的问题:An error happened during template parsing (template: "class path resource [templates/test.html]")解决:1、要在页面展示VO时,与实体类字段与数据库没有对应,或者getter setter 没有生效;即@Data注解没有生效。...

2021-06-22 22:22:56 1907

原创 Eclipse部分方法无法查看源码问题,出现Note:This element has no attached source and the Javadoc could not be found...

Note:This element has no attached source and the Javadoc could not be found...由于部分jar包内不包含Javadoc文档,故需要手动给不能查看源码的jar包添加Javadoc;操作如下:Project->Properties->Java Build Path查看需要Javadoc文件的jar包。eg: commons-beanutils-1.72.去浏览器搜索commons-beanutils-1.7的官

2021-05-11 20:52:33 632

原创 Column ‘XXX‘ not found完美解决

Column ‘XXX’ not found在论坛看了好几种情况此情况以及解决方法SQL语句中出现别名在数据库建表时,标明的编码格式改成UTF-8,完美解决!

2021-04-13 21:39:20 13038

原创 information_schema信息

information_schema这个数据库存放着其他数据库的信息,包括表名,字段名等.在常规注入过程中利用information_schema就是想要获取到其中的信息.eg:information_schema.tables/columns.在MySQL中,sys.schema_auto_increment_columns #该视图的作用是对表自增ID进行监控就是说,某张表如果存在自增ID,我们就可以通过该视图获取数据库的该表名信息.常用的语句:1.information_schema.tabl

2020-10-19 16:42:39 172

原创 limit后的注入点(Extractvalue语句用来返回报错信息)

首先,看一下标准的select语句:SELECT [ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr [, select_expr ..

2020-10-10 20:51:18 426 1

原创 SqlMap基础

SQLMap的参数及使用方法:注入类型:

2020-10-10 18:06:34 85

原创 SQL注入之宽字节注入

SQL注入之 宽字节注入https://blog.csdn.net/helloc0de/article/details/76180190

2020-10-08 20:19:49 462

原创 XSS基础题

XSS基础用法:(脚本关14:当这道题,先看下面有guest的文本框,当点击提交查询时会更新下面框的内容所以可以从下面的文本框下手攻击。先查看这个文本框源代码看到时在input的value中,于是闭合input,输入 alert'onmouseover=alert(HackingLab)>,再看下源码:成功闭合!鼠标移到input框时,alert HackingLab....

2020-10-08 13:15:19 274

空空如也

空空如也

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

TA关注的人

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