面试题-数据库
1:MySQL1-1:为什么要使用数据库为了更高效且条例分明的存储数据,能够更迅速和方便地管理数据。
数据库可以结构化存储大量的数据信息,方便用户进行有效的检索和访问。
数据库可以有效地保证数据信息的一致性,完整性,降低数据冗余
数据库可以满足应用的共享和安全方面的要求,把数据放在数据库中在很多情况下也是出于安全的考虑。
数据库技术能够方便智能化地分析,产生新的有用信息。
1-2: 什么是 SQL?
SQL 指结构化查询语言,全称是 Structured Query Language。
SQL 让您可以访问和处理数据库,包括数据插入、查询、更新和删除。
SQL 在 1986 年成为 ANSI(American National Standards Institute 美国国家标准化组织)的一项标准,在 1987 年成为国际标准化组织(ISO)标准。
1-3:什么是 MySQL?MySQL 是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
2:关系型数据库与非关系型数据库2-1:非关系型数据库和关系型数 ...
面试题-计算机网络
1:各层协议1-1:OSI 与 TCP/IP 各层结构和功能,以及相应的协议
转至OSI 与 TCP/IP 各层结构和功能,以及相应的协议
功能:
应用层:针对特定应用的协议,为应用程序提供服务并规定应用程序中通信相关的细节。包括文件传输、电子邮件、远程登录等协议。
表示层:将来自下一层的数据转换为上层能够处理的格式。负责数据转换、格式化、文本压缩等。
会话层:负责建立和断开通信连接(数据流动的逻辑通路),以及数据的分割等数据传输相关的管理。
传输层:管理两个节点之间的数据传输。
网络层:地址管理和路由选择。
数据链路层:互联设备之间传送和识别帧。
物理层:以二进制形式在在物理媒体上传输数据。
协议:(1)应用层:TELNET、FTP、TFTP、SMTP、SNMP、HTTP、BOOTP、DHCP、DNS、SSH(2)表示层:文本:ASCII,EBCDIC;图形:TIFF,JPEG,GIF,PICT;声音:MIDI,MPEG,QUICKTIME(3)会话层:NFS、SQL、RPC 、X-WINDOWS、ASP(APPTALK 会话协议)、SCP(4)传输层:TCP、UDP、S ...
面试题-JVM
1:JVM1-1:JVM1.8 新特性在 1.7 之前在 (JDK1.2 ~ JDK6) 的实现中,HotSpot 使用永久代实现方法区,而在 1.8 之后方法区被彻底移除了,而使用元空间取而代之,方法区位于堆内存中,而元空间使用的是本地内存。元空间存储的是类的元数据,常量池还是在堆内存中。
1-2:JDK1.8 默认垃圾回收器使用 java -XX:+PrintCommandLineFlags -version 命令查看
1234-XX:InitialHeapSize=266668608 -XX:MaxHeapSize=4266697728 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGCjava version "1.8.0_201"Java(TM) SE Runtime Environment (build 1.8.0_201-b09 ...
面试题-并发
1:进程1-1:什么是进程进程是程序的一次执行过程,进程是程序运行和资源分配的基本单位。
1-2:进程的状态多进程和多线程都分为五个阶段
创建
就绪
运行
阻塞
死亡
1-2-1:进程的状态变迁
1-3:什么是 PCB存放进程的管理和控制信息的数据结构称为进程控制块。它是进程管理和控制的最重要的数据结构,每一个进程均有一个 PCB,在创建进程时,建立 PCB,伴随进程运行的全过程,直到进程撤消而撤消。
1-3-1:PCB 具体包含什么信息呢?
进程标识符 name
进程当前状态 status
进程相应的程序和数据地址
进程资源清单
进程优先级 priority
CPU 现场保护区 cpustatus
进程同步与通信机制
进程所在队列 PCB 的连接字
与进程有关的其他信息
1-3-2:多个 PCB 是如何组织的呢?
线性表方式线性表方式将所有进程控制块的首地址连续存储在一整块内存空间中,操作系统每次查找目标进程时,只需要遍历这张表,就可以找到相应的进程控制块,进而控制目标进程。
索引表方式索引表方式可以看做是线性表方式的“改进版”,它根据当前各个进程不同的执行状态,分别建立就绪索 ...
面试题-序列化
1:Java 序列化与反序列化是什么序列化是将对象转换为可传输格式的过程。 是一种数据的持久化手段。一般广泛应用于网络传输,RMI 和 RPC 等场景中。
反序列化是序列化的逆操作。
序列化是将对象的状态信息转换为可存储或传输的形式的过程。一般是以字节码或 XML 格式传输。而字节码或 XML 编码格式可以还原为完全相等的对象。这个相反的过程称为反序列化。
2:为什么需要序列化与反序列化在 Java 中,我们可以通过多种方式来创建对象,并且只要对象没有被回收我们都可以复用该对象。但是,我们创建出来的这些 Java 对象都是存在于 JVM 的堆内存中的。只有 JVM 处于运行状态的时候,这些对象才可能存在。一旦 JVM 停止运行,这些对象的状态也就随之而丢失了。
但是在真实的应用场景中,我们需要将这些对象持久化下来,并且能够在需要的时候把对象重新读取出来。Java 的对象序列化可以帮助我们实现该功能。
3:Java 对象如何实现序列化与反序列化
实现 Java.io.Serializable接口。
实现Externalizable接口
3-1:如何实现序列化
在 Java 中,只要一个 ...
面试题-常用类
1:枚举1-1:enum 线程安全因为枚举类的实例都是静态常量,而静态属性都是在类加载之后就初始化。当一个 Java 类第一次被真正使用到的时候静态资源被初始化、Java 类的加载和初始化过程都是线程安全的。所以,创建一个 enum 类型是线程安全的。
1-2: switch 是否可用于 String 类型的判断可以,实际上会将 String 转为 hashcode,再通过 equals 判断是否相等。
2:时间类2-1:SimpDateFormat 是线程不安全的类,如何改为线程安全因为 SimpDateFormat 内部有一个 Calendar 类的引用,多线程或者设为静态属性会共用这个引用,导致处理时会出现错误。
加锁
使用 ThreadLocal
DateUtils
使用 jdk1.8 的 DateTimeFormatter 代替。
3:Object 类3-1:Object 类有哪些方法
getClass()
hashCode()
equals()
clone()
toString()
notify()
notifyAll()
wait()
finalize()
3-1- ...
面试题-String
1:String 数据结构1-1:String 为什么是 final 的?
为了实现字符串池
为了线程安全
为了实现 HashCode 的不变性
1-2:String 的内部属性String 内部其实就是一个 char 数组。
1private final char value[];
1-3:String 的常用方法
charAt()
indexOf()
replace()
subString()
…
1-4:subString 原理通过传入的参数构建一个新的 String 对象并返回这个对象。
12345678910public String subString(int beginIndex) { if (beginIndex < 0) { throw new StringIndexOutOfBoundsException(beginIndex); } int subLen = value.length - beginIndex; if (subLen < 0) { thro ...
面试题-IO
1:IO 流
Byte(字节)是计算机操作数据的最小单位由 8 位 bit 组成 取值(-128-127)
Char(字符)是用户的可读写的最小单位,在 Java 里面由 16 位 bit 组成 取值(0-65535)
1-1:为何还要有字符流在各种编码中,一个英文字符就是一个字节。如果只有英文就不会有问题,但是中文一般会占据多个字节。比如 Java 标准采用的 Unicode 编码中就占用两个字节,UTF-8 中占用三个字节,如果不知道字符编码,一次读取一个字节,可能就会将一个字符的多个字节分割开,导致乱码。
字符流是由 Java 虚拟机将字节转换得到的,问题就出在这个过程还算是非常耗时,并且,如果我们不知道编码类型就很容易出现乱码问题。所以, I/O 流就干脆提供了一个直接操作字符的接口,方便我们平时对字符进行流操作。如果音频文件、图片等媒体文件用字节流比较好,如果涉及到字符的话使用字符流比较好。
1-2:字节流和字符流区别
字节流操作的基本单位为字节,字符流操作的基本单元为 Unicode 单元。
字节流默认不使用缓冲区,字符流使用缓冲区
字节流通常用处理二进制数据,实际上 ...
面试题-集合
1:Collection 集合框架2:并发集合框架List,Set,Queue。
3:HashMap3-1:HashMap 的数据结构数组+链表,链表容量为 9 时转化为红黑树,扩容时小于等于 6 退化为链表。
3-2:链表插入法3-2-1:头插法12node.next = head;head = node;
2-2-2:尾插法12tail.next = node;tail = node;
3-2-3:扩容死循环问题jdk1.8 以前链表扩容是加入到链表首,而 1.8 是加入到链表尾,已经不会出现这个问题。
3-3:红黑树的引入3-3-1:HashMap 为什么要树化?在最坏的情况下,查询效率从 O(1)变为线性的 O(n),而红黑树就是为了解决这个问题。红黑树能保证最坏情况也有 O(logn)的时间复杂度。
3-3-2:HashMap 树化门槛及作用链表长度大于 8 就会进行树化,是为了保证最坏情况的时间复杂度。
3-3-3:为什么不把链表全部换为红黑树只有数据很多的情况下才需要红黑树,因为红黑树所消耗的资源和链表更大,而时间消耗也不会差太多。
3-3-4:为什么是使用红黑树而不 ...
面试题-Java基础
1:Java 特性1-1:Java 特点
简单性
面向对象
分布式
健壮性
安全性
体系结构中立
可移植性
解释型
高性能
多线程
动态性
1-2:JVM\JRE\JDK\JIT
JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环境和运行环境。
JRE:Java Runtime Environment 的简称,Java 运行环境,为 Java 的运行提供了所需环境。
JVM:Java Virtual Machine,Java 虚拟机。
JIT:Just-In-Time Compiler,即时编译器。
JDK 包含 JRE 和编译器 Javac,还包含很多 Java 程序调试和分析的工具。JRE(Java 运行时环境)包含虚拟机但是不包含编译器。简单来说:如果需要运行 Java 程序,只需安装 JRE ,如果需要编写 Java 程序,则需要安装 JDK。
1-3:变量的初始化顺序
父类静态代码块
子类静态代码块
父类成员代码块
父类构造函数
子类成员代码块
子类构造函数
静态代码块和非静态代码块按顺序加载。
1-4:⾯向过程性 ...