![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
湟同学你好
爱生活爱java
展开
-
关于Spring Security的认证流程心得
最近用spring security框架来做认证授权工作,搞得头有点大了,借此机会,小结学习一番 spring security是一个安全访问控制框架,其工作是基于一系列的过滤器来实现的,这些过滤器是框架的核心,但是他们不直接处理用户的认证和授权,而是通过AuthenticationManager(认证管理器)和Acc原创 2020-12-11 21:22:03 · 190 阅读 · 0 评论 -
ZooKeeper概念与知识点详解
概念:ZooKeeper是一个为分布式应用提供协调服务的开源项目工作机制:从设计模式来讲,ZooKeeper是一个基于观察者模式,为分布式服务提供支持的框架。其本身用于存储和管理数据,可以接受观察者的注册,数据发生变化时候,ZooKeeper就会主动去通知这些观察者。特点:ZooKeeper的服务端是由一个领导者(leader)和多个跟随者(follower)所组成的集群,集群之间通过Zab(Zookeeper Atomic Broadcast)来保持数据的一致性ZooKeeper中有半数以原创 2020-11-30 20:05:31 · 236 阅读 · 0 评论 -
Spring boot中嵌入式Servlet容器的配置和启动原理
以下分析基于Springboot2.0以上版本,1.X版本跟2.0以上版本源码差异性较大嵌入式Servlet容器的自动配置原理流程如下:SpringBoot 根据的依赖信息(默认是tomcat),创建对应的WebServerFactoryCustomizer(定制器,用来定制一些属性,默认为tomcat 所以就是定制tomcat的一些属性);WebServerFactoryCustomizerBeanPostProcessor(web工厂定制器的后置处理器)获取所有类型为web服务工厂定制器的组件(原创 2020-11-23 14:49:44 · 334 阅读 · 1 评论 -
Springboot的错误处理机制
相信以下这个页面对大家来说并不陌生,当我们启动一个springboot应用的时候,如果在浏览器访问错误,springboot就会自动响应这个界面,如果不是在浏览器访问,比如在postman去访问,springboot响应回来的则是json数据,今天就来探究下springboot对错误的处理机制。浏览器响应:Postman响应:首先Springboot在启动的时候,会帮我们加载很多配置类,这其中也包括错误自动配置类,处理的大概流程如下:一但系统出现原创 2020-11-22 22:59:18 · 285 阅读 · 1 评论 -
spring boot的自动配置原理解析
Spring boot的自动配置 Springboo应用启动的时候,首先会先走主配置类,如下代码所示:@SpringBootApplication//这是Springboot的核心注解,也是一个混合注解。public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args原创 2020-11-22 16:06:04 · 111 阅读 · 0 评论 -
spring事务细节和事务传播解析
Spring事务的配置上述就是spring事务的一个简单配置,只要给方法上加上Transactional,就可以控制住这个方法,在方法出现异常的时候进行回滚操作,同时还可以设置一些参数,关于这些参数也在上图中标记出来了。下面主要是事务隔离级别和事务传播行为的介绍1、事务隔离级别:数据库事务并发的三大问题:脏读:事务1将变量a从1改成10 >>> 事务2读取到a的值为10 >>> 事务1出现异常,把a回滚成1 >>>事务2拿到的值a=10原创 2020-11-12 22:22:11 · 114 阅读 · 0 评论 -
单例设计模式的八种方式
//饿汉式(静态常量)class Singleton{ private Singleton{} private final static Singleton instance = new Singleton(); public static Singleton getInstance(){ return instance; }}//优点:类加载的时候就完成实例化,避免了线程同步的问题//不足:没有懒加载,如果实例没有用到,会造成内存浪费//饿汉式(静原创 2020-10-04 09:30:38 · 104 阅读 · 0 评论 -
ReentrantLock加锁与解锁源码解析
我们使用ReentrantLock的时候一般是如下用法public class MainActivity { public static void main(String[] args) { ReentrantLock lock = new ReentrantLock(); lock.lock(); try{ //逻辑代码 }finally { lock.unlock();原创 2020-09-18 22:28:09 · 168 阅读 · 0 评论 -
一图了解Java虚拟机的类加载机制
关于class文件的结构,可参照这篇文章:一图了解class文件结构原创 2020-08-16 10:20:41 · 2090 阅读 · 0 评论 -
一图了解java中class文件结构
此图只列举出class文件表层的结构,其中的每一项再深入进去都是相当复杂的,有兴趣的小伙伴可以自行研究。原创 2020-08-11 22:33:58 · 2073 阅读 · 0 评论 -
java中的垃圾收集器和内存分配策略
引用计数法概述:在对象中添加一个引用计数器,每当有一个地方引用它时候,计数器值就加1,当引用失效时候,计数器值就减一,任何计数器为0的对象就是不可能被使用了。引用计数器的缺点:当两个对象相互引用的时候,引用计数器就无法回收他们。可达性分析算法思路:通过一系列称为“GC Roots”的根节点作起始点集,从这些节点开始,根据引用向下搜索,搜索的过程称为引用链,如果某个对象到GC Roots间没有任何引用链相连,或者用图论来说就是GC Roots到这个对象不可达时候,则证明这个对象是不可再使.原创 2020-08-09 15:17:03 · 2077 阅读 · 0 评论 -
一图搞清java虚拟机运行时数据区
话不多说,直接上图原创 2020-08-01 22:15:01 · 1481 阅读 · 0 评论 -
Https协议之握手流程(加密方式,从常见场景分析)
前提首先先假设一个场景:故事的主人公小A此时正通过自己手机浏览网站,当他只是看一些新闻类的时候,用Http协议是没有问题的,但是当他在网上购物(网站B)的时候,涉及到一些重要账号信息交互的时候,问题就来了。如果小A发送携带账号重要信息的网络包被有心之人拦截,事情就大发了。解决上述这种危险场景一般的思路就是加密,加密有两种方式:对称加密和非对称加密对称加密对称加密算法中,加密和解密所用的密钥是相同的,所以对称加密算法要保证安全性的话,密钥要做好保密,只能让小A和网站B知道。加密后的信息就算被有心之人拦原创 2020-07-24 23:48:29 · 2591 阅读 · 2 评论 -
【TCP】老生常谈的TCP的三次握手与四次挥手
前提提要TCP三次握手与四次挥手这都已经是老生常谈的话题了,基本上每个程序员都能对这个流程来上几句。但是大部分人只能说出一个大致的流程,少了一个比较完整的总结。于是乎有了这篇文章的出现。这篇文章是我自己学习的总结,如有不足,希望各路大佬能指出。TCP首部格式与重要字段解析想要知道这个流程,需从根源看起,了解TCP首部的一些字段,才不至于在看流程的时候对一些关键字眼云里雾里。序号(seq):大小为4个字节,其作用是标记数据字节的顺序。TCP把连接中所有发送的数据字节都标上序号。第1个字段的序号由本原创 2020-07-18 20:10:12 · 1978 阅读 · 0 评论 -
MySQL之突然执行变慢
为何会有这种情况?这种情况的发生,有可能是MySQL把内存中脏页的数据写入到磁盘中引起的。那么何为脏页?脏页的意思就是内存中的数据页跟磁盘中的数据页内容不一致,这内存中的页就被称为脏页。同理可得,如果内存中的数据页和磁盘中的数据页内容一致,就称为干净页。抖的原因这个可能就发生在把内存中脏页的数据更新到磁盘中数据页数据的过程。这个过程中涉及到redo log这个日志,关于这个redo log的相关文章可以看下这个Mysql角色与日志初体验更新脏页的过程在什么情况下会出现?第一种场景,redo原创 2020-07-05 13:24:27 · 2183 阅读 · 0 评论 -
MySQL中的“锁事”之全局锁、表级锁和行锁
直入正题,数据库中根据加锁的范围大致可以分为全局锁、表级锁和行锁三大类。全局锁:全局锁,从名字就能知道其含义,就是对整个数据库实例进行加锁,mysql中可以通过Flush tables with read lock(FTWRL)来对数据库加锁,使得数据库处于只读状态。应用场景:做全库逻辑备份应用。引发的问题:1、主库上备份,导致数据库在备份期间都只能做只读操作,不能做更新之类的其他操作,会使业务进入停摆。2、从库备份:备份期间从库不能执行从主库同步过来的binlog,导致主从延迟mysqldum原创 2020-07-03 22:37:25 · 1938 阅读 · 0 评论 -
MySQL之从MVCC角度来看事务隔离
起因提到事务,相信大家都很熟悉,毕竟这个是与数据库息息相关的。事务的四大特性:原子性,一致性,隔离性,持久性相信也早已深入人心。但是很多人都只是知道这个概念,怎么用(包括我)。恰逢今天学习了相关知识,就好好深入研究一下,特此做总结一篇。不同事务之间可能引发的问题以及隔离级别当多个事务在同时执行的时候,就有可能引发如下三个问题:脏读:一个事务读取另外一个事务还没有提交的数据叫脏读。幻读:幻读一般指的是一个事务在操作一片数据,这个时候另外一个事务插入另一条数据,这个时候第一个事务发现怎么自己刚操作的原创 2020-06-30 20:46:12 · 1910 阅读 · 0 评论 -
内含乾坤的ip addr指令
前文IP地址是唯一用来标识我们主机的地址,想要查看我们本地的ip相信大部分使用电脑的同学都知道,window上可以用ipconfig指令,linux上则可用ifconfig或者ip addr,下面是我从自己的linux上截取的1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:原创 2020-06-27 19:43:50 · 1630 阅读 · 0 评论 -
初识网络协议和网络分层
语言是一种工具,只有相同语言的人,才能在彼此之间进行交流。同理,协议就像一种规则,只有基于相同规则的事物,才能进行彼此之间的通信。今天所说的网络协议,亦不过如此。协议有三要素:语法:内容要符合规则和形式语义:内容能够代表某种意义顺序:先做什么,再做什么,这个顺序要有规范下面这个图片就是一个符合三要素的例子在这里插入代码片...原创 2020-06-26 21:53:13 · 1376 阅读 · 0 评论 -
你真的懂数据库的索引吗(下篇)
文章目录普通索引和唯一索引的选择===============================================普通索引和唯一索引的选择你真的懂数据库的索引吗(上篇)继上篇之后,今天来继续看看索引方面的知识。原创 2020-06-26 10:42:02 · 2543 阅读 · 0 评论 -
你真的懂数据库的索引吗(上篇)
文章目录前情提要索引之常见模型三巨头=========================================================================前情提要微语:慢下来,你才能走得更快。如今的我已经慢慢理解其中的道理了,好了废话不多说,直接进入主题。哈哈题目标题党了,其实我也是个学习的小白,这是学习记录,共勉 。索引,一个高大上的名词,通俗来说就是目录,通过它能快速定位到你查找的位置。索引之常见模型三巨头...原创 2020-06-25 14:46:21 · 3452 阅读 · 0 评论 -
Mysql角色与日志初体验(从查询更新入手)
文章目录Mysql三大角色客户端:服务端(核心功能):连接器查询缓存分析器优化器执行器存储引擎Mysql的查询流程redo log和binlogbinlog日志 和 redlog日志的差别更新语句的执行流程ps前提:当我们认知一个人的时候,首先要观察这个人的外在,再去深入了解这个人的内涵。对于我们认识学习mysql也是如此,要先明白它的各个角色组成(形象的比喻)。Mysql三大角色客户端:客户端主要用来发起对mysql请求 ,比如我们输入查询语句,连接mysql server(mysql -uro原创 2020-06-24 18:01:01 · 975 阅读 · 0 评论 -
Springboot和spring data jpa报的entityManagerFactory和NullPointerException问题
使用较低版本的springboot的时候会报这个错误。2020-06-13 15:06:54.188 [main] ERROR o.s.boot.SpringApplication - Application run failedorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resourc原创 2020-06-13 15:09:37 · 1712 阅读 · 0 评论 -
Rabbitmq踩的坑以及一些总结记录
首先说说最近使用rabbitmq踩的坑,rabbitmq是基于erlang语言所写,所以下载使用rabbitmq的时候要先下载erlang 同时配置其环境变量。但是window系统下载rabbitmq和erlang耗时极其长,安装使用后,可能还会出现localhost:15672访问不了的情况,所以建议在VM虚拟机上使用centos7系统,安装docker,然后直接拉取rabbitmq镜像,几分钟就搞定了。接下来进入主题,首先摆出几个概念:RabbitMq首先是基于AMQP协议(高级消息队列协议),原创 2020-06-10 21:46:25 · 3949 阅读 · 3 评论 -
用户量都变大了,还不掌握一点解决并发编程三大问题的思路吗
掌握思路之前,需要先了解一个概念:JAVA内存模型:这是一种规范,通过定义多种规则对编译器和处理器进行限制,主要用来解决可见性和有序性问题。java内存模型所涉及到的关键字:锁、volatile字段、final修饰符与对象的安全发布。ps:内存模型的底层实现:通过内存屏障来禁止重排序。锁:锁是具备happens-before关系的,在解锁的时候,JVM会把缓存的内容刷新到内存上,保证修改的...原创 2020-04-25 20:43:23 · 250 阅读 · 0 评论 -
并发编程之三个主要问题(可见性,原子性,有序性)
可见性、原子性和有序性问题CPU、内存和IO设备随着时代发也在不断更新迭代,不过更新迭代的同时,他们之间的矛盾也一直存在,三者存在巨大的速度差异(CPU>内存>IO)。操作系统的整体性能就取决于它的·短板:IO读写,为此为了平衡他们之间的速度差异,操作系统和计算机体系也提供了许多对策来平衡他们之间的速度:1、增加CPU缓存,平衡CPU和内存的速度差异。2、操作系统增加了进程和线...原创 2020-04-18 12:03:51 · 232 阅读 · 0 评论 -
分析ThreadLocal
ThreadLocal之通俗易懂篇概念初步了解ThreadLocal源码初步了解ThreadLocalMap源码InheritableThreadLocal概念ThreadLocal字面上意思是线程本地,它的存在并不是为了来解决多线程环境的共享变量问题,而是来提供线程内部的存储空间。在多线程环境中,可以保证各个线程之间的变量相互隔离,互相独立。初步了解ThreadLocal源码在Threa...原创 2020-03-21 10:55:08 · 188 阅读 · 0 评论