自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

张维鹏的博客

芝兰生于空谷,不以无人而不芳!君子修身养道,不以穷困而改志

转载 Java基础篇:反射机制详解

一、什么是反射: 反射是Java的特征之一,是一种间接操作目标对象的机制,核心是JVM在运行的时候才动态加载类,并且对于任意一个类,都能够知道这个类的所有属性和方法,调用方法/访问属性,不需要提前在编译期知道运行的对象是谁,他允许运行中的Java程序获取类的信息,并且可以操作类或对象内部属性。程序中对象的类型一般都是在编译期就确定下来的,而当我们的程序在运行时,可能需要动态的加载一些...

2019-12-03 23:50:42 37291 20

原创 Wireshark介绍 与 过滤器表达式语法

目录:一、WireShark界面说明:1、开始捕捉界面:2、捕捉结果界面:3、着色规则:二、捕捉过滤器:1、捕捉过滤器表达式:2、捕捉过滤器语法:三、显示过滤器:1、基本过滤表达式:2、复合过滤表达示:3、常见用显示过滤需求及其对应表达式:WireShark安装,安装非常简单,处理安装路径自定义之外,其他都直接点下一步。一、WireShark界面...

2019-10-28 03:48:44 408

原创 HttpDNS介绍

一、什么HttpDNS:HttpDNS是使用HTTP协议向DNS服务器的80端口进行请求,代替传统的DNS协议向DNS服务器的53端口进行请求。也就是使用Http协议去进行dns解析请求,将服务器返回的解析结果(域名对应的服务器IP),直接向该IP发起对应的API服务请求,代替使用域名。二、为什么要用HttpDNS:那么为什么要使用HttpDNS呢?主要原因有四点:1、Loc...

2019-10-15 02:52:50 1471

转载 RSA加解密算法的Java实现

main()方法:public static void main(String[] args) throws Exception { // TODO Auto-generated method stub HashMap<String, Object> map = RSAUtils.getKeys(); //生成公钥和私钥 RSAPublicKey publicK...

2019-10-08 04:44:08 353

转载 Java使用RSA加密解密签名及校验

RSA加密解密类:import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.security.InvalidKeyException;im...

2019-10-08 04:32:31 348

原创 RSA加密算法原理

目录:一、什么是RSA加密算法:二、RSA加密过程:三、RAS解密过程:四、生成密钥对:五、实践:六、Java进行 RSA 加解密时不得不考虑到的那些事儿:一、什么是RSA加密算法:RSA加密算法是一种非对称加密算法,所谓非对称,就是指该算法加密和解密使用不同的密钥,即使用加密密钥进行加密、解密密钥进行解密。在RAS算法中,加密密钥(即公开密钥)PK是公开信息,而解...

2019-10-08 03:25:46 2188

原创 Java实现AES加密与解密(秘钥)

package com.company.example; import org.slf4j.Logger;import org.slf4j.LoggerFactory;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder; import javax.crypto.Cipher;import javax.crypto...

2019-10-07 23:31:21 701

原创 AES加密算法原理

目录:一、AES简介:二、AES的基本结构:三、AES加解密具体流程:3.1 字节代换:3.2 行移位:3.3 列混合:3.4 轮密钥加:3.5 密钥扩展:一、AES简介:1、加密流程:高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是...

2019-10-07 23:15:45 1544

原创 3DES加密算法原理

一、3DES加密算法简析:3DES,也称为 3DESede 或 TripleDES,是三重数据加密算法,相当于是对每个数据库应用三次DES的对称加密算法。由于DES密码长度容易被暴力破解,所以3DES算法通过对DES算法进行改进,增加DES的密钥长度来避免类似的攻击,针对每个数据块进行三次DES加密;因此,3DES加密算法并非什么新的加密算法,是DES的一个更安全的变形,它以DES为...

2019-10-07 21:05:26 2780 3

原创 DES加密算法原理

目录:一、DES算法:二、主要流程:1、初始置换:2、加密处理--16轮迭代过程:2.1 秘钥置换--子密钥生成:2.2扩展置换E(E位选择表)2.3 S-盒代替(功能表S盒)2.4P-盒置换:3、逆置换:4、DES解密:一、DES算法:1、DES算法简介:DES算法为密码体制中的对称密码体制。需要加密的明文按64位进行分组,加密...

2019-10-07 17:30:34 1039

原创 对称加密算法之分组加密的六种工作模式(ECB、CBC、PCBC、CFB、OFB、CTR)

加密一般分为对称加密(Symmetric Key Encryption)和非对称加密(Asymmetric Key Encryption)。对称加密又分为分组加密和序列密码。(1)分组加密,也叫块加密(block cyphers),一次加密明文中的一个块。是将明文按一定的位长分组,明文组经过加密运算得到密文组,密文组经过解密运算(加密运算的逆运算),还原成明文组。具有代表性的块加密算法有...

2019-10-07 17:27:56 1842

转载 Fiddler抓包原理解析

一、Fiddler简介:Fiddler是一款免费且功能强大的数据包抓取软件。是位于客户端和服务器端之间的http(s)代理,它通过代理的方式获取程序http通讯的数据,可以用其检测网页和服务器的交互情况,记录所有客户端和服务器间的http请求,针对特定的http(s)请求,分析网络传输的数据,支持监视,还可以设置断点、修改请求的数据和服务器返回的数据。Fiddler包含了一个强大的基于事件脚本...

2019-08-20 21:23:11 1085

转载 Centos7下 Redis的安装、配置开机自启动、开放远程连接

一、Centos7下 Redis的安装:1、下载安装包:wget http://download.redis.io/releases/redis-4.0.2.tar.gz2、解压安装包并安装:tar xzf redis-4.0.2.tar.gzcd redis-4.0.2makemake installRedis没有其他外部依赖,安装过程很简单。编译后在Re...

2019-05-15 17:27:15 784

转载 VMware Workstation网络连接的三种方式原理详解 与 配置过程图解

VMware workstations为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。打开vmware虚拟机,我们可以在选项栏的“编辑”下的“虚拟网络编辑器”中看到VMnet0(桥接模式)、VMnet1(仅主机模式)、VMnet8(NAT模式):VMnet0表示的是用于桥接模式下的虚拟交换机;V...

2019-05-15 10:50:48 1040 1

转载 RabbitMQ(七):常用方法说明 与 学习小结

RabbitMQ(一):Hello World程序RabbitMQ(二):Work Queues、循环分发、消息确认、持久化、公平分发RabbitMQ(三):Exchange交换器--fanoutRabbitMQ(四):Exchange交换器--directRabbitMQ(五):Exchange交换器--topicRabbitMQ(六):回调队列callback queue、...

2019-04-30 09:54:46 505

转载 RabbitMQ(六):回调队列callback queue、关联标识correlation id、实现简单的RPC系统

博客翻译自:RabbitMQ Tutorials Java版RabbitMQ(一):Hello World程序RabbitMQ(二):Work Queues、循环分发、消息确认、持久化、公平分发RabbitMQ(三):Exchange交换器--fanoutRabbitMQ(四):Exchange交换器--directRabbitMQ(五):Exchange交换器--topic...

2019-04-29 20:22:58 2485

转载 RabbitMQ(五):Exchange交换器--topic

内容翻译自:RabbitMQ Tutorials Java版RabbitMQ(一):Hello World程序RabbitMQ(二):Work Queues、循环分发、消息确认、持久化、公平分发RabbitMQ(三):Exchange交换器--fanoutRabbitMQ(四):Exchange交换器--directRabbitMQ(五):Exchange交换器--topic...

2019-04-29 20:00:31 310

转载 RabbitMQ(四):Exchange交换器--direct

内容翻译自:RabbitMQ Tutorials Java版RabbitMQ(一):Hello World程序RabbitMQ(二):Work Queues、循环分发、消息确认、持久化、公平分发RabbitMQ(三):Exchange交换器--fanoutRabbitMQ(四):Exchange交换器--directRabbitMQ(五):Exchange交换器--topic...

2019-04-29 19:51:10 295

转载 RabbitMQ(三):Exchange交换器--fanout

内容翻译自:RabbitMQ Tutorials Java版RabbitMQ(一):Hello World程序RabbitMQ(二):Work Queues、循环分发、消息确认、持久化、公平分发RabbitMQ(三):Exchange交换器--fanoutRabbitMQ(四):Exchange交换器--directRabbitMQ(五):Exchange交换器--topic...

2019-04-29 19:33:58 417

转载 RabbitMQ(二):Work Queues、循环分发、消息确认、持久化、公平分发

内容翻译自:RabbitMQ Tutorials Java版RabbitMQ(一):Hello World程序RabbitMQ(二):Work Queues、循环分发、消息确认、持久化、公平分发RabbitMQ(三):Exchange交换器--fanoutRabbitMQ(四):Exchange交换器--directRabbitMQ(五):Exchange交换器--topic...

2019-04-29 19:16:50 812

转载 RabbitMQ(一):Hello World程序

内容翻译自:RabbitMQ Tutorials Java版RabbitMQ(一):Hello World程序RabbitMQ(二):Work Queues、循环分发、消息确认、持久化、公平分发RabbitMQ(三):Exchange交换器--fanoutRabbitMQ(四):Exchange交换器--directRabbitMQ(五):Exchange交换器--topic...

2019-04-29 18:48:50 782

转载 Spring中bean的注入方式

平常的Java开发中,程序员在某个类中需要依赖其它类的方法。通常是new一个依赖类的实例再调用该实例的方法,这种开发存在的问题是new的类实例不好统一管理。Spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过Spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。依赖注入的另一种说法是”控制反转”。通俗的理解是:平常我们new一个实例,这个实例的控制权是...

2019-04-15 10:51:35 19495 2

原创 Java虚拟机:深入详细分析Java ClassLoader原理与源码

一、什么是ClassLoader? ClassLoader就是类加载器,当我们写好一个Java程序之后,都是由若干个.class文件组成的一个完整的Java应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都被封装在不同的class文件当中,所以经常要从这个class文件中要调用另外一个class文件中的方法,如果另外一个文件不存在的,...

2019-04-13 19:43:50 332

转载 Java虚拟机:Java中堆和栈的详细区别

一、Java把内存划分成两种:一种是栈内存,一种是堆内存。在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。堆内存用来存放由new创建的对象和数组。在堆中分配的内存,由Java虚拟机的自动垃圾回...

2019-04-12 13:02:15 903 2

转载 Java虚拟机:JVM架构与垃圾回收

一、JVM架构图分析:JVM被分为三个主要的子系统:(1)类加载器子系统(2)运行时数据区(3)执行引擎。1. 类加载器子系统Java的动态类加载功能是由类加载器子系统处理。当它在运行时(不是编译时)首次引用一个类时,它加载、链接并初始化该类文件。1.1加载:类由此组件加载。启动类加载器(BootStrap class Loader)、扩展类加载器(Exten...

2019-04-11 17:32:14 409

转载 Tomcat系统架构

一、Tomcat顶层架构先上一张Tomcat的顶层结构图(图A),如下:Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个Server可以包含至少一个Service,用于具体提供服务。Service主要包含两个部分:Connector和Container。从上图中可以看出 Tomcat 的心脏就是这两个组件,他们的作用如下:1、Connecto...

2019-03-30 23:38:37 428

转载 集群/分布式环境下5种session处理策略

前言在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理。如果不做任何处理的话,用户将出现频繁登录的现象,比如集群中存在A、B两台服务器,用户在第一次访问网站时,Nginx通过其负载均衡机制将用户请求转发到A服务器,这时A服务器就会给用户创建一个Session。当用户第二次发送请求时,Nginx将其负载均衡到B服务器,而这时候B服务器并不存在Session,所...

2019-03-29 22:03:30 276

原创 Redis(三):常见数据结构 与 缓存击穿、缓存穿透与缓存雪崩解决

相关阅读:Redis(一):Redis概述与常见问题Redis(二):数据回收策略、持久化原理、事务、主从复制Redis(三):常见数据结构 与 缓存击穿、缓存穿透与缓存雪崩Redis(四):Redis的分布式锁实现Redis(五):数据库 和 缓存 双写一致性一、redis常见的数据结构以及使用场景分析:1、String:常用命令: set,get,d...

2019-03-03 15:25:59 1158

转载 Redis(四):Redis的分布式锁实现

相关阅读:Redis(一):Redis概述与常见问题Redis(二):数据回收策略、持久化原理、事务、主从复制Redis(三):常见数据结构 与 缓存击穿、缓存穿透与缓存雪崩Redis(四):Redis的分布式锁实现Redis(五):数据库 和 缓存 双写一致性关于分布式锁在单进程的系统中,当存在多个线程可以同时改变某个变量时,就需要对变量或代码块做同步,使...

2019-03-03 02:26:59 638

转载 Redis(五):数据库 和 缓存 双写一致性

首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作。但是在更新缓存方面,对于更新完数据库,是更新缓存呢,还是删除缓存。又或者是先删除缓存,再更新数据库,其实大家存在很大的争议。目前没有一篇全面的博客,对这几种方案进行解析。于是博主战战兢兢,顶着被大家喷的风险,写了这篇文章。文章结构本文由以下三个部分组成:1...

2019-03-02 21:18:13 619

转载 Java虚拟机:为什么新生代内存需要有两个Survivor区

 在JVM的新生代内存中,为什么除了Eden区,还要设置两个Survivor区?1、为什么要有Survivor区:先不去想为什么有两个Survivor区,第一个问题是,设置Survivor区的意义在哪里? 如果没有Survivor,Eden区每进行一次Minor GC,存活的对象就会被送到老年代。老年代很快被填满,触发Major GC(因为Major GC一般伴随着Minor GC...

2019-02-21 17:56:40 380

原创 Java虚拟机:常见JVM参数配置和GC性能优化

一、常见的JVM参数配置:1、垃圾回收统计信息:-XX:+PrintGC打印GC简要信息-XX:+PrintGCDetails打印GC的详细信息-XX:+PrintGCTimeStamps打印CG发生的时间戳-Xloggc:log/gc.log指定GC log的位置,以文件输出-XX:+PrintHeapAtGC每一次GC前和GC后,都打印堆信息。2...

2019-02-19 22:52:02 1096

原创 十大排序算法小结

相关博客:排序算法:冒泡排序、插入排序、选择排序、希尔排序排序算法:归并排序、快速排序排序算法:桶排序、计数排序、基数排序排序算法:堆排序 前面学习了10中最基本的排序算法,这篇博客主要是对这10种排序算法的小结:1、这十种排序算法可以分为两大类:(1)非线性时间排序算法:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比...

2019-01-30 15:50:53 599

原创 排序算法:堆排序

 相关博客:排序算法:冒泡排序、插入排序、选择排序、希尔排序排序算法:归并排序、快速排序排序算法:桶排序、计数排序、基数排序排序算法:堆排序十大排序算法小结一、堆:1、什么是堆:堆是一种特殊的树,它满足需要满足两个条件:(1)堆是一种完全二叉树,也就是除了最后一层,其他层的节点个数都是满的,最后一个节点都靠左排列。(2)堆中每一个节点的值都必须大于等于(...

2019-01-30 14:40:12 305

原创 排序算法:桶排序、计数排序、基数排序

 相关博客:排序算法:冒泡排序、插入排序、选择排序、希尔排序排序算法:归并排序、快速排序排序算法:桶排序、计数排序、基数排序排序算法:堆排序十大排序算法小结这篇博客将主要介绍三种时间复杂度是O(n)的排序算法:桶排序、计数排序、计数排序。因为这些排序算法的时间复杂度都是线性的,所以也把这类排序算法称为线性排序。之所以能够做到线性的时间复杂度,主要原因是这几个算法是非基于...

2019-01-29 19:19:07 831

原创 排序算法:归并排序、快速排序

 相关博客:排序算法:冒泡排序、插入排序、选择排序、希尔排序排序算法:归并排序、快速排序排序算法:桶排序、计数排序、基数排序排序算法:堆排序十大排序算法小结一、归并排序:1、工作原理:归并排序的采用分治思想,如果要排序一个数组,我们先把数组从中间分成前后两个部分,然后对前后两个部分分别进行排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。2、动图演...

2019-01-29 17:22:45 356

原创 排序算法:冒泡排序、插入排序、选择排序、希尔排序

相关博客:排序算法:冒泡排序、插入排序、选择排序、希尔排序排序算法:归并排序、快速排序排序算法:桶排序、计数排序、基数排序排序算法:堆排序十大排序算法小结一、冒泡排序:1、算法原理:冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系的要求。如果不满足就让它俩互换位置。一次冒泡会让至少一个元素移动到它应该在的位置,重复n...

2019-01-28 23:27:36 1192 2

原创 《剑指offer》答案整理

 第一题,二维数组中的查找:https://blog.csdn.net/a745233700/article/details/82108738第二题,替换空格:https://blog.csdn.net/a745233700/article/details/82730804第三题,从头到尾打印链表:https://blog.csdn.net/a745233700/article/det...

2019-01-21 13:35:56 1384

原创 Java多线程(三):Executor框架、线程池、ThreadLocal、乐观锁、悲观锁、无锁CAS 原理

 相关文章:Java多线程(一):JMM内存模型、volatile、synchronized、Lock锁、重入锁ReentrantLock 原理Java多线程(二):创建线程的四种方式Java多线程(三):Executor框架、线程池、ThreadLocal、乐观锁、悲观锁、无锁CAS 原理 一、Executor框架:1、什么是Executor框架:Executor...

2019-01-18 23:41:21 958

原创 Java多线程(一):JMM内存模型、volatile、synchronized、Lock锁、重入锁ReentrantLock 原理

 相关文章:Java多线程(一):JMM内存模型、volatile、synchronized、Lock锁、重入锁ReentrantLock 原理Java多线程(二):创建线程的四种方式Java多线程(三):Executor框架、线程池、ThreadLocal、乐观锁、悲观锁、无锁CAS 原理 前言:1、多线程有什么用?(1)发挥多核CPU的优势:单核CPU上的"...

2019-01-18 23:26:11 1241

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