Java技术面试问题小结

简介: Java技术面试问题小结
1 ArrayList和linkedList的区别

Array(数组)是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的。Array获取数据的时间复杂度是O(1),但是要删除数据却是开销很大,因为这需要重排数组中的所有数据, (因为删除数据以后, 需要把后面所有的数据前移),缺点: 数组初始化必须指定初始化的长度, 否则报错。


List—是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式,它继承Collection。List有两个重要的实现类:ArrayList和LinkedList


ArrayList: 可以看作是能够自动增长容量的数组,因为它的底层的实现是Array, 数组扩容实现。ArrayList在初始化的时候指定长度肯定是要比不指定长度的性能好很多, 这样不用重复的申请空间,复制数组, 销毁老的分配空间了。


LinkList是一个双链表,在添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于ArrayList.当然,这些对比都是指数据量很大或者操作很频繁。另外,链表不需要连续的空间,大不确定。


总结:同样查找, ArrayList和LinkedList的时间复杂度都是O(N), 但是数组要比链表快。因为数组的连续内存, 会有一部分或者全部数据一起进入到CPU缓存, 而链表还需要在去内存中根据上下游标查找, CPU缓存比内存块太多。


2 Oracle SQL优化:

  1. 使用EXPLAIN PLAN分析SQL语句
  2. 采用临时表,比如使用with as语句
  3. 使用parellet并行查询
  4. 选择最优效率的表名顺序,Oracle的解析器按照从右到左的顺序处理from字句中的表名,所以必须选择将记录条数最少的表作为基础表放在from字句的最后面
  5. 合理使用索引,提高效率,并同时避免索引失效


(1)索引对不等号和NOT的限制:记住,索引只能告诉你什么存在于表中,而不能告诉你什么不存在于表中


(2)索引对函数的限制,避免在索引列上使用计算 注意: 对在WHERE子句中经常要使用函数时,应该建立基于函数的索引,且只有当查询语句包含该函数或者表达式时,基于函数的索引才会被调用。


(3)避免在索引列上使用IS NULL和IS NOT NULL:一般对要建立索引的列不要设置为可空,如果确实含有空值,建议使用默认值代替空值.


(4)注意通配符%的影响


(5)避免改变索引列的类型:当比较不同数据类型的数据时, ORACLE自动对列进行简单的类型转换.


  1. 对于一些联合索引,一定要按照索引顺序进行查询,确保使用索引的第一列,否则不会走索引。


  1. where子句的连接顺序:ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾


3 设计模式:


对于模式,我的看法就是在开发过程中发现或是预见变化,然后用类而不是方法去封装变化。


我在项目中遇到的设计模式:工厂模式(消息中心kafka不同的topic对应不同的线程池对象,就是在运用工程模式)、策略模式(其实就是面向对象多态的运用,风控系统不同的风险维度采用不同的处理逻辑,采用的就是策略模式)、装饰者模式(风控大屏,由于业务会对大屏的展示内容会经常发生变动,所以这时采用装饰者模式方便后期变动调整)、facade模式、单例模式,还有一些比较熟悉的,代理模式、原型模式等。


相关文章
|
6天前
|
负载均衡 NoSQL 算法
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
这篇文章是关于Java面试中Redis相关问题的笔记,包括Redis事务实现、集群方案、主从复制原理、CAP和BASE理论以及负载均衡算法和类型。
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
|
4天前
|
存储 缓存 网络协议
复盘女朋友面试4个月的Java基础题
这篇文章是关于Java基础面试题的复盘,涵盖了HashMap原理、对象序列化作用等高频面试问题,并强调了Java基础知识的重要性。
复盘女朋友面试4个月的Java基础题
|
6天前
|
存储 NoSQL Java
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
这篇文章是关于Java面试中的分布式架构问题的笔记,包括分布式架构下的Session共享方案、RPC和RMI的理解、分布式ID生成方案、分布式锁解决方案以及分布式事务解决方案。
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
|
5天前
|
Java
Java BasePooledObjectFactory 对象池化技术
Java BasePooledObjectFactory 对象池化技术
9 1
|
6天前
|
缓存 NoSQL Redis
一天五道Java面试题----第九天(简述MySQL中索引类型对数据库的性能的影响--------->缓存雪崩、缓存穿透、缓存击穿)
这篇文章是关于Java面试中可能会遇到的五个问题,包括MySQL索引类型及其对数据库性能的影响、Redis的RDB和AOF持久化机制、Redis的过期键删除策略、Redis的单线程模型为何高效,以及缓存雪崩、缓存穿透和缓存击穿的概念及其解决方案。
|
6天前
|
存储 关系型数据库 MySQL
一天五道Java面试题----第八天(怎么处理慢查询--------->简述Myisam和innodb的区别)
这篇文章是关于Java面试中关于数据库性能优化和MySQL特性的五个问题,包括处理慢查询、ACID特性保证、MVCC概念、MySQL主从同步原理以及MyISAM和InnoDB存储引擎的区别。
|
6天前
|
算法 关系型数据库 MySQL
一天五道Java面试题----第七天(mysql索引结构,各自的优劣--------->事务的基本特性和隔离级别)
这篇文章是关于MySQL的面试题总结,包括索引结构的优劣、索引设计原则、MySQL锁的类型、执行计划的解读以及事务的基本特性和隔离级别。
|
5天前
|
NoSQL Java 数据库
2022年整理最详细的java面试题、掌握这一套八股文、面试基础不成问题[吐血整理、纯手撸]
这篇文章是一份详尽的Java面试题总结,涵盖了从面向对象基础到分布式系统设计的多个知识点,适合用来准备Java技术面试。
|
5天前
|
算法 关系型数据库 MySQL
一天五道Java面试题----第七天(mysql索引结构,各自的优劣--------->事务的基本特性和隔离级别)
这篇文章是关于MySQL的面试题总结,包括索引结构的优劣、索引设计原则、MySQL锁的类型、执行计划的解读以及事务的基本特性和隔离级别。
|
5天前
|
存储 设计模式 安全
Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
5 0