![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java基础篇
dotaer-df
这个作者很懒,什么都没留下…
展开
-
通过@Autowired注入的bean,即使这个类上没有标注@Comment等这一类的注解,但是这个bean依然能够注入进来
问题描述:在公司的项目中进行单元测试的时候发现,即使这个类上没有标注@Comment或者@Service等这一类的注解,但是Bean依然能够注入进来。按理说springboot在进行扫描的时候,没有标注注解的类是不会加载到ioc容器里面,就很奇怪。因为常见注入类到ioc容器中,无非通过注解和xml,注解没配置,那应该就是通过xml实例化了,经过排查发现,在启动类中通过@ImportResource导入了xml文件applicationContext.xml在这个xml中有这样一段配置<...原创 2020-12-11 14:22:58 · 998 阅读 · 0 评论 -
浅谈SPI与JDBC以及为什么不再需要Class.forName(“com.mysql.jdbc.Driver”)
在早期mysql-connector-java连接数据库,在5.1.6之前的版本都需要加上Class.forName(“com.mysql.jdbc.Driver”);当时因为水平有限,也只会跟着敲,不清楚为什么要加这段代码,随着知识储备的提高,接触到了SPI(Service Provider Interface)这个名词,这还是我在Dubbo SPI接触到的,而Dubbo的SPI是对java SPI的一个封装。好了不扯远了。。。什么是JAVA SPI ?SPI的英文名称是Servi...原创 2020-11-16 19:35:05 · 602 阅读 · 0 评论 -
@Transactional注解失效原因之一(同类不同方法)
@TransaTranctional之前一直以为只要在想要加注解的方法上加@Transactional注解就可以开启事务了,而对于其原理是不清楚的,但是其实其中的坑有点多,除了网上各大博主总结的几种情况(详情请看@Transactional失效的6种情况),自己在测试的时候发现还有一种情况就是同一个类中的不同方法都加上@TransaTranctional注解,也会失效(这是因为这是基于Spring的AOP代理实现的,后面搞懂了。。。),下面分析一下这种情况。一个很简单的demo,接口代码省略...原创 2020-11-09 18:29:56 · 1084 阅读 · 0 评论 -
Cglib
最近在公司自研框架中,用到了Cglib技术,而看源码如果不对这些技术有较为深入的理解话,看起来会非常吃力,所以想对其,做一下总结。1.什么是Cglib?CGLIB是一个功能强大,高性能的代码生成包。它相比于jdk的动态代理,它可以对没有实现接口的类进行代理。所以当要代理的类没有实现接口或者为了更好的性能,CGLIB是一个好的选择。2.Cglib代理原理?Cglib原理:动态生成一个要代理类的子类,子类重写要代理的类的所有不是final的方法。在子类中采用方法拦截的技术拦截所有...原创 2020-10-25 11:58:25 · 186 阅读 · 0 评论 -
ajax跨域总结
当一个请求的协议,域名,端口号三者之一即为跨域。本文着重讲怎么处理和分析遇到的跨域问题,对于浏览器同源策略和跨域资源共享只做简要描述。有一定同源策略和跨域知识的程序员可以直接看第三章跨域问题处理方法.目录:一、跨域问题的来源二、跨域请求三、请求跨域处理方法一、跨域问题的来源跨域问题我们只会在浏览器中看到,在服务器、PC客户端、IOS/安卓APP端我们是碰不到跨域问题的.跨域问题的源头在于浏览器的同源策略,所谓同源策略是指域名,协议,端口相同。当我们违反了浏览器同源策略时,可能就转载 2020-06-19 14:40:49 · 192 阅读 · 0 评论 -
Lombok的三个使用场景
Lombok大家都知道可以注解在实体类帮我们省去了大量的冗余代码,但是还有两个使用场景1.@Date注解在类上 帮我们自动生成get/set 等一些列方法2.@Slf4j 注解在类上 帮我们自动生成Logger日志对象3.@Cleanup与io对象一起注解可以帮我们自动关闭close。无需手动在final中调用close...原创 2020-05-17 14:55:10 · 265 阅读 · 0 评论 -
强,软,弱,虚引用非常通俗易懂的代码理解
网上关于四种引用长篇概论很多,不过大多是理论,看是看懂了可能就是一头雾水,下面我用很简单的代码帮助你加强理解和记忆。前述:除了强引用外,其他引用不是我们所常见的 new出来的对象,而是需要借用3个类SoftReference软引用,WeakReference弱引用,PhantomReference虚引用1.强引用概述:即发生OOM(Out Of Memory)内存空间满了也不会去回收,...原创 2020-04-30 12:02:48 · 647 阅读 · 0 评论 -
单例模式——双重检查为什么要加voliate
无意中听了马士兵老师讲的jvm相关知识,感触颇多。现在想通过博客这种方式回顾和复习,加深印象。双重检查为什么要加voliate呢/** * 描述: 双重检查(推荐面试使用) */public class Singleton6 { private volatile static Singleton6 instance; private Singlet...原创 2020-04-14 10:05:57 · 1199 阅读 · 2 评论 -
mysql数据库相关知识
一.事务事务有4个特效“:1.原子性:即一个事务不可再分割,在一个事务中的DML语句要么全成功,要么全失败。2.一致性:即事务前后数据库中的状态应该一致,比如A给B转账,那么转账之后他们的总金额应该是不变的。3.隔离线:即事务A不会 影响事务B4.持久性:即事务一旦提交,那么对数据影响是永久的,就算服务器关闭,那么数据也会存在。二.事务的并发问题1.脏读:即事务B在更新...原创 2020-04-05 13:10:37 · 230 阅读 · 1 评论 -
HashMap是什么
网上有篇博文总结得很好,始终贯彻避免重复造轮子,我就直接引用这篇博客了。。。。原文地址:https://www.cnblogs.com/chengxiao/p/6059914.html哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,本文会对java集合框架中HashMap的实...转载 2020-03-24 19:01:10 · 587 阅读 · 0 评论 -
慕课网java并发课程体系面试题总结
面试高频考点1.有多少种实现线程的方法?典型错误答案和正确答案答:实现线程方式有两种,一种继承Thread类,一种实现Runnable接口。典型错误观点(1).线程池创建线程也算是一种新建线程的方式(2).通过Callable和FutureTask创建线程,也算是一种新建线程的方式(3).无返回值是实现runnable接口,有返回值是实现callable接口,所以callable是新的...原创 2020-03-10 19:55:10 · 690 阅读 · 2 评论 -
正确捕获子线程异常的姿势
我们都知道在线程在出现异常的时候,这条线程会终止。而在多线程环境下,是无法用传统方法来捕获子线程的异常,也就是说无法处理,现在我们来模拟一下这种情况public class Test7 implements Runnable { public static void main(String[] args) throws InterruptedException { Test7 te...原创 2020-02-23 16:45:08 · 299 阅读 · 0 评论 -
线程停止方法再次总结
有关线程停止的常用方法有这3个: Thread thread = new Thread(new Test()); void thread.interrupt(); boolean thread.isInterrupted(); boolean Thread.interrupted();第一个方法是将thread对象所在的线程停止状态标示为true(true代表停止...原创 2020-02-19 20:00:18 · 458 阅读 · 0 评论 -
设计模式七大原则
1.单一职责原则即一个类只负责一项职责,如类A负责两项不同职责,职责1和职责2,当职责1需求变更时可能会改变A时,可能会导致职责2执行错误,所以要将类A分解为A1,和A2。通常情况下,我们应该遵守单一职责原则,只有在逻辑足够简单,才不用遵守。2.接口隔离原则将一个臃肿的接口拆分为几个小接口,比如现在有1个接口包含abcde5个方法,还有A,B两个类,但是A只想3.依赖倒转原则4.里氏替换...原创 2020-01-16 20:20:06 · 131 阅读 · 0 评论 -
常考面试题(5)-redis持久化策略
redis的持久化方式有俩种,持久化策略有4种:RDB(数据快照模式),定期存储,保存的是数据本身,存储文件是紧凑的AOF(追加模式),每次修改数据时,同步到硬盘(写操作日志),保存的是数据的变更记录如果只希望数据保存在内存中的话,俩种策略都可以关闭也可以同时开启俩种策略,当Redis重启时,AOF文件会用于重建原始数据RDBRDB定时备份内存中的数据集。服务器启动的时候,可以从 RD...转载 2020-01-06 12:04:47 · 169 阅读 · 0 评论 -
常考面试题(4)-Mybatis实体类中属性名与表中字段冲突的解决办法
(1).在映射文件中起别名select 表中字段 实体类字段 from xx(2).在mybatis全局配置文件中修改开启驼峰命名规则在标签内加入<settings><setting name="mapUnderScoreToCamelCase" value="true"/></settings>这种方式仅限于使用下划线的命名规则 last_nam...原创 2020-01-06 10:27:34 · 203 阅读 · 0 评论 -
常考面试题(3)-数据库的事务传播和隔离级别
1.什么是事务传播行为当事务方法被另外一个事务方法调用时,必须指定事务如何传播的。例如:方法可能继承现有的事务,或者开启一个新的事务,并在自己的事务中运行。Sping定义了7种事务传播类型。传播属性描述REQUIRED如果有事务在运行,当前的方法就在这个事务中运行,否则,就启动一个新的事务,并在自己的事务中运行(默认值)REQUIRES_NEW当前方法必须启动新的...原创 2020-01-05 15:24:05 · 246 阅读 · 0 评论 -
常考面试题(2)-成员变量和局部变量
1.成员变量和局部变量的区别:(1).声明的位置:局部变量:在方法体中,代码块里,形参成员变量:在类中方法体外它又分为:类变量(有static修饰的变量)和实例变量(无static修饰的变量)(2).修饰符:局部变量:只能用修饰符final成员变量:可以是 public,protected,private,final,static,volatile,transient(3).值存储...原创 2020-01-04 15:48:26 · 257 阅读 · 0 评论 -
常考面试题(1)-类初始化过程
1.类初始化过程一个类需要创建实例,需要先加载和初始化类,main方法所在的类首先被初始化如下面的例子:运行结果是多少呢:例1:public class Class2 extends Class1 { private int j = test(); private static int k = method(); static { System.out.print("6-...原创 2020-01-04 11:20:53 · 146 阅读 · 0 评论 -
Get和Post的真正区别
网上关于get和post的区别大多相同,不过那些并不是真正的区别,只是一种约定一种规范,至于你尊不遵守,这个就要看自己了。辟谣:1:常说区别get用于获取信息,post用于提交数据改变目标服务器的信息,这只是一种约定,并不是区别。而浏览器正是遵守这种约定,get请求它一般是没有副作用的,所以get请求可以被浏览器缓存起来,试想如果get一下用户就下单了,返回订单已受理,这是不能接受的,这就是有...原创 2019-12-11 21:37:52 · 286 阅读 · 0 评论 -
同步,异步,阻塞,非阻塞
之前看过一个很形象的例子来说明同步异步阻塞非阻塞。场景: 小明使用 chrome 下载一个软件。同步阻塞小明使用 没有提醒功能的chrome 下载一个软件。小明 一直坐在电脑面前什么事也不做, 等待软件下载完成。阻塞:小明(调用者) 等待电脑下载完成,什么事也不做(当前进程挂起) 。同步: 没有提醒功能的 chrome(被调用者)总结: 调用结果返回前,进程挂起,等待调用结果返回。效...转载 2019-11-18 15:29:43 · 107 阅读 · 0 评论 -
自己的理解equals,hashcode,==的关系以及为何重写hashcode
首先equals和hashcode方法都是Object方法这是Object的equal方法源码 public boolean equals(Object obj) { return (this == obj); }其实就是用 == 来比较的, ==别管其他的就是比较两个对象是不是同一个对象,不管内容是否相同。比如:class User { private Str...原创 2019-11-16 13:47:05 · 123 阅读 · 0 评论 -
Collection 和 Collections的详细区别
共同点:1.都是java.util包下的2.都是关于集合类的操作不同点:1.Collection是一个接口,它是某些集合类的父接口如下这张图Set,List都是其子接口,而Map不是。2.CollectionsCollections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全等操作Connections中实用方法的介绍: //...原创 2019-11-15 11:10:45 · 195 阅读 · 0 评论 -
ArrayList、LinkedList区别以及速度比较
众所周知1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。不过也不是一定的当需要插入数据的时候,如果是在集合的前段(大概集...转载 2019-11-14 19:17:41 · 485 阅读 · 0 评论 -
String、StringBuilder以及StringBuffer详解 以及其常考面试题和答案解析
1.String、StringBuilder以及StringBuffer区别(1).String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的例子:public static void main(String[] args) { String a = "123"; System.out.printl...原创 2019-11-14 18:31:50 · 321 阅读 · 2 评论 -
什么是稀疏数组以及一个小例子
为什么要用稀疏数组比如说以下这种情况0 0 0 0 0 0 0 4 00 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 00 0 0 0 0 0 7 0 0只有两位有效数字其他全是0,很多0值无疑是很浪费空间的,这时我们就会使用稀疏数组来存入他的有效信息将以上数组转为稀疏数组为:row column value4 9 20 7 ...原创 2019-09-23 20:17:40 · 381 阅读 · 0 评论 -
二分法学习以及经典面试题
记录一下学习的二分法二分法适用于:(1). 该数组数据量巨大;{2}. 该数组已经排序;(3). 一般要求找到的是某一个值二分法的写法很多种掌握其中一种就行了常规写法:public Integer erfenfa(Integer target,Integer[] array) { Integer min = 0; Integer max = array.length-...原创 2019-08-26 20:40:20 · 452 阅读 · 0 评论 -
java基础总结二--让大学生活不再迷茫
承接我的上一篇博客java基础总结1https://blog.csdn.net/weixin_43410352/article/details/8707337210.java的三大特性封装:这是java受欢迎的重要原因,它将所有功能方法都封装进一个对象当中,通过对象 .点就可以很方便的使用,完全不用知道里面是如何使用的,比如产生一个随机数 你只需要Random random=new Ran...原创 2019-02-13 21:50:41 · 628 阅读 · 0 评论 -
java基础总结一--让大学生活不再迷茫
这是我的第一篇博客,目前学了很多技术,也通过这些技术做过一些项目,许多一看就懂相同简单的地方往往通过复制代码,当自己实际操作并才发现不是这样总是忘东忘西,从现在开始着重复习基础,丛头开始,往后也将持续更新博客,如果有误,还请指正!!一:基础部分1.jvm,jre,jdk三者的区别jvm:英文名称(Java Virtual Machine)它就是java的虚拟机,也是最核心的部分,所有的jav...原创 2019-02-12 22:09:16 · 763 阅读 · 3 评论 -
java基础总结四--让大学生活不再迷茫
承接我的上篇博客java基础总结一https://blog.csdn.net/weixin_43410352/article/details/87073372java基础总结二https://blog.csdn.net/weixin_43410352/article/details/87201024java基础总结三https://blog.csdn.net/weixin_434103...原创 2019-02-18 14:13:24 · 722 阅读 · 0 评论 -
java基础总结三--让大学生活不再迷茫
承接我的上篇博客https://mp.csdn.net/mdeditor/87073372# java基础总结一https://mp.csdn.net/mdeditor/87201024# java基础总结二13.javaAPI一.Java中的String,StringBuilder,StringBuffer三者的区别(1)String在于一旦创建将不能再更改String str=...原创 2019-02-16 10:21:06 · 618 阅读 · 0 评论