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() 都锁了一个新对象,去锁定的是对某个共享数据的读写,而不是“锁一段代码”