欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

华为面试汇总

程序员文章站 2024-03-23 12:53:58
...

4个16位类型表示一个64位数据类型
比如用4个16位int可以表示一个64位的float,类型的前两个int表示整数部分后两个int表示小数部分,然后自己重载实现运算函数。

希尔排序与基数排序

了解各自的原理即可
希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法
希尔排序是把序列按一定间隔分组,对每组使用直接插入排序;随着间隔减小,一直到1,使得整个序列有序
最佳情况:T(n) = O(nlogn)。最坏情况:T(n) = O(n)。平均情况:T(n) = O(nlogn)。很不稳定

基数排序
基数排序可以看成是桶排序的扩展,以整数排序为例,主要思想是将整数按位数划分,准备 10 个桶,代表 0 - 9,根据整数个位数字的数值将元素放入对应的桶中,之后按照输入赋值到原序列中,依次对十位、百位等进行同样的操作,最终就完成了排序的操作。

时间复杂度:O(k*(n+m))
k 为关键字个数,本文的上述距离关键字为 2 个,分别是个位和十位;m 为 关键字的取值范围,本文的举例关键字取值范围 m 为 10(0 - 9);n 为待排序序列的元素数量。

Map接口的四种实现

Map接口是java定义的一种键值对映射的数据结构接口,其实现方式有四种:HashMap,LinkedHashMap,Hashtable,TreeMap。 
Collection接口分为List子接口和Set子接口。List的三个实现类分别为Arralist和linkedlist和Vector,set的实现类是HashSet和TreeSet

异常的分类

华为面试汇总
非检查异常(unckecked exception):Error 和 RuntimeException 以及他们的子类。javac在编译时,不会提示和发现这样的异常,不要求在程序处理这些异常

检查异常(checked exception):除了Error 和 RuntimeException的其它异常。javac强制要求程序员为这样的异常做预备处理工作(使用try…catch…finally或者throws)。在方法中要么用try-catch语句捕获它并处理,要么用throws子句声明抛出它,否则编译不会通过。

ConcurrentHashMap
1.7是一种数组和链表结构,分段锁的结构
1.8将原先table数组+单向链表的数据结构,变更为table数组+单向链表+红黑树的结构。采用table数组元素作为锁,从而实现了对每一行数据进行加锁,进一步减少并发冲突的概率。

利用jdbc进行查询的步骤?

JDBC接口让Java程序和JDBC驱动实现了松耦合,使得切换不同的数据库变得更加简单。
JDBC API使用Java的反射机制来实现Java程序和JDBC驱动的松耦合。随
A. 注册并加载驱动:使用Class.forName(),驱动类就会注册到DriverManager里面
B. 用DriverManager获取连接对象:调用DriverManager.getConnnection()方法并传入数据库连接的URL,用户名及密码,就能获取到连接对象。

PreparedStatement和Statement的区别?

Statement是JDBC中用来执行数据库SQL查询语句的接口。通过调用连接对象的getStatement()方法我们可以生成一个Statement对象。我们可以通过调用它的execute(),executeQuery(),executeUpdate()方法来执行静态SQL查询。
Statement的execute(String query)方法用来执行任意的SQL查询,如果查询的结果是一个ResultSet,这个方法就返回true。如果结果不是ResultSet,比如insert或者update查询,它就会返回false。
Statement的execute(String query)方法用来执行任意的SQL查询,如果查询的结果是一个ResultSet,这个方法就返回true。如果结果不是ResultSet,比如insert或者update查询,它就会返回false。
Statement的executeUpdate(String query)方法用来执行insert或者update/delete(DML)语句,

PreparedStatement对象代表的是一个预编译的SQL语句。用它提供的setter方法可以传入查询的变量。

由于PreparedStatement是预编译的,通过它可以将对应的SQL语句高效的执行多次,避免了SQL注入攻击,因此应当尽量的使用它。

JDBC的DataSource是什么,有什么好处?

DataSource即数据源,它是定义在javax.sql中的一个接口,跟DriverManager相比,它的功能要更强大。我们可以用它来创建数据库连接,除了能创建连接外,它还提供了如下的特性:
缓存PreparedStatement以便更快的执行
可以设置连接超时时间
提供日志记录的功能
ResultSet大小的最大阈值设置
DDL(数据定义语言,Data Definition Language)语句用来定义数据库模式。Create,Alter, Drop, Truncate, Rename都属
DML(数据操作语言,Data Manipulation Language)语句用来操作数据库中的数据。select, insert, update, delete, call等

基本数据类型和包装类的区别?为什么需要包装类?

java是面向对象的一种语言,将基本类型包装成对象就可以让有对象类的一些操作,虽然包装类对象是不能被继承。
包装类是对象,拥有方法和字段,对象的调用都是通过引用对象的地址;基本类型不是
声明方式不同:
基本数据类型不需要new关键字;
包装类型需要new在堆内存中进行new来分配内存空间

存储位置不同:
基本数据类型直接将值保存在值栈中;
包装类型是把对象放在堆中,然后通过对象的引用来调用他们
初始值不同:
int的初始值为 0 、 boolean的初始值为false
包装类型的初始值为null

使用方式不同:
基本数据类型直接赋值使用就好;
包装类型是在集合如 coolectionMap时使用

synchronized有多少种用法?锁方法和锁代码块哪种比较好?听说过锁类和锁实例吗?

synchronized锁的一些概念:有分为对象锁和类锁两种。对象锁(又称作实例锁),是指锁在某一个实例对象上的;类锁(又称作全局锁),是锁针对类上的,无论实例多少该类对象,都是共享该锁。

private synchronized void Sells()
{ ... }
相当于
private void Sells()
{
  synchronized (this) {
    ...
  }
}```
加锁的关键在于让多个线程在同一个对象上等待;this 是唯一的,但你每次访问时候 new Object() 都锁了一个新对象,去锁定的是对某个共享数据的读写,而不是“锁一段代码”
相关标签: 面试总结