java基础
文章平均质量分 78
百事皆可乐~
一切皆有可能
展开
-
为什么在项目中使用List<String> list = new ArrayList<String>()而不是用ArrayList<Object> list = new ArrayList<>()
这里的list和接口都是抽象,依赖的类应该依赖抽象,而不是具体实现。写成ArrayList<Object> list = new ArrayList<>(),那么依赖他的方法参数只能是ArrayList,不能是LinkedList,如果真的要修改具体实现就需要改多行代码,代码维护复杂。软件设计6大原则中的依赖倒置原则,高层模块不应该依赖低层模块,两者都应该依赖其抽象。原创 2023-06-10 21:58:32 · 191 阅读 · 0 评论 -
史上最完整的Spring Bean的生命周期
Bean的生命周期总。原创 2023-05-29 14:18:02 · 815 阅读 · 0 评论 -
HashMap集合
如果我们创建HashMap没有指定容量(默认就是16)如果指定了初始容量n,则容量是大于等于n的最小2次幂。这个是我们给定初始容量,最终会调用tableSizeFor(n)这个方法进行判断初始容量。使用无符号右移,或运算。(就是找出大于等于n的最小2次幂)HashMap长度为2的幂次方的原因是为了减少Hash碰撞,尽量使Hash算法的结果均匀。首先看一下HashMap中putVal方法的源码其中有个( n - 1) & hash的方法,那么这个方法是干什么的呢?HashMap为了存取高效,就要尽量原创 2022-07-05 15:32:42 · 215 阅读 · 0 评论 -
抽象类和接口的区别,以及使用场景?
接口中的默认方法:1.抽象类的使用场景既想约束子类具有共同的行为(但不再乎其如何实现),又想拥有缺省的方法,又能拥有实例变量如:模板方法设计模式,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中某些步骤的具体实现。2.接口的应用场景① 约束多个实现类具有统一的行为,但是不在乎每个实现类如何具体实现② 作为能够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识。③ 实现类需要具备很多不同的功能,但各个功能之间可能没有任何联系。④ 使用接口的引用调用具体实现类中实现的方法(多态)....原创 2022-06-16 10:47:23 · 6860 阅读 · 3 评论 -
谈谈equlas()和hashcode()方法的之间的关系(为什么重写equlas方法必须要重写hashcode方法)?
对象在不重写的情况下使用的是Object的equals方法和hashcode方法,从Object类的源码我们知道,默认的equals 判断的是两个对象的引用指向的是不是同一个对象;而hashcode也是根据对象地址生成一个整数数值;Java中的hash值主要是用来在散列存储结构中确定对象的存储地址的,提高对象的查询效率。hashcode方法就是用来高效判断对象是否相等的,一般用在equals前面,hash值相同即判断两对象相等,但是由于不同对象可能拥有相同的hash(hash冲突),因此需要equals再原创 2022-06-16 10:17:18 · 121 阅读 · 0 评论 -
1-3年的java面试题,持续更新中ing
java面试题,面试题原创 2020-11-21 14:17:50 · 2005 阅读 · 2 评论 -
springcloud面试题
1.什么是微服务?微服务的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,从技术角度看就是一种小而独立的处理过程,类似进程概念,能够自行单独启动或销毁,拥有自己独立的数据库。2.SpringBoot和SpringCloud的区别?SpringBoot专注于快速方便的开发单个个体微服务。SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供原创 2021-02-27 16:28:38 · 131 阅读 · 0 评论 -
TCP 三次握手和四次挥手的流程
有的人上来就开始吹,一些专业术语都不知道是什么意思,看来也是白看。下面讲一下,三次握手和四次挥手中用到的一些英文术语:SYN, FIN, ACK,seq, PSH, RST, URG.SYN表示建立连接,FIN表示关闭连接,seq(顺序号码),ACK表示响应,PSH表示有 DATA数据传输,RST表示连接重置。三次握手的过程第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN。此时客户端处于 SYN_SENT 状态。首部的同步位SYN=1,初始序号se原创 2022-05-13 11:53:49 · 224 阅读 · 1 评论 -
Synchronized和ReentranLock锁的区别
Synchronized和ReentranLock的区别原创 2022-04-26 16:26:16 · 1122 阅读 · 0 评论 -
Github搜索学习以及关键字的使用
常用词含义watch:会持续收到该项目的动态fork:复制某个仓库到自己的Github仓库中star:可以理解为点赞clone:将项目下载至本地follow:关注你感兴趣的作者,会收到他们的动态in关键字限制搜索范围公式:XXX关键字 in:name 或 description 或 readmexxx in:name 项目名称含有XXX的xxx in:description 项目描述含有XXX的xxx in:readme 项目的readme文件中包含XXX的组合使用xxx in:原创 2022-04-18 15:45:01 · 1613 阅读 · 0 评论 -
String中intern()的使用
解释intern()的使用之前,我们要是知道String s = new String(“ab”)和String s = new String(“a”) + new String(“b”)的区别:0.String s = new String(“ab”)和String s = new String(“a”) + new String(“b”)的区别?String s = new String(“ab”)创建了两个对象 ,堆空间中一个new对象 ,字符串常量池中一个字符串常量"ab"(注意:此时字符串常原创 2022-04-11 16:52:48 · 426 阅读 · 0 评论 -
谈谈获取线程,以及线程池
1.获取多线程的方法继承Thread类,重写Thread类的run()实现Runnable接口实现Callable接口使用线程池获取2.说一下Callable接口重点说一下Callable接口,是一种让线程执行完成后,能够返回结果的。/** * Callable有返回值 * 批量处理的时候,需要带返回值的接口(例如支付失败的时候,需要返回错误状态) * */class MyThread2 implements Callable<Integer> { @Ove原创 2022-04-07 21:11:30 · 3930 阅读 · 0 评论 -
spring中bean的生命周期
spring中bean的生命周期Spring中的bean的生命周期主要包含四个阶段:实例化Bean–> Bean属性填充–>初始化Bean—>销毁Bean1.首先是实例化Bean,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的依赖时,容器就会调用doCreateBean()方法进行实例化,实际上就是通过反射的方式创建出个bean对象。2.Bean实例创建出来后,接着就是给这个Bean对进行属性填充,也就是注入这个Bean依赖的其它bea原创 2022-03-30 11:21:58 · 616 阅读 · 0 评论 -
JAVA创建对象的五种方法
1.用类的new创建对象User user = new User( );2.用clone方式创建,需要类实现cloneable接口Employee emp4 = (Employee)emp3.clone();3.使用反射机制,是使用Class类调用newInstance方法。person p2=(person)Class.forName(“ioText/tex2”).ne...原创 2020-03-30 17:27:00 · 98 阅读 · 0 评论 -
JAVA常用的快捷键
1 执行(run) alt+r2 提示补全 (Class Name Completion) alt+/3 单行注释 ctrl + /4 多行注释 ctrl + shift + /5 向下复制一行 (Duplicate Lines) ctrl+alt+down6 删除一行或选中行 (delete line) ctrl+d7 向下移动行(move state...原创 2020-03-30 18:05:35 · 975 阅读 · 0 评论 -
Thread的常用方法
(一)测试Thread中常用方法1.start():启动当前线程;调用当前线程的run() 2.run(): 通常 需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中 3.currenThread();静态方法,返回执行当前代码的线程 4.getName(),获取当前线程的名字 5.setName(),设置当前线程的名字 6.yield():释放当前cpu的执行权 7.join():在线程a中调用线程b的join(),此时线程a就进入阻塞状态,直到线程b完全执行完以后,线原创 2020-11-22 12:47:53 · 1862 阅读 · 0 评论 -
java中常见的单词
用于定义数据类型的关键字class interface enum byte shortint long float double charboolean void 用于定义流程控制的关键字if else switch case defaultwhile do for break continuereturn 用于定义访问权限修饰符的关键字private 英 [ˈpraɪvət] 美 [ˈpraɪvɪt] protected 英 [prəˈtektɪd] 美原创 2020-11-22 12:54:11 · 452 阅读 · 0 评论 -
java创建Thread的四种方法
java中创建线程的三种方法以及区别Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。Java可以用三种方式来创建线程,如下所示:1)继承Thread类创建线程2)实现Runnable接口创建线程3)使用Callable和Future创建线程继承Thread类创建线程(1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。(2)创建Thread子类的实例,即创建了线程原创 2020-11-22 13:11:24 · 2737 阅读 · 0 评论 -
线程的生命周期
当调用线程对象的start()方法,线程即进入就绪状态。当前线程调用join(),则线程转为阻塞状态,eg:A线程中插入了B.join(),则B先执行,执行完,A线程继续执行;调用该方法,线程进入waiting状态,只有等待另外的线程通知或被中断才会返回,调用wait()后,会释放对象锁,因为wait方法一般用在同步方法或者同步代码块中。调用一个线程的interrupt() 方法中断一个线程,并不是强行关闭这个线程,仅仅是改变了内部维护的中断标识位,是线程固有的一个标识位。原创 2020-11-22 13:46:51 · 57 阅读 · 1 评论 -
ArrayList,LinkedList,Vector三者之间的异同?
相同点:三个类都是实现了List接口,存储数据的特点相同,存储有序的,可重复的数据。不同点:ArrayList: 作为List接口的主要实现类; 线程不安全的,效率高; 底层使用Object[] 存储。LinkedList: 对于频繁的插入,删除操作,使用此类效率比ArrayList高; 底层使用双向链表存储。Vector: 作为List接口的古老实现类; 线程安全的,效率低; 底层使用Object[] 存储。ArrayList源码分析:Link原创 2020-11-25 14:43:12 · 373 阅读 · 0 评论 -
java对象创建时(静态方法,成员方法,构造方法等)加载顺序
public class Test { public static void main(String[] args) { /** * Java中,方法执行的前后顺序: * 父类的static初始化块 * 子类的static初始化块 * 父类的非static初始化块 * 父类的构造方法 * 子类的非static初始化块 * 子类的构造方法 */原创 2020-12-03 09:41:21 · 1393 阅读 · 0 评论