自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 五花八门的“锁”

锁(用于控制对共享资源的访问)Lock接口!!!例如ReentrantLock;为什么需要使用Lock或者synchronized不够用?synchronized效率低,不能设置超时等待,不能中断正常试图获取锁的线程;不够灵活,加锁和释放锁的时机单一,需要执行完任务或者出现异常;无法知道是否成功获取到锁;方法lock()获取锁,如果锁被其他线程占用,进行等待;Lock不会像synchronized一样在异常时自动释放;使用时使用try—finally,在finally中释放锁;

2020-07-25 08:43:41 52

原创 如何更好的使用ThreadLocal?

ThreadLocal使用场景一每个线程需要一个独享的对象(多数为工具类,例如SimpleDateFormat、Random);每个Thread内有自己的实例,不共享;如果其他线程要使用,获取ThreadLocal达到复制的效果;需要重写initialValue方法,返回一个新对象;第一次get的时候就初始化对象,这个初始化时机由我们控制,所以重写initialValue方法使用场景二每个线程内需要保存全局变量(例如拦截器截取用户信息),可以让不同方法使用,避免参数传递;在同

2020-07-25 08:38:13 47

原创 线程池没那么“复杂”

目录线程池使用好处适用场合线程池参数线程池添加线程规则KeepAliveTime(最大空闲时间)ThreadFactory(线程工厂)WorkQueue(工作队列)newFixedThreadPool(传入固定线程数)newSingleThreadExecutor(单线程)CachedThreadPool(可缓存)newScheduledThreadPool(支持定时以及周期执行任务)workStealingThreadPool(窃取)线程池数量设置常见线程池参数停止线程池拒绝策略钩子方法(线程池执行前后调

2020-07-25 08:32:27 28

原创 Description Resource Path Location Type Failure to transfer org.apache.maven:maven-parent:pom:9 from

原因:因为maven的plugin并未下载到本地解决方法:进入到本地库中搜索“.lastUpdated”结尾的文件并且删除进入dos窗口进入本地仓库文件夹下执行命令: del *.lastUpdated /s /f /q更新maven项目即可

2020-09-18 09:59:09 68

原创 TCP可靠传输如何保证?

应用数据被分割成TCP认为最合适发送的数据块;超时重传;当tcp发送一个数据块后,会开启定时器,如果在一段时间内没有收到接收方的确认,那么就会重新发送;校验和:tcp会保持首部和数据的校验和,检测数据在传输过程中是否发送变化;(出现差错进行丢弃)TCP接收端会丢弃重复的数据;乱序重排;IP数据报发送可能会乱序,TCP会对失序的数据进行排序然后交给应用层;流量控制;TCP通过滑动窗口实现流量控制;控制发送方发送速率,保证接收方来得及接收;滑动窗口的大小是动态调整的,发送..

2020-08-21 09:35:31 33

原创 MVCC如何实现提交读和可重复读?

MVCC(多版本并发控制)多版本并发控制(MultiVersion Concurrency Control,简称 MVCC 或 MCC),也称为多版本数据库:不用加任何锁, 对各个时间点生成一致性数据快照 (Snapshot), MVCC 的实现是通过保存数据在某个时间点的快照来实现的,并用这个快照来提供一定级别事务隔离。同一条记录在系统中可以存在多个版本。InnoDB在实现MVCC的时候用到一致性视图,用于支持可重复读(事务启动时候拍快照ReadView)和提交读(每次执行select拍快照ReadV

2020-08-21 09:21:08 641

原创 AQS学习小随笔

AQS(AbstractQueuedSynchronizer)更像是一个管理线程的工具类,线程的阻塞和接触阻塞,等待队列的管理,高效解决这些繁琐的问题,工具类只需要去关注业务逻辑实现;AQS是一个用于构建锁、同步器、协作工具类的工具类(框架),有了AQS之后方便了很多构建线程协作的并发工具功能实现。//AQS是抽象类,继承AbstractOwnableSynchronizer为了查看当前获取获取锁的线程,方便监控//很多工具类对AQS进行了继承public abstract class Abs

2020-08-08 19:18:46 61

原创 集合源码小随笔

集合源码学习ArrayListDEFAULT_CAPACITY初始容量大小默认是10;int size;(表示当前数组大小,非线程安全);modCount统计当前数组被修改的版本次数,结构有变化就+1;注释允许put null值;随机访问时间复杂度为O(1);非线程安全,多线程使用Collections下的synchronizedList;(也可以使用JUC下的CopyOnWriteList);foreach和迭代器中数组大小改变,会抛出异常;初始化无参数构造器(数组大小为空

2020-07-25 08:47:52 70

原创 并发学习小随笔
原力计划

目录进程和线程概念,区别?Thread中的start和run方法区别?Thread和Runnable区别?如何实现处理线程的返回值?线程的六个状态?sleep和wait的区别?notify与notifyAll区别 ?yield方法介绍?interrupt如何中断线程?线程状态转换synchronized使用?synchronized基础(Java对象头和Monitor)?自旋锁Java6以后synchronized锁优化?synchronized的四种状态(随着线程竞争情况逐渐升级)ReentrantLoc

2020-06-27 20:45:22 63

原创 如何获取线程的返回值?

获取线程的返回值主线程等待法,主线程调用sleep方法(让主线程去循环等待子线程结束并赋值;缺点:代码臃肿,等待时间无法精准控制;不推荐使用);使用Thread类的join()阻塞当前线程以等待子线程处理结束(不能精准控制多个线程中的其中一个;不推荐使用);通过Callable接口实现call()获取线程返回值(通过FutrueTask Or 线程池获取,推荐使用) FutrueTask的构造方法可以传入Callable实现类的实例;isDone()可以判断call是否执行结束;

2020-06-22 17:50:12 436

原创 ClassLoader加载机制(源码浅析)
原力计划

类加载机制加载是指查找字节流,并且据此创建类的过程。加载需要借助类加载器,在 Java 虚拟机中,类加载器使用了双亲委派模型,即接收到加载请求时,会先将请求转发给父类加载器。ClassLoader双亲委派机制类加载器加载类步骤:首先会自底向上检测是否加载过此Class(即在缓存区中是否有此Class),如果有直接返回Class对象;判断父加载器是否存在,如果存在父加载器,则请求父类加载器来载入此Class,如果成功则返回Class对象;如果不成功则使用子类加载器来载入此Class,如果成功则返

2020-06-18 22:48:28 130

原创 反射获取属性,构造器以及方法

反射 Java 反射机制是在运行状态中,对于任意一个类,都可以获得这个类都所有属性和方法;对于任意一个对象,都可以调用它都任意方法和属性;这种动态获取信息以及动态调用对象方法都功能实现称为 Java 语言的反射机制。测试ReflectDemo.java(实体类)package Reflect;public class ReflectDemo { private String res; public ReflectDemo() { System.out.prin

2020-06-18 11:02:00 106

原创 eclipse创建SpringBoot项目pom.xml第一行报Unknown错误解决方法

错误原因SpringBoot 从2.1.5之后的版本,<maven-jar-plugin.version>是3.1.2的版本问题,导致可能有些插件不支持而报Unknown错误(其实这个错误也可以无视)解决方法将<maven-jar-plugin.version>改为3.1.1,然后更新Maven Project即可解决问题(右键项目——>Maven——>Update Project…——>OK) <properties> <jav.

2020-06-17 20:04:23 260

原创 Arrays.copyOfRange使用

copyOfRangepublic static int[] copyOfRange(int[] original,int from,int to)将指定数组的指定范围复制到一个新数组。该范围的初始索引 (from) 必须位于 0 和original.length(包括)之间。 original[from] 处的值放入副本的初始元素中(除非 from == original.length 或 from == to)。原数组中后续元素的值放入副本的后续元素。该范围的最后索引 (to)

2020-05-26 14:20:01 93

原创 轻松实现 BeanFactory
原力计划

BeanFactory 是字面意思是“Bean 工厂”,那么顾名思义“Bean 工厂”就是用来生产 Bean 或者是用来存放 Bean 的吗?实际上 BeanFactory 是一个 Spring IoC 容器。那这个“Bean 工厂”是如何实现的呢?BeanFactory 接口这是一个最简单的容器,它主要的功能是为依赖注入 (DI) 提供支持,这个容器接口在 org.springframework.beans.factory.BeanFactor 中被定义。我们实际使用的 “Bean 工厂” 都是

2020-05-26 11:26:15 79

转载 了解 Spring 体系结构

目录体系结构核心容器数据访问/集成Web体系结构Spring 有可能成为所有企业应用程序的一站式服务点,然而,Spring 是模块化的,允许挑选和选择合适的模块,不必要把剩余部分也引入。核心容器核心容器由spring-core,spring-beans,spring-context,spring-context-support和spring-expression(SpEL,Spring表达式语言,Spring Expression Language)等模块组成,它们的细节如下:spring-c

2020-05-25 23:08:25 71

原创 浅谈 Spring IoC 容器理解

相信接触过Spring框架的程序猿,肯定会接触容器这个概念,那么这个Spring容器究竟是什么呢?Spring 容器Spring 容器是 Spring 框架的核心。容器将创建对象,把它们连接在一起,配置它们,并管理他们的整个生命周期从创建到销毁。Spring 容器使用依赖注入(DI)来管理组成一个应用程序的组件。(看完抽象概念可能多少会有点懵,别着急,再往下看看)Spring 容器具体化Spring 提供了以下两种不同类型的容器,分别是:BeanFactoryApplicationContex

2020-05-25 22:38:12 81

原创 MessageDigest实现单向加密(MD5、SHA1、SHA-256、SHA-512)

单向加密与双向加密双向加密是加密算法中最常用的,它将可以直接理解的明文数据加密为不可直接理解的密文数据,然后,在需要的时候,可以使用一定的算法将这些加密以后的密文解密为原来可以理解的明文。双向加密适合于隐秘通信,例如,用户在网上购物时,需要向网站提交信用卡密码,用户当然不希望自己的数据直接在网上明文传送,因为这样很可能被别的用户“偷听”,用户希望自己的信用卡密码是通过加密以后,再在网络传送,因此网站接收到用户的数据以后,通过解密算法就可以得到准确的信用卡账号。单向加密只能对数据进行加密,也就是说,没有

2020-05-17 09:26:17 651

原创 你从未想到的位运算实现字母大小写转换

大小写转换统一转成大写:ch & 0b11011111 简写:ch & 0xDF统一转成小写:ch | 0b00100000 简写:ch | 0x20Tips:比较的时候注意加上小括号,因为位运算优先级比较低。举例

2020-05-13 23:22:05 87

原创 Map.getOrDefault简析

源码(Java8 为Map新增的方法)default V getOrDefault(Object key, V defaultValue) { V v; return (((v = get(key)) != null) || containsKey(key)) ? v : defaultValue; }简析源码的意思就是当Map集合中存在这个key时,就使用这个key值;如果不存在这个key时,就使用默认值de

2020-05-12 23:05:27 82

转载 分享130 余个令你眼前一亮的网站,总有一个让你钟意

目录搞学习找书籍冷知识 / 黑科技写代码资源搜索小工具导航页(工具集)看视频学设计搞文档找图片搞学习CSDN: https://www.csdn.net/TED(最优质的演讲):https://www.ted.com/谷粉学术:https://gfsoso.99lb.net/scholar.html大学资源网:http://www.dxzy163.com/简答题:http://ww...

2020-05-07 18:02:28 979 1

原创 Session与Cookie区别简析
原力计划

目录Cookie会话Cookie和持久CookieCookie具有不可跨域名性SessionSession的创建Session的客户端实现形式区别CookieCookie 并不是它的原意“甜饼”的意思,Cookie是存放在客户端的,Cookie是一段不超过4KB的小型文本数据,由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成。由于...

2020-05-06 12:02:37 493

原创 Linux驱动程序Hello World

目录程序源码编译命令运行效果截图解决方案一:解决方案二:程序源码hello.c#include "linux/init.h"#include "linux/module.h"MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void){ printk(KERN_INFO "Hello World Start !\n"); re...

2020-05-05 17:35:12 191

原创 arraycopy方法简析

arraycopypublic static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)简述从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。参数:src - 源数组。srcPos - 源数组中的起始位置。dest - 目标数组。destPos ...

2020-05-02 16:01:35 255

原创 获取和替换#{}中的内容

package StringTest;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Test { public static void main(String[] args) { String str = "select * from emp where nam...

2020-04-27 14:15:03 110

原创 Calendar实现日历

package Calendar;import java.util.Calendar;import java.util.Scanner;public class CalTest { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Cale...

2020-04-27 13:53:05 125

原创 二分查找说“简单”又“不简单”
原力计划

二分查找也叫折半查找,学过的人都会说二分查找思路很简单,可以使用模板,是有规律可循的,事实确实是这样的,也就是所谓的“简单”;为什么又说二分查找“不简单”?二分查找“不简单”在查找的边界控制、循环控制,比如深入细节,比如while循环中条件是否应该带等号,mid 是否应该加一等等,这都需要去思考和测试才能找到答案,细节是魔鬼!1.二分查找算法为什么叫做二分查找?顾名思义需要“二分”,也就是将...

2020-04-05 14:28:31 108

原创 轻松学习Mybatis动态SQL
原力计划

Mybatis动态SQL基本用法实体类entity数据库1.`if`标签2.choose标签3.foreach标签传统的使用JDBC的方法,在组合复杂的的SQL语句的时候,需要去拼接,稍不注意哪怕少了个空格,都会导致错误。Mybatis的动态SQL功能为了解决这种问题, 通过 if, choose, when, otherwise, trim, where, set, foreach标签,可组合...

2020-03-29 17:02:43 82

原创 Mybatis多表联查简简单单

Mybatis中实现了对数据库中的数据进行封装,那么进行多表查询时就会遇到查询结果不只是一个对象的数据,有可能是多个对象的混合,可以使用<resultMap> 标签进行映射resultMap 标签在标签中使用resultMap可以完成与查询结果进行映射使用 resultMap 实现关联单个对象teacher与student两张表多表联查sql语句实体类entityS...

2020-03-21 22:14:27 89

原创 SpringMVC过滤器Filter与拦截器Interceptor

过滤器Filter它依赖于servlet容器。在实现上,基于函数回调,它可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次通常用的场景是:在过滤器中修改字符编码(CharacterEncodingFilter)、在过滤器中修改HttpServletRequest的一些参数使用SpringMVC则就只需要在web.xml中配置过滤器即可,当然前提需要支持Maven所...

2020-03-19 23:19:11 51

原创 SpringMVC文件上传简析

SpringMVC文件上传1.pom.xml导入jar <!-- 本地文件上传 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3....

2020-03-15 10:21:28 60

原创 Description Resource Path Location Type Cannot change version of project facet Dynamic Web Module to

错误提示错误原因java web版本过低,需要修改项目文件的版本级别解决方法找到工作空间中所对应的项目文件夹中的.settings文件夹如图文件夹结构如图打开编辑org.eclipse.wst.common.project.facet.core配置文件,修改 java web 版本为3.0即可...

2020-03-15 09:44:45 60

原创 Referenced file contains errors (http://www.springframework.org/schema/beans/spring-beans-3.0.xsd).

错误提示Referenced file contains errors (http://www.springframework.org/schema/beans/spring-beans-3.0.xsd). For more information, right click on the message in the Problems View and select “Show Details…...

2020-03-12 10:36:04 85

原创 Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC

Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC错误原因前端在请求目标中发现无效字符,有可能就是一些特殊符号不兼容;我用的是eclipse JAVA项目,Tomcat 9.0解决方法将Tomcat 9.0 改为 Tomcat 7.0就OK...

2020-03-11 18:49:55 35

原创 Description Resource Path Location Type Project configuration is not up-to-date with pom.xml.

解决方法//提示这个错误的原因是没有更新maven项目//描述资源路径位置类型Description Resource Path Location Type//使用pom.xml无法更新项目配置。选择:Maven - >更新项目…从项目上下文菜单或使用快速修复Project configuration is not up-to-date with pom.xml. Select: ...

2020-03-07 10:12:43 91

原创 AndroidStudio——DevEco
原力计划

Deveco云测试最近学习正在Android Studio,学习的过程中就免不了测试,但是Android的测试又不是简单的程序测试只需要电脑就可以完成,它还需要连接手机或者创建虚拟机,这就会遇到一系列麻烦。这里介绍一种华为的Deveco云测试方法,不需要连接手机,不需要下载虚拟机,在浏览器上就可以完成测试Deveco安装方法打开Android Studio软件,下载安装DevEco选择f...

2020-02-26 23:34:08 1244 1

原创 Servlet生命周期

Servlet的生命周期分为5个阶段:加载、创建、初始化、处理客户请求、卸载加载:容器通过类加载器使用servlet类对应的文件加载servlet创建:通过调用servlet构造函数创建一个servlet对象初始化:调用init方法初始化处理客户请求:每当有一个客户请求,容器会创建一个线程来处理客户请求卸载:调用destroy方法让servlet自己释放其占用的资源...

2020-02-19 22:09:14 46

原创 悲观锁与乐观锁(数据库)

悲观锁与乐观锁面对可能出现的并发问题的事务,不用事务隔离机制来调整,使用由SQL语句级别的操作来控制资源的上锁,排斥其他并发事务悲观锁(Pessimistic Lock)定义悲观锁,正如其名,具有强烈的独占和排他特性。它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度。因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的...

2020-02-15 00:15:39 67

原创 JSP九大内置对象

JSP九大内置对象 //JSP九大内置对象pageContext javax.servlet.jsp.PageContextrequest javax.servlet.http.HttpServletRequest response javax.servlet.http.HttpServletResponse session javax.servlet.http.HttpSession ...

2020-02-12 11:49:14 46

原创 哈希表(Java)

哈希表散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。哈希函数给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(...

2020-02-11 20:36:21 125

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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