自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 《EffectiveJava》笔记版四—注解与枚举

注解注解的优势:让编码更清晰易懂让代码更简洁降低编程复杂性,提高编程效率实现自定义注解实现一个可以忽略属性的Ignore注解和一个可以标记待检验的属性并允许指定别名的注解,定义注解同时需要定义工具类,工具类中使用反射来实现属性的读取,完成注解所需要的逻辑,这样就可以直接使用注解来代替冗长且重复的代码了。下面给出一个自定义注解的实例:自定义注解在属性上使用/** * Ignore注解:需要忽略的属性 */@Target(ElementType.FIELD)@Retention(R

2021-03-29 21:53:06 152

原创 《EffectiveJava》 笔记版二--equals和hashCode源码解析

《EffectiveJava》 笔记版二--equals和hashCode源码解析1.Object类Object类是所有类的基类,那么学好Object类中的方法是Java基础中的基础。Object类中常见的方法有equals(), hashCode(), toString(), clone()和与线程相关的wait(),notify()方法。这里我们重点去查看equals()和hashCode()的源码,看看是否能看出花来。2.覆盖equals时总要覆盖hashCode覆盖equals时总要覆盖h

2021-03-12 21:47:43 179

原创 《EffectiveJava》之JVM中对象内存分配

1.对象创建Java运行程序过程中创建对象——通过new关键字实现。虚拟机遇到一条new指令时,首先在常量池中定位类的符号引用,检查这个符号引用代表的类是否已经被加载,解析和初始化。如果没有则执行类加载机制。类加载完成后,虚拟机将new 出的对象分配内存, 从Java堆中划分出一块确定大小的内存。2. 对象内存分布这个在无数面试题中被提到了很多次,但都往往只是留于书面形式的理解,这次我使用OpenJDK提供的Java虚拟机对象布局分析工具:JOL 来实操一遍。首先添加maven依赖: 

2021-03-09 21:52:27 141

原创 MySQL 循环写法—批量插入语句编写

直接在Mysql查询语句中进行ctrl c/v# 创建进程CREATE PROCEDURE test_insert1 () #开启进程BEGIN #声明变量iDECLARE i INT DEFAULT 1;#循环一万次插入语句WHILE i<10000 DO INSERT INTO `xxx_eapp`.`activity_info`(`id`, `drug_id`, `key_content`, `content`, `time`, `content_code`, `source

2021-02-04 19:23:13 290

原创 docker使用踩坑记录

重启 elasticsearch后, 需要重启kibana 否则无法创建index pattern创建elasticsearch镜像后需要把数据挂在出来如果不挂载数据导致docker容器无法启动,可以在创建容器时使用 run … ping www.baidu.com 才能保持容器不会挂掉(保证容器中有一个进程在运行)如果容器已经无法启动了,可以使用 docker cp ./plugins [containerID] 路径 进行错误配置文件的覆盖, 错误文件覆盖后重启docker容器es 中inde.

2021-01-19 15:41:42 83

转载 ES集群默认分片被占满,新索引无法写入

报错信息:Validation Failed: 1: this action would add [1] total shards, but this cluster currently has [3000]问题:分片数量超过限制数3000原因:elasticsearch7版本及以上的,默认每个节点只允许1000个分片,因为集群分片数不足引起的。解决:在kibana的tools中改变临时设,如图:代码:PUT /_cluster/settings{ "transient": {

2021-01-14 21:11:08 2063

原创 websocket与H5交互程序程序

WebScoketServerimport lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Component;import javax.websocket.*;import javax.websocket.server.PathParam;import javax.websocket.server.ServerEndpoint;import java.io.IOException;import java.nio

2021-01-12 14:47:13 149

原创 Shell脚本启动SpringBoot程序—标准脚本版

SpringBoot.sh文件如下#!/bin/bashSpringBoot=$2if [ "$1" = "" ];then echo -e "\033[0;31m 未输入操作名 \033[0m \033[0;34m {start|stop|restart|status} \033[0m" exit 1fiif [ "$SpringBoot" = "" ];then echo -e "\033[0;31m 未输入应用名 \033[0m" exit 1f

2020-12-10 22:39:13 202

原创 @ConfigurationProperties注解解析

@ConfigurationPropertiesSpring源码中大量使用了ConfigurationProperties注解,比如server.port就是由该注解获取到的,通过与其他注解配合使用,能够实现Bean的按需配置。该注解有一个prefix属性,通过指定的前缀,绑定配置文件中的配置,该注解可以放在类上,也可以放在方法上可以从注解说明中看到,当将该注解作用于方法上时,如果想要有效的绑定配置,那么该方法需要有@Bean注解且所属Class需要有@Configuration注解。简单一句话概

2020-12-10 14:58:11 313

原创 HttpClient进行timeout设置及存活机制设置

package com.example.demo.config;import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;/** * @description: * @date:created in 2020-12-08 16:00 * @author:Dylan

2020-12-08 20:11:03 1632

原创 Elasticsearch7.9.0实现索引定时删除

Elasticsearch7.9.0实现索引定时删除这里使用ES创建索引时的系统时间来进行过期索引的确定,我们可以使用以7天为准进行某前缀索引的删除具体代码如下:1) Util类代码: /** * 获取所有index. * * @return 所有索引 */ public List<String> getAllIndices() throws IOException { //构建获取所有索引请求 GetIndexResponse getI

2020-12-02 14:49:13 408

原创 会话跟踪技术的四种实现方法

1. 为什么要会话跟踪浏览器与服务器之间的通信是通过HTTP协议进行通信,但HTTP协议是无状态协议,他不保存客户信息,即当连接一次后就断开了,下一次请求会重新连接,这样就需要告诉服务器你和上一次的连接的人是不是同一个用户,那么就需要用到会话跟踪技术才能实现2.四种会话跟踪技术1)URL重写URL...

2020-10-22 12:58:54 679

转载 YAML文件解析大全

我们学习Java,都是先介绍properties文件,使用properties文件配合Properties对象能够很方便的适用于应用配置上。然后在引入XML的时候,我们介绍properties格式在表现层级关系和结构关系的时候,十分欠缺,而XML在数据格式描述和较复杂数据内容展示方面,更加优秀。到后面介绍JSON格式的时候,我们发现JSON格式比较XML格式,更加方便(除去数据格式限制之外),所以现在很多配置文件(比如Nginx和大部分脚本语言的配置文件)都习惯使用JSON的方式来完成,包括Springbo

2020-10-17 22:58:30 937 2

原创 Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource

SpringBoot启动没有配置数据库所以报错Description:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.Reason: Failed to determine a suitable driver class原因: 因为SpringBoot在启动时,SpringBoot默认会加载org.springfra

2020-10-13 22:41:33 73

原创 servlet-api2.0与javax servlet-api版本冲突——Action: Correct the classpath of your application so that it

今天在学SpringCloud时出现一个jar包冲突,记录一下报错信息如下:Correct the classpath of your application so that it contain a single ,compatible version of javax.servlet.ServletContext那么问题来了,servlet-api 2.0 和 javax servlet-api 3.x 本质上是同一个包,但是却是不同的版本,所以当项目中调用servlet-api 2.0版本时就会

2020-10-13 21:53:24 751

原创 SpringBoot常用注解

注解@SpringBootApplication此注解是Spring Boot项目的基石,创建SpringBoot项目的Application时会默认加上@SpringBootApplicationpublic class SpringSecurityApplication{ public static void main(Strings[] args){ SpringApplication.run(SpringSecurityApplication,args); }}我们可以把@Sp

2020-10-12 01:07:44 195

原创 Spring中的设计模式

工厂模式Spring中使用工厂模式可以通过 BeanFactory或ApplicationContext创建bean对象。两者对比:ApplicationContext容器启动的时候,一次性创建所有的BeanBeanFactory则为延迟注入,相比于ApplicationContext来说会占用更少内存,但其仅提供最基本的依赖注入ApplicationContext扩展了BeanFactory的功能,所以一般开发人员使用ApplicationContext更多ApplicationContext

2020-10-11 18:22:26 136

原创 设计模式之单例模式

单例模式这里简单介绍两种,一种懒汉式,一种饿汉式先写懒汉式public class LazyEmperor{ private static LazyEmperor emperor = null; //构造方法必须私有 ,保证只能通过getInstance进行赋值 private LazyEmperor(){} public static LazyEmperor getInstance(){ if(emperor == null){ emperor = new LazyEmperor(

2020-10-10 23:05:23 63

原创 Spring特点与组织架构

Spring特点方便解耦,简化开发通过IOC,将对象之间的依赖关系交由Spring进行控制,避免硬编码导致程序过度拟合支持AOP通过Spring 提供AOP功能,实现面向切面编程的功能,让许多不容易用OOP实现的功能可以通过AOP轻松应付,如日志等声明式事务支持通过Transactions模块,进行声明式事务管理,免于程序员对繁琐事务的管理。支持Junit4单元测试功能方便继承其他优秀框架支持Mybatis,Hibernate等框架Spring架构DataAccess部分提

2020-09-26 16:43:03 154

转载 浅谈IOC--说清楚IOC是什么

浅谈IOC–说清楚IOC是什么转载自:http://www.cnblogs.com/DebugLZQ/archive/2013/06/05/3107957.htmlhttps://segmentfault.com/a/11900000148034121.IOC的理论背景2.什么是IOC3.IOC也叫依赖注入(DI)4.IOC的优缺点5.IOC容器的技术剖析6.IOC容器的一些产品7.参考博文本文旨在用语言(非代码)说清楚IOC到底是什么,没有什么高深的技术,园中的老牛、大虾们看到这里可以

2020-09-26 13:27:48 57

原创 Java面经--三次握手与四次挥手每次失败会发生什么情况

客户端与服务器建立链接之 三次握手由图可知三次握手的建立流程一目了然那么我们来说一下三次握手中每一次握手出现问题了都会出现什么情况吧。在四次挥手中每一次挥手都会出现什么情况呢只需看懂下面的伪代码即可,《TCP/IP协议族》中每一个状态的转换伪代码...

2020-09-24 14:06:57 283

原创 HashMap,HashTable,ConcurrentHashMap区分

HashMap,HashTable,ConcurrentHashMaphashmap采用数组加链表形式进行存储,首先通过hashcode()判断key值的hash来决定其在数组中的存储位置,然后通过equals()来比较key是否为空或是否和数组中原有key值相等,如相等则覆盖,如不等则链表后添加,当存储数组达到散列因子数时,则数组*2扩容,重新进行散列,当链表数大于一个数(7/8)时则链表转换为红黑树进行存储,然后就是问红黑树的一些特点,比如根节点为黑,黑红相间,红的不能相邻,叶子节点必为黑。Coc

2020-09-24 10:48:45 40

原创 Java面经-JavaWeb-Servlet和SpringMVC

JavaWeb1.JSP中静态包含和动态包含的区别什么是包含及为什么要包含1)包含就是Servlet容器将其他Web组件(Jsp,Servlet,Html),将生成结果包含到自己的结果中2)Servlet对象是由Servlet容器创建,Servlet对象的Service()方法是由servlet容器调用,Servlet之间不允许相互调用,同时方便代码维护管理,提高开发效率。这样就可以需要Servlet转发和包含的技术支持。举例说明//主页JSP代码<!DOCTYPE HTML>&

2020-09-19 16:28:30 230

原创 JSP—静态包含和动态包含的区别

JSP中静态包含和动态包含的区别什么是包含及为什么要包含1)包含就是Servlet容器将其他Web组件(Jsp,Servlet,Html),将生成结果包含到自己的结果中2)Servlet对象是由Servlet容器创建,Servlet对象的Service()方法是由servlet容器调用,Servlet之间不允许相互调用,同时方便代码维护管理,提高开发效率。这样就可以需要Servlet转发和包含的技术支持。举例说明//主页JSP代码<!DOCTYPE HTML><html&gt

2020-09-19 16:24:53 240

原创 Java面经-MySQL数据库

MySQL数据库

2020-09-12 22:19:08 141

原创 Java面经之Redis

RedisRedis应用场景(1) 缓存(数据查询,短链接,新闻内容,商品内容等)(2)聊天室在线好友列表(3)任务队列(秒杀 ,抢购,12306)(4)应用排行榜(5)网站访问统计(6)数据过期处理(7)分布式集群架构中的session问题一般这种需要频繁读取数据库中数据的应用daemonize介绍 守护线程redis.conf配置文件中可以设置daemonize守护线程daemonize:yes 时会采用单进程多线程模式,即使redis可以在后台运行,但需要kill掉进程才会关闭

2020-09-12 00:18:51 74

原创 Java面经之线程(2)

线程安全与锁优化面向过程是将数据和过程当作两个独立部分来考虑,是从计算机角度考虑问题面向对象是将数据和行为看作对象一部分线程安全共分为5类:1.不可变通过final来修饰的基本类型的属性具有不可变性,所以是线程安全的。2.绝对线程安全绝对线程安全是不管运行在什么环境下,调用者都不需要任何额外的同步措施,绝大部分说线程安全的其实都不是绝对线程安全 ,如Vector,仍需要同步代码块去修饰,才能保证绝对线程安全此程序会产生异常,说明Vector不是线程安全的 private static

2020-09-06 16:32:14 82

原创 Java面经之线程(1)

Java面经-线程Java线程并发处理的广泛使用是Amdahl定律代替摩尔定律称为计算机性能发展源动力的根本原因,是人类压榨计算机运算能力最有力的武器Amdahl定律通过系统并行化与串行化的比重来描述多处理器系统能获得的运算加速能力,摩尔定律则用于藐视晶体管数量与运行效率之间的发展关系。Java虚拟机的内存模型处理器 <–>高速缓存 <–> 主内存1.Java程序执行顺序程序执行顺序,并不能直接通过程序代码就能保证程序执行顺序,所以Java虚拟机的即时编译器中自带指

2020-09-05 18:34:08 162

原创 Java面经(3)—集合篇

Java面经总结—集合篇1.Collection集合和Map集合Collection集合,是集合类的顶级类,List,Set,Queue集合都是继承自Collection集合的子类Map集合,实现类用键值对的形式保存数据2.List,Map,Set集合List:链表存储结构的集合,元素可重复Set:存储的元素不能重复,无序集合Map:Map集合是key-value形式,key值是不可重复的,value值可重复3. List:ArrayList集合和Vector集合ArrayList dat

2020-09-03 17:00:21 276

原创 Java面经(2)

JavaSE基础1. Java面向对象的六大原则1.里氏替换原则2.单一责任原则3.开闭原则4.依赖倒转原则5.接口隔离原则6.合成聚合复用原则2.Java面向对象的三大特点封装性— 封装的好处是:可以将类内属性很好地保护起来,只通过固定的get,set方法来进行调用,防止出现对属性的随意修改。继承性— 继承即,子类从父类中继承出其特有的属性,方法,可以对父类的方法直接使用,也可以重写父类的方法,并添加其自己的方法和属性。多态性— 多态即对方法进行重写+父类引用指向子类对象。

2020-09-02 17:59:32 88

原创 Java面经总结(1)

Java面经总结(1)此面经总结采用分点式,模块记录,便于总结整理与记忆JavaSE总结基本概念1. 8种基本类型byte类型 char 类型 int类型 short类型 long类型 double类型 float类型 boolean类型八大类型在Java内存中的排序是每8个字节排在一起,所以会有一个内存问题是:8个字节按照byte, char/short, int, long/double, 进行内存摆放会有几种情况。2. StringString 统一使用static fin

2020-08-22 18:32:08 329

原创 垃圾收集器判断对象是否存活

垃圾收集主要针对Java对和方法区中内存动态变化的过程那么如何判断Java世界中的对象实例是否死亡呢?下面将介绍在Java虚拟机中判断对象死亡的方法对象已死?引用计数法顾名思义,引用计数法即通过一个引用计数器,每当这个对象被一个地方引用时计数器值就加一,当引用失效时计数器值减一那么任何时刻,计数器为零的对象就是不能被再使用的对象,即已死对象但是此方法有一个缺点是可能出现对象之间循环引用的情况,那么计数器将永不为零,即对象永远无法被垃圾器收集到可达性分析法可达性分析法是通过可达性分析算法来判

2020-08-08 12:26:00 135

原创 Java 聊天室实现

用Java实现聊天室功能聊天室功能分为两个部分,一部分是服务器的代码实现,一部分是客户端的代码实现,那么如何实现服务器和客户端的通信连接,如何实现客户端和客户端之间的信息通信就是我们要考虑的问题了。先看一下我们做出的聊天室效果:接下来上代码://首先是服务器主程序代码package chatroom;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;/*** @descrip

2020-07-14 20:42:23 981 1

原创 JSON解析教程

JSON解析选择JSON解析类库常用的解析JSON类库有两个,一个是Google支持的GSON包,下载地址是这里:Google支持的GSON下载地址,点击链接直接跳转到GSON的github地址。另一个是阿里支持的Fast JSON 阿里支持的fast JSON下载地址。任选其一下载即可,这里以GSON为基础介绍加载GSON到IJ中下载到的jar包如下,是gson-2.8.6 版jar包先创建lib 目录(directory),再将jar包复制并放在lib中,如图所示:在File中找到Pro

2020-07-09 23:29:45 319

原创 线程的定义,启动方法和终止方法

线程知识点总结—定义,启动和终止1.线程与进程线程是CPU调度的最小单位进程是CPU内存分配的最小单位一个进程中的所有线程共享一个内存空间CPU使用抢占式调度,根据线程优先级来决定谁占有线程每个线程都拥有自己的栈空间,但公用一个堆内存2.线程启动两种启动方式static class MyThread extends Thread{ //复写run方法,在run方法中进行线程功能实现 @Override void run(){ .... }}static class MyRun

2020-07-06 23:12:30 220

原创 实现二叉树的先序,中序和后序遍历

通过递归实现二叉树的三种遍历方法用LinkedList链表的先序遍历来创建二叉树二叉树的先序,中序,后序很容易就会弄蒙遍历者。不妨这样记忆:先序,中序,后序其实说的是根节点的遍历顺序,先序即根节点先遍历,先输出,遵循DFS(深度遍历法则)中序即根节点晚于左子节点遍历,先于右子节点遍历,同样要遵循DFS(深度遍历法则)后序即根节点最后遍历,遵循DFS(深度遍历法则)一切都以深度遍历DFS为准 + 根节点的顺序就可以很好地实现二叉树的人为遍历。首先是二叉树的节点构造如下:package c

2020-06-27 17:23:43 408

原创 异常的实际应用__何时使用异常与如何使用异常

异常的实际应用__何时使用异常与如何使用异常一.异常的介绍刚刚学习了如何捕获及处理异常,所以有了这篇什么时候使用异常和如何使用异常。异常情况的出现可能阻止程序直接发生崩溃,所以不可避免地异常需要避免。异常的诞生是为了替换过去所使用的错误码及状态检查技术——即为了增加程序鲁棒性所用,最后检查出异常后一定要对代码及时进行处理。二.何时使用异常异常处理的一个重要规则是:不能忽视异常,每个异常都应该被记录,只有极少数异常在不影响安全的情况下可以被忽略。异常在实践中:每个public方法在执行实际逻

2020-06-19 23:34:22 283

原创 面向对象思想和五大设计原则

面向对象思想总结一.三大特性1.封装利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体。 隐藏内部实现的细节,保留对外的接口(如同一个插座内部连线不可见但是并不影响插头的使用)。//封装的例子public class Person { private String name; private int gender; private int age; public String getName() { return n

2020-06-18 17:56:00 160

原创 Dylan 开博首文

Dylan 开博首文此博客的写作内容此博客主要写作有 Dylan 在学习艰难晦涩的技术中遇到的问题与解决方法 Dylan 在每次迭代思维进化下的感悟主要是个人成长,理财体系两个方面 Dylan 生活中值得纪念的事,每一次新的尝试,做出的新的突破 Dylan 看过的好书,写下自己的读后感 记录个人成长,争取通过不断地迭代自我,让此博客能够有被别人借鉴的价值。此博客的更新频率因为此博客并非营销博客 所以更新随缘 我也希望能更新频率高一点,那意味着我的成长速度更快此博客的适宜

2020-06-14 14:48:46 124

空空如也

空空如也

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

TA关注的人

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