自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 资源 (4)
  • 收藏
  • 关注

原创 git再学习

马上去当实习生了,该对git系统学习一波了(不能只会clone,push,pull吧)哈哈哈。git工作流程git底层三部分:工作区、暂存区和版本库工作区:就是你在电脑里能看到的目录。暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。图中左侧为工作区,右侧为版本库。在版本库中标记为 “index

2021-05-05 16:04:18 182

原创 Nginx的安装及其常用命令

介绍1.什么是nginx是一种高性能的HTTP和反向代理的web服务器,特点是占有内存少,并发能力强,nginx的网站用户有很多大公司诸如百度,京东、新浪、网易等等nginx专为性能优化开发,性能是最重要的考量,实现上非常注重效率。能经受高达50000个并发连接数2.反向代理2.1正向代理如果把Internet想象成一个巨大的资源库,则局域网中的客户端要访问internet,则需要通过代理服务器来访问这种代理称为正向代理,这种代理服务器称作正向代理,例如vpn2.2反向代理用户把请求发送到反

2021-05-05 15:31:23 456

原创 除了sql注入还有哪些常见的网络攻击?

引入主题上一次面试一家公司的安全部门,基础问完之后问到了你了解过哪些网络安全攻击?作为一个大三的学生,也就是在开发的时候听人说到过sql注入,也简单了解了一下,至于xss更是只知其名,平时忽略了网络安全方面的了解。总结一下比较常见的三种网络攻击方式。SQL注入将SQL语句插入到web表单中或URL中,来让服务器执行恶意SQL语句。解决方法是,使用参数化的SQL,不要使用拼装SQL;可以通过正则表达式对用户的输入进行校验;可以将单引号和双横杠(注释符)进行转换。建议使用#{},而不是${}。#{}

2021-04-24 19:18:45 927 1

原创 spring的依赖注入原来是分三种方式的,你知道吗?

引入话题,今天面试了一家北京的公司,虽然公司规模不大,但是问的问题特别有含金量,特别深入,volite,cas联系到操作系统的那种,但是让我惋惜的是我居然没留意到依赖注入是分三种的…可能是做小项目都是用的最简单那一种。没有留意。现在面试结束总结一波spring的依赖注入。DI三种方式1.通过构造器来注入;2.通过setter方法来注入;3.通过filed变量来注入;Constructorprivate DA A;private DB B;private DC C;@Autowiredp

2021-04-20 20:51:15 192

原创 tomcat启动之后都做了什么?

tomcat流程起始​ 刚开始做项目的时候就觉得tomcat这个东西很神奇,就给项目打一个包就能当一个网站来访问,那时候就产生了一个疑惑,为什么tomcat要用servlet来搭配着使用才行,而且为什么servlet没有主方法就能直接运行出结果来,当时接触java时间并不是很长,对这些问题也没有深究;​ 然后后来学习springboot的时候就了解到Springboot里面是内置了tomcat的,当时就想tomcat是不是就是用java来写的,于是我就百度了一下,发现tomcat确实是java来写的。

2021-04-15 10:37:24 887

原创 mysql常见的大表优化

常见的优化方法如下:限定数据范围:限定条件,不要全表查询读写分离:读写分库,主从,主写,从读垂直分表:拆分字段,一表变多表,可以让列数据变小,减少I/O次数,简化表结构,易于维护。但是主键冗余,需要管理冗余列,可能会引起join操作,事务处理复杂。水平分区:将库中数据,分为多个库,存在不同的服务器中,(比如可以根据id来存不同的库)...

2021-04-11 22:26:15 65

原创 使用tomcat启动的springmvc流程。(自己简要总结)

启动tomcat当tomcat启动之后,tomcat会自动读取web.xml配置文件(约定)。首先读取DispatcherServlet,还有其他配置文件的路径。DispatcherServlet的作用:使用springMVC时,java和前端对接的是Controller,而tomcat并不识别Controller,无法和前端沟通,所以需要一个中介。tomcat是支持访问servlet的,所以中介就是DispatcherServlet。由于dispatcherServlet和controller都是第三

2021-04-10 21:26:03 1981

原创 spring Bean的面试总结

Beanbean生命周期Bean 容器找配置文件找到bean的定义,使用反射创建bean实例有属性就调用set(),有名字就调用setName(),如果实现了 BeanClassLoaderAware 接口,调用 setBeanClassLoader()方法,传入 ClassLoader对象的实例,如果实现了其他 *.Aware接口,就调用相应的方法,如果有和加载这个 Bean 的 Spring 容器相关的BeanPostProcessor对象,执行postProcessBeforeInitializa

2021-04-03 14:20:54 250 2

原创 Rocket MQ常见问题总结

每一个mq都有的问题。顺序消费问题RocketMQ 在主题上是无序的、它只有在队列层面才是保证有序 的。普通顺序(推荐):消费者通过 同一个消费队列收到的消息是有顺序的 ,不同消息队列收到的消息则可能是无顺序的。普通顺序消息在 Broker 重启情况下不会保证消息顺序性 (短暂时间) 。严格顺序(实现代价太大): 消费者收到的 所有消息 均是有顺序的。严格顺序消息 即使在异常情况下也会保证消息的顺序性 。我们使用普通顺序模式,比如订单的创建,支付,发货三个消息不被分配在topic的同一个队列,就无

2021-03-25 22:23:28 310

原创 sql语句rank函数和dense_rank区别

rank定义:RANK()函数,顾名思义排名函数,可以对某一个字段进行排名,这里为什么和ROW_NUMBER()不一样那,ROW_NUMBER()是排序,当存在相同成绩的学生时,ROW_NUMBER()会依次进行排序,他们序号不相同,而Rank()则不一样出现相同的,他们的排名是一样的。看例子:dense_rank定义:DENSE_RANK()函数也是排名函数,和RANK()功能相似,也是对字段进行排名,那它和RANK()到底有什么不同那?看例子:...

2021-03-24 20:46:17 1196

原创 MVCC——增强行级锁

MVCC是什么?MVCC(Multi-Version Concurrency Control)即多版本并发控制。可重复读,读已提交会触发。MVCC的实现原理MVCC使得大部分支持行锁的事务引擎,不再单纯的使用行锁来进行数据库的并发控制,取而代之的是把数据库的行锁与行的多个版本结合起来,只需要很小的开销,就可以实现非锁定读,从而大大提高数据库系统的并发性能。InnoDB的MVCC,是通过在每行纪录后面保存两个隐藏的列来实现的。这两个列,一个保存了行的创建版本号,一个保存了行的删除版本号。每开始一个新的

2021-03-24 20:22:05 261

原创 redis—布隆过滤器

什么是缓存穿透?缓存穿透说简单点就是大量请求的 key 根本不存在于缓存中,导致请求直接到了数据库上,根本没有经过缓存这一层。举个例子:某个黑客故意制造我们缓存中不存在的 key 发起大量请求,导致大量请求落到数据库。有哪些解决办法?最基本的就是首先做好参数校验,一些不合法的参数请求直接抛出异常信息返回给客户端。比如查询的数据库 id 不能小于 0、传入的邮箱格式不对的时候直接返回错误消息给客户端等等。1)缓存无效 key如果缓存和数据库都查不到某个 key 的数据就写一个到 Redis 中去并设

2021-03-21 21:46:26 70

原创 redis的io多路复用技术

redis单线程为什么会那么快?主要有两点:1.内存操作2.io多路复用技术什么是io多路复用?一、简单理解就是:一个服务端进程可以同时处理多个套接字描述符。多路:多个客户端连接(连接就是套接字描述符)复用:使用单进程就能够实现同时处理多个客户端的连接以上是通过增加进程和线程的数量来并发处理多个套接字,免不了上下文切换的开销,而IO多路复用只需要一个进程就能够处理多个套接字,从而解决了上下文切换的问题。其发展可以分select->poll→epoll三个阶段来描述。二、如何简单理解

2021-03-21 21:05:59 1386

原创 ConcurrentHashMap,hashMap,TreeMap全总结(不看后悔哦)

JDK8中的HashMap与JDK7的HashMap有什么不一样?JDK8中新增了红黑树,JDK8是通过数组+链表+红黑树来实现的JDK7中链表的插入是用的头插法,而JDK8中则改为了尾插法JDK8中的因为使用了红黑树保证了插入和查询了效率,所以实际上JDK8中的Hash算法实现的复杂度降低了JDK8中数组扩容的条件也发了变化,只会判断是否当前元素个数是否超过了阈值,而不再判断当前put进来的元素对应的数组下标位置是否有值。JDK7中是先扩容再添加新元素,JDK8中是先添加新元素然后再扩容Ha

2021-03-15 20:26:47 527

原创 队列同步器(AQS)个人理解,通俗易懂

AQS到底是个什么东西???在家自学java并发编程的艺术,晦涩难懂,看到aqs的时候每个字都读懂了,看完之后完全不知道在说啥,大脑一片空白。今天拿起书本索性又看了几遍,有了点感悟,分享给大家!!!**要我个人理解就是一个用来构建自己的锁的jdk提供的框架。**如果你想构建自己的锁,你就定义一个类来继承AbstractQueuedSynchronizer实现它提供的方法就行了。下面是aqs提供的方法大致三类:独占式获取与释放同步状态、共享式获取与释放,同步状态和查询同步队列中的等待线程情况aqs的

2021-03-12 21:01:49 634

原创 Condition和object监视器的区别

1.先了解什么是监视器任意一个对象都拥有自己的监视器(monitor.enter–>monitor.exitd对应着获取锁和释放锁),当这个对象由同步块或者这个对象的同步方法调用时,执行方法的线程必须先获取到该对象的监视器才能进入同步块或者同步方法(即获取锁),而没有获取到监视器(执行该方法)的线程将会被阻塞在同步块和同步方法的入口处,进入BLOCKED状态。2.object监视器的整个流程1)使用wait()、notify()和notifyAll()时需要先对调用对象加锁。2)调用wait

2021-03-12 20:35:48 616 1

原创 手写简易线程池-----java(可直接运行,解释清晰)

## 可直接运行已测试1.先定义一个工作类(需要被运行的工作)public class Job implements Runnable { private String name; public String getName() { return name; } public Job(String name) { this.name = name; } public void setName(String name) {

2021-03-12 20:03:30 119 1

原创 synchronized,volite,lock接口分析以及锁的分类

ynochronizd和volatile关键字区别:volatile关键字解决的是变量在多个线程之间的可见性;而sychronized关键字解决的是多个线程之间访问共享资源的同步性。volatile只能用于修饰变量,而synchronized可以修饰方法,以及代码块。(volatile是线程同步的轻量级实现,所以volatile性能比synchronized要好,并且随着JDK新版本的发布,sychronized关键字在执行上得到很大的提升,在开发中使用synchronized关键字的比率还是比较大)

2021-03-11 15:36:33 428

原创 并发之锁升级(偏向锁,轻量级锁,重量级锁)大白话

锁的分类为了减少获得锁和释放锁带来的性能消耗,锁一共有4种状态,级别从低到高依次是:无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态,这几个状态会随着竞争情况逐渐升级。锁可以升级但不能降级.偏向锁——>轻量级锁偏向锁是在对象头的markWord和栈帧中的所记录存放一个偏向线程id,如果线程a获得了锁,则这个对象的对象头就存放偏向线程id(a),如果一个线程来获取锁,会先检查当前偏向线程id是否指向这个线程,如果是则可以获取,如果不是则去验证当前对象头是否标记为偏向锁如果不是就cas竞争,如果是就

2021-03-11 10:30:35 250

原创 leecode刷题总结--sql(二)

6.7窗口函数dense_rank() over(order by xxx desc ) as ‘rank’;89where (DepartmentId,Salary) in分组查max的话只能查出一个最高的。这样先查出每个部门最高的钱,再联表查,最高的钱和部门都满足的人。10连表查询用三个or可以得到所有情况,再进行去重。...

2021-03-10 22:55:59 114

原创 leecode刷题总结--sql(一)

1not exists查询。2Datediff日期操作。3distinct数据去重复。4order by *** desc;5sql语句的case语句。

2021-03-10 22:50:53 159

原创 leecode刷题总结--动态规划

1关键是知道第i个与第i-1之间的关系。用i=0的两种可能,得到i=1的两种可能,依次递推,一直到n的两种可能,在取两个可能的最大值。2要上一个,还是自立门户 贪心。3直接递归方法会超时,开一个数组存放。4缓存,使用Pair.creat(i,j)存储进hashmap;5到达i则只能从i-1,或者i-2过来。分别加上i-1,i-2的值取最小。6暂存更新一个最小值。就两种可能持股不持股,i和i-1的关系是,如果i要继续持股,则为max(i-1持股,i-1不持股-i的

2021-03-10 22:47:17 118

原创 leecode刷题总结--图

1只要返回入度为0的节点。2list<list<>>根据下标放该下标可以通向的地方,再根据深度遍历找到target,使用hashset来保证不会出现死循环。3dfs[i]遍历之后,回到当前i,需要删除list当前保存的值。list.remove保证不会出现 0-1-3,0-1-3-2-3的重复情况。4将每个下标可以通向的点放入list>里面。找到通向最多(记作max)的那个下标。(可能有多个)然后遍历找secondMax,如果点可以通向刚刚的下标则-1

2021-03-09 20:56:18 148

原创 一致性协议的四大算法-ZAB(四)

1. Zookeeper 架构作为一个优秀高效且可靠的分布式协调框架,ZooKeeper 在解决分布式数据一致性问题时并没有直接使用 Paxos ,而是专门定制了一致性协议叫做 ZAB(ZooKeeper Automic Broadcast) 原子广播协议,该协议能够很好地支持 崩溃恢复 。2. ZAB 中的三个角色和介绍 Paxos 一样,在介绍 ZAB 协议之前,我们首先来了解一下在 ZAB 中三个主要的角色,Leader 领导者、Follower跟随者、Observer观察者 。Leader

2021-03-09 20:50:42 308

原创 一致性协议的四大算法-Paxos 算法(三)

在 Paxos 中主要有三个角色,分别为 Proposer提案者、Acceptor表决者、Learner学习者。Paxos 算法和 2PC 一样,也有两个阶段,分别为 Prepare 和 accept 阶段。1. prepare 阶段Proposer提案者:负责提出 proposal,每个提案者在提出提案时都会首先获取到一个 具有全局唯一性的、递增的提案编号N,即在整个集群中是唯一的编号 N,然后将该编号赋予其要提出的提案,在第一阶段是只将提案编号发送给所有的表决者。Acceptor表决者:每个表决者

2021-03-09 20:47:23 197 3

原创 一致性协议的四大算法-3PC(二)

3PC(三阶段提交)CanCommit阶段:协调者向所有参与者发送 CanCommit 请求,参与者收到请求后会根据自身情况查看是否能执行事务,如果可以则返回 YES 响应并进入预备状态,否则返回 NO 。**PreCommit阶段:**协调者根据参与者返回的响应来决定是否可以进行下面的 PreCommit 操作。如果上面参与者返回的都是 YES,那么协调者将向所有参与者发送 PreCommit 预提交请求,参与者收到预提交请求后,会进行事务的执行操作,并将 Undo 和 Redo 信息写入事务日志中

2021-03-09 20:44:58 71

原创 一致性协议的四大算法-2PC(一)

2PC(两阶段提交)两阶段提交是一种保证分布式系统数据一致性的协议,现在很多数据库都是采用的两阶段提交协议来完成 分布式事务 的处理。我们所需要解决的是在分布式系统中,整个调用链中,我们所有服务的数据处理要么都成功要么都失败,即所有服务的 原子性问题 。在两阶段提交中,主要涉及到两个角色,分别是协调者和参与者。**第一阶段:**当要执行一个分布式事务的时候,事务发起者首先向协调者发起事务请求,然后协调者会给所有参与者发送 prepare 请求(其中包括事务内容)告诉参与者你们需要执行事务了,如果.

2021-03-08 20:10:20 124

原创 Dubbo 的负载均衡策略

在集群负载均衡时,Dubbo 提供了多种均衡策略,默认为 random 随机调用。可以自行扩展负载均衡策略1 Random LoadBalance(默认,基于权重的随机负载均衡机制)随机,按权重设置随机概率。在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。基于权重的随机负载均衡机制2 RoundRobin LoadBalance(不推荐,基于权重的轮询负载均衡机制)轮循,按公约后的权重设置轮循比率。存在慢的提供者累积请求的问题,比

2021-03-08 20:05:53 876

原创 jvm对象的完整创建过程

第一次使用 1.进行判断 java在new一个对象的时候,会先查看对象所属的类有没有被加载到内存,如果没有的话,就会先通过类的全限定名来加载。加载并初始化类完成后,再进行对象的创建工作。分为加载并初始化类和创建对象2.加载并初始化类java是使用双亲委派模型来进行类的加载的,所以在描述类加载过程前,我们先看一下它的工作过程: 双亲委托模型的工作过程是:如果一个类加载器(ClassLoader)收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委托给父类加载器去完成,每一个层次的类加载器

2021-03-08 20:01:14 357

原创 jvm四种引用的特点和示例

1.强引用以前我们使用的大部分引用实际上都是强引用,这是使用最普遍的引用。如果一个对象具有强引用,那就类似于必不可少的生活用品,垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题。 如String str = "abc"; List<String> list = new Arraylist<String>(); list.add(str);123 在list

2021-03-08 20:00:05 107

原创 各种垃圾收集器的优缺点及原理

Serial收集器针对新生代;采用复制算法;单线程收集;​ 进行垃圾收集时,必须暂停所有工作线程,直到完成;​ 即会"Stop The World";ParNew收集器ParNew垃圾收集器是Serial收集器的多线程版本。Parallel Scavenge收集器Parallel Scavenge垃圾收集器因为与吞吐量关系密切,也称为吞吐量收集器(A)、有一些特点与ParNew收集器相似新生代收集器;采用复制算法;多线程收集;(B)、主要特点是:它的关注点与其他收集器不同CMS

2021-03-08 19:56:40 704

原创 JVM内存模型总结

由上图可以清楚的看到JVM的内存空间分为3大部分:堆内存方法区栈内存其中栈内存可以再细分为java虚拟机栈和本地方法栈,堆内存可以划分为新生代和老年代,新生代中还可以再次划分为Eden区、From Survivor区和To Survivor区。其中一部分是线程共享的,包括 Java 堆和方法区;另一部分是线程私有的,包括虚拟机栈和本地方法栈,以及程序计数器这一小部分内存。堆内存(Heap)对于大多数应用来说,Java 堆(Java Heap)是Java 虚拟机所管理的内存中最大的一块。Ja.

2021-03-08 19:52:02 275

原创 虚拟机栈的特点和溢出情况

拟机栈(JVM Stack)描述的是java方法执行的内存模型:每个方法被执行的时候都会创建一个**“栈帧”,用于存储局部变量表(包括参数)、操作栈、方法出口等信息**。每个方法被调用到执行完的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏

2021-03-08 19:49:46 95

原创 单例模式实现方式汇总

2021-03-08 19:47:26 60

原创 leecode刷题总结--链表

快慢双指针,此处只判断node和node.next是因为node.next==null,则node.next.next空指针异常。2.循环之前保留前一个结点。3.删除a,a找不到前面的节点,于是把a.next的值传给a,删除a.next。4.遍历俩链表,把相加的余10值放入l1,将进位传递到下一位,注意两种l1,或l2为空的情况,最后遍历,是否有为10的,将其进位,若为最后一个则建立新结点。...

2021-03-08 19:44:17 120

原创 leecode刷题总结—栈

leecode-栈1.用栈的时候注意栈空,hashMap与栈结合进行匹配。2.定义了两个栈,使用栈与最小栈,最小栈只存放每次push进去的当前最小值。这样可以达到getMin为o(1)复杂度。3单调栈,如果入栈的比之前大则弹出直至比之前的小 遍历下一个 始终保持栈是单调递减的。4辅助栈,(入栈,)出栈,如果栈内剩余至少一个,就将这个字符放入辅助栈。栈相对容易,弄清楚最小栈,单调栈这几个概念,基本上可以秒easy和部分中等算法题。...

2021-03-07 21:21:58 86

原创 mysql全方位思维导图

2021-03-07 21:09:38 155

转载 java代理的三种实现

https://www.cnblogs.com/puyangsky/p/6218925.html

2021-03-06 11:47:45 44

原创 maven依赖提速好方法。

maven项目在pom.xml文件中添加依赖之后有时候等待半天都加载不好,这是因为需要从远在国外的中央仓库下载,但在我们中国可以使用阿里的镜像,速度大幅增加。在setting.xml文件中找到mirrors标签,在其中添加:<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/

2021-03-05 21:48:56 182

原创 Controller乱码解决方案

今天做项目遇到了一个奇怪的现象,contoller里面的中文字符变成了乱码。经过查阅资料发现如果没有设置method ={RequestMethod.GET}和method ={RequestMethod.POST}将出现乱码。这是可以写入produces = "application/json;charset=utf-8"语句,设置编码格式。即...

2021-03-05 21:46:24 760

4_JVM_8~11章.pdf

4_JVM_8~11章.pdf

2021-03-05

3_JVM_6~7章.pdf

3_JVM_6~7章.pdf

2021-03-05

2_JVM_3章下~5.pdf

2_JVM_3章下~5.pdf

2021-03-05

1_JVM_1~3章上.pdf

jvm详细知识梳理

2021-03-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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