肝铁侠笔记
文章平均质量分 74
肝铁侠的小笔记,涵盖你一定需要的基础理论知识以及项目经验,分享给由许哟啊的同学
肝铁侠
行百步半九十。
展开
-
Dubbo3
Apache Dubbo 是一款分布式微服务开发框架,它提供了 **RPC通信** 与 **微服务治理** 两大关键能力。曾经基于各个微服务之间的接口,我们需要通过HTTP+restful或者WebService等调用方式来进行服务之间的通信进行数据交互,而Dubbo采用的是分布式SOA(服务规范体系)服务治理方案,通过RPC(远程网络通讯协议)远程服务调用。......原创 2022-06-05 23:47:48 · 1595 阅读 · 4 评论 -
算法基础之时间复杂度和空间复杂度
复杂度分析是为了获取到如何更快地处理和解决现实场景中我们所遇到的问题,因为我们需要对效率和资源消耗有一定的要求。原创 2022-05-04 09:00:00 · 545 阅读 · 6 评论 -
MYSQL之高性能索引
像JPA、MyBatis-Plus这些简单的ORM关系映射框架的都有现成的方法调用,在我们的实际工作业务场景这些框架的基础功能根本满足不了,需要自己写一些复杂的SQL或者维护原系统中前人写下的复杂SQL。原创 2022-04-21 00:07:58 · 1139 阅读 · 6 评论 -
MYSQL聚簇索引
首先我们要知道的,聚簇索引它并不是一种单纯的索引类型,而是一种数据存储方式。聚簇表示的意思是数据行和相邻的键值紧凑地存储在一起。不同的存储引擎所支持的索引是不同的,所以不是所有的存储引擎都支持聚簇索引。如果你已经对MYSQL使用的索引数据结构为B+树并且知道了B+数的存储形式的话,就会知道B+树的叶子节点存储了我们想要的数据,而非叶子节点是不存储数据的,仅用作索引。而针对这个问题可能你在面试的时候会经常被问到:MYSQL的索引为什么使用B+树而不使用B树。对于MYSQL而言,我们常用的数据存储引擎是IN原创 2022-01-16 19:23:30 · 1272 阅读 · 4 评论 -
HashMap和HashTable高频提问
HashMap通过 一行代码一行代码嚼烂之超详细注解手写HashMap 这篇博客我们详细地了解了HashMap的底层实现原理并且手动实现了一个HashMap。在JDK1.7中,HashMap单纯使用数组+链表的形式存储数据,通过容量和负载因子的限制在容量达到初始值的0.75倍时,执行扩容。通过计算hash值决定新进来的元素在HashMap中的数组中的哪一条链表上。当hash碰撞频繁,将导致一条链表足够的长,查找时间复杂度为O(n)。在JDK1.8中,对HashMap进行了优化,当hash碰撞严重时,写原创 2022-01-06 00:00:28 · 796 阅读 · 22 评论 -
synchronized 关键字和volatile关键字的作用和区别
synchronizedsynchronized 关键字是解决并发问题常用解决方案,有以下三种使用方式:①同步普通方法,锁的是当前对象。②同步静态方法,锁的是当前 Class 对象。③同步块,锁的是 () 中的对象。实现原理:JVM 是通过进入、退出对象监视器( Monitor )来实现对方法、同步块的同步的。具体实现是在编译之后在同步方法调用前加入一个 monitor.enter 指令,在退出方法和异常处插入 monitor.exit 的指令。其本质就是对一个对象监视器( Monitor原创 2021-12-26 18:51:53 · 532 阅读 · 0 评论 -
消息队列之RabbitMQ
什么是MQ?MQ是message queue的缩写,本质上是个队列,FIFO先入先出原则,队列中存放的是message,是一种跨进程的通信机制,用于上下游传递信息。在互联网程序架构中,MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了MQ以后,消息发送只需要依赖MQ,不用依赖于其他服务。为什么要用MQ?一、流量消锋如果我们的订单系统最多能够处理掉一万次订单,这个处理能力应付正常时段的下单是搓搓有余了,但是如果在高峰期,比如淘宝的双11活动,有超过一万次的下单操作,系统则是处理不了原创 2021-12-19 20:32:34 · 3011 阅读 · 36 评论 -
风靡IT圈的史诗级漏洞log4j2的产生原理及复现
文章目录前言环境准备攻击代码准备一、攻击服务准备二、攻击代码准备三、修改本地项目业务代码攻击效果展示项目日志打印结语前言注:本文仅供参考学习,不构成任何犯罪引导相信就在最近两天,不少IT圈的都在因为Log4j2,忙前忙后排查项目吧?写JAVA的都知道,Log4j是用来记录日志的,它的覆盖率之广以至于此次受影响的范围可以说是核弹级别的影响了。这个漏洞其实是取决于Log4j的一种Lookup机制,就是当我们做日志输出,出现占位符的时候,通过一些特殊的命令符号,可以执行一些程序代码。接下来我们就来复原创 2021-12-12 15:56:07 · 8635 阅读 · 59 评论 -
Redis五种数据结构及常用操作指令、Redis在JAVA中如何封装使用
Redis有五种基础数据结构,分别为:1、string(字符串)2、list(列表)3、hash(字典)4、set(集合)5、zset(有序集合)数据结构有八种分类,分别为:1、数组2、栈3、队列4、链表5、树6、散列表7、堆8、图Java有八种基本数据类型(没什么关系但是顺带一提????),分别为:1、byte(位)2、short(短整数)3、int(整数)4、long(长整数)5、float(单精度)6、double(双精度)7、char(字符)8、bool原创 2021-11-21 21:15:49 · 8041 阅读 · 44 评论 -
微服务开发框架——SpringCloud组件简介
SpringCloud是在SpringBoot的基础上构建的,用于快速构建分布式系统的通用模式的工具集。SpringCloud优点1、约定优于配置。去繁从简,延续SpringBoot的优点。解决分布式系统的冗余问题。2、开箱即用,快速启动。3、组件丰富,功能齐全。SpringCloud为微服务架构提供了非常完整的支持。例如配置管理、服务发现、断路器、微服务网关等等。4、灵活。它的组成部分是解耦的,我们可以灵活的选取我们想要使用的技术。…(更多优点等待你的挖掘)SpringCloud缺点我们要原创 2021-11-06 22:53:14 · 3670 阅读 · 4 评论 -
JAVA进阶篇——一行代码一行代码嚼烂之超详细注解手写HashMap(二)
HashMap用得顺手吧?不知道让你手写一个HashMap你能不能写出来呢,今天为大家带来的是手写HashMap,一行代码一行代码地嚼一下,看完这个再去看HashMap的源码,帮助你深度理解HashMap的原理。????这里还是很推荐大家去看一下HashMap的源码的,因为所涉及的知识面很广泛,可谓是受益匪浅。话不多说,咱们开始看????。再次之前,推荐大家先去看完这一篇博客JAVA进阶篇——HashMap底层实现解析(一),这篇博客是基于手动写HashMap代码的底层理论,会更加帮助你加深理解。在JD原创 2021-09-27 22:29:11 · 517 阅读 · 10 评论 -
数据结构极其拓展篇(三)——树及JAVA创建二叉树
终于抽出空了,又是一年一度的中秋节。????明月伴你我,祝大家事事皆圆满。????那么今天为大家带来一篇JAVA数据结构的树,树在JAVA中的存在极其重要,也是面试中的高频点。一些树的基本名词,以及更为基础的理论,可在这一篇博客中查看数据结构及其拓展篇(二)。那么今天我给大家带来的是:????二叉树????????二叉查找树????????红黑树????二叉树一、首先我们得知道什么是二叉树:①即每个节点至多有两颗树,即每个节点的度不大于二②二叉树的子树有左右之分,其顺序是不能颠倒的二叉树作原创 2021-09-21 20:55:08 · 598 阅读 · 17 评论 -
JAVA进阶篇——线程+实例演示(附商品销售实例源码)
何为线程?简单来说,打开你电脑的任务管理器,在进程选项卡中,可以看到你电脑上一个一个正在运行的程序,我们可以把这里的每一个程序理解为一个进程,而进程是受系统管理的基本单元。那么啥是线程呢?我们可以理解为一个进程里面包含了很多个线程。而一个线程可以当作这个进程的一个子任务。就比如说你的微信,在你刷朋友圈的同时,也可以接收消息,这就是两个线程在运行。我们为什么要用线程呢?我们来看看下面这张图。那么我们用了线程以后呢?由图可知,任务二并不需要按照我们平常所写地Java代码从上到下执行,需要等待10S,原创 2021-09-17 23:30:19 · 568 阅读 · 17 评论 -
JAVA进阶篇——HashMap底层实现解析(一)
倘若有一天你去面试的时候,面试官问起了你HashMap的底层实现原理,你怎么办?是一脸懵逼支支吾吾吗?再让你自己通过代码实现你自己的HashMap的时候,难道完全破防?读完这篇文章,让我们对这个情况say no!首先我们来通过下面的图看看JDK1.7时代的HashMap是如何通过数组+链表的形式进行值储存的。由图中的描述可以清楚地看出来,当数组第一次被定义并且第一次被赋值的时候,这个时候的操作很简单,就是将这个值赋值到我们的table数组上面去。这个操作完成以后,然后我们进行二次put:如图左下原创 2021-09-12 20:38:05 · 1301 阅读 · 29 评论 -
JAVA面试篇之SpringBoot
什么是SpringBoot?为什么要用SpringBoot?它是用来简化spring应用的初始搭建以及开发过程,并且使用特定的方式来进行配置(properties或yml文件),创建独立的spring应用程序,由@SpringBootApplication注解下的main方法运行,嵌入Tomcat无需部署war文件,简化Maven的配置,自动配置spring添加对应功能的starter自动化配置。SpringBoot用来简化spring应用开发,约定大于配置,去繁从简,just run就可以创建一个独立的原创 2021-09-11 20:22:07 · 434 阅读 · 0 评论 -
❤【爆肝万字】手把手教你SpringBoot+MyBatis+jQuery+HTML5从0开始写网页一学就会!(内附源码)❤
今天带给大家的是SpringBoot+MyBatis+jQuery+HTML5+CSS简单实现前后端交互,保证干货满满,看完你就可以动手写你自己的程序!首先得需要你创建一个SpringBoot项目,具体怎么创建这里久不多说啦。其次,你的创建一张这样一张表用于连接测试功能,很简单的一张表,当然只是用于功能测试,实际业务中可没有这么简单的表哟。创建完成以后你pom.xm文件中的中应该有如下引入依赖: <!--springWeb--> <dependenc原创 2021-09-07 23:50:17 · 1358 阅读 · 6 评论 -
数据结构及其拓展篇(二)
常用的数据结构分别有数组、堆栈、队列、链表、树、图、字典树、哈希表。上一期的数据结构及其拓展篇数据结构及其拓展篇(一)中,我们讲过了数组(Array)、栈(Stack)、队列,那么今天我们就来讲讲链表和树。一、链表链表也是线性结构的,看起来和数组相似,但是他们的内存的分配方式、内部的结构以及插入和删除的方式都不一样。相信大家都知道,数组的查找比较方便,可以直接通过下标查找,但是删除或者插入某些元素就比较麻烦了。链表却与之相反,删除和插入很快,但是查找元素却很慢。那么为了综合这两种的好处,就产生了树,原创 2021-09-04 20:20:12 · 346 阅读 · 5 评论 -
数据结构及其拓展篇(一)
所有技术的应用都离不开它的底层实现,今天博主给大家带来一期数据结构的分享,因内容量较大,本篇分享涉及数组极其拓展ArrayList、栈极其拓展撤回、队列及其拓展消息队列。余下的数据结构及拓展分享写在下一期里,话不多说,说干就干!常用的数据结构分别有数组、堆栈、队列、链表、树、图、字典树、哈希表,那么接下来我们来详细地一个一个地看看他们的应用以及拓展。一、数组Array——集合ArrayList数组(Array) 不得不说是大家在学习之初就已经接触过再平凡不过的了吧,像栈和队列都是由数组衍生出来的。下原创 2021-08-29 21:53:53 · 613 阅读 · 0 评论 -
答应我,下次再被问到垃圾回收器,别再支支吾吾了!
首先,JVM全称:Java Virtual Machine,也就是我们常说的Java虚拟机,通过在实际的计算机上仿真模拟各种计算机功能来实现的,简单来说,JVM就是用来解析和运行Java程序的。简单地介绍完JVM以后,接下来我们来看看JVM的内存结构模型:以上就是JVM的内存结构模型了,那么图中的区块又是什么意思呢?方法区: 用于存储虚拟机加载的类信息,常量,静态变量等数据。堆: 存放对象的实例,所有的对象和数组都要在堆上分配,是JVM锁管理的内存中最大的一块区域!栈: Java方法锁执行的内存原创 2021-08-22 20:22:38 · 612 阅读 · 10 评论 -
手把手教你从0开始搭建花一个小时学会使用mybatis
今天博主分享一篇从0开始的maven项目,让你一个小时学会使用mybatis!首先创建一个Maven项目。为你的Macen项目命名并选择好路径,点击Next选择你的Maven库。创建完成以后,你的项目是这样的。接下来需要我们在src目录下创建对应的包。创建完成后,项目中各个包的分布如图所示。在java包下创建这次我们要使用的user包,在resources包下创建mybatis-config.xml文件。接下来就要开始配置mybatis了,打开项目中的pom.xml文件,引入依赖原创 2021-08-17 18:36:07 · 229 阅读 · 0 评论 -
MYSQL的一级缓存二级缓存
MYSQL面试篇一之mysql的一级缓存和二级缓存一级缓存:一级缓存也称本地缓存,session级别的缓存,一级缓存是默认开启的,与数据库同一次的会话期间查询到的数据会放在本地缓存中,如果有需要获取相同的数据,则直接从缓存中取,就不会再次查询数据库。在日常的开发中,经常会有相同的sql执行多次的情况,mybatis就提供了一级缓存来优化这些查询,避免多次请求数据库,重点是它的作用域为一次sqlSession会话。二级缓存:二级缓存是全局缓存,是一个基于namespace级别的缓存,作用域更为广泛,不原创 2021-08-11 00:34:57 · 5021 阅读 · 0 评论 -
Java发送邮件一行代码解决
今天博主带来一期超详细的邮件发送实操内容,希望能get到您的点赞!话不多说,直接进入正题。在实践开始前,这里需要提到Hutool,Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率的工具类。那么现在正式进入实战!首先创建一个Maven项目,创建成功以后,在pom.xml文件中引入相应的依赖。引入依赖成功以后,你将会在Libraries中看到如下的jar包就证明引入成功了。接下来我们就可以开始着手写代码啦!在正式开始前,我们还需要在src/main/r原创 2021-08-12 13:53:57 · 1045 阅读 · 9 评论 -
你必须要知道的【雪崩、穿透、预热、更新、降级】
以前总觉得,写得一手好Java代码,走遍天下都不怕,后来随着时间得推移,才意识到程序的高效性流畅性才是最重要最重要的。 所有的技术都是前人不断实践突破革新留下的产物,它们的存在以及运用一定有它的道理。 于是博主最近将重心向程序的高效性和流畅性的基础学习上偏移了一下,而今天为大家分享的就是Redis在面对小数据量下的大量数据请求的时候,所可能遇到的一些问题。首先我们要知道什么是Redis,Redis能干嘛?Redis全程:Remote Dictionary Server,它的字面意思是远程+字典+服务,本原创 2021-08-14 13:24:05 · 1313 阅读 · 4 评论 -
MYSQL进阶之事务
首先我们要知道事务是什么,它是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;由一步或几步数据库操作序列组成逻辑执行单元一起向系统提交,要么全部都执行、要么都不执行;事务是一组不可再分割的操作集合。其次我们要知道事务的四大特性:①原子性:事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做。②一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。③隔离性:一个事务的执行不能被其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发原创 2021-08-11 14:48:10 · 1425 阅读 · 14 评论