- 博客(63)
- 资源 (3)
- 收藏
- 关注
原创 docker 开发环境搭建
服务搭建1.redis 2.mysql 3.ribbitmq 4.mongodb 5. mongo-express 6.portainer注意初始脚本必须重新构建的时候才生效需要1.删除已有镜像 2.删除data目录config:软件配置目录init:软件初始目录data:软件数据目录logs:软件日志目录mysql初始脚本:创建初始用户(非root)并授权mongo初始脚本:......
2022-07-06 10:03:18
1089
1
原创 Jvm 内存模型
一、内存模型内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JWM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JM的高效稳定运行。不同的JM对于内存的划分方式和管理机制存在着部分差异。程序计数器它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域。 在JVM规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致。 任何时间一个线程都只有一个方法在执行,也就是所谓的当前方.
2022-01-17 17:13:26
4829
原创 vertx
vert.x是reactive(响应式编程), 是一种思想, 特点: 事件驱动(发挥单台机器的性能):单台机器上, 用少量线程处理大量并发 异步处理请求(多个服务间通信阻塞较少, 响应时间降低):https://vertx.io/ 官网基于netty的、运行在jvm之上的、支持多种编程语言的高性能异步、非阻塞、响应式全栈java web框架eclipse软件基金会顶级java开源项目之一在techempower.com网站多项性能测试中占据java语言榜首https://www.techemp
2021-04-28 21:38:38
2442
原创 http
学习以下注解@RequestHeader, @CookieValue;@RequestParam, @RequestBody;@SessionAttributes, @ModelAttribute;
2021-04-21 19:31:22
77
原创 nginx
常用命令nginx 启动nginx -s stop 停止nginx -s reload 重新加载nginx.conf配置文件#user nobody;worker_processes 1;#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;events { worker
2021-04-12 14:04:44
64
原创 windows快捷键
windowcontrolnotepadcmd文件路径敲cmd,直接进入该路径选中文件F2重命名选中文件ctrl+d删除win+q搜索win+d桌面win+e文件系统win+tab任务窗口win+i win10 设置win+x快捷菜单win+1/2/3切换任务窗口的123alt+F4 关闭程序/关机...
2021-04-01 10:29:31
71
原创 docker 命令
docker search -f stars=1000 mysql 仓库查找mysql 热度大于1000docker search --limit 10 mysql 仓库查找mysql 前10个docker pull mysql 拉去mysqldocker images 查看镜像docker inspect 镜像id 查看镜像信息docker top 容器id 查看进程信息docker rmi -f ${docker images -qa} 删除所有docker run -itd --na..
2021-03-31 21:02:11
242
原创 java retry 详解
retry就是一个标记,标记对一个循环方法的操作(continue和break)处理点,通俗说执行retry下的第一for循环的continue或breakpublic class Test1 { public static void main(String[] args) { for (int i = 0; i <3 ; i++) { for (int j = 0; j <10 ; j++) { Syst.
2021-01-27 15:18:56
272
原创 spring 循环依赖
https://www.jianshu.com/p/8bb67ca11831https://www.cnblogs.com/zzq6032010/p/11406405.htmlhttps://www.pianshen.com/article/4112200143/https://www.imooc.com/article/34150
2020-12-30 16:56:06
82
原创 ThreadLocal详解
在默认情况下,每个线程中的这两个变量都为null:只有当线程第一次调用ThreadLocal的set方法或get方法时才会创建它们。 public void set(T value) { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) map.set(this, value); ...
2020-12-08 13:02:47
138
转载 post 兼容application/x-www-form-urlencoded;charset=UTF-8 和json
@RequestParam,也有@RequestBody 不能同时使用可以使用HttpServletRequest 接收, public Map<String, Object> commonHttpRequestParamConvert(HttpServletRequest httpServletRequest) { Map<String, Object> result = new HashMap<>(16); try { .
2020-11-19 19:48:57
770
原创 forkJoin使用
先贴一段可以使用的代码,有时间在研究吧package com.bjsdzk;import java.util.concurrent.ForkJoinPool;import java.util.concurrent.Future;import java.util.concurrent.RecursiveTask;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class ForkJoinTaskExampl.
2020-11-05 18:15:28
127
原创 面试被问过的问题
volatile每个线程有本地内存和共享主内存,线程间通讯需要靠主内存变量通讯原子性:对变量的写操作不依赖于当前值线程安全的,如果依赖当前值i++那么是线程不安全的, 可见性:如果一个线程修改了变量,其他线程获取是最新的 有序性:内存模型允许编译器对指令重排序,如果两个操作访问同一个变量,且这两个操作有一个为写操作,此时这两个操作就存在数据依赖性,禁止重排序ThreadLocalThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。内存泄漏.
2020-10-14 10:20:48
609
转载 jvm深入理解
Java运行时数据区Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。Java虚拟机所管理的内存包括以下几个运行时数据区域,如图:1、程序计数器:指向当前线程正在执行的字节码指令。线程私有的。2、虚拟机栈:虚拟机栈是Java执行方法的内存模型。每个方法被执行的时候,都会创建一个栈帧,把栈帧压人栈,当方法正常返回或者抛出未捕获的异常时
2020-10-13 14:26:31
145
原创 java 反射
1.反射简介反射就是在运行状态能够动态的获取该类的属性和方法,并且能够任意的使用该类的属性和方法,这种动态获取类信息以及动态的调用对象的方法的功能就是反射。优点:反射提高了程序的灵活性和扩展性。 降低耦合性,提高自适应能力。 它允许程序创建和控制任何类的对象,无需提前硬编码目标类。缺点:性能问题:使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。因此反射机制主要应用在对灵活性和拓展性要求很高的系统框架上,普通程序不建议使用。 使用反射会模糊程序内部逻辑;程序员.
2020-10-10 16:15:53
97
原创 redis rdb和aof
1.redis两种持久化的方式RDB持久化机制:对redis中的数据执行周期性的持久化AOF持久化机制:对每条写入命令作为日志,以append-only的模式写入一个日志文件中,在redis重启时,可通过回放AOF日志中的写入指令来重新构建整个数据集RDB的优点:RDB文件是紧凑的二进制文件,比较适合做冷备,全量复制的场景 相对于AOF持久化机制来说,直接基于RDB数据文件来重启和恢复Redis进程,更加快速; RDB对Redis对外提供的读写服务,影响非常小,可以让Redis保持高性能,因
2020-10-10 15:13:13
155
原创 强引用、软引用、弱引用、虚引用 面试题
1.强引用以前我们使用的大部分引用实际上都是强引用,这是使用最普遍的引用。如果一个对象具有强引用,那就类似于必不可少的生活用品,垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题。2、软引用(SoftReference)如果一个对象只具有软引用,那就类似于可有可物的生活用品。**如果内存空间足够,垃圾回收器就不会回收它,如果内存空间不足了,就会回收这些对象的内存。**只要垃圾回收器没有回
2020-09-30 11:25:55
174
原创 windows和linux互传文件 ssh and scp
1. windows传文件到linux 1.windows安装ssh-keygen、ssh、scp 这里是是直接exe安装SecureCR就将上面三个命令自动安装的,如果不行请自行百度吧,默认没有安装ssh-copy-id命令 2. 执行远程拷贝 scp -p D:\ideaWorkspace\bjsdzk-collector\target\collector-2.0-fat_new.jar root@47.113.188.227:/root/collector在输入密码即可3.
2020-09-23 14:46:17
597
原创 mysql exists和in 效率问题
1.sql转化in 会转化为joinexplain select d.id from device d where d.company_id in(select c.id from company c );show warnings;执行如图exists 不会转化explain select d.id from device d where exists (select 1 from company c where d.company_id=c.id);show warni
2020-09-21 16:54:37
1835
原创 validate 无处不在
3.可以在任何位置使用validate校验 rpc或内部service定义注解import java.lang.annotation.*;@Target({ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Validated { Class<?>[] value() .
2020-09-17 15:49:27
284
原创 redis面试题
1.Redis1. 缓存穿透缓存穿透,它就是指当用户在查询一条数据的时候,而此时数据库和缓存却没有关于这条数据的任何记录,而这条数据在缓存中没找到就会向数据库请求获取数据。它拿不到数据时,是会一直查询数据库,这样会对数据库的访问造成很大的压力。解决办法:1.缓存空对象缓存空对象它就是指一个请求发送过来,如果此时缓存中和数据库都不存在这个请求所要查询的相关信息,那么数据库就会返回一个空对象,并将这个空对象存到缓存中,如果缓存的空对象很多占用许多的内存空间,还会浪费许多资源,设置过期时间就.
2020-09-16 15:46:00
120
原创 Integer和String面试题
1.Integer1.Integer比较是否相等?Integer a = 1000, b = 1000; System.out.println(a == b);//1Integer c = 100, d = 100; System.out.println(c == d);//2答案falsetrue解析:Integer内部类IntegerCache.java,它缓存了从 - 128 到 127 之间的所有的整数对象。static final Integer ca.
2020-09-14 17:45:42
157
原创 mysql面试题
1. 什么是索引?索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。索引是一种数据结构。数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据;索引的实现通常使用B树及其变种B+树。更通俗的说,索引就相当于目录。为了方便查找书中的内容,通过对内容建立索引形成目录。索引是一个文件,它是要占据物理空间的。2. 索引有哪些优缺点?索引的优点1.可以大大加快数据的检索速度,这也是创建索引的最...
2020-09-07 17:27:20
1097
原创 spring boot 动态注入Bean
这是开发阿里云的rocketmq的动态注入Bean,增加订阅只需要在配置文件增肌rocket订阅即可(BeanDefinitionRegistry方式指定 初始化和销毁方法)public class ConsumerClient implements CommandLineRunner/*, BeanFactoryAware*/ { @Autowired private MqConfig mqConfig; @Autowired private Configura.
2020-07-07 11:12:20
903
原创 idea 插件
Alibaba Java Coding Guidelines 代码规范Easy Code 生成mybatis 配置 dao service imp controler文件等lombok 生成get set方法Rainbow Brackets彩虹颜色的括号好对照 ,查找对应关系Translation 翻译插件 中英文翻译 支持 百度 google 有道GsonFormat 根据...
2020-03-13 17:35:41
129
原创 tcp、udp发送数据校验以及抓包
1.tcpdump在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URGfin 0 syn 10 rst 100 psh 1000 ack 10000 urg 100000ack+psh 11000 转化十进制等于 24tcpdump -x tcp port 40755 and 'tcp[13] = 24'...
2020-03-06 15:17:45
814
转载 Springboot 优雅停止服务的几种方法
https://www.cnblogs.com/huangqingshi/p/11370291.html
2020-01-13 17:05:15
205
原创 垃圾回收算法
1.清除算法1.1标记清除算法首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象,两个不足,一是标记和清除两个过程效率都不好,二是空间的问题,标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能导致以后在程序运行过程中需要分配较大的对象,无法找到足够的连续内存而不得不提前出发另一次垃圾收集动作1.2复制算法他将可用内存按容量划分为大小相等的两块,然后再把已使用过的...
2020-01-10 11:31:18
109
原创 jdk 8 函数式编程 (二)
目录1.函数接口1.1定义2.2函数接口2.流2.1定义2.2创建流2.3中间和终端操作如果你发现虽然你的业务代码千差万別,但是它们拥有同样的准备和清理阶段,这时,你完全可以将这部分代码用 Lambda实现。比如文件流处理异或异常1.函数接口1.1定义被@FunctionalInterface注释的接口,满足@FunctionalI...
2019-12-06 17:28:28
263
原创 e.printStackTrace()不能打印到logger日志中
将e.printStackTrace()替换为以下代码 ByteArrayOutputStream stream = new ByteArrayOutputStream(); e.printStackTrace(new PrintStream(stream)); String exception = stream.toString(); logger.error(33+...
2019-11-27 16:05:49
4452
原创 ServiceLoader
1.定义ServiceLoader是SPI(Service Provider Interface)中的服务类加载的核心类2.破坏双亲SPI 的接口由 Java 核心库来提供,而这些 SPI 的实现代码则是作为 Java 应用所依赖的 jar 包被包含进类路径(CLASSPATH)里。SPI接口中的代码经常需要加载具体的实现类。那么问题来了,SPI的接口是Java核心库的一部分,是由引...
2019-10-17 14:36:07
308
原创 深入理解类加载器
1.加载将class文件加载到虚拟机的内存,这个过程称为类加载,如下:加载:类加载过程的一个阶段:通过一个类的完全限定查找此类字节码文件,并利用字节码文件创建一个Class对象验证:目的在于确保Class文件的字节流中包含信息符合当前虚拟机要求,不会危害虚拟机自身安全。主要包括四种验证,文件格式验证,元数据验证,字节码验证,符号引用验证。准备:为类变量(即static修饰的字段变量...
2019-10-12 15:55:20
106
原创 深入理解synchronized
作用范围修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。1.原理monitor与对象头在JVM中,对象在内存中的布局分为三块区域:对象头、实例数据和对齐填充实例变量:存放类的属性数据信息,包括父类的属性信...
2019-10-12 14:33:39
173
原创 未整理链接
https://blog.csdn.net/javazejian/article/details/73413292类加载器和双亲委派https://www.cnblogs.com/butterfly100/p/9175673.html内存管理机制https://blog.csdn.net/javazejian/article/details/72828483synchro...
2019-10-12 10:42:46
87
原创 CAS无锁算法
1.原理 CAS(Compare And Swap),CAS有三个操作数,内存值V,旧的预期值A,要修改的新值B,当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。 CAS是乐观锁技术,当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其他线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,可以再次尝试。 ...
2019-10-09 15:12:49
143
原创 tcp三次握手和四次挥手
上图主要包括三部分:建立连接、传输数据、断开连接。建立TCP连接很简单,通过三次握手便可建立连接。建立好连接后,开始传输数据。TCP数据传输牵涉到的概念很多:超时重传、快速重传、流量控制、拥塞控制等等。断开连接的过程也很简单,通过四次握手完成断开连接的过程。三次握手建立连接:第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服...
2019-09-19 10:05:52
92
原创 volatile关键字深入理解
1.原理为了提高处理器的执行速度,在处理器和内存之间增加了多级缓存来提升。但是由于引入了多级缓存,就存在缓存数据不一致问题,volatile修饰的变量会强制将修改的值立即写入主存,主存中值的更新会使缓存中的值失效每个线程都会有副本,多线程下就会有并发的问题2.特性volatile具有可见性、有序性,不具备原子性。原子性:为了保证原子性,需要通过字节码指令monito...
2019-09-18 10:28:49
109
原创 spring 动态代理
Spring AOP的底层实现有两种方式:一种是JDK动态代理,另一种是CGLib的方式。一、基本概念JDK动态代理主要涉及java.lang.reflect包下边的两个类:Proxy和InvocationHandler。其中,InvocationHandler是一个接口,可以通过实现该接口定义横切逻辑,并通过反射机制调用目标类的代码,动态地将横切逻辑和业务逻辑贬值在一起。JDK动态代...
2019-09-10 14:48:18
160
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人