华为Java岗面试八股文整理(完整版)

内容分享2小时前发布
10 0 0

1.连接数据库的配置和操作 加载 JDBC 驱动程序 提供 JDBC 连接的 URL 创建数据库的连接 需要向 java.sql.DriverManager 请求并获得 Connection 对象 创建一个 Statement 对象 执行 SQL 语句 关闭 JDBC 对象

2.创建对象的四种方式?1.使用 new 关键字创建对象 2.通过反射的方式 3.通过 clone 的方式 j4.通过反序列化的方式

3.接口与抽象类的区别?一个类只能继承一个抽象类,但可以实现多个接口 抽象类可以有构造器,但接口不能有构造器 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的 抽象类中的抽象方法的访问类型可以是 public,protected 和默认类型,但接口中的抽象方法只能是 public 类型的 抽象类中的变量的访问类型可以任意,但接口中定义的变量只能是 public static final 类型

4.==与 equals 的区别?基本数据类型:比较的值是否相等;引用数据类型:如 String,==比较的是引用是否指向同一块内存;euqals 被重写了,比较的是引用指向内存中的值是否相等

#后端 #面试 #Java #每天一个知识点5.String、StringBuffer 和 StringBuilder 的区别?String 大小固定,不可变 StringBuffer 大小可变,线程安全(有锁),同步,效率低,适用于多线程,低并发 StringBuilder 大小可变,线程不安全(无锁),不同步,效率高,适用于单线程,高并发

6.List 问题汇总 ArrayList 底层数组,在查找元素的时候效率高(每个元素都有对应的索引),线程非安全,不同步 LinkedList 基于双向链表,在插入和删除元素的时候效率高(链表不需要内存移位)线程非安全,不同步 Vector 线程安全,同步,操作与 ArrayList 类似

7.HashMap 和 HashTable 的区别?(1)hashMap 同步,hashTable 不同步,都非安全 (2)hashTable 的 key 和 value 都不允许 null,hashMap 允许 (3)HashTable 使用 Enumeration 进行遍历,HashMap 使用 Iterator 进行遍历 (4)HashTable 直接使用对象的 hashCode,hashmap 重新计算 hash 值

8.介绍泛型 泛型:数据类型参数化 泛型类:类名{} 泛型接口:接口名{} 泛型方法:访问修饰符 返回值类型 方法名称(){}

<>不确定的数据类型,是实参

受限泛型< extends E>,只能填写 E 或者 E 的子类,确定上限 < super E>,只能填写 E 或者 E 的父类,确定下限 泛型擦拭:.java–>.class,泛型会被消除掉,这个过程叫做泛型擦拭。(JVM 不认识泛型) 泛型的作用:1.提高 java 程序的类型安全 2.消除强制类型转换 3.提高了代码的复用性

9.Throw 和 Throws 的区别?Throw 用来抛出一个具体的异常类型。Throws 用来声明一个方法可能产生的所有异常,不做任何处理而是将异常往上传,谁调用就抛给谁。

10.进程和线程的区别 进程是系统进行资源分配和调度的最小单位 线程是 CPU 调度和分派的基本单位 一个进程包含一个或多个线程 进程在执行过程中拥有独立的内存单元,而多个线程共享内存 线程执行开销小,但不利于资源的管理和保护;进程则相反 线程有6种状态:新建,运行(可运行),阻塞,等待,计时等待和终止。

11.创建线程的四种方式 继承 Thread 类,重写 run 方法 实现 Runnable 接口 实现 Callable 接口

12.Callable 和 Runnable 的区别:Runnable 接口不会返回结果和抛出异常,Callable 接口可以返回结果和抛出异常。通过线程池来创建线程

13.sleep 和 wait 的区别 sleep()方法是 Thread 类的静态方法,而 wait()方法是 object 类的方法 调用 sleep()方法并不会释放锁。而 wait()方法会 wait()方法必须放在同步方法和同步块中使用,sleep()方法则可以放在任何地方使用。sleep()方法必须捕获异常,而 wait()不需要捕获异常

14.synchronized 底层实现原理?方法和代码块被 synchronized 修饰后,同一时刻只有一个方法可以进入到临界区 synchronized 会阻止其它线程获取当前对象的监控锁,这样 synchronized 修饰的代码块就无法被其它线程访问,也就无法并发执行 synchronized 还会保证所有操作结果都会直接刷到主存中,从而保证了内存可见性

15.volatile 底层实现原理?volatile 只能修饰变量,不能修饰方法和代码块 volatile 保证可见性 使用 volatile 之后,变量在被修改后可以立即同步到主内存,变量每次在使用之前都从主内存拷贝。所以其他线程可以立马看到变量的更新

volatile 保证有序性。volatile 可以禁止指令重排,CPU 会严格按照代码顺序执行。volatile 不能保证原子性

原子性是指一个操作是不可中断的,要全部执行完成,要不就都不执行 CPU 有时间片的概念,当一个线程时间片耗尽之后,就会失去 CPU 使用权。所以在多线程场景下,由于时间片在线程间轮换,就会发生原子性问题。

16.线性安全的 Vector:只要是关键性的操作,方法前面都加了 synchronized 关键字,来保证线程的安全性 Hashtable:使用了 synchronized 关键字,所以相较于 Hashmap 是线程安全的。ConcurrentHashMap:使用锁分段技术确保线性安全,是一种高效但是线程安全的集合。Stack:栈,也是线程安全的,继承于 Vector。

17.线性不安全的 Hashmap Arraylist LinkedList HashSet TreeSet TreeMap

18.Synchronized 和 Lock 的区别?Synchronized 是关键字,Lock 是接口。Synchronized 会自动释放锁。Lock 异常时不会自动释放锁,所以需要在 finally 中释放锁。Synchronized 是非中断锁,必须等待线程执行完成释放锁,Lock 是可中断锁。Synchronized 在竞争不激烈的情况下性能更好。Lock 功能更强劲灵活,竞争激烈时性能较好

19.实现线程同步的方式 1.使用 Synchronized 关键字修饰的同步方法方法或同步代码块实现线程同步 2.使用 volitile 关键字修饰的特殊域变量实现线程同步 3.使用重入锁实现线程同步 4.使用局部变量实现线程同步

20.Sql 优化 查询使用适当的索引 避免空判断语句 避免左侧模糊查询 避免使用 in 用 exists 取代 避免使用 or 和 不等于条件查询 避免在 where 子句中对字段进行表达式操作和函数操作 尽可能的使用 varchar 取代 char 避免使用”*”返回所有,可以用具体的字段取代 上述会导致数据库引擎放弃索引进行全表扫描

21.什么是索引及其类型与种类?索引是表的目录,是数据库中专门用于协助用户快速查询数据的一种数据结构(就像新华字典的目录一样) 类型:BTREE、RTREE、HASH、FULLTEXT 种类:普通索引、唯一索引、主键索引、全文索引、组合索引 哪些情况适合使用索引?数据量较大的表、常常查询的字段、主键和做外键的字段、常常与其他表连接的表中连接字段、常常做排序的字段、常常用在 where 子句、order by、group by 的字段

22.哪些情况不适合使用索引?查询很少使用的情况不适合建立索引;常常增、删、改的字段不适合建立索引;当数据过少的时候不适合建立索引;定义为 text, image 和 bit 数据类型的列不适合建立索引

23.聚集索引和非聚集索引的区别?聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个 聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续 聚集索引物理存储按照索引排序,而非聚集索引物理存储不按照索引排序

24.什么是事务及其属性?事务包含一个或多个操作,这些操作如果都成功就全部提交;如果有一条失败,则全部回滚 事务的属性:原子性:事务开始后的所有操作要么全部执行,要么全部回滚 一致性:事务开始前和结束后,数据库的完整性没有被破坏,数据处于一致状态 隔离性:并发的不同事务之间不能相互干扰 隔离级别:读未提交、读已提交、可重复读、串行化 持久性:事务提交后,对数据库的改变是永久的

25.事务的并发问题?脏读:事务 A 读取了事务 B 更新的数据,然后 B 回滚操作,那么 A 读取到的数据是脏数据 不可重复读 :事务 A 多次读取同一数据,事务 B 在事务 A 多次读取的过程中,对数据作了更新并提交,导致事务 A 多次读取同一数据时,结果不一致 幻读 :事务 A 将数据库分数改为等级,事务 B 在此期间插入一条分数数据,插入的这条数据没有改过来 乐观锁和悲观锁 悲观锁:在操作数据之前把数据锁住,然后再对数据读写,在释放锁之前其他不能对该数据进行操作 乐观锁:在操作数据时不会对操作的数据进行加锁,只有到数据提交的时候才通过一种机制来验证数据是否存在冲突(一般实现方式是通过加版本号然后进行版本号的对比方式实现)

26.TCP 和 UDP 的区别 TCP 是基于连接的可靠的传输协议,UDP 是基于广播的不可靠的传输协议. TCP 保证数据的正确性,同时保证数据的顺序,UDP 有可能丢包,同时不保证数据的顺序 TCP 是面向字节流的,他把数据看成一串无结构的二进制数据,UDP 是通过报文传递数据的 TCP 是点对点连接的,只能是一对一的,UDP 可以是一对一的,一对多的,多对一的,多对多的

27.GET 提交和 POST 提交的区别 GET 将表单数据追加在提交地址的后面进行提交,提交速度快,提交的数据有大小的限制 POST 将表单数据作为一个整体的数据块进行提交,提交速度慢,提交的数据大小没有限制

28.重定向和转发的区别 重定向:重新发起一次新的请求/响应来完成页面的跳转,不能带数据,浏览器的 URL 会发生变化 转发:使用现有的请求/响应来完成页面的跳转,可以带数据,浏览器的 URL 不会发生变化 常用的选择器 id 选择器、元素选择器、类选择器、后代选择器、子元素选择器、兄弟选择器

29.常见错误代码及含义 400 错误请求 403 禁止访问 404 无法找到文件 408 请求超时 500 服务器错误

30.JSP 九大内置对象、七大动作与三大指令 内置对象:request、response、session、application、out、page、pageContext、config 和 exception 动作:jsp:include、jsp:useBean 、jsp:setProperty、jsp:getProperty、jsp:forward、jsp:plugin、jsp:param 指令:Page 指令、include 指令、taglib 指令 排序算法

n:数据规模;k:”桶”的个数;In-place:占用常数内存,不占用额外内存;Out-place:占用额外内存;1.冒泡排序

2.[选择排序]

3.[插入排序]

4.希尔排序 5.归并排序 6.快速排序

7.堆排序 8.计数排序 9.桶排序 10.基数排序 JVM GC 回收机制

HashMap 的底层及扩容机制?31.Spring 介绍及优点:Spring 一个轻量级的 Java 开发框架,Spring 的核心是控制反转(IoC)和面向切面(AOP)

1.方便解耦,简化开发 (高内聚低耦合) Spring 就是一个大工厂(容器),可以将所有对象的创建和依赖关系,交给 Spring 容器管理 2.支持 AOP Spring 提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能 3.方便集成各种优秀框架 Spring 不排斥各种优秀的开源框架

32.IOC:Spring 作为容器,负责生成 bean 的实例和对 bean 的依赖注入 三种注入方法:构造方法注入、setter 方法注入、注解注入

33.AOP:Aop 是面向切面编程,是通过动态代理的方式,在不改变原有代码的情况下对类的功能进行无限的增强 主要的功能有:添加日志,事务,权限 特点是:降低模块间的耦合度、提高可维护性

34.SpringMVC 介绍 springMVC,说一下优点 springmvc 是一个基于 MVC 的轻量级 Web 框架,能够完成前后台的交互 Model 业务层 = Service 层 + Dao 层 View 显示层 表现层 前台的页面表现(jsp 页面) Controller 层 控制层 前台页面与后台代码之间的数据的交互(Servlet)

优点:[耦合性]低、与 Spring 框架集成、简化 JSP 开发、支持 Restful 风格

35.MyBatis 介绍 MyBatis ORM 框架 DAO 层 对象关系映射框架,以面对对象的方式完成对数据库的操作 类 –> 表 属性 –> 字段 实例 –> 记录 MyBatis 中#和 KaTeX parse error: Expected ‘EOF’, got ‘#’ at position 5: 区别?#{}是预编译处理,防止 SQL 注…{}是字符串替换。

36.注解 注解是说明程序的,给计算机看的。JDk 1.5之后的新特性,可以声明在包、类、字段、方法、局部变量、方法参数等前面,用来对这些元素进行说明、注释

作用:安全性思考 减少内存泄露 减少程序员工作量。

© 版权声明

相关文章

暂无评论

none
暂无评论...