HTTPS原理
摘要:HTTP存在的问题 以下均是客户端http请求一次服务端可能出现的问题,即服务端向客户端响应请求,返回数据: 1. 明文传输,内容不加密:个人隐私、账户密码等信息可能会被盗取。2. 篡改,数据的完整性和安全性:收到的数据可能被第三方修改过,或被植入广告等。3. 假冒,服务端的身份未认证:访问的站点非
阅读全文
ThreadLocal源码原理以及防止内存泄露
摘要:ThreadLocal的原理图 在线程任务Runnable中,使用一个及其以上ThreadLocal对象保存多个线程的一个及其以上私有值,即一个ThreadLocal对象可以保存多个线程一个私有值。 (重点)每一个线程Thread对象,都有一个threadLocals属性; 核心属性,因为每个Thr
阅读全文
ReentrantReadWriteLock中的锁降级
摘要:锁降级指的是写锁降级为读锁。 因为读锁与读锁之间不互斥,如果是写锁与读锁或者是写锁与写锁就会互斥,所以由写锁变为读锁就降级了。 如果当前线程拥有写锁,然后将其释放,最后再获取读锁,这种并不能称之为锁降级。 锁降级指的是把持住(当前拥有的)写锁,再获取到读锁,随后释放(先前有用的)写锁的过程。 下面给
阅读全文
new 的对象如何不分配在堆而分配在栈上(方法逃逸等)
摘要:当能够明确对象不会发生逃逸时,就可以对这个对象做一个优化,不将其分配到堆上,而是直接分配到栈上,这样在方法结束时,这个对象就会随着方法的出栈而销毁,这样就可以减少垃圾回收的压力。 如方法逃逸。 逃逸分析,是一种可以有效减少Java 程序中同步负载和内存堆分配压力的跨函数全局数据流分析算法。 通过逃逸
阅读全文
计算机网络知识整理
摘要:一 OSI与TCP/IP各层的结构与功能,都有哪些协议 五层协议的体系结构 学习计算机网络时我们一般采用折中的办法,也就是中和OSI和TCP/IP的优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚。 二 ICMP协议到底属于哪一层 ping命令就是利用的ICMP协议; ICMP协议
阅读全文
SpringBoot启动流程及其原理
摘要:SpringBoot启动原理精简版 https://www.cnblogs.com/theRhyme/p/how-does-springboot-start.html Spring Boot、Spring MVC 和 Spring 有什么区别? 分别描述各自的特征: Spring 框架就像一个家族,
阅读全文
CAP与Base理论
摘要:分布一致性的提出 在分布式系统中要解决的一个重要问题就是数据的复制。在我们的日常开发经验中,相信很多开发人员都遇到过这样的问题:假设客户端C1将系统中的一个值K由V1更新为V2,但客户端C2无法立即读取到K的最新值,需要在一段时间之后才能读取到。这很正常,因为数据库复制之间存在延时。 分布式系统对于
阅读全文
Java7与Java8中的HashMap和ConcurrentHashMap知识点总结
摘要:JAVA7中的ConcurrentHashMap简介 Java7中的ConcurrentHashMap底层逻辑结构 JAVA8中的ConcurrentHashMap 个人的理解 HashMap核心数据结构之一Node (重点)HashMap的基本方法原理 HashMap为什么链表长度大于8就要转红黑
阅读全文
Java synchronized实现原理总结和偏向锁、轻量锁、重量锁、自旋锁
摘要:synchronized实现同步的基础 Java中的每一个对象都可以作为锁。具体表现为以下3种形式。 对于普通同步方法,锁是当前实例对象(this)。 对于静态同步方法,锁是当前类的Class对象。 对于同步方法块,锁是synchonized括号里配置的对象。 synchronized原理 (重点)
阅读全文
ClassLoader类加载器 & Java类加载机制 & 破坏双亲委托机制
摘要:ClassLoader类加载器 Java 中的类加载器大致可以分成两类: 一类是系统提供的: 引导类加载器(Bootstrap classloader):它用来加载 Java 的核心库(如rt.jar),是用原生代码而不是java来实现的,并不继承自java.lang.ClassLoader,除此之
阅读全文
JavaGC垃圾回收机制和常见垃圾回收算法
摘要:Java GC是在什么时候,对什么东西,做了什么事情?” 什么位置:大部分在堆中,还有方法区!!方法区的垃圾收集主要回收两部分内容:废弃常量和无用的类,当满了之后同样触发FullGC, HotSpot1.8之前由永久代实现,1.8已经移到元空间,元空间并不在虚拟机中,而是使用本地内存。 什么时候:程
阅读全文
常用正则表达式
摘要:第一个字符为中文或英文字母,只包含中文、字母、数字、下划线、连字符"-" 的字符串 无空格,"^"表示字符串开头,"$"表示字符串结尾,"*"表示前面的子表达式"[A-Za-z\u4e00-\u9fa50-9_\-]"字母、中文、数字、下划线、连字符"-" 重复0次或更多次 ^[A-Za-z\u4e
阅读全文
SpringBoot RabbitMQ 延迟队列代码实现
摘要:场景 用户下单后,如果30min未支付,则删除该订单,这时候就要可以用延迟队列 准备 利用rabbitmq_delayed_message_exchange插件; 首先下载该插件:https://www.rabbitmq.com/community-plugins.html 然后把该插件放到rabb
阅读全文
Java线程状态、线程start方法源码、多线程、Java线程池、如何停止一个线程
摘要:下面将依次介绍: 1. 线程状态、Java线程状态和线程池状态 2. start方法源码 3. 什么是线程池? 4. 线程池的工作原理和使用线程池的好处 5. ThreadPoolExecutor中的Worker,线程池底层实现原理 6. 线程池工具类如Executors等 7. 如何停止一个线程(
阅读全文
Java内存模型,为啥线程要有自己的本地内存,CPU高速缓存
摘要:首先Java内存模型不是“JVM 的内存模型”; Java线程之间的通信采用的是共享内存模型,这里提到的共享内存模型指的就是Java内存模型(简称JMM),JMM决定一个线程对共享变量的写入何时对另一个线程可见。 从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内
阅读全文
Java内存模型中volatile关键字的作用
摘要:JAVA内存模型,为啥线程要有自己的本地内存,CPU高速缓存 volatile作用总结: 1. 强制线程从公共内存中取得变量的值,而不是从线程的私有的本地内存(如CPU高速缓存)中,volatile修饰的变量不具有原子性(修改一个变量的值不能同步)。 2. 保证volatile修饰的变量在被一个线程
阅读全文
Java内存模型、JVM内存结构和Java对象模型
摘要:JVM内存结构 我们都知道,Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途。其中有些区域随着虚拟机进程的启动而存在,而有些区域则依赖用户线程的启动和结束而建立和销毁。在《Java虚拟机规范(Java SE 8)》
阅读全文
搞定springboot项目连接远程服务器上kafka遇到的坑以及完整的例子
摘要:版本 遇到的坑 telnet一下云服务器的9092端口没有响应,然后看云服务器安全组里也添加了啊,netstat也看到9092被监听,到底咋回事? 原来是kafka配置文件的问题,导致9092端口未被正确监听,ip地址的问题就是要绑定kafka服务器的ip地址。 注意下面红色三项配置很重要,解决了我
阅读全文
MongoDB导出与导入远程Linux服务器上的数据
摘要:场景 简单方案 工具 导出数据 导入数据 总结 场景 将远程服务器A上的MongoDB数据库test下的集合people导入到服务器B数据库test的集合people_test下。 简单方案 先将A服务器数据导出,然后再执行导入到B服务器。 下面的导入和导出操作,均是在git bash下执行,如果是
阅读全文
DeferredResult使用方式和场景
摘要:为什么使用DeferredResult? 场景 Demo代码 测试 1. 超时 2. 进行setResult 为什么使用DeferredResult? API接口需要在指定时间内将异步操作的结果同步返回给前端时; Controller处理耗时任务,并且需要耗时任务的返回结果时; 当一个请求到达API
阅读全文