Java基础
有趣的灵魂_不世俗的心
这个作者很懒,什么都没留下…
展开
-
SpringBoot项目中有些依赖不加版本号原因
我们都知道maven其实是一个坐标体系一样,我们平常看到的groupId、artifactId、version节点,其实就是Maven的坐标,通过这些坐标,可以唯一定位一个Jar包。找到SpringBoot的版本依赖<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-parent</artifactId> <version&g原创 2022-03-22 17:32:49 · 2133 阅读 · 0 评论 -
@Component和@Configuration的区别
源码@Configuration@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Componentpublic @interface Configuration { @AliasFor( annotation = Component.class ) String value() default ""; boolean proxyBeanMethod转载 2022-03-22 12:53:01 · 340 阅读 · 0 评论 -
延迟队列实现之Netty
首先我们了解是时间轮的算法:时间轮:就像上面的时间盘,里面有8个格子组成一个时间轮,如果每个格子代表的时间为1s,那么一圈的就代表8秒。加入我们将延迟任务加入时间轮的时间为时间轮中0秒的位置,延迟5秒执行,那就是说当转到6个格子的时候就会开始执行定时任务,如果超过8秒,需要延时20秒的,那就需要转多个圈。按以上实例,需要转2圈+4个格子,那就那就是转了2圈后在5标号的格子开始。首先我们看下netty 中的时间轮类Netty构建延时队列主要用HashedWheelTimer,HashedWheelT原创 2022-03-07 12:00:44 · 800 阅读 · 0 评论 -
优雅停机(SpringBoot 2.3.0以上新特性)
我们在更新迭代是,可能需要手动发包,在停止包时,切记不要使用(kill -9)强制杀死进程,因为强制杀死进程的话,一些正在执行的请求,或者后台正在处理的逻辑,便会终止。1、例如正准备批量数据写入数据库,被强制杀死(该部分数据丢失)2、kafka消费正在提交位移1000(上次位移500),强行停止后位移提交失败,数据已经消费了,下次就会出现重新消费500-1000之间的数据。那么在不是强制结束进程的情况下,我们如何保证项目中待执行的任务,执行完毕后杀死进程啦。实现这个功能的需求,专业术语为优雅停机如转载 2021-12-28 16:30:34 · 1279 阅读 · 0 评论 -
查看内存及java中JVM参数
1、查看JVM系统默认数据java -XX:+PrintFlagsInitial -version2、查看系统java程序jps -l3、查看内存使用情况free -m4、查看某个指定的java程序的JVM设置jinfo -flags 10936原创 2021-12-13 17:30:55 · 271 阅读 · 0 评论 -
Window+IDEA+Java+protobuf生成
首先需要先下载适用windowcaozuo系统的protobuf安装包,类似于JDK。下载地址:https://github.com/protocolbuffers/protobuf/releases下载如下图所示的安装包解压后,将bin文件夹添加到环境变量windows+r输出cmd打开命令行窗口。输入protoc,出现下图表示安装成功接下来需要打开IDEA安装相应的插件安装以上两个插件既可以开始操作protobuf相关协议...原创 2021-12-09 10:47:53 · 660 阅读 · 0 评论 -
SpringBoot对配置文件中的数据库密码进行加密
方法一:使用数据库连接池 Druid中的非对称加密算法1、引入依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.5</version> </dependenc原创 2021-10-12 15:15:30 · 940 阅读 · 0 评论 -
软件开发中产品与项目区别
很多人都以为软件行业是一个高薪的行业,所以就稀里糊涂的进入了软件行业。然而有很多人在软件行业待了多年,却可能从头至尾都没有整明白软件开发这个行业。现在我们就来聊一聊软件开发行业的一个概况。随着社会的发展,人们对于科技的依赖性越来越严重,这也就意味着需要我们程序人员开发越来越多的软件去供大家使用,方便我们的生活。因此,软件行业就开始迅速的发展起来,然而不论其如何发展,软件开发的公司都可以大体分为两大...原创 2018-06-17 14:09:24 · 9460 阅读 · 3 评论 -
SSM运行原理图
1、客户端发送请求到核心控制器:DispatcherServlet2、核心控制器去请求解析器:HandlerMapping查找对应的处理器(Handler)3、返回执行器链(包含HandlerInterceptor(拦截器)和Handler)4、核心控制器:DispatcherServlet将Handler发给HandlerAdapter适配器5、HandlerAda...原创 2019-01-25 18:05:42 · 2067 阅读 · 0 评论 -
AES工具类及漏铜修复
在使用Sonar扫描代码是发现AES工具类提示如下漏洞很明显。漏洞存在于红色方框Cipher cipher = Cipher.getInstance(“Blowfish/ECB/PKCS5Padding”);查看漏洞详细信息,可以看到漏洞的现象情况,及正确示例存在漏洞的使用方式Cipher c0 = Cipher.getInstance("AES"); // Noncompliant: by default ECB mode is chosenCipher c1 = Cipher.getIn原创 2021-09-27 12:49:33 · 3041 阅读 · 1 评论 -
慎用Arrays.asList和ArrayList部分坑
1、简单的使用Arrays.asListfinal List<Integer> integers = Arrays.asList(1, 3);但是在初始化后我们需要在添加一个元素integers.add(8);我们执行代码,却发现报错了这是为什么啦,按道理来说这不应该,简单的一个语句怎么会报错啦。我们就来看下Arrays.asList的源码可以发现Arrays.asList使用的new ArrayList<>(a);是自己的内部类,而不是我们平常使用的java.原创 2021-07-26 22:15:35 · 338 阅读 · 0 评论 -
JVM虚拟机默认参数
前言我们都知道jvm有一个堆内存的概念,我们可以通过-Xmx:最大堆内存,-Xms初始化堆内存来进行设置。那么当我们不设置时默认是多少呢堆内存这里直接贴上官网jdk1.8的链接https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/parallel.html#default_heap_size翻译如下:默认堆大小除非在命令行上指定了初始堆大小和最大堆大小,否则它们将根据计算机上的内存量进行计算。最大物理内存大小不超转载 2021-07-09 18:09:02 · 852 阅读 · 0 评论 -
git命令大全
分支操作:git branch 查看所有分支列表git branch test 创建test分支git checkout test 切换到test分支git branch -a 查看和远程分支和本地分支git branch -v 查看所有分支最后一次提交git branch -merged 查看别的分支和当前分支合并过的分支git branch -d test 删除本地分支git branch -D test 强行删除本地分支git status 查看当前状态git原创 2021-06-17 22:01:30 · 64 阅读 · 0 评论 -
Java 8 Optional 类
Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。Optional 类的引入很好的解决空指针异常。...原创 2021-06-15 07:30:12 · 192 阅读 · 0 评论 -
maven常用命令
查看maven版本mvn -version清除产生的项目:mvn clean编译源代码mvn compile打包target目录下mvn package mvn install打包并安装到本地仓库mvn install上传到私服mvn deploy指定环境打包mvn clean package -P test -DskipTestsmvn 清理并打包跳过testmvn clean package -DskipTestsmvn clean package -D.原创 2021-06-03 10:40:07 · 56 阅读 · 0 评论 -
通过mvn实现多环境打包
1、在配置文件中新建如下配置环境maven的pom.xml文件配置最后使用mvn命令打包## 开发环境打包mvn clean package -P dev -DskipTests ## 测试环境打包mvn clean package -P test -DskipTests## 生产环境打包mvn clean package -P pro -DskipTests...原创 2021-06-03 10:27:35 · 560 阅读 · 0 评论 -
mybatis-plus2.x和mybatis-plus3.x分页
List<DriverCasePostTreatmentInfoVo> queryPageTaskStatic(@Param("page") Page page, @Param("driver") IDriverTaskParamDto driverTask);原创 2021-06-02 19:34:14 · 528 阅读 · 0 评论 -
java实现简单爬虫
1、引入依赖 <dependency> <groupId>us.codecraft</groupId> <artifactId>webmagic-core</artifactId> <version>0.7.3</version> <exclusions> <exclusion> <groupId>org.slf4j</group原创 2021-06-15 14:22:27 · 72 阅读 · 0 评论 -
跨域问题的后台解决方案
通常我们在跨域是会提示如下错误:Access to XMLHttpRequest at 'http://192.168.09.113:9003/dispatch/export' from origin 'http://10.2.8.79' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.那我我们该如何解决这个问题啦,网上提供转载 2020-12-16 11:53:13 · 247 阅读 · 0 评论 -
将IDEA上存在的项目上传到github上
首先到登录到github新建一个项目转到下面的界面新建会有一个项目地址https://github.com/github/training-kit.git下面操作需要用到。在IDEA界面VCS --> Import into Version Control --> Create Git Repository选择自己要上传的项目,确定会在项目所在路径下生成一个.git的隐藏文件夹此时项目右键会出现git菜单 依次点击Git-->add,Git-->..原创 2020-12-01 18:34:08 · 142 阅读 · 0 评论 -
通过网关访问接口的时候404解决方案
zuul: routes: study-test: path: /test/** service-id: study-test strip-prefix: false study-fusion: path: /fusion/** service-id: study-fusion strip-prefix: falseprefix :前缀,当请求匹配前缀时会进行代理 strip-prefix :...原创 2020-11-02 20:42:33 · 4685 阅读 · 0 评论 -
ThreadLocal作用,原理
ThreadLocal一般被称为线程池本地变量或线程本地存储。起作用是为“当前线程”提供一个临时持有和传递对象的方法。由同一个线程锁执行的代码,只要持有同一个ThreadLocal对象的引用,就都能访问到与当前线程绑定的同一个数据对象。ThreadLocal的内部声明一个自动定义的ThreadLocalMap。它以当前线程对象的引用为key,将希望保存赫尔传递的数据对象存储在这个Map当中。以这样一种方式来为每一个线程分别保存一个值。我们先了解下它里面基础方法:get() :获取到当前.原创 2020-10-28 17:22:22 · 145 阅读 · 0 评论 -
AOP实现项目中日志打印输入
首先我们需要在项目中引入maven依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId></dependency>引人入依赖后为我们就可以开始编写日志切面功能1、编写方法功能名称注解(在打印日志时知道该方法实现的具体功能)/*** @Title:原创 2020-09-27 09:51:41 · 203 阅读 · 0 评论 -
SpringBoot中定时任务@Scheduled详解
在开发的时候,我们可能会经常使用SpringBoot中的@Scheduled来实现定时任务,但是在使用过程中可能常常会遇到一些些问题本来一个定时任务是3秒执行一次,可是过了3秒还是没有执行。这个时候我们就知道为什么会出现这个问题?其实,SpringBoot中的@Scheduled默认是单线程在执行的,这就会出现阻塞。一定要等到一个任务执行完成,才会继续执行下一个任务。所以就出现上述情况。如何证明啦?下面上代码:@Componentpublic class TimeTaskJob {原创 2020-08-24 21:09:53 · 571 阅读 · 0 评论 -
List工具类之List集合去重
问题描述:在开发过程中,我们经常会面临对一个List集合进行去除重复元素的操作?解决思路1、重写一个对象中的hashCode方法equals方法2、方法1、List中的contians进行去除重复的操作方法2、使用java8新特性distinct方法3、利用HashSet特性话不多说,直接上代码1、首先见一个实体类,并重写HashCode和equals方法,参考如下:public class Student { private String name; privat原创 2020-08-23 09:03:59 · 1139 阅读 · 0 评论 -
Java8中GC收集器详解
新生代默认垃圾回收算法:标记复制 老年代默认回收算法:标记整理Minor GC和Full GCMinor GC只针对新生代,触发条件:当Eden区满时,触发Minor GC。Full GC包含新生代和老年代,触发条件:(1)调用System.gc时,系统建议执行Full GC,但是不必然执行(2)老年代空间不足(3)方法区空间不足(4)通过Minor GC后进入老年代的平均大小大于老年代的可用内存(5)由Eden区、From Space区向To Spac...原创 2020-07-06 16:18:45 · 1381 阅读 · 0 评论 -
SpringBoot多环境配置文件处理
假如有开发、测试、生产三个不同的环境,需要定义三个不同环境下的配置。基于properties文件类型你可以另外建立3个环境下的配置文件:applcation.propertiesapplication-dev.propertiesapplication-test.propertiesapplication-prod.properties然后在applcation.properties文件中指定当前的环境spring.profiles.active=test,这时候读取的就是app转载 2020-07-02 16:57:22 · 115 阅读 · 0 评论 -
Java线程面试必知
如何创建线程?(1)、继承Thread类(2)、实现Runnable类(3)、使用匿名内部类(Thread类的构造方法)(4)、通过Executors类创建2、为什么会出现线程安全问题?当多个线程同时共享一个全局变量或者静态变量时,且做写操作时,会发生数据冲突问题,也就是线程安全问题。如何解决线程安全问题通过同步关键字synchronized,或者lock锁。synchronized详解可以分为同步代码块、同步方法,静态同步代码块,静态同步方法synchronized修原创 2020-05-09 21:11:28 · 94 阅读 · 0 评论 -
POI百万数据快速导出excel
我们经常抱怨POI导出非常缓慢,就是我们绞尽脑汁去修改调整还是很慢!那是因为我们没有认真思考过为什么POI导出慢?1、在大数据量的时候导出为什么慢,难道仅仅因为数据量大,POI的性能问题?当然不是,其实很多时候是因为我们自身代码,也存在问题。导出慢很大一部分原因在频繁的创建对象,设置对象的属性!其中最重要的是设置单元格的格式:CellStyle style2 = workbook.cr...原创 2020-04-09 18:50:31 · 1156 阅读 · 0 评论 -
HashMap面试必知
HashMap是java开发中常用的一个,也是面试中几乎必问的一个知识点,英文HashMap中涉及的知识点很多(考察面试者的java础、数据结构、及源码阅读),下面就HashMap的一些知识进行详谈。首先我们看源码中定义的一些变量:以上变量也是HashMap中非常重知识点。下面我们就一一进行详解:DEFAULT_INITIAL_CAPACITY:HashMap的初始化容量16M...原创 2020-03-27 13:32:01 · 169 阅读 · 0 评论 -
List集合实现分页,按页数切割、按条数切割
在一些比较复杂一点的业务逻辑上面,我们经常要用实现手动对List集合进行分页而处理,还有批量插入等他操作,下面就用泛型实现了这些功能,减少工作的重复性。 /** * 泛型实现将List按照每页多少条拆分,再次组装集合包含集合 * @param list * @param pageSize * @return */ public static <T> Lis...原创 2020-03-09 15:18:45 · 1391 阅读 · 0 评论 -
java开发常用技术网站总结
视频学习相关:腾讯课堂:https://ke.qq.com/慕课网:https://www.imooc.com/网易云课堂:https://study.163.com/CSDN学院:https://edu.csdn.net/51CTO学院:https://edu.51cto.com/?wwwdh0蚂蚁课堂:http://www.mayikt.com/图灵学院:http...原创 2019-12-06 16:50:50 · 154 阅读 · 0 评论 -
SpringBoot启动时执行初始化某些数据(InitializingBean)
业务场景,在项目开发的过程中我们经常会遇到一些数据基本不变,但有可能需要频繁的从网络或者数据库的获取,这时我们就可在项目启动的时候初始化一次就好。下面我们以发短信时需要加上国家编码为例:首先我们需求是在项目启动的时候初始化这个数据的话,这个实现需求的话需要实现InitializingBean接口。这样只要项目启动时数据就会初始化。话不多说直接上代码package com.hongyu...原创 2019-11-21 17:44:38 · 3412 阅读 · 2 评论 -
MybatisPlu自动生成CRUD接口(二)
作为一个有一定经验开发人员,一定不希望自己每天都在做简单CRUD操作,这样其实只是在浪费自己的时间,那么有没有什么工具让我们自动生成对数据库的CRUD操作啦?答案是肯定的,下面我们就介绍下如何通过MyBatisPlu中自定义模板(根据自己公司的基本需求)实现符合公司基本要求的CRUD接口(可以直接和前端联调的接口)。话不多说直接讲实现:首先我们要新建一个Maven搭建的SpringBoot...原创 2019-11-12 18:10:26 · 1043 阅读 · 0 评论 -
基于SpringCloud的微服务架构简介
微服务架构:基于SOA架构演变而来,继承了SOA优点,并精细化架构粒度(将服务拆分的更加细致),其每个服务可独立部署,并拥有独立的数据库,服务与服务之间互不影响(如果不存在服务相互调用情况下),采用HTTP+JSON(Restful)进行传输(具有广泛的适用性)。使用微服务架构的优缺点:优点:每个项目独立部署,耦合性低 更加适合敏捷开发(需求进化为核心,采用迭代和循序渐进的方法...原创 2019-11-09 23:34:53 · 217 阅读 · 0 评论 -
HTTP状态码,你程序请求为什么报错了。
HTTP状态码当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。HTTP状态码的英文为HTTP Status Code。下面是常见的HTTP状态码:200 - 请求成功301 - 资源(网页等)被永久转移到其它URL404 - ...原创 2019-05-24 16:26:48 · 252 阅读 · 0 评论 -
详谈HTTP与HTTPS的区别
HTTP:是Hyper Text Transfer Protocol(超文本传输协议)的缩写,用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。底层是基于TCP/IP通信协议来传递数据,是目前互联网上应用最为广泛的一种网络协议。HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,...原创 2019-05-24 16:18:19 · 106 阅读 · 0 评论 -
线程池的四种创建方式和基本理论讲解
线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。使用线程池的好处:1、降低资源开销 (线程的创建和销毁的开销巨大,而通过线程池的重用大大的减少了这些不必要的内存资源的消耗。)2、提高线程的执行效率 (线程任务交给线程池后,无需等待线程的创建立即执行。)3、提高对线程的可管理性 ( 线程的频繁创建,会消耗大量的资源,降低系统稳定...原创 2019-05-18 22:32:26 · 134 阅读 · 0 评论 -
List集合按某个属性或者字段进行分组
List<Object>分组 按照Student对象中的Institution(学院)属性进行分组统计核心代码Map<String, List<Student>> collect = stuList.stream().collect(Collectors.groupingBy(Student::getInstitution));实现代码示例...原创 2019-05-06 20:01:15 · 27125 阅读 · 0 评论 -
Servlet知识点详解
Servlet生命周期:1、实例化 在第一次访问servlet的时候创建servlet对象,只调用一次。证明servlet对象在Tomcat中是单例。2、初始化init()方法 创建完servlet对象的时候调用,只调用1次。3、服务service()方法 每次发出请求是调用。调用N次4、销毁 destroy()方法 销毁servlet对象的时候调用,停止服务器或者重新...原创 2019-04-15 16:51:15 · 257 阅读 · 0 评论