学习
展翅飞翔Java
一起交流学习提升
展开
-
使用docker发布springboot项目并使用nginx配置域名进行访问
仅做笔记,也可参考!!一、在你的linux系统中安装docker二、使用idea创建springboot项目,并打成jar包三、写一个Dockerfile文件,并命名为:Dockerfile,文件内容如下:# 基础镜像使用javaFROM openjdk:8-jdk-alpine# VOLUME 指定了临时文件目录为/tmp。# 其效果是在主机 /var/lib/docke...原创 2019-12-24 10:17:03 · 2008 阅读 · 0 评论 -
SQL 练习
CREATE DATABASE /*!32312 IF NOT EXISTS*/`test1` /*!40100 DEFAULT CHARACTER SET utf8 */;USE `test1`;/*Table structure for table `course` */DROP TABLE IF EXISTS `course`;CREATE TABLE `course` (...原创 2019-06-14 16:04:23 · 660 阅读 · 0 评论 -
从文件中读取字符串数据,反序显示并大小写转换
public static void main(String[] args) { String filePath = "D:/test.txt"; readTxt(filePath); } /** * 读取文件 * @param filePath */ public static void read...原创 2019-05-28 14:39:31 · 920 阅读 · 0 评论 -
java使用极光推送根据tag进行定期定时发送自定义标题和内容
应公司需求开发,特此记录:java使用极光推送根据tag进行定期定时发送自定义标题和内容极光定时推送可参考官方代码:https://github.com/jpush/jpush-api-java-client/blob/master/example/main/java/cn/jpush/api/examples/ScheduleExample.java下面是自己写的测试代码 ...原创 2019-07-25 14:40:42 · 1568 阅读 · 0 评论 -
linux中yum安装jdk
在linux上使用yum安装是非常粗暴无脑的,1.执行命令yum -y list java*查看可安装java版本。执行成功后可以看见如下的结果2.选择一个java版本进行安装,这里我们希望安装java1.8,因为我们的机器是64位的,所以选择安装java-1.8.0-openjdk-devel.x86_64。注意要选择-devel的安装,因为这个安装的是jdk,而那个不带-...原创 2019-07-03 19:39:41 · 832 阅读 · 0 评论 -
GC垃圾回收算法和垃圾收集器的关系?分别是什么?
GC算法(引用计数/复制/标清/标整)是内存回收的方法论,垃圾收集器就是算法落地实现。因为目前为止还没有完美的收集器出现,更加没有万能的收集器,只是针对巨日应用最合适的收集器,进行分代收集4中主要的垃圾收集器:1.串行垃圾回收器(Serial)--->它为单线程环境设计且只使用一个线程进行垃圾回收,会暂停所有的用户线程,不适合服务器环境2.并行垃圾回收器(Paralle...原创 2019-06-25 17:55:42 · 1235 阅读 · 0 评论 -
创建线程的四大方法及线程池的七大参数
为什么要使用线程池?线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后再线程创建后启动这些任务如果线程的数量超过最大数量,超过数量的线程将排队等候,等其他线程执行完毕,再从队列中取出任务来执行特点:线程复用,控制最大并发数,管理线程一、降低资源消耗,通过重复利用已创建的线程降低线程创建和销毁造成的消耗二、提高响应速度,当任务到达时,任务可以不需要的等到线程创建就...原创 2019-06-19 11:10:58 · 11739 阅读 · 0 评论 -
MySQL删除数据库中重复的数据,并保留一条
1.先创建数据库#创建数据库CREATE DATABASE student;2.创建表#创建表test1,字段为id,name,主键id自增CREATE TABLE IF NOT EXISTS test1( id INT UNSIGNED AUTO_INCREMENT, NAME VARCHAR(100) NOT NULL, PRIMARY KEY(id))ENGINE...原创 2019-05-21 22:10:21 · 462 阅读 · 0 评论 -
java公平锁/非公平锁/可重入锁/递归锁/自旋锁/独占锁/共享锁
一、公平和非公平锁公平锁:多个线程按照申请锁的顺序来获取锁,类似排队打饭,先来后到非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁在高并发情况下,有可能会造成优先级反转或者饥饿现象。并发包中ReentrantLock的创建可以指定构造函数的Boolean类型来得到公平锁或非公平锁,默认是非公平锁,源码分析: //...原创 2019-05-16 18:50:27 · 411 阅读 · 0 评论 -
JMM和volatile可见性的综合统一验证
JMM java 内存模型volatile是java虚拟机提供的轻量级的同步机制保证可见性 不保证原子性 禁止指令重排是一种抽象的概念并不真实存在,它描述的一组规范或规则,通过这组规范定义了程序中的各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。JMM关于同步的规定线程解锁前,必须把共享变量的值刷新到主内存 线程加锁前,必须读取主内存的最新值到自己的工作...原创 2019-05-07 14:42:14 · 322 阅读 · 1 评论 -
JMM和volate的禁止指令重排
计算机在执行程序时,为了提高性能,编译器和处理器常常会对指令做重排,一般分为以下三种单线程环境里面确保程序最终执行结果和代码顺序执行的结果一致 处理器在进行重排序时必须考虑指令之间的数据依赖性 多线程环境中线程交替执行,由于编译器优化重排的存在,两个线程中使用的变量能否保证一致性是无法确定的,结果无法预测代码demo如下public class ReSortSeqDemo ...原创 2019-05-08 08:49:55 · 925 阅读 · 0 评论 -
多线程情况下HashMap集合类不安全的问题及解决方式
接着上一篇,本篇直接上代码: //Map<Object, Object> map = new HashMap<>(); //Map<Object, Object> map = Collections.synchronizedMap(new HashMap<>()); Map<Object, O...原创 2019-05-15 15:45:38 · 535 阅读 · 0 评论 -
多线程情况下HashSet集合类不安全的问题及解决方式
在多线程情况下,使用Set<Object> set = new HashSet<>();会产生 java.util.ConcurrentModificationException异常解决方式: Set<Object> set = Collections.synchronizedSet(new HashSet<>()); ...原创 2019-05-15 14:39:49 · 5602 阅读 · 1 评论 -
HashSet的底层是什么?为什么add方法只添加一个参数?
HashSet的底层是HashMap原码: /** * Constructs a new, empty set; the backing <tt>HashMap</tt> instance has * default initial capacity (16) and load factor (0.75). * 创建一个新的Ha...原创 2019-05-15 14:32:26 · 437 阅读 · 0 评论 -
JMM和volatile不保证原子性原因及说明及解决方式
先上Demo代码import java.util.concurrent.TimeUnit;class MyData{ volatile int number = 0; //此时number是加了volatile修饰的 public void addPlusPlus(){ number++; }}/** * 1.验证volatile...原创 2019-05-07 16:35:59 · 853 阅读 · 1 评论 -
多线程情况下ArrayList集合类不安全的问题及解决方式
import java.util.*;import java.util.concurrent.CopyOnWriteArrayList;/** * @Auther: YongXuezhen * @Date: 2019/5/13 16:51 * @Description: 多线程情况下集合类不安全的问题,add方法没有加锁 */public class ContainNotSaf...原创 2019-05-14 16:35:44 · 1456 阅读 · 1 评论 -
CAS导致的“ABA”问题,如何解决
CAS算法实现一个重要前提需要取出内存中某时刻的数据并在当下时刻比较并替换,那么这个时间差异会导致数据的变化。比如说,一个线程one从内存位置V中取出A,这个时候另一个线程two也从内存中取出A,并且线程two进行了一些操作将值变成了B,然后线程two又将V位置的数据变成A,这个时候线程one进行CAS操作发现内存中仍然是A,然后线程one操作成功。尽管线程one的CAS操作成...原创 2019-05-13 12:06:31 · 862 阅读 · 0 评论 -
CAS的理解
简单来说,就是比较并交换,如果前一个值是预期值,则执行成功;如果不是预期值,则执行不成功。import java.util.concurrent.atomic.AtomicInteger;/** * @Auther: YongXuezhen * @Date: 2019/5/9 12:19 * @Description: * * 1.CAS是什么?===>compareAn...原创 2019-05-13 09:57:34 · 1120 阅读 · 1 评论 -
生产环境服务器变慢,诊断思路和性能评估!Linux
1.linux执行top命令看top显示页面的右上角,load average有三个值,代表的是系统一分钟,五分钟,十五分钟系统的平均负载值。如果三个值相加除以3再乘以100%高于60% 说明系统的负担压力重查看系统命令的精简版 uptime2.vmstat -n 2 3vmstat -n 2 3一般vmstat工具的使用时通过两个数字参数来完成的,第一个参...原创 2019-05-15 17:32:45 · 972 阅读 · 0 评论 -
抽象类和接口的区别
抽象类 接口 默认的方法实现 既含有默认的方法实现,又含有抽象方法 接口中的方法完全是抽象的。它根本不存在方法的实现 实现 子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。 子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现。 构造器 抽象类可以有构造...原创 2019-05-20 23:26:53 · 97 阅读 · 0 评论 -
Hashtable的原理,并说出HashMap与Hashtable的区别
HashTableHashtable 是一个散列表,与HashMap相同,它存储的内容是键值对(key-value)映射。Hashtable 方法都是synchronized修饰的,说明Hashtable是线程安全的,它的key、value都不可以为null。Hashtable<String, Object> map = new Hashtable<>()...原创 2019-05-21 00:00:13 · 1208 阅读 · 0 评论 -
单例模式八种不同的写法及比较
单例模式是最常用到的设计模式之一,熟悉设计模式的朋友对单例模式都不会陌生。一般介绍单例模式的书籍都会提到饿汉式和懒汉式这两种实现方式。但是除了这两种方式,本文还会介绍其他几种实现单例的方式,让我们来一起看看吧。简介单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某...转载 2019-05-21 18:24:41 · 450 阅读 · 0 评论 -
static 代码段
class A{ static{ System.out.print("1"); } public A(){ System.out.print("2"); }}class B extends A{ static{ System.out.print("a"); } public B(){ ...原创 2019-05-21 16:18:01 · 627 阅读 · 0 评论 -
多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?
1.多线程有4种实现方法继承Thread类,重写run方法 实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target 通过Callable和FutureTask创建线程 通过线程池创建线程同步的实现方面有两种,分别是synchronized,wait与notify2.wait():使一个线程处于等待状态,并且释放所持...转载 2019-05-21 11:59:21 · 16067 阅读 · 1 评论 -
java中传值问题
Person实体类public class Person { public void setPersonname(String personname) { this.personname = personname; } private String personname; public Person(String personname) {...原创 2019-05-16 10:18:55 · 188 阅读 · 0 评论 -
什么是Web Service?
Web Service就是为了使原来各孤立的站点之间的信息能够相互通信、共享而提出的一种接口。Web Service所使用的是Internet上统一、开放的标准,如HTTP、XML、SOAP(简单对象访问协议)、WSDL等,所以WebService可以在任何支持这些标准的环境(Windows,Linux)中使用。 注:SOAP协议(Simple Object AccessProt...转载 2019-05-21 11:36:02 · 262 阅读 · 0 评论 -
XML的四种解析方法
XML文档以层级标签的形式来组织数据,多用于配置文件、存储静态数据、交换数据。 XML语法 1每个XML文档都由XML序言开始,在前面的代码中的第一行便是XML序言,<?xmlversion="1.0"?> 2任何的起始标签都必须有一个结束标签。 3标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签。 4标签如果...转载 2019-05-21 10:57:36 · 839 阅读 · 0 评论 -
EJB是基于那些技术实现的?并说出SessionBean和EntityBean的区别?
EJB并不是一个产品。它是java服务器端服务框架的规范,软件厂商根据它来实现EJB服务器。应用程序开发者可以专注于支持应用所需的商业逻辑,而不用担心周围框架的实现问题。EJB规范详细的解释了一些最小但是必须的服务,如事务,安全和名字等。软件厂商根据这些规范要求以保证一个enterprise bean能使用某个必须的服务。规范并没有说明厂商如何实现这些服务。这使得通过阅读规范来学习EJB更加困...转载 2019-05-21 10:48:11 · 253 阅读 · 0 评论 -
forward和redirect的区别
一:间接请求转发(Redirect) 间接转发方式,有时也叫重定向,它一般用于避免用户的非正常访问。例如:用户在没有登录的情况下访问后台资源,Servlet可以将该HTTP请求重定向到登录页面,让用户登录以后再访问。在Servlet中,通过调用response对象的SendRedirect()方法,告诉浏览器重定向访问指定的URL,示例代码如下: ......//Servlet...转载 2019-05-21 10:25:11 · 173 阅读 · 0 评论 -
单例模式的DCL加volatile保证线程安全及高并发
先上Demopublic class SingletonDemo { private static volatile SingletonDemo instance =null; private SingletonDemo(){ System.out.println(Thread.currentThread().getName()+"\t 我是构造方法Sin...原创 2019-05-08 11:38:34 · 241 阅读 · 0 评论