JAVA基础
基础知识:反射、容器、泛型、等基础内容
Y-S-P
脑子不好使,笔记来凑
展开
-
双亲委派机制
通俗的讲,挺好理解的:就是去问自己的上一级,是否有这个类,你有的话,你加载我就不需要加载了。自定义类 —询问—>AppClassLoaderAppClassLoader—询问—>ExtClassLoaderExtClassLoader—询问—>BootstrapClassLoader加载的顺序是:【就是先看顶级有没有,没有再看下一级】BootstrapClassLoader>>ExtClassLoader>>AppClassLoader源码分析prot原创 2020-10-28 18:47:40 · 80 阅读 · 0 评论 -
HashMap底层(1.7和1.8)的存储原理
首先说一下jdk1.7版本的存放原理:当实例化后,底层会直接创建一个长度为16的一维数组entry[] table;然后,说一下添加元素时,调用put方法:(三种情况存储)方式一:底层根据key计算hash值,计算出索引位置,查看当前位置是否有值,如果没有值,直接存放。情况二:当计算出的索引位置,有值时(可能会存在链表结构),此时计算hash值是否相等,如果不等,则存放(以链表形式)。此时,存放链表的形式:新添加的元素,插在此处,其他元素,下移(这是jdk1.7存放的方式)。情况三:在情况二的基原创 2020-10-30 13:01:56 · 504 阅读 · 0 评论 -
ArrayList底层(1.7和1.8)变化
首先说jdk1.7:当实例化ArrayList时,创建长度为10的object[ ] ;当add添加到11个的时候,扩容,扩容为原来的1.5倍。将原来的数据复制到新的数组中。建议使用new ArrayList(int capacity)直接声明数组的大小;然后说一下1.8的变化:当实例化是,创建object[ ] ,初始化为 { },并没有长度。当添加第一个元素时,创建长度为10的数组。后续一致。1.7类似,饿汉式1.8类似,懒汉式1.8的优点:延迟数组的创建,节省内存vector的原创 2020-10-30 13:01:13 · 1169 阅读 · 1 评论 -
时间戳加减天数或分钟转为时间戳
// 获取当前时间戳 -2天 的时间戳final long beforeTwoDay = Instant.ofEpochMilli(System.currentTimeMillis()).plus(-2, ChronoUnit.DAYS) .toEpochMilli();// 获取当前时间戳 -1分钟 的时间戳final long beforeOneMinuTes = Instant.ofEpochMilli(System.currentTimeMillis()).plus原创 2021-07-20 17:13:27 · 1037 阅读 · 0 评论 -
Swagger使用教程以及常用注解
第一步:引入依赖,swagger2和swagger-ui两个依赖。 <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</art原创 2020-10-26 17:10:40 · 771 阅读 · 0 评论 -
15个Java线程并发面试题和答案
面试Java开发者时常问的15个Java多线程和并发问题现在有线程 T1、T2 和 T3。你如何确保 T2 线程在 T1 之后执行,并且 T3 线程在 T2 之后执行?这个线程面试题通常在第一轮面试或电话面试时被问到,这道多线程问题为了测试面试者是否熟悉 join 方法的概念。答案也非常简单——可以用 Thread 类的 join 方法实现这一效果。Java 中新的 Lock 接口相对于同步代码块(synchronized block)有什么优势?如果让你实现一个高性能缓存,支持并发读取和单一转载 2021-03-29 19:43:27 · 148 阅读 · 0 评论 -
报错Cannot call sendError() after the response has been committed
查了一下百度 同一个报错(但是问题可能不太一样)查百度无结果,只能自行检查:我debug,发现我的,查询结果是有的返回报错了:查询报错信息(栈溢出)。然后就查返回结果集是否有问题,查实体,发现实体嵌套实体又嵌套List然后list实体又包含实体,导致栈溢出因为刚入手JPA项目,还不太熟,查了很久。最后解决办法找到了一个(Java 实体映射工具 MapStruct)感兴趣可以看看官网文档。...原创 2021-04-15 13:19:23 · 408 阅读 · 0 评论 -
JPA的动态SQL IF判断
最近需求复杂的sql,使用JPA的ORM不太好解决学习了JPA的IF判断,来处理 @Query(value = "select pr.*\n" + "from project_roster pr\n" + "left join exam_position ep on pr.id = ep.project_roster_id\n" + "left join online_exam_position oep on pr.id =原创 2021-04-15 13:07:30 · 11222 阅读 · 0 评论 -
学习Java 8的核心新特性:Lambda(匿名函数)、流
一、Lambda——匿名函数等效方法引用Lambda表达式等效方法引用(String s) -> System.out.println(s)System.out::println((str, i) -> str.substring(i)String::substring() -> Thread.currentThread().dumpStack()Thread.currentThread()::dumpStack函数式接口就是只定义一个抽象方原创 2021-04-28 19:19:30 · 1679 阅读 · 1 评论 -
记录:使用java将excel数据导入MySQL
pom文件<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency原创 2021-05-14 17:59:00 · 319 阅读 · 2 评论 -
Commons-io工具的使用
commons-io的pom<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version></dependency>常用方法(文件、文件夹,创建复制移动删除)判断文件是否存在,不存在创建(mkdirs多层目录创建,mkdir单创建) if原创 2021-05-18 14:13:26 · 762 阅读 · 0 评论 -
简单整理时间处理问题
日期 LocalDate:// 查看当天 年月日LocalDate date= LocalDate.now(); // 2021-06-30 //格式化:转为String String str2 = date.format(DateTimeFormatter.ISO_LOCAL_DATE); // 2021-06-30 String str1 = date.format(DateTimeFormatter.BASIC_ISO_DATE); // 20210630 DateTimeF原创 2021-06-28 10:01:40 · 147 阅读 · 0 评论 -
利用alibaba的fastjson实现,json<==>string<==>对象之间的转换
第一种 : 对象转为转为json字符串String string = JSONObject.toJSONString(对象);第二种 :json字符串转为json对象JSONObject jsonObject = JSONObject.parseObject(JSON字符串);第三种 :json字符串转为对象对象 info= JSON.parseObject(对象字符串, 对象.class);第四种 :将无泛型集合转为指定类型集合对象 info = JSONObject.toJSO原创 2021-03-16 15:20:38 · 965 阅读 · 0 评论 -
stream使用
根据书籍Id查询句子:过滤,去重// 获取到对应页码的句子信息: 文字不为空, code!=0, 文字不重复collect = resourceCodes.stream().filter(r -> StringUtils.isNotBlank(r.getText()) && r.getCode() != 0) .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new Tree原创 2021-07-09 11:31:24 · 182 阅读 · 0 评论 -
linux 解压命令zip包
unzip 压缩包名称 解压到当前文件夹unzip 包 -d 目录名unzip -O GBK 英语(新标准)一年级起点二年级下册_ResVer_1612589200_65542_mpp_mpv_mp.zip -d /mnt/incoming/course/sxgtest例如:解压到当前目录下(GBK是解压内容带中文 需要GBK)unzip -O GBK MP3.zip ...原创 2021-07-09 11:29:05 · 321 阅读 · 0 评论 -
jdk8使用流去重以及常用函数
对象去重TreeSetStudent student1 = new Student("张三",20,"周");Student student2 = new Student("李四",30,"上号");Student student3 = new Student("王五",18,"阿西吧");Student student4 = new Student("氨纶",19,"阿西吧");Student student5 = new Student("氨纶",19,"阿西吧1");List<St原创 2021-04-29 12:41:19 · 639 阅读 · 0 评论 -
The Tomcat connector configured to listen on port 12000 failed to start.
The Tomcat connector configured to listen on port 12000 failed to start.原因:12000端口被占用了… 一脸懵逼? 没启动怎么被占用了…解决:1.打开cmd命令窗口 输入如下指令查看所有端口和PIDnetstat -ano2.找到对应的端口对应的PID 输入指令找到对应的进程 tasklist | findstr "20836"3.杀掉该进程 再次启动就OK啦 taskkill /f /t /im java原创 2021-04-13 10:45:48 · 372 阅读 · 0 评论 -
jdk8新增 optional 用法
1 创建optionalOptional<Department> department = Optional.empty(); 创建空对象Optional<Employee> optEmployee = Optional.of(employee); 创建非空对象Optional<Employee> optEmployee = Optional.ofNullable(employee); 允许为空的对象2 optional方法isPresent 如原创 2021-05-07 21:52:54 · 158 阅读 · 0 评论 -
CacheBuilder本地缓存笔记
项目中应用到部分代码 //声明本地缓存 private static final Cache<String, List<String>> textContentCache = CacheBuilder.newBuilder().expireAfterWrite(10, TimeUnit.MINUTES).build(); //TODO 现在使用本地缓存,之后改为,如果是文本文件,可以压缩后再缓存到redis;然后拿到后解压缩(这个过程可以封装为原创 2021-04-27 16:45:36 · 1048 阅读 · 0 评论 -
Git已提交代码,强行回退,覆盖曾提交过得代码(删除提交记录)
工具:SourceTreegit版本控制第一步:选择想要回退提交的地方,回滚直接确定:无需其他操作此时:回到了当前提交的状态(文件该储藏,该丢弃,自己选择):我这里是直接储藏(因为提交错分支了,代码还要)。切记不要拉取(否则又回到了原点)当前状态:(这里应该是有1,拉去回到原点)找到:工具,选项找到git最后:直接推送回退完毕:历史记录都没有(假装没提交过)切记:回滚之间,只有自己的代码(否则别人的代码,也会被删除)...原创 2021-07-21 18:10:22 · 1168 阅读 · 0 评论 -
java实现发送邮件,与常见问题
此文章,实现java发送邮件,带附件,带内容测试。①jar包 :<dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.6.2</version></dependency>其他的mail jar包也可以,像:<dependency>原创 2021-01-27 10:53:36 · 218 阅读 · 0 评论 -
switch语句case使用枚举:应用
例一: public static enum WeChatRecordMsgType { EVENT("event"), TEXT("text"), IMAGE("image"), VOICE("voice"), VIDEO("video"); private final String msgType; WeChatRecordMsgType(String msgType) {原创 2021-06-28 19:52:57 · 2175 阅读 · 0 评论 -
时间戳转LocalDate,判断两个时间戳是否在某几个月内
坑:方法年月日计算是分开计算的//例如: localDate:2021-08-01 localDate1:2022-10-02Period period = Period.between(localDate, localDate1);System.out.println(period.getYears()); // 1 2022-2021System.out.println(period.getMonths()); // 2 10-08Sy原创 2021-07-30 17:20:13 · 2327 阅读 · 0 评论 -
fastJSON应用,记录一下
最近处理了一个json数据。就很有意思,然后记录一下。我的想要的是《下图》中ipenid里面的数据,转成list,就是我想要的结果(其实也很简单)我使用的是fastJSON,其他的JSON,可能都有相同的功能,方法可能不同而已。 System.out.println(responseEntity.getBody()); String body = responseEntity.getBody(); //图中的数据 JSONObject j = JSONO原创 2021-02-04 17:32:06 · 104 阅读 · 0 评论 -
面试题临时准备
Arraylist和linklist的区别:ArrayList与LinkedList都是List接口的实现类,因此都实现了List的所有未实现的方法,只是实现的方式有所不同。ArrayList实现了List接口,以数组的方式来实现的,因此对于快速的随机取得对象的需求,使用ArrayList实现执行效率上会比较好。LinkedList是采用链表的方式来实现List接口的,因此在进行insert和remove动作时效率要比ArrayList高。适合用来实现Stack(堆栈)与Queue(队列)。Arr原创 2021-07-21 09:49:23 · 126 阅读 · 1 评论 -
java繁琐的时间转换
String和Date转换string--->dateSimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");String dateStr = "2021-12-31";Date date = sf.parse(dateStr);----------------------------------date--->stringDate date = new Date();SimpleDateFormat sf = new原创 2021-05-11 17:49:09 · 137 阅读 · 0 评论 -
多线程推送消息demo
package com.example.demo.duoXianCheng;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;import原创 2021-07-20 17:15:44 · 224 阅读 · 0 评论 -
数据库查看内存,数据大小
查看数据库:表,记录数,大小selecttable_schema as '数据库',table_name as '表名',table_rows as '记录数',(truncate(data_length/1024/1024/1024, 2) + truncate(index_length/1024/1024/1024, 2) ) as '容量(GB)'from information_schema.tableswhere table_schema='ddb_resources'order原创 2021-07-15 10:42:19 · 1081 阅读 · 0 评论 -
Process finished with exit code 1的问题
情景一:logback-spring.xml 版本冲突,或者logback-spring.xml 文件的格式错误导致。解决方法:仔细检查文件里的格式,去掉冲突的依赖版本情景二:yml配置文件,pom文件里有错误,可能是错字或者其他。解决方法:仔细检查文件里的内容,保证格式和内容正确。情景四:连接时间设置的太短,项目没来得及启动就结束了解决方法:将 .yml或者 .properties文件里的timeout参数设置的高一点 比如 5000情景五:这也是笔者亲历的情景,没有在edit conf原创 2021-07-27 10:55:04 · 1798 阅读 · 2 评论 -
eclipse从svn下拉去springboot项目
点击finish,目前就成功从svn剪出来项目了。第二部就是,导入springboot工程(聚合工程)一般来说,直接选择最上级目录,就可以把子集都导入进来。但是也有子集的子集。手动导入就可以了手动单个导入点击完成就可以了...原创 2021-02-24 10:46:19 · 840 阅读 · 0 评论 -
SQL表与表之间的插入
insert into 表1 select * from 表2 例如: insert into ddb_resources.ddb_vip_redeem_code_info ( SELECT * FROM ddb_vip.ddb_vip_redeem_code_info )原创 2021-07-09 11:32:53 · 598 阅读 · 0 评论 -
sourcetree配置github使用ssh方式
首先打开sourcetree软件点击Terminal(命令行)输入 git config --global user.name “你的名字或昵称” git config --global user.email “你的邮箱” 进行git的初始配置 进行ssh密钥配置输入 ssh-keygen -t rsa -C “你的邮箱” 这里你的邮箱最好输入你注册码云时候的邮箱吧 然后敲击4次回车,成功向sourcetree导入ssh密钥 打开sourcetree软件,点击工具-》选项,将配置原创 2021-07-28 20:02:25 · 1410 阅读 · 0 评论 -
jdk9 11 13加强
JDK9 集合加强 List strs = List.of("Hello", "World"); List strsCopy = List. copyOf(strs); Set strs = Set.of("Hello", "World"); Map maps = Map.of("Hello", 1, "World", 2);stream()stream 方法的作用就是将 Optional 转为一个 Stream,如果该 Optional 中包含值,那么就返回包含这个值的 Stream,否则返原创 2021-05-08 11:46:58 · 119 阅读 · 0 评论 -
单例设计模式:常用的三种(手打,未测试)
单例设计模式:一、饿汉式public class Instance{ private static Instance instance = new Instance(); //初始化就创建 pricate Instance(){} //构造器私有化 public static Instance getInstance(){ //调用直接返回 if(instance == null){ synchronized(Instancce.Class){ if(insta原创 2021-07-28 09:36:46 · 84 阅读 · 0 评论 -
oss阿里云文件上传
首先,进入阿里云搜索oss对象存储。需要开启oss对象存储。开启之后,直接可以进入管理控制台。所需要的依赖:<dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.8.0</version></dependency><dependen原创 2020-10-25 12:26:14 · 289 阅读 · 0 评论 -
stream使用(二)对标list,包涵元素
创建两个listList<String> list1 = new ArrayList();list1.add("1111");list1.add("2222");list1.add("3333");List<String> list2 = new ArrayList();list2.add("3333");list2.add("4444");list2.add("5555");两个list比较// 交集List<String> intersect原创 2021-05-18 10:26:22 · 655 阅读 · 0 评论 -
java利用反射,给属性赋值,获取值测试Demo
基本使用,就是这样。具体使用,灵活多变,看自己怎么使用 //一般情况下,需要属性名,属性值 Field field = null; //属性名 String fieldName = null;//属性值 Class<?> aClass = XXX实体类.getClass();//实体类class try { field = aClass.getDeclaredField("字段名"); //打开私有访问原创 2021-02-07 14:54:17 · 130 阅读 · 0 评论 -
冒泡排序,快速排序
冒泡排序:算法描述:比较相邻的元素。如果第一个比第二个大,就交换它们两个;对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;针对所有的元素重复以上的步骤,除了最后一个;重复步骤1~3,直到排序完成。如果两个元素相等,不会再交换位置,所以冒泡排序是一种稳定排序算法。public class T001 {// 被排序的数组 arr public static void asort(int[] arr){ for(in原创 2020-10-27 13:32:52 · 138 阅读 · 0 评论 -
java中==与equals的区别详细介绍
首先介绍一下==号:①它常用于比较数值类型,不做多解释。②当它用于比较对象时,它比较的是个对象的地址值。③当它比较字符串时,那么重点来了,要注意一下细节:首先,举个例子: String s1= "abc"; String s2="abc"; System.out.println(s1==s2);此时的结果是个true。我来解释一下:这就涉及到了内存中的常量池,常量池属于方法区的一部分,当运行到s1创建对象时,在编译时期,查看如果常量池中没有这个对象,就在常量原创 2020-10-11 13:09:50 · 198 阅读 · 2 评论