java面试必备
文章平均质量分 59
java面试必备
一个双鱼座的测开
意气风发的少年
创作不易,内容有帮助的话可以点关注后续持续更新工作中遇到问题及总结。
展开
-
打卡一百天第三天-线程间通信
wait 与 notify1.wait的三个重载方法wait(long timeout)在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。wait(long timeout, int nanos)在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。wait()用于让当前线程失去操作权限,当前线程进入等待序列。—————原创 2020-06-30 00:08:12 · 116 阅读 · 0 评论 -
打卡百天计划第四天-Hook线程以及捕获线程执行异常
线程在执行单元中是不允许抛出异常的,而线程在运行在自己的上下文中,派生他的线程将无法直接获得它运行中出现的异常信息。为此java提供了一个UncaughtExceptionHandler接口(是一个FunctionInterface函数式接口,只有一个方法dispatchUncaughtExceptionHandler())。关于异常处理的四个APIThread类中关于UncaughtExceptionHandler的四个api:public void setUncaughtExceptionHand原创 2020-06-30 23:44:22 · 244 阅读 · 0 评论 -
打卡百天计划第一天-线程生命周期
线程生命周期线程的生命周期共有五个状态NEWRUNNABLERUNNINGBLOCKEDTERMINATEDNEW状态创建一个线程的Thread对象的状态。1 new状态的线程通过调用start方法进入runnable状态。RANNABLE状态由于存在running状态,所以不会直接进入blocked状态和 terminated状态,即使在线程的执行逻辑中调用sleep方法或者其他block的io操作也必须要先获得CPU的调动执行权可以。1 严格来说runnable只能意外原创 2020-06-28 00:24:28 · 145 阅读 · 0 评论 -
百天打卡第三天-线程安全
文章目录synchronized 关键字初识synchronized 关键子的用法synchronized 需要注意的问题:This Monitor 和 ClassMonitorthis monitorclass monitor程序死锁的基本原因synchronized 关键字初识下面这三句话背下来面试很受用1synchronize关键字提供了一种锁的机制,能够确保共享变量的互斥访问,从而防止数据不一致的问题出现。2synchronize关键字包括monitor enter 和monitor exi原创 2020-06-29 23:29:18 · 156 阅读 · 0 评论 -
打卡百天计划第二天-线程API
文章目录sleep方法yidld方法线程的优先级获取线程ID获取当前线程设置上下文类加载器interrupt 中断方法isInterrupted 方法interrupted方法join 方法sleep方法public static void sleep(long millis) throws InterrupedExceptionpublic static void sleep(long millis,int nanos) throws InterrupedException sleep方法会使原创 2020-06-29 00:06:44 · 319 阅读 · 1 评论 -
谈谈你对线程安全的理解
并发(Concurrent),在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。那么,操作系统视如何实现这种并发的呢?现在我们用到操作系统,无论是Windows、Linux还是MacOS等其实都是多用户多任务分时操作系统。使用这些操作系统的用户是可以“同时”干多件事的。但是实际上,对于单CPU的计算机来说,在CPU中,同一时间是只能干一件事儿的。原创 2023-04-10 08:57:20 · 663 阅读 · 0 评论 -
打卡百天计划第一天-线程的构造函数、守护线程
线程的构造在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例.Thread类的构造方法被重载了八次,构造方法如下:————————————————public Thread( );public Thread(Runnable target);public Thread(String name);public原创 2020-06-28 01:21:07 · 136 阅读 · 0 评论 -
百天打卡计划第五天-volatile 关键字
文章目录CPU Cache 模型缓存一致性并发编程的三个重要特性原子性可见性有序性jvm如何保证三大特性jvm与原子性jvm 与可见性jvm 与有序性volatile 和 synchronized 的区别CPU Cache 模型本质就是CPU的处理速度和内存的访问速度差距越来越大,导致计算资源大量闲置。所有计算机科学中的问题都能通过增加一个中间转换层来解决,cache就是中间层的存在。Cache的出现是为了解决CPU直接访问内存效率低下的问题,程序在运行过程中,会将运算所需的数据从主内存中复制一份到原创 2020-07-01 23:10:24 · 273 阅读 · 0 评论 -
百天打卡计划第五天-七种单例设计模式的设计
七种单例设计模式饿汉式懒汉式懒汉式 + 同步方法Double-CheckVolatile +Double-CheckHolder 方式枚举方式饿汉式package day0518;/** * @author liw * @date 2020-07-01 */public final class Singleton { //实例变量 private byte [] data = new byte[1024] ; //在定义实例变量的时候直接初始化 pr原创 2020-07-02 00:14:29 · 118 阅读 · 0 评论 -
遍历的同时修改一个List有几种方式?
比如循环到第2个元素时你把它删了,接下来去访问第3个元素,实际上访问到的是原来list的第4个元素,因为原来的第3个元素变成了现在的第2个元素。这样就造成了元素的遗漏。由于在循环中删除元素后,list的索引会自动变化,list.size()获取到的list长度也会实时更新,所以会造成漏掉被删除元素后一个索引的元素。原创 2023-04-09 16:51:53 · 2426 阅读 · 2 评论 -
Set是如何保证元素不重复的
顾名思义,BitSet是位集合,通常来说,位集合的底层的数据结构是一个bit数组,如果第n位为1,则表明数字n在该数组中。举个例子,如果调用BitSet#set(10),业务语意是把10放到BitSet中,内部的操作则是通过把二进制的第十位(低位)置为1。这样,就代表BitSet中包含了10这个数字。原创 2023-04-09 16:58:48 · 842 阅读 · 0 评论 -
你能说出几种集合的排序方式?
这里说的是两个语境的不同,Set的无序,指的是插入顺序是无序的。并不是,Set有一个实现类是LinkedHashSet,它引用了LinkedHashMap,通过双向链表记录了每个node的插入顺序和查询顺序(可选),以此来达到Set的插入有序性。Java.util包中的List接口继承了Collection接口,用来存放对象集合,所以对这些对象进行排序的时候,要么让对象类自己实现同类对象的比较,要么借助比较器进行比较排序。Comparator是一个比较器接口,可以用来给不具备排序能力的对象进行排序。原创 2023-04-09 16:39:39 · 845 阅读 · 0 评论 -
Java中的集合类有哪些?如何分类的?
Java的整个集合框架中,主要分为List,Set,Queue,Stack,Map等五种数据结构。其中,前四种数据结构都是单一元素的集合,而最后的Map则是以KV对的形式使用。从继承关系上讲,List,Set,Queue,Stack都是Collection的子接口,Collection又继承了Iterable接口,说明这四种集合都是可以遍历的。同时,List也是Queue和Stack的父接口,说明队列和栈其实都是列表结构。从功能上讲,List代表一个容器,可以是先进先出,也可以是先进后出。原创 2023-04-09 16:31:05 · 714 阅读 · 0 评论 -
ArrayList、LinkedList与Vector的区别?
首先,我们要明白ArrayList是基于数组的,我们都知道,申请数组的时候,只能申请一个定长的数组,那么List是如何通过数组扩容的呢?1、数组可以由一块连续区域的内存实现,其中,内存地址可以作为数组的下标,该地址中的值就是数组中元素的值。LRU,即最近最少使用策略,基于时空局部性原理(最近访问的,未来也会被访问),往往作为缓存淘汰的策略,如Redis和GuavaMap都使用了这种淘汰策略。2、链表中的元素则是不连续的,必须获得链表中某个元素后,才能访问该链表中元素的周围元素,不可以随意链表中的元素。原创 2023-04-09 17:31:51 · 343 阅读 · 0 评论 -
java面试必备问题-基础问题-接口和抽象类的区别,如何选择?
一般在实际开发中,我们会先把接口暴露给外部,然后在业务代码中实现接口。如果多个实现类中有相同可复用的代码,则在接口和实现类中间加一层抽象类,将公用部分代码抽出到抽象类中。可以参考下模板方法模式,这是一个很好的理解接口、抽象类和实现类之间关系的设计模式。抽象类中的抽象方法可以有public、protected和default这些修饰符,而接口中默认修饰符是public。接口和抽象类,最明显的区别就是接口只是定义了一些方法而已,在不考虑Java8中default方法情况下,接口中是没有实现的代码的。原创 2023-04-09 16:25:04 · 133 阅读 · 0 评论 -
String有长度限制吗?是多少?
运行期,String的length参数是Int类型的,那么也就是说,String定义的时候,最大支持的长度就是int的最大范围值。根据Integer类的定义,java.lang.Integer#MAX_VALUE的最大值是2^31 - 1;编译期需要用CONSTANT_Utf8_info 结构用于表示字符串常量的值,而这个结构是有长度限制,他的限制是65535。有,编译期和运行期不一样。原创 2023-04-09 16:28:03 · 937 阅读 · 0 评论 -
java面试题-基础问题-面向对象的五大基本原则?
java面试基础题原创 2023-04-09 16:20:02 · 91 阅读 · 0 评论 -
java面试题-基础问题-如何理解Java中的多态?
java面试题 - 基础如何理解java中的多态原创 2023-04-09 16:16:09 · 908 阅读 · 0 评论 -
String类源码分析(超级全)
.从上,我们可以看出几个重点:String是一个final类,既不能被继承的类;String类实现了java.io.Serializable接口,可以实现序列化;String类实现了Comparable,可以用于比较大小(按顺序比较单个字符的ASCII码);String类实现了 CharSequence 接口,表示是一个有序字符的序列,因为String的本质是一个char类型数组。原创 2022-11-29 23:58:40 · 1322 阅读 · 0 评论 -
百天打卡计划第八天-java.lang.StringBuilder
StringBuilderStringBuilderConstructorsAll Methods- StringBuilder append(boolean b)- StringBuilder append(char c)- StringBuilder append(char[] str)- StringBuilder append(char[] str, int offset, int len)各种 insert 方法- int capacity()- charAt(int index)-原创 2020-07-07 00:07:01 · 737 阅读 · 0 评论 -
百天打卡计划第八天-java核心代码-java.lang.Boolean
Boolean类java.lang.Boolean继承关系ConstructorsMethodsStatic Methodsjava.lang.Boolean继承关系public final class Booleanextends Objectimplements Serializable, ComparableConstructorsConstructorDescriptionBoolean(boolean value)不推荐使用。很少适合使用此构造函数。 通常,静原创 2020-07-06 21:53:21 · 597 阅读 · 0 评论