java面试_基础

String类为什么是final的

  1. 为了实现字符串池
  2. 为了线程安全
  3. 为了实现String可以创建HashCode不可变性

Java 中方法的参数传递,是值传递 还是 引用传递?

Java语言的方法调用只支持参数的值传递

  1. 基本类型的数据作为参数传递的是值
  2. 数组和集合类型数据传递的是地址值
  3. 对象类型的数据传递的是对象的地址值

解释单例模式,写一个单例模式

单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的一个类只有一个实例。即一个类只有一个对象实例

请你说说int和Integer的区别

int属于基本数据类型,
Integer属于引用数据类型,
int的初始值是0,integer的初始值是null,
integer是int的包装类,属于面向对象思维编程,创建Integer需要使用new的方式为其进行内存分配

String/StringBuffer/StringBuilder 他们的区别

String是不可改变的对象。
每次改变其实都是创建了一个新的对象,然后将指针指向新的String对象,所以经常改变内容的字符串尽量不要用String,
因为每次都会生成新的对象,对系统性能有影响
StringBuffer是(线程安全的)可以改变的对象,一般来讲速度稍快于String对象。
StringBuilder是(线程不安全的)可改变的对象,提供与StringBuffer兼容的API,单线程推荐使用,速度比StringBuffer快

线程创建启动的方式都有哪些

三种:

  1. 继承Thread类
    继承、重写run()、new MyThread().start();
  2. 实现Runnable接口
    实现、重写run()、new Thread(t,”名字”).start();
    3.使用Callable和Future创建线程
    实现callable接口,重写call()方法

2、3优缺点:多线程共享同一个target对象,创建的多个线程可以共享线程类的实例变量。
实现callable接口,重写call()方法

说说多线程并发怎么处理

请说说ArrayList与LinkedList的区别

共性
ArrayList与LinkedList都是List接口的实现类,因此都实现了List的所有未实现的方法,只是实现的方式有所不同。
区别
List接口的实现方式不同
ArrayList实现了List接口,以数组的方式来实现的,因此对于快速的随机取得对象的需求,使用ArrayList实现执行效率上会比较好。
LinkedList是采用链表的方式来实现List接口的,因此在进行insert和remove动作时效率要比ArrayList高。适合用来实现Stack(堆栈)与Queue(队列)。

Set 和List 的区别

set和list都是集合接口
简要说明
set --其中的值不允许重复,无序的数据结构
list --其中的值允许重复,因为其为有序的数据结构

ArraysList 初始容量JDK1.6与JDK1.8有什么区别

在jdk1.6中的确是为10,
然而在1.8中,如果只是new ArrayList() ,容量其实是0,

请说说HashSet的实现原理

HashSet概述:
HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素
HashSet的实现:
对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet 的实现比较简单,相关HashSet的操作,基本上都是直接调用底层HashMap的相关方法来完成

请说说你常用的集合框架

请说说Hashtable的实现原理

采用Entry数组+链表的方式实现

递归和循环有什么区别?

递归是函数体中调用自己,如果不加控制,将无休止的调用自己,直到堆栈溢出。
循环是反复执行某一段区域内的代码,如果不加控制,就会形成死循环。
所以不管是递归还是循环,都要设定一定的条件,以结束递归或循环。
实际问题中,有一些问题是递归的,这样的问题使用递归程序解决感觉会自然些,程序也会简单些,但是,递归要经常调用函数,开销(内存、时间)大,有些问题就不适宜使用,循环不需要调用自身,甚至可以不调用函数,效率高,不过,要将递归问题改成非递归,可能就要动动脑筋

Jdk1.8的新特性有哪些

  1. Lambda表达式
  2. 函数式接口
  3. 方法引用和构造器调用
  4. Stream API
  5. 接口中的默认方法和静态方法
  6. 新时间日期API

事务的特性有哪些

原子性(Atomicity):
操作这些指令时,要么全部执行成功,要么全部不执行。只要其中一个指令执行失败,所有的指令都执行失败,数据进行回滚,回到执行指令前的数据状态。
一致性(Consistency):
事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定
隔离性(Isolation):
隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离
持久性(Durability):当事务正确完成后,它对于数据的改变是永久性的。

PreparedStatement和Statement的区别

Statement执行不带参数的简单SQL语句,并返回它所生成结果的对象,每次执行SQL语句时,数据库都要编译该sql语句
PreparedStatement用来执行带参数的预编译的SQL语句
PreparedStatement的优点:

  1. 效率高
  2. 代码可读性和可维护性好
  3. 安全性好

使用连接池和不使用连接池的区别

在数据量很小的情况下,并且做好数据库连接的释放.是可以的.
为什么要用连接池:
访问数据库时,比较费时的就是建立一条稳定的连接.
也许你查询一次数据库花的时间是2ms,而建立一个数据库连接的时间是200ms.
使用数据库连接池的好处就是将连接缓存起来,用的时候直接拿,而不需要每次都重新连接.
一定程度上提高的效率.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值