自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序员小潘

专注于Java后端技术分享!

  • 博客(34)
  • 资源 (1)
  • 收藏
  • 关注

原创 ForkJoin之RecursiveAction和RecursiveTask的简单使用

ForkJoin之RecursiveAction和RecursiveTask的简单使用Java提供的多线程可以提高CPU的利用率,现在的CPU都是多核多线程,如果不好好利用,只运行单线程程序,会使得CPU的其他核心空闲,浪费宝贵的计算机资源。编写好的程序不容易,编写好的多线程程序更难。JDK1.7开始,Java提供了Fork/Join框架,可以方便的将一个大任务拆分成多个小任务,利用多个线程...

2019-10-26 23:08:22 6169

原创 Java多线程间的通信

Java中的多线程共享的是堆内存,栈内存是线程私有的,A线程无法获取B线程的运行情况。这对于 多线程之间的协作不是很友好。线程间的通信就是为了线程之间更加友好的协作。线程间通信如果线程之间不能通信,A线程为了判断B线程的运行状态就必须轮询的去监听,但是轮询存在两个大问题:信息获取不及时。浪费CPU的资源。waitwait方法来自Object类,被final修饰,意味着子类不能重...

2019-10-25 22:23:39 4903 3

原创 Java中的volatile关键字

并发编程的三个基本概念:原子性可见性有序性编写多线程程序时,经常会看到 volatile 关键字。在Java中,volatile 被用来修饰 变量。使用 volatile 修饰的变量有什么特点呢?JMM内存划分在Java内存模型中,内存区域的划分大致如下图所示:除了共享的 主内存 外,每个Java线程都有一块自己私有的工作内存。当线程需要对 主存 中的变量进行读写时,会先...

2019-10-24 19:06:11 8094

原创 对象锁与类锁

类锁public class ClassLock { static long t1 = System.currentTimeMillis(); synchronized static void lock() { int time = (int) Math.ceil((System.currentTimeMillis() - t1)/1000); System.out.println...

2019-10-24 19:04:40 4909

原创 Java守护线程

在Java中线程分两种:用户线程、守护线程。守护线程:顾名思义,目的就是为了守护 用户线程,守护线程依附于用户线程,当用户线程死亡后,守护线程也就没有存在的意义了,会自行消亡。用户线程销毁时,守护线程一定销毁。守护线程销毁时,用户线程不一定销毁。隐藏的守护线程当我们运行一个简单的main方法时,JVM会自动帮我们开启一些守护线程。使用如下代码查看:public static void...

2019-10-24 19:03:46 4797

原创 Java启动线程的三种方式

Thread继承自Thread。public class ThreadDemo extends Thread { @Override public void run() { System.out.println(Thread.currentThread().getName() + "-启动了..."); } public static void main(String[] arg...

2019-10-24 19:02:52 5227

原创 ThreadLocal

最近在学多线程,看到 ThreadLocal 类,觉得有必要记录一下。ThreadLocal简单例子public class ThreadLocalDemo { static ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>(){ @Override protected Integer i...

2019-10-21 22:51:27 4690

原创 JVM监控工具及一次调优实战记录

jinfojinfo 是 JDK 自带的命令,可以用来查看正在运行的 java 应用程序的扩展参数,包括Java System属性和JVM命令行参数;也可以动态的修改正在运行的 JVM 一些参数。当系统崩溃时,jinfo可以从core文件里面知道崩溃的Java应用程序的配置信息。jinfo [option] pid无参,输出全部的参数和系统属性。-flag name 输出对应名称的...

2019-10-19 23:24:40 5069 1

原创 Java SPI机制

SPI:Service Provider Interface是JDK内置的服务发现机制。是一种将服务接口与服务实现分离以达到解耦、大大提升了程序可扩展性的机制。SPI使用规范在classpath目录下创建 META-INF/services 目录。创建以接口全限定名命名的文件。在文件中编写实现类的全限定名。多个实现类用换行符分隔。使用ServiceLoader加载服务。例子P...

2019-10-18 19:14:35 4547

原创 JVM内存模型

线程私有程序计数器程序计数器是一块很小的内存空间,它是线程私有的,可以认作为当前线程的行号指示器。对于CPU的一个核心来说,任何时刻都只能执行一条指令。核心在不同的线程之间来回切换,为了切换后可以快速定位到下一步应该执行的指令,每一个线程都有自己独立的“程序计数器”,指向下一个应该执行的指令地址。Java栈Java栈描述的是Java方法执行的内存模型。当一个Java方法被...

2019-10-18 18:40:15 4658

原创 Java8中的Stream

Java8中的 Stream 是对集合对象功能的增强。Stream的操作类型中间操作一个流后面可以跟多个中间操作,目的是为了对数据金星一些操作,然后生成新的流交给下一个节点。操作是惰性的,只有在进行终止操作时,才会真正开始遍历流。终止操作一个流只能有一个终止操作,终止操作结束后,流就会关闭,再次使用会抛出异常。中间操作再细分:无状态操作不需要知道其他元素的状态,对...

2019-10-17 19:07:30 4371

原创 Java8中的Optional

Java8中,引入了Optional类。它的目的是为了解决Java中频繁的判空操作。例子通过一个例子来查看使用Optional的效果。public class Client { public static void main(String[] args) { int l1 = getLength("admin"); int l2 = getLength1("lisa"); S...

2019-10-17 19:06:41 4750

原创 Lambda表达式及方法引用

Lambda表达式在JDK8以前,方法能接收的参数都是变量,JDK8之后,支持将函数作为参数传递。/** * @Description: 接口 */@FunctionalInterfacepublic interface Simple { void callback();}JDK8之前/** * @Description: 客户端测试 */public class Cl...

2019-10-17 19:05:22 4582

原创 MySQL事务和锁

MySQL中事务的实现机制和锁,以及不同隔离级别下的测试笔记

2019-10-16 19:06:54 4985

原创 Docker构建自定义镜像

传统的 项目部署 方案非常麻烦,一台新的Linux系统,我们需要安装JDK,MySQL,Tomcat,Nginx等软件,然后将项目代码编译发布到服务器。如果需要部署到多台服务器的话,同样的工作需要重复很多次。利用Docker构建自定义的镜像,在镜像里装上项目需要的所有东西,每次部署只需要通过镜像创建一个容器运行即可,做到 一劳永逸。安装dockerDocker 要求 CentOS 系统的...

2019-10-13 11:20:57 5387

原创 Linux单目录挂载多块磁盘

Linux将多块磁盘挂载到一个目录,特此记录,方便以后使用。服务器需要保存大量图片,内含4块2T的磁盘,需要将磁盘挂载到影像目录。单块磁盘挂载比较简单:创建分区格式化分区挂载同一目录无法重复挂载,后挂载的会覆盖之前挂载的磁盘。但是现在需要将4块磁盘并行挂载,一同保存图片,该如何操作呢?将4块磁盘合并到一个逻辑卷 进行挂载。基本概念PV(Physical Volume)-...

2019-10-13 11:20:09 21305

原创 Vue路由的懒加载

周六听一位老师讲到Vue的路由懒加载,觉得比较实用。刚好服务器的带宽不够用,遂决定把项目优化一下。优化之后,编译后的app.js从原来的1MB缩小到100KB,首页加载速度得以提升。现将优化步骤总结如下:什么是懒加载?即组件并非一次性全部加载,而是需要时再加载,也叫:“按需加载”。为什么需要懒加载?为了更好的用户体验。首页渲染更快,性能开销更低。一个大型项目,如果组件一次性全部加...

2019-10-13 11:19:32 4936

原创 Java程序CPU占用过高排查

昨天博客项目突然宕机,CPU占用接近100%,连敲命令都卡。tomcat日志也把磁盘占满了,十分异常。后来排查发现原来是RabbitMQ的一个消息始终无法被消费,一直存在队列中,导致每秒执行一次消费代码,最终日志把磁盘占满,服务器宕机…排查问题时,用到了Java自带的工具----jstack。觉得非常有用,特记录。##jstack是啥?引用百度百科的解释如下:jstack是jav...

2019-10-13 11:19:02 5842 1

原创 frp内网穿透工具使用

由于本人的阿里云服务器性能较差,内存只有2G,导致很多想法都没法实现。例如:全文检索只能用原生Lucene,没法跑Solr或Elasticsearch、等等。配置低,跑的服务过多主服务tomcat会被杀掉。好在还有一台旧笔记本,配置6代i7+16G内存,想着当服务器来用。装上了Linux,服务也都能正常运行,但是有一个痛点就是无法被公网访问。经过百度,发现有现成的产品可用,例如----花生...

2019-10-13 11:18:18 4826

原创 MySql将查询结果导出文件

线上维护数据库时,有时需要将一些数据导出到文件。例如:客户要求将指定条件的数据查询出来,制成Excel表格发给他们。如果网络方面没有限制,Navicat能直连数据库,直接利用工具导出即可。如果Navicat不能直连,只能通过命令行界面操作数据库,该如何操作呢?MySql将查询结果导出到文件的两种方式方式一into outfile需要进入Mysql终端并选择数据库,然后执行如下命令:...

2019-10-13 11:17:22 5499

原创 Nginx双机热备

目前所接触的项目还不涉及到分布式,都是单机模式。不过好在至今没出过什么大问题,基本能满足客户的需求。由于数据量不是很大,单机的性能已经可以满足,按理不应该做加法,毕竟部署的越复杂,维护起来就越麻烦。性能虽然可以满足,但有一个不得不提的痛点:项目无法随时更新。目前的解决方式是:白天改bug、测试,等到晚上客户不使用系统时才停机维护,效率相对较低。有没有可能让项目可以随时更新?答案肯定是有,...

2019-10-13 11:16:54 5081

原创 Linux下安装RabbitMQ

百度上安装RabbitMQ的帖子很多,大多都是复制粘贴,很多写的也不太详细,安装的erlang和RabbitMQ版本不兼容导致无法启动,对新手很不友好,该篇博客会记录详细的步骤,跟着作者一步一步来,本人确保成功安装并启动。RabbitMQ和erlang的对应版本请看官网链接安装步骤1、下载Erlang安装包http://erlang.org/download/otp_src_20.3.ta...

2019-10-13 11:16:19 4735

原创 Vue中axios的二次封装

Vue项目中,前端与服务器进行数据交互主要用axios比较多,原生的axios发送请求处理数据不太友好,项目中可以二次开发自定义。什么是 axios?Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。axios的特性从浏览器中创建 XMLHttpRequests从 node.js 创建 http 请求支持 Promise API拦截...

2019-10-13 11:15:43 6195

原创 为什么重写equals后建议重写hashCode?

最近在看《Java核心技术卷一》,复习一下Java基础,谈到equals和hashCode,这个知识点我记得大学的时候是学过的,但是我竟一时语塞,回答不上来。离开校门工作一年多,学习各种框架、技术,在通往大牛的道路上乐此不疲,回过头来,反而连最基础的东西都遗忘了,让人不禁唏嘘感慨。好记性不如烂笔头,遂整理笔记记录。首先要了解equals方法是做什么用的?equals方法用于判断两个对象是否相等...

2019-10-12 09:20:56 4686

原创 Linux常用命令-持续更新

记录一下自己在Linux上常用的一些命令,以便以后查找。文件和目录cd /app 进入app目录cd … 返回上一级cd 进入个人Home目录pwd 显示当前路径ls 显示当前目录下文件ll 显示当前目录下文件详细信息ll -a 显示所有文件(包含隐藏文件)du -h 【文件名】 显示文件/目录的大小mkdir 创建目录touch 创建文件rm -rf 递归强制删除文件/...

2019-10-12 09:20:06 4766

原创 RabbitMQ的六种工作模式

周末之余学习了一下RabbitMQ的几种工作模式,写了一些Demo,特此记录。前言操作RabbitMQ需要先得到连接,下列所有例子均需要创建连接,为了方便先写一个工具类。public class MQUtil { public static Connection getConnection() throws IOException, TimeoutException { //创建连接工...

2019-10-12 09:19:29 4705

原创 Linux开机自启的几种方式

给客户在局域网内搭了一套系统,需要开机自启tomcat、nginx服务等,最终采用了第四种最简单的方式。1. 通过添加系统服务的方式 需要先将程序添加为系统服务,然后chkconfig --add 服务名。 较为繁琐1.在/etc/init.d 下建立相关程序的启动脚本ln -s /etc/init.d/服务名 /etc/rc.d/rc3.d/S100服务名 //S:开机自启动 10...

2019-10-12 09:18:58 5086

原创 代码规范心得-持续更新

总结一些自己在实际项目维护中遇到的一些痛点,大部分都是代码不规范引起的,以此为鉴。1. 严格分层控制层和业务层应严格区分开,业务层应该只和业务相关,要做到业务层即使离开当前系统,换个框架也可以继续运行。Service层尽量避免操作session,相关的赋值和控制应该尽量在Controller层实现。例如:对外提供接口,Service层应做到通用,有些接口可能没登陆操作,Service层...

2019-10-12 09:18:27 4689

原创 Linux-数据库自动备份

为了防止数据丢失,需要对MySql的数据进行备份,利用Linux的定时任务实现每日自动备份MySql。前提需要用到定时任务,首先确保Linux安装了“crontab”。cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业。service crond start //启动服务service crond stop //关闭服务service cro...

2019-10-12 09:17:43 4856

原创 MySql的备份和恢复

平常备份数据都是用navicat的转储sql文件,速度慢不说,线上维护也不方便。MySql自带的备份命令非常好用,速度极快。备份命令 mysqldump单实例语法mysqldump -u -p > *.sql多实例语法mysqldump -u -p -S > *.sql参数解析-A --all-databases:导出全部数据库-Y --al...

2019-10-12 09:17:14 4708

原创 网站启用Https

HTPPS和HTTP的概念HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输...

2019-10-12 09:16:39 4742

原创 SpringBoot项目部署到Tomcat

将项目打包方式修改成war修改项目pom.xml文件:war移除自带的tomcat添加依赖org.springframework.bootspring-boot-starter-tomcatprovided启动类稍作修改public class BlogApplication extends SpringBootServletInitializer implements ...

2019-10-12 09:15:55 4647

原创 Vue跨域问题

随着项目前后端分离的趋势,跨域始终是一个绕不开的问题,一个本可以正常访问的接口,但在项目中请求就是发不出去,是什么原因导致的呢?存在即合理,既然跨域那么烦人,那它存在的理由是什么呢?这里我们先了解一下浏览器的“同源策略”。同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。浏览器的同源策略,别的先不管,我们只要知道它...

2019-10-12 09:13:41 4642

原创 为什么索引可以提升查询速度?

官方定义:索引是帮助存储引擎高效获取数据的数据结构。提取句子主干:索引是数据结构。基于快速查找的数据结构有很多,MySQL采用的是 B+Tree。为什么采用B+Tree而不是其他的呢?B+Tree相比其他数据结构有什么优点呢?其他数据结构了解B+Tree之前,先了解一下其他的数据结构,看看它们有什么问题,再看B+Tree是如何解决这些问题的。二叉树二叉树的特点:任何一个节点,左边的...

2019-10-12 08:18:41 5880

HashMap.java

JDK7的HashMap源码阅读,几乎给每个方法和属性都加上了中文注释。 可以帮助大家更好的阅读源码,可能有理解不对的地方,望指正。

2019-12-27

空空如也

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

TA关注的人

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