自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL慢查询语句分析总结

我们经常会接触到MySQL,也经常会遇到一些MySQL的性能问题。我们可以借助慢查询日志和explain命令初步分析出SQL语句存在的性能问题

2021-12-15 11:04:29 1073

转载 SpringBoot之HandlerInterceptor拦截器的使用(四)防重复提交

看本篇博客前应当先看完前面三篇,这一篇是基于前面三篇的知识点的整合。所以很多重复的代码这里就不写出了后台通过拦截器和redis实现防重复提交,避免因为网络原因导致多次请求同时进入业务系统,导致数据错乱,也可以防止对外暴露给第三方的接口在业务尚未处理完的情况下重复调用。1.首先引入fastjson<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson<...

2021-12-10 15:54:10 594

转载 SpringBoot之HandlerInterceptor拦截器的使用(三)@RequestBody获取请求参数解决java.io.IOException: Stream closed

SpringBoot之HandlerInterceptor拦截器的使用(三)@RequestBody获取请求参数解决java.io.IOException: Stream closed

2021-12-09 15:13:59 2104 1

转载 SpringBoot之HandlerInterceptor拦截器的使用 (二)自定义注解

SpringBoot之HandlerInterceptor拦截器的使用 (二)自定义注解

2021-12-09 14:53:02 914

原创 SpringBoot之HandlerInterceptor拦截器的使用(一)

SpringBoot之HandlerInterceptor拦截器的使用

2021-12-09 14:28:57 591

原创 ⾼并发下异步请求解决⽅案

方式一:@Async组件应⽤实战1.问题由于发送短信涉及到⽹络通信, 因此sendMessage⽅法可能会有⼀些延迟. 为了改善⽤户体验, 我们可以使⽤异步发送短信的2.⽅法异步任务:异步调⽤是相对于同步调⽤⽽⾔的。同步调⽤:是指程序按预定顺序⼀步步执⾏,每⼀步必须等到上⼀步执⾏完后才能执⾏。1)异步调⽤则⽆需等待上⼀步程序执⾏完即可执⾏多线程就是⼀种实现异步调⽤的⽅式2)MQ也是⼀种宏观上的异步3.使⽤场景1)适⽤于处理log、发送邮件、短信……等2)涉及到⽹络IO调⽤等操

2021-12-05 13:24:51 458

原创 Java中的ThreadLocal详解

一、ThreadLocal简介多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变量的时候需要进行额外的同步措施才能保证线程安全性。ThreadLocal是除了加锁这种同步方式之外的一种保证一种规避多线程访问出现线程不安全的方法,当我们在创建一个变量后,如果每个线程对其进行访问的时候访问的都是线程自己的变量这样就不会存在线程不安全问题。  ThreadLocal是JDK包提供的,它提供线程本地变量,如果创建一...

2021-11-16 17:51:22 248

原创 Java Web之过滤器Filter(FilterRegistrationBean)

有2种方式可以实现过滤器1:通过FilterRegistrationBean实例注册2:通过@WebFilter注解生效这里选择第一种,因为第二种不能设置过滤器之间的优先级为了演示优先级,这里创建2个测试过滤器类:Test1Filter、Test2Filter通过实现javax.servlet.Filter接口,覆盖其doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)方法,决定拦截或放行publ

2021-11-16 17:10:55 509

原创 Java Web之过滤器Filter(@WebFilter)

过滤器(Filter)过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理大概流程图如下:应用场景自动登录统一设置编码格式访问权限控制敏感字符过滤等创建Filter在Servlet中我们一般都会对request和response中的字符集编码进行配置,如果Servlet过多字符集编码发生变化时修改起码会很麻烦,这些通用的字符集编码配置等工作我们可以放到F.

2021-11-16 17:03:04 22318 1

原创 Android视图绘制流程

Android中的控件都是View或者View的子类,因此一个自定义View可以直接继承自View或者View的子类。当现有控件不能满足我们的要求时,我们需要自己动手画出我们想要的View。如何绘制自定义组件?首先我们知道一个View的生成需要经过测量、布局和绘制三步,分别对应View中的onMeasure()、onLayout()和onDraw()方法。一、onMeasure()测量视图用于测量视图的大小View系统的绘制流程会从ViewRoot的perf...

2021-11-02 18:46:59 236

原创 Android手机中的尺寸单位

介绍一些Android手机中的常见尺寸单位:px、dp、sp、pt等。1. px单位px为pixel的缩写,1px代表一个物理像素点。在Android开发中,很少使用px单位,因为同样100px的图片,在不同手机上显示的实际大小可能不同,如下图所示:偶尔用到px的情况,则是在需要画1px表格线或阴影线的时候,此时若用其他单位则会模糊。2. dp单位2.1 像素密度dpi假设此时有一部手机,屏幕的物理尺寸为1.5英寸*2英寸,屏幕分辨率为240*320(以像素点px为单位),可以计算.

2021-10-29 13:50:35 2112

原创 GitLab

​简介:GitLab 是一个利用 Ruby on Rails 开发的开源版本控制系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面进行访问公开的或者私人项目。 它拥有与 GitHub 类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

2021-10-28 10:49:55 492

原创 Android View的几个位置坐标关系

1. View的边界,left, top, right, bottom(即左上右下),这些值都是相对View的父容器说的;2. View的x, translationX, y, translationY, translationX/Y表示相对于left,top的偏移,一般用在View的translation动画中,有如下的关系: x = left + translationX, y = top + translationY;View在平移的过程中,top和left表示的是原始...

2021-10-28 10:10:30 424

转载 linux如何搭建sftp服务器

最近搞一个sftp项目,用于给第三方公司上传文件,期间查询了很多种方式,依然无法限制目录,很苦恼,本次经过无数次试验,终于成功了。提供sftp服务的有vsftpd和internal-sftp,这里用的是系统自带的internal-sftp,操作步骤如下:下面是千篇一律的步骤,网上大抵相同。1、创建用户 sftpuser,并禁止ssh登录,不创建家目录useradd -s /sbin/nologin -M sftpuser2、设置用户密码passwd sftpuser3、创建s

2021-09-29 10:32:40 2684

原创 java中获取当前服务器的Ip地址

1、tomcat是一款免费的开源Web服务器,如果部署在本地,那么对应的那么为localhost,对应地址为127.0.0.1。 例子:可以通过http://localhost:8080/项目root值访问,也可以通过http://127.0.0.1/项目root值访问。 如果部署在服务器(linux)系统类,则需要通过服务器的Ip地址进行访问。2、下面说说怎么获取Ip地址: 获取本地的Ip地址:public static void main(String[] a...

2021-06-29 21:03:36 2749

原创 spring mvc中,直接注入的HttpServletRequst是否安全呢?

当我看到controller中有下面这种注入方式时:@Autowiredprivate HttpServletRequest request;一直有种疑问:@Autowired难道不是只注入一次吗?在sping mvc中controller是单例的吧,那么,request变量岂不是一直都是第一个请求对象?之后的请求对象不就拿不到了吗?@Autowiredprivate HttpServletRequest request;其实@autowired注入的request对象的确只注入

2021-06-29 21:01:18 251

原创 Centos7安装Jenkins

一、前置条件安装Jenkins需要有java环境,请先安装并配置好jdk 二、安装 下载依赖 wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo 导入秘钥 作者:linjiajiam 链接:https://www.jianshu.com/p/368685768680 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转..

2021-06-15 20:59:35 289

原创 java实现文件下载功能

public HttpServletResponse download(String path, HttpServletResponse response) { try { // path是指欲下载的文件的路径。 File file = new File(path); // 取得文件名。 String filename = file.getName(); // 取得文件的后缀名。 String ext = filename.su...

2021-06-15 13:44:02 202

转载 ForkJoinPool 的适用场景,实现原理

原文:https://blog.csdn.net/f641385712/article/details/83749798本文的主要目的是介绍 ForkJoinPool 的适用场景,实现原理,以及示例代码。ForkJoinPool 结论:ForkJoinPool 不是为了替代 ExecutorService,而是它的补充,在某些应用场景下性能比 ExecutorService 更好。ForkJoinPool 主要用于实现“分而治之”的算法,特别是分治之后递归调用的函数,例如 quick sort

2021-05-17 16:25:01 613

原创 非静态方法的锁默认为 this, 静态方法的锁为 对应的 Class 实例

非静态方法的锁默认为 this, 静态方法的锁为 对应的 Class 实例题目:判断打印的 "one" or "two" ?1. 两个普通同步方法,两个线程,标准打印, 打印? //one two2. 新增 Thread.sleep() 给 getOne() ,打印? //one two3. 新增普通方法 getThree() , 打印? //three one two4. 两个普通同步方法,两个 Number 对象,打印? //two one5. 修改 getO...

2021-05-17 11:00:31 82

原创 ReadWriteLock : 读写锁

1. ReadWriteLock : 读写锁写写/读写 需要“互斥”读读 不需要互斥import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;public class TestReadWriteLock { public static void main(String[] args) { ReadWriteLockDemo rw ..

2021-05-17 10:42:27 71

原创 线程之间的通信

import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/* * 编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。 * 如:ABCABCABC…… 依次递归 */public class.

2021-05-17 10:39:49 54

原创 生产者消费者案例2_lock实现

import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/* * 生产者消费者案例: */public class TestProductorAndConsumerForLock { public static void main(String[] args) { Clerk cl.

2021-05-17 08:47:09 48

原创 生产者和消费者案例1

/* * 生产者和消费者案例 */public class TestProductorAndConsumer { public static void main(String[] args) { Clerk clerk = new Clerk(); Productor pro = new Productor(clerk); Consumer cus = new Consumer(clerk); new Thread(.

2021-05-17 08:28:37 69

转载 线程创建的四种方式

java中创建线程的四种方法以及区别Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。Java可以用四种方式来创建线程,如下所示:1)继承Thread类创建线程2)实现Runnable接口创建线程3)使用Callable和Future创建线程4)使用线程池例如用Executor框架下面让我们分别来看看这四种创建线程的方法。------------------------继承Thread类创建线程---------------------.

2021-05-16 22:49:38 11264 1

原创 并发容器类

Java 5.0 在 java.util.concurrent 包中提供了多种并发容器类来改进同步容器的性能。ConcurrentHashMap 同步容器类是Java 5 增加的一个线程安全的哈希表。对与多线程的操作,介于 HashMap 与 Hashtable 之间。内部采用“锁分段”机制替代 Hashtable 的独占锁。进而提高性能。此包还提供了设计用于多线程上下文中的 Collection 实现:ConcurrentHashMap、 ConcurrentSkipListMap、 Co.

2021-05-16 22:23:03 61

原创 模拟 CAS 算法

import org.junit.Test;/* * 模拟 CAS 算法 */public class TestCompareAndSwap { @Test public void test(String[] args) { final CompareAndSwap cas = new CompareAndSwap(); for (int i = 0; i < 10; i++) { new Thread(new Runna.

2021-05-16 22:04:57 70

原创 操作原子性

import java.util.concurrent.atomic.AtomicInteger;import org.junit.Test;/* * 一、i++ 的原子性问题:i++ 的操作实际上分为三个步骤“读-改-写” * int i = 10; * i = i++; //10 * * int temp = i; * temp = i + 1; * i = temp; * * 二、原子.

2021-05-16 21:52:39 71

原创 volatile 关键字

/* * 一、volatile 关键字:当多个线程进行操作共享数据时,可以保证内存中的数据可见。 * 相较于 synchronized 是一种较为轻量级的同步策略。 * * 注意: * 1. volatile 不具备“互斥性” * 2. volatile 不能保证变量的“原子性” */public class TestVolatile { @Test public void test() { ThreadDemo td =.

2021-05-16 21:42:08 62

空空如也

空空如也

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

TA关注的人

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