Java
W_Meng_H
希望是本无所谓有,无所谓无的!
这正如地上的路,其实地上本没有路,走的人多了,也便成了路!
展开
-
Springboot-自定义注解
业务上我们使用注解实现限流和幂等性校验原创 2023-02-25 10:50:41 · 1111 阅读 · 0 评论 -
设计模式-Map+函数式接口-策略模式-模板
如果有很多if else判断,需要封装参数等场景,可以使用此方式减少if else。原创 2022-03-30 19:40:31 · 2066 阅读 · 0 评论 -
Nginx-配置HTTPS证书(单向认证)
1. 生成一个 CA 私钥: ca.keymkdir /home/nginx/sslcd /home/nginx/sslopenssl genrsa -out ca.key 4096原创 2022-01-28 11:01:37 · 5147 阅读 · 0 评论 -
HTTPS相关介绍
一、HTTPS概述HTTPS协议是由 HTTP 加上TLS/SSL协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。二、HTTPS的优缺点优点使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器。 HTTPS 协议是由 SSL+HTTP构建的可进行加密传输、身份认证的网络协议,要比 HTTP安全,可防止数据在传输过程中被窃取、改变,确保数据的完整性。 HTTPS .原创 2022-01-28 10:18:08 · 3577 阅读 · 0 评论 -
Java-动态调用接口实现
目录一、枚举类二、Contrller层三、处理不同泛型的lList四、类操作工具类五、Spring 工具类提供一个统一的对外接口,根据不同的传参,按照对应的方式处理一、枚举类定义一个枚举RequestEnum,保存method,和对应完全限定名和方法名并根据method获取到对应枚举,来进行反射获取对应类import lombok.AllArgsConstructor;import lombok.Getter;/** * @Description: {枚举.原创 2021-04-18 15:25:30 · 2280 阅读 · 1 评论 -
ElasticSearch-分词查询(Java)
业务需求,需要知道查询关键词的分词集合可以使用es的分词查询,获取结果请求url(POST):http://localhost:9200/_analyze?pretty=true请求参数(JSON):{ "analyzer":"ik_max_word", "text": "咒术回站"}请求结果:{ "tokens": [ { "token": "咒", "start_offset": 0,原创 2021-02-27 17:36:43 · 3212 阅读 · 0 评论 -
JUC-ForkJoinPool分支合并框架-工作窃取
package org.meng.juc;import java.time.Duration;import java.time.Instant;import java.util.concurrent.ForkJoinPool;import java.util.concurrent.ForkJoinTask;import java.util.concurrent.RecursiveTask;import java.util.stream.LongStream; import org.j...原创 2021-01-17 15:31:27 · 271 阅读 · 0 评论 -
JUC-线程调度
package org.meng.juc;import java.util.Random;import java.util.concurrent.Callable;import java.util.concurrent.Executors;import java.util.concurrent.Future;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit; .原创 2021-01-17 15:24:10 · 308 阅读 · 0 评论 -
JUC-线程池
package org.meng.juc; import java.util.ArrayList;import java.util.List;import java.util.concurrent.Callable;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future; /* * 一、线程池:提供了一个线程队.原创 2021-01-17 15:22:13 · 238 阅读 · 0 评论 -
JUC-线程八锁
package org.meng.juc;/** * 题目:判断打印 "one" or "two" * * 1.两个普通同步方法,两个线程 ,标准打印,打印?// one two * 2.新增Thread.sleep(3000) 给getOne() 打印? // 3s 后打印 one two * 3.新增普通方法 getThreee 打印?// 先打印three 三秒后打印 one two * 4.两个普通同步方法,两个number对象,打印? // two 3s后打印 one * 5.原创 2021-01-17 14:52:41 · 255 阅读 · 0 评论 -
JUC-ReadWriteLock读写锁
package org.meng.juc;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;/** * @ClassName: TestReadWriteLock * @Description: 读写锁:写写/读写 需要互斥;读读 不需要互斥 * @Au.原创 2021-01-17 14:36:56 · 267 阅读 · 0 评论 -
JUC-Condition线程通信
package org.meng.juc;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * @ClassName: ProducerAndConsumer * @Description: while 解决虚假唤醒问题 -> wait()方法需要在while循环中使.原创 2021-01-17 14:11:09 · 276 阅读 · 0 评论 -
JUC-生产者|消费者-虚假唤醒问题
package org.meng.juc;/** * @ClassName: ProducerAndConsumer * @Description: while 解决虚假唤醒问题 -> wait()方法需要在while循环中使用 * @Author: MengMeng * @Date: 2021/1/17 1:40 下午 * @Version: v1.0 */public class ProducerAndConsumer { public static void mai.原创 2021-01-17 14:02:26 · 281 阅读 · 0 评论 -
JUC-Lock
package org.meng.juc;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * @ClassName: TestLock * @Description: 显示锁;需要通过lock()方法上锁,必须通过unlock()方法进行释放锁 * @Author: MengMeng * @Date: 2021/1/17 1:24 下午 * @Versi.原创 2021-01-17 13:33:28 · 252 阅读 · 0 评论 -
JUC-CountDownLatch
package org.meng.juc;import java.util.concurrent.CountDownLatch;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicInteger;/** * @ClassName: CountDownLatch * @Description: 闭锁;在完成某些运算时,只有其他所有现成的运算全部完成,当前运算才继续执行 * 多个线程操作n.原创 2021-01-17 13:20:04 · 271 阅读 · 0 评论 -
Java-集合面试题
目录一、为什么Java设计了迭代器Iterator?二、ArrayList和LinkedList哪个更占空间?三、Iterator和ListIterator区别?四、Java的HashMap与Redis中的Hash比较?五、Java的HashMap与与ConcurrentHashMap扩容的策略比较?一、为什么Java设计了迭代器Iterator?因为容器的内部结构不同,很多时候可能不知道该怎样去遍历一个容器中的元素。所以为了使对容器内元素的操作更为简单,Java引入了迭代器模式原创 2021-01-03 17:13:14 · 323 阅读 · 0 评论 -
设计模式-单例模式
感谢马老师分享:https://github.com/bjmashibing/DesignPatterns一、饿汉式/** * 饿汉式 * 类加载到内存后,就实例化一个单例,JVM保证线程安全 * 简单实用,推荐使用! * 唯一缺点:不管用到与否,类装载时就完成实例化 */public class Mgr01 { private static final Mgr01 INSTANCE = new Mgr01(); private Mgr01() {}; .翻译 2021-01-03 16:41:55 · 260 阅读 · 0 评论 -
Java-基础面试题
目录一、Java数据类型二、i+1小于i Java溢出问题三、int 与 Integer四、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?五、float 与 double六、Java中switch都可以支持哪些数据类型七、Java中,length属性,length()方法,size()方法的区别八、final九、static十、abstract十一、抽象类真的不能实例化么?十二、接口十三..原创 2021-01-03 13:06:09 · 407 阅读 · 0 评论 -
Linux - SpringBoot的jar开机自启(阿里云服务器)
Ubuntu 16.04项目目录为 /usr/local/api/1、在项目目录创建shell脚本vi /usr/local/api/runJar.sh脚本内容:#!/bin/bashexport JAVA_HOME=/usr/local/java/jdk1.8.0_181export JRE_HOME=${JAVA_HOME}/jreexport CLASSPAT...原创 2019-12-09 11:19:59 · 606 阅读 · 0 评论 -
Java-时间转换工具类(Date与String互转)
import java.sql.Timestamp;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.Locale;import java.util.UUID;/** * @Description date与String互转 * * @Date 2020年10月24日 *.原创 2020-10-24 08:02:41 · 1664 阅读 · 0 评论 -
Java- snowflake 算法
snowflake 算法是 twitter 开源的分布式 id 生成算法,采用 Scala 语言实现,是把一个 64 位的 long 型的 id,1 个 bit 是不用的,用其中的 41 bits 作为毫秒数,用 10 bits 作为工作机器 id,12 bits 作为序列号。1 bit:不用,为啥呢?因为二进制里第一个 bit 为如果是 1,那么都是负数,但是我们生成的 id 都是正数,所以第一个 bit 统一都是 0。 41 bits:表示的是时间戳,单位是毫秒。41 bits 可以表示的数字多达翻译 2020-05-29 15:34:43 · 492 阅读 · 0 评论 -
Springboot - Jpa运用MySQL的存储过程
一、什么是存储过程?MySQL 5.0 版本开始支持存储过程。存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。存储过程(p...原创 2019-11-20 13:02:21 · 1281 阅读 · 0 评论 -
理解面向对象与封装、构造函数、this关键字
文章内容:毕向东java视频教学 以下43篇文章转载原博客: http://blog.csdn.net/weixin_41795668/article/details/79469163概述:1、面向对象是相对面向过程而言2、面向对象和面向过程都是一种思想3、面向过程–强调的是功能行为4、面向对象–将功能封装对象,强调具备了功能的对象5、面向对象是基于面向过程的举例:面向过程:打开冰箱、存储进冰...转载 2018-03-17 11:07:50 · 329 阅读 · 0 评论 -
面向对象-static关键字和main函数
静态:static用法:是一个修饰符,用于修饰成员(成员变量,成员函数)当成员被静态修饰后,就多了一种调用方式,除了被对象调用外,还可以直接被类名调用类名.静态成员country="CN"在共享区 [方法区、共享区、数据区]statict特点:1、随着类的加载而加载。 也就是说静态会随着类的消失而消失,说明它的生命周期最长2、优先于对象存在 明确一点:静态是先存在...转载 2018-03-17 11:24:00 · 325 阅读 · 0 评论 -
面向对象-静态什么时候使用?
什么时候使用静态?静态修饰的内容有成员变量和函数1、什么时候定义静态变量(类变量)呢?当对象中出现共享数据时,数据被静态所修饰。对象中的特有数据要定义成非静态存在堆内存中。2、什么时候定义静态函数呢?当功能内部没有访问到非静态数据(对象的特有数据),该功能可以定义成静态的。class Person{ String name; public void show() { System.out...转载 2018-03-17 11:24:41 · 416 阅读 · 0 评论 -
面向对象-静态代码块
静态代码块格式:static{ 静态代码块中的执行语句}特点:随着类的加载而执行,只执行一次,并优先于主函数。用于给类进行初始化。代码:class Staticcode{ static { System.out.println("a"); }}class code{ static { System.out.println("b"); } public static...转载 2018-03-17 11:26:29 · 293 阅读 · 0 评论 -
面向对象-对象的初始化过程
Person p = new Person(null, 0);这句话都做了什么事情?1、因为new用到了Person.class,所以会先找到Person.class文件并加载到内存中。2、执行该类中的static代码块,如果有的话,给Person.class类进行初始化。3、在堆内存中开辟空间,分配内存地址。4、在堆内存中建立对象的特有属性,并进行默认初始化。5、对属性进行显示初始化。6、对象进...转载 2018-03-17 11:27:06 · 419 阅读 · 0 评论 -
面向对象-单例设计模式
单例设计模式 就是保证该类在程序中只能存在一个对象,所以不能让别人实例化该类,所以要私有化(private)该类的构造函数,但是你要为别人提供一个该类的唯一对象,所以你要在该类中定义一个静态的方法返回本类对象。设计模式:解决某一问题最行之有效的方法单例设计模式:解决一个类在内存只存在一个对象想要保证对象唯一:1、为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象2、还为了让其他程序可以访...转载 2018-03-17 11:28:06 · 387 阅读 · 0 评论 -
面向对象-继承
继承:1、提高了代码的复用性2、让类与类之间产生了关系,有了这个关系,才有了多态的特性。注意:千万不要为了获取其他类的功能,简化代码而继承。必须是类与类之间有所属关系才可以继承,所属关系是a。Java语言只支持单继承,不支持多继承。因为多继承容易带来安全隐患:当多个父类中定义相同功能,功能内容不同时,子类对象不确定要运行哪一个,但是Java保留这种机制,并用另一种体现形式来完成表示:多实现。Jav...转载 2018-03-17 11:28:40 · 295 阅读 · 0 评论 -
面向对象-子父类中变量的特点
子父类出现后,类成员的特点:类中成员:1、变量 2、函数 3、构造函数变量:如果子类中出现非私有的同名成员变量时,子类要访问本类中的变量,用this,子类要访问父类中的同名变量,用super。super的使用和this的使用几乎一致this代表本类对象的引用super代表父类对象的引用代码:class Fu{ int num = 4;}class Zi extends Fu{ int ...转载 2018-03-17 11:29:10 · 277 阅读 · 0 评论 -
面向对象-final关键字
final:最终,作为一个修饰符。1、可以修饰类,函数,变量。2、被final修饰的类不可以被继承,为了避免被继承,被子类复写功能。3、被final修饰的方法不可以被复写。4、被final修饰的变量时一个敞亮只能赋值一次,既可以修饰成员变量,也可以修饰局部变量。当在描述事物时,一些数据的出现值是固定的,那么这时为了增强阅读性,都给这些值起个名字。方便于阅读。而这个值不需要改变,所以加上final修...转载 2018-03-18 09:58:49 · 257 阅读 · 0 评论 -
面向对象-子父类中构造函数的特点(子类实例化过程)
子父类中的构造函数在对子类对象进行初始化时,父类的构造函数也会运行,因为子类的构造函数默认第一行有一条隐式的语句super();super():会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是super();为什么子类一定要访问父类中的构造函数?因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的。所以子类字啊对象初始化时,要先访问...转载 2018-03-18 09:58:40 · 402 阅读 · 0 评论 -
面向对象-抽象类
抽象:里边有未明确的东西。抽象类的特点:1、抽象方法一定在抽象类中。2、抽象方法和抽象类都必须被abstract关键字修饰。3、抽象类不可以用new创建对象,因为调用抽象方法没意义。4、抽象类中的抽象方法要被使用,必须由子类复写其所有的抽象方法后,建立子类对象调用。如果子类只覆盖部分抽象方法,那么该子类还是一个抽象类。抽象类和一般类没有太大的不同。如何描述事物,就如何描述事物,只不过,该事物出现了...转载 2018-03-18 09:59:12 · 317 阅读 · 0 评论 -
面向对象-模板方法模式
需求:获取一段程序运行的时间。原理:获取程序开始和结束时间并相减即可。获取时间:System.currentTimeMillis();当代码完成优化后,就可以解决这类问题。这种方式:模板方法设计模式。什么是模板方法?在定义功能时,功能的一部分是确定的,但是有一部分是不确定,而确定的部分在使用不确定的部分,那么这时就将不确定的部分暴露出去,由该类的子类去完成。代码:abstract class Ge...转载 2018-03-18 09:59:17 · 329 阅读 · 0 评论 -
面向对象-接口
接口:初期理解,可以认为是一个特殊的抽象类,当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。class用于定义类interface用于定义接口接口定义时,格式特点:1.接口中常见定义:常量、抽象方法。2.接口中的成员都有固定修饰符。常量:public static final方法:public abstract重点:接口中的成员都是public的。接口:是不可以创建对象的,因为有抽象...转载 2018-03-18 09:59:22 · 281 阅读 · 0 评论 -
面向对象-多态、多态中成员的特点
多态:可以理解为事物存在的多钟体现形态。1.多态的体现 父类的引用指向了自己的子类对象。 父类的引用也可以接收自己的子类对象。2.多态的前提 必须使类与类之间有关系,要么继承,要么实现。 通常还有一个前提:存在覆盖。3.多态的好处 多态的出现大大的提高程序的扩展性。 多态的弊端 提高了扩展性,但是只能使用父类的引用,访问父类中的成员。4.多态的应用5.多态的...转载 2018-03-18 09:59:28 · 300 阅读 · 0 评论 -
面向对象-Object类(equals())
Object:是所有对象的直接后者间接父类,传说中的上帝。该类中定义的肯定是所有对象都具备的功能。Object类中已经提供了对对象是否相同的比较方法。如果自定义类中也有比较相同的功能,没有必要重新定义。只要沿袭父类中的功能,建立自己特有比较内容即可,这就是覆盖。代码:class Demo //extends Object{ private int num; Demo(int num){ ...转载 2018-03-18 09:59:50 · 282 阅读 · 0 评论 -
面向对象-内部类访问规则与静态内部类
内部类的访问规则:1、内部类可以直接访问外部类中的成员,包括私有。 之所以可以直接访问外部类中的成员,是因为内部类中持有一个外部类的引用,格式:外部类名.this2、外部类要访问内部类,必须建立内部类对象内部类的定义原则:当描述事物时,事物的内部还有事物,该事物用内部类来描述。内部事物可以使用外部事物的内容。class Body{ private class Xinzang { }...转载 2018-03-18 09:59:54 · 426 阅读 · 0 评论 -
面向对象-匿名内部类
匿名内部类:1、匿名内部类其实就是内部类的简写格式。2、定义匿名内部类的前提:内部类必须是继承一个类或者实现接口。3、匿名内部类的格式:new 父类或者接口(){定义子类的内容}4、其实匿名内部类就是一个匿名子类对象,这个对象有点胖,可以理解为带内容的对象。5、匿名内部类中定义的方法最好不要超过3个。代码:abstract class Demo{ abstract void show();}...转载 2018-03-18 09:59:58 · 329 阅读 · 0 评论 -
面向对象-异常概述、try catch方法、异常声明throws、多异常处理
异常:就是程序在运行时出现不正常情况。1、异常由来:问题也是现实生活中一个具体的事物,也可以通过java类的形式进行描述,并封装成对象。其实就是java对不正常情况进行描述后的对象体现。对于问题的划分:一种是严重的问题,一种是非严重的问题。对于严重的问题:java通过Error类进行描述,对于Error一般不编写针对性的代码对其进行处理。对于非严重的问题:java通过Exception类进行描述,...转载 2018-03-18 10:00:03 · 342 阅读 · 0 评论