![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
java基础知识
文章平均质量分 91
包含java相关基础的文档
辽宁吴奇隆
java程序员一枚
展开
-
MySQL InnoDB的MVCC实现机制
MVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。mvcc - @百度百科MVCC在MySQL InnoDB中的实现主要是为了提高数据库并发性能,用更好的方式去处理读-写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读在学习MVCC多版本并发控制之前,我们必须先了解一下,什么是MySQL InnoDB下的当前读和快照读?当前读。转载 2022-09-23 16:33:48 · 314 阅读 · 1 评论 -
Redis事务详解
Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。原创 2022-09-23 11:43:48 · 502 阅读 · 0 评论 -
总结git常用命令
git常用命令原创 2022-08-12 10:13:41 · 263 阅读 · 0 评论 -
创建并部署自签名的 SSL 证书到 Nginx
自签名的 SSL 证书(self-signed SSL certificate),就是未经过权威第三方认证的 SSL 证书,常常用作测试 https 连接之用。当用户访问使用这种 SSL 证书的网站时,往往会被提示“该网站的 SSL 证书未被认证!”。使用 CloudFlare 的 CDN 加速可以解决这个问题,CloudFlare 可以将你的网站的内容缓存到其分布全球的 CDN 节点上,而当用户...原创 2016-01-15 15:07:04 · 661 阅读 · 0 评论 -
HTTPS 与 HTTP2 协议分析
HTTPS协议原理分析HTTPS协议需要解决的问题HTTPS作为安全协议而诞生,那么就不得不面对以下两大安全问题:身份验证确保通信双方身份的真实性。直白一些,A希望与B通信,A如何确认B的身份不是由C伪造的。(由C伪造B的身份与A通信,称为中间人攻击)通信加密通信的机密性、完整性依赖于算法与密钥,通信双方是如何选择算法与密钥的。能同时解决转载 2017-03-22 11:18:59 · 322 阅读 · 0 评论 -
tomcat一闪而过
遇到很多次运行startup.bat后,一个窗口一闪而过的问题,但是从来没去纠正怎样修改配置才是正确的,现在从网上查阅的资料整理如下:tomcat在启动时,会读取环境变量的信息,需要一个CATALINA_HOME 与JAVA_HOME的信息,CATALINA_HOME即tomcat的主目录,JAVA_HOME即java安装的主目录,jdk的主目录。首先,要在环境变量处,配置JAVA_HOM转载 2016-01-05 15:18:23 · 270 阅读 · 0 评论 -
别再用if-else了,用注解去代替它吧
策略模式经常在网上看到一些名为“别再if-else走天下了”,“教你干掉if-else”等之类的文章,大部分都会讲到用策略模式去代替if-else。策略模式实现的方式也大同小异。主要是定义统一行为(接口或抽象类),并实现不同策略下的处理逻辑(对应实现类)。客户端使用时自己选择相应的处理类,利用工厂或其他方式。注解实现本文要说的是用注解实现策略模式的方式,以及一些注意点。话不多说,还是以最常 见的订单处理为例。首先定义这样一个订单实体类:@Datapublic class Order原创 2020-09-25 10:22:18 · 30416 阅读 · 0 评论 -
高并发场景下,如何保证缓存与数据库一致性?
面试题:高并发场景下,如何保证缓存与数据库一致性?问题分析我们日常开发中,对于缓存用的最多的场景就像下图一样,可能仅仅是对数据进行缓存,减轻数据库压力,缩短接口响应时间。这种方案在不需要考虑高并发得去写缓存,高并发得读写缓存时,是不会有问题,但是如果是在高并发场景下,要保证缓存和数据库的一致性,至少需要解决以下问题:高并发写时的数据不一致问题高并发读写时,请求执行各步骤的顺序是不可控的。假设此时有一个请求A,B都在在执行写流程,请求A是需要将某个数据改成1,请求B是需要将某个数据改为原创 2020-09-18 10:06:20 · 42087 阅读 · 3 评论 -
介绍一款简单好用Http客户端OkHttp
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结一. 基本的组件OkHttpClient它类似于一个浏览器,在应用中应该全局唯一Request它表示一次Http请求,可以设置url地址,请求头等信息RequestBody它表示http请求体Response它表示一次...............原创 2022-04-20 09:41:04 · 1418 阅读 · 0 评论 -
G1回收器
目录前言一、G1的适用场景和特点1:适用场景2:特点二:理解G1的运行过程1:G1的Heap划分2:G1收集器运行:标记,回收.三:G1相关参数四:日志分析五:优化建议前言G1 GC(垃圾优先型垃圾回收器)适用于Java HotSpotVM 的低停顿、面向服务器的高可用分代式垃圾回收器。G1 GC使用并发和并行阶段实现其目标暂停时间,并保持良好的吞吐量。G1在jdk7u04中作为正式版发布,在jdk6U14中作为测试版发布,jdk6使用G1需要使用-XX:原创 2021-12-14 10:38:40 · 147 阅读 · 0 评论 -
详解 TCP 连接的“ 三次握手 ”与“ 四次挥手
TCP connection客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西;由于TCP不存在连接的概念,只存在请求和响应,请求和响应都是数据包,它们之间都是经过由TCP创建的一个从客户端发起,服务器接收的类似连接的通道,这个连接可以一直保持,http请求是在这个连接的基础上发送的;在一个TCP连接上是可以发送多个http请求的,不同的版本这个模式不一样。在HTTP/1.0中这个TCP连接是在http请求创建的时候同...转载 2021-01-06 14:29:32 · 122 阅读 · 0 评论 -
Spring的重试机制:浅谈@Retryable和@Recover注解
Spring的重试机制:浅谈@Retryable和@Recover注解 在我们的日常开发中,经查会遇到调用接口失败的情况,这时候就需要通过一些方法来进行重试,比如通过while循环手动重复调用或是通过JDK/CGLib动态代理的方式来进行重试。但是这种方法比较笨重,且对原有逻辑代码的入侵性比较大。while-retrycglib-retry 实际上,Spring已经为我们提供了封装好的重试功能,spring-retry,使我们可以通过@Retryable和@Reco..原创 2020-12-21 10:46:04 · 4272 阅读 · 3 评论 -
【分布式】全局唯一ID生成策略
系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结。在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。比如在美团点评的金融、支付、餐饮、酒店、猫眼电影等产品的系统中,数据日渐增长,对数据库的分库分表后需要有一个唯一ID来标识一条数据或消息,数据库的自增ID显然不能满足需求;特别一点的如订单、骑手、优惠券也都需要有唯一ID做标识。此时一个能够生成全局唯一ID的系统是非常必要的。而生成ID的方法有很多,适应不同的场景、需求以及性能要求。所以有些比较复杂的系统会有多个转载 2020-11-27 10:15:42 · 250 阅读 · 0 评论 -
互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景
前言生活中用到的锁,用途都比较简单粗暴,上锁基本是为了防止外人进来、电动车被偷等等。但生活中也不是没有 BUG 的,比如加锁的电动车在「广西 - 窃·格瓦拉」面前,锁就是形同虚设,只要他愿意,他就可以轻轻松松地把你电动车给「顺走」,不然打工怎么会是他这辈子不可能的事情呢?牛逼之人,必有牛逼之处。那在编程世界里,「锁」更是五花八门,多种多样,每种锁的加锁开销以及应用场景也可能会不同。如何用好锁,也是程序员的基本素养之一了。高并发的场景下,如果选对了合适的锁,则会大大提高系统的性能,否则..转载 2020-10-23 14:26:16 · 105 阅读 · 0 评论 -
Spring事务实现原理
对于一个应用而言,事务的使用基本是不可避免的。虽然Spring给我们提供了开箱即用的事务功能——@Transactional。但是,自带的事务功能却也存在控制粒度不够的缺点。更糟糕的是,@Transactional在某些情况下就失效了。可能一些读者baidu/google一下解决办法后,失效的问题确实解决了。但是由于不了解底层的原理,这样的问题可能在今后的工作中往复出现。本文就为大家揭开@Transactional下的秘密。原生的事务管理在没有Spring存在的时候,事务就已经诞生了...原创 2020-09-10 09:39:51 · 43319 阅读 · 0 评论 -
趣谈唯一邀请码生成方法
趣谈唯一邀请码生成方法前段时间项目上需要生成唯一邀请码!嘿嘿,多简单的一件事,心里就已默默将代码写了一遍。但小小的邀请码生成却也小有乾坤,这就是后话了。一、最简单的实现很多人肯定都和我一开始一样!嘿嘿,这还不简单,26个字母+10个数字,去掉容易混淆的,O、0、I、1等字符就剩下32个, /** * 随机字符串 */ private static final char[] CHARS = new char[] {'F..转载 2020-09-14 09:49:29 · 41337 阅读 · 10 评论 -
java面试点总结
JAVA开发六大原则单一原则 : 一个类或一个方法只负责一件事情 里斯替换原则: 子类不应该重写父类已实现的方法,重载不应该比父类的参数更少 依赖倒置原则: 面向接口编程.(面向接口更能添加程序的可扩展性) 接口隔离原则: 接口中的方法应该细分,要合理的隔离开不同的功能到不同的接口中. 迪米特原则: 高内聚低耦合 开闭原则: 对修改关闭,对扩展开放总结: 用抽象构建框架,用实现扩展细节抽象类和接口的对比参数 抽象类 接口 默认的方法实现 它可以有默认的方法实现原创 2020-09-17 11:46:21 · 37461 阅读 · 0 评论 -
谈一谈你对HashMap的理解?
HashMap的原理也是大厂面试中经常会涉及的问题,同时也是工作中常用到的Java容器,本文主要通过对以下问题进行分析讲解,来帮助大家理解HashMap的原理。1.HashMap添加一个键值对的过程是怎么样的?2.为什么说HashMap不是线程安全的?3.为什么要一起重写hashCode()和equal()方法?HashMap添加一个键值对的过程是怎么样的?这是网上找的一张流程图,可以结合着步骤来看这个流程图,了解添加键值对的过程。1.初始化table判断table是否为空或原创 2020-09-18 10:02:54 · 37939 阅读 · 0 评论 -
说一说你对synchronized锁的理解?
synchronized锁的原理也是大厂面试中经常会涉及的问题,本文主要通过对以下问题进行分析讲解,来帮助大家理解synchronized锁的原理。1.synchronized锁是什么?锁的对象是什么?2.偏向锁,轻量级锁,重量级锁的执行流程是怎样的?3.为什么说是轻量级,重量级锁是不公平的?4.重量级锁为什么需要自旋操作?5.什么时候会发生锁升级,锁降级?6.偏向锁,轻量锁,重量锁的适用场景,优缺点是什么?1.synchronized锁是什么?锁的对象是什么?synchro原创 2020-09-18 10:03:41 · 38875 阅读 · 2 评论 -
Java内存区域怎么划分的?
Java内存区域怎么划分的?运行时数据区域包含以下五个区域:程序计数器,Java虚拟机栈,本地方法栈,堆,方法区(其中前三个区域各线程私有,相互独立,后面两个区域所有线程共享)线程私用的部分(Java虚拟机栈,本地方法栈,程序计数器)Java虚拟机栈执行一个Java方法时,虚拟机都会创建一个栈帧,来存储局部变量表,操作数栈等,方法调用完毕后会对栈帧从虚拟机栈中移除。局部变量表中存储了Java基本类型,对象引用(可以是对象的存储地址,也可以是代表对象的句柄等)和returnAddress.原创 2020-09-18 15:12:57 · 37401 阅读 · 0 评论