11 2019 档案
摘要:可重入锁 指在同一个线程在外层方法获取锁的时候,进入内层方法会自动获取锁。 为了避免死锁的发生,JDK 中基本都是可重入锁。 下面我们来测试一下 synchronized 和 java.util.concurrent.lock.ReentrantLock 锁的可重入性 测试 synchronized
阅读全文
摘要:Java 中常见的锁有 synchronized 可重入锁 java.util.concurrent.lock.ReentrantLock 可重复读写锁 java.util.concurrent.lock.ReentrantReadWriteLock synchronized 有 3种用法 修饰普通
阅读全文
摘要:2013 年刚入行做 Java 开发的时候,我就问师傅该如何做一份职业规划,他说不知道,因为他也没有职业规划。 收到这个答案的时候,那时候我觉得是他不愿意跟我说太多。 现在回想这个问题,我相信他是没有做职业规划的。因为他已经深耕在选择的领域一二十年,他的规划就是在华为一心做好当前的产品,不去想太多。
阅读全文
摘要:Java 中 volatile 关键字是一个类型修饰符。JDK 1.5 之后,对其语义进行了增强。 保证了不同线程对共享变量进行操作时的可见性,即一个线程修改了共享变量的值,共享变量修改后的值对其他线程立即可见 通过禁止编译器、CPU 指令重排序和部分 happens-before 规则,解决有序性
阅读全文
摘要:在并发编程中,经常会遇到多个线程访问同一个共享变量,当同时对共享变量进行读写操作时,就会产生数据不一致的情况。 为了解决这个问题 JDK 1.5 之前,使用 synchronized 关键字,拿到 Java 对象的锁,保护锁定的代码块。JVM 保证同一时刻只有一个线程可以拿到这个 Java 对象的锁
阅读全文
摘要:Java 并发工具包中 java.util.concurrent.ExecutorService 接口定义了线程池任务提交、获取线程池状态、线程池停止的方法等。 JDK 1.8 中,线程池的停止一般使用 shutdown()、shutdownNow()、shutdown() + awaitTermi
阅读全文
摘要:Java 中关键字 synchronized 表示只有一个线程可以获取作用对象的锁,执行代码,阻塞其他线程。 作用: 确保线程互斥地访问同步代码 保证共享变量的修改能够及时可见 有效解决重排序问题 用法: 修饰普通方法 修饰静态方法 指定对象,修饰代码块 特点: 阻塞未获取到锁、竞争同一个对象锁的线
阅读全文
摘要:Executors如何创建线程池? Executors 类是从 JDK 1.5 开始就新增的线程池创建的静态工厂类,它就是创建线程池的,但是很多的大厂已经不建议使用该类去创建线程池。原因在于,该类创建的很多线程池的内部使用了无界任务队列,在并发量很大的情况下会导致 JVM 抛出 OutOfMemor
阅读全文
摘要:线程池状态: 线程池的5种状态:RUNNING、SHUTDOWN、STOP、TIDYING、TERMINATED。 见 ThreadPoolExecutor 源码 1. RUNNING:线程池一旦被创建,就处于 RUNNING 状态,任务数为 0,能够接收新任务,对已排队的任务进行处理。 2. SH
阅读全文
摘要:什么是线程池? 线程池就是创建若干个可执行的线程放入一个池(容器)中,有任务需要处理时,会提交到线程池中的任务队列,处理完之后线程并不会被销毁,而是仍然在线程池中等待下一个任务。 为什么要使用线程池? 因为 Java 中创建一个线程,需要调用操作系统内核的 API,操作系统要为线程分配一系列的资源,
阅读全文
摘要:线程的生命周期 线程包括哪些状态的问题说专业一点就是线程的生命周期。 不同的编程语言对线程的生命周期封装是不同的。 Java 中线程的生命周期 Java 语言中线程共有六种状态。 如图: Java 中线程的状态的转变 1. NEW 到 RUNNABLE 状态 Java 刚创建出来的 Thread 对
阅读全文
摘要:线程终止有两种情况: 这两者属于线程自行终止,如何让线程 A 把线程 B 终止呢? Java 中 Thread 类有一个 stop() 方法,可以终止线程,不过这个方法会让线程直接终止,在执行的任务立即终止,未执行的任务无法反馈,所以 stop() 方法已经不建议使用。 既然 stop() 方法如此
阅读全文
摘要:线程的安全性问题体现在: 原子性:一个或者多个操作在 CPU 执行的过程中不被中断的特性 可见性:一个线程对共享变量的修改,另外一个线程能够立刻看到 有序性:程序执行的顺序按照代码的先后顺序执行 导致原因: 缓存导致的可见性问题 线程切换带来的原子性问题 编译优化带来的有序性问题 解决办法: JDK
阅读全文
摘要:CPU、内存、IO 设备的读写速度差异巨大,表现为 CPU 的速度 > 内存的速度 > IO 设备的速度。 程序的性能瓶颈在于速度最慢的 IO 设备的读写,也就是说当涉及到 IO 设备的读写,再怎么提升 CPU 和内存的速度也是起不到提升性能的作用。 为了更好地利用 CPU 的高性能 计算机体系结构
阅读全文
摘要:Java 中的线程对应是操作系统级别的线程,线程数量控制不好,频繁的创建、销毁线程和线程间的切换,比较消耗内存和时间。 容易带来线程安全问题。如线程的可见性、有序性、原子性问题,会导致程序出现的结果与预期结果不一致。 多线程容易造成死锁、活锁、线程饥饿等问题。此类问题往往只能通过手动停止线程、甚至是
阅读全文
摘要:"摩尔定律" 失效,硬件的单元计算能力提升受限;硬件上提高了 CPU 的核数和个数。并发编程可以提升 CPU 的计算能力的利用率。 提升程序的性能,如:响应时间、吞吐量、计算机资源使用率等。 并发程序可以更好地处理复杂业务,对复杂业务进行多任务拆分,简化任务调度,同步执行任务。 Java 自学指南
阅读全文
摘要:并发: 在程序设计的角度,希望通过某些机制让计算机可以在一个时间段内,执行多个任务。 一个或多个物理 CPU 在多个程序之间多路复用,提高对计算机资源的利用率。 任务数多余 CPU 的核数,通过操作系统的任务调度算法,实现多个任务一起执行。 有多个线程在执行,计算机只有一个 CPU,不可能真正同时运
阅读全文
摘要:Java 中有 4 种常见的创建线程的方式。 一、重写 Thread 类的 run() 方法。 表现形式有两种:1)new Thread 对象匿名重写 run() 方法 2)继承 Thread 对象,重写 run() 方法 执行结果 二、实现 Runnable 接口,重写 run() 方法。 表现形
阅读全文
摘要:Java线程分为用户线程和守护线程。 守护线程是程序运行的时候在后台提供一种通用服务的线程。所有用户线程停止,进程会停掉所有守护线程,退出程序。 Java中把线程设置为守护线程的方法:在 start 线程之前调用线程的 setDaemon(true) 方法。 注意: setDaemon(true)
阅读全文
摘要:进程: 程序执行时的一个实例 每个进程都有独立的内存地址空间 系统进行资源分配和调度的基本单位 进程里的堆,是一个进程中最大的一块内存,被进程中的所有线程共享的,进程创建时分配,主要存放 new 创建的对象实例 进程里的方法区,是用来存放进程中的代码片段的,是线程共享的 在多线程 OS 中,进程不是
阅读全文
摘要:并行:指两个或两个以上事件或活动在同一时刻发生。如多个任务在多个 CPU 或 CPU 的多个核上同时执行,不存在 CPU 资源的竞争、等待行为。 并行与并发的区别 并行指多个事件在同一个时刻发生;并发指在某时刻只有一个事件在发生,某个时间段内由于 CPU 交替执行,可以发生多个事件。 并行没有对 C
阅读全文
摘要:JDK 在 java.net 包中为 TCP 和 UDP 两种通信协议提供了相应的 Socket 编程类 TCP 协议,服务端对应 ServerSocket,客户端对应 Socket UDP 协议对应 DatagramSocket 基于 TCP 协议创建的套接字可以叫做流套接字,服务器端相当于一个监
阅读全文
摘要:Socket 也称作"套接字",用于描述 IP 地址和端口,是一个通信链的句柄,是应用层与传输层之间的桥梁 应用程序可以通过 Socket 向网络发出请求或应答网络请求 网络应用程序位于应用层,TCP 和 UDP 属于传输层协议,在应用层和传输层之间,使用 Socket 来进行连接 Socket 是
阅读全文
摘要:使用递归复制文件夹和文件 package constxiong.interview; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.i
阅读全文
摘要:不带缓冲的流读取到一个字节或字符,就直接写出数据 带缓冲的流读取到一个字节或字符,先不输出,等达到了缓冲区的最大容量再一次性写出去 优点:减少了写出次数,提高了效率 缺点:接收端可能无法及时获取到数据 来一道刷了进BAT的面试题?
阅读全文
摘要:Java 中的字节流处理的最基本单位为 1 个字节,通常用来处理二进制数据。字节流类 InputStream 和 OutputStream 类均为抽象类,代表了基本的输入字节流和输出字节流。 Java 中的字符流处理的最基本的单元是 Unicode 代码单元(大小2字节),通常用来处理文本数据。 区
阅读全文
摘要:按流的处理位置分类 节点流:可以从某节点读数据或向某节点写数据的流。如 FileInputStream 处理流:对已存在的流的连接和封装,实现更为丰富的流数据处理,处理流的构造方法必需其他的流对象参数。如 BufferedReader 来一道刷了进BAT的面试题?
阅读全文
摘要:FileInputStream-FileOutputStream 文件数据读写 ObjectInputStream-ObjectOutputStream 对象数据读写 ByteArrayInputStream-ByteArrayOutputStream 内存字节数组读写 PipedInputStre
阅读全文
摘要:输入输出的方向是针对程序而言,向程序中读入数据,就是输入流;从程序中向外写出数据,就是输出流 从磁盘、网络、键盘读到内存,就是输入流,用 InputStream 或 Reader 写到磁盘、网络、屏幕,都是输出流,用 OuputStream 或 Writer 来一道刷了进BAT的面试题?
阅读全文
摘要:package constxiong.interview; import java.io.FileOutputStream; import java.io.IOException; /** * 测试写入字符串到文件 * @author ConstXiong * @date 2019-11-08 12
阅读全文
摘要:FileInputStream in = new FileInputStream("a.txt"); in.skip(9);//skip(long n) 方法,调过文件 n 个字节数 int b = in.read(); 来一道刷了进BAT的面试题?
阅读全文
摘要:开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写:OSI;简称为OSI模型)是一种概念模型,由国际标准化组织提出,一个试图使各种计算机在世界范围内互连为网络的标准框架。 OSI模型分为七层,自下而上为 物理层(Physic
阅读全文
摘要:1、什么是 tcp 粘包? 发送方发送的多个数据包,到接收方缓冲区首尾相连,粘成一包,被接收。 2、原因 TCP 协议默认使用 Nagle 算法可能会把多个数据包一次发送到接收方。 应用程读取缓存中的数据包的速度小于接收数据包的速度,缓存中的多个数据包会被应用程序当成一个包一次读取。 3、处理方法
阅读全文
摘要:两次握手只能保证单向连接是畅通的。 Step1 A -> B : 你好,B。 Step2 A <- B : 收到。你好,A。 这样的两次握手过程, A 向 B 打招呼得到了回应,即 A 向 B 发送数据,B 是可以收到的。 但是 B 向 A 打招呼,A 还没有回应,B 没有收到 A 的反馈,无法确保
阅读全文
摘要:TCP/IP 协议是一个协议簇,包括很多协议。命名为 TCP/IP 协议的原因是 TCP 和 IP 这两个协议非常重要,应用很广。 TCP 和 UDP 都是 TCP/IP 协议簇里的一员。 TCP,Transmission Control Protocol 的缩写,即传输控制协议。 面向连接,即必须
阅读全文
摘要:BIO:线程发起 IO 请求,不管内核是否准备好 IO 操作,从发起请求起,线程一直阻塞,直到操作完成。 NIO:线程发起 IO 请求,立即返回;内核在做好 IO 操作的准备之后,通过调用注册的回调函数通知线程做 IO 操作,线程开始阻塞,直到操作完成。 AIO:线程发起 IO 请求,立即返回;内存
阅读全文
摘要:按数据流向:输入流和输出流 输入和输出都是从程序的角度来说的。 输入流:数据流向程序 输出流:数据从程序流出。 按处理单位:字节流和字符流 字节流:一次读入或读出是8位二进制 字符流:一次读入或读出是16位二进制 JDK 中后缀是 Stream 是字节流;后缀是 Reader,Writer 是字符流
阅读全文
摘要:List 以索引来存取元素,元素可重复 Set 不能存放重复元素 Map 保存键值对映射,映射关系可以一对一、多对一 List 有基于数组和链表实现两种方式 Set、Map 容器有基于哈希存储和红黑树两种方式实现 Set 基于 Map 实现,Set 里的元素值就是 Map 里 key 来一道刷了进B
阅读全文
摘要:ArrayList 和 Vector 都是使用数组存储数据 允许直接按序号索引元素 插入元素涉及数组扩容、元素移动等内存操作 根据下标找元素快,存在扩容的情况下插入慢 Vector 对元素的操作,使用了 synchronized 方法,性能比 ArrayList 差 Vector 属于遗留容器,早期
阅读全文
摘要:HashMap、LinkedHashMap Hashtable TreeMap IdentityHashMap 来一道刷了进BAT的面试题?
阅读全文
摘要:编码过程中,我们会遇到各种问题。 借助搜索引擎,可以解决大部分问题,但总会遇到没法解决的坑,也许它会困扰几天或者更长时间。 要解决各种疑难杂症,成为高手,就要学会查一手资料。 什么是一手资料? 最直接的一手资料就是源代码,看懂了源码,一切问题迎刃而解 官方文档与译文(大部分官方文档都是英文的,需要我
阅读全文
摘要:package constxiong.interview; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; /** * 测试剔除List的相同元素 * @a
阅读全文
摘要:Collections 工具类的 sort() 方法有两种方式 第一种要求传入的待排序容器中存放的对象比较实现 Comparable 接口以实现元素的比较 第二种不强制性的要求容器中的元素必须可比较,但要求传入参数 Comparator 接口的子类,需要重写 compare() 方法实现元素的比较规
阅读全文
摘要:TreeSet 要求存放的对象所属的类必须实现 Comparable 接口,该接口提供了比较元素的 compareTo() 方法,当插入元素时会回调该方法比较元素的大小 TreeMap 要求存放的键值对映射的键必须实现 Comparable 接口从而根据键对元素进行排序 来一道刷了进BAT的面试题?
阅读全文
摘要:Map 的实现类有 HashMap、LinkedHashMap、TreeMap HashMap是有无序的 LinkedHashMap 和 TreeMap 是有序的。LinkedHashMap 记录了添加数据的顺序;TreeMap 默认是升序 LinkedHashMap 底层存储结构是哈希表+链表,链
阅读全文
摘要:LinkedList 分析: Stack 是线性结构,具有先进后出的特点 LinkedList 天然支持 Stack 的特性,调用 push(E e) 方法放入元素,调用 pop() 方法取出栈顶元素,内部实现只需要移动指针即可 LinkedHashSet 是基于 LinkedHashMap 实现的
阅读全文
摘要:LinkedList 插入性能高 ArrayList 是基于数组实现的,添加元素时,存在扩容问题,扩容时需要复制数组,消耗性能 LinkedList 是基于链表实现的,只需要将元素添加到链表最后一个元素的下一个即可 来一道刷了进BAT的面试题?
阅读全文
摘要:HashSet 底层是采用 HashMap 实现,HashSet 的实现比较简单,HashSet 的绝大部分方法都是通过调用 HashMap 的方法来实现 调用 HashSet 的 add 方法时,实际上是向 HashSet 对象内部持有的 HashMap 对象中增加了一个键值对,键是向 HashS
阅读全文
摘要:HashSet 是基于 HashMap 实现的,查询速度特别快 HashMap 是支持 key 为 null 值的,所以 HashSet 支持添加 null 值 HashSet 存放自定义类时,自定义类需要重写 hashCode() 和 equals() 方法,确保集合对自定义类的对象的唯一性判断(
阅读全文
摘要:TreeSet 基于 TreeMap 实现,TreeMap 基于红黑树实现 特点: 有序 无重复 添加、删除元素、判断元素是否存在,效率比较高,时间复杂度为 O(log(N)) 使用方式: TreeSet 默认构造方法,调用 add() 方法时会调用对象类实现的 Comparable 接口的 com
阅读全文
摘要:数组的优点: 数组的效率高于集合类 数组能存放基本数据类型和对象;集合中只能放对象 数组的缺点: 不是面向对象的,存在明显的缺陷 数组长度固定且无法动态改变;集合类容量动态改变 数组无法判断其中实际存了多少元素,只能通过length属性获取数组的申明的长度 数组存储的特点是顺序的连续内存;集合的数据
阅读全文
摘要:HashMap 的 key 相等的条件是,条件 1 必须满足,条件2和3必须满足一个。 key 的 hash 值相等 内存中是同一个对象,即使用 == 判断 key 相等 key 不为 null, 且使用 equals 判断 key 相等 所以自定义类作为 HashMap 的 key,需要注意按照自
阅读全文
摘要:Java中是使用泛型来约束 HashMap 中的key和value的类型的,HashMap<K, V> 泛型在Java的规定中必须是对象Object类型的,基本数据类型不是Object类型,不能作为键值 map.put(0, "ConstXiong")中编译器已将 key 值 0 进行了自动装箱,变
阅读全文
摘要:使用 JDK中java.util.Collections 类,unmodifiable*** 方法赋值原集合。 当再修改集合时,会报错 java.lang.UnsupportedOperationException。从而确保自己定义的集合不被其他人修改。 public class TestColle
阅读全文
摘要:ListIterator 继承 Iterator ListIterator 比 Iterator多方法 1) add(E e) 将指定的元素插入列表,插入位置为迭代器当前位置之前 2) set(E e) 迭代器返回的最后一个元素替换参数e 3) hasPrevious() 迭代器当前位置,反向遍历集
阅读全文
摘要:Iterator 接口源码中的方法 java.lang.Iterable 接口被 java.util.Collection 接口继承,java.util.Collection 接口的 iterator() 方法返回一个 Iterator 对象 next() 方法获得集合中的下一个元素 hasNext
阅读全文
摘要:首先说一下迭代器模式,它是 Java 中常用的设计模式之一。用于顺序访问集合对象的元素,无需知道集合对象的底层实现。 Iterator 是可以遍历集合的对象,为各种容器提供了公共的操作接口,隔离对容器的遍历操作和底层实现,从而解耦。 缺点是增加新的集合类需要对应增加新的迭代器类,迭代器类与集合类成对
阅读全文
摘要:Vector Stack Hashtable java.util.concurrent 包下所有的集合类 ArrayBlockingQueue、ConcurrentHashMap、ConcurrentLinkedQueue、ConcurrentLinkedDeque... 来一道刷了进BAT的面试题
阅读全文
摘要:Queue 中 remove() 和 poll() 都是用来从队列头部删除一个元素。 在队列元素为空的情况下,remove() 方法会抛出NoSuchElementException异常,poll() 方法只会返回 null 。 JDK1.8 中的源码解释 /** * Retrieves and r
阅读全文
摘要:Queue 中 element() 和 peek() 都是用来返回队列的头元素,不删除。 在队列元素为空的情况下,element() 方法会抛出NoSuchElementException异常,peek() 方法只会返回 null。 JDK1.8 中源码解释 /** * Retrieves, but
阅读全文
摘要:Queue 中 add() 和 offer() 都是用来向队列添加一个元素。 在容量已满的情况下,add() 方法会抛出IllegalStateException异常,offer() 方法只会返回 false 。 JDK1.8 源码中的解释 /** * Inserts the specified e
阅读全文
摘要:数组转 List ,使用 JDK 中 java.util.Arrays 工具类的 asList 方法 public static void testArray2List() { String[] strs = new String[] {"aaa", "bbb", "ccc"}; List<Stri
阅读全文
摘要:Array 即数组,声明方式可以如下: int[] array = new int[3]; int array [] = new int[3]; int[] array = {1, 2, 3}; int[] array = new int[]{1, 2, 3}; 定义一个 Array 时,必须指定数
阅读全文
摘要:ArrayList基于动态数组实现的非线程安全的集合;LinkedList基于链表实现的非线程安全的集合。 对于随机index访问的get和set方法,一般ArrayList的速度要优于LinkedList。因为ArrayList直接通过数组下标直接找到元素;LinkedList要移动指针遍历每个元
阅读全文
摘要:HashMap基于散列桶(数组和链表)实现;TreeMap基于红黑树实现。 HashMap不支持排序;TreeMap默认是按照Key值升序排序的,可指定排序的比较器,主要用于存入元素时对元素进行自动排序。 HashMap大多数情况下有更好的性能,尤其是读数据。在没有排序要求的情况下,使用HashMa
阅读全文
摘要:JDK 1.8 中 HashMap 和 Hashtable 主要区别如下: 线程安全性不同。HashMap线程不安全;Hashtable 中的方法是Synchronize的。 key、value是否允许null。HashMap的key和value都是可以是null,key只允许一个null;Hash
阅读全文
摘要:Collection框架关系图如下 List:有序集合,元素可重复 Set:不重复集合,LinkedHashSet按照插入排序,SortedSet可排序,HashSet无序 Map:键值对集合,存储键、值和之间的映射;Key无序,唯一;value 不要求有序,允许重复 来一道刷了进BAT的面试题?
阅读全文
摘要:Collection是JDK中集合层次结构中的最根本的接口。定义了集合类的基本方法。源码中的解释: * The root interface in the <i>collection hierarchy</i>. A collection * represents a group of object
阅读全文
摘要:相同点: 底层都使用数组实现 功能相同,实现增删改查等操作的方法相似 长度可变的数组结构 不同点: Vector是早期JDK版本提供,ArrayList是新版本替代Vector的 Vector 的方法都是同步的,线程安全;ArrayList 非线程安全,但性能比Vector好 默认初始化容量都是10
阅读全文
摘要:Collection | ├AbstractCollection 对Collection接口的最小化抽象实现 | │ | ├List 有序集合 | │-├AbstractList 有序集合的最小化抽象实现 | │-├ArrayList 基于数组实现的有序集合 | │-├LinkedList 基于链表
阅读全文
摘要:String 类是最常用的类之一,为了效率,禁止被继承和重写 为了安全。String 类中有很多调用底层的本地方法,调用了操作系统的 API,如果方法可以重写,可能被植入恶意代码,破坏程序。Java 的安全性也体现在这里。 来一道刷了进BAT的面试题?
阅读全文
摘要:相同点: 都可以储存和操作字符串 都使用 final 修饰,不能被继承 提供的 API 相似 区别: String 是只读字符串,String 对象内容是不能被改变的 StringBuffer 和 StringBuilder 的字符串对象可以对字符串内容进行修改,在修改后的内存地址不会发生改变 St
阅读全文
摘要:使用场景 在编译时无法知道该对象或类可能属于哪些类,程序在运行时获取对象和类的信息 作用 通过反射可以使程序代码访问装载到 JVM 中的类的内部信息,获取已装载类的属性信息、方法信息 优点 提高了 Java 程序的灵活性和扩展性,降低耦合性,提高自适应能力。 允许程序创建和控制任何类的对象,无需提前
阅读全文
摘要:单一职责原则 SRP 开闭原则 OCP 里氏替代原则 LSP 依赖注入原则 DIP 接口分离原则 ISP 迪米特原则 LOD 组合/聚合复用原则 CARP 其他原则可以看作是开闭原则的实现手段或方法,开闭原则是理想状态 来一道刷了进BAT的面试题?
阅读全文
摘要:Class 类是 Java 反射机制的起源和入口,用于获取与类相关的各种信息,提供了获取类信息的相关方法。 Class 类存放类的结构信息,能够通过 Class 对象的方法取出相应信息:类的名字、属性、方法、构造方法、父类、接口和注解等信息 对象名.getClass() 对象名.getSuperCl
阅读全文
摘要:在JDK中,主要由以下类来实现 Java 反射机制,除了 Class 类,一般位于 java.lang.reflect 包中 java.lang.Class :一个类 java.lang.reflect.Field :类的成员变量(属性) java.lang.reflect.Method :类的成员
阅读全文
摘要:JDK1.8 之前,使用 java.util.Calendar JDK1.8 提供了 java.time 包 还有第三方时间类库 Joda-Time 也可以 package constxiong.interview; import java.text.SimpleDateFormat; import
阅读全文
摘要:package constxiong.interview; import java.io.UnsupportedEncodingException; /** * 字符串字符集转换 * @author ConstXiong * @date 2019-11-01 10:57:34 */ public c
阅读全文
摘要:字符串转基本数据 基本数据类型的包装类中的 parseXXX(String)可以字符串转基本类型 valueOf(String) 可以字符串转基本类型的包装类 基本数据转字符串 基本数据类型与空字符串 "" 用 + 连接即可获得基本类型的字符串 调用 String 类中的 valueOf(…) 方法
阅读全文
摘要:Inner Class:内部类 内部类就是在一个类的内部定义的类 内部类中不能定义静态成员 内部类可以直接访问外部类中的成员变量 内部类可以定义在外部类的方法外面,也可以定义在外部类的方法体中 在方法体外面定义的内部类的访问类型可以是public,protecte,默认的,private等4种类型
阅读全文
摘要:同时方法的重载只是要求两同三不同 在同一个类中 相同的方法名称 参数列表中的参数类型、个数、顺序不同 跟权限修饰符和返回值类型无关 如果可以根据返回值类型来区分方法重载,那在仅仅调用方法不获取返回值的使用场景,JVM 就不知道调用的是哪个返回值的方法了。 来一道刷了进BAT的面试题?
阅读全文
摘要:使用标签标注循环,使用 break 标签即可。 package constxiong.interview; /** * 跳出多重循环 * @author ConstXiong */ public class TestBreakMulti { public static void main(Strin
阅读全文
摘要:早期JDK,switch(expr),expr 可以是 byte、short、char、int。 JDK 1.5 开始,引入了枚举(enum),expr 也可以是枚举 JDK 1.7 开始,expr 还可以是字符串(String)。 长整型(long)是不可以的 来一道刷了进BAT的面试题?
阅读全文
摘要:生命周期不同:非静态成员变量随着对象的创建而存在;静态成员变量随着类的加载而存在 调用方式不同:非静态成员变量用 对象名.变量名 调用;静态成员变量用 类名.变量名,JDK1.7以后也能用对象名.变量名调用 别名不同:非静态成员变量也称为实例变量;静态变量称为类变量 数据存储位置不同:成员变量数据存
阅读全文
摘要://日期格式为字符串 DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String s = sdf.format(new Date()); //字符串转日期 DateFormat sdf = new SimpleDateFo
阅读全文
摘要:计算机不能直接理解高级语言,只能理解和运行机器语言。必须要把高级语言翻译成机器语言,计算机才能运行高级语言所编写的程序。 翻译的方式有两种,一个是编译,一个是解释。 用编译型语言写的程序执行之前,需要一个专门的编译过程,通过编译系统把高级语言翻译成机器语言,把源高级程序编译成为机器语言文件,以后直接
阅读全文
摘要:getDeclaredFields(): 获取所有本类自己声明的方法, 不能获取继承的方法 getFields(): 只能获取所有 public 声明的方法, 包括继承的方法 来一道刷了进BAT的面试题?
阅读全文
摘要:100 = 1*(8*8) + 4*(8*1) + 4*1 八进制:144 Java中八进制数必须以0开头,0144 来一道刷了进BAT的面试题?
阅读全文
摘要:SerialVersionUid 是为了序列化对象版本控制,告诉 JVM 各版本反序列化时是否兼容 如果在新版本中这个值修改了,新版本就不兼容旧版本,反序列化时会抛出InvalidClassException异常 仅增加了一个属性,希望向下兼容,老版本的数据都保留,就不用修改 删除了一个属性,或更改
阅读全文
摘要:存在,如 Integer.MAX_VALUE package constxiong.interview; /** * 测试最大值加1 * @author ConstXiong */ public class TestMaxValueAddOne { public static void main(S
阅读全文
摘要:静态内部类不需要有指向外部类的引用;非静态内部类需要持有对外部类的引用 静态内部类可以有静态方法、属性;非静态内部类则不能有静态方法、属性 静态内部类只能访问外部类的静态成员,不能访问外部类的非静态成员;非静态内部类能够访问外部类的静态和非静态成员 静态内部类不依赖于外部类的实例,直接实例化内部类对
阅读全文
摘要:同步方法就是在方法前加关键字 synchronized;同步代码块则是在方法内部使用 synchronized 加锁对象相同的话,同步方法锁的范围大于等于同步方法块。一般加锁范围越大,性能越差 同步方法如果是 static 方法,等同于同步方法块加锁在该 Class 对象上 来一道刷了进BAT的面试
阅读全文
摘要:java.sql.Date 是 java.util.Date 的子类 java.util.Date 是 JDK 中的日期类,精确到时、分、秒、毫秒 java.sql.Date 与数据库 Date 相对应的一个类型,只有日期部分,时分秒都会设置为 0,如:2019-10-23 00:00:00 要从数
阅读全文
摘要:工欲善其事,必先利其器... 想要高效率编码输出和快速处理文本,需要 熟悉编程语言的语法 盲打 至少需要熟练使用一种文本编辑器 至少熟练熟练使用一种 IDE (集成开发环境) 现实中,看到过二指禅编码的,一边思考,一边左右手的食指在键盘上敲。我静静的看着他,他回了一句,别看我打字慢,我脑子清楚。手指
阅读全文
摘要:基本类型只有值,而包装类型则具有与它们的值不同的同一性(即值相同但不是同一个对象) 包装类型比基本类型多了一个非功能值:null 基本类型通常比包装类型更节省时间和空间,速度更快 但有些情况包装类型的使用会更合理: 泛型不支持基本类型,作为集合中的元素、键和值直接使用包装类(否则会发生基本类型的自动
阅读全文
摘要:Java 中有 8 个基本类型,分别对应的包装类如下 byte -- Byte boolean -- Boolean short -- Short char -- Character int -- Integer long -- Long float -- Float double -- Doubl
阅读全文
摘要:垃圾回收机制,简称 GC Java 语言不需要程序员直接控制内存回收,由 JVM 在后台自动回收不再使用的内存 提高编程效率 保护程序的完整性 JVM 需要跟踪程序中有用的对象,确定哪些是无用的,影响性能 特点 回收 JVM 堆内存里的对象空间,不负责回收栈内存数据 无法处理一些操作系统资源的释放,
阅读全文
摘要:instanceof 运算符是用来在运行时判断对象是否是指定类及其父类的一个实例。 比较的是对象,不能比较基本类型 使用如下 package constxiong.interview; /** * 测试 instanceof * @author ConstXiong * @date 2019-10-
阅读全文
摘要:实现多态的三个条件 继承的存在。继承是多态的基础,没有继承就没有多态 子类重写父类的方法,JVM 会调用子类重写后的方法 父类引用变量指向子类对象 向上转型:将一个父类的引用指向一个子类对象,自动进行类型转换。 通过父类引用变量调用的方法是子类覆盖或继承父类的方法,而不是父类的方法。 通过父类引用变
阅读全文
摘要:== 是关系运算符,equals() 是方法,结果都返回布尔值 Object 的 == 和 equals() 比较的都是地址,作用相同 == 作用: 基本类型,比较值 引用类型,比较内存地址 不能比较没有父子关系的两个对象 equals()方法的作用: JDK 中的类一般已经重写了 equals()
阅读全文
摘要:子类构造方法的调用规则: 如果子类的构造方法中没有通过 super 显式调用父类的有参构造方法,也没有通过 this 显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。这种情况下,写不写 super(); 语句,效果是一样的 如果子类的构造方法中通过 super 显式调用父类的有参构
阅读全文
摘要:public final native Class<?> getClass(); 获取类结构信息 public native int hashCode() 获取哈希码 public boolean equals(Object) 默认比较对象的地址值是否相等,子类可以重写比较规则 protected
阅读全文
摘要:可以修饰类和方法 不能修饰属性和构造方法 abstract 修饰的类是抽象类,需要被继承 abstract 修饰的方法是抽象方法,需要子类被重写 来一道刷了进BAT的面试题?
阅读全文
摘要:static 可以修饰变量、方法、代码块和内部类 static 变量是这个类所有,由该类创建的所有对象共享同一个 static 属性 可以通过创建的对象名.属性名 和 类名.属性名两种方式访问 static 变量在内存中只有一份 static 修饰的变量只能是类的成员变量 static 方法可以通过
阅读全文
摘要:this: 对象内部指代自身的引用 解决成员变量和局部变量同名问题 可以调用成员变量 不能调用局部变量 可以调用成员方法 在普通方法中可以省略 this 在静态方法当中不允许出现 this 关键字 super: 代表对当前对象的直接父类对象的引用 可以调用父类的非 private 成员变量和方法 s
阅读全文
摘要:重写:在子类中将父类的成员方法的名称保留,重新编写成员方法的实现内容,更改方法的访问权限,修改返回类型的为父类返回类型的子类。 一些规则: 重写发生在子类继承父类 参数列表必须完全与被重写方法的相同 重写父类方法时,修改方法的权限只能从小范围到大范围 返回类型与被重写方法的返回类型可以不相同,但是必
阅读全文
摘要:软件开发思想,先有面向过程,后有面向对象 在大型软件系统中,面向过程的做法不足,从而推出了面向对象 都是解决实际问题的思维方式 两者相辅相成,宏观上面向对象把握复杂事物的关系;微观上面向过程去处理 面向过程以实现功能的函数开发为主;面向对象要首先抽象出类、属性及其方法,然后通过实例化类、执行方法来完
阅读全文
摘要:类是对象的抽象;对象是类的具体实例 类是抽象的,不占用内存;对象是具体的,占用存储空间 类是一个定义包括在一类对象中的方法和变量的模板 来一道刷了进BAT的面试题?
阅读全文
摘要:作用: 在不确定参数的个数时,可以使用可变参数。 语法:参数类型... 特点: 每个方法最多只有一个可变参数 可变参数必须是方法的最后一个参数 可变参数可以设置为任意类型:引用类型,基本类型 参数的个数可以是 0 个、1 个或多个 可变参数也可以传入数组 无法仅通过改变 可变参数的类型,来重载方法
阅读全文
摘要:在内存中申请一块连续的空间 数组下标从 0 开始 每个数组元素都有默认值,基本类型的默认值为 0、0.0、false,引用类型的默认值为 null 数组的类型只能是一个,且固定,在申明时确定 数组的长度一经确定,无法改变,即定长。要改变长度,只能重新申明一个 来一道刷了进BAT的面试题?
阅读全文
摘要:结束本次循环,循环体后续的语句不执行 继续进行循环条件的判断,进行下一次循环体语句的执行 来一道刷了进BAT的面试题?
阅读全文
摘要:结束当前循环并退出当前循环体 结束 switch 语句 来一道刷了进BAT的面试题?
阅读全文
摘要:while 先判断后执行,第一次判断为 false,循环体一次都不执行 do-while 先执行后判断,最少执行1次 来一道刷了进BAT的面试题?
阅读全文
摘要:if-else-if-else: 适合分支较少 判断条件类型不单一 支持取 boolean 类型的所有运算 满足条件即停止对后续分支语句的执行 switch: 适合分支较多 判断条件类型单一,JDK 1.7 之前仅支持 int 和 enum,JDK 1.7 之后多支持了 String 没有 brea
阅读全文
摘要:等级低到高: byte <char <short <int <long <float <double 自动转换:运算过程中,低级可以自动向高级转换 强制转换:高级需要强制转换为低级,可能会丢失精度 规则: = 右边先自动转换成表达式中最高级的数据类型,再进行运算 = 左边数据类型级别 > 右边数据类
阅读全文
摘要:2 <<3 位运算符 <<,是将一个数左移 n 位,相当于乘以了 2 的 n 次方 一个数乘以 8 只要将其左移 3 位即可 CPU 直接支持位运算,效率最高 补充:当这个数接近Java基本整数类型的最大值时,左移位运算可能出现溢出,得出负值。 来一道刷了进BAT的面试题?
阅读全文
摘要:| 逻辑或,| 两边的表达式都会进行运算 整数的或运算符 || 短路或,|| 左边的表达式结果为 true 时,|| 右边的表达式不参与计算 package constxiong.interview; /** * 测试 | || * @author ConstXiong */ public clas
阅读全文
摘要:& 逻辑与,& 两边的表达式都会进行运算 整数的位运算符 && 短路与,&& 左边的表达式结果为 false 时,&& 右边的表达式不参与计算 package constxiong.interview; /** * 测试 & && * @author ConstXiong */ public cla
阅读全文
摘要:作用:都是给变量 i 加 1,相当于 i = i + 1; 区别: i++ 先运算后家 1 ++i 先加 1 再运算 package constxiong.interview; /** * 测试 ++i 和 i++ * @author ConstXiong * @date 2019-10-17 13
阅读全文
摘要:基本数据类型 byte:1个字节,8位 short:2个字节,16位 int:4个字节,32位 long:8个字节,64位 float:4个字节,32位 double:8个字节,64位 boolean:官方文档未明确定义,依赖于 JVM 厂商的具体实现。逻辑上理解是占用 1位,但是实际中会考虑计算机
阅读全文
摘要:单行注释,形式:"//" 多行注释,不允许嵌套,形式:"/*...*/" 文档注释,常用于类和方法的注释,形式:"/**...*/" package constxiong.interview; /** * 文档注释 * @author ConstXiong * @date 2019-10-17 12
阅读全文
摘要:JDK 是 JAVA 程序开发时用的开发工具包,包含 Java 运行环境 JRE JDk、JRE 内部都包含 JAVA虚拟机 JVM JVM 包含 Java 应用程序的类的解释器和类加载器等 来一道刷了进BAT的面试题?
阅读全文
摘要:Java Runtime Environment(Java运行环境)的缩写 包含 JVM 标准实现及 Java 核心类库,这些是运行 Java 程序的必要组件 是 Java 程序的运行环境,并不是一个开发环境,没有包含任何开发工具(如编译器和调试器) 是运行基于 Java 语言编写的程序所不可缺少的
阅读全文
摘要:1、Java Development Kit(Java 开发工具包)的缩写。用于 java 程序的开发,提供给程序员使用 2、使用 Java 语言编程都需要在计算机上安装一个 JDK 3、JDK 的安装目录 5 个文件夹、一个 src 类库源码压缩包和一些说明文件 bin:各种命令工具, java
阅读全文
摘要:Java Virtual Machine(Java虚拟机)的缩写 实现跨平台的最核心的部分 .class 文件会在 JVM 上执行,JVM 会解释给操作系统执行 有自己的指令集,解释自己的指令集到 CPU 指令集和系统资源的调用 JVM 只关注被编译的 .class 文件,不关心 .java 源文件
阅读全文
摘要:J2SE:Standard Edition(标准版) ,包含 Java 语言的核心类。如IO、JDBC、工具类、网络编程相关类等。从JDK 5.0开始,改名为Java SE。 J2EE:Enterprise Edition(企业版),包含 J2SE 中的类和企业级应用开发的类。如web相关的serv
阅读全文
摘要:使用引用取代了指针,指针的功能强大,但是也容易造成错误,如数组越界问题。 拥有一套异常处理机制,使用关键字 throw、throws、try、catch、finally 强制类型转换需要符合一定规则 字节码传输使用了加密机制 运行环境提供保障机制:字节码校验器->类装载器->运行时内存布局->文件访
阅读全文
摘要:.java 源文件要先编译成与操作系统无关的 .class 字节码文件,然后字节码文件再通过 Java 虚拟机解释成机器码运行。 .class 字节码文件面向虚拟机,不面向任何具体操作系统。 不同平台的虚拟机是不同的,但它们给 JDK 提供了相同的接口。 Java 的跨平台依赖于不同系统的 Java
阅读全文
摘要:实现 Cloneable 接口,重写 clone() 方法。 不实现 Cloneable 接口,会报 CloneNotSupportedException 异常。 package constxiong.interview; /** * 测试克隆 * @author ConstXiong * @dat
阅读全文
摘要:复制一个 Java 对象 浅拷贝:复制基本类型的属性;引用类型的属性复制,复制栈中的变量 和 变量指向堆内存中的对象的指针,不复制堆内存中的对象。 深拷贝:复制基本类型的属性;引用类型的属性复制,复制栈中的变量 和 变量指向堆内存中的对象的指针和堆内存中的对象。 来一道刷了进BAT的面试题?
阅读全文
摘要:方法需要 return 引用类型,但又不希望自己持有引用类型的对象被修改。 程序之间方法的调用时参数的传递。有些场景为了保证引用类型的参数不被其他方法修改,可以使用克隆后的值作为参数传递。 来一道刷了进BAT的面试题?
阅读全文
摘要:序列化:将 Java 对象转换成字节流的过程。 反序列化:将字节流转换成 Java 对象的过程。 当 Java 对象需要在网络上传输 或者 持久化存储到文件中时,就需要对 Java 对象进行序列化处理。 序列化的实现:类实现 Serializable 接口,这个接口没有需要实现的方法。实现 Seri
阅读全文
摘要:JDK 动态代理 CGLib 动态代理 使用 Spring aop 模块完成动态代理功能 来一道刷了进BAT的面试题?
阅读全文
摘要:动态代理:在运行时,创建目标类,可以调用和扩展目标类的方法。 Java 中实现动态的方式: JDK 中的动态代理 Java类库 CGLib 应用场景: 统计每个 api 的请求耗时 统一的日志输出 校验被调用的 api 是否已经登录和权限鉴定 Spring的 AOP 功能模块就是采用动态代理的机制来
阅读全文
摘要:Java 反射,就是在运行状态中。 获取任意类的名称、package信息、所有属性、方法、注解、类型、类加载器等 获取任意对象的属性,并且能改变对象的属性 调用任意对象的方法 判断任意一个对象所属的类 实例化任意一个类的对象 Java 的动态就体现在这。通过反射我们可以实现动态装配,降低代码的耦合度
阅读全文
摘要:isExecutable:文件是否可以执行 isSameFile:是否同一个文件或目录 isReadable:是否可读 isDirectory:是否为目录 isHidden:是否隐藏 isWritable:是否可写 isRegularFile:是否为普通文件 getPosixFilePermissi
阅读全文
摘要:1、概念 存在于Java类的内部的Java类。 2、分类 成员内部类 格式 class OuterClass { class InnerClass {} //成员内部类 } 编译之后会生成两个class文件:OuterClass.class和OuterClass$InnerClass.clas 方法
阅读全文
摘要:异常非常多,Throwable 是异常的根类。 Throwable 包含子类 错误-Error 和 异常-Exception 。 Exception 又分为 一般异常和运行时异常 RuntimeException。 运行时异常不需要代码显式捕获处理。 下图是常见异常类及其父子关系: Throwabl
阅读全文
摘要:catch 和 finally 语句块可以省略其中一个,否则编译会报错。 Java 自学指南 Java 面试题汇总PC端浏览【点这里】 Java知识图谱 Java 面试题汇总小程序浏览,扫二维码 所有资源资源汇总于公众号
阅读全文
摘要:throw: 表示方法内抛出某种异常对象 如果异常对象是非 RuntimeException 则需要在方法申明时加上该异常的抛出 即需要加上 throws 语句 或者 在方法体内 try catch 处理该异常,否则编译报错 执行到 throw 语句则后面的语句块不再执行 throws: 方法的定义
阅读全文
摘要:阅读书籍,是最快、最有效率的一种学习方式。 自学编程通过视频快速入了门,就需要阅读大量相关书籍,提高自己知识的深度,尤其是体系化。 说几点自己关于阅读书籍的认知: 不管工作多么繁忙,都应该抽出时间阅读书籍 培养英文阅读能力 入门最好找自己能看懂的书;提高最好那些经典和高评价的书来扣 阅读一本书,能吸
阅读全文
摘要:javap 是 Java class文件分解器,可以反编译,也可以查看 java 编译器生成的字节码等。 javap 命令参数 javap -help 用法: javap <options> <classes> 其中, 可能的选项包括: -help --help -? 输出此用法消息 -versio
阅读全文
摘要:<< 表示左移,不分正负数,低位补0 >> 表示右移,如果该数为正,则高位补0,若为负数,则高位补1 >>> 表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0 测试代码: System.out.println("16 <<1 : " + (16 <<1))
阅读全文
摘要:Java 语言中有四种权限访问控制符,能够控制类中成员变量和方法的可见性。 public 被 public 修饰的成员变量和方法可以在任何类中都能被访问到。 被 public 修饰的类,在一个 java 源文件中只能有一个类被声明为 public ,而且一旦有一个类为 public ,那这个 jav
阅读全文
摘要:抽象类可以有构造方法;接口中不能有构造方法。 抽象类中可以有普通成员变量;接口中没有普通成员变量。 抽象类中可以包含非抽象普通方法;接口中的所有方法必须都是抽象的。 抽象类中的抽象方法的访问权限可以是 public、protected 和 default;接口中的抽象方法只能是 public 类型的
阅读全文
摘要:不能,抽象类是被用于继承的,final修饰代表不可修改、不可继承的。 来一道刷了进BAT的面试题?
阅读全文
摘要:不一定。如 public abstract class TestAbstractClass { public static void notAbstractMethod() { System.out.println("I am not a abstract method."); } } 来一道刷了进
阅读全文
摘要:抽象类不能被实例化 抽象类可以有抽象方法,抽象方法只需申明,无需实现 含有抽象方法的类必须申明为抽象类 抽象类的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类 抽象方法不能被声明为静态 抽象方法不能用 private 修饰 抽象方法不能用 final 修饰 来一道刷了进BAT的面试题?
阅读全文
摘要:String 类的常用方法: equals:字符串是否相同 equalsIgnoreCase:忽略大小写后字符串是否相同 compareTo:根据字符串中每个字符的Unicode编码进行比较 compareToIgnoreCase:根据字符串中每个字符的Unicode编码进行忽略大小写比较 inde
阅读全文
摘要:使用 StringBuilder 或 StringBuffer 的 reverse 方法,本质都调用了它们的父类 AbstractStringBuilder 的 reverse 方法实现。(JDK1.8) 不考虑字符串中的字符是否是 Unicode 编码,自己实现。 递归 package const
阅读全文
摘要:Java 中,常用的对字符串操作的类有 String、StringBuffer、StringBuilder String : final 修饰,String 类的方法都是返回 new String。即对 String 对象的任何改变都不影响到原对象,对字符串的修改操作都会生成新的对象。 String
阅读全文
摘要:不属于。 Java 中 8 种基础的数据类型:byte、short、char、int、long、float、double、boolean 但是 String 类型却是最常用到的引用类型。 来一道刷了进BAT的面试题?
阅读全文
摘要:运行结果: -1 JDK 中的 java.lang.Math 类 round() :返回四舍五入,负 .5 小数返回较大整数,如 -1.5 返回 -1。 ceil() :返回小数所在两整数间的较大值,如 -1.5 返回 -1。 tail() :返回小数所在两整数间的较小值,如 -1.5 返回 -2。
阅读全文
摘要:replace方法:支持字符和字符串的替换。 public String replace(char oldChar, char newChar) public String replace(CharSequence target, CharSequence replacement) replaceA
阅读全文
摘要:对于 try 和 finally 至少一个语句块包含 return 语句的情况: finally 语句块会执行 finally 没有 return,finally 对 return 变量的重新赋值修改无效 try 和 finally 都包含return,return 值会以 finally 语句块
阅读全文
摘要:都可以修饰类、方法、成员变量。 static 可以修饰类的代码块,final 不可以。 static 不可以修饰方法内的局部变量,final 可以。 static 修饰表示静态或全局,被修饰的属性和方法属于类,可以用类名.静态属性 / 方法名 访问 static 修饰的代码块表示静态代码块,当 Ja
阅读全文
摘要:答案是不一定。存在很多特殊情况导致finally语句块不执行。如: 直接返回未执行到 finally 语句块 抛出异常未执行到 finally 语句块 系统退出未执行到 finally 语句块 等... 代码如下 public static String test() { String str =
阅读全文
摘要:final 表示最终的、不可改变的。用于修饰类、方法和变量。final 变量必须在声明时给定初值,只能读取,不可修改。final 方法也同样只能使用,不能重写,但能够重载。final 修饰的对象,对象的引用地址不能变,但对象的属性值可以改变 finally 异常处理的一部分,它只能用在 try/ca
阅读全文
摘要:final 语义是不可改变的。 被 final 修饰的类,不能够被继承。 被 final 修饰的成员变量必须要初始化,赋初值后不能再重新赋值(可以调用对象方法修改属性值)。对基本类型来说是其值不可变;对引用变量来说其引用不可变,即不能再指向其他的对象。 被 final 修饰的方法代表不能重写。 来一
阅读全文
摘要:首先,答案肯定是不一定。同时反过来 equals() 为true,hashCode() 也不一定相同。 类的 hashCode() 方法和 equals() 方法都可以重写,返回的值完全在于自己定义。 hashCode() 返回该对象的哈希码值;equals() 返回两个对象是否相等。 关于 has
阅读全文
摘要:1、什么是装箱?什么是拆箱? 装箱:基本类型转变为包装器类型的过程。 拆箱:包装器类型转变为基本类型的过程。 //JDK1.5之前是不支持自动装箱和自动拆箱的,定义Integer对象,必须 Integer i = new Integer(8); //JDK1.5开始,提供了自动装箱的功能,定义Int
阅读全文
摘要:1、值不同,使用 == 和 equals() 比较都返回 false 2、值相同 使用 == 比较: 基本类型 - 基本类型、基本类型 - 包装对象返回 true 包装对象 - 包装对象返回 false 缓存中取的包装对象比较返回 true(原因是 JVM 缓存部分基本类型常用的包装类对象,如 In
阅读全文
摘要:== 的作用: 基本类型:比较值是否相等 引用类型:比较内存地址值是否相等 equals() 的作用: 引用类型:默认情况下,比较内存地址值是否相等。可以按照需求逻辑,重写对象的 equals() 方法(重写 equals() 方法,一般须重写 hashCode() 方法)。 来一道刷了进BAT的面
阅读全文
摘要:JRE:Java Runtime Environment( java 运行时环境)。即java程序的运行时环境,包含了 java 虚拟机,java基础类库。 JDK:Java Development Kit( java 开发工具包)。即java语言编写的程序所需的开发工具包。JDK 包含了 JRE,
阅读全文
摘要:一门编程语言零基础,想要入门与求职,最快的方式是付钱参加培训班。原因很简单: 讲师都是 IT 企业出来的程序员,知道企业需要掌握什么样编程技能的人才 培训课程教了 n 遍,打磨的很适合不同基础的学员 与很多企业有合作关系,能给学完的同学做推荐 但是很贵,大几千、一万多的学费!我想大多数人是接受不起的
阅读全文
摘要:1、Java后端开发知识结构全景图 用了一周的业余时间,从自己的学习笔记、网络文章和大佬们的付费专栏里总结了一张 Java后端开发的知识结构树。 https://www.processon.com/view/link/5db980e6e4b002a645d315ef 知识点比较庞杂,估计真的学完、掌
阅读全文