自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 Java中的sleep, wait, yield, suspend和join方法

线程的状态线程有五种状态,分别为:新建、就绪、运行、阻塞、死亡。新建:当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态就绪:处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它已 具备了运行的条件,只是没分配到CPU资源运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态, run()方法定义了线 程的操作和功能阻塞:在某种特殊情况下,被人为挂起或执行输入输出操作时,让出 CPU 并临时中 止自己的执行,进入阻塞状态死亡:线程完成了它的

2020-07-17 16:15:32 608

原创 Redis的优缺点

优点redis的性能极高,支持超过100k+每秒的读写频率丰富的数据类型。redis有五种数据类型:String、hash、Lists、、Set、Order Set。原子性。redis的所有操作都是具有原子性的。同时,redis还支持对几个操作全并后的原子性执行。丰富的特性。redis还支持publis、subscribe、通知、key过期等等特性缺点由于时内存数据库,所以单台机器存储的数据量跟机器本身的内存大小有关。如果进行完整重同步,由于需要生成rdb文件并进行传输,会占用主机cpu

2020-07-15 14:47:25 245

原创 缓存穿透、缓存击穿和缓存雪崩

缓存穿透缓存穿透是指是指缓存和数据库中都没有数据 ,而此时用户不断的发起请求 ,比如发起id=-1的数据 或者id特别大的不存在的数据,这时用户就很有可能是攻击者 攻击就会导致数据库的压力过大。如何解决:在接口层增加校验 校验用户的权限 id范围的范围校验 id<=0做一个判断拦截从缓存中娶不到数据 在数据库中也没有渠道 这就就将key-value写一个特殊的值 key-0 这样就可以防止攻击者反复的用同一个id暴力攻击。使用缓存预热 缓存预热就是将数据提前加入到缓存中 当数据发生改变

2020-07-14 20:09:41 154

原创 Java中的反射机制概述

Java反射机制概述Java的反射机制是指在程序运行时可以判断任意一个对象的所属类、可以构造任意一个类的对象、可以判断任意一个类所具有的成员变量以及方法、可以调用任意一个类的成员变量和方法。反射机制被视为动态语言的关键。动态语言 vs 静态语言1、动态语言是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。主要动态语言: Object-C、 C#、 JavaScript、 PH

2020-07-14 15:19:07 164

原创 JavaWeb中的cookie和session

为什么要有cookie和session?http协议是一种无状态的协议,web服务器不会识别出哪些请求来自谁,而且浏览器的每次请求都是孤立的。那如果我们需要知道上一次请求的用户信息该怎么办呢?web服务器应该采用一种机制来唯一地标识一个用户,同时记录这个用户的会话状态。Web服务器能够借助会话状态将属于同一会话的一系列请求和响应关联起来。WEB服务器端程序要能从大量的请求消息中区分出哪些请求消息属于同一个会话,即能识别出来自同一个浏览器的访问请求,这需要浏览器对其发出的每个请求消息都进行标识:属于同一个

2020-07-12 16:03:17 124

原创 SpringMVC工作流程

SpringMVC原理用户向服务器发送请求,被DispatchServlet捕获DispatchServlet解析请求URL,得到资源标识符,调用HandlerMapping将请求映射到处理器DispatchServlet得到Handler,选择合适的HandlerAdapterHandler对数据处理完以后返回ModelAndView给DispatchServletDispatchServlet运用ViewResolver将逻辑视图ModelAndView转化为真是图ViewDispatch

2020-07-09 13:45:08 96

原创 使用Socket进行网络通信的流程

Socket利用套接字(Socket)开发网络应用程序早已被广泛的采用,以至于成为事实上的标准。网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。通信的两端都要有Socket,是两台机器间通信的端点。Socket允许程序把网络连接当成一个流, 数据在两个Socket间通过IO传输。一般主动发起通信的应用程序属客户端,等待通信请求的为服务端。Socket分类:流套接字(stream socket):使用TCP提供可依赖的字节流服务;数据报套接字(datagram s

2020-07-08 13:08:18 892

原创 Java中HashMap和HashTable的区别

HashMap和HashTable的实现在jdk1.7以及以前的版本HashMap和HashTable是基于数组和链表实现的,在jdk1.8及以后的版本是基于数组+链表和红黑树实现的。在进行数据存储时,会先计算哈希值,若出现哈希值相同(哈希碰撞)时,则会以链表的形式存储,如下图所示在jdk1.8及以后的版本,则为链表设置了一个阈值,一旦链表的长度超过了这个阈值,则会以红黑树的形式进行存储。链表查找的时间复炸度为O(n)红黑树查找的时间复杂度为O(logN)。二者的区别HashMap是线程不安全的,

2020-07-05 14:13:07 154

原创 Spring的依赖注入

依赖注入的概念依赖注入(Dependency Injection)是Spring的核心思想之一IOC(控制反转)的具体实现。控制反转指的是我们在获取对象的时候不是主动去获取对象(new),而是通过工厂为我们查找或者创建对象。简单地说,控制反转的思想就是以被动接收的方式来获取对象。我们的程序在编写时, 通过控制反转, 把对象的创建交给了 spring,但是代码中不可能出现没有依赖的情况。ioc 解耦只是降低他们的依赖关系,但不会消除。 例如:我们的业务层仍会调用持久层的方法。那这种业务层和持久层的依赖关系

2020-07-03 18:48:17 119

原创 Java泛型

为什么要有泛型?集合容器类在设计阶段/声明阶段不能确定这个容器到底实际存的是什么类型的对象, 所以在JDK1.5之前只能把元素类型设计为Object, JDK1.5之后使用泛型来解决。 因为这个时候除了元素的类型不确定, 其他的部分是确定的, 例如关于这个元素如何保存, 如何管理等是确定的, 因此此时把元素的类型设计成一个参数, 这个类型参数叫做泛型。 那为什么要使用泛型而不是直接用Object来存储数据呢?使用泛型可以解决元素存储的安全性问题(只有指定类型才可以添加到集合中)使用泛型可以解决获取数

2020-07-02 13:29:19 91

原创 Java中Throw和Throws的区别

Throwthrow语句用在方法体内,表示抛出异常,由方法体内的语句处理throw是具体向外抛出异常的动作,所以它抛出的是一个异常的实例。Throwsthrows是用在方法声明后面,表示如果抛出异常,由该方法的调用者来处理。throws声明该方法可能会抛出的异常的类型,让它的使用者知道要捕获的异常的类型。throws表示出现异常的可能性,并不代表一定会发生该异常**...

2020-06-30 14:19:47 531 1

原创 JAVA环境搭建

JAVA环境搭建右键我的电脑,选择属性点击高级系统设置,点击环境变量新建系统变量编辑环境变量验证环境安装是否成功打开cmd,输入java/javac/java -version这样便完成啦!...

2019-12-02 14:10:40 156 2

原创 HashSet

HashSetHashSet是Set的实现类之一,基于HashMap实现。 HashSet 是 Set 接口的典型实现,大多数时候使用 Set集合时都使用这个实现类。 HashSet 按 Hash 算法来存储集合中的元素,因此具有很好的存取、查找、删除性能。HashSet具有以下特点: 1.不能保证元素的排列顺序 2.HashSet 不是线程安全的 ...

2019-11-29 23:29:07 159 1

原创 快速排序

快速排序介绍: 快速排序通常明显比同为O(nlogn)的其他算法更快,因此常被采用,而且快 排采用了分治法的思想,所以在很多笔试面试中能经常看到快排的影子。可 见掌握快排的重要性。快速排序(Quick Sort)由图灵奖获得者Tony Hoare发明,被列为20世纪十 大算法之一,是迄今为止所有内排序算法中速度最快的一种。冒泡排序的升 级版,交换排序的一种。快速排序的时间复杂度为O(nlog(...

2019-11-26 18:58:42 274 1

原创 冒泡排序

冒泡排序算法思想: 1. 比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。 2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步 做完后,最后的元素会是最大的数。 3. 针对所有的元素重复以上的步骤,除了最后一个。 4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要 ...

2019-11-23 23:39:57 102

空空如也

空空如也

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

TA关注的人

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