自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

张维鹏的博客

芝兰生于空谷,不以无人而不芳!

  • 博客(215)
  • 资源 (2)
  • 收藏
  • 关注

原创 Java虚拟机:类加载机制与双亲委派模型

类加载机制,就是虚拟机把类的数据从class文件加载到内存,并对数据进行校检,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型的过程。JVM的类加载机制,规定一个类有且只有一个类加载器对它进行加载。而如何保证这个只有一个类加载器对它进行加载呢?则是由双亲委派模型来实现的。一个类加载器收到了类加载的请求,他不会去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一层的类加载器都是如此,因此所有请求都会被传到最顶层的启动类加载器,只有当父加载器反馈无法完成加载请求时,子加载器才会尝试加载

2020-11-22 11:39:57 8185

原创 Java基础篇:反射机制详解

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

2019-12-03 23:50:42 58592 32

原创 MySQL数据库的性能优化总结

数据库的优化方法:1、设计符合范式的数据库;2、选择合适的存储引擎;3、SQL表结构、字段优化;4、SQL语句优化与索引优化;5、读写分离:主数据库负责写操作,从数据库负责读操作。6、分库分表:垂直切分与水平切分。7、分区:将表的数据按照特定的规则放在不同的分区,提高磁盘的IO效率,提高数据库的性能。8、数据库参数优化:IO参数、CPU参数;9、硬件;10、数据库集群;

2018-12-26 21:02:12 8200

原创 MySQL数据库:事务和ACID实现原理

数据库的事务是并发控制的基本单位,是指逻辑上的一组操作,要么全部执行,要么全部不执行。1、事务的特性:(1)原子性:事务是一个不可分割的工作单元,事务里的操作要么都成功,要么都失败,如果事务执行失败,则需要进行回滚。(2)隔离性:事务的所操作的数据在提交之前,对其他事务的可见程度。(3)持久性:一旦事务提交,它对数据库中数据的改变就是永久的。(4)一致性:事务不能破坏数据的完整性和业务的一致性。

2018-11-19 00:25:55 533

原创 MySQL数据库:索引的实现原理

一、MySQL索引的数据结构:常见的索引的数据结构有:B+Tree、Hash索引。1、Hash索引:MySQL中,只有Memory存储引擎支持hash索引,是Memory表的默认索引类型。hash索引把数据以hash值形式组织起来,因此检索效率非常高,可以一次定位。hash索引的缺点:(1)Hash索引仅能满足等值的查询,不能满足范围查询、排序。因为数据在经过Hash算法后,其大小关系就可能发生变化。(2)当创建组合索引时,不能只适用组合索引的部分列进行查询。因为hash索引是把多

2018-06-25 10:22:41 1284

原创 Java虚拟机:垃圾回收机制与垃圾收集器

当Eden区没有足够的内存空间给对象分配内存时,虚拟机会发起一次Minor GC,在GC开始的时候,对象会存在Eden和From区,To区是空的。进行GC时,Eden区存活的对象会被复制到To区,From区存活的对象会根据年龄值决定去向,达到阈值(默认15)的对象会被移动到老年代中,没有达到阈值的对象会被复制到To。这时Eden区和From区已经被清空了。接下来From区和To区交换角色,以保证To区在GC开始时是空的。Minor GC会一直重复这样的过程,直到To区被填满,To被填满之后,会将所有对象移动

2018-05-12 17:23:14 333

原创 Java虚拟机:对象的创建过程

1、对象的创建过程:对象的创建过程一般是从new指令(JVM层面)开始的,整个创建过程如下:(1)首先检查new指令的参数是否能在常量池中定位到一个类的符号引用;(2)如果没有,说明类还没有被加载,则须先执行相应的类加载、解析和初始化;类加载过程可阅读这篇文章:https://blog.csdn.net/a745233700/article/details/80274743(3)如果有,虚拟机将在堆中为新生对象分配内存,并使用CAS保证操作原子性。分配内存方式有:指针碰撞和空闲列表;

2020-11-22 01:39:06 23

原创 JUC多线程:线程池的创建及工作原理

一、什么是线程池:线程池主要是为了解决 新任务执行时,应用程序为任务创建一个新线程 以及 任务执行完毕时,销毁线程所带来的开销。通过线程池,可以在项目初始化时就创建一个线程集合,然后在需要执行新任务时重用这些线程而不是每次都新建一个线程,一旦任务已经完成了,线程回到线程池中并等待下一次分配任务。二、创建线程池:1、通过Executors创建线程池:在JUC包中的Executors中,提供了一些静态方法,用于快速创建线程池,常见的线程池有:(1)newSingleThreadExecutor:创建一

2020-11-01 02:33:36 142

原创 ubuntu系统使用Anaconda安装tensorflow-gpu环境

一、环境配置版本信息:安装tensorflow-gpu,需特别注意tensorflow-gpu、Python、CUDA、cuDNN版本的适配信息,版本不适配会导致tensorflow-gpu安装失败,该安装教程选择的软件版本信息为:ubuntu18.04 + Anaconda3.5.3.1 + Python3.6.12 + tensorflow-gpu2.2.0 + CUDA10.1 + cuDNN7.6.5更多版本适配信息可参考官网:https://tensorflow.google.cn/insta

2020-10-30 00:50:06 152

原创 ubuntu系统安装Anaconda与使用入门

一、什么是Anaconda:Anaconda是一个开源的Python发行版本,包含了conda、Python等180多个科学包及其依赖项,可以用于包管理器和环境管理。比如A项目中用了Python2,而B项目使用Python3,而同时安装两个Python版本可能会造成许多混乱和错误,这是使用Anaconda就可以为不同的项目建立不同的运行环境。二、安装Anaconda:1、下载Anaconda安装包:wget https://repo.continuum.io/archive/Anaconda3-5

2020-10-30 00:36:43 374

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

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

2019-10-28 03:48:44 574

原创 HttpDNS介绍

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

2019-10-15 02:52:50 2323

转载 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 445

转载 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 414

原创 RSA加密算法原理

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

2019-10-08 03:25:46 3273

原创 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 1015

原创 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 1660

原创 3DES加密算法原理

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

2019-10-07 21:05:26 4616 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 1184

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

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

2019-10-07 17:27:56 2728

转载 Fiddler抓包原理解析

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

2019-08-20 21:23:11 2047

转载 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 869

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

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

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

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

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

2019-04-30 09:54:46 583

转载 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 3160

转载 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 355

转载 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 338

转载 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 451

转载 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 949

转载 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 863

转载 Spring中bean的注入方式

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

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

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

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

2019-04-13 19:43:50 385

原创 Java虚拟机:Java中堆和栈的详细区别

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

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

转载 Tomcat系统架构

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

2019-03-30 23:38:37 464

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

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

2019-03-29 22:03:30 309

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

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

2019-03-03 15:25:59 1310

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

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

2019-03-03 02:26:59 694

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

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

2019-03-02 21:18:13 668

原创 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 1544

原创 十大排序算法小结

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

2019-01-30 15:50:53 660

SSH整合jar包

spirng4.3.9+struts2.3.24+hibernate5.0.9整合jar包依赖完整版。

2018-07-13

SSM整合jar包

spring4.3.9+springmvc4.3.9+mybatis3.4.4的整合jar包依赖完整版。

2018-07-13

空空如也

空空如也

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

TA关注的人 TA的粉丝

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