自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Nagile-zhou博客

纸上得来终觉浅,绝知此事要躬行

原创 发现自己已经好久没写博客了

在家躺尸了两个月,来了阿里忙的不行以后有时间就把自己的一些感悟和技术整理零零碎碎还是发布一下

2019-10-22 17:48:44 104 1

原创 后端---java中注解工作原理(非小白文)

我就一张图,别的不多说!!!!

2019-07-03 16:56:28 161

原创 后端---Redis持久化方式

Redis不同于Memcached的很重一点就是,Redis支持持久化,而且支持两种不同的持久化操作。Redis的一种持久化方式叫快照(snapshotting,RDB),另一种方式是只追加文件(append-only file,AOF).这两种方法各有千秋,下面我会详细这两种持久化方法是什么,怎么用,如何选择适合自己的持久化方法。快照(snapshotting)持久化Redis可以通过创...

2019-06-14 14:11:36 96

原创 后端---Spring-Retry框架介绍和基本开发

Spring-Retry框架介绍和基本开发一、背景介绍 前天是来到公司实习的第五天,之前几天分给我的任务一直都是熟悉项目,阅读项目代码梳理其中某些接口或枚举类之间的关系,并书写文档。直到前天下午组长把我叫来说出了这样一个需求,在我们项目中有一个认证身份证号的service接口,该接口是调用第三方公司的接口,但是第三方公司的接口并不稳定,每天大约有1.5w个返回错误code值200...

2019-03-31 21:40:34 131

原创 Spring并发访问的线程安全性问题

Spring框架中在并发访问时的线程安全性 在今天整理往前所学的知识中,看到了关于HashMap是线程不安全的,在之前的实际项目开发中自己在写一个消息通知的接口功大家调用的时候,因为一个消息通知的模板中需要替换的参数长度和数量不定,并且相同的参数可能对应不同的内容,为了方便大家调用我的这个方法,我使用了HashMap作为参数,并把它写在了Service层中一个方法内。使用的框架是S...

2019-03-03 18:15:44 149

原创 后端---Java中的公平锁和非公平锁实现详解

Java中的公平锁和非公平锁实现详解 在Java中实现锁的方式有两种,一种是使用Java自带的关键字synchronized对相应的类或者方法以及代码块进行加锁,另一种是ReentrantLock,前者只能是非公平锁,而后者是默认非公平但可实现公平的一把锁。ReentrantLock的实现是基于其内部类FairSync(公平锁)和NonFairSync(非公平锁)实现的。 其可重入性是...

2018-12-29 19:26:27 1891

原创 多线程---java中锁池和等待池的概念

锁池和等待池在java中,每个对象都有两个池,锁(monitor)池和等待池锁池:假设线程A已经拥有了某个对象(注意:不是类)的锁,而其它的线程想要调用这个对象的某个synchronized方法(或者synchronized块),由于这些线程在进入对象的synchronized方法之前必须先获得该对象的锁的拥有权,但是该对象的锁目前正被线程A拥有,所以这些线程就进入了该对象的锁池中。 等...

2018-12-28 18:10:31 1218 1

原创 后端---深入理解双重检查锁定

Java中的双重检查锁定双重检查锁定又称双重效验锁,以前常常用于Java中的单例模式,在并发编程中的线程池中常常用到该模式,并且在Spring中DI(依赖注入)也用到该模式的思想,当Spring运行的时候将我们加入注解的bean(Java对象)遍历出来,并创建其相关的一个实例,在程序的运行中,如果遇到要操作该对象的时候,便使用Spring为我们创建的该类的单例进行相关的操作。但是如何确保只生成...

2018-12-27 21:21:04 148

原创 后端---git常用命令和使用顺序

Git基本了解git命令是一些命令行工具的集合,它可以用来跟踪,记录文件的变动。比如你可以进行保存,比对,分析,合并等等。这个过程被称之为版本控制。已经有一系列的版本控制系统,比如SVN, Mercurial, Perforce, CVS, Bitkeepe等等。Git是分布式的,这意味着它并不依赖于中心服务器,任何一台机器都可以有一个本地版本的控制系统,我们称之为仓库。如果是多人协作的话...

2018-12-26 22:23:50 175

转载 Java集合:HashMap源码剖析

Java集合:HashMap源码剖析一、HashMap概述二、HashMap的数据结构三、HashMap源码分析     1、关键属性     2、构造方法     3、存储数据     4、调整大小     5、数据读取              6、HashMap的性能参数              7、Fail-Fast机制  声明:本博客转自  博客园 h...

2018-12-25 22:21:48 74

转载 彻底搞懂hashCode与equals的作用与区别

文章为转载, 原文地址:https://blog.csdn.net/lijiecao0226/article/details/24609559   最近去面试了几家公司,被问到hashCode的作用,虽然回答出来了,但是自己还是对hashCode和equals的作用一知半解的,所以决定把它们研究一下。以前写程序一直没有注意hashCode的作用,一般都是覆盖了equals,缺没有覆盖has...

2018-12-25 10:05:32 90

原创 后端---Java中的HashSet和TreeSet和LinkedHashSet的区别

Java中的HashSet和TreeSet和LinkedHashSet区别 Set接口与三种实现之间的关系Set是一个不包含重复元素的 collection。无序且唯一。HashSet LinkedHashSet TreeSetHashSet是使用哈希表(hash table)实现的,其中的元素是无序的。HashSet的add、remove、contains方法 的时间复杂...

2018-12-24 16:32:41 107

原创 后端---Java中ArrayList和LinkedList区别和联系

ArrayList和LinkedList的区别和联系在一个多月之前,我曾写过一篇博客想要迅速简洁的了解Java中所有的集合类型(List、Set、Map),然后一个月多后的我不得已又抱起《Java核心卷I 》仔细研读,这是为什么呢???是因为“温故而知新”还是因为“书读百遍其义自显”????都不是!!!因为我忘完了啊!关于List和Set、Map的博客,这里给出链接  ja...

2018-12-24 11:56:50 108

原创 Spring架构---Spring中的事务管理详解

Spring中的事务管理详解1. 事务简介:事务管理是企业级应用程序开发中必不可少的技术,用来确保数据的完整性和一致性事务就是一系列的动作,它们被当作一个单独的工作单元。这些动作要么全部完成,要么全部不起作用2. 事务的四个关键属性(ACID)① 原子性(atomicity):事务是一个原子操作,有一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用② 一致性(...

2018-12-22 22:10:04 117

原创 后端---Java中Iterator(迭代器)原理分析

Java中Iterator(迭代器)的用法及其背后机制的探究一.背景延伸 在Java中遍历List时会用到Java提供的Iterator,Iterator十分好用,原因是:迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。  Java中的Iterator功能比较简单,并且只能单...

2018-12-22 18:30:09 142

原创 网络---Https和Http区别和对称加密和非对称加密

Https和Http区别众所周知,WEB服务存在http和https两种通信方式,http默认采用80作为通讯端口,对于传输采用不加密的方式,https默认采用443,对于传输的数据进行加密传输目前主流的网站基本上开始默认采用HTTPS作为通信方式,一切的考虑都基于对安全的要求,那么如何对自己的网站配置HTTPS通信,是本文着重介绍的本文的主要内容包括:https加密传输的原理、如何申...

2018-12-22 14:58:14 1685

原创 Java自定义类加载器与双亲委派模型

1. 双亲委派模型关于双亲委派模型,网上的资料有很多。我这里只简单的描述一下,就当是复习。1.1 什么是双亲委派模型?首先,先要知道什么是类加载器。简单说,类加载器就是根据指定全限定名称将class文件加载到JVM内存,转为Class对象。如果站在JVM的角度来看,只存在两种类加载器: 启动类加载器(Bootstrap ClassLoader):由C++语言实现(针对HotSp...

2018-12-22 09:51:38 130

原创 后端---史上最全最小白最简单最细致的Java接入微信支付接口(Native接入)

距离上一篇博客史上最全最小白最简单最细致的Java接入支付宝支付接口方法   https://blog.csdn.net/weixin_42504145/article/details/85077635已经过去快三天了,终于在今天将微信整个电脑网页支付整合在SSM框架上.大家可以在Github https://github.com/nigel-zhou/reimagined-waddl...

2018-12-21 20:40:29 10636 36

原创 后端---史上最全最小白最简单最细致的Java接入支付宝支付接口方法

昨天Boss在讲项目的业务需求的时候对我突然说让我做一下支付宝微信支付接口这块功能,我的心里是充满问号的????,但是我的嘴却坚定的说出了没问题!!!                                      ???????? 于是开启了我这一天的快乐之旅,在这个无情又寒冷的深夜里将我今天的快乐分享给大家! 哈哈哈哈哈哈,不扯了,我们开始正题! 正题每天早上起来...

2018-12-18 22:32:11 2321 8

原创 后端--Java中class文件结构

最近刚看完《深入理解Java虚拟机》周志明著 第六章 类文件结构,在这里写一篇关于JVM如何解析Class文件结构的博客。Class类文件结构Class文件是一组以8字节为基础单位的二进制流, 各个数据项目严格按照顺序紧凑排列在class文件中, 中间没有任何分隔符,这使得class文件中存储的内容几乎是全部程序运行的程序。Java虚拟机规范规定,Class文件格式采用类似C语言结构...

2018-12-17 15:19:38 189

原创 后端---Java设计模式之单例模式详解

一、单例模式定义单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 二、为什么要使用单例模式1.对于系统中的某些类来说,只有一个实例很重要。例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;售票时,一共有100张票,可有有多个窗口同时售票,但需要保证不要超售(这里的票数余量就是单例,售票涉及到多线程)。如果不是用机制对窗口对象进行唯一化将弹出...

2018-12-15 09:58:14 108 1

原创 后端---java的动态代理机制详解

关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理。一、代理模式      代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的...

2018-12-14 16:26:54 100

原创 jvm---静态方法加锁和非静态方法加锁的区别

静态方法加锁和非静态方法加锁的区别静态方法加锁:static synchronized是类锁 非静态方法加锁:synchronized是对象锁 对象锁(又称实例锁,synchronized):该锁针对的是该实例对象(当前对象)。synchronized是对类的当前实例(当前对象)进行加锁,防止其他线程同时访问该类的该实例的所有synchronized块,注意这里是“类的当前实例”, ...

2018-12-13 22:29:04 293

原创 JVM----CMS垃圾收集器

本篇来自周志明的<<深入理解java虚拟机>>CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。目前很大一部分的Java应用都集中在互联网站或B/S系统的服务端上,这类应用尤其重视服务的响应速度,希望系统停顿时间最短,以给用户带来较好的体验。CMS收集器就非常符合这类应用的需求。从名字(包含“Mark Sweep”...

2018-12-11 23:57:34 65

原创 JVM----G1垃圾收集器

本篇来自周志明的<<深入理解java虚拟机>>G1(Garbage-First)收集器是当今收集器技术发展的最前沿成果之一,早在JDK 1.7刚刚确立项目目标,Sun公司给出的JDK 1.7 RoadMap里面,它就被视为JDK 1.7中HotSpot虚拟机的一个重要进化特征。从JDK 6u14中开始就有Early Access版本的G1收集器供开发人员实验、试用,由此...

2018-12-11 23:54:56 75

原创 JVM----JVM 垃圾收集GC算法

本篇来自周志明的<<深入理解java虚拟机>> 标记-清除算法标记-清除(Mark-Sweep)算法是最基础的算法,就如它的名字一样,算法分为”标记”和”清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。之所以说它是最基础的收集算法,是因为后续的收集算法都是基于这种思路并对其缺点进行改进而得到的。它主要有两个缺点:一个是效率问...

2018-12-11 23:51:36 56

原创 JVM----一个对象的回收过程

本篇来自周志明的<<深入理解java虚拟机>>预备知识: 如何判定对象存在活引用? https://blog.csdn.net/q5706503/article/details/84899581即使在可达性分析算法中不可达的对象,也并非是“非死不可”的 ,这时候它们暂时处于“缓刑” 阶段 ,要真正宣告一个对象死亡 ,至少要经历两次标记过程 : 如 果对象在进行可达性...

2018-12-11 23:49:49 104

原创 架构---Spring-Mvc中的监听器-拦截器-过滤器

Spring-Mvc框架中的拦截器和过滤器一.知识背景介绍 首先我们要知道该博客的监听器和拦截器和过滤器概念以及实例是建立在SSM框架之上的,对于SSM框架内部运行原理不懂的大家可以去参考我的另一篇博客:   spring架构---spring-Mvc运行原理解读 https://blog.csdn.net/weixin_42504145/article/details/8407462...

2018-12-11 23:44:53 242

原创 数据库---解决redis命令错误:MISCONF Redis is configured to save RDB snapshots

安装redis后在添加一对键值的时候突然报错:127.0.0.1:6379> set bar 1 MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are di...

2018-12-05 13:36:22 73

原创 数据库---MySQL存储过程

MySQL 5.0 版本开始支持存储过程。存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。 优点(为什么要用存储过程?):...

2018-12-03 22:17:45 87

原创 数据库---经典SQL语句大全

一、基础1、说明:创建数据库CREATE DATABASE database-name 2、说明:删除数据库drop database dbname3、说明:备份sql server--- 创建 备份数据的 deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'-...

2018-12-03 21:48:23 857

原创 后端---Java中的常量池(字符串常量池、class常量池和运行时常量池)

在Java的内存分配中,总共3种常量池:在JDK1.7之前运行时常量池逻辑包含字符串常量池存放在方法区, 此时hotspot虚拟机对方法区的实现为永久代在JDK1.7 字符串常量池被从方法区拿到了堆中, 这里没有提到运行时常量池,也就是说字符串常量池被单独拿到堆,运行时常量池剩下的东西还在方法区, 也就是hotspot中的永久代在JDK1.8 hotspot移除了永久代用元空间(Me...

2018-12-02 01:34:16 363

原创 后端---Java线程的6种状态

Java中线程的状态分为6种1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态...

2018-12-02 00:51:15 184

原创 数据库--sql优化问题(百万级数据优化方案)

sql优化问题(百万级数据优化方案) 一.sql数据库优化方案1、索引2、分库分表分区3、数据库引擎 4、预处理 5、读写分离1、索引,建立索引是数据库优化各种方案之中成本最低,见效最快的解决方案,一般来讲,数据库规模在几十万和几百万级别的时候见效最快,即便是有不太复杂的表关联,也能大幅度提高sql的运行效率,这个在我们以前的项目应用中,有非常深刻的体会,本来耗时5...

2018-12-02 00:37:03 1997 1

原创 架构---什么是RPC框架

RPC,即 Remote Procedure Call(远程过程调用),调用远程计算机上的服务,就像调用本地服务一样。RPC可以很好的解耦系统,如WebService就是一种基于Http协议的RPC。RPC 可基于 HTTP 或 TCP 协议,Web Service 就是基于 HTTP 协议的 RPC,它具有良好的跨平台性,但其性能却不如基于 TCP 协议的 RPC。会两方面会直接影响 RPC...

2018-12-01 18:50:27 270

原创 后端---java中堆外内存详解

堆外内存和堆内内存   堆外内存又称为直接内存(Direct Memory)并不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域.一直以来是Javaer们难以关注的一片领域,今天我们就一起探索一下这片区域究竟隐藏着什么东东????    JVM可以使用的内存分外2种:堆内存和堆外内存.我们先看一下我们已经相对来说十分熟悉的堆内内存:Java堆(JAva Hea...

2018-11-29 10:21:56 508 1

原创 彻底搞清Apache和Tomcat的关系

1. Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展。2. Apache和Tomcat都可以做为独立的web服务器来运行,但是Apache不能解释java程序(jsp,serverlet)。3. Apache是普通服务器,本身只支持html即普通网页。不过可以通过插件支持php,还可以与Tomcat连通(单向Apach...

2018-11-22 10:36:13 731

原创 后端---java中hashmap多线程并发问题详解

HashMap多线程并发问题分析hashmap并发问题的症状:hashmap多线程操作同时调用put()方法后可能导致get()死循环,从而使CPU使用率达到100%,从而使服务器宕机.Java的API文档说HashMap是非线程安全的,应该用ConcurrentHashMap。但是在这里我们可以来研究一下原因。简单代码如下:package com.king.hashmap;...

2018-11-21 22:08:49 993

原创 后端---java中for循环执行顺序

for循环的表达式一般如下:for(表达式1;表达式2;表达式3){    表达式4;}第一次进入循环先执行表达式1,再执行表达式2进行判断,若成立执行,表达式4,再执行表达式3,一次循环结束。再进入循环,执行表达式2,再执行表达式4,再执行表达式3.给出一个demo大家来看看for循环会怎么执行:public class Text{ static boole...

2018-11-21 15:22:21 299

原创 算法---hash算法原理(java中HashMap底层实现原理和源码解析)

散列表(Hash table,也叫哈希表),是依据关键码值(Key value)而直接进行訪问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来訪问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 比如我们要存储八十八个数据,我们为他申请了100个元素的地址空间,80/100=0.88,这个数字叫做负载因子.我们之所以这样做是为了通过牺牲空间来换取时间,达到...

2018-11-20 23:51:04 415

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